From: Zhang Xiantao <[EMAIL PROTECTED]>
Date: Mon, 3 Dec 2007 16:51:23 +0800
Subject: [PATCH] kvm: qemu: using kvm_arch_post_kvm_run to hold
x86-specific code.
    In this patch, it use kvm_arch_post_kvm_run to hold
    x86-specific code for post_kvm_run;
Signed-off-by: Zhang Xiantao <[EMAIL PROTECTED]>
---
 qemu/qemu-kvm-x86.c |   14 ++++++++++++++
 qemu/qemu-kvm.c     |   12 ++----------
 2 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/qemu/qemu-kvm-x86.c b/qemu/qemu-kvm-x86.c
index d5fe6c2..e79e4ad 100644
--- a/qemu/qemu-kvm-x86.c
+++ b/qemu/qemu-kvm-x86.c
@@ -23,6 +23,7 @@ extern kvm_context_t kvm_context;
 static int kvm_has_msr_star;
 
 static int lm_capable_kernel;
+extern __thread CPUState *vcpu_env;
 
 int kvm_arch_qemu_create_context(void)
 {
@@ -573,4 +574,17 @@ void kvm_arch_pre_kvm_run(void *opaque, int vcpu)
        kvm_set_cr8(kvm_context, vcpu, cpu_get_apic_tpr(env));
 }
 
+void kvm_arch_post_kvm_run(void *opaque, int vcpu)
+{
+    CPUState *env = vcpu_env;
+    cpu_single_env = env;
+
+    env->eflags = kvm_get_interrupt_flag(kvm_context, vcpu)
+       ? env->eflags | IF_MASK : env->eflags & ~IF_MASK;
+    env->ready_for_interrupt_injection
+       = kvm_is_ready_for_interrupt_injection(kvm_context, vcpu);
+
+    cpu_set_apic_tpr(env, kvm_get_cr8(kvm_context, vcpu));
+    cpu_set_apic_base(env, kvm_get_apic_base(kvm_context, vcpu));
+}
 #endif
diff --git a/qemu/qemu-kvm.c b/qemu/qemu-kvm.c
index 669720c..6ec33fe 100644
--- a/qemu/qemu-kvm.c
+++ b/qemu/qemu-kvm.c
@@ -28,7 +28,7 @@ kvm_context_t kvm_context;
 extern int smp_cpus;
 
 pthread_mutex_t qemu_mutex = PTHREAD_MUTEX_INITIALIZER;
-static __thread CPUState *vcpu_env;
+__thread CPUState *vcpu_env;
 
 static sigset_t io_sigset, io_negsigset;
 
@@ -110,17 +110,9 @@ static int try_push_interrupts(void *opaque)
 
 static void post_kvm_run(void *opaque, int vcpu)
 {
-    CPUState *env = vcpu_env;
 
     pthread_mutex_lock(&qemu_mutex);
-    cpu_single_env = env;
-    env->eflags = kvm_get_interrupt_flag(kvm_context, vcpu)
-       ? env->eflags | IF_MASK : env->eflags & ~IF_MASK;
-    env->ready_for_interrupt_injection
-       = kvm_is_ready_for_interrupt_injection(kvm_context, vcpu);
-
-    cpu_set_apic_tpr(env, kvm_get_cr8(kvm_context, vcpu));
-    cpu_set_apic_base(env, kvm_get_apic_base(kvm_context, vcpu));
+    kvm_arch_post_kvm_run(opaque, vcpu);
 }
 
 static int pre_kvm_run(void *opaque, int vcpu)
-- 
1.5.1.2

Attachment: 0007-kvm-qemu-using-kvm_arch_post_kvm_run-to-hold-x86-s.patch
Description: 0007-kvm-qemu-using-kvm_arch_post_kvm_run-to-hold-x86-s.patch

-------------------------------------------------------------------------
SF.Net email is sponsored by: The Future of Linux Business White Paper
from Novell.  From the desktop to the data center, Linux is going
mainstream.  Let it simplify your IT future.
http://altfarm.mediaplex.com/ad/ck/8857-50307-18918-4
_______________________________________________
kvm-devel mailing list
kvm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kvm-devel

Reply via email to