Linux Confidential Computing Development
 help / color / mirror / Atom feed
From: Sean Christopherson <seanjc@google.com>
To: Ackerley Tng <ackerleytng@google.com>
Cc: Binbin Wu <binbin.wu@linux.intel.com>,
	aik@amd.com, andrew.jones@linux.dev,  brauner@kernel.org,
	chao.p.peng@linux.intel.com, david@kernel.org,
	 jmattson@google.com, jthoughton@google.com,
	michael.roth@amd.com,  oupton@kernel.org, pankaj.gupta@amd.com,
	qperret@google.com,  rick.p.edgecombe@intel.com,
	rientjes@google.com, shivankg@amd.com,  steven.price@arm.com,
	tabba@google.com, willy@infradead.org,  wyihan@google.com,
	yan.y.zhao@intel.com, forkloop@google.com,  pratyush@kernel.org,
	suzuki.poulose@arm.com, aneesh.kumar@kernel.org,
	 liam@infradead.org, Paolo Bonzini <pbonzini@redhat.com>,
	Thomas Gleixner <tglx@kernel.org>,
	 Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
	 Dave Hansen <dave.hansen@linux.intel.com>,
	x86@kernel.org,  "H. Peter Anvin" <hpa@zytor.com>,
	Steven Rostedt <rostedt@goodmis.org>,
	 Masami Hiramatsu <mhiramat@kernel.org>,
	Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
	 Jonathan Corbet <corbet@lwn.net>,
	Shuah Khan <skhan@linuxfoundation.org>,
	 Shuah Khan <shuah@kernel.org>,
	Vishal Annapurve <vannapurve@google.com>,
	 Andrew Morton <akpm@linux-foundation.org>,
	Chris Li <chrisl@kernel.org>,  Kairui Song <kasong@tencent.com>,
	Kemeng Shi <shikemeng@huaweicloud.com>,
	 Nhat Pham <nphamcs@gmail.com>, Barry Song <baohua@kernel.org>,
	 Axel Rasmussen <axelrasmussen@google.com>,
	Yuanchu Xie <yuanchu@google.com>,  Wei Xu <weixugc@google.com>,
	Youngjun Park <youngjun.park@lge.com>,
	 Qi Zheng <qi.zheng@linux.dev>,
	Shakeel Butt <shakeel.butt@linux.dev>,
	 Kiryl Shutsemau <kas@kernel.org>,
	Baoquan He <baoquan.he@linux.dev>, Jason Gunthorpe <jgg@ziepe.ca>,
	 John Hubbard <jhubbard@nvidia.com>, Peter Xu <peterx@redhat.com>,
	tarunsahu@google.com,  Vlastimil Babka <vbabka@kernel.org>,
	kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
	 linux-trace-kernel@vger.kernel.org, linux-doc@vger.kernel.org,
	 linux-kselftest@vger.kernel.org, linux-mm@kvack.org,
	 linux-coco@lists.linux.dev, Fuad Tabba <fuad.tabba@linux.dev>
Subject: Re: [PATCH v10 12/41] KVM: guest_memfd: Call arch make_shared callback for to-shared conversion
Date: Mon, 17 Aug 2026 12:47:49 -0700	[thread overview]
Message-ID: <aoNlZRb5SV7hyNuk@google.com> (raw)
In-Reply-To: <CAEvNRgFNCDDSeuvbwj7pD_d18o1TBXo4TNR2dXHxpm18KPfR5A@mail.gmail.com>

