All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yu Zhang <yu.c.zhang@linux.intel.com>
To: David Stevens <stevensd@chromium.org>
Cc: Sean Christopherson <seanjc@google.com>,
	Marc Zyngier <maz@kernel.org>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Peter Xu <peterx@redhat.com>,
	linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev,
	linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
	kvm@vger.kernel.org
Subject: Re: [PATCH v7 3/8] KVM: Make __kvm_follow_pfn not imply FOLL_GET
Date: Wed, 5 Jul 2023 19:56:53 +0800	[thread overview]
Message-ID: <20230705115653.5whvhvcvmflqmcse@linux.intel.com> (raw)
In-Reply-To: <20230704075054.3344915-4-stevensd@google.com>

On Tue, Jul 04, 2023 at 04:50:48PM +0900, David Stevens wrote:
> From: David Stevens <stevensd@chromium.org>
> 
> Make it so that __kvm_follow_pfn does not imply FOLL_GET. This allows
> callers to resolve a gfn when the associated pfn has a valid struct page
> that isn't being actively refcounted (e.g. tail pages of non-compound
> higher order pages). For a caller to safely omit FOLL_GET, all usages of
> the returned pfn must be guarded by a mmu notifier.
> 
> This also adds a is_refcounted_page out parameter to kvm_follow_pfn that
> is set when the returned pfn has an associated struct page with a valid
> refcount. Callers that don't pass FOLL_GET should remember this value
> and use it to avoid places like kvm_is_ad_tracked_page that assume a
> non-zero refcount.
> 
> Signed-off-by: David Stevens <stevensd@chromium.org>
> ---
>  include/linux/kvm_host.h | 10 ++++++
>  virt/kvm/kvm_main.c      | 67 +++++++++++++++++++++-------------------
>  virt/kvm/pfncache.c      |  2 +-
>  3 files changed, 47 insertions(+), 32 deletions(-)
> 
> diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
> index ef2763c2b12e..a45308c7d2d9 100644
> --- a/include/linux/kvm_host.h
> +++ b/include/linux/kvm_host.h
> @@ -1157,6 +1157,9 @@ unsigned long gfn_to_hva_memslot_prot(struct kvm_memory_slot *slot, gfn_t gfn,
>  void kvm_release_page_clean(struct page *page);
>  void kvm_release_page_dirty(struct page *page);
>  
> +void kvm_set_page_accessed(struct page *page);
> +void kvm_set_page_dirty(struct page *page);
> +
>  struct kvm_follow_pfn {
>  	const struct kvm_memory_slot *slot;
>  	gfn_t gfn;
> @@ -1164,10 +1167,17 @@ struct kvm_follow_pfn {
>  	bool atomic;
>  	/* Allow a read fault to create a writeable mapping. */
>  	bool allow_write_mapping;
> +	/*
> +	 * Usage of the returned pfn will be guared by a mmu notifier. Must
> +	 * be true if FOLL_GET is not set.
> +	 */
> +	bool guarded_by_mmu_notifier;

And how? Any place to check the invalidate seq?

B.R.
Yu

WARNING: multiple messages have this Message-ID (diff)
From: Yu Zhang <yu.c.zhang@linux.intel.com>
To: David Stevens <stevensd@chromium.org>
Cc: Marc Zyngier <maz@kernel.org>,
	kvm@vger.kernel.org, Sean Christopherson <seanjc@google.com>,
	linux-kernel@vger.kernel.org, Peter Xu <peterx@redhat.com>,
	kvmarm@lists.linux.dev, linuxppc-dev@lists.ozlabs.org,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v7 3/8] KVM: Make __kvm_follow_pfn not imply FOLL_GET
Date: Wed, 5 Jul 2023 19:56:53 +0800	[thread overview]
Message-ID: <20230705115653.5whvhvcvmflqmcse@linux.intel.com> (raw)
In-Reply-To: <20230704075054.3344915-4-stevensd@google.com>

On Tue, Jul 04, 2023 at 04:50:48PM +0900, David Stevens wrote:
> From: David Stevens <stevensd@chromium.org>
> 
> Make it so that __kvm_follow_pfn does not imply FOLL_GET. This allows
> callers to resolve a gfn when the associated pfn has a valid struct page
> that isn't being actively refcounted (e.g. tail pages of non-compound
> higher order pages). For a caller to safely omit FOLL_GET, all usages of
> the returned pfn must be guarded by a mmu notifier.
> 
> This also adds a is_refcounted_page out parameter to kvm_follow_pfn that
> is set when the returned pfn has an associated struct page with a valid
> refcount. Callers that don't pass FOLL_GET should remember this value
> and use it to avoid places like kvm_is_ad_tracked_page that assume a
> non-zero refcount.
> 
> Signed-off-by: David Stevens <stevensd@chromium.org>
> ---
>  include/linux/kvm_host.h | 10 ++++++
>  virt/kvm/kvm_main.c      | 67 +++++++++++++++++++++-------------------
>  virt/kvm/pfncache.c      |  2 +-
>  3 files changed, 47 insertions(+), 32 deletions(-)
> 
> diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
> index ef2763c2b12e..a45308c7d2d9 100644
> --- a/include/linux/kvm_host.h
> +++ b/include/linux/kvm_host.h
> @@ -1157,6 +1157,9 @@ unsigned long gfn_to_hva_memslot_prot(struct kvm_memory_slot *slot, gfn_t gfn,
>  void kvm_release_page_clean(struct page *page);
>  void kvm_release_page_dirty(struct page *page);
>  
> +void kvm_set_page_accessed(struct page *page);
> +void kvm_set_page_dirty(struct page *page);
> +
>  struct kvm_follow_pfn {
>  	const struct kvm_memory_slot *slot;
>  	gfn_t gfn;
> @@ -1164,10 +1167,17 @@ struct kvm_follow_pfn {
>  	bool atomic;
>  	/* Allow a read fault to create a writeable mapping. */
>  	bool allow_write_mapping;
> +	/*
> +	 * Usage of the returned pfn will be guared by a mmu notifier. Must
> +	 * be true if FOLL_GET is not set.
> +	 */
> +	bool guarded_by_mmu_notifier;

And how? Any place to check the invalidate seq?

B.R.
Yu

WARNING: multiple messages have this Message-ID (diff)
From: Yu Zhang <yu.c.zhang@linux.intel.com>
To: David Stevens <stevensd@chromium.org>
Cc: Sean Christopherson <seanjc@google.com>,
	Marc Zyngier <maz@kernel.org>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Peter Xu <peterx@redhat.com>,
	linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev,
	linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
	kvm@vger.kernel.org
Subject: Re: [PATCH v7 3/8] KVM: Make __kvm_follow_pfn not imply FOLL_GET
Date: Wed, 5 Jul 2023 19:56:53 +0800	[thread overview]
Message-ID: <20230705115653.5whvhvcvmflqmcse@linux.intel.com> (raw)
In-Reply-To: <20230704075054.3344915-4-stevensd@google.com>

On Tue, Jul 04, 2023 at 04:50:48PM +0900, David Stevens wrote:
> From: David Stevens <stevensd@chromium.org>
> 
> Make it so that __kvm_follow_pfn does not imply FOLL_GET. This allows
> callers to resolve a gfn when the associated pfn has a valid struct page
> that isn't being actively refcounted (e.g. tail pages of non-compound
> higher order pages). For a caller to safely omit FOLL_GET, all usages of
> the returned pfn must be guarded by a mmu notifier.
> 
> This also adds a is_refcounted_page out parameter to kvm_follow_pfn that
> is set when the returned pfn has an associated struct page with a valid
> refcount. Callers that don't pass FOLL_GET should remember this value
> and use it to avoid places like kvm_is_ad_tracked_page that assume a
> non-zero refcount.
> 
> Signed-off-by: David Stevens <stevensd@chromium.org>
> ---
>  include/linux/kvm_host.h | 10 ++++++
>  virt/kvm/kvm_main.c      | 67 +++++++++++++++++++++-------------------
>  virt/kvm/pfncache.c      |  2 +-
>  3 files changed, 47 insertions(+), 32 deletions(-)
> 
> diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
> index ef2763c2b12e..a45308c7d2d9 100644
> --- a/include/linux/kvm_host.h
> +++ b/include/linux/kvm_host.h
> @@ -1157,6 +1157,9 @@ unsigned long gfn_to_hva_memslot_prot(struct kvm_memory_slot *slot, gfn_t gfn,
>  void kvm_release_page_clean(struct page *page);
>  void kvm_release_page_dirty(struct page *page);
>  
> +void kvm_set_page_accessed(struct page *page);
> +void kvm_set_page_dirty(struct page *page);
> +
>  struct kvm_follow_pfn {
>  	const struct kvm_memory_slot *slot;
>  	gfn_t gfn;
> @@ -1164,10 +1167,17 @@ struct kvm_follow_pfn {
>  	bool atomic;
>  	/* Allow a read fault to create a writeable mapping. */
>  	bool allow_write_mapping;
> +	/*
> +	 * Usage of the returned pfn will be guared by a mmu notifier. Must
> +	 * be true if FOLL_GET is not set.
> +	 */
> +	bool guarded_by_mmu_notifier;

And how? Any place to check the invalidate seq?

B.R.
Yu

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  parent reply	other threads:[~2023-07-05 11:56 UTC|newest]

Thread overview: 165+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-07-04  7:50 [PATCH v7 0/8] KVM: allow mapping non-refcounted pages David Stevens
2023-07-04  7:50 ` David Stevens
2023-07-04  7:50 ` David Stevens
2023-07-04  7:50 ` [PATCH v7 1/8] KVM: Assert that a page's refcount is elevated when marking accessed/dirty David Stevens
2023-07-04  7:50   ` David Stevens
2023-07-04  7:50   ` David Stevens
2023-07-04  7:50 ` [PATCH v7 2/8] KVM: Introduce __kvm_follow_pfn function David Stevens
2023-07-04  7:50   ` David Stevens
2023-07-04  7:50   ` David Stevens
2023-07-05  3:10   ` Yu Zhang
2023-07-05  3:10     ` Yu Zhang
2023-07-05  3:10     ` Yu Zhang
2023-07-05  9:22     ` David Stevens
2023-07-05  9:22       ` David Stevens
2023-07-05  9:22       ` David Stevens
2023-07-05 10:53       ` Yu Zhang
2023-07-05 10:53         ` Yu Zhang
2023-07-05 10:53         ` Yu Zhang
2023-07-06  5:29         ` David Stevens
2023-07-06  5:29           ` David Stevens
2023-07-06  5:29           ` David Stevens
2023-07-06 14:52           ` Yu Zhang
2023-07-06 14:52             ` Yu Zhang
2023-07-06 14:52             ` Yu Zhang
2023-08-04 22:03             ` Sean Christopherson
2023-08-04 22:03               ` Sean Christopherson
2023-08-04 22:03               ` Sean Christopherson
2023-07-05  8:47   ` Zhi Wang
2023-07-05  8:47     ` Zhi Wang
2023-07-05  8:47     ` Zhi Wang
2023-07-05  9:08     ` David Stevens
2023-07-05  9:08       ` David Stevens
2023-07-05  9:08       ` David Stevens
2023-07-11 17:37       ` Zhi Wang
2023-07-11 17:37         ` Zhi Wang
2023-07-11 17:37         ` Zhi Wang
2023-07-06  1:34   ` Isaku Yamahata
2023-07-06  1:34     ` Isaku Yamahata
2023-07-06  1:34     ` Isaku Yamahata
2023-07-06  5:52     ` David Stevens
2023-07-06  5:52       ` David Stevens
2023-07-06  5:52       ` David Stevens
2023-08-04 22:13   ` Sean Christopherson
2023-08-04 22:13     ` Sean Christopherson
2023-08-04 22:13     ` Sean Christopherson
2023-07-04  7:50 ` [PATCH v7 3/8] KVM: Make __kvm_follow_pfn not imply FOLL_GET David Stevens
2023-07-04  7:50   ` David Stevens
2023-07-04  7:50   ` David Stevens
2023-07-05  7:23   ` Yu Zhang
2023-07-05  7:23     ` Yu Zhang
2023-07-05  7:23     ` Yu Zhang
2023-07-05 11:56   ` Yu Zhang [this message]
2023-07-05 11:56     ` Yu Zhang
2023-07-05 11:56     ` Yu Zhang
2023-07-06  6:09     ` David Stevens
2023-07-06  6:09       ` David Stevens
2023-07-06  6:09       ` David Stevens
2023-07-05 13:19   ` Zhi Wang
2023-07-05 13:19     ` Zhi Wang
2023-07-05 13:19     ` Zhi Wang
2023-07-06  6:49     ` David Stevens
2023-07-06  6:49       ` David Stevens
2023-07-06  6:49       ` David Stevens
2023-07-11 17:33       ` Zhi Wang
2023-07-11 17:33         ` Zhi Wang
2023-07-11 17:33         ` Zhi Wang
2023-07-11 21:59         ` Sean Christopherson
2023-07-11 21:59           ` Sean Christopherson
2023-07-11 21:59           ` Sean Christopherson
2023-09-05  8:26           ` David Stevens
2023-09-05  8:26             ` David Stevens
2023-09-05  8:26             ` David Stevens
2023-09-06  0:45             ` Sean Christopherson
2023-09-06  0:45               ` Sean Christopherson
2023-09-06  0:45               ` Sean Christopherson
2023-09-06  3:24               ` David Stevens
2023-09-06  3:24                 ` David Stevens
2023-09-06  3:24                 ` David Stevens
2023-09-06 22:03                 ` Sean Christopherson
2023-09-06 22:03                   ` Sean Christopherson
2023-09-06 22:03                   ` Sean Christopherson
2023-07-04  7:50 ` [PATCH v7 4/8] KVM: x86/mmu: Migrate to __kvm_follow_pfn David Stevens
2023-07-04  7:50   ` David Stevens
2023-07-04  7:50   ` David Stevens
2023-07-05  8:07   ` Yu Zhang
2023-07-05  8:07     ` Yu Zhang
2023-07-05  8:07     ` Yu Zhang
2023-08-04 22:30     ` Sean Christopherson
2023-08-04 22:30       ` Sean Christopherson
2023-08-04 22:30       ` Sean Christopherson
2023-07-06  1:54   ` Isaku Yamahata
2023-07-06  1:54     ` Isaku Yamahata
2023-07-06  1:54     ` Isaku Yamahata
2023-08-24  8:03     ` David Stevens
2023-08-24  8:03       ` David Stevens
2023-08-24  8:03       ` David Stevens
2023-07-04  7:50 ` [PATCH v7 5/8] KVM: x86/mmu: Don't pass FOLL_GET " David Stevens
2023-07-04  7:50   ` David Stevens
2023-07-04  7:50   ` David Stevens
2023-07-05 10:18   ` Yu Zhang
2023-07-05 10:18     ` Yu Zhang
2023-07-05 10:18     ` Yu Zhang
2023-07-05 14:17     ` Yu Zhang
2023-07-05 14:17       ` Yu Zhang
2023-07-05 14:17       ` Yu Zhang
2023-07-06  4:52     ` David Stevens
2023-07-06  4:52       ` David Stevens
2023-07-06  4:52       ` David Stevens
2023-07-06  7:19       ` Yu Zhang
2023-07-06  7:19         ` Yu Zhang
2023-07-06  7:19         ` Yu Zhang
2023-07-06 15:58       ` Isaku Yamahata
2023-07-06 15:58         ` Isaku Yamahata
2023-07-06 15:58         ` Isaku Yamahata
2023-07-07  1:35         ` David Stevens
2023-07-07  1:35           ` David Stevens
2023-07-07  1:35           ` David Stevens
2023-07-10 16:34           ` Isaku Yamahata
2023-07-10 16:34             ` Isaku Yamahata
2023-07-10 16:34             ` Isaku Yamahata
2023-07-11  2:59             ` David Stevens
2023-07-11  2:59               ` David Stevens
2023-07-11  2:59               ` David Stevens
2023-08-04 22:45       ` Sean Christopherson
2023-08-04 22:45         ` Sean Christopherson
2023-08-04 22:45         ` Sean Christopherson
2023-07-05 10:25   ` Yu Zhang
2023-07-05 10:25     ` Yu Zhang
2023-07-05 10:25     ` Yu Zhang
2023-08-24  8:03     ` David Stevens
2023-08-24  8:03       ` David Stevens
2023-08-24  8:03       ` David Stevens
2023-08-24 15:15       ` Sean Christopherson
2023-08-24 15:15         ` Sean Christopherson
2023-08-24 15:15         ` Sean Christopherson
2023-08-25  1:38         ` David Stevens
2023-08-25  1:38           ` David Stevens
2023-08-25  1:38           ` David Stevens
2023-08-31 21:18           ` Sean Christopherson
2023-08-31 21:18             ` Sean Christopherson
2023-08-31 21:18             ` Sean Christopherson
2023-07-06  2:10   ` Isaku Yamahata
2023-07-06  2:10     ` Isaku Yamahata
2023-07-06  2:10     ` Isaku Yamahata
2023-07-06  5:18     ` David Stevens
2023-07-06  5:18       ` David Stevens
2023-07-06  5:18       ` David Stevens
2023-07-19  6:09   ` Yan Zhao
2023-07-19  6:09     ` Yan Zhao
2023-07-19  6:09     ` Yan Zhao
2023-07-19  7:16     ` David Stevens
2023-07-19  7:16       ` David Stevens
2023-07-19  7:16       ` David Stevens
2023-07-04  7:50 ` [PATCH v7 6/8] KVM: arm64: Migrate " David Stevens
2023-07-04  7:50   ` David Stevens
2023-07-04  7:50   ` David Stevens
2023-07-04  7:50 ` [PATCH v7 7/8] KVM: PPC: " David Stevens
2023-07-04  7:50   ` David Stevens
2023-07-04  7:50   ` David Stevens
2023-07-04  7:50 ` [PATCH v7 8/8] KVM: remove __gfn_to_pfn_memslot David Stevens
2023-07-04  7:50   ` David Stevens
2023-07-04  7:50   ` David Stevens
2023-08-04 22:47 ` [PATCH v7 0/8] KVM: allow mapping non-refcounted pages Sean Christopherson
2023-08-04 22:47   ` Sean Christopherson
2023-08-04 22:47   ` Sean Christopherson

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=20230705115653.5whvhvcvmflqmcse@linux.intel.com \
    --to=yu.c.zhang@linux.intel.com \
    --cc=kvm@vger.kernel.org \
    --cc=kvmarm@lists.linux.dev \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=maz@kernel.org \
    --cc=mpe@ellerman.id.au \
    --cc=peterx@redhat.com \
    --cc=seanjc@google.com \
    --cc=stevensd@chromium.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.