Hello everyone,
This patch fixes the issue when -cpu specification is partially
ignored when -enable-kvm is specified. For example, when running:
qemu-system-x86_64 -cpu core2duo
on AMD machine, the CPU vendor is properly identified as
GenuineIntel. However when running:
qemu-system-x86_64 -cpu core2duo -enable-kvm
on the same AMD machine, the CPU vendor is now identified as
AuthenticAMD, despite the rest of CPU information (such as name)
being Intel-specific. This behavior breaks the attempts to emulate
Mac OS X on AMD CPU with kvm enabled.
This behavior is caused by the code in cpu_x86_register() which
copies the host CPU vendor into the emulated CPU when kvm is
enabled. While this makes sense for the qemu-emulated CPU, this
makes little sense when the user actually specified the -cpu. Not
sure if this behavior
The attached patch changes this behavior by only copying the
vendor CPU information from the host CPU when either the qemu32 or
qemu64 CPU is being used.
Signed-off-by: George Yunaev <gyunaev@ulduzsoft.com>
---
--- qemu.old/target-i386/cpu.c 2014-03-10 23:47:08.000000000 -0700
+++ qemu/target-i386/cpu.c 2014-03-10 23:47:32.433412520 -0700
@@ -1863,7 +1863,7 @@
const char *vendor = def->vendor;
char host_vendor[CPUID_VENDOR_SZ + 1];
- if (kvm_enabled()) {
+ if (kvm_enabled() && def->name[0] == 'q' &&
def->name[1] == 'e' && def->name[2] == 'm' &&
def->name[3] == 'u' ) {
uint32_t ebx = 0, ecx = 0, edx = 0;
host_cpuid(0, 0, NULL, &ebx, &ecx, &edx);
x86_cpu_vendor_words2str(host_vendor, ebx, edx, ecx);
---