linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Zhi Wang <zhi.wang.linux@gmail.com>
To: Michael Roth <michael.roth@amd.com>
Cc: <kvm@vger.kernel.org>, <linux-coco@lists.linux.dev>,
	<linux-mm@kvack.org>, <linux-crypto@vger.kernel.org>,
	<x86@kernel.org>, <linux-kernel@vger.kernel.org>,
	<tglx@linutronix.de>, <mingo@redhat.com>, <jroedel@suse.de>,
	<thomas.lendacky@amd.com>, <hpa@zytor.com>, <ardb@kernel.org>,
	<pbonzini@redhat.com>, <seanjc@google.com>, <vkuznets@redhat.com>,
	<jmattson@google.com>, <luto@kernel.org>,
	<dave.hansen@linux.intel.com>, <slp@redhat.com>,
	<pgonda@google.com>, <peterz@infradead.org>,
	<srinivas.pandruvada@linux.intel.com>, <rientjes@google.com>,
	<dovmurik@linux.ibm.com>, <tobin@ibm.com>, <bp@alien8.de>,
	<vbabka@suse.cz>, <kirill@shutemov.name>, <ak@linux.intel.com>,
	<tony.luck@intel.com>, <marcorr@google.com>,
	<sathyanarayanan.kuppuswamy@linux.intel.com>,
	<alpergun@google.com>, <dgilbert@redhat.com>, <jarkko@kernel.org>,
	<ashish.kalra@amd.com>, <nikunj.dadhania@amd.com>
Subject: Re: [PATCH RFC v8 01/56] KVM: x86: Add 'fault_is_private' x86 op
Date: Wed, 1 Mar 2023 12:25:31 +0200	[thread overview]
Message-ID: <20230301122531.00002657@intel.com> (raw)
In-Reply-To: <20230220183847.59159-2-michael.roth@amd.com>

On Mon, 20 Feb 2023 12:37:52 -0600
Michael Roth <michael.roth@amd.com> wrote:

Basically, I don't think kvm_mmu_fault_is_private() is promising after going
through both SNP and TDX patches:

1) Fault path is critical. kvm_mmu_fault_is_private() is always doing a gfn_to
_memslot() no matter SNP/TDX is enabled or not. It might mostly hits the
slots->last_used_slot, but the worst case is going through an RB-tree search.

Adding extra overhead on the generic fault path needs to be re-considered
carefully. At least, check if the guest is a CC(SNP/TDX) guest.

2) Just after the gfn_to_memslot() in kvm_mmu_fault_is_private(), there is
another gfn_to_memslot():

static inline int kvm_mmu_do_page_fault(struct kvm_vcpu *vcpu, gpa_t cr2_or_gpa,
                                        u64 err, bool prefetch)
{
        struct kvm_page_fault fault = {
                .addr = cr2_or_gpa,
                .error_code = lower_32_bits(err),
                .exec = err & PFERR_FETCH_MASK,
                .write = err & PFERR_WRITE_MASK,
                .present = err & PFERR_PRESENT_MASK,
                .rsvd = err & PFERR_RSVD_MASK,
                .user = err & PFERR_USER_MASK,
                .prefetch = prefetch,
                .is_tdp = likely(vcpu->arch.mmu->page_fault == kvm_tdp_page_fault),
                .nx_huge_page_workaround_enabled =
                        is_nx_huge_page_enabled(vcpu->kvm),

                .max_level = KVM_MAX_HUGEPAGE_LEVEL,
                .req_level = PG_LEVEL_4K,
                .goal_level = PG_LEVEL_4K,
                .is_private = kvm_mmu_fault_is_private(vcpu->kvm, cr2_or_gpa, err),
        };
        int r;

        if (vcpu->arch.mmu->root_role.direct) {
                fault.gfn = fault.addr >> PAGE_SHIFT;
		/* here */
                fault.slot = kvm_vcpu_gfn_to_memslot(vcpu, fault.gfn);
        }

I was thinking if checking the private slot and kvm_slot_can_be_private() is
necessary in kvm_mmu_fault_is_private().

TDP MMU is expecting fault.is_private to indicate if CPU thinks the fault
is private or not (For SNP, it is in PF error code, for TDX it is the shared
bit in the fault GPA). TDP MMU will check if the slot is a private slot or
not, leave the userspace to handle it when they thinks differently.

My points:

1) Resolving the PFER in kvm_x86_ops.fault_is_private and setting
fault.is_private is enough. The rest can be handled by the TDP MMU.

2) Put the kvm_x86_ops.fault_is_private in a separate patch so that TDX series
can include it. (64bit-error code part can stay in another patch)

> This callback is used by the KVM MMU to check whether a #NPF was for a
> private GPA or not.
> 
> In some cases the full 64-bit error code for the #NPF will be needed to
> make this determination, so also update kvm_mmu_do_page_fault() to
> accept the full 64-bit value so it can be plumbed through to the
> callback.
> 
> Signed-off-by: Michael Roth <michael.roth@amd.com>
> ---
>  arch/x86/include/asm/kvm-x86-ops.h |  1 +
>  arch/x86/include/asm/kvm_host.h    |  1 +
>  arch/x86/kvm/mmu/mmu.c             |  3 +--
>  arch/x86/kvm/mmu/mmu_internal.h    | 37 +++++++++++++++++++++++++++---
>  4 files changed, 37 insertions(+), 5 deletions(-)
> 
> diff --git a/arch/x86/include/asm/kvm-x86-ops.h b/arch/x86/include/asm/kvm-x86-ops.h
> index 8dc345cc6318..72183da010b8 100644
> --- a/arch/x86/include/asm/kvm-x86-ops.h
> +++ b/arch/x86/include/asm/kvm-x86-ops.h
> @@ -131,6 +131,7 @@ KVM_X86_OP(msr_filter_changed)
>  KVM_X86_OP(complete_emulated_msr)
>  KVM_X86_OP(vcpu_deliver_sipi_vector)
>  KVM_X86_OP_OPTIONAL_RET0(vcpu_get_apicv_inhibit_reasons);
> +KVM_X86_OP_OPTIONAL_RET0(fault_is_private);
>  
>  #undef KVM_X86_OP
>  #undef KVM_X86_OP_OPTIONAL
> diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
> index e552374f2357..f856d689dda0 100644
> --- a/arch/x86/include/asm/kvm_host.h
> +++ b/arch/x86/include/asm/kvm_host.h
> @@ -1643,6 +1643,7 @@ struct kvm_x86_ops {
>  
>  	void (*load_mmu_pgd)(struct kvm_vcpu *vcpu, hpa_t root_hpa,
>  			     int root_level);
> +	bool (*fault_is_private)(struct kvm *kvm, gpa_t gpa, u64 error_code, bool *private_fault);
>  
>  	bool (*has_wbinvd_exit)(void);
>  
> diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c
> index eda615f3951c..fb3f34b7391c 100644
> --- a/arch/x86/kvm/mmu/mmu.c
> +++ b/arch/x86/kvm/mmu/mmu.c
> @@ -5724,8 +5724,7 @@ int noinline kvm_mmu_page_fault(struct kvm_vcpu *vcpu, gpa_t cr2_or_gpa, u64 err
>  	}
>  
>  	if (r == RET_PF_INVALID) {
> -		r = kvm_mmu_do_page_fault(vcpu, cr2_or_gpa,
> -					  lower_32_bits(error_code), false);
> +		r = kvm_mmu_do_page_fault(vcpu, cr2_or_gpa, error_code, false);
>  		if (KVM_BUG_ON(r == RET_PF_INVALID, vcpu->kvm))
>  			return -EIO;
>  	}
> diff --git a/arch/x86/kvm/mmu/mmu_internal.h b/arch/x86/kvm/mmu/mmu_internal.h
> index e642d431df4b..557a001210df 100644
> --- a/arch/x86/kvm/mmu/mmu_internal.h
> +++ b/arch/x86/kvm/mmu/mmu_internal.h
> @@ -231,6 +231,37 @@ struct kvm_page_fault {
>  
>  int kvm_tdp_page_fault(struct kvm_vcpu *vcpu, struct kvm_page_fault *fault);
>  
> +static bool kvm_mmu_fault_is_private(struct kvm *kvm, gpa_t gpa, u64 err)
> +{
> +	struct kvm_memory_slot *slot;
> +	bool private_fault = false;
> +	gfn_t gfn = gpa_to_gfn(gpa);
> +
> +	slot = gfn_to_memslot(kvm, gfn);
> +	if (!slot) {
> +		pr_debug("%s: no slot, GFN: 0x%llx\n", __func__, gfn);
> +		goto out;
> +	}
> +
> +	if (!kvm_slot_can_be_private(slot)) {
> +		pr_debug("%s: slot is not private, GFN: 0x%llx\n", __func__, gfn);
> +		goto out;
> +	}
> +
> +	if (static_call(kvm_x86_fault_is_private)(kvm, gpa, err, &private_fault))
> +		goto out;
> +
> +	/*
> +	 * Handling below is for UPM self-tests and guests that treat userspace
> +	 * as the authority on whether a fault should be private or not.
> +	 */
> +	private_fault = kvm_mem_is_private(kvm, gpa >> PAGE_SHIFT);
> +
> +out:
> +	pr_debug("%s: GFN: 0x%llx, private: %d\n", __func__, gfn, private_fault);
> +	return private_fault;
> +}
> +
>  /*
>   * Return values of handle_mmio_page_fault(), mmu.page_fault(), fast_page_fault(),
>   * and of course kvm_mmu_do_page_fault().
> @@ -262,11 +293,11 @@ enum {
>  };
>  
>  static inline int kvm_mmu_do_page_fault(struct kvm_vcpu *vcpu, gpa_t cr2_or_gpa,
> -					u32 err, bool prefetch)
> +					u64 err, bool prefetch)
>  {
>  	struct kvm_page_fault fault = {
>  		.addr = cr2_or_gpa,
> -		.error_code = err,
> +		.error_code = lower_32_bits(err),
>  		.exec = err & PFERR_FETCH_MASK,
>  		.write = err & PFERR_WRITE_MASK,
>  		.present = err & PFERR_PRESENT_MASK,
> @@ -280,7 +311,7 @@ static inline int kvm_mmu_do_page_fault(struct kvm_vcpu *vcpu, gpa_t cr2_or_gpa,
>  		.max_level = KVM_MAX_HUGEPAGE_LEVEL,
>  		.req_level = PG_LEVEL_4K,
>  		.goal_level = PG_LEVEL_4K,
> -		.is_private = kvm_mem_is_private(vcpu->kvm, cr2_or_gpa >> PAGE_SHIFT),
> +		.is_private = kvm_mmu_fault_is_private(vcpu->kvm, cr2_or_gpa, err),
>  	};
>  	int r;
>  



  reply	other threads:[~2023-03-01 10:25 UTC|newest]

Thread overview: 147+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-20 18:37 [PATCH RFC v8 00/56] Add AMD Secure Nested Paging (SEV-SNP) Hypervisor Support Michael Roth
2023-02-20 18:37 ` [PATCH RFC v8 01/56] KVM: x86: Add 'fault_is_private' x86 op Michael Roth
2023-03-01 10:25   ` Zhi Wang [this message]
2023-03-18  4:51   ` Isaku Yamahata
2023-03-20 17:46     ` Michael Roth
2023-03-18  4:53   ` Isaku Yamahata
2023-02-20 18:37 ` [PATCH RFC v8 02/56] KVM: x86: Add 'update_mem_attr' " Michael Roth
2023-03-18  4:56   ` Isaku Yamahata
2023-03-20 18:05     ` Michael Roth
2023-03-21 11:21       ` Zhi Wang
     [not found]         ` <20230322015838.z3bwcrvi4gqag3q6@amd.com>
2023-03-23 18:17           ` Zhi Wang
2023-03-28  4:36             ` Michael Roth
2023-03-28 23:00               ` Zhi Wang
2023-03-29 23:50                 ` Michael Roth
2023-02-20 18:37 ` [PATCH RFC v8 03/56] KVM: x86: Add platform hooks for private memory invalidations Michael Roth
2023-03-18  5:13   ` Isaku Yamahata
2023-03-20 18:09     ` Michael Roth
2023-02-20 18:37 ` [PATCH RFC v8 04/56] KVM: Add HVA range operator Michael Roth
2023-02-20 21:37   ` Zhi Wang
2023-03-27  0:34     ` Michael Roth
2023-04-04 14:40       ` Zhi Wang
2023-02-20 18:37 ` [PATCH RFC v8 05/56] KVM: SEV: Require KVM_PROTECTED_VM when AMD_MEM_ENCRYPT is enabled Michael Roth
2023-02-20 18:37 ` [PATCH RFC v8 06/56] KVM: Split out memory attribute xarray updates to helper function Michael Roth
2023-02-20 18:37 ` [PATCH RFC v8 07/56] KVM: SEV: Populate private memory fd during LAUNCH_UPDATE_DATA Michael Roth
2023-02-20 18:37 ` [PATCH RFC v8 08/56] KVM: SEV: Rename sev_{pin,unpin}_memory Michael Roth
2023-03-03 14:00   ` Vlastimil Babka
2023-03-06 11:01     ` Nikunj A. Dadhania
2023-02-20 18:38 ` [PATCH RFC v8 09/56] KVM: SEV: Handle memory backed by restricted memfd Michael Roth
2023-03-03 14:05   ` Vlastimil Babka
2023-03-06 11:03     ` Nikunj A. Dadhania
2023-02-20 18:38 ` [PATCH RFC v8 10/56] x86/cpufeatures: Add SEV-SNP CPU feature Michael Roth
2023-02-21 21:21   ` Sathyanarayanan Kuppuswamy
2023-02-22 23:27     ` Kalra, Ashish
2023-02-20 18:38 ` [PATCH RFC v8 11/56] x86/sev: Add the host SEV-SNP initialization support Michael Roth
2023-02-20 20:12   ` Zhi Wang
2023-02-20 18:38 ` [PATCH RFC v8 12/56] x86/sev: Add RMP entry lookup helpers Michael Roth
2023-03-03 15:28   ` Vlastimil Babka
2023-03-29 22:59     ` Michael Roth
2023-04-20 16:31       ` Vlastimil Babka
2023-02-20 18:38 ` [PATCH RFC v8 13/56] x86/fault: Add helper for dumping RMP entries Michael Roth
2023-02-20 18:38 ` [PATCH RFC v8 14/56] x86/sev: Add helper functions for RMPUPDATE and PSMASH instruction Michael Roth
2023-02-20 18:38 ` [PATCH RFC v8 15/56] x86/sev: Invalidate pages from the direct map when adding them to the RMP table Michael Roth
2023-03-01 12:07   ` Tom Dohrmann
2023-03-01 16:15   ` Dave Hansen
2023-03-28 22:12     ` Michael Roth
2023-02-20 18:38 ` [PATCH RFC v8 16/56] x86/traps: Define RMP violation #PF error code Michael Roth
2023-02-20 18:38 ` [PATCH RFC v8 17/56] x86/fault: Add support to handle the RMP fault for user address Michael Roth
2023-03-01 16:21   ` Dave Hansen
2023-03-28 23:31     ` Michael Roth
2023-04-11 18:27       ` Dave Hansen
2023-03-03 15:31   ` Vlastimil Babka
2023-02-20 18:38 ` [PATCH RFC v8 18/56] x86/fault: fix handle_split_page_fault() to work with memfd backed pages Michael Roth
2023-02-20 19:57   ` Hugh Dickins
2023-02-20 20:31     ` Michael Roth
2023-02-20 18:38 ` [PATCH RFC v8 19/56] x86/fault: Return pfn from dump_pagetable() for SEV-specific fault handling Michael Roth
2023-02-20 21:13   ` Zhi Wang
2023-02-28 10:53   ` Wu Zongyong
2023-02-20 18:38 ` [PATCH RFC v8 20/56] crypto:ccp: Define the SEV-SNP commands Michael Roth
2023-04-17 14:54   ` Sabin Rapan
2023-02-20 18:38 ` [PATCH RFC v8 21/56] crypto: ccp: Add support to initialize the AMD-SP for SEV-SNP Michael Roth
2023-02-20 18:38 ` [PATCH RFC v8 22/56] crypto:ccp: Provide API to issue SEV and SNP commands Michael Roth
2023-02-20 18:38 ` [PATCH RFC v8 23/56] crypto: ccp: Introduce snp leaked pages list Michael Roth
2023-03-03 15:54   ` Vlastimil Babka
2023-02-20 18:38 ` [PATCH RFC v8 24/56] crypto: ccp: Handle the legacy TMR allocation when SNP is enabled Michael Roth
2023-02-21  9:28   ` Zhi Wang
2023-02-21 15:31     ` Kalra, Ashish
2023-02-21 21:15       ` Zhi Wang
2023-02-21 22:06         ` Kalra, Ashish
2023-02-20 18:38 ` [PATCH RFC v8 25/56] crypto: ccp: Handle the legacy SEV command " Michael Roth
2023-02-20 18:38 ` [PATCH RFC v8 26/56] crypto: ccp: Add the SNP_PLATFORM_STATUS command Michael Roth
2023-02-20 18:38 ` [PATCH RFC v8 27/56] crypto: ccp: Add the SNP_{SET,GET}_EXT_CONFIG command Michael Roth
2023-02-22 12:32   ` Zhi Wang
2023-02-22 16:50     ` Tom Lendacky
2023-02-22 22:43     ` Kalra, Ashish
2023-02-23  6:38       ` Zhi Wang
2023-02-23 14:19         ` Tom Lendacky
2023-02-20 18:38 ` [PATCH RFC v8 28/56] crypto: ccp: Provide APIs to query extended attestation report Michael Roth
2023-02-22 20:24   ` Zhi Wang
2023-02-22 22:35     ` Kalra, Ashish
2023-02-23  8:14       ` Zhi Wang
2023-02-20 18:38 ` [PATCH RFC v8 29/56] KVM: SVM: Add support to handle AP reset MSR protocol Michael Roth
2023-02-20 18:38 ` [PATCH RFC v8 30/56] KVM: SVM: Provide the Hypervisor Feature support VMGEXIT Michael Roth
2023-02-20 18:38 ` [PATCH RFC v8 31/56] KVM: SVM: Make AVIC backing, VMSA and VMCB memory allocation SNP safe Michael Roth
2023-02-22 20:42   ` Zhi Wang
2023-02-20 18:38 ` [PATCH RFC v8 32/56] KVM: SVM: Add initial SEV-SNP support Michael Roth
2023-02-23 17:46   ` Zhi Wang
2023-02-20 18:38 ` [PATCH RFC v8 33/56] KVM: SVM: Add KVM_SNP_INIT command Michael Roth
2023-02-20 18:38 ` [PATCH RFC v8 34/56] KVM: SVM: Add KVM_SEV_SNP_LAUNCH_START command Michael Roth
2023-02-23 21:41   ` Zhi Wang
2023-02-24 16:22     ` Tom Lendacky
2023-04-26 17:06   ` Sabin Rapan
2023-04-26 18:02     ` Tom Lendacky
2023-02-20 18:38 ` [PATCH RFC v8 35/56] KVM: SVM: Add KVM_SEV_SNP_LAUNCH_UPDATE command Michael Roth
2023-02-24 11:55   ` Zhi Wang
2023-02-20 18:38 ` [PATCH RFC v8 36/56] KVM: SVM: Add KVM_SEV_SNP_LAUNCH_FINISH command Michael Roth
2023-03-24 14:40   ` Alexander Graf
2023-04-17 13:42   ` Alexander Graf
2023-02-20 18:38 ` [PATCH RFC v8 37/56] KVM: X86: Keep the NPT and RMP page level in sync Michael Roth
2023-02-20 18:38 ` [PATCH RFC v8 38/56] KVM: x86: Define RMP page fault error bits for #NPF Michael Roth
2023-02-20 18:38 ` [PATCH RFC v8 39/56] KVM: SVM: Add support to handle GHCB GPA register VMGEXIT Michael Roth
2023-02-20 18:38 ` [PATCH RFC v8 40/56] KVM: SVM: Add KVM_EXIT_VMGEXIT Michael Roth
2023-02-20 18:38 ` [PATCH RFC v8 41/56] KVM: SVM: Add support to handle MSR based Page State Change VMGEXIT Michael Roth
2023-02-24 15:06   ` Zhi Wang
2023-02-20 18:38 ` [PATCH RFC v8 42/56] KVM: SVM: Add support to handle " Michael Roth
2023-02-20 18:38 ` [PATCH RFC v8 43/56] KVM: x86: Export the kvm_zap_gfn_range() for the SNP use Michael Roth
2023-02-20 18:38 ` [PATCH RFC v8 44/56] KVM: SVM: Add support to handle the RMP nested page fault Michael Roth
2023-02-28 19:11   ` Zhi Wang
2023-02-20 18:38 ` [PATCH RFC v8 45/56] KVM: SVM: Provide support for SNP_GUEST_REQUEST NAE event Michael Roth
2023-02-24 11:01   ` Alexander Graf
2023-02-28 19:34   ` Zhi Wang
2023-04-17 13:05   ` Alexander Graf
2023-02-20 18:38 ` [PATCH RFC v8 46/56] KVM: SVM: Use a VMSA physical address variable for populating VMCB Michael Roth
2023-02-20 18:38 ` [PATCH RFC v8 47/56] KVM: SVM: Support SEV-SNP AP Creation NAE event Michael Roth
2023-02-24 12:37   ` Alexander Graf
2023-02-28 20:47     ` Zhi Wang
2023-03-01 21:14       ` Alexander Graf
2023-04-05  0:54         ` Michael Roth
2023-04-04 22:48     ` Michael Roth
2023-04-05 15:20       ` Tom Lendacky
2023-02-20 18:38 ` [PATCH RFC v8 48/56] KVM: SVM: Add SNP-specific handling for memory attribute updates Michael Roth
2023-03-01 23:37   ` Dave Hansen
2023-04-05 23:48     ` Michael Roth
2023-02-20 18:38 ` [PATCH RFC v8 49/56] KVM: SVM: Implement .fault_is_private callback for SNP Michael Roth
2023-02-20 18:38 ` [PATCH RFC v8 50/56] KVM: SEV: Handle restricted memory invalidations " Michael Roth
2023-03-01 10:41   ` Zhi Wang
2023-02-20 18:38 ` [PATCH RFC v8 51/56] KVM: SVM: Add module parameter to enable the SEV-SNP Michael Roth
2023-03-01 10:45   ` Zhi Wang
2023-02-20 18:38 ` [PATCH RFC v8 52/56] ccp: Add support to decrypt the page Michael Roth
2023-03-01 21:20   ` Zhi Wang
2023-03-02  5:59     ` Dov Murik
2023-03-02 14:33       ` Tom Lendacky
2023-03-02 21:11         ` Dov Murik
2023-02-20 18:38 ` [PATCH RFC v8 53/56] KVM: SVM: Make VMSAVE target area memory allocation SNP safe Michael Roth
2023-03-01 21:23   ` Zhi Wang
2023-02-20 18:38 ` [PATCH RFC v8 54/56] x86/sev: Add KVM commands for instance certs Michael Roth
2023-02-21 12:40   ` Dov Murik
2023-03-02  0:02   ` Zhi Wang
2023-03-02  1:41     ` Dionna Amalie Glaze
2023-03-02 11:27       ` Zhi Wang
2023-03-02 11:34   ` Dov Murik
2023-02-20 18:38 ` [PATCH RFC v8 55/56] x86/sev: Document KVM_SEV_SNP_{G,S}ET_CERTS Michael Roth
2023-02-20 18:38 ` [PATCH RFC v8 56/56] iommu/amd: Add IOMMU_SNP_SHUTDOWN support Michael Roth
2023-03-01 16:56 ` [PATCH RFC v8 00/56] Add AMD Secure Nested Paging (SEV-SNP) Hypervisor Support Dave Hansen
2023-03-01 22:59   ` Zhi Wang
2023-03-01 23:39     ` Dave Hansen
2023-08-03 18:27 ` Schander, Johanna 'Mimoja' Amelie
2023-08-04  1:01   ` Kalra, Ashish

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=20230301122531.00002657@intel.com \
    --to=zhi.wang.linux@gmail.com \
    --cc=ak@linux.intel.com \
    --cc=alpergun@google.com \
    --cc=ardb@kernel.org \
    --cc=ashish.kalra@amd.com \
    --cc=bp@alien8.de \
    --cc=dave.hansen@linux.intel.com \
    --cc=dgilbert@redhat.com \
    --cc=dovmurik@linux.ibm.com \
    --cc=hpa@zytor.com \
    --cc=jarkko@kernel.org \
    --cc=jmattson@google.com \
    --cc=jroedel@suse.de \
    --cc=kirill@shutemov.name \
    --cc=kvm@vger.kernel.org \
    --cc=linux-coco@lists.linux.dev \
    --cc=linux-crypto@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=luto@kernel.org \
    --cc=marcorr@google.com \
    --cc=michael.roth@amd.com \
    --cc=mingo@redhat.com \
    --cc=nikunj.dadhania@amd.com \
    --cc=pbonzini@redhat.com \
    --cc=peterz@infradead.org \
    --cc=pgonda@google.com \
    --cc=rientjes@google.com \
    --cc=sathyanarayanan.kuppuswamy@linux.intel.com \
    --cc=seanjc@google.com \
    --cc=slp@redhat.com \
    --cc=srinivas.pandruvada@linux.intel.com \
    --cc=tglx@linutronix.de \
    --cc=thomas.lendacky@amd.com \
    --cc=tobin@ibm.com \
    --cc=tony.luck@intel.com \
    --cc=vbabka@suse.cz \
    --cc=vkuznets@redhat.com \
    --cc=x86@kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).