mirror of https://gitee.com/openkylin/linux.git
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
|
@ -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);
|
pfn = kvm_pin_pages(slot, gfn, page_size);
|
||||||
if (is_error_pfn(pfn)) {
|
if (is_error_pfn(pfn)) {
|
||||||
|
kvm_release_pfn_clean(pfn);
|
||||||
gfn += 1;
|
gfn += 1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -300,6 +301,12 @@ static void kvm_iommu_put_pages(struct kvm *kvm,
|
||||||
|
|
||||||
/* Get physical address */
|
/* Get physical address */
|
||||||
phys = iommu_iova_to_phys(domain, gfn_to_gpa(gfn));
|
phys = iommu_iova_to_phys(domain, gfn_to_gpa(gfn));
|
||||||
|
|
||||||
|
if (!phys) {
|
||||||
|
gfn++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
pfn = phys >> PAGE_SHIFT;
|
pfn = phys >> PAGE_SHIFT;
|
||||||
|
|
||||||
/* Unmap address from IO address space */
|
/* Unmap address from IO address space */
|
||||||
|
|
Loading…
Reference in New Issue