Re: [PATCH v6 11/17] s390/mm: KVM: pv: when tearing down, try to destroy protected pages

Janosch Frank
2022-01-13T10:38:43Z

On 12/3/21 17:58, Claudio Imbrenda wrote:
> 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: Claudio Imbrenda <imbrenda@linux.ibm.com>

Acked-by: Janosch Frank <frankja@linux.ibm.com>

> ---
> arch/s390/include/asm/pgtable.h | 9 +++++++--
> 1 file changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtable.h
> index 23ca0d8e058a..c008b354573e 100644
> --- a/arch/s390/include/asm/pgtable.h
> +++ b/arch/s390/include/asm/pgtable.h
> @@ -1118,9 +1118,14 @@ static inline pte_t ptep_get_and_clear_full(struct mm_struct *mm,
> } else {
> res = ptep_xchg_lazy(mm, addr, ptep, __pte(_PAGE_INVALID));
> }
> + /* Nothing to do */
> + if (!mm_is_protected(mm) || !pte_present(res))
> + return res;
> /* At this point the reference through the mapping is still present */
> - if (mm_is_protected(mm) && pte_present(res))
> - uv_convert_owned_from_secure(pte_val(res) & PAGE_MASK);

Add comment:
The notifier should have tried to destroy the cpus which allows us to
destroy pages. So here we'll try to destroy the pages but if that fails
we fall back to a normal but slower export.

> + if (full && !uv_destroy_owned_page(pte_val(res) & PAGE_MASK))
> + return res;
> + /* If could not destroy, we try export */
> + uv_convert_owned_from_secure(pte_val(res) & PAGE_MASK);
> return res;
> }
>
>