Commit 9bf811da authored by Claudio Imbrenda's avatar Claudio Imbrenda Committed by Janosch Frank
Browse files

s390/mm: KVM: pv: when tearing down, try to destroy protected pages



When ptep_get_and_clear_full is called for a mm teardown, we will now
attempt to destroy the secure pages. This will be faster than export.

In case it was not a teardown, or if for some reason the destroy page
UVC failed, we try with an export page, like before.

Signed-off-by: default avatarClaudio Imbrenda <imbrenda@linux.ibm.com>
Acked-by: default avatarJanosch Frank <frankja@linux.ibm.com>
Reviewed-by: default avatarNico Boehr <nrb@linux.ibm.com>
Link: https://lore.kernel.org/r/20220628135619.32410-11-imbrenda@linux.ibm.com


Message-Id: <20220628135619.32410-11-imbrenda@linux.ibm.com>
Signed-off-by: default avatarJanosch Frank <frankja@linux.ibm.com>
parent ca2fd060
Loading
Loading
Loading
Loading
+16 −3
Original line number Diff line number Diff line
@@ -1182,8 +1182,21 @@ static inline pte_t ptep_get_and_clear_full(struct mm_struct *mm,
	} else {
		res = ptep_xchg_lazy(mm, addr, ptep, __pte(_PAGE_INVALID));
	}
	/* At this point the reference through the mapping is still present */
	if (mm_is_protected(mm) && pte_present(res))
	/* Nothing to do */
	if (!mm_is_protected(mm) || !pte_present(res))
		return res;
	/*
	 * At this point the reference through the mapping is still present.
	 * The notifier should have destroyed all protected vCPUs at this
	 * point, so the destroy should be successful.
	 */
	if (full && !uv_destroy_owned_page(pte_val(res) & PAGE_MASK))
		return res;
	/*
	 * If something went wrong and the page could not be destroyed, or
	 * if this is not a mm teardown, the slower export is used as
	 * fallback instead.
	 */
	uv_convert_owned_from_secure(pte_val(res) & PAGE_MASK);
	return res;
}