All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sean Christopherson <seanjc@google.com>
To: Rick P Edgecombe <rick.p.edgecombe@intel.com>
Cc: "binbin.wu@linux.intel.com" <binbin.wu@linux.intel.com>,
	"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
	 "linux-coco@lists.linux.dev" <linux-coco@lists.linux.dev>,
	Kai Huang <kai.huang@intel.com>,
	 Dave Hansen <dave.hansen@intel.com>,
	Yan Y Zhao <yan.y.zhao@intel.com>,
	 "kirill.shutemov@linux.intel.com"
	<kirill.shutemov@linux.intel.com>,
	"kas@kernel.org" <kas@kernel.org>,
	 "mingo@redhat.com" <mingo@redhat.com>,
	 "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"pbonzini@redhat.com" <pbonzini@redhat.com>,
	 "nik.borisov@suse.com" <nik.borisov@suse.com>,
	 "linux-doc@vger.kernel.org" <linux-doc@vger.kernel.org>,
	"hpa@zytor.com" <hpa@zytor.com>,
	 "tglx@kernel.org" <tglx@kernel.org>,
	Vishal Annapurve <vannapurve@google.com>,
	"bp@alien8.de" <bp@alien8.de>,  Chao Gao <chao.gao@intel.com>,
	"x86@kernel.org" <x86@kernel.org>
Subject: Re: [PATCH v6 09/11] KVM: TDX: Get/put PAMT pages when (un)mapping private memory
Date: Mon, 6 Jul 2026 14:02:47 -0700	[thread overview]
Message-ID: <akwX9wUS_C-lc-I8@google.com> (raw)
In-Reply-To: <2bdcc07d98df66954b9508be537b6f6a7c9f88de.camel@intel.com>

On Mon, Jul 06, 2026, Rick P Edgecombe wrote:
> On Fri, 2026-07-03 at 11:15 +0800, Binbin Wu wrote:
> > > @@ -1669,16 +1683,29 @@ static struct page *tdx_spte_to_sept_pt(struct kvm
> > > *kvm, gfn_t gfn,
> > >   static int tdx_sept_map_nonleaf_spte(struct kvm *kvm, gfn_t gfn,
> > >   				     enum pg_level level, u64 new_spte)
> > >   {
> > > +	struct kvm_vcpu *vcpu = kvm_get_running_vcpu();
> > > +	struct vcpu_tdx *tdx = to_tdx(vcpu);
> > 
> > Nit:
> > Is it better to move this after checking vcpu is not NULL?
> > Although tdx is not dereferenced in between, if vcpu is NULL,
> > it means container_of() does arithmetic to a NULL pointer.
> 
> Personally I'm on the fence. I'm going to leave it, because Sean did it that
> way:
> https://lore.kernel.org/kvm/20260129011517.3545883-23-seanjc@google.com/

Heh, because of course I'm omnipotent and never make mistakes.

I agree with the nit in the sense that this isn't a great pattern to encourage,
but IMO the root of the ugly pattern is the use of kvm_get_running_vcpu() (which
is sadly the lesser evil in this case).  I.e. I'm not terribly concerned about
this code leading to more "problems" in the future.  And I don't really want to
grab "tdx" later on because that deviates from the standard patterns in KVM and
incorrectly suggests there _is_ a need to pre-check for a non-NULL vCPU.

All that said, we can get the bost of both words by simply not caching "tdx";
there's only one use anyways.

diff --git arch/x86/kvm/vmx/tdx.c arch/x86/kvm/vmx/tdx.c
index ee073cacafbe..f53bac52449b 100644
--- arch/x86/kvm/vmx/tdx.c
+++ arch/x86/kvm/vmx/tdx.c
@@ -1684,7 +1684,6 @@ static int tdx_sept_map_nonleaf_spte(struct kvm *kvm, gfn_t gfn,
                                     enum pg_level level, u64 new_spte)
 {
        struct kvm_vcpu *vcpu = kvm_get_running_vcpu();
-       struct vcpu_tdx *tdx = to_tdx(vcpu);
        gpa_t gpa = gfn_to_gpa(gfn);
        u64 err, entry, level_state;
        struct page *sept_pt;
@@ -1697,7 +1696,7 @@ static int tdx_sept_map_nonleaf_spte(struct kvm *kvm, gfn_t gfn,
        if (!sept_pt)
                return -EIO;
 
-       ret = tdx_pamt_get(page_to_pfn(sept_pt), &tdx->pamt_cache);
+       ret = tdx_pamt_get(page_to_pfn(sept_pt), &to_tdx(vcpu)->pamt_cache);
        if (ret)
                return ret;
 
@@ -1721,7 +1720,6 @@ static int tdx_sept_map_leaf_spte(struct kvm *kvm, gfn_t gfn, enum pg_level leve
        struct kvm_vcpu *vcpu = kvm_get_running_vcpu();
        struct kvm_tdx *kvm_tdx = to_kvm_tdx(kvm);
        kvm_pfn_t pfn = spte_to_pfn(new_spte);
-       struct vcpu_tdx *tdx = to_tdx(vcpu);
        int ret;
 
        if (KVM_BUG_ON(!vcpu, kvm))
@@ -1733,7 +1731,7 @@ static int tdx_sept_map_leaf_spte(struct kvm *kvm, gfn_t gfn, enum pg_level leve
 
        WARN_ON_ONCE((new_spte & VMX_EPT_RWX_MASK) != VMX_EPT_RWX_MASK);
 
-       ret = tdx_pamt_get(pfn, &tdx->pamt_cache);
+       ret = tdx_pamt_get(pfn, &to_tdx(vcpu)->pamt_cache);
        if (ret)
                return ret;

  reply	other threads:[~2026-07-06 21:02 UTC|newest]

Thread overview: 68+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-26  2:35 [PATCH v6 00/11] Dynamic PAMT Rick Edgecombe
2026-05-26  2:35 ` [PATCH v6 01/11] x86/virt/tdx: Simplify tdmr_get_pamt_sz() Rick Edgecombe
2026-06-04 16:05   ` Kiryl Shutsemau
2026-07-01  0:08     ` Edgecombe, Rick P
2026-06-11 18:25   ` Vishal Annapurve
2026-07-03  5:48   ` Chao Gao
2026-07-06 20:18     ` Edgecombe, Rick P
2026-07-07  3:24       ` Yan Zhao
2026-05-26  2:35 ` [PATCH v6 02/11] x86/virt/tdx: Allocate page bitmap for Dynamic PAMT Rick Edgecombe
2026-06-04 16:14   ` Kiryl Shutsemau
2026-07-01  0:14     ` Edgecombe, Rick P
2026-06-11 18:47   ` Vishal Annapurve
2026-07-03  8:26   ` Chao Gao
2026-07-07  3:59   ` Yan Zhao
2026-05-26  2:35 ` [PATCH v6 03/11] x86/virt/tdx: Add tdx_alloc/free_control_page() helpers Rick Edgecombe
2026-06-08  2:11   ` Binbin Wu
2026-06-08  2:18     ` Yan Zhao
2026-07-01  0:15       ` Edgecombe, Rick P
2026-07-06 12:31   ` Chao Gao
2026-07-06 20:23     ` Edgecombe, Rick P
2026-05-26  2:35 ` [PATCH v6 04/11] x86/virt/tdx: Allocate ref counts for Dynamic PAMT memory Rick Edgecombe
2026-07-02  7:20   ` Binbin Wu
2026-07-06 20:26     ` Edgecombe, Rick P
2026-07-06 13:22   ` Chao Gao
2026-07-06 20:26     ` Edgecombe, Rick P
2026-07-07  4:53   ` Yan Zhao
2026-05-26  2:35 ` [PATCH v6 05/11] x86/virt/tdx: Handle concurrent callers in tdx_pamt_get/put() Rick Edgecombe
2026-07-02  7:39   ` Binbin Wu
2026-07-06 20:27     ` Edgecombe, Rick P
2026-07-07  5:54   ` Chao Gao
2026-05-26  2:35 ` [PATCH v6 06/11] x86/virt/tdx: Optimize tdx_pamt_get/put() Rick Edgecombe
2026-05-26  8:57   ` Chao Gao
2026-05-26 16:42     ` Edgecombe, Rick P
2026-06-04 16:59       ` Kiryl Shutsemau
2026-06-05  5:40         ` Chao Gao
2026-06-05 11:42           ` Kiryl Shutsemau
2026-06-05 16:23             ` Dave Hansen
2026-06-08  9:14               ` Kiryl Shutsemau
2026-06-08  9:50               ` Yan Zhao
2026-07-01  1:45                 ` Edgecombe, Rick P
2026-07-01  5:37                   ` Yan Zhao
2026-07-01  1:05               ` Edgecombe, Rick P
2026-07-07  6:45   ` Chao Gao
2026-05-26  2:35 ` [PATCH v6 07/11] KVM: TDX: Allocate PAMT memory for TD and vCPU control structures Rick Edgecombe
2026-07-02  8:55   ` Binbin Wu
2026-07-06 23:47   ` Sean Christopherson
2026-07-06 23:54     ` Edgecombe, Rick P
2026-07-07  0:25       ` Sean Christopherson
2026-07-07  6:54   ` Chao Gao
2026-05-26  2:35 ` [PATCH v6 08/11] x86/tdx: Add APIs to support Dynamic PAMT ops from KVM's fault path Rick Edgecombe
2026-06-04 17:11   ` Kiryl Shutsemau
2026-07-02  9:32   ` Binbin Wu
2026-07-07  7:25   ` Chao Gao
2026-05-26  2:35 ` [PATCH v6 09/11] KVM: TDX: Get/put PAMT pages when (un)mapping private memory Rick Edgecombe
2026-07-03  3:15   ` Binbin Wu
2026-07-06 20:47     ` Edgecombe, Rick P
2026-07-06 21:02       ` Sean Christopherson [this message]
2026-07-06 21:52         ` Edgecombe, Rick P
2026-05-26  2:35 ` [PATCH v6 10/11] x86/virt/tdx: Enable Dynamic PAMT Rick Edgecombe
2026-06-04 17:14   ` Kiryl Shutsemau
2026-06-05  5:25     ` Chao Gao
2026-07-01  1:20       ` Edgecombe, Rick P
2026-07-06 20:48         ` Edgecombe, Rick P
2026-07-03  4:35   ` Binbin Wu
2026-05-26  2:35 ` [PATCH v6 11/11] Documentation/x86: Add documentation for TDX's " Rick Edgecombe
2026-07-03  4:54   ` Binbin Wu
2026-06-08  5:45 ` [PATCH v6 00/11] " Tony Lindgren
2026-07-06 21:01 ` Edgecombe, Rick P

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=akwX9wUS_C-lc-I8@google.com \
    --to=seanjc@google.com \
    --cc=binbin.wu@linux.intel.com \
    --cc=bp@alien8.de \
    --cc=chao.gao@intel.com \
    --cc=dave.hansen@intel.com \
    --cc=hpa@zytor.com \
    --cc=kai.huang@intel.com \
    --cc=kas@kernel.org \
    --cc=kirill.shutemov@linux.intel.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-coco@lists.linux.dev \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=nik.borisov@suse.com \
    --cc=pbonzini@redhat.com \
    --cc=rick.p.edgecombe@intel.com \
    --cc=tglx@kernel.org \
    --cc=vannapurve@google.com \
    --cc=x86@kernel.org \
    --cc=yan.y.zhao@intel.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.