summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Mustacchi <rm@joyent.com>2011-06-03 10:50:00 -0700
committerRobert Mustacchi <rm@joyent.com>2011-06-03 10:50:00 -0700
commitc52f5bc0b1638576d0f75fe6fdebab7bc86801a7 (patch)
treefd77b8d8f0dc23541941d7beec12444003326a8f
parentf22c1e1c63b31666bc23c4217800af2b50f11ad3 (diff)
downloadillumos-kvm-c52f5bc0b1638576d0f75fe6fdebab7bc86801a7.tar.gz
HVM-277 Some irq code should be in kvm_irq.c
-rw-r--r--kvm.c44
-rw-r--r--kvm_irq.c46
2 files changed, 46 insertions, 44 deletions
diff --git a/kvm.c b/kvm.c
index 7df7a2e..58e3ab5 100644
--- a/kvm.c
+++ b/kvm.c
@@ -246,7 +246,6 @@ extern void kvm_mmu_sync_roots(struct kvm_vcpu *);
extern void kvm_mmu_flush_tlb(struct kvm_vcpu *);
extern void kvm_mmu_unload(struct kvm_vcpu *vcpu);
extern int kvm_pic_set_irq(void *, int, int);
-extern
/*
* Find the first cleared bit in a memory region.
@@ -5613,26 +5612,6 @@ out:
return (ret);
}
-/*
- * check if there is pending interrupt without intack.
- */
-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 */
- return (s->output);
- } else
- return (0);
- }
- return (1);
-}
@@ -5673,29 +5652,6 @@ page_address(page_t *page)
}
-/*
- * Read pending interrupt vector and intack.
- */
-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)) {
- s = pic_irqchip(v->kvm);
- s->output = 0; /* PIC */
- vector = kvm_pic_read_irq(v->kvm);
- }
- }
-
- return (vector);
-}
static void
inject_pending_event(struct kvm_vcpu *vcpu)
diff --git a/kvm_irq.c b/kvm_irq.c
index ec70d82..3e20edd 100644
--- a/kvm_irq.c
+++ b/kvm_irq.c
@@ -31,6 +31,7 @@
#include "kvm_iodev.h"
#include "kvm.h"
#include "irq.h"
+#include "kvm_lapic.h"
#include "kvm_ioapic.h"
/* XXX This should never exist */
@@ -51,6 +52,51 @@ kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu)
return (ret);
}
+/*
+ * check if there is pending interrupt without intack.
+ */
+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 */
+ return (s->output);
+ } else
+ return (0);
+ }
+ return (1);
+}
+
+/*
+ * Read pending interrupt vector and intack.
+ */
+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)) {
+ s = pic_irqchip(v->kvm);
+ s->output = 0; /* PIC */
+ vector = kvm_pic_read_irq(v->kvm);
+ }
+ }
+
+ return (vector);
+}
+
void
kvm_inject_pending_timer_irqs(struct kvm_vcpu *vcpu)
{