diff options
| author | Paolo Bonzini <pbonzini@redhat.com> | 2014-11-20 07:45:31 -0500 |
|---|---|---|
| committer | Paolo Bonzini <pbonzini@redhat.com> | 2014-11-21 12:02:37 -0500 |
| commit | 6ef768fac9dfe3404d3fdc09909ea203a88f2f38 (patch) | |
| tree | 6bfd08a6a7527bc94b015fe7c0177af51efa5434 | |
| parent | c32a42721ce67594e4481a961aa149055de9c1d9 (diff) | |
kvm: x86: move ioapic.c and irq_comm.c back to arch/x86/
ia64 does not need them anymore. Ack notifiers become x86-specific
too.
Suggested-by: Gleb Natapov <gleb@kernel.org>
Reviewed-by: Radim Krcmar <rkrcmar@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
| -rw-r--r-- | arch/x86/include/asm/kvm_host.h | 16 | ||||
| -rw-r--r-- | arch/x86/kvm/Makefile | 5 | ||||
| -rw-r--r-- | arch/x86/kvm/ioapic.c (renamed from virt/kvm/ioapic.c) | 0 | ||||
| -rw-r--r-- | arch/x86/kvm/ioapic.h (renamed from virt/kvm/ioapic.h) | 1 | ||||
| -rw-r--r-- | arch/x86/kvm/irq_comm.c (renamed from virt/kvm/irq_comm.c) | 4 | ||||
| -rw-r--r-- | arch/x86/kvm/x86.c | 1 | ||||
| -rw-r--r-- | include/linux/kvm_host.h | 22 | ||||
| -rw-r--r-- | virt/kvm/eventfd.c | 7 | ||||
| -rw-r--r-- | virt/kvm/kvm_main.c | 3 |
9 files changed, 29 insertions, 30 deletions
diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h index 769db36a3001..76ff3e2d8fd2 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h | |||
| @@ -603,6 +603,9 @@ struct kvm_arch { | |||
| 603 | 603 | ||
| 604 | struct kvm_xen_hvm_config xen_hvm_config; | 604 | struct kvm_xen_hvm_config xen_hvm_config; |
| 605 | 605 | ||
| 606 | /* reads protected by irq_srcu, writes by irq_lock */ | ||
| 607 | struct hlist_head mask_notifier_list; | ||
| 608 | |||
| 606 | /* fields used by HYPER-V emulation */ | 609 | /* fields used by HYPER-V emulation */ |
| 607 | u64 hv_guest_os_id; | 610 | u64 hv_guest_os_id; |
| 608 | u64 hv_hypercall; | 611 | u64 hv_hypercall; |
| @@ -819,6 +822,19 @@ int emulator_write_phys(struct kvm_vcpu *vcpu, gpa_t gpa, | |||
| 819 | const void *val, int bytes); | 822 | const void *val, int bytes); |
| 820 | u8 kvm_get_guest_memory_type(struct kvm_vcpu *vcpu, gfn_t gfn); | 823 | u8 kvm_get_guest_memory_type(struct kvm_vcpu *vcpu, gfn_t gfn); |
| 821 | 824 | ||
| 825 | struct kvm_irq_mask_notifier { | ||
| 826 | void (*func)(struct kvm_irq_mask_notifier *kimn, bool masked); | ||
| 827 | int irq; | ||
| 828 | struct hlist_node link; | ||
| 829 | }; | ||
| 830 | |||
| 831 | void kvm_register_irq_mask_notifier(struct kvm *kvm, int irq, | ||
| 832 | struct kvm_irq_mask_notifier *kimn); | ||
| 833 | void kvm_unregister_irq_mask_notifier(struct kvm *kvm, int irq, | ||
| 834 | struct kvm_irq_mask_notifier *kimn); | ||
| 835 | void kvm_fire_mask_notifiers(struct kvm *kvm, unsigned irqchip, unsigned pin, | ||
| 836 | bool mask); | ||
| 837 | |||
| 822 | extern bool tdp_enabled; | 838 | extern bool tdp_enabled; |
| 823 | 839 | ||
| 824 | u64 vcpu_tsc_khz(struct kvm_vcpu *vcpu); | 840 | u64 vcpu_tsc_khz(struct kvm_vcpu *vcpu); |
diff --git a/arch/x86/kvm/Makefile b/arch/x86/kvm/Makefile index 25d22b2d6509..ee1cd92b03be 100644 --- a/arch/x86/kvm/Makefile +++ b/arch/x86/kvm/Makefile | |||
| @@ -7,14 +7,13 @@ CFLAGS_vmx.o := -I. | |||
| 7 | 7 | ||
| 8 | KVM := ../../../virt/kvm | 8 | KVM := ../../../virt/kvm |
| 9 | 9 | ||
| 10 | kvm-y += $(KVM)/kvm_main.o $(KVM)/ioapic.o \ | 10 | kvm-y += $(KVM)/kvm_main.o $(KVM)/coalesced_mmio.o \ |
| 11 | $(KVM)/coalesced_mmio.o $(KVM)/irq_comm.o \ | ||
| 12 | $(KVM)/eventfd.o $(KVM)/irqchip.o $(KVM)/vfio.o | 11 | $(KVM)/eventfd.o $(KVM)/irqchip.o $(KVM)/vfio.o |
| 13 | kvm-$(CONFIG_KVM_DEVICE_ASSIGNMENT) += $(KVM)/assigned-dev.o $(KVM)/iommu.o | 12 | kvm-$(CONFIG_KVM_DEVICE_ASSIGNMENT) += $(KVM)/assigned-dev.o $(KVM)/iommu.o |
| 14 | kvm-$(CONFIG_KVM_ASYNC_PF) += $(KVM)/async_pf.o | 13 | kvm-$(CONFIG_KVM_ASYNC_PF) += $(KVM)/async_pf.o |
| 15 | 14 | ||
| 16 | kvm-y += x86.o mmu.o emulate.o i8259.o irq.o lapic.o \ | 15 | kvm-y += x86.o mmu.o emulate.o i8259.o irq.o lapic.o \ |
| 17 | i8254.o cpuid.o pmu.o | 16 | i8254.o ioapic.o irq_comm.o cpuid.o pmu.o |
| 18 | kvm-intel-y += vmx.o | 17 | kvm-intel-y += vmx.o |
| 19 | kvm-amd-y += svm.o | 18 | kvm-amd-y += svm.o |
| 20 | 19 | ||
diff --git a/virt/kvm/ioapic.c b/arch/x86/kvm/ioapic.c index f0f7ef82b7a6..f0f7ef82b7a6 100644 --- a/virt/kvm/ioapic.c +++ b/arch/x86/kvm/ioapic.c | |||
diff --git a/virt/kvm/ioapic.h b/arch/x86/kvm/ioapic.h index dc3baa3a538f..deac8d509f2a 100644 --- a/virt/kvm/ioapic.h +++ b/arch/x86/kvm/ioapic.h | |||
| @@ -96,7 +96,6 @@ int kvm_irq_delivery_to_apic(struct kvm *kvm, struct kvm_lapic *src, | |||
| 96 | struct kvm_lapic_irq *irq, unsigned long *dest_map); | 96 | struct kvm_lapic_irq *irq, unsigned long *dest_map); |
| 97 | int kvm_get_ioapic(struct kvm *kvm, struct kvm_ioapic_state *state); | 97 | int kvm_get_ioapic(struct kvm *kvm, struct kvm_ioapic_state *state); |
| 98 | int kvm_set_ioapic(struct kvm *kvm, struct kvm_ioapic_state *state); | 98 | int kvm_set_ioapic(struct kvm *kvm, struct kvm_ioapic_state *state); |
| 99 | void kvm_vcpu_request_scan_ioapic(struct kvm *kvm); | ||
| 100 | void kvm_ioapic_scan_entry(struct kvm_vcpu *vcpu, u64 *eoi_exit_bitmap, | 99 | void kvm_ioapic_scan_entry(struct kvm_vcpu *vcpu, u64 *eoi_exit_bitmap, |
| 101 | u32 *tmr); | 100 | u32 *tmr); |
| 102 | 101 | ||
diff --git a/virt/kvm/irq_comm.c b/arch/x86/kvm/irq_comm.c index 1345bde064f5..e9c135b639aa 100644 --- a/virt/kvm/irq_comm.c +++ b/arch/x86/kvm/irq_comm.c | |||
| @@ -234,7 +234,7 @@ void kvm_register_irq_mask_notifier(struct kvm *kvm, int irq, | |||
| 234 | { | 234 | { |
| 235 | mutex_lock(&kvm->irq_lock); | 235 | mutex_lock(&kvm->irq_lock); |
| 236 | kimn->irq = irq; | 236 | kimn->irq = irq; |
| 237 | hlist_add_head_rcu(&kimn->link, &kvm->mask_notifier_list); | 237 | hlist_add_head_rcu(&kimn->link, &kvm->arch.mask_notifier_list); |
| 238 | mutex_unlock(&kvm->irq_lock); | 238 | mutex_unlock(&kvm->irq_lock); |
| 239 | } | 239 | } |
| 240 | 240 | ||
| @@ -256,7 +256,7 @@ void kvm_fire_mask_notifiers(struct kvm *kvm, unsigned irqchip, unsigned pin, | |||
| 256 | idx = srcu_read_lock(&kvm->irq_srcu); | 256 | idx = srcu_read_lock(&kvm->irq_srcu); |
| 257 | gsi = kvm_irq_map_chip_pin(kvm, irqchip, pin); | 257 | gsi = kvm_irq_map_chip_pin(kvm, irqchip, pin); |
| 258 | if (gsi != -1) | 258 | if (gsi != -1) |
| 259 | hlist_for_each_entry_rcu(kimn, &kvm->mask_notifier_list, link) | 259 | hlist_for_each_entry_rcu(kimn, &kvm->arch.mask_notifier_list, link) |
| 260 | if (kimn->irq == gsi) | 260 | if (kimn->irq == gsi) |
| 261 | kimn->func(kimn, mask); | 261 | kimn->func(kimn, mask); |
| 262 | srcu_read_unlock(&kvm->irq_srcu, idx); | 262 | srcu_read_unlock(&kvm->irq_srcu, idx); |
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index a8f53a6960fd..5337039427c8 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c | |||
| @@ -7264,6 +7264,7 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type) | |||
| 7264 | if (type) | 7264 | if (type) |
| 7265 | return -EINVAL; | 7265 | return -EINVAL; |
| 7266 | 7266 | ||
| 7267 | INIT_HLIST_HEAD(&kvm->arch.mask_notifier_list); | ||
| 7267 | INIT_LIST_HEAD(&kvm->arch.active_mmu_pages); | 7268 | INIT_LIST_HEAD(&kvm->arch.active_mmu_pages); |
| 7268 | INIT_LIST_HEAD(&kvm->arch.zapped_obsolete_pages); | 7269 | INIT_LIST_HEAD(&kvm->arch.zapped_obsolete_pages); |
| 7269 | INIT_LIST_HEAD(&kvm->arch.assigned_dev_head); | 7270 | INIT_LIST_HEAD(&kvm->arch.assigned_dev_head); |
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index ea53b04993f2..ded64cb3a081 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h | |||
| @@ -395,7 +395,6 @@ struct kvm { | |||
| 395 | * Update side is protected by irq_lock. | 395 | * Update side is protected by irq_lock. |
| 396 | */ | 396 | */ |
| 397 | struct kvm_irq_routing_table __rcu *irq_routing; | 397 | struct kvm_irq_routing_table __rcu *irq_routing; |
| 398 | struct hlist_head mask_notifier_list; | ||
| 399 | #endif | 398 | #endif |
| 400 | #ifdef CONFIG_HAVE_KVM_IRQFD | 399 | #ifdef CONFIG_HAVE_KVM_IRQFD |
| 401 | struct hlist_head irq_ack_notifier_list; | 400 | struct hlist_head irq_ack_notifier_list; |
| @@ -447,6 +446,14 @@ void kvm_vcpu_uninit(struct kvm_vcpu *vcpu); | |||
| 447 | int __must_check vcpu_load(struct kvm_vcpu *vcpu); | 446 | int __must_check vcpu_load(struct kvm_vcpu *vcpu); |
| 448 | void vcpu_put(struct kvm_vcpu *vcpu); | 447 | void vcpu_put(struct kvm_vcpu *vcpu); |
| 449 | 448 | ||
| 449 | #ifdef __KVM_HAVE_IOAPIC | ||
| 450 | void kvm_vcpu_request_scan_ioapic(struct kvm *kvm); | ||
| 451 | #else | ||
| 452 | static inline void kvm_vcpu_request_scan_ioapic(struct kvm *kvm) | ||
| 453 | { | ||
| 454 | } | ||
| 455 | #endif | ||
| 456 | |||
| 450 | #ifdef CONFIG_HAVE_KVM_IRQFD | 457 | #ifdef CONFIG_HAVE_KVM_IRQFD |
| 451 | int kvm_irqfd_init(void); | 458 | int kvm_irqfd_init(void); |
| 452 | void kvm_irqfd_exit(void); | 459 | void kvm_irqfd_exit(void); |
| @@ -736,19 +743,6 @@ struct kvm_assigned_dev_kernel { | |||
| 736 | struct pci_saved_state *pci_saved_state; | 743 | struct pci_saved_state *pci_saved_state; |
| 737 | }; | 744 | }; |
| 738 | 745 | ||
| 739 | struct kvm_irq_mask_notifier { | ||
| 740 | void (*func)(struct kvm_irq_mask_notifier *kimn, bool masked); | ||
| 741 | int irq; | ||
| 742 | struct hlist_node link; | ||
| 743 | }; | ||
| 744 | |||
| 745 | void kvm_register_irq_mask_notifier(struct kvm *kvm, int irq, | ||
| 746 | struct kvm_irq_mask_notifier *kimn); | ||
| 747 | void kvm_unregister_irq_mask_notifier(struct kvm *kvm, int irq, | ||
| 748 | struct kvm_irq_mask_notifier *kimn); | ||
| 749 | void kvm_fire_mask_notifiers(struct kvm *kvm, unsigned irqchip, unsigned pin, | ||
| 750 | bool mask); | ||
| 751 | |||
| 752 | int kvm_irq_map_gsi(struct kvm *kvm, | 746 | int kvm_irq_map_gsi(struct kvm *kvm, |
| 753 | struct kvm_kernel_irq_routing_entry *entries, int gsi); | 747 | struct kvm_kernel_irq_routing_entry *entries, int gsi); |
| 754 | int kvm_irq_map_chip_pin(struct kvm *kvm, unsigned irqchip, unsigned pin); | 748 | int kvm_irq_map_chip_pin(struct kvm *kvm, unsigned irqchip, unsigned pin); |
diff --git a/virt/kvm/eventfd.c b/virt/kvm/eventfd.c index b0fb390943c6..148b2392c762 100644 --- a/virt/kvm/eventfd.c +++ b/virt/kvm/eventfd.c | |||
| @@ -36,9 +36,6 @@ | |||
| 36 | #include <linux/seqlock.h> | 36 | #include <linux/seqlock.h> |
| 37 | #include <trace/events/kvm.h> | 37 | #include <trace/events/kvm.h> |
| 38 | 38 | ||
| 39 | #ifdef __KVM_HAVE_IOAPIC | ||
| 40 | #include "ioapic.h" | ||
| 41 | #endif | ||
| 42 | #include "iodev.h" | 39 | #include "iodev.h" |
| 43 | 40 | ||
| 44 | #ifdef CONFIG_HAVE_KVM_IRQFD | 41 | #ifdef CONFIG_HAVE_KVM_IRQFD |
| @@ -492,9 +489,7 @@ void kvm_register_irq_ack_notifier(struct kvm *kvm, | |||
| 492 | mutex_lock(&kvm->irq_lock); | 489 | mutex_lock(&kvm->irq_lock); |
| 493 | hlist_add_head_rcu(&kian->link, &kvm->irq_ack_notifier_list); | 490 | hlist_add_head_rcu(&kian->link, &kvm->irq_ack_notifier_list); |
| 494 | mutex_unlock(&kvm->irq_lock); | 491 | mutex_unlock(&kvm->irq_lock); |
| 495 | #ifdef __KVM_HAVE_IOAPIC | ||
| 496 | kvm_vcpu_request_scan_ioapic(kvm); | 492 | kvm_vcpu_request_scan_ioapic(kvm); |
| 497 | #endif | ||
| 498 | } | 493 | } |
| 499 | 494 | ||
| 500 | void kvm_unregister_irq_ack_notifier(struct kvm *kvm, | 495 | void kvm_unregister_irq_ack_notifier(struct kvm *kvm, |
| @@ -504,9 +499,7 @@ void kvm_unregister_irq_ack_notifier(struct kvm *kvm, | |||
| 504 | hlist_del_init_rcu(&kian->link); | 499 | hlist_del_init_rcu(&kian->link); |
| 505 | mutex_unlock(&kvm->irq_lock); | 500 | mutex_unlock(&kvm->irq_lock); |
| 506 | synchronize_srcu(&kvm->irq_srcu); | 501 | synchronize_srcu(&kvm->irq_srcu); |
| 507 | #ifdef __KVM_HAVE_IOAPIC | ||
| 508 | kvm_vcpu_request_scan_ioapic(kvm); | 502 | kvm_vcpu_request_scan_ioapic(kvm); |
| 509 | #endif | ||
| 510 | } | 503 | } |
| 511 | #endif | 504 | #endif |
| 512 | 505 | ||
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 751ece6a595c..3be43424818b 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c | |||
| @@ -468,9 +468,6 @@ static struct kvm *kvm_create_vm(unsigned long type) | |||
| 468 | if (r) | 468 | if (r) |
| 469 | goto out_err_no_disable; | 469 | goto out_err_no_disable; |
| 470 | 470 | ||
| 471 | #ifdef CONFIG_HAVE_KVM_IRQCHIP | ||
| 472 | INIT_HLIST_HEAD(&kvm->mask_notifier_list); | ||
| 473 | #endif | ||
| 474 | #ifdef CONFIG_HAVE_KVM_IRQFD | 471 | #ifdef CONFIG_HAVE_KVM_IRQFD |
| 475 | INIT_HLIST_HEAD(&kvm->irq_ack_notifier_list); | 472 | INIT_HLIST_HEAD(&kvm->irq_ack_notifier_list); |
| 476 | #endif | 473 | #endif |
