Commit 2381ad241d0bea1253a37f314b270848067640bb

Authored by Xiantao Zhang
Committed by Avi Kivity
1 parent b010eb5103

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);
... ... @@ -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