Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Xiantao Zhang and committed by
Avi Kivity
2381ad24 b010eb51

+14 -1
+4
arch/ia64/kvm/Makefile
··· 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
+9
arch/ia64/kvm/kvm-ia64.c
··· 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 186 break; 188 187 case KVM_CAP_COALESCED_MMIO: 189 188 r = KVM_COALESCED_MMIO_PAGE_OFFSET; 189 + break; 190 + case KVM_CAP_IOMMU: 191 + r = intel_iommu_found(); 190 192 break; 191 193 default: 192 194 r = 0; ··· 777 773 */ 778 774 kvm_build_io_pmt(kvm); 779 775 776 + INIT_LIST_HEAD(&kvm->arch.assigned_dev_head); 780 777 } 781 778 782 779 struct kvm *kvm_arch_create_vm(void) ··· 1341 1336 1342 1337 void kvm_arch_destroy_vm(struct kvm *kvm) 1343 1338 { 1339 + kvm_iommu_unmap_guest(kvm); 1340 + #ifdef KVM_CAP_DEVICE_ASSIGNMENT 1341 + kvm_free_all_assigned_devices(kvm); 1342 + #endif 1344 1343 kfree(kvm->arch.vioapic); 1345 1344 kvm_release_vm_pages(kvm); 1346 1345 kvm_free_physmem(kvm);
+1 -1
include/linux/kvm.h
··· 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