summaryrefslogtreecommitdiff
path: root/kvm_ioapic.c
diff options
context:
space:
mode:
authorRobert Mustacchi <rm@joyent.com>2011-06-03 10:58:57 -0700
committerRobert Mustacchi <rm@joyent.com>2011-06-03 10:58:57 -0700
commit9d50cf8230354b464fe8df697eed20df04f08a84 (patch)
tree71719b4117a02658087706a980e7eae068aaaf10 /kvm_ioapic.c
parentc52f5bc0b1638576d0f75fe6fdebab7bc86801a7 (diff)
downloadillumos-kvm-9d50cf8230354b464fe8df697eed20df04f08a84.tar.gz
HVM-278 remove duplicate ioapic code
Diffstat (limited to 'kvm_ioapic.c')
-rw-r--r--kvm_ioapic.c64
1 files changed, 33 insertions, 31 deletions
diff --git a/kvm_ioapic.c b/kvm_ioapic.c
index 09c88f1..3e53bcf 100644
--- a/kvm_ioapic.c
+++ b/kvm_ioapic.c
@@ -41,32 +41,12 @@
#include "kvm_ioapic.h"
#include "irq.h"
-static int
-ioapic_deliver(struct kvm_ioapic *ioapic, int irq)
-{
- union kvm_ioapic_redirect_entry *entry = &ioapic->redirtbl[irq];
- struct kvm_lapic_irq irqe;
-
- irqe.dest_id = entry->fields.dest_id;
- irqe.vector = entry->fields.vector;
- irqe.dest_mode = entry->fields.dest_mode;
- irqe.trig_mode = entry->fields.trig_mode;
- irqe.delivery_mode = entry->fields.delivery_mode << 8;
- irqe.level = 1;
- irqe.shorthand = 0;
+static int ioapic_deliver(struct kvm_ioapic *, int);
-#ifdef CONFIG_X86
- /* Always delivery PIT interrupt to vcpu 0 */
- if (irq == 0) {
- irqe.dest_mode = 0; /* Physical mode. */
- /*
- * need to read apic_id from apic regiest since
- * it can be rewritten
- */
- irqe.dest_id = ioapic->kvm->bsp_vcpu->vcpu_id;
- }
-#endif
- return (kvm_irq_delivery_to_apic(ioapic->kvm, NULL, &irqe));
+struct kvm_ioapic *
+ioapic_irqchip(struct kvm *kvm)
+{
+ return (kvm->arch.vioapic);
}
static unsigned long
@@ -191,6 +171,34 @@ ioapic_write_indirect(struct kvm_ioapic *ioapic, uint32_t val)
}
}
+static int
+ioapic_deliver(struct kvm_ioapic *ioapic, int irq)
+{
+ union kvm_ioapic_redirect_entry *entry = &ioapic->redirtbl[irq];
+ struct kvm_lapic_irq irqe;
+
+ irqe.dest_id = entry->fields.dest_id;
+ irqe.vector = entry->fields.vector;
+ irqe.dest_mode = entry->fields.dest_mode;
+ irqe.trig_mode = entry->fields.trig_mode;
+ irqe.delivery_mode = entry->fields.delivery_mode << 8;
+ irqe.level = 1;
+ irqe.shorthand = 0;
+
+#ifdef CONFIG_X86
+ /* Always delivery PIT interrupt to vcpu 0 */
+ if (irq == 0) {
+ irqe.dest_mode = 0; /* Physical mode. */
+ /*
+ * need to read apic_id from apic regiest since
+ * it can be rewritten
+ */
+ irqe.dest_id = ioapic->kvm->bsp_vcpu->vcpu_id;
+ }
+#endif
+ return (kvm_irq_delivery_to_apic(ioapic->kvm, NULL, &irqe));
+}
+
int
kvm_ioapic_set_irq(struct kvm_ioapic *ioapic, int irq, int level)
{
@@ -464,9 +472,3 @@ kvm_set_ioapic(struct kvm *kvm, struct kvm_ioapic_state *state)
return (0);
}
-
-struct kvm_ioapic *
-ioapic_irqchip(struct kvm *kvm)
-{
- return (kvm->arch.vioapic);
-}