#include <linux/export.h>
 #include <linux/kvm_host.h>
 
+#include "ioapic.h"
 #include "irq.h"
 #include "i8254.h"
 #include "x86.h"
 {
        return irqchip_in_kernel(kvm);
 }
+
+int kvm_vm_ioctl_get_irqchip(struct kvm *kvm, struct kvm_irqchip *chip)
+{
+       struct kvm_pic *pic = kvm->arch.vpic;
+       int r;
+
+       r = 0;
+       switch (chip->chip_id) {
+       case KVM_IRQCHIP_PIC_MASTER:
+               memcpy(&chip->chip.pic, &pic->pics[0],
+                       sizeof(struct kvm_pic_state));
+               break;
+       case KVM_IRQCHIP_PIC_SLAVE:
+               memcpy(&chip->chip.pic, &pic->pics[1],
+                       sizeof(struct kvm_pic_state));
+               break;
+       case KVM_IRQCHIP_IOAPIC:
+               kvm_get_ioapic(kvm, &chip->chip.ioapic);
+               break;
+       default:
+               r = -EINVAL;
+               break;
+       }
+       return r;
+}
+
+int kvm_vm_ioctl_set_irqchip(struct kvm *kvm, struct kvm_irqchip *chip)
+{
+       struct kvm_pic *pic = kvm->arch.vpic;
+       int r;
+
+       r = 0;
+       switch (chip->chip_id) {
+       case KVM_IRQCHIP_PIC_MASTER:
+               spin_lock(&pic->lock);
+               memcpy(&pic->pics[0], &chip->chip.pic,
+                       sizeof(struct kvm_pic_state));
+               spin_unlock(&pic->lock);
+               break;
+       case KVM_IRQCHIP_PIC_SLAVE:
+               spin_lock(&pic->lock);
+               memcpy(&pic->pics[1], &chip->chip.pic,
+                       sizeof(struct kvm_pic_state));
+               spin_unlock(&pic->lock);
+               break;
+       case KVM_IRQCHIP_IOAPIC:
+               kvm_set_ioapic(kvm, &chip->chip.ioapic);
+               break;
+       default:
+               r = -EINVAL;
+               break;
+       }
+       kvm_pic_update_irq(pic);
+       return r;
+}
 
 int kvm_pic_set_irq(struct kvm_kernel_irq_routing_entry *e, struct kvm *kvm,
                    int irq_source_id, int level, bool line_status);
 
+int kvm_vm_ioctl_get_irqchip(struct kvm *kvm, struct kvm_irqchip *chip);
+int kvm_vm_ioctl_set_irqchip(struct kvm *kvm, struct kvm_irqchip *chip);
+
 static inline int irqchip_split(struct kvm *kvm)
 {
        int mode = kvm->arch.irqchip_mode;
 
        return 0;
 }
 
-static int kvm_vm_ioctl_get_irqchip(struct kvm *kvm, struct kvm_irqchip *chip)
-{
-       struct kvm_pic *pic = kvm->arch.vpic;
-       int r;
-
-       r = 0;
-       switch (chip->chip_id) {
-       case KVM_IRQCHIP_PIC_MASTER:
-               memcpy(&chip->chip.pic, &pic->pics[0],
-                       sizeof(struct kvm_pic_state));
-               break;
-       case KVM_IRQCHIP_PIC_SLAVE:
-               memcpy(&chip->chip.pic, &pic->pics[1],
-                       sizeof(struct kvm_pic_state));
-               break;
-       case KVM_IRQCHIP_IOAPIC:
-               kvm_get_ioapic(kvm, &chip->chip.ioapic);
-               break;
-       default:
-               r = -EINVAL;
-               break;
-       }
-       return r;
-}
-
-static int kvm_vm_ioctl_set_irqchip(struct kvm *kvm, struct kvm_irqchip *chip)
-{
-       struct kvm_pic *pic = kvm->arch.vpic;
-       int r;
-
-       r = 0;
-       switch (chip->chip_id) {
-       case KVM_IRQCHIP_PIC_MASTER:
-               spin_lock(&pic->lock);
-               memcpy(&pic->pics[0], &chip->chip.pic,
-                       sizeof(struct kvm_pic_state));
-               spin_unlock(&pic->lock);
-               break;
-       case KVM_IRQCHIP_PIC_SLAVE:
-               spin_lock(&pic->lock);
-               memcpy(&pic->pics[1], &chip->chip.pic,
-                       sizeof(struct kvm_pic_state));
-               spin_unlock(&pic->lock);
-               break;
-       case KVM_IRQCHIP_IOAPIC:
-               kvm_set_ioapic(kvm, &chip->chip.ioapic);
-               break;
-       default:
-               r = -EINVAL;
-               break;
-       }
-       kvm_pic_update_irq(pic);
-       return r;
-}
-
 void kvm_arch_sync_dirty_log(struct kvm *kvm, struct kvm_memory_slot *memslot)
 {