KVM: iommu: fix releasing unmapped page
[platform/adaptation/renesas_rcar/renesas_kernel.git] / virt / kvm / iommu.c
index c03f1fb..6a67bea 100644 (file)
@@ -107,6 +107,7 @@ int kvm_iommu_map_pages(struct kvm *kvm, struct kvm_memory_slot *slot)
                 */
                pfn = kvm_pin_pages(slot, gfn, page_size);
                if (is_error_pfn(pfn)) {
+                       kvm_release_pfn_clean(pfn);
                        gfn += 1;
                        continue;
                }
@@ -300,6 +301,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 */