[PATCH 0/6] IRQFD without IRQ routing, enabled for XICS

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This series of patches provides a way to implement IRQFD support
without having to implement IRQ routing, and adds IRQFD support for
the XICS interrupt controller emulation.  (XICS is the interrupt
controller defined for the pSeries machine type, used on IBM POWER
servers).

The basic approach is to make it easy for code other than irqchip.c to
provide a mapping from a global interrupt number (GSI) to an irq
routing entry (struct kvm_kernel_irq_routing_entry).  To make the
lifetime of this routing entry easier to manage, we change the IRQFD
code to keep a copy of the routing entry (for the MSI fast-path case)
rather than a pointer to the routing entry.  Since the copy can't be
updated atomically, we add a seqcount_t to make sure that when reading
it we get a copy that hasn't been half-way updated.

Next we replace the hard-coded accesses outside irqchip.c to the
fields of the kvm_irq_routing_table struct with calls to accessor
functions in irqchip.c, namely kvm_irq_map_gsi() and
kvm_irq_map_chip_pin().  That enables us to move all references to the
kvm_irq_routing_table struct, and the definition of that struct, into
irqchip.c.

Then we move the irq notifier implementation from irqchip.c into
eventfd.c and add a separate Kconfig option to enable IRQFD.  With
that we can enable IRQFD without irq routing, which we achieve by
compiling in eventfd.c but not irqchip.c, and providing an alternative
implementation of kvm_irq_map_gsi() and kvm_irq_map_chip_pin().

The last patch does that for XICS.  With this series I can use
vhost-net with KVM guests, and I see the TCP bandwidth between guest
and host on a POWER8 machine go from around 700MB/s to over 2GB/s.

I would like to see this go into 3.17.

 arch/ia64/kvm/Kconfig                |   1 +
 arch/powerpc/kvm/Kconfig             |   3 +
 arch/powerpc/kvm/book3s_hv_rm_xics.c |   5 ++
 arch/powerpc/kvm/book3s_xics.c       |  55 +++++++++++---
 arch/powerpc/kvm/book3s_xics.h       |   2 +
 arch/powerpc/kvm/mpic.c              |   4 +-
 arch/s390/kvm/Kconfig                |   1 +
 arch/s390/kvm/interrupt.c            |   3 +-
 arch/x86/kvm/Kconfig                 |   1 +
 include/linux/kvm_host.h             |  43 ++++-------
 virt/kvm/Kconfig                     |   3 +
 virt/kvm/eventfd.c                   | 134 ++++++++++++++++++++++++++---------
 virt/kvm/irq_comm.c                  |  24 +++----
 virt/kvm/irqchip.c                   |  98 ++++++++++---------------
 virt/kvm/kvm_main.c                  |   2 +-
 15 files changed, 227 insertions(+), 152 deletions(-)
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux