public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
From: Claudio Imbrenda <imbrenda@linux.ibm.com>
To: Janosch Frank <frankja@linux.ibm.com>
Cc: kvm@vger.kernel.org, borntraeger@de.ibm.com, thuth@redhat.com,
	pasic@linux.ibm.com, david@redhat.com,
	linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org,
	scgl@linux.ibm.com, mimu@linux.ibm.com, nrb@linux.ibm.com
Subject: Re: [PATCH v9 11/18] s390/mm: KVM: pv: when tearing down, try to destroy protected pages
Date: Fri, 1 Apr 2022 17:03:20 +0200	[thread overview]
Message-ID: <20220401170320.4b985bc9@p-imbrenda> (raw)
In-Reply-To: <a61d614f-df0a-d0a8-c1f1-45a915e26b23@linux.ibm.com>

On Thu, 31 Mar 2022 15:34:42 +0200
Janosch Frank <frankja@linux.ibm.com> wrote:

> On 3/30/22 14:25, 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 | 18 +++++++++++++++---
> >   1 file changed, 15 insertions(+), 3 deletions(-)
> > 
> > diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtable.h
> > index 23ca0d8e058a..72544a1b4a68 100644
> > --- a/arch/s390/include/asm/pgtable.h
> > +++ b/arch/s390/include/asm/pgtable.h
> > @@ -1118,9 +1118,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))
> > -		uv_convert_owned_from_secure(pte_val(res) & PAGE_MASK);
> > +	/* Nothing to do */
> > +	if (!mm_is_protected(mm) || !pte_present(res))
> > +		return res;
> > +	/*
> > +	 * At this point the reference through the mapping is still present.  
> 
> That's the case because we zap ptes within a mm that's still existing, 
> right? The mm will be deleted after we have unmapped the memory.

not exactly, the mm can exist without pages.

the reference is there because when we enter the function,
there is still a pointer to the page (the PTE itself), the page is still
reachable, and therefore its reference count cannot be less than 1.

when we leave the function, there is no more mapping for the page
(that's the point of the function after all), and only then the counter
can be decremented.

if you look at zap_pte_range in mm/memory.c, you see that we call
ptep_get_and_clear_full first, and then a few lines below we call
__tlb_remove_page which in the end calls put_page on that page.

> 
> 
> > +	 * 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;
> > +	/*
> > +	 * But if something went wrong and the pages could not be destroyed,
> > +	 * the slower export is used as fallback instead.
> > +	 */
> > +	uv_convert_owned_from_secure(pte_val(res) & PAGE_MASK);
> >   	return res;
> >   }
> >     
> 


  reply	other threads:[~2022-04-01 15:54 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-30 12:25 [PATCH v9 00/18] KVM: s390: pv: implement lazy destroy for reboot Claudio Imbrenda
2022-03-30 12:25 ` [PATCH v9 01/18] KVM: s390: pv: leak the topmost page table when destroy fails Claudio Imbrenda
2022-03-31 13:13   ` Janosch Frank
2022-04-01 14:20     ` Claudio Imbrenda
2022-03-30 12:25 ` [PATCH v9 02/18] KVM: s390: pv: handle secure storage violations for protected guests Claudio Imbrenda
2022-03-30 12:25 ` [PATCH v9 03/18] KVM: s390: pv: handle secure storage exceptions for normal guests Claudio Imbrenda
2022-03-30 12:25 ` [PATCH v9 04/18] KVM: s390: pv: refactor s390_reset_acc Claudio Imbrenda
2022-03-31 13:25   ` Janosch Frank
2022-04-01 14:25     ` Claudio Imbrenda
2022-03-30 12:25 ` [PATCH v9 05/18] KVM: s390: pv: usage counter instead of flag Claudio Imbrenda
2022-03-30 12:25 ` [PATCH v9 06/18] KVM: s390: pv: add export before import Claudio Imbrenda
2022-03-30 12:25 ` [PATCH v9 07/18] KVM: s390: pv: module parameter to fence lazy destroy Claudio Imbrenda
2022-03-30 12:25 ` [PATCH v9 08/18] KVM: s390: pv: clear the state without memset Claudio Imbrenda
2022-03-30 12:25 ` [PATCH v9 09/18] KVM: s390: pv: Add kvm_s390_cpus_from_pv to kvm-s390.h and add documentation Claudio Imbrenda
2022-03-30 12:25 ` [PATCH v9 10/18] KVM: s390: pv: add mmu_notifier Claudio Imbrenda
2022-03-31 13:29   ` Janosch Frank
2022-03-30 12:25 ` [PATCH v9 11/18] s390/mm: KVM: pv: when tearing down, try to destroy protected pages Claudio Imbrenda
2022-03-31 13:34   ` Janosch Frank
2022-04-01 15:03     ` Claudio Imbrenda [this message]
2022-03-30 12:25 ` [PATCH v9 12/18] KVM: s390: pv: refactoring of kvm_s390_pv_deinit_vm Claudio Imbrenda
2022-03-30 12:26 ` [PATCH v9 13/18] KVM: s390: pv: cleanup leftover protected VMs if needed Claudio Imbrenda
2022-03-31 14:02   ` Janosch Frank
2022-04-01 15:13     ` Claudio Imbrenda
2022-03-30 12:26 ` [PATCH v9 14/18] KVM: s390: pv: asynchronous destroy for reboot Claudio Imbrenda
2022-03-30 12:26 ` [PATCH v9 15/18] KVM: s390: pv: api documentation for asynchronous destroy Claudio Imbrenda
2022-03-30 12:26 ` [PATCH v9 16/18] KVM: s390: pv: add KVM_CAP_S390_PROTECTED_ASYNC_DISABLE Claudio Imbrenda
2022-03-30 12:26 ` [PATCH v9 17/18] KVM: s390: pv: avoid export before import if possible Claudio Imbrenda
2022-03-30 12:26 ` [PATCH v9 18/18] KVM: s390: pv: support for Destroy fast UVC Claudio Imbrenda

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220401170320.4b985bc9@p-imbrenda \
    --to=imbrenda@linux.ibm.com \
    --cc=borntraeger@de.ibm.com \
    --cc=david@redhat.com \
    --cc=frankja@linux.ibm.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=mimu@linux.ibm.com \
    --cc=nrb@linux.ibm.com \
    --cc=pasic@linux.ibm.com \
    --cc=scgl@linux.ibm.com \
    --cc=thuth@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox