Signed-off-by: Amit Shah <[email protected]>
---
qemu/qemu-kvm-x86.c | 37 ++-----------------------------------
qemu/target-i386/cpu.h | 3 +++
qemu/target-i386/helper.c | 8 ++++----
3 files changed, 9 insertions(+), 39 deletions(-)
diff --git a/qemu/qemu-kvm-x86.c b/qemu/qemu-kvm-x86.c
index aa36be8..510692b 100644
--- a/qemu/qemu-kvm-x86.c
+++ b/qemu/qemu-kvm-x86.c
@@ -451,39 +451,6 @@ void kvm_arch_save_regs(CPUState *env)
}
}
-static void host_cpuid(uint32_t function, uint32_t *eax, uint32_t
*ebx,
- uint32_t *ecx, uint32_t *edx)
-{
- uint32_t vec[4];
-
-#ifdef __x86_64__
- asm volatile("cpuid"
- : "=a"(vec[0]), "=b"(vec[1]),
- "=c"(vec[2]), "=d"(vec[3])
- : "0"(function) : "cc");
-#else
- asm volatile("pusha \n\t"
- "cpuid \n\t"
- "mov %%eax, 0(%1) \n\t"
- "mov %%ebx, 4(%1) \n\t"
- "mov %%ecx, 8(%1) \n\t"
- "mov %%edx, 12(%1) \n\t"
- "popa"
- : : "a"(function), "S"(vec)
- : "memory", "cc");
-#endif
-
- if (eax)
- *eax = vec[0];
- if (ebx)
- *ebx = vec[1];
- if (ecx)
- *ecx = vec[2];
- if (edx)
- *edx = vec[3];
-}
-
-
static void do_cpuid_ent(struct kvm_cpuid_entry *e, uint32_t function,
CPUState *env)
{
@@ -497,7 +464,7 @@ static void do_cpuid_ent(struct kvm_cpuid_entry
*e, uint32_t function,
if (function == 0x80000001) {
uint32_t h_eax, h_edx;
- host_cpuid(function, &h_eax, NULL, NULL, &h_edx);
+ cpu_x86_host_cpuid(function, &h_eax, NULL, NULL, &h_edx);
// long mode
if ((h_edx & 0x20000000) == 0 || !lm_capable_kernel)
@@ -519,7 +486,7 @@ static void do_cpuid_ent(struct kvm_cpuid_entry
*e, uint32_t function,
if (function == 0) {
uint32_t bcd[3];
- host_cpuid(0, NULL, &bcd[0], &bcd[1], &bcd[2]);
+ cpu_x86_host_cpuid(0, NULL, &bcd[0], &bcd[1], &bcd[2]);
e->ebx = bcd[0];
e->ecx = bcd[1];
e->edx = bcd[2];
diff --git a/qemu/target-i386/cpu.h b/qemu/target-i386/cpu.h
index 0f518f8..816832d 100644
--- a/qemu/target-i386/cpu.h
+++ b/qemu/target-i386/cpu.h
@@ -746,6 +746,9 @@ void cpu_x86_set_a20(CPUX86State *env, int
a20_state);
void cpu_x86_cpuid(CPUX86State *env, uint32_t index,
uint32_t *eax, uint32_t *ebx,
uint32_t *ecx, uint32_t *edx);
+void cpu_x86_host_cpuid(uint32_t function, uint32_t *eax, uint32_t
*ebx,
+ uint32_t *ecx, uint32_t *edx);
+
static inline int hw_breakpoint_enabled(unsigned long dr7, int index)
{
diff --git a/qemu/target-i386/helper.c b/qemu/target-i386/helper.c
index 1c5b85c..6faa521 100644
--- a/qemu/target-i386/helper.c
+++ b/qemu/target-i386/helper.c
@@ -1377,8 +1377,8 @@ static void breakpoint_handler(CPUState *env)
}
#endif /* !CONFIG_USER_ONLY */
-static void host_cpuid(uint32_t function, uint32_t *eax, uint32_t
*ebx,
- uint32_t *ecx, uint32_t *edx)
+void cpu_x86_host_cpuid(uint32_t function, uint32_t *eax, uint32_t
*ebx,
+ uint32_t *ecx, uint32_t *edx)
{
#if defined(CONFIG_KVM) || defined(USE_KVM)
uint32_t vec[4];
@@ -1436,7 +1436,7 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t
index,
* actuall cpu, and say goodbye to migration between
different vendors
* is you use compatibility mode. */
if (kvm_enabled())
- host_cpuid(0, NULL, ebx, ecx, edx);
+ cpu_x86_host_cpuid(0, NULL, ebx, ecx, edx);
break;
case 1:
*eax = env->cpuid_version;
@@ -1528,7 +1528,7 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t
index,
if (kvm_enabled()) {
uint32_t h_eax, h_edx;
- host_cpuid(0x80000001, &h_eax, NULL, NULL, &h_edx);
+ cpu_x86_host_cpuid(0x80000001, &h_eax, NULL, NULL,
&h_edx);
/* disable CPU features that the host does not support */
--
1.5.4.3
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html