From: Zhang Xiantao <[EMAIL PROTECTED]>
Date: Mon, 3 Dec 2007 17:16:34 +0800
Subject: [PATCH] kvm: qemu: Using kvm_arch_try_push_interrupts to hold
arch-sepcific stuff.
In this patch, kvm_arch_try_push_interrupts is used to handle
arch-specific
operations for try_push_interrupts.
Signed-off-by: Zhang Xiantao <[EMAIL PROTECTED]>
---
 qemu/qemu-kvm-x86.c |   21 +++++++++++++++++++++
 qemu/qemu-kvm.c     |   17 +----------------
 qemu/qemu-kvm.h     |    2 ++
 3 files changed, 24 insertions(+), 16 deletions(-)

diff --git a/qemu/qemu-kvm-x86.c b/qemu/qemu-kvm-x86.c
index bb11395..f2583a2 100644
--- a/qemu/qemu-kvm-x86.c
+++ b/qemu/qemu-kvm-x86.c
@@ -595,4 +595,25 @@ int kvm_arch_has_work(CPUState *env)
        return 1;
     return 0;
 }
+
+int kvm_arch_try_push_interrupts(void *opaque)
+{
+    CPUState *env = cpu_single_env;
+    int r, irq;
+
+    if (env->ready_for_interrupt_injection &&
+        (env->interrupt_request & CPU_INTERRUPT_HARD) &&
+        (env->eflags & IF_MASK)) {
+            env->interrupt_request &= ~CPU_INTERRUPT_HARD;
+           irq = cpu_get_pic_interrupt(env);
+           if (irq >= 0) {
+               r = kvm_inject_irq(kvm_context, env->cpu_index, irq);
+               if (r < 0)
+                   printf("cpu %d fail inject %x\n", env->cpu_index,
irq);
+           }
+    }
+
+    return (env->interrupt_request & CPU_INTERRUPT_HARD) != 0;
+}
+
 #endif
diff --git a/qemu/qemu-kvm.c b/qemu/qemu-kvm.c
index ba02f49..91fa55f 100644
--- a/qemu/qemu-kvm.c
+++ b/qemu/qemu-kvm.c
@@ -90,22 +90,7 @@ void kvm_apic_init(CPUState *env)
 
 static int try_push_interrupts(void *opaque)
 {
-    CPUState *env = cpu_single_env;
-    int r, irq;
-
-    if (env->ready_for_interrupt_injection &&
-        (env->interrupt_request & CPU_INTERRUPT_HARD) &&
-        (env->eflags & IF_MASK)) {
-            env->interrupt_request &= ~CPU_INTERRUPT_HARD;
-           irq = cpu_get_pic_interrupt(env);
-           if (irq >= 0) {
-               r = kvm_inject_irq(kvm_context, env->cpu_index, irq);
-               if (r < 0)
-                   printf("cpu %d fail inject %x\n", env->cpu_index,
irq);
-           }
-    }
-
-    return (env->interrupt_request & CPU_INTERRUPT_HARD) != 0;
+    return kvm_arch_try_push_interrupts(opaque);
 }
 
 static void post_kvm_run(void *opaque, int vcpu)
diff --git a/qemu/qemu-kvm.h b/qemu/qemu-kvm.h
index a6d2ed0..fceb173 100644
--- a/qemu/qemu-kvm.h
+++ b/qemu/qemu-kvm.h
@@ -35,7 +35,9 @@ void kvm_arch_load_regs(CPUState *env);
 int kvm_arch_qemu_init_env(CPUState *cenv);
 int kvm_arch_halt(void *opaque, int vcpu);
 void kvm_arch_pre_kvm_run(void *opaque, int vcpu);
+void kvm_arch_post_kvm_run(void *opaque, int vcpu);
 int kvm_arch_has_work(CPUState *env);
+int kvm_arch_try_push_interrupts(void *opaque);
 
 #define ALIGN(x, y)  (((x)+(y)-1) & ~((y)-1))
 #define BITMAP_SIZE(m) (ALIGN(((m)>>TARGET_PAGE_BITS), HOST_LONG_BITS)
/ 8)
-- 
1.5.1.2

Attachment: 0009-kvm-qemu-Using-kvm_arch_try_push_interrupts-to-hol.patch
Description: 0009-kvm-qemu-Using-kvm_arch_try_push_interrupts-to-hol.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