aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
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/linux
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/linux')
-rw-r--r--include/linux/kvm.h19
1 files changed, 19 insertions, 0 deletions
diff --git a/include/linux/kvm.h b/include/linux/kvm.h
index d29b64881447..ef4bc6f89778 100644
--- a/include/linux/kvm.h
+++ b/include/linux/kvm.h
@@ -383,6 +383,7 @@ struct kvm_trace_rec {
383#define KVM_CAP_MP_STATE 14 383#define KVM_CAP_MP_STATE 14
384#define KVM_CAP_COALESCED_MMIO 15 384#define KVM_CAP_COALESCED_MMIO 15
385#define KVM_CAP_SYNC_MMU 16 /* Changes to host mmap are reflected in guest */ 385#define KVM_CAP_SYNC_MMU 16 /* Changes to host mmap are reflected in guest */
386#define KVM_CAP_DEVICE_ASSIGNMENT 17
386 387
387/* 388/*
388 * ioctls for VM fds 389 * ioctls for VM fds
@@ -412,6 +413,10 @@ struct kvm_trace_rec {
412 _IOW(KVMIO, 0x67, struct kvm_coalesced_mmio_zone) 413 _IOW(KVMIO, 0x67, struct kvm_coalesced_mmio_zone)
413#define KVM_UNREGISTER_COALESCED_MMIO \ 414#define KVM_UNREGISTER_COALESCED_MMIO \
414 _IOW(KVMIO, 0x68, struct kvm_coalesced_mmio_zone) 415 _IOW(KVMIO, 0x68, struct kvm_coalesced_mmio_zone)
416#define KVM_ASSIGN_PCI_DEVICE _IOR(KVMIO, 0x69, \
417 struct kvm_assigned_pci_dev)
418#define KVM_ASSIGN_IRQ _IOR(KVMIO, 0x70, \
419 struct kvm_assigned_irq)
415 420
416/* 421/*
417 * ioctls for vcpu fds 422 * ioctls for vcpu fds
@@ -476,4 +481,18 @@ struct kvm_trace_rec {
476#define KVM_TRC_STLB_INVAL (KVM_TRC_HANDLER + 0x18) 481#define KVM_TRC_STLB_INVAL (KVM_TRC_HANDLER + 0x18)
477#define KVM_TRC_PPC_INSTR (KVM_TRC_HANDLER + 0x19) 482#define KVM_TRC_PPC_INSTR (KVM_TRC_HANDLER + 0x19)
478 483
484struct kvm_assigned_pci_dev {
485 __u32 assigned_dev_id;
486 __u32 busnr;
487 __u32 devfn;
488 __u32 flags;
489};
490
491struct kvm_assigned_irq {
492 __u32 assigned_dev_id;
493 __u32 host_irq;
494 __u32 guest_irq;
495 __u32 flags;
496};
497
479#endif 498#endif