diff options
author | Robert Mustacchi <rm@joyent.com> | 2011-06-03 10:50:00 -0700 |
---|---|---|
committer | Robert Mustacchi <rm@joyent.com> | 2011-06-03 10:50:00 -0700 |
commit | c52f5bc0b1638576d0f75fe6fdebab7bc86801a7 (patch) | |
tree | fd77b8d8f0dc23541941d7beec12444003326a8f | |
parent | f22c1e1c63b31666bc23c4217800af2b50f11ad3 (diff) | |
download | illumos-kvm-c52f5bc0b1638576d0f75fe6fdebab7bc86801a7.tar.gz |
HVM-277 Some irq code should be in kvm_irq.c
-rw-r--r-- | kvm.c | 44 | ||||
-rw-r--r-- | kvm_irq.c | 46 |
2 files changed, 46 insertions, 44 deletions
@@ -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) @@ -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) { |