qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] Re: [PATCH][SEABIOS] Make SMBIOS table pass MS SVVP test


From: Sebastian Herbszt
Subject: [Qemu-devel] Re: [PATCH][SEABIOS] Make SMBIOS table pass MS SVVP test
Date: Mon, 23 Nov 2009 19:15:55 +0100

Gleb Natapov wrote:
On Sun, Nov 22, 2009 at 09:41:26PM +0100, Sebastian Herbszt wrote:
Gleb Natapov wrote:
>On Sun, Nov 22, 2009 at 06:39:16PM +0100, Sebastian Herbszt wrote:
>>Gleb Natapov wrote:
>>>On Sun, Nov 22, 2009 at 05:51:41PM +0100, Sebastian Herbszt wrote:
>>>>Gleb Natapov wrote:
>>>>>Microsoft SVVP (Server Virtualization Validation Program) expects
>>>>>arbitrary SMBIOS field to have certain values otherwise it fails.
>>>>>We all want to make Microsoft happy don't we? So lets put values MS
>>>>>expects in there.
>>>>>
>>>>>Values modified by the patch:
>>>>>Type 0:
>>>>> Bit 2 of byte 2 must be 1
>>>>>Type 1:
>>>>> Manufacturer/product string should not be empty
>>>>>Type 3:
>>>>> Manufacturer string should not be empty
>>>>>Type 4:
>>>>> Processor manufacturer should no be empty
>>>>> Max/current CPU speed shouldn't be unknown
>>>>>Type 16:
>>>>> Memory should have error correction.
>>>>>
>>>>>Signed-off-by: Gleb Natapov <address@hidden>
>>>>>diff --git a/src/smbios.c b/src/smbios.c
>>>>>index f1b43f2..332bb4e 100644
>>>>>--- a/src/smbios.c
>>>>>+++ b/src/smbios.c
>>>>>@@ -96,7 +96,8 @@ smbios_init_type_0(void *start)
>>>>>    memset(p->bios_characteristics, 0, 8);
>>>>>    p->bios_characteristics[0] = 0x08; /* BIOS characteristics not 
supported */
>>>>>    p->bios_characteristics_extension_bytes[0] = 0;
>>>>>-    p->bios_characteristics_extension_bytes[1] = 0;
>>>>>+    /* Enable targeted content distribution. Needed for SVVP */
>>>>>+    p->bios_characteristics_extension_bytes[1] = 4;
>>>>>
>>>>>    if (!qemu_cfg_smbios_load_field(0, offsetof(struct smbios_type_0,
>>>>>                                                system_bios_major_release),
>>>>
>>>>Are the BIOS characteristics extension bytes valid if BIOS characteristics 
is not supported?
>>>I have no idea. SVVP test complains though.
>>
>>p->bios_characteristics[0] = 0x08; /* BIOS characteristics not supported */
>>
>>Can you retest with this line removed?
>>
>I will, but I don't expect different result. Why should I?

I would suggest to remove the line if it still does pass the test.

As a different patch. Also may be putting real info there instead of
just deleting the line?

Ok - sounds good if bios_characteristics gets proper system based values.

[snip]

>>>>>/* Type 4 -- Processor Information */
>>>>>@@ -198,7 +199,7 @@ smbios_init_type_4(void *start, unsigned int 
cpu_number)
>>>>>    p->socket_designation_str = 1;
>>>>>    p->processor_type = 0x03; /* CPU */
>>>>>    p->processor_family = 0x01; /* other */
>>>>>-    p->processor_manufacturer_str = 0;
>>>>>+    p->processor_manufacturer_str = 2;
>>>>>
>>>>>    u32 cpuid_signature, ebx, ecx, cpuid_features;
>>>>>    cpuid(1, &cpuid_signature, &ebx, &ecx, &cpuid_features);
>>>>>@@ -209,8 +210,8 @@ smbios_init_type_4(void *start, unsigned int 
cpu_number)
>>>>>    p->voltage = 0;
>>>>>    p->external_clock = 0;
>>>>>
>>>>>-    p->max_speed = 0; /* unknown */
>>>>>-    p->current_speed = 0; /* unknown */
>>>>>+    p->max_speed = 2000;
>>>>>+    p->current_speed = 2000;
>>>>>
>>>>>    p->status = 0x41; /* socket populated, CPU enabled */
>>>>>    p->processor_upgrade = 0x01; /* other */
>>>>>@@ -221,10 +222,10 @@ smbios_init_type_4(void *start, unsigned int 
cpu_number)
>>>>>
>>>>>    start += sizeof(struct smbios_type_4);
>>>>>
>>>>>-    memcpy((char *)start, "CPU  " "\0" "" "\0" "", 7);
>>>>>- ((char *)start)[4] = cpu_number + '0';
>>>>>+    memcpy((char *)start, "CPU  \0QEMU\0\0", 12);
>>>>>+    ((char *)start)[4] = cpu_number + '0';
>>>>>
>>>>>-    return start+7;
>>>>>+    return start+12;
>>>>>}
>>>>
>>>>Should the manufacturer not depend on the emulated cpu? At least VMware 
uses the output from
>>>>CPUID (GenuineIntel) ; tho my BIOS does just report "Intel".
>>>I what it to be something fictional. We support migration from Intel to
>>>AMD and back so this info is meaningless in virtualization environment.
>>
>>Does the system still report "GenuineIntel" if migrated from Intel to AMD 
host?
>>I don't see a problem reporting the emulated cpu vendor, since it's not 
supposed to change during
>>the lifetime of a VM, right?
>>
>Well, real system don't report cpuid value here why should we? It is
>QEMU and not intel or amd manufactured this CPU after all.

I don't think this argumentation brings us forward. After all i could argue for 
stopping using Intels
pci vendor id for the pci bridge since they didn't manufactured it either.

pci ids are different in that they are used to find driver for a device.
If there was a field in PCI config space to store device manufacturer
name it would be reasonable to put "QEMU" there.

This SMBIOS field describe CPU manufacturer and serves only informational
purpose. Look at /proc/cpuinfo on qemu VM. The model name reported there
is "QEMU Virtual CPU version 0.9.1" not some real value.

Actually mine has

vendor_id: GenuineIntel
model_name: Pentium II (Klamath)

Might be different on KVM tho (or if you specify -cpu). Beside if seabios is 
used with coreboot on a real
system the cpu vendor is not QEMU; nor is it on Bochs.

- Sebastian





reply via email to

[Prev in Thread] Current Thread [Next in Thread]