Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1182678
| From | Feng Wu <feng.wu@intel.com> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [v5 14/19] KVM: x86: Add arch specific routines for irqbypass manager |
| Date | 2015-07-13 12:10 +0200 |
| Message-ID | <pLIQp-3K2-5@gated-at.bofh.it> (permalink) |
| References | <pLIGK-3rw-3@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
Add the following x86 specific routines for irqbypass manger:
- kvm_arch_irq_bypass_add_producer
- kvm_arch_irq_bypass_del_producer
Signed-off-by: Feng Wu <feng.wu@intel.com>
---
arch/x86/include/asm/kvm_host.h | 1 +
arch/x86/kvm/x86.c | 40 ++++++++++++++++++++++++++++++++++++++++
include/linux/kvm_host.h | 2 ++
3 files changed, 43 insertions(+)
diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
index 1b0278e..6db761b 100644
--- a/arch/x86/include/asm/kvm_host.h
+++ b/arch/x86/include/asm/kvm_host.h
@@ -24,6 +24,7 @@
#include <linux/perf_event.h>
#include <linux/pvclock_gtod.h>
#include <linux/clocksource.h>
+#include <linux/irqbypass.h>
#include <asm/pvclock-abi.h>
#include <asm/desc.h>
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index d81ac02..62bbafe 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -49,6 +49,8 @@
#include <linux/pci.h>
#include <linux/timekeeper_internal.h>
#include <linux/pvclock_gtod.h>
+#include <linux/kvm_irqfd.h>
+#include <linux/irqbypass.h>
#include <trace/events/kvm.h>
#define CREATE_TRACE_POINTS
@@ -8023,6 +8025,44 @@ out:
return ret;
}
+void kvm_arch_irq_bypass_add_producer(struct irq_bypass_consumer *cons,
+ struct irq_bypass_producer *prod)
+{
+ int ret;
+ struct kvm_kernel_irqfd *irqfd =
+ container_of(cons, struct kvm_kernel_irqfd, consumer);
+
+ irqfd->producer = prod;
+
+ ret = kvm_arch_update_pi_irte(irqfd->kvm, prod->irq, irqfd->gsi, 1);
+ WARN_ON(ret);
+}
+
+void kvm_arch_irq_bypass_del_producer(struct irq_bypass_consumer *cons,
+ struct irq_bypass_producer *prod)
+{
+ int ret;
+ struct kvm_kernel_irqfd *irqfd =
+ container_of(cons, struct kvm_kernel_irqfd, consumer);
+
+ irqfd->producer = NULL;
+
+ /*
+ * When producer of consumer is unregistered, we change back to
+ * remapped mode, so we can re-use the current implementation
+ * when the irq is masked/disabed or the consumer side (KVM
+ * int this case doesn't want to receive the interrupts.
+ */
+ ret = kvm_arch_update_pi_irte(irqfd->kvm, prod->irq, irqfd->gsi, 0);
+ WARN_ON(ret);
+}
+
+void kvm_arch_irq_consumer_init(struct irq_bypass_consumer *cons)
+{
+ cons->add_producer = kvm_arch_irq_bypass_add_producer;
+ cons->del_producer = kvm_arch_irq_bypass_del_producer;
+}
+
EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_exit);
EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_inj_virq);
EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_page_fault);
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
index f591f7c..e693b3a 100644
--- a/include/linux/kvm_host.h
+++ b/include/linux/kvm_host.h
@@ -1073,6 +1073,8 @@ extern struct kvm_device_ops kvm_xics_ops;
extern struct kvm_device_ops kvm_arm_vgic_v2_ops;
extern struct kvm_device_ops kvm_arm_vgic_v3_ops;
+void kvm_arch_irq_consumer_init(struct irq_bypass_consumer *cons);
+
#ifdef CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT
static inline void kvm_vcpu_set_in_spin_loop(struct kvm_vcpu *vcpu, bool val)
--
2.1.0
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[v5 00/19] Add VT-d Posted-Interrupts support Feng Wu <feng.wu@intel.com> - 2015-07-13 12:00 +0200
[v5 07/19] KVM: make kvm_set_msi_irq() public Feng Wu <feng.wu@intel.com> - 2015-07-13 12:00 +0200
[v5 11/19] KVM: create kvm_irqfd.h Feng Wu <feng.wu@intel.com> - 2015-07-13 12:00 +0200
[v5 06/19] KVM: Make struct kvm_irq_routing_table accessible Feng Wu <feng.wu@intel.com> - 2015-07-13 12:00 +0200
[v5 17/19] KVM: Update Posted-Interrupts Descriptor when vCPU is preempted Feng Wu <feng.wu@intel.com> - 2015-07-13 12:00 +0200
[v5 01/19] KVM: Extend struct pi_desc for VT-d Posted-Interrupts Feng Wu <feng.wu@intel.com> - 2015-07-13 12:00 +0200
[v5 10/19] KVM, x86: Select IRQ_BYPASS_MANAGER for KVM_INTEL Feng Wu <feng.wu@intel.com> - 2015-07-13 12:10 +0200
[v5 14/19] KVM: x86: Add arch specific routines for irqbypass manager Feng Wu <feng.wu@intel.com> - 2015-07-13 12:10 +0200
[v5 16/19] KVM: Add an arch specific hooks in 'struct kvm_kernel_irqfd' Feng Wu <feng.wu@intel.com> - 2015-07-13 12:10 +0200
[v5 18/19] KVM: Update Posted-Interrupts Descriptor when vCPU is blocked Feng Wu <feng.wu@intel.com> - 2015-07-13 12:10 +0200
[v5 02/19] KVM: Add some helper functions for Posted-Interrupts Feng Wu <feng.wu@intel.com> - 2015-07-13 12:10 +0200
[v5 13/19] KVM: x86: Update IRTE for posted-interrupts Feng Wu <feng.wu@intel.com> - 2015-07-13 12:10 +0200
[v5 15/19] KVM: eventfd: add irq bypass consumer management Feng Wu <feng.wu@intel.com> - 2015-07-13 12:10 +0200
[v5 12/19] KVM: eventfd: add irq bypass information in irqfd Feng Wu <feng.wu@intel.com> - 2015-07-13 12:10 +0200
[v5 05/19] KVM: Add interfaces to control PI outside vmx Feng Wu <feng.wu@intel.com> - 2015-07-13 12:10 +0200
[v5 09/19] vfio: Register/unregister irq_bypass_producer Feng Wu <feng.wu@intel.com> - 2015-07-13 12:10 +0200
Re: [v5 09/19] vfio: Register/unregister irq_bypass_producer Eric Auger <eric.auger@linaro.org> - 2015-07-13 15:00 +0200
[v5 03/19] KVM: Define a new interface kvm_intr_is_single_vcpu() Feng Wu <feng.wu@intel.com> - 2015-07-13 12:10 +0200
[v5 08/19] vfio: Select IRQ_BYPASS_MANAGER for vfio PCI devices Feng Wu <feng.wu@intel.com> - 2015-07-13 12:10 +0200
csiph-web