qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [PATCH] qemu-kvm: use the proper CPU vendor if -cpu is spec


From: George Yunaev
Subject: [Qemu-devel] [PATCH] qemu-kvm: use the proper CPU vendor if -cpu is specified with -enable-kvm
Date: Tue, 11 Mar 2014 11:35:15 -0700
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.3.0

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 <address@hidden>
---
--- 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);
---

reply via email to

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