Commit 2381ad241d0bea1253a37f314b270848067640bb
Committed by
Avi Kivity
1 parent
b010eb5103
Exists in
master
and in
7 other branches
KVM: ia64: Add intel iommu support for guests.
With intel iommu hardware, we can assign devices to kvm/ia64 guests. Signed-off-by: Xiantao Zhang <xiantao.zhang@intel.com> Signed-off-by: Avi Kivity <avi@qumranet.com>
Showing 3 changed files with 14 additions and 1 deletions Side-by-side Diff
arch/ia64/kvm/Makefile
... | ... | @@ -46,6 +46,10 @@ |
46 | 46 | common-objs = $(addprefix ../../../virt/kvm/, kvm_main.o ioapic.o \ |
47 | 47 | coalesced_mmio.o irq_comm.o) |
48 | 48 | |
49 | +ifeq ($(CONFIG_DMAR),y) | |
50 | +common-objs += $(addprefix ../../../virt/kvm/, vtd.o) | |
51 | +endif | |
52 | + | |
49 | 53 | kvm-objs := $(common-objs) kvm-ia64.o kvm_fw.o |
50 | 54 | obj-$(CONFIG_KVM) += kvm.o |
51 | 55 |
arch/ia64/kvm/kvm-ia64.c
... | ... | @@ -31,6 +31,7 @@ |
31 | 31 | #include <linux/bitops.h> |
32 | 32 | #include <linux/hrtimer.h> |
33 | 33 | #include <linux/uaccess.h> |
34 | +#include <linux/intel-iommu.h> | |
34 | 35 | |
35 | 36 | #include <asm/pgtable.h> |
36 | 37 | #include <asm/gcc_intrin.h> |
... | ... | @@ -187,6 +188,9 @@ |
187 | 188 | case KVM_CAP_COALESCED_MMIO: |
188 | 189 | r = KVM_COALESCED_MMIO_PAGE_OFFSET; |
189 | 190 | break; |
191 | + case KVM_CAP_IOMMU: | |
192 | + r = intel_iommu_found(); | |
193 | + break; | |
190 | 194 | default: |
191 | 195 | r = 0; |
192 | 196 | } |
... | ... | @@ -773,6 +777,7 @@ |
773 | 777 | */ |
774 | 778 | kvm_build_io_pmt(kvm); |
775 | 779 | |
780 | + INIT_LIST_HEAD(&kvm->arch.assigned_dev_head); | |
776 | 781 | } |
777 | 782 | |
778 | 783 | struct kvm *kvm_arch_create_vm(void) |
... | ... | @@ -1336,6 +1341,10 @@ |
1336 | 1341 | |
1337 | 1342 | void kvm_arch_destroy_vm(struct kvm *kvm) |
1338 | 1343 | { |
1344 | + kvm_iommu_unmap_guest(kvm); | |
1345 | +#ifdef KVM_CAP_DEVICE_ASSIGNMENT | |
1346 | + kvm_free_all_assigned_devices(kvm); | |
1347 | +#endif | |
1339 | 1348 | kfree(kvm->arch.vioapic); |
1340 | 1349 | kvm_release_vm_pages(kvm); |
1341 | 1350 | kvm_free_physmem(kvm); |
include/linux/kvm.h
... | ... | @@ -383,7 +383,7 @@ |
383 | 383 | #define KVM_CAP_MP_STATE 14 |
384 | 384 | #define KVM_CAP_COALESCED_MMIO 15 |
385 | 385 | #define KVM_CAP_SYNC_MMU 16 /* Changes to host mmap are reflected in guest */ |
386 | -#ifdef CONFIG_X86 | |
386 | +#if defined(CONFIG_X86)||defined(CONFIG_IA64) | |
387 | 387 | #define KVM_CAP_DEVICE_ASSIGNMENT 17 |
388 | 388 | #endif |
389 | 389 | #define KVM_CAP_IOMMU 18 |