]> Pileus Git - ~andy/linux/blobdiff - arch/x86/kvm/irq.c
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6
[~andy/linux] / arch / x86 / kvm / irq.c
index cf17ed52f6fbbe33563668604df0fa814f3cf493..96dfbb6ad2a9d2b1db365ef0c007f9d7056d9dda 100644 (file)
@@ -24,6 +24,7 @@
 
 #include "irq.h"
 #include "i8254.h"
+#include "x86.h"
 
 /*
  * check if there are pending timer events
@@ -48,6 +49,9 @@ int kvm_cpu_has_interrupt(struct kvm_vcpu *v)
 {
        struct kvm_pic *s;
 
+       if (!irqchip_in_kernel(v->kvm))
+               return v->arch.interrupt.pending;
+
        if (kvm_apic_has_interrupt(v) == -1) {  /* LAPIC */
                if (kvm_apic_accept_pic_intr(v)) {
                        s = pic_irqchip(v->kvm);        /* PIC */
@@ -67,6 +71,9 @@ int kvm_cpu_get_interrupt(struct kvm_vcpu *v)
        struct kvm_pic *s;
        int vector;
 
+       if (!irqchip_in_kernel(v->kvm))
+               return v->arch.interrupt.nr;
+
        vector = kvm_get_apic_interrupt(v);     /* APIC */
        if (vector == -1) {
                if (kvm_apic_accept_pic_intr(v)) {