diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2012-05-24 12:14:50 +1000 |
---|---|---|
committer | Marcelo Tosatti <mtosatti@redhat.com> | 2012-06-01 20:06:53 -0300 |
commit | cdf5a1e7038a8bfe08598c9f8640190660334072 (patch) | |
tree | 6211bdf32a1455947b119bf9cd1ce59aa89e3a25 | |
parent | 0528dbe83085d6f727b985a7f9c9a4dfe817c757 (diff) |
Fix conditional build of various x86 specific bits
This adds/modifies ifdefs etc. and moves code to make sure that
x86-specific code doesn't get compiled on non-x86 platforms.
These changes all relate to code that is in the qemu-kvm tree and
not in the qemu tree.
The change from KVM_CAP_IRQCHIP to KVM_IRQCHIP_PIC_MASTER is because
the KVM_CAP_IRQCHIP symbol is defined on all platforms (though the
capability only exists on x86), whereas KVM_IRQCHIP_PIC_MASTER is
only defined on x86. (If a better symbol exists it could be used
instead.)
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
-rw-r--r-- | Makefile.target | 2 | ||||
-rwxr-xr-x | configure | 6 | ||||
-rw-r--r-- | hw/i8259.c | 6 | ||||
-rw-r--r-- | qemu-kvm-x86.c | 16 | ||||
-rw-r--r-- | qemu-kvm.c | 30 |
5 files changed, 40 insertions, 20 deletions
diff --git a/Makefile.target b/Makefile.target index 29eaa68c5..0d0baf4c9 100644 --- a/Makefile.target +++ b/Makefile.target @@ -80,7 +80,9 @@ endif libobj-$(TARGET_SPARC64) += vis_helper.o libobj-$(CONFIG_NEED_MMU) += mmu.o +ifeq ($(TARGET_BASE_ARCH), i386) libobj-$(CONFIG_KVM) += kvm-tpr-opt.o +endif libobj-$(TARGET_ARM) += neon_helper.o iwmmxt_helper.o ifeq ($(TARGET_BASE_ARCH), sparc) @@ -3579,8 +3579,10 @@ case "$target_arch2" in if test $kvm_cap_pit = "yes" ; then echo "CONFIG_KVM_PIT=y" >> $config_target_mak fi - if test $kvm_cap_device_assignment = "yes" ; then - echo "CONFIG_KVM_DEVICE_ASSIGNMENT=y" >> $config_target_mak + if test "$cpu" = "i386" -o "$cpu" = "x86_64" ; then + if test $kvm_cap_device_assignment = "yes" ; then + echo "CONFIG_KVM_DEVICE_ASSIGNMENT=y" >> $config_target_mak + fi fi fi esac diff --git a/hw/i8259.c b/hw/i8259.c index a9ea9c993..c5841c01e 100644 --- a/hw/i8259.c +++ b/hw/i8259.c @@ -635,7 +635,7 @@ static void pic_register(void) static void kvm_kernel_pic_save_to_user(PicState *s) { -#ifdef KVM_CAP_IRQCHIP +#ifdef KVM_IRQCHIP_PIC_MASTER struct kvm_irqchip chip; struct kvm_pic_state *kpic; @@ -666,7 +666,7 @@ static void kvm_kernel_pic_save_to_user(PicState *s) static int kvm_kernel_pic_load_from_user(PicState *s) { -#ifdef KVM_CAP_IRQCHIP +#ifdef KVM_IRQCHIP_PIC_MASTER struct kvm_irqchip chip; struct kvm_pic_state *kpic; @@ -701,8 +701,10 @@ static void kvm_i8259_set_irq(void *opaque, int irq, int level) { int pic_ret; if (kvm_set_irq(irq, level, &pic_ret)) { +#ifdef KVM_IRQCHIP_PIC_MASTER if (pic_ret != 0) apic_set_irq_delivered(); +#endif return; } } diff --git a/qemu-kvm-x86.c b/qemu-kvm-x86.c index a7981b177..f1db968c1 100644 --- a/qemu-kvm-x86.c +++ b/qemu-kvm-x86.c @@ -23,6 +23,22 @@ #include "kvm.h" #include "hw/apic.h" +int kvm_reinject_control(KVMState *s, int pit_reinject) +{ +#ifdef KVM_CAP_REINJECT_CONTROL + int r; + struct kvm_reinject_control control; + + control.pit_reinject = pit_reinject; + + r = kvm_ioctl(s, KVM_CHECK_EXTENSION, KVM_CAP_REINJECT_CONTROL); + if (r > 0) { + return kvm_vm_ioctl(s, KVM_REINJECT_CONTROL, &control); + } +#endif + return -ENOSYS; +} + static int kvm_create_pit(KVMState *s) { int r; diff --git a/qemu-kvm.c b/qemu-kvm.c index 8d6854521..f37535ded 100644 --- a/qemu-kvm.c +++ b/qemu-kvm.c @@ -222,22 +222,6 @@ int kvm_deassign_pci_device(KVMState *s, } #endif -int kvm_reinject_control(KVMState *s, int pit_reinject) -{ -#ifdef KVM_CAP_REINJECT_CONTROL - int r; - struct kvm_reinject_control control; - - control.pit_reinject = pit_reinject; - - r = kvm_ioctl(s, KVM_CHECK_EXTENSION, KVM_CAP_REINJECT_CONTROL); - if (r > 0) { - return kvm_vm_ioctl(s, KVM_REINJECT_CONTROL, &control); - } -#endif - return -ENOSYS; -} - int kvm_has_gsi_routing(void) { int r = 0; @@ -463,6 +447,7 @@ int kvm_get_irq_route_gsi(void) return -ENOSPC; } +#ifdef KVM_CAP_IRQ_ROUTING static void kvm_msi_routing_entry(struct kvm_irq_routing_entry *e, KVMMsiMessage *msg) @@ -474,9 +459,11 @@ static void kvm_msi_routing_entry(struct kvm_irq_routing_entry *e, e->u.msi.address_hi = msg->addr_hi; e->u.msi.data = msg->data; } +#endif int kvm_msi_message_add(KVMMsiMessage *msg) { +#ifdef KVM_CAP_IRQ_ROUTING struct kvm_irq_routing_entry e; int ret; @@ -488,18 +475,26 @@ int kvm_msi_message_add(KVMMsiMessage *msg) kvm_msi_routing_entry(&e, msg); return kvm_add_routing_entry(&e); +#else + return -ENOSYS; +#endif } int kvm_msi_message_del(KVMMsiMessage *msg) { +#ifdef KVM_CAP_IRQ_ROUTING struct kvm_irq_routing_entry e; kvm_msi_routing_entry(&e, msg); return kvm_del_routing_entry(&e); +#else + return -ENOSYS; +#endif } int kvm_msi_message_update(KVMMsiMessage *old, KVMMsiMessage *new) { +#ifdef KVM_CAP_IRQ_ROUTING struct kvm_irq_routing_entry e1, e2; int ret; @@ -517,6 +512,9 @@ int kvm_msi_message_update(KVMMsiMessage *old, KVMMsiMessage *new) } return 1; +#else + return -ENOSYS; +#endif } |