mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Alexey Kardashevskiy <aik@amd.com>
To: Jianxiong Gao <jxgao@google.com>
Cc: x86@kernel.org, linux-kernel@vger.kernel.org,
	kvm@vger.kernel.org, linux-crypto@vger.kernel.org,
	linux-pci@vger.kernel.org, "Thomas Gleixner" <tglx@kernel.org>,
	"Ingo Molnar" <mingo@redhat.com>,
	"Borislav Petkov" <bp@alien8.de>,
	"Dave Hansen" <dave.hansen@linux.intel.com>,
	"H. Peter Anvin" <hpa@zytor.com>,
	"Sean Christopherson" <seanjc@google.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Andy Lutomirski" <luto@kernel.org>,
	"Peter Zijlstra" <peterz@infradead.org>,
	"Ashish Kalra" <ashish.kalra@amd.com>,
	"Tom Lendacky" <thomas.lendacky@amd.com>,
	"Herbert Xu" <herbert@gondor.apana.org.au>,
	"David S. Miller" <davem@davemloft.net>,
	"Bjorn Helgaas" <bhelgaas@google.com>,
	"Juergen Gross" <jgross@suse.com>,
	"Stefano Stabellini" <sstabellini@kernel.org>,
	"Oleksandr Tyshchenko" <oleksandr_tyshchenko@epam.com>,
	"Marek Szyprowski" <m.szyprowski@samsung.com>,
	"Robin Murphy" <robin.murphy@arm.com>,
	"Andrew Morton" <akpm@linux-foundation.org>,
	"David Hildenbrand" <david@kernel.org>,
	"Lorenzo Stoakes" <ljs@kernel.org>,
	"Liam R. Howlett" <liam@infradead.org>,
	"Vlastimil Babka" <vbabka@kernel.org>,
	"Mike Rapoport" <rppt@kernel.org>,
	"Suren Baghdasaryan" <surenb@google.com>,
	"Michal Hocko" <mhocko@suse.com>,
	"Catalin Marinas" <catalin.marinas@arm.com>,
	"Jini Susan George" <jinisusan.george@amd.com>,
	"Kees Cook" <kees@kernel.org>,
	"Michael Ellerman" <mpe@ellerman.id.au>,
	"Nikunj A Dadhania" <nikunj@amd.com>,
	"Ard Biesheuvel" <ardb@kernel.org>,
	"Eric Biggers" <ebiggers@kernel.org>,
	"Kim Phillips" <kim.phillips@amd.com>,
	"Joerg Roedel" <jroedel@suse.de>,
	"Ethan Nelson-Moore" <enelsonmoore@gmail.com>,
	"Tycho Andersen (AMD)" <tycho@kernel.org>,
	"Liam Merwick" <liam.merwick@oracle.com>,
	"Michael Kerrisk" <mtk.manpages@gmail.com>,
	"Suresh Siddha" <suresh.b.siddha@intel.com>,
	"Xiaotian Feng" <dfeng@redhat.com>,
	"Venkatesh Pallipadi" <venkatesh.pallipadi@intel.com>,
	"Andi Kleen" <ak@linux.intel.com>,
	"Kiryl Shutsemau" <kas@kernel.org>,
	"Tony Luck" <tony.luck@intel.com>,
	"Jason Gunthorpe" <jgg@ziepe.ca>,
	"Lu Baolu" <baolu.lu@linux.intel.com>,
	"Xu Yilun" <yilun.xu@linux.intel.com>,
	"Carlos López" <clopez@suse.de>,
	"Jonathan Cameron" <jic23@kernel.org>,
	"Jori Koolstra" <jkoolstra@xs4all.nl>,
	"Thomas Weißschuh" <thomas.weissschuh@linutronix.de>,
	"Aneesh Kumar K.V (Arm)" <aneesh.kumar@kernel.org>,
	"Ian Campbell" <ian.campbell@citrix.com>,
	"Jeremy Fitzhardinge" <jeremy.fitzhardinge@citrix.com>,
	"Petr Tesarik" <ptesarik@suse.com>,
	"David Howells" <dhowells@redhat.com>,
	"Haavard Skinnemoen" <hskinnemoen@atmel.com>,
	"Kenji Kaneshige" <kaneshige.kenji@jp.fujitsu.com>,
	"Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>,
	"Christian Marangi" <ansuelsmth@gmail.com>,
	"Dave Jiang" <dave.jiang@intel.com>,
	"Michael Kelley" <mhklinux@outlook.com>,
	"Ilias Stamatis" <ilstam@amazon.com>,
	"Sumanth Korikkar" <sumanthk@linux.ibm.com>,
	"Simona Vetter" <simona.vetter@ffwll.ch>,
	"Toshi Kani" <toshi.kani@hp.com>,
	"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
	"Vinod Koul" <vkoul@kernel.org>,
	"Jiang Liu" <jiang.liu@linux.intel.com>,
	"Arnd Bergmann" <arnd@arndb.de>,
	"Anshuman Khandual" <anshuman.khandual@arm.com>,
	"Kefeng Wang" <wangkefeng.wang@huawei.com>,
	"Palmer Dabbelt" <palmerdabbelt@google.com>,
	linux-coco@lists.linux.dev, xen-devel@lists.xenproject.org,
	iommu@lists.linux.dev, linux-mm@kvack.org, aik@ozlabs.ru,
	"Santosh Shukla" <santosh.shukla@amd.com>,
	"Pratik R . Sampat" <prsampat@amd.com>,
	"Scott Soule Cheloha" <scott.cheloha@amd.com>,
	"Ackerley Tng" <ackerleytng@google.com>,
	"Fuad Tabba" <tabba@google.com>,
	"Darwin Guo" <darwinguo@google.com>, Shruti <shrutiss@google.com>,
	"Saurabh Singh" <saurabhsinghs@google.com>
Subject: Re: [RFC PATCH kernel 17/17] x86/sev: Flush IOMMU TLB for trusted devices
Date: Wed, 23 Sep 2026 14:34:49 +1000	[thread overview]
Message-ID: <8ff51404-d752-499c-af65-cd25e0731a2e@amd.com> (raw)
In-Reply-To: <CAMGD6P38zYT8FzkFHoaKNEL0tVErK7G+ZLPMzgazAmVoMcD=yQ@mail.gmail.com>



On 23/9/26 05:22, Jianxiong Gao wrote:
> On Wed, Sep 16, 2026 at 5:07 AM Alexey Kardashevskiy <aik@amd.com> wrote:
>> +static int alloc_iommu_tlb_flush_ghcb_pages(void)
>> +{
>> +       unsigned int cpu;
>> +       struct page *pg;
>> +       void *p;
>> +
>> +       /*
>> +        * Allocate per CPU pages while encrypted DMA is not happening yet
>> +        * and smashing is cheap.
>> +        */
>> +       for_each_possible_cpu(cpu) {
>> +               if (per_cpu(iommu_tlb_flush_ghcb_page, cpu))
>> +                       continue;
>> +
>> +               pg = alloc_pages_node(cpu_to_node(cpu), GFP_KERNEL, 0);
>> +               if (!pg)
>> +                       return -ENOMEM;
>> +
>> +               p = page_to_virt(pg);
>> +               /* Trigger psmash in the host os now to avoid psmash race later */
>> +               snp_set_memory_shared((unsigned long)p, 1);
>> +               snp_set_memory_private((unsigned long)p, 1);
>> +               per_cpu(iommu_tlb_flush_ghcb_page, cpu) = p;
>> +       }
>> +
>> +       return 0;
>> +}
>>
>>   int sev_tio_op(u32 guest_rid, unsigned int op, u64 *fw_err, u64 *tdi_id)
>>   {
>> @@ -111,6 +142,24 @@ int sev_tio_op(u32 guest_rid, unsigned int op, u64 *fw_err, u64 *tdi_id)
>>          struct ghcb *ghcb;
>>          int ret;
>>
>> +       if (!(sev_hv_features & GHCB_HV_FT_SNP_SEV_TIO))
>> +               return -EPERM;
>> +
>> +       if (op == SVM_VMGEXIT_SEV_TIO_OP_RUN || op == SVM_VMGEXIT_SEV_TIO_OP_STOP) {
>> +               if (!(sev_hv_features & GHCB_HV_FT_SNP_IOMMU_TLB_FLUSH))
>> +                       return -EPERM;
>> +
>> +               if (op == SVM_VMGEXIT_SEV_TIO_OP_RUN) {
>> +                       if (atomic_inc_return(&sev_tio_devices_num) == 1) {
>> +                               ret = alloc_iommu_tlb_flush_ghcb_pages();
>> +                               if (ret)
>> +                                       return ret;
>> +                       }
>> +               } else if (atomic_dec_return(&sev_tio_devices_num) == 0) {
>> +                       /* Do cleanup or leave it like this? */
>> +               }
>> +       }
> 
> Hi Alexey,
> 
> When testing this series and accepting a locked TDI in the guest
> (echo 1 > /sys/bus/pci/devices/.../tsm/accept), the guest immediately
> terminates with 0x1:0xd (SEV_TERM_SET_LINUX, GHCB_TERM_IOMMUTLB_FLUSH).

Yup, you are right, I do have it fixed exactly like this in my current working tree, just screwed up my rebase (as a newer CPU will do this invalidate differently) and posted a broken version :-/ Sorry about that. Thanks,


> 
> In sev_tio_op(), sev_tio_devices_num is incremented from 0 to 1 before
> alloc_iommu_tlb_flush_ghcb_pages() allocates and initializes the per-CPU
> iommu_tlb_flush_ghcb_page buffers:
> 
> 1. atomic_inc_return(&sev_tio_devices_num) sets sev_tio_devices_num = 1
>     while iommu_tlb_flush_ghcb_page is still NULL on all CPUs.
> 2. alloc_iommu_tlb_flush_ghcb_pages() allocates p for cpu = 0 and calls
>     snp_set_memory_shared((unsigned long)p, 1) to pre-smash the 2M page
>     before per_cpu(iommu_tlb_flush_ghcb_page, cpu) is assigned (and before
>     other CPUs' pages are allocated, in case this task is running on cpu > 0).
> 3. snp_set_memory_shared() -> __set_pages_state() sees
>     atomic_read(&sev_tio_devices_num) != 0 and calls ghcb_flush_iommu_tlb().
> 4. ghcb_flush_iommu_tlb() reads this_cpu_read(iommu_tlb_flush_ghcb_page),
>     gets NULL, and returns -ENOMEM.
> 5. __set_pages_state() treats the non-zero return as fatal and calls
>     sev_es_terminate(SEV_TERM_SET_LINUX, GHCB_TERM_IOMMUTLB_FLUSH).
> 
> Calling alloc_iommu_tlb_flush_ghcb_pages() before incrementing
> sev_tio_devices_num avoids triggering ghcb_flush_iommu_tlb() while the
> per-CPU pages are still being pre-smashed and initialized:
> 
> --- a/arch/x86/coco/sev/core.c
> +++ b/arch/x86/coco/sev/core.c
> @@ -150,13 +150,12 @@ int sev_tio_op(...)
>               return -EPERM;
> 
>           if (op == SVM_VMGEXIT_SEV_TIO_OP_RUN) {
> -            if (atomic_inc_return(&sev_tio_devices_num) == 1) {
> -                ret = alloc_iommu_tlb_flush_ghcb_pages();
> -                if (ret)
> -                    return ret;
> -            }
> -        } else if (atomic_dec_return(&sev_tio_devices_num) == 0) {
> -            /* Do cleanup or leave it like this? */
> +            ret = alloc_iommu_tlb_flush_ghcb_pages();
> +            if (ret)
> +                return ret;
> +            atomic_inc(&sev_tio_devices_num);
> +        } else {
> +            atomic_dec_if_positive(&sev_tio_devices_num);
>           }
>       }
> 
> On Wed, Sep 16, 2026 at 5:07 AM Alexey Kardashevskiy <aik@amd.com> wrote:
>>
>> IOMMU performs RMP checks when SNP is enabled, the results are
>> cached along with the IOMMU translations. When a VM lowers permission
>> of a mapped page (moves to a lower VMPL level or from read+write to
>> read-only or private to shared), the cached RMP check results require
>> invalidation.
>>
>> At the moment the only way to invalidate IOMMU cache is the RMPUPDATE
>> instruction which flushes all IOMMU TLBs. It is a host privileged
>> instruction so a VM needs a way to ensure the host has done it.
>> Note that the guest's RMPADJUST/PVALIDATE do not flush IOMMU TLBs.
>>
>> The host implements a new "IOMMU TLB Flush" VMGEXIT code which is
>> advertised via bit#11 in the GHCB Hypervisor capabilities.
>>
>> Use RMPUPDATE in the following way:
>> - allocate a page per VCPU (to allow lockless flushing);
>> - When invalidation is needed, copy two patterns (A and B) to the page;
>> - invalidate the page so the host can make it shared;
>> - use new GHCB call to request RMPUPDATE on the host;
>> - the host makes the page shared;
>> - the host clears pattern A;
>> - the host makes the page private again;
>> - the host returns to the guest;
>> - check if pattern A has changed and pattern B has not;
>> - if the above failed, panic().
>>
>> The patterns are located far enough to not hit the same cache line to
>> work with the cipher text hiding feature.
>>
>> The host can choose to not execute the request, WARN_ON if this
>> is the case. Further patches will attempt to handle this in other way.
>>
>> Signed-off-by: Alexey Kardashevskiy <aik@amd.com>
>> ---
>>   arch/x86/include/asm/sev-common.h |  2 +
>>   arch/x86/include/uapi/asm/svm.h   |  3 +
>>   arch/x86/coco/sev/core.c          | 92 ++++++++++++++++++++
>>   3 files changed, 97 insertions(+)
>>
>> diff --git a/arch/x86/include/asm/sev-common.h b/arch/x86/include/asm/sev-common.h
>> index ff763c3c5d63..51abf8d061fa 100644
>> --- a/arch/x86/include/asm/sev-common.h
>> +++ b/arch/x86/include/asm/sev-common.h
>> @@ -138,6 +138,7 @@ enum psc_op {
>>   #define GHCB_HV_FT_SNP_AP_CREATION     BIT_ULL(1)
>>   #define GHCB_HV_FT_SNP_MULTI_VMPL      BIT_ULL(5)
>>   #define GHCB_HV_FT_SNP_SEV_TIO         BIT_ULL(7)
>> +#define GHCB_HV_FT_SNP_IOMMU_TLB_FLUSH BIT_ULL(11)
>>
>>   /*
>>    * SNP Page State Change NAE event
>> @@ -210,6 +211,7 @@ struct snp_psc_desc {
>>   #define GHCB_TERM_SECURE_TSC           10      /* Secure TSC initialization failed */
>>   #define GHCB_TERM_SVSM_CA_REMAP_FAIL   11      /* SVSM is present but CA could not be remapped */
>>   #define GHCB_TERM_SAVIC_FAIL           12      /* Secure AVIC-specific failure */
>> +#define GHCB_TERM_IOMMUTLB_FLUSH       13      /* IOMMUTLB flush failed for SEV-TIO device */
>>
>>   #define GHCB_RESP_CODE(v)              ((v) & GHCB_MSR_INFO_MASK)
>>
>> diff --git a/arch/x86/include/uapi/asm/svm.h b/arch/x86/include/uapi/asm/svm.h
>> index 93597ad492bf..269050942c8e 100644
>> --- a/arch/x86/include/uapi/asm/svm.h
>> +++ b/arch/x86/include/uapi/asm/svm.h
>> @@ -160,6 +160,8 @@
>>   #define SVM_VMGEXIT_SEV_TIO_OP_UNBIND  1
>>   #define SVM_VMGEXIT_SEV_TIO_OP_RUN     2
>>   #define SVM_VMGEXIT_SEV_TIO_OP_STOP    3
>> +#define SVM_VMGEXIT_IOMMU_TLB_FLUSH            0x80000022ull
>> +#define SVM_VMGEXIT_IOMMU_TLB_FLUSH_NO_ACTION  1
>>   #define SVM_VMGEXIT_HV_FEATURES                        0x8000fffdull
>>   #define SVM_VMGEXIT_TERM_REQUEST               0x8000fffeull
>>   #define SVM_VMGEXIT_TERM_REASON(reason_set, reason_code)       \
>> @@ -285,6 +287,7 @@
>>          { SVM_VMGEXIT_AP_CREATION,      "vmgexit_ap_creation" }, \
>>          { SVM_VMGEXIT_SEV_TIO_GR,       "vmgexit_sev_tio_guest_request" }, \
>>          { SVM_VMGEXIT_SEV_TIO_OP,       "vmgexit_sev_tio_op" }, \
>> +       { SVM_VMGEXIT_IOMMU_TLB_FLUSH, "vmgexit_sev_tio_iommu_tlb_flush" }, \
>>          { SVM_VMGEXIT_HV_FEATURES,      "vmgexit_hypervisor_feature" }, \
>>          { SVM_EXIT_ERR,         "invalid_guest_state" }
>>
>> diff --git a/arch/x86/coco/sev/core.c b/arch/x86/coco/sev/core.c
>> index ed0e4546d5e5..aa5a3abb4796 100644
>> --- a/arch/x86/coco/sev/core.c
>> +++ b/arch/x86/coco/sev/core.c
>> @@ -44,6 +44,7 @@
>>   #include <asm/cpuid/api.h>
>>   #include <asm/cmdline.h>
>>   #include <asm/msr.h>
>> +#include <asm/archrandom.h>
>>
>>   #include "internal.h"
>>
>> @@ -103,6 +104,36 @@ static unsigned long snp_tsc_freq_khz __ro_after_init;
>>
>>   DEFINE_PER_CPU(struct sev_es_runtime_data*, runtime_data);
>>   DEFINE_PER_CPU(struct sev_es_save_area *, sev_vmsa);
>> +DEFINE_PER_CPU(u8 *, iommu_tlb_flush_ghcb_page);
>> +static atomic_t sev_tio_devices_num;
>> +
>> +static int alloc_iommu_tlb_flush_ghcb_pages(void)
>> +{
>> +       unsigned int cpu;
>> +       struct page *pg;
>> +       void *p;
>> +
>> +       /*
>> +        * Allocate per CPU pages while encrypted DMA is not happening yet
>> +        * and smashing is cheap.
>> +        */
>> +       for_each_possible_cpu(cpu) {
>> +               if (per_cpu(iommu_tlb_flush_ghcb_page, cpu))
>> +                       continue;
>> +
>> +               pg = alloc_pages_node(cpu_to_node(cpu), GFP_KERNEL, 0);
>> +               if (!pg)
>> +                       return -ENOMEM;
>> +
>> +               p = page_to_virt(pg);
>> +               /* Trigger psmash in the host os now to avoid psmash race later */
>> +               snp_set_memory_shared((unsigned long)p, 1);
>> +               snp_set_memory_private((unsigned long)p, 1);
>> +               per_cpu(iommu_tlb_flush_ghcb_page, cpu) = p;
>> +       }
>> +
>> +       return 0;
>> +}
>>
>>   int sev_tio_op(u32 guest_rid, unsigned int op, u64 *fw_err, u64 *tdi_id)
>>   {
>> @@ -111,6 +142,24 @@ int sev_tio_op(u32 guest_rid, unsigned int op, u64 *fw_err, u64 *tdi_id)
>>          struct ghcb *ghcb;
>>          int ret;
>>
>> +       if (!(sev_hv_features & GHCB_HV_FT_SNP_SEV_TIO))
>> +               return -EPERM;
>> +
>> +       if (op == SVM_VMGEXIT_SEV_TIO_OP_RUN || op == SVM_VMGEXIT_SEV_TIO_OP_STOP) {
>> +               if (!(sev_hv_features & GHCB_HV_FT_SNP_IOMMU_TLB_FLUSH))
>> +                       return -EPERM;
>> +
>> +               if (op == SVM_VMGEXIT_SEV_TIO_OP_RUN) {
>> +                       if (atomic_inc_return(&sev_tio_devices_num) == 1) {
>> +                               ret = alloc_iommu_tlb_flush_ghcb_pages();
>> +                               if (ret)
>> +                                       return ret;
>> +                       }
>> +               } else if (atomic_dec_return(&sev_tio_devices_num) == 0) {
>> +                       /* Do cleanup or leave it like this? */
>> +               }
>> +       }
>> +
>>          /* __sev_get_ghcb() needs IRQs disabled because it uses per-CPU GHCB. */
>>          guard(irqsave)();
>>
>> @@ -347,6 +396,42 @@ static int vmgexit_psc(struct ghcb *ghcb, struct snp_psc_desc *desc)
>>          return ret;
>>   }
>>
>> +static int ghcb_flush_iommu_tlb(struct ghcb *ghcb)
>> +{
>> +       /* AES encrypts with 16 byte blocks */
>> +       unsigned long s1[BITS_TO_LONGS(128)], s2[BITS_TO_LONGS(128)];
>> +       void *p = this_cpu_read(iommu_tlb_flush_ghcb_page), *p2;
>> +       struct es_em_ctxt ctxt;
>> +       int ret;
>> +
>> +       if (!p)
>> +               return -ENOMEM;
>> +
>> +       /* Keep patterns apart far enough to not share the same cache line */
>> +       p2 = (u8 *) p + 2048;
>> +
>> +       vc_ghcb_invalidate(ghcb);
>> +
>> +       BUILD_BUG_ON(ARRAY_SIZE(s1) != 2);
>> +       if (!rdrand_long(s1) || !rdrand_long(s1 + 1) ||
>> +           !rdrand_long(s2) || !rdrand_long(s2 + 1))
>> +               return -EFAULT;
>> +
>> +       memcpy(p, s1, sizeof(s1));
>> +       memcpy(p2, s2, sizeof(s2));
>> +
>> +       pvalidate((unsigned long) p, RMP_PG_SIZE_4K, false);
>> +       ret = sev_es_ghcb_hv_call(ghcb, &ctxt, SVM_VMGEXIT_IOMMU_TLB_FLUSH, __pa(p), 0);
>> +       pvalidate((unsigned long) p, RMP_PG_SIZE_4K, true);
>> +
>> +       /* Ensure that the host change is visible */
>> +       smp_mb();
>> +
>> +       if (!memcmp(p, s1, sizeof(s1)) || memcmp(p2, s2, sizeof(s2)))
>> +               return -EFAULT;
>> +
>> +       return 0;
>> +}
>>   static unsigned long __set_pages_state(struct snp_psc_desc *data, unsigned long vaddr,
>>                                         unsigned long vaddr_end, int op)
>>   {
>> @@ -404,6 +489,13 @@ static unsigned long __set_pages_state(struct snp_psc_desc *data, unsigned long
>>          if (!ghcb || vmgexit_psc(ghcb, data))
>>                  sev_es_terminate(SEV_TERM_SET_LINUX, GHCB_TERM_PSC);
>>
>> +       if (atomic_read(&sev_tio_devices_num)) {
>> +               int ret = ghcb_flush_iommu_tlb(ghcb);
>> +
>> +               if (ret)
>> +                       sev_es_terminate(SEV_TERM_SET_LINUX, GHCB_TERM_IOMMUTLB_FLUSH);
>> +       }
>> +
>>          __sev_put_ghcb(&state);
>>
>>          local_irq_restore(flags);
>> --
>> 2.55.0
>>
>>
> 
> 

-- 
Alexey


      reply	other threads:[~2026-09-23  4:35 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-16 11:51 [RFC PATCH kernel 00/17] PCI/TSM: coco/sev-guest: Implement SEV-TIO PCIe TDISP (phase2) Alexey Kardashevskiy
2026-09-16 11:51 ` [RFC PATCH kernel 01/17] pci/dma/tsm: Call disable DMA bus hook on cleanup Alexey Kardashevskiy
2026-09-16 17:49   ` Borislav Petkov
2026-09-17  2:28     ` Alexey Kardashevskiy
2026-09-16 11:51 ` [RFC PATCH kernel 02/17] pci/tsm: Fix stale comment about TDI report range start Alexey Kardashevskiy
2026-09-23 20:59   ` Bjorn Helgaas
2026-09-16 11:51 ` [RFC PATCH kernel 03/17] tsm/core: Store range_id in pci_tsm_mmio_entry Alexey Kardashevskiy
2026-09-16 11:51 ` [RFC PATCH kernel 04/17] crypto/ccp/tsm: Use TSM API for DOE Alexey Kardashevskiy
2026-09-16 11:51 ` [RFC PATCH kernel 05/17] tsm-core: Register nevertheless Alexey Kardashevskiy
2026-09-16 11:51 ` [RFC PATCH kernel 06/17] x86/io/tsm: Allow mixed ioremap for shared+private BARs Alexey Kardashevskiy
2026-09-16 11:51 ` [RFC PATCH kernel 07/17] x86/dma: Revert "x86: Remove unnecessary architecture-specific <asm/device.h>" Alexey Kardashevskiy
2026-09-16 11:51 ` [RFC PATCH kernel 08/17] x86/dma: Add ARCH_HAS_PHYS_TO_DMA Alexey Kardashevskiy
2026-09-16 11:51 ` [RFC PATCH kernel 09/17] dma/swiotlb: Force shared DMA for allocatios from SWIOTLB Alexey Kardashevskiy
2026-09-16 11:51 ` [RFC PATCH kernel 10/17] x86, dma: Allow accepted devices to map private memory Alexey Kardashevskiy
2026-09-16 12:48   ` Jason Gunthorpe
2026-09-16 11:51 ` [RFC PATCH kernel 11/17] tsm/core: Add TDI status Alexey Kardashevskiy
2026-09-16 11:51 ` [RFC PATCH kernel 12/17] coco/sev-guest: Allow multiple source files in the driver Alexey Kardashevskiy
2026-09-16 11:51 ` [RFC PATCH kernel 13/17] x86/sev: Pass HV features to sev-guest device via platform data Alexey Kardashevskiy
2026-09-16 11:51 ` [RFC PATCH kernel 14/17] x86/sev: Add GHCB calls for SEV-TIO Alexey Kardashevskiy
2026-09-16 11:51 ` [RFC PATCH kernel 15/17] x86/sev: Implement guest TSM driver for SEV-TIO (phase2, DMA) Alexey Kardashevskiy
2026-09-16 11:51 ` [RFC PATCH kernel 16/17] x86/sev: Enable secure MMIO (phase2) Alexey Kardashevskiy
2026-09-16 11:51 ` [RFC PATCH kernel 17/17] x86/sev: Flush IOMMU TLB for trusted devices Alexey Kardashevskiy
2026-09-22 19:22   ` Jianxiong Gao
2026-09-23  4:34     ` Alexey Kardashevskiy [this message]

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=8ff51404-d752-499c-af65-cd25e0731a2e@amd.com \
    --to=aik@amd.com \
    --cc=ackerleytng@google.com \
    --cc=aik@ozlabs.ru \
    --cc=ak@linux.intel.com \
    --cc=akpm@linux-foundation.org \
    --cc=aneesh.kumar@kernel.org \
    --cc=anshuman.khandual@arm.com \
    --cc=ansuelsmth@gmail.com \
    --cc=ardb@kernel.org \
    --cc=arnd@arndb.de \
    --cc=ashish.kalra@amd.com \
    --cc=baolu.lu@linux.intel.com \
    --cc=bhelgaas@google.com \
    --cc=bp@alien8.de \
    --cc=catalin.marinas@arm.com \
    --cc=clopez@suse.de \
    --cc=darwinguo@google.com \
    --cc=dave.hansen@linux.intel.com \
    --cc=dave.jiang@intel.com \
    --cc=davem@davemloft.net \
    --cc=david@kernel.org \
    --cc=dfeng@redhat.com \
    --cc=dhowells@redhat.com \
    --cc=ebiggers@kernel.org \
    --cc=enelsonmoore@gmail.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=herbert@gondor.apana.org.au \
    --cc=hpa@zytor.com \
    --cc=hskinnemoen@atmel.com \
    --cc=ian.campbell@citrix.com \
    --cc=ilpo.jarvinen@linux.intel.com \
    --cc=ilstam@amazon.com \
    --cc=iommu@lists.linux.dev \
    --cc=jeremy.fitzhardinge@citrix.com \
    --cc=jgg@ziepe.ca \
    --cc=jgross@suse.com \
    --cc=jiang.liu@linux.intel.com \
    --cc=jic23@kernel.org \
    --cc=jinisusan.george@amd.com \
    --cc=jkoolstra@xs4all.nl \
    --cc=jroedel@suse.de \
    --cc=jxgao@google.com \
    --cc=kaneshige.kenji@jp.fujitsu.com \
    --cc=kas@kernel.org \
    --cc=kees@kernel.org \
    --cc=kim.phillips@amd.com \
    --cc=kvm@vger.kernel.org \
    --cc=liam.merwick@oracle.com \
    --cc=liam@infradead.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=linux-pci@vger.kernel.org \
    --cc=ljs@kernel.org \
    --cc=luto@kernel.org \
    --cc=m.szyprowski@samsung.com \
    --cc=mhklinux@outlook.com \
    --cc=mhocko@suse.com \
    --cc=mingo@redhat.com \
    --cc=mpe@ellerman.id.au \
    --cc=mtk.manpages@gmail.com \
    --cc=nikunj@amd.com \
    --cc=oleksandr_tyshchenko@epam.com \
    --cc=palmerdabbelt@google.com \
    --cc=pbonzini@redhat.com \
    --cc=peterz@infradead.org \
    --cc=prsampat@amd.com \
    --cc=ptesarik@suse.com \
    --cc=robin.murphy@arm.com \
    --cc=rppt@kernel.org \
    --cc=santosh.shukla@amd.com \
    --cc=saurabhsinghs@google.com \
    --cc=scott.cheloha@amd.com \
    --cc=seanjc@google.com \
    --cc=shrutiss@google.com \
    --cc=simona.vetter@ffwll.ch \
    --cc=sstabellini@kernel.org \
    --cc=sumanthk@linux.ibm.com \
    --cc=surenb@google.com \
    --cc=suresh.b.siddha@intel.com \
    --cc=tabba@google.com \
    --cc=tglx@kernel.org \
    --cc=thomas.lendacky@amd.com \
    --cc=thomas.weissschuh@linutronix.de \
    --cc=tony.luck@intel.com \
    --cc=toshi.kani@hp.com \
    --cc=tycho@kernel.org \
    --cc=vbabka@kernel.org \
    --cc=venkatesh.pallipadi@intel.com \
    --cc=vkoul@kernel.org \
    --cc=wangkefeng.wang@huawei.com \
    --cc=x86@kernel.org \
    --cc=xen-devel@lists.xenproject.org \
    --cc=yilun.xu@linux.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®