From: Sean Christopherson <seanjc@google.com>
To: David Woodhouse <dwmw2@infradead.org>
Cc: Paolo Bonzini <pbonzini@redhat.com>, Michal Luczaj <mhal@rbox.co>,
kvm@vger.kernel.org
Subject: Re: [PATCH 3/3] KVM: Update gfn_to_pfn_cache khva when it moves within the same page
Date: Wed, 23 Nov 2022 16:10:05 +0000 [thread overview]
Message-ID: <Y35F3avCeh4mfP/F@google.com> (raw)
In-Reply-To: <199eac0011241e68d7c42b713652861e924c4472.camel@infradead.org>
On Wed, Nov 23, 2022, David Woodhouse wrote:
> On Wed, 2022-11-23 at 00:20 +0000, David Woodhouse wrote:
> > From: David Woodhouse <dwmw@amazon.co.uk>
> >
> > In the case where a GPC is refreshed to a different location within the
> > same page, we didn't bother to update it. Mostly we don't need to, but
> > since the ->khva field also includes the offset within the page, that
> > does have to be updated.
> >
> > Fixes: 982ed0de4753 ("KVM: Reinstate gfn_to_pfn_cache with invalidation support")
>
> Hm, wait. That commit wasn't actually broken because at that point the
> page offset was included in the uhva too, so the uhva *did* change and
> we'd (gratuitously) take the slower path through hva_to_pfn_retry()
> when the GPA moved within the same page.
>
> So I think this should actually be:
>
> Fixes: 3ba2c95ea180 ("KVM: Do not incorporate page offset into gfn=>pfn cache user address")
Ya.
> Which means it's only relevant back to v6.0 stable, not all the way
> back to v5.17.
Probably a moot point in the long run since that commit was tagged for stable@
too, in order to simplify the fixes that followed.
> > Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
> > Reviewed-by: Paul Durrant <paul@xen.org>
> > Cc: stable@kernel.org
> >
> > ---
Reviewed-by: Sean Christopherson <seanjc@google.com>
> > virt/kvm/pfncache.c | 7 ++++++-
> > 1 file changed, 6 insertions(+), 1 deletion(-)
> >
> > diff --git a/virt/kvm/pfncache.c b/virt/kvm/pfncache.c
> > index bd4a46aee384..5f83321bfd2a 100644
> > --- a/virt/kvm/pfncache.c
> > +++ b/virt/kvm/pfncache.c
> > @@ -297,7 +297,12 @@ int kvm_gfn_to_pfn_cache_refresh(struct kvm *kvm, struct gfn_to_pfn_cache *gpc,
> > if (!gpc->valid || old_uhva != gpc->uhva) {
> > ret = hva_to_pfn_retry(kvm, gpc);
> > } else {
> > - /* If the HVA→PFN mapping was already valid, don't unmap it. */
> > + /*
> > + * If the HVA→PFN mapping was already valid, don't unmap it.
> > + * But do update gpc->khva because the offset within the page
> > + * may have changed.
> > + */
> > + gpc->khva = old_khva + page_offset;
If/when we rework the APIs, another possible approach would be to store only the
the page aligned address, e.g. force the user to pass in offset+len by doing
something like:
r = kvm_gpc_lock(...);
if (r)
return r;
my_struct = kvm_gpc_kmap(..., offset, len);
next prev parent reply other threads:[~2022-11-23 16:10 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-23 0:20 [PATCH 1/3] KVM: x86/xen: Validate port number in SCHEDOP_poll David Woodhouse
2022-11-23 0:20 ` [PATCH 2/3] KVM: x86/xen: Only do in-kernel acceleration of hypercalls for guest CPL0 David Woodhouse
2022-11-23 16:26 ` Sean Christopherson
2022-11-23 0:20 ` [PATCH 3/3] KVM: Update gfn_to_pfn_cache khva when it moves within the same page David Woodhouse
2022-11-23 12:25 ` David Woodhouse
2022-11-23 16:10 ` Sean Christopherson [this message]
2022-11-23 16:25 ` [PATCH 1/3] KVM: x86/xen: Validate port number in SCHEDOP_poll 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=Y35F3avCeh4mfP/F@google.com \
--to=seanjc@google.com \
--cc=dwmw2@infradead.org \
--cc=kvm@vger.kernel.org \
--cc=mhal@rbox.co \
--cc=pbonzini@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 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.