aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/kvm_host.h
diff options
context:
space:
mode:
authorJan Kiszka <jan.kiszka@siemens.com>2010-11-16 16:30:03 -0500
committerAvi Kivity <avi@redhat.com>2011-01-12 04:29:20 -0500
commit0645211c43df0b96c51e12980066b3227e10b164 (patch)
tree2c23ea65e07b9481681eb6bb7cc5d7d2fa109917 /include/linux/kvm_host.h
parent0c106b5aaa727c7f508828e94cff4a98874f930c (diff)
KVM: Switch assigned device IRQ forwarding to threaded handler
This improves the IRQ forwarding for assigned devices: By using the kernel's threaded IRQ scheme, we can get rid of the latency-prone work queue and simplify the code in the same run. Moreover, we no longer have to hold assigned_dev_lock while raising the guest IRQ, which can be a lenghty operation as we may have to iterate over all VCPUs. The lock is now only used for synchronizing masking vs. unmasking of INTx-type IRQs, thus is renames to intx_lock. Acked-by: Alex Williamson <alex.williamson@redhat.com> Acked-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Diffstat (limited to 'include/linux/kvm_host.h')
-rw-r--r--include/linux/kvm_host.h12
1 files changed, 2 insertions, 10 deletions
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
index 2d63f2c0137c..9fe7fefe76b1 100644
--- a/include/linux/kvm_host.h
+++ b/include/linux/kvm_host.h
@@ -470,16 +470,8 @@ struct kvm_irq_ack_notifier {
470 void (*irq_acked)(struct kvm_irq_ack_notifier *kian); 470 void (*irq_acked)(struct kvm_irq_ack_notifier *kian);
471}; 471};
472 472
473#define KVM_ASSIGNED_MSIX_PENDING 0x1
474struct kvm_guest_msix_entry {
475 u32 vector;
476 u16 entry;
477 u16 flags;
478};
479
480struct kvm_assigned_dev_kernel { 473struct kvm_assigned_dev_kernel {
481 struct kvm_irq_ack_notifier ack_notifier; 474 struct kvm_irq_ack_notifier ack_notifier;
482 struct work_struct interrupt_work;
483 struct list_head list; 475 struct list_head list;
484 int assigned_dev_id; 476 int assigned_dev_id;
485 int host_segnr; 477 int host_segnr;
@@ -490,13 +482,13 @@ struct kvm_assigned_dev_kernel {
490 bool host_irq_disabled; 482 bool host_irq_disabled;
491 struct msix_entry *host_msix_entries; 483 struct msix_entry *host_msix_entries;
492 int guest_irq; 484 int guest_irq;
493 struct kvm_guest_msix_entry *guest_msix_entries; 485 struct msix_entry *guest_msix_entries;
494 unsigned long irq_requested_type; 486 unsigned long irq_requested_type;
495 int irq_source_id; 487 int irq_source_id;
496 int flags; 488 int flags;
497 struct pci_dev *dev; 489 struct pci_dev *dev;
498 struct kvm *kvm; 490 struct kvm *kvm;
499 spinlock_t assigned_dev_lock; 491 spinlock_t intx_lock;
500}; 492};
501 493
502struct kvm_irq_mask_notifier { 494struct kvm_irq_mask_notifier {