|
@@ -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 */
|