aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-x86/kvm_host.h
diff options
context:
space:
mode:
authorBen-Ami Yassour <benami@il.ibm.com>2008-07-28 12:26:26 -0400
committerAvi Kivity <avi@qumranet.com>2008-10-15 04:15:18 -0400
commit4d5c5d0fe89c921336b95f5e7e4f529a9df92f53 (patch)
tree7281955b46811fb25283a3b6abb7620630b2b26e /include/asm-x86/kvm_host.h
parentcbff90a7caa49507d399c9a55ba4a411e840bfb4 (diff)
KVM: pci device assignment
Based on a patch from: Amit Shah <amit.shah@qumranet.com> This patch adds support for handling PCI devices that are assigned to the guest. The device to be assigned to the guest is registered in the host kernel and interrupt delivery is handled. If a device is already assigned, or the device driver for it is still loaded on the host, the device assignment is failed by conveying a -EBUSY reply to the userspace. Devices that share their interrupt line are not supported at the moment. By itself, this patch will not make devices work within the guest. The VT-d extension is required to enable the device to perform DMA. Another alternative is PVDMA. Signed-off-by: Amit Shah <amit.shah@qumranet.com> Signed-off-by: Ben-Ami Yassour <benami@il.ibm.com> Signed-off-by: Weidong Han <weidong.han@intel.com> Signed-off-by: Avi Kivity <avi@qumranet.com>
Diffstat (limited to 'include/asm-x86/kvm_host.h')
-rw-r--r--include/asm-x86/kvm_host.h16
1 files changed, 16 insertions, 0 deletions
diff --git a/include/asm-x86/kvm_host.h b/include/asm-x86/kvm_host.h
index d451928fc841..99dddfcecf60 100644
--- a/include/asm-x86/kvm_host.h
+++ b/include/asm-x86/kvm_host.h
@@ -327,6 +327,21 @@ struct kvm_irq_ack_notifier {
327 void (*irq_acked)(struct kvm_irq_ack_notifier *kian); 327 void (*irq_acked)(struct kvm_irq_ack_notifier *kian);
328}; 328};
329 329
330struct kvm_assigned_dev_kernel {
331 struct kvm_irq_ack_notifier ack_notifier;
332 struct work_struct interrupt_work;
333 struct list_head list;
334 struct kvm_assigned_pci_dev assigned_dev;
335 int assigned_dev_id;
336 int host_busnr;
337 int host_devfn;
338 int host_irq;
339 int guest_irq;
340 int irq_requested;
341 struct pci_dev *dev;
342 struct kvm *kvm;
343};
344
330struct kvm_arch{ 345struct kvm_arch{
331 int naliases; 346 int naliases;
332 struct kvm_mem_alias aliases[KVM_ALIAS_SLOTS]; 347 struct kvm_mem_alias aliases[KVM_ALIAS_SLOTS];
@@ -339,6 +354,7 @@ struct kvm_arch{
339 * Hash table of struct kvm_mmu_page. 354 * Hash table of struct kvm_mmu_page.
340 */ 355 */
341 struct list_head active_mmu_pages; 356 struct list_head active_mmu_pages;
357 struct list_head assigned_dev_head;
342 struct kvm_pic *vpic; 358 struct kvm_pic *vpic;
343 struct kvm_ioapic *vioapic; 359 struct kvm_ioapic *vioapic;
344 struct kvm_pit *vpit; 360 struct kvm_pit *vpit;