KVM: fast-path msi injection with irqfd
authorMichael S. Tsirkin <mst@redhat.com>
Thu, 18 Nov 2010 17:09:08 +0000 (19:09 +0200)
committerAvi Kivity <avi@redhat.com>
Wed, 12 Jan 2011 09:29:38 +0000 (11:29 +0200)
commitbd2b53b20fcd0d6c4c815b54e6d464e34429d3a4
tree1f225ea8b74368056bc144de14a1015fa4ebde29
parent104f226bfd0a607ca0e804ae4907555374f72cd9
KVM: fast-path msi injection with irqfd

Store irq routing table pointer in the irqfd object,
and use that to inject MSI directly without bouncing out to
a kernel thread.

While we touch this structure, rearrange irqfd fields to make fastpath
better packed for better cache utilization.

This also adds some comments about locking rules and rcu usage in code.

Some notes on the design:
- Use pointer into the rt instead of copying an entry,
  to make it possible to use rcu, thus side-stepping
  locking complexities.  We also save some memory this way.
- Old workqueue code is still used for level irqs.
  I don't think we DTRT with level anyway, however,
  it seems easier to keep the code around as
  it has been thought through and debugged, and fix level later than
  rip out and re-instate it later.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Acked-by: Marcelo Tosatti <mtosatti@redhat.com>
Acked-by: Gregory Haskins <ghaskins@novell.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
include/linux/kvm_host.h
virt/kvm/eventfd.c
virt/kvm/irq_comm.c