diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-10-04 09:30:33 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-10-04 09:30:33 -0700 | 
| commit | ecefbd94b834fa32559d854646d777c56749ef1c (patch) | |
| tree | ca8958900ad9e208a8e5fb7704f1b66dc76131b4 /virt/kvm/iommu.c | |
| parent | ce57e981f2b996aaca2031003b3f866368307766 (diff) | |
| parent | 3d11df7abbff013b811d5615320580cd5d9d7d31 (diff) | |
| download | olio-linux-3.10-ecefbd94b834fa32559d854646d777c56749ef1c.tar.xz olio-linux-3.10-ecefbd94b834fa32559d854646d777c56749ef1c.zip  | |
Merge tag 'kvm-3.7-1' of git://git.kernel.org/pub/scm/virt/kvm/kvm
Pull KVM updates from Avi Kivity:
 "Highlights of the changes for this release include support for vfio
  level triggered interrupts, improved big real mode support on older
  Intels, a streamlines guest page table walker, guest APIC speedups,
  PIO optimizations, better overcommit handling, and read-only memory."
* tag 'kvm-3.7-1' of git://git.kernel.org/pub/scm/virt/kvm/kvm: (138 commits)
  KVM: s390: Fix vcpu_load handling in interrupt code
  KVM: x86: Fix guest debug across vcpu INIT reset
  KVM: Add resampling irqfds for level triggered interrupts
  KVM: optimize apic interrupt delivery
  KVM: MMU: Eliminate pointless temporary 'ac'
  KVM: MMU: Avoid access/dirty update loop if all is well
  KVM: MMU: Eliminate eperm temporary
  KVM: MMU: Optimize is_last_gpte()
  KVM: MMU: Simplify walk_addr_generic() loop
  KVM: MMU: Optimize pte permission checks
  KVM: MMU: Update accessed and dirty bits after guest pagetable walk
  KVM: MMU: Move gpte_access() out of paging_tmpl.h
  KVM: MMU: Optimize gpte_access() slightly
  KVM: MMU: Push clean gpte write protection out of gpte_access()
  KVM: clarify kvmclock documentation
  KVM: make processes waiting on vcpu mutex killable
  KVM: SVM: Make use of asm.h
  KVM: VMX: Make use of asm.h
  KVM: VMX: Make lto-friendly
  KVM: x86: lapic: Clean up find_highest_vector() and count_vectors()
  ...
Conflicts:
	arch/s390/include/asm/processor.h
	arch/x86/kvm/i8259.c
Diffstat (limited to 'virt/kvm/iommu.c')
| -rw-r--r-- | virt/kvm/iommu.c | 16 | 
1 files changed, 11 insertions, 5 deletions
diff --git a/virt/kvm/iommu.c b/virt/kvm/iommu.c index e9fff9830bf..037cb6730e6 100644 --- a/virt/kvm/iommu.c +++ b/virt/kvm/iommu.c @@ -42,13 +42,13 @@ static int kvm_iommu_unmap_memslots(struct kvm *kvm);  static void kvm_iommu_put_pages(struct kvm *kvm,  				gfn_t base_gfn, unsigned long npages); -static pfn_t kvm_pin_pages(struct kvm *kvm, struct kvm_memory_slot *slot, -			   gfn_t gfn, unsigned long size) +static pfn_t kvm_pin_pages(struct kvm_memory_slot *slot, gfn_t gfn, +			   unsigned long size)  {  	gfn_t end_gfn;  	pfn_t pfn; -	pfn     = gfn_to_pfn_memslot(kvm, slot, gfn); +	pfn     = gfn_to_pfn_memslot(slot, gfn);  	end_gfn = gfn + (size >> PAGE_SHIFT);  	gfn    += 1; @@ -56,7 +56,7 @@ static pfn_t kvm_pin_pages(struct kvm *kvm, struct kvm_memory_slot *slot,  		return pfn;  	while (gfn < end_gfn) -		gfn_to_pfn_memslot(kvm, slot, gfn++); +		gfn_to_pfn_memslot(slot, gfn++);  	return pfn;  } @@ -105,7 +105,7 @@ int kvm_iommu_map_pages(struct kvm *kvm, struct kvm_memory_slot *slot)  		 * Pin all pages we are about to map in memory. This is  		 * important because we unmap and unpin in 4kb steps later.  		 */ -		pfn = kvm_pin_pages(kvm, slot, gfn, page_size); +		pfn = kvm_pin_pages(slot, gfn, page_size);  		if (is_error_pfn(pfn)) {  			gfn += 1;  			continue; @@ -300,6 +300,12 @@ static void kvm_iommu_put_pages(struct kvm *kvm,  		/* Get physical address */  		phys = iommu_iova_to_phys(domain, gfn_to_gpa(gfn)); + +		if (!phys) { +			gfn++; +			continue; +		} +  		pfn  = phys >> PAGE_SHIFT;  		/* Unmap address from IO address space */  |