KVM: iommu: fix releasing unmapped page
There are two bugs:
- the 'error page' is forgot to be released
[ it is unneeded after commit a2766325cf
, for backport, we
still do kvm_release_pfn_clean for the error pfn ]
- guest pages are always released regardless of the unmapped page
(e,g, caused by hwpoison)
Signed-off-by: Xiao Guangrong <xiaoguangrong@linux.vnet.ibm.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
This commit is contained in:
parent
d89cc617b9
commit
16b854c889
1 changed files with 7 additions and 0 deletions
|
@ -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 */
|
||||
|
|
Loading…
Reference in a new issue