Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1212902

[PATCH v7 03/17] KVM: Define a new interface kvm_intr_is_single_vcpu()

From Feng Wu <feng.wu@intel.com>
Newsgroups linux.kernel
Subject [PATCH v7 03/17] KVM: Define a new interface kvm_intr_is_single_vcpu()
Date 2015-08-25 11:30 +0200
Message-ID <q1iIj-2lN-31@gated-at.bofh.it> (permalink)
References <q1ioV-1YL-7@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


This patch defines a new interface kvm_intr_is_single_vcpu(),
which can returns whether the interrupt is for single-CPU or not.

It is used by VT-d PI, since now we only support single-CPU
interrupts, For lowest-priority interrupts, if user configures
it via /proc/irq or uses irqbalance to make it single-CPU, we
can use PI to deliver the interrupts to it. Full functionality
of lowest-priority support will be added later.

Signed-off-by: Feng Wu <feng.wu@intel.com>
---
 arch/x86/include/asm/kvm_host.h |  3 +++
 arch/x86/kvm/irq_comm.c         | 24 ++++++++++++++++++++++++
 2 files changed, 27 insertions(+)

diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
index 49ec903..af11bca 100644
--- a/arch/x86/include/asm/kvm_host.h
+++ b/arch/x86/include/asm/kvm_host.h
@@ -1204,4 +1204,7 @@ int __x86_set_memory_region(struct kvm *kvm,
 int x86_set_memory_region(struct kvm *kvm,
 			  const struct kvm_userspace_memory_region *mem);
 
+bool kvm_intr_is_single_vcpu(struct kvm *kvm, struct kvm_lapic_irq *irq,
+			     struct kvm_vcpu **dest_vcpu);
+
 #endif /* _ASM_X86_KVM_HOST_H */
diff --git a/arch/x86/kvm/irq_comm.c b/arch/x86/kvm/irq_comm.c
index 9efff9e..a9572a13 100644
--- a/arch/x86/kvm/irq_comm.c
+++ b/arch/x86/kvm/irq_comm.c
@@ -297,6 +297,30 @@ out:
 	return r;
 }
 
+bool kvm_intr_is_single_vcpu(struct kvm *kvm, struct kvm_lapic_irq *irq,
+			     struct kvm_vcpu **dest_vcpu)
+{
+	int i, r = 0;
+	struct kvm_vcpu *vcpu;
+
+	kvm_for_each_vcpu(i, vcpu, kvm) {
+		if (!kvm_apic_present(vcpu))
+			continue;
+
+		if (!kvm_apic_match_dest(vcpu, NULL, irq->shorthand,
+					irq->dest_id, irq->dest_mode))
+			continue;
+
+		r++;
+		*dest_vcpu = vcpu;
+	}
+
+	if (r == 1)
+		return true;
+	else
+		return false;
+}
+
 #define IOAPIC_ROUTING_ENTRY(irq) \
 	{ .gsi = irq, .type = KVM_IRQ_ROUTING_IRQCHIP,	\
 	  .u.irqchip = { .irqchip = KVM_IRQCHIP_IOAPIC, .pin = (irq) } }
-- 
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


Thread

[PATCH v7 00/17] Add VT-d Posted-Interrupts support Feng Wu <feng.wu@intel.com> - 2015-08-25 11:10 +0200
  [PATCH v7 02/17] KVM: Add some helper functions for Posted-Interrupts Feng Wu <feng.wu@intel.com> - 2015-08-25 11:10 +0200
  [PATCH v7 08/17] vfio: Select IRQ_BYPASS_MANAGER for vfio PCI devices Feng Wu <feng.wu@intel.com> - 2015-08-25 11:10 +0200
  [PATCH v7 11/17] KVM: Define two weak arch callbacks for irq bypass manager Feng Wu <feng.wu@intel.com> - 2015-08-25 11:20 +0200
  [PATCH v7 16/17] KVM: Warn if 'SN' is set during posting interrupts by software Feng Wu <feng.wu@intel.com> - 2015-08-25 11:20 +0200
  [PATCH v7 14/17] KVM: Update Posted-Interrupts Descriptor when vCPU is preempted Feng Wu <feng.wu@intel.com> - 2015-08-25 11:20 +0200
  [PATCH v7 15/17] KVM: Update Posted-Interrupts Descriptor when vCPU is blocked Feng Wu <feng.wu@intel.com> - 2015-08-25 11:20 +0200
  [PATCH v7 10/17] KVM: x86: Update IRTE for posted-interrupts Feng Wu <feng.wu@intel.com> - 2015-08-25 11:20 +0200
    Re: [PATCH v7 10/17] KVM: x86: Update IRTE for posted-interrupts Alex Williamson <alex.williamson@redhat.com> - 2015-08-25 22:00 +0200
      RE: [PATCH v7 10/17] KVM: x86: Update IRTE for posted-interrupts "Wu, Feng" <feng.wu@intel.com> - 2015-08-26 02:40 +0200
  [PATCH v7 12/17] KVM: Implement IRQ bypass consumer callbacks for x86 Feng Wu <feng.wu@intel.com> - 2015-08-25 11:20 +0200
  [PATCH v7 13/17] KVM: Add an arch specific hooks in 'struct kvm_kernel_irqfd' Feng Wu <feng.wu@intel.com> - 2015-08-25 11:20 +0200
  [PATCH v7 17/17] iommu/vt-d: Add a command line parameter for VT-d posted-interrupts Feng Wu <feng.wu@intel.com> - 2015-08-25 11:20 +0200
  [PATCH v7 07/17] KVM: make kvm_set_msi_irq() public Feng Wu <feng.wu@intel.com> - 2015-08-25 11:30 +0200
  [PATCH v7 09/17] vfio: Register/unregister irq_bypass_producer Feng Wu <feng.wu@intel.com> - 2015-08-25 11:30 +0200
  [PATCH v7 01/17] KVM: Extend struct pi_desc for VT-d Posted-Interrupts Feng Wu <feng.wu@intel.com> - 2015-08-25 11:30 +0200
  [PATCH v7 03/17] KVM: Define a new interface kvm_intr_is_single_vcpu() Feng Wu <feng.wu@intel.com> - 2015-08-25 11:30 +0200
  [PATCH v7 05/17] KVM: Add interfaces to control PI outside vmx Feng Wu <feng.wu@intel.com> - 2015-08-25 11:30 +0200
  [PATCH v7 06/17] KVM: Make struct kvm_irq_routing_table accessible Feng Wu <feng.wu@intel.com> - 2015-08-25 11:30 +0200

csiph-web