On Mon, 7 Nov 2022 13:12:21 +0100 Nico Boehr <nrb@xxxxxxxxxxxxx> wrote: > swiotlb passes virtual addresses to set_memory_encrypted() and > set_memory_decrypted(), but uv_remove_shared() and uv_set_shared() > expect physical addresses. This currently works, because virtual > and physical addresses are the same. > > Add virt_to_phys() to resolve the virtual-physical confusion. > > Reported-by: Marc Hartmayer <mhartmay@xxxxxxxxxxxxx> > Signed-off-by: Nico Boehr <nrb@xxxxxxxxxxxxx> Reviewed-by: Claudio Imbrenda <imbrenda@xxxxxxxxxxxxx> > --- > arch/s390/include/asm/mem_encrypt.h | 4 ++-- > arch/s390/mm/init.c | 12 ++++++------ > 2 files changed, 8 insertions(+), 8 deletions(-) > > diff --git a/arch/s390/include/asm/mem_encrypt.h b/arch/s390/include/asm/mem_encrypt.h > index 08a8b96606d7..b85e13505a0f 100644 > --- a/arch/s390/include/asm/mem_encrypt.h > +++ b/arch/s390/include/asm/mem_encrypt.h > @@ -4,8 +4,8 @@ > > #ifndef __ASSEMBLY__ > > -int set_memory_encrypted(unsigned long addr, int numpages); > -int set_memory_decrypted(unsigned long addr, int numpages); > +int set_memory_encrypted(unsigned long vaddr, int numpages); > +int set_memory_decrypted(unsigned long vaddr, int numpages); > > #endif /* __ASSEMBLY__ */ > > diff --git a/arch/s390/mm/init.c b/arch/s390/mm/init.c > index 97d66a3e60fb..d509656c67d7 100644 > --- a/arch/s390/mm/init.c > +++ b/arch/s390/mm/init.c > @@ -140,25 +140,25 @@ void mark_rodata_ro(void) > debug_checkwx(); > } > > -int set_memory_encrypted(unsigned long addr, int numpages) > +int set_memory_encrypted(unsigned long vaddr, int numpages) > { > int i; > > /* make specified pages unshared, (swiotlb, dma_free) */ > for (i = 0; i < numpages; ++i) { > - uv_remove_shared(addr); > - addr += PAGE_SIZE; > + uv_remove_shared(virt_to_phys((void *)vaddr)); > + vaddr += PAGE_SIZE; > } > return 0; > } > > -int set_memory_decrypted(unsigned long addr, int numpages) > +int set_memory_decrypted(unsigned long vaddr, int numpages) > { > int i; > /* make specified pages shared (swiotlb, dma_alloca) */ > for (i = 0; i < numpages; ++i) { > - uv_set_shared(addr); > - addr += PAGE_SIZE; > + uv_set_shared(virt_to_phys((void *)vaddr)); > + vaddr += PAGE_SIZE; > } > return 0; > }