On Tue, Apr 26, 2016 at 05:58:12PM -0500, Tom Lendacky wrote: > Since DMA addresses will effectively look like 48-bit addresses when the > memory encryption mask is set, SWIOTLB is needed if the DMA mask of the > device performing the DMA does not support 48-bits. SWIOTLB will be > initialized to create un-encrypted bounce buffers for use by these devices. > I presume the sme_me_mask does not use the lower 48 bits? ..snip.. > diff --git a/arch/x86/mm/mem_encrypt.c b/arch/x86/mm/mem_encrypt.c > index 7d56d1b..594dc65 100644 > --- a/arch/x86/mm/mem_encrypt.c > +++ b/arch/x86/mm/mem_encrypt.c > @@ -12,6 +12,8 @@ > > #include <linux/init.h> > #include <linux/mm.h> > +#include <linux/dma-mapping.h> > +#include <linux/swiotlb.h> > > #include <asm/mem_encrypt.h> > #include <asm/cacheflush.h> > @@ -168,6 +170,25 @@ void __init sme_early_init(void) > } > > /* Architecture __weak replacement functions */ > +void __init mem_encrypt_init(void) > +{ > + if (!sme_me_mask) > + return; > + > + /* Make SWIOTLB use an unencrypted DMA area */ > + swiotlb_clear_encryption(); > +} > + > +unsigned long swiotlb_get_me_mask(void) > +{ > + return sme_me_mask; > +} > + > +void swiotlb_set_mem_dec(void *vaddr, unsigned long size) > +{ > + sme_set_mem_dec(vaddr, size); > +} > + > void __init *efi_me_early_memremap(resource_size_t paddr, > unsigned long size) > { > diff --git a/include/linux/swiotlb.h b/include/linux/swiotlb.h > index 017fced..121b9de 100644 > --- a/include/linux/swiotlb.h > +++ b/include/linux/swiotlb.h > @@ -30,6 +30,7 @@ int swiotlb_init_with_tbl(char *tlb, unsigned long nslabs, int verbose); > extern unsigned long swiotlb_nr_tbl(void); > unsigned long swiotlb_size_or_default(void); > extern int swiotlb_late_init_with_tbl(char *tlb, unsigned long nslabs); > +extern void __init swiotlb_clear_encryption(void); > > /* > * Enumeration for sync targets > diff --git a/init/main.c b/init/main.c > index b3c6e36..1013d1c 100644 > --- a/init/main.c > +++ b/init/main.c > @@ -458,6 +458,10 @@ void __init __weak thread_info_cache_init(void) > } > #endif > > +void __init __weak mem_encrypt_init(void) > +{ > +} > + > /* > * Set up kernel memory allocators > */ > @@ -597,6 +601,8 @@ asmlinkage __visible void __init start_kernel(void) > */ > locking_selftest(); > > + mem_encrypt_init(); > + > #ifdef CONFIG_BLK_DEV_INITRD > if (initrd_start && !initrd_below_start_ok && > page_to_pfn(virt_to_page((void *)initrd_start)) < min_low_pfn) { What happens if devices use the bounce buffer before mem_encrypt_init()? ..snip.. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>