From 570a78019001c85f2597665f14af27510aecaf4b Mon Sep 17 00:00:00 2001 From: Xiao Guangrong Date: Fri, 3 Aug 2012 15:36:52 +0800 Subject: [PATCH] --- yaml --- r: 329834 b: refs/heads/master c: 16b854c889673d988285719bc020543a730f9ac6 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/virt/kvm/iommu.c | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 0b5a6b9a99d4..75475b00aecf 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: d89cc617b954aff4030fce178f7d86f59aaf713d +refs/heads/master: 16b854c889673d988285719bc020543a730f9ac6 diff --git a/trunk/virt/kvm/iommu.c b/trunk/virt/kvm/iommu.c index c03f1fb26701..6a67bea4019c 100644 --- a/trunk/virt/kvm/iommu.c +++ b/trunk/virt/kvm/iommu.c @@ -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 */