From 012f9b19ef3812884e207dc431571502de4cebce Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Wed, 24 Oct 2012 15:10:51 +0200 Subject: [PATCH] cpu: Add recently added cpu feature flags. Qemu has added some new feature flags. This patch adds them to libvirt. The new features are for the cpuid function 0x7 that takes an argument in the ecx register. Currently only 0x0 is used as the argument so I was lazy and I just clear the registers to 0 before calling cpuid. In future when there maybe will be some other possible arguments, we will need to improve the cpu detection code to take this into account. --- src/cpu/cpu_map.xml | 12 ++++++++++++ src/cpu/cpu_x86.c | 8 +++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/cpu/cpu_map.xml b/src/cpu/cpu_map.xml index affcce35ef..d059e2036b 100644 --- a/src/cpu/cpu_map.xml +++ b/src/cpu/cpu_map.xml @@ -142,6 +142,9 @@ + + + @@ -261,6 +264,15 @@ + + + + + + + + + diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c index 7cd67b8f77..e691c04a27 100644 --- a/src/cpu/cpu_x86.c +++ b/src/cpu/cpu_x86.c @@ -1539,7 +1539,10 @@ static inline void cpuidCall(struct cpuX86cpuid *cpuid) { # if __x86_64__ - asm("cpuid" + asm("xor %%ebx, %%ebx;" /* clear the other registers as some cpuid */ + "xor %%ecx, %%ecx;" /* functions may use them as additional */ + "xor %%edx, %%edx;" /* arguments */ + "cpuid;" : "=a" (cpuid->eax), "=b" (cpuid->ebx), "=c" (cpuid->ecx), @@ -1550,6 +1553,9 @@ cpuidCall(struct cpuX86cpuid *cpuid) * for global offset table on i386 with -fPIC */ asm("push %%ebx;" + "xor %%ebx, %%ebx;" /* clear the other registers as some cpuid */ + "xor %%ecx, %%ecx;" /* functions may use them as additional */ + "xor %%edx, %%edx;" /* arguments */ "cpuid;" "mov %%ebx, %1;" "pop %%ebx;" -- 2.39.5