diff mbox

[uq/master,V2] kvm: Add CPUID support for VIA CPU

Message ID BANLkTi=A_6-3fRcd+LYcznZuNKmKHEVB-Q@mail.gmail.com
State New
Headers show

Commit Message

BrillyWu May 30, 2011, 7:40 a.m. UTC
From: BrillyWu <brillywu@viatech.com.cn>

Hi, Jan
         I'm very sorry for these bugs in the patch. Now I have made a
new patch based on the
newest uq/master where the patch has been applied to fix these bugs,
is it feasible? If it is
not acceptable, should I re-generate a patch based on previous
uq/master, or what else?


Signed-off-by: BrillyWu<brillywu@viatech.com.cn>
Signed-off-by: KaryJin<karyjin@viatech.com.cn>
---
 target-i386/cpu.h   |    4 ++++
 target-i386/cpuid.c |   18 +++++++++++-------
 target-i386/2 files changed, 15 insertions(+), 7 deletions(-)

Comments

Jan Kiszka May 30, 2011, 7:47 a.m. UTC | #1
On 2011-05-30 09:40, BrillyWu wrote:
> From: BrillyWu <brillywu@viatech.com.cn>
> 
> Hi, Jan
>          I'm very sorry for these bugs in the patch. Now I have made a
> new patch based on the
> newest uq/master where the patch has been applied to fix these bugs,
> is it feasible? If it is
> not acceptable, should I re-generate a patch based on previous
> uq/master, or what else?

A clean patch (which passed checkpatch...) against uq/master without the
broken version is required. We can't push a non-bisectable series upstream.

Jan
diff mbox

Patch

--- a/target-i386/cpu.h	2011-05-30 10:14:30.184533002 +0800
+++ b/target-i386/cpu.h	2011-05-30 10:41:45.704533001 +0800
@@ -441,6 +441,10 @@ 
 #define CPUID_VENDOR_AMD_2   0x69746e65 /* "enti" */
 #define CPUID_VENDOR_AMD_3   0x444d4163 /* "cAMD" */

+#define CPUID_VENDOR_VIA_1   0x746e6543 /* "Cent" */
+#define CPUID_VENDOR_VIA_2   0x48727561 /* "aurH" */
+#define CPUID_VENDOR_VIA_3   0x736c7561 /* "auls" */
+
 #define CPUID_MWAIT_IBE     (1 << 1) /* Interrupts can exit capability */
 #define CPUID_MWAIT_EMX     (1 << 0) /* enumeration supported */

--- a/target-i386/cpuid.c	2011-05-30 10:14:30.194533005 +0800
+++ b/target-i386/cpuid.c	2011-05-30 15:07:18.794532910 +0800
@@ -1051,14 +1051,18 @@  void cpu_x86_cpuid(CPUX86State *env, uin
                    uint32_t *ecx, uint32_t *edx)
 {
     /* test if maximum index reached */
-    if ((index & 0xC000000f) == index) {
-        /* Handle the Centaur's CPUID instruction. */
-        if (index > env->cpuid_xlevel2) {
-            index = env->cpuid_xlevel2;
+    if (index & 0x80000000) {
+        if (index > env->cpuid_xlevel) {
+            if (env->cpuid_xlevel2 > 0) {
+                /* Handle the Centaur's CPUID instruction. */
+                if (index > env->cpuid_xlevel2) {
+                    index = env->cpuid_xlevel2;
+                } else if (index < 0xC0000000) {
+                    index = env->cpuid_xlevel;
+                }
+            } else
+                index =  env->cpuid_xlevel;
         }
-    } else if (index & 0x80000000) {
-        if (index > env->cpuid_xlevel)
-            index = env->cpuid_level;
     } else {
         if (index > env->cpuid_level)
             index = env->cpuid_level;