On Sun, Aug 16, 2026, Ackerley Tng wrote:
> Sean Christopherson <seanjc@google.com> writes:
> 
> > On Thu, Aug 13, 2026, Ackerley Tng wrote:
> >> Sean Christopherson <seanjc@google.com> writes:
> >> > That's why I think it's worth analyzing the cost: if it's in the
> >> > noise, leave it alone.  If it's meaningful, figure out a not-too-gross way to skip
> >> > the entire thing if kvm_arch_gmem_make_shared() is a glorified nop in the end.
> >>
> >> Is noise defined relative to the entire conversion process? Would this
> >> benchmark look like
> >>
> >> 1. Convert 4G to shared on TDX with CONFIG_AMD_SEV defined
> >> 2. Convert 4G to shared on TDX without CONFIG_AMD_SEV defined
> >>
> >> and then compare the difference in time taken?
> >
> > That'd work, though I was envisioning something even simpler: use rdtsc() to
> > count the cycles it takes to iterate over various ranges of memory.  Do whatever
> > is easiest for you though.
> 
> I made some changes to add rdtsc() for the conversion process as Sean
> suggested [1], and exercised conversion like this [2]:
> 
> 1. Initialize some memory as private
> 2. Get the guest to fault them into Secure EPTs
> 3. Converts the memory to shared <<== this is being benchmarked
> 4. Converts memory back to private
> 
> I made it build the VM once and convert 5 times:
> 
> ./gmem_benchmark_tdx_convert --iterations=5 --size=1g

...

> And here's the above, tabulated:
> 
>   nr_pages      make_shared            total    percentage
> ----------  ---------------  ---------------  ------------
>          1              930            39278       2.3677%
>          1              252            28060       0.8981%
>          1              176            26952       0.6530%
>          1              176            27038       0.6509%
>          1              176            26980       0.6523%
>          1             1072            37236       2.8789%
>          1              316            28338       1.1151%
>          1              176            27182       0.6475%
>          1              176            26972       0.6525%
>          1              176            26886       0.6546%
>     262144         15041018       6616067680       0.2273%
>     262144         14937462       6608542680       0.2260%
>     262144         15138858       6599494898       0.2294%
>     262144         15721972       6610219850       0.2378%
>     262144         15000406       6615114540       0.2268%
>    1048576         61902982      26400884028       0.2345%
>    1048576         61746114      26401170984       0.2339%
>    1048576         61096794      26404409058       0.2314%
>    1048576         61446290      26447461896       0.2323%
>    1048576         61774646      26444608360       0.2336%
> 
> Looks to me it is within noise.
> 
> I also actually tried measuring the conversion time from userspace with
> CONFIG_AMD_SEV enabled and disabled. Converting a 1G-sized TD was faster
> by 0.2%, which is in line with the above table. Interestingly, when
> converting a 4G-sized TD, skipping kvm_gmem_make_shared() was _slower_
> over 2 runs. I don't have an explanation for that.

Might be some cache/memory locality benefits?  Though with a conversion that big,
it could also be nothing more than bad luck.

> I think the code was correct. (If it makes a difference, I skipped
> kvm_gmem_make_shared() using a custom guest_memfd creation time flag and
> skipped make_shared if the flag was set on the inode.)
> 
> I thought adding a kvm_arch_has_gmem_make_shared(), defaulting it to

I would do kvm_arch_has_gmem_convert() for consistency with the Kconfigs, and
because the cost of the reclaim invocation is a non-issue.

> false for all archs and having x86 override with
> !!kvm_x86_ops.gmem_make_shared is not too bad either:
> + doesn't leak anything, since the function being called is
>   kvm_arch_gmem_make_shared and the accompanying function is
>   kvm_arch_has_gmem_make_shared. Or maybe just a little, since all the
>   other ops don't have the accompanying _has_ function
> + it's a kernel-internal thing
> + not too many lines of code, not too complex

It also provides a good excuse to kill off the #idfefs in guest_memfd.c.
Compile tested only, but I'm thinking this?

From: Sean Christopherson <seanjc@google.com>
Date: Mon, 17 Aug 2026 12:31:50 -0700
Subject: [PATCH] KVM: guest_memfd: Optimize away conversion overheads via
 dead-code elimination

Add and use kvm_arch_has_gmem_convert() to guard guest_memfd's invocation
of arch hooks related to converting memory between private and shared, as
only one half of the x86 CoCo duo needs the runtime hooks (any pre-work is
pure overhead for TDX).  At this exact moment, the overhead is negligible,
but that will change when in-place conversion comes along, at which point
to-shared conversions will "need" to find all affected folios prior to
calling into arch code.  In quotes because very technically that work could
be pushed to arch code, but that would bleed guest_memfd details into arch
code and would be far worse than adding yet another kvm_arch_has... hook.

Opportunistically provide the kvm_arch_gmem_make_private() declaration, and
rely on dead-code elimination to eliminate the call to non-existent code
when CONFIG_HAVE_KVM_ARCH_GMEM_CONVERT=n.

Reported-by: Binbin Wu <binbin.wu@linux.intel.com>
Closes: https://lore.kernel.org/all/1ec08cd8-3072-4753-ad5e-cd34956647f8@linux.intel.com
Suggested-by: Ackerley Tng <ackerleytng@google.com>
Signed-off-by: Sean Christopherson <seanjc@google.com>
---
 arch/x86/include/asm/kvm_host.h | 3 +++
 include/linux/kvm_host.h        | 3 ++-
 virt/kvm/guest_memfd.c          | 5 ++---
 3 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
index 283847619ff8..5d5a7723abb6 100644
--- a/arch/x86/include/asm/kvm_host.h
+++ b/arch/x86/include/asm/kvm_host.h
@@ -1854,6 +1854,9 @@ enum kvm_intr_type {
 #ifdef CONFIG_KVM_GENERIC_MEMORY_ATTRIBUTES
 #define kvm_arch_has_private_mem(kvm) ((kvm)->arch.has_private_mem)
 #endif
+#ifdef CONFIG_HAVE_KVM_ARCH_GMEM_CONVERT
+#define kvm_arch_has_gmem_convert() (!!kvm_x86_ops.gmem_make_private)
+#endif
 
 #define kvm_arch_has_readonly_mem(kvm) (!(kvm)->arch.has_protected_state)
 
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
index 03bfc92864b6..e824ba59c60c 100644
--- a/include/linux/kvm_host.h
+++ b/include/linux/kvm_host.h
@@ -2599,9 +2599,10 @@ static inline int kvm_gmem_get_pfn(struct kvm *kvm,
 }
 #endif /* CONFIG_KVM_GUEST_MEMFD */
 
-#ifdef CONFIG_HAVE_KVM_ARCH_GMEM_CONVERT
 int kvm_arch_gmem_make_private(struct kvm *kvm, gfn_t gfn, kvm_pfn_t pfn,
 			       kvm_pfn_t nr_pages);
+#ifndef CONFIG_HAVE_KVM_ARCH_GMEM_CONVERT
+#define kvm_arch_has_gmem_convert() false
 #endif
 
 #ifdef CONFIG_HAVE_KVM_ARCH_GMEM_POPULATE
diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c
index b596486d184c..39d94938b5f6 100644
--- a/virt/kvm/guest_memfd.c
+++ b/virt/kvm/guest_memfd.c
@@ -773,11 +773,10 @@ int kvm_gmem_get_pfn(struct kvm *kvm, struct kvm_memory_slot *slot,
 		folio_mark_uptodate(folio);
 	}
 
-#ifdef CONFIG_HAVE_KVM_ARCH_GMEM_CONVERT
-	if (kvm_gmem_is_private_mem(file_inode(file), index))
+	if (kvm_arch_has_gmem_convert() &&
+	    kvm_gmem_is_private_mem(file_inode(file), index))
 		r = kvm_arch_gmem_make_private(kvm, gfn, *pfn,
 					       (kvm_pfn_t)1 << *max_order);
-#endif
 
 	folio_unlock(folio);
 

base-commit: 1b731e5ded480bd1e5546aed35584238661ce72e
-- 


  reply	other threads:[~2026-08-17 19:47 UTC|newest]

Thread overview: 118+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-07 21:52 [PATCH v10 00/41] guest_memfd: In-place conversion support Ackerley Tng via B4 Relay
2026-08-07 21:52 ` [PATCH v10 01/41] KVM: guest_memfd: Use kvm_mem_is_private() when populating guest_memfd memory Ackerley Tng via B4 Relay
2026-08-12  3:12   ` Binbin Wu
2026-08-12  8:16   ` Xiaoyao Li
2026-08-12 13:34   ` Fuad Tabba
2026-08-07 21:52 ` [PATCH v10 02/41] KVM: guest_memfd: Introduce per-gmem attributes, use to guard user mappings Ackerley Tng via B4 Relay
2026-08-10 15:12   ` Sean Christopherson
2026-08-12  3:27   ` Binbin Wu
2026-08-07 21:52 ` [PATCH v10 03/41] KVM: Rename KVM_GENERIC_MEMORY_ATTRIBUTES to KVM_VM_MEMORY_ATTRIBUTES Ackerley Tng via B4 Relay
2026-08-07 21:52 ` [PATCH v10 04/41] KVM: Enumerate support for PRIVATE memory iff kvm_arch_has_private_mem is defined Ackerley Tng via B4 Relay
2026-08-12  8:23   ` Xiaoyao Li
2026-08-07 21:52 ` [PATCH v10 05/41] KVM: Rename memory attribute APIs to prepare for in-place gmem conversion Ackerley Tng via B4 Relay
2026-08-12  5:23   ` Binbin Wu
2026-08-07 21:52 ` [PATCH v10 06/41] KVM: Provide generic interface for checking memory private/shared status Ackerley Tng via B4 Relay
2026-08-12  5:33   ` Binbin Wu
2026-08-07 21:52 ` [PATCH v10 07/41] KVM: guest_memfd: Stub in ability to enable in-place shared<=>private conversion Ackerley Tng via B4 Relay
2026-08-10  8:49   ` David Hildenbrand (Arm)
2026-08-10 15:01     ` Sean Christopherson
2026-08-12  9:42       ` Xiaoyao Li
2026-08-13 18:40         ` Ackerley Tng
2026-08-12 10:53       ` David Hildenbrand (Arm)
2026-08-12 21:34         ` Sean Christopherson
2026-08-13 18:30           ` Ackerley Tng
2026-08-12  9:45   ` Xiaoyao Li
2026-08-12 13:35   ` Fuad Tabba
2026-08-07 21:52 ` [PATCH v10 08/41] KVM: Consolidate private memory and guest_memfd ifdeffery in kvm_host.h Ackerley Tng via B4 Relay
2026-08-10  8:50   ` David Hildenbrand (Arm)
2026-08-07 21:52 ` [PATCH v10 09/41] KVM: guest_memfd: Filter both shared and private when invalidating Ackerley Tng via B4 Relay
2026-08-10  9:06   ` David Hildenbrand (Arm)
2026-08-10  9:27     ` Suzuki K Poulose
2026-08-10 19:11       ` Ackerley Tng
2026-08-12 13:35   ` Fuad Tabba
2026-08-07 21:52 ` [PATCH v10 10/41] KVM: guest_memfd: Add base support for KVM_SET_MEMORY_ATTRIBUTES2 Ackerley Tng via B4 Relay
2026-08-07 21:52 ` [PATCH v10 11/41] KVM: guest_memfd: Ensure pages are not in use before conversion Ackerley Tng via B4 Relay
2026-08-08  0:29   ` Yan Zhao
2026-08-09 21:51     ` Yan Zhao
2026-08-10 21:06       ` Ackerley Tng
2026-08-11  1:04         ` Yan Zhao
2026-08-11  2:17           ` Ackerley Tng
2026-08-11  4:50             ` Yan Zhao
2026-08-11 17:35               ` Ackerley Tng
2026-08-11 17:47                 ` Edgecombe, Rick P
2026-08-13 18:51                   ` Ackerley Tng
2026-08-13 20:26                     ` Edgecombe, Rick P
2026-08-13 23:20                       ` Sean Christopherson
2026-08-13 23:30                         ` Edgecombe, Rick P
2026-08-17  6:18                         ` Yan Zhao
2026-08-17 20:12                           ` Sean Christopherson
2026-08-17 21:47                             ` Ackerley Tng
2026-08-17 22:20                               ` Sean Christopherson
2026-08-10  9:19   ` David Hildenbrand (Arm)
2026-08-10 21:41     ` Ackerley Tng
2026-08-10 22:26       ` Sean Christopherson
2026-08-11 17:56         ` David Hildenbrand (Arm)
2026-08-16 23:13           ` Ackerley Tng
2026-08-07 21:52 ` [PATCH v10 12/41] KVM: guest_memfd: Call arch make_shared callback for to-shared conversion Ackerley Tng via B4 Relay
2026-08-13  6:56   ` Binbin Wu
2026-08-13 15:55     ` Sean Christopherson
2026-08-13 21:01       ` Ackerley Tng
2026-08-13 22:08         ` Sean Christopherson
2026-08-14  0:05           ` Ackerley Tng
2026-08-14 15:04             ` Sean Christopherson
2026-08-16 22:46               ` Ackerley Tng
2026-08-17 19:47                 ` Sean Christopherson [this message]
2026-08-17 20:16                   ` Sean Christopherson
2026-08-17 21:10                   ` Ackerley Tng
2026-08-07 21:52 ` [PATCH v10 13/41] KVM: guest_memfd: Return early if range already has requested attributes Ackerley Tng via B4 Relay
2026-08-14  2:30   ` Binbin Wu
2026-08-07 21:52 ` [PATCH v10 14/41] mm/gup: factor out LRU cache draining for folio into lru_cache_drain_for_folio() Ackerley Tng via B4 Relay
2026-08-10  9:22   ` David Hildenbrand (Arm)
2026-08-12 13:37   ` Fuad Tabba
2026-08-07 21:52 ` [PATCH v10 15/41] KVM: guest_memfd: Handle lru_add fbatch refcounts during conversion safety check Ackerley Tng via B4 Relay
2026-08-10  9:25   ` David Hildenbrand (Arm)
2026-08-10 21:29     ` Ackerley Tng
2026-08-12 13:36   ` Fuad Tabba
2026-08-14  3:25   ` Binbin Wu
2026-08-16 23:02     ` Ackerley Tng
2026-08-07 21:52 ` [PATCH v10 16/41] KVM: guest_memfd: Zero page while getting pfn Ackerley Tng via B4 Relay
2026-08-10  9:30   ` David Hildenbrand (Arm)
2026-08-10 23:41     ` Ackerley Tng
2026-08-11  0:18       ` Sean Christopherson
2026-08-11 17:51         ` David Hildenbrand (Arm)
2026-08-14  5:18   ` Binbin Wu
2026-08-07 21:52 ` [PATCH v10 17/41] KVM: SEV: Make 'uaddr' parameter optional for KVM_SEV_SNP_LAUNCH_UPDATE Ackerley Tng via B4 Relay
2026-08-07 21:52 ` [PATCH v10 18/41] KVM: TDX: Make source page optional for KVM_TDX_INIT_MEM_REGION Ackerley Tng via B4 Relay
2026-08-14  5:57   ` Binbin Wu
2026-08-14 17:57     ` Sean Christopherson
2026-08-07 21:52 ` [PATCH v10 19/41] KVM: Move KVM_VM_MEMORY_ATTRIBUTES config definition to x86 Ackerley Tng via B4 Relay
2026-08-10  9:32   ` David Hildenbrand (Arm)
2026-08-07 21:52 ` [PATCH v10 20/41] KVM: Let userspace disable per-VM mem attributes, enable per-gmem attributes Ackerley Tng via B4 Relay
2026-08-10  9:36   ` David Hildenbrand (Arm)
2026-08-13 21:23     ` Ackerley Tng
2026-08-17  9:15       ` David Hildenbrand (Arm)
2026-08-14  6:30   ` Binbin Wu
2026-08-14 18:13     ` Sean Christopherson
2026-08-07 21:53 ` [PATCH v10 21/41] KVM: guest_memfd: Enable INIT_SHARED on guest_memfd for x86 Coco VMs Ackerley Tng via B4 Relay
2026-08-14  6:36   ` Binbin Wu
2026-08-07 21:53 ` [PATCH v10 22/41] KVM: selftests: Create gmem fd before "regular" fd when adding memslot Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 23/41] KVM: selftests: Rename guest_memfd{,_offset} to gmem_{fd,offset} Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 24/41] KVM: selftests: Add support for mmap() on guest_memfd in core library Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 25/41] KVM: selftests: Add selftests global for guest memory attributes capability Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 26/41] KVM: selftests: Add helpers for calling ioctls on guest_memfd Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 27/41] KVM: selftests: Test basic single-page conversion flow Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 28/41] KVM: selftests: Test conversion flow when INIT_SHARED Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 29/41] KVM: selftests: Test conversion precision in guest_memfd Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 30/41] KVM: selftests: Test conversion before allocation Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 31/41] KVM: selftests: Convert with allocated folios in different layouts Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 32/41] KVM: selftests: Test that truncation does not change shared/private status Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 33/41] KVM: selftests: Test that shared/private status is consistent across processes Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 34/41] KVM: selftests: Add helpers to pin pages with CONFIG_GUP_TEST Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 35/41] KVM: selftests: Test conversion with elevated page refcount Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 36/41] KVM: selftests: Reset shared memory after hole-punching Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 37/41] KVM: selftests: Provide function to look up guest_memfd details from gpa Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 38/41] KVM: selftests: Provide common function to set memory attributes Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 39/41] KVM: selftests: Make TEST_EXPECT_SIGBUS thread-safe Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 40/41] KVM: selftests: Update private_mem_conversions_test to mmap() guest_memfd Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 41/41] KVM: selftests: Update private memory exits test to work with per-gmem attributes Ackerley Tng via B4 Relay
2026-08-10  8:43 ` [PATCH v10 00/41] guest_memfd: In-place conversion support David Hildenbrand (Arm)

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=aoNlZRb5SV7hyNuk@google.com \
    --to=seanjc@google.com \
    --cc=ackerleytng@google.com \
    --cc=aik@amd.com \
    --cc=akpm@linux-foundation.org \
    --cc=andrew.jones@linux.dev \
    --cc=aneesh.kumar@kernel.org \
    --cc=axelrasmussen@google.com \
    --cc=baohua@kernel.org \
    --cc=baoquan.he@linux.dev \
    --cc=binbin.wu@linux.intel.com \
    --cc=bp@alien8.de \
    --cc=brauner@kernel.org \
    --cc=chao.p.peng@linux.intel.com \
    --cc=chrisl@kernel.org \
    --cc=corbet@lwn.net \
    --cc=dave.hansen@linux.intel.com \
    --cc=david@kernel.org \
    --cc=forkloop@google.com \
    --cc=fuad.tabba@linux.dev \
    --cc=hpa@zytor.com \
    --cc=jgg@ziepe.ca \
    --cc=jhubbard@nvidia.com \
    --cc=jmattson@google.com \
    --cc=jthoughton@google.com \
    --cc=kas@kernel.org \
    --cc=kasong@tencent.com \
    --cc=kvm@vger.kernel.org \
    --cc=liam@infradead.org \
    --cc=linux-coco@lists.linux.dev \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-trace-kernel@vger.kernel.org \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=mhiramat@kernel.org \
    --cc=michael.roth@amd.com \
    --cc=mingo@redhat.com \
    --cc=nphamcs@gmail.com \
    --cc=oupton@kernel.org \
    --cc=pankaj.gupta@amd.com \
    --cc=pbonzini@redhat.com \
    --cc=peterx@redhat.com \
    --cc=pratyush@kernel.org \
    --cc=qi.zheng@linux.dev \
    --cc=qperret@google.com \
    --cc=rick.p.edgecombe@intel.com \
    --cc=rientjes@google.com \
    --cc=rostedt@goodmis.org \
    --cc=shakeel.butt@linux.dev \
    --cc=shikemeng@huaweicloud.com \
    --cc=shivankg@amd.com \
    --cc=shuah@kernel.org \
    --cc=skhan@linuxfoundation.org \
    --cc=steven.price@arm.com \
    --cc=suzuki.poulose@arm.com \
    --cc=tabba@google.com \
    --cc=tarunsahu@google.com \
    --cc=tglx@kernel.org \
    --cc=vannapurve@google.com \
    --cc=vbabka@kernel.org \
    --cc=weixugc@google.com \
    --cc=willy@infradead.org \
    --cc=wyihan@google.com \
    --cc=x86@kernel.org \
    --cc=yan.y.zhao@intel.com \
    --cc=youngjun.park@lge.com \
    --cc=yuanchu@google.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