kvm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 0/8] make interrupt injection lockless (almost)
@ 2009-08-12 12:17 Gleb Natapov
  2009-08-12 12:17 ` [PATCH v3 1/8] Do not call ack notifiers on PIC reset Gleb Natapov
                   ` (8 more replies)
  0 siblings, 9 replies; 19+ messages in thread
From: Gleb Natapov @ 2009-08-12 12:17 UTC (permalink / raw)
  To: avi; +Cc: kvm

kvm->irq_lock protects too much stuff, but still fail to protect
everything it was design to protect (see ack notifiers call in pic). I
want to make IRQ injection fast path as lockless as possible. This patch
series removes kvm->irq_lock from irq injection path effectively making
interrupt injection to lapic lockless (several kvm_irq_delivery_to_apic()
may run in parallel), but access to lapic was never fully locked in the
first place. VCPU could access lapic in parallel with interrupt injection.
Patches 1/2 changes irq routing data structure to much more efficient one.

v1->v2:
  Drop MSI injection interface (for now).
  Use irq_lock to protect irq routing and ack notifiers.
  Splitting irq routing table changes to two patches (+ comments addressed).
  Drop ioapic/pic lock before calling ack notifiers.
v2->v3
  Drop patch that changes irq_lock to spinlock.
  Use mutex for ioapic lock.
  Do not call ack notifier if there is no GSI mapping.
  Call pic_clear_isr() after PIC state completely changed.

Gleb Natapov (8):
  Do not call ack notifiers on PIC reset.
  Change irq routing table to use gsi indexed array.
  Maintain back mapping from irqchip/pin to gsi.
  Move irq routing data structure to rcu locking
  Move irq ack notifier list to arch independent code.
  Convert irq notifiers lists to RCU locking.
  Move IO APIC to its own lock.
  Drop kvm->irq_lock lock from irq injection path.

 arch/ia64/include/asm/kvm.h      |    1 +
 arch/ia64/include/asm/kvm_host.h |    1 -
 arch/ia64/kvm/kvm-ia64.c         |    9 +--
 arch/x86/include/asm/kvm.h       |    1 +
 arch/x86/include/asm/kvm_host.h  |    1 -
 arch/x86/kvm/i8254.c             |    2 -
 arch/x86/kvm/i8259.c             |   38 +++++-------
 arch/x86/kvm/lapic.c             |    7 +--
 arch/x86/kvm/x86.c               |   12 +---
 include/linux/kvm_host.h         |   18 +++++-
 virt/kvm/eventfd.c               |    2 -
 virt/kvm/ioapic.c                |   80 ++++++++++++++++++------
 virt/kvm/ioapic.h                |    4 +
 virt/kvm/irq_comm.c              |  127 ++++++++++++++++++++------------------
 virt/kvm/kvm_main.c              |    4 +-
 15 files changed, 171 insertions(+), 136 deletions(-)


^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2009-08-17  9:46 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-08-12 12:17 [PATCH v3 0/8] make interrupt injection lockless (almost) Gleb Natapov
2009-08-12 12:17 ` [PATCH v3 1/8] Do not call ack notifiers on PIC reset Gleb Natapov
2009-08-13  9:11   ` Marcelo Tosatti
2009-08-13  9:39     ` Gleb Natapov
2009-08-12 12:17 ` [PATCH v3 2/8] Change irq routing table to use gsi indexed array Gleb Natapov
2009-08-12 12:17 ` [PATCH v3 3/8] Maintain back mapping from irqchip/pin to gsi Gleb Natapov
2009-08-17  9:43   ` Avi Kivity
2009-08-12 12:17 ` [PATCH v3 4/8] Move irq routing data structure to rcu locking Gleb Natapov
2009-08-12 12:17 ` [PATCH v3 5/8] Move irq ack notifier list to arch independent code Gleb Natapov
2009-08-12 12:17 ` [PATCH v3 6/8] Convert irq notifiers lists to RCU locking Gleb Natapov
2009-08-12 12:17 ` [PATCH v3 7/8] Move IO APIC to its own lock Gleb Natapov
2009-08-13  9:13   ` Marcelo Tosatti
2009-08-13  9:48     ` Gleb Natapov
2009-08-13  9:49       ` Avi Kivity
2009-08-13 10:09         ` Gleb Natapov
2009-08-13 10:44           ` Avi Kivity
2009-08-13 15:15             ` Paul E. McKenney
2009-08-12 12:17 ` [PATCH v3 8/8] Drop kvm->irq_lock lock from irq injection path Gleb Natapov
2009-08-17  9:46 ` [PATCH v3 0/8] make interrupt injection lockless (almost) Avi Kivity

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).