Re: [PATCH v2 1/1] s390/mm: fix virtual-physical address confusion for swiotlb

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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;
>  }




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux