[PATCH kernel] powerpc/pseries/ddw: Extend upper limit for huge DMA window for persistent memory

Alexey Kardashevskiy aik at ozlabs.ru
Fri Apr 3 19:06:51 AEDT 2020


Hi Wen,

Can you please try this? It contains 3 patches from Christoph Hellwig
plus my patch on top, this should improve performance when DMA-ing not
to/from persistent memory:

https://github.com/aik/linux/commits/dma-bypass.3

I am looking for any benchmarks not related to persistent memory. Thanks,



On 03/04/2020 09:09, Wen Xiong wrote:
> I applied the patch on top of the latest upstream kernel. I ran HTX over
> pmem nodes for several hours and it works.
>  
> Tested-by: Wen Xiong<wenxiong at linux.vnet.ibm.com>
>  
> Thanks,
> Wendy
> 
>     ----- Original message -----
>     From: Alexey Kardashevskiy <aik at ozlabs.ru>
>     To: linuxppc-dev at lists.ozlabs.org
>     Cc: Alexey Kardashevskiy <aik at ozlabs.ru>, David Gibson
>     <david at gibson.dropbear.id.au>, Michael Ellerman
>     <mpe at ellerman.id.au>, Oliver O'Halloran <oohall at gmail.com>, "Aneesh
>     Kumar K . V" <aneesh.kumar at linux.ibm.com>, Wen Xiong
>     <wenxiong at us.ibm.com>, Brian J King <bjking1 at us.ibm.com>
>     Subject: [EXTERNAL] [PATCH kernel] powerpc/pseries/ddw: Extend upper
>     limit for huge DMA window for persistent memory
>     Date: Mon, Mar 30, 2020 8:23 PM
>      
>     Unlike normal memory ("memory" compatible type in the FDT),
>     the persistent memory ("ibm,pmemory" in the FDT) can be mapped anywhere
>     in the guest physical space and it can be used for DMA.
> 
>     In order to maintain 1:1 mapping via the huge DMA window, we need to
>     know the maximum physical address at the time of the window setup.
>     So far we've been looking at "memory" nodes but "ibm,pmemory" does not
>     have fixed addresses and the persistent memory may be mapped afterwards.
> 
>     Since the persistent memory is still backed with page structs,
>     use MAX_PHYSMEM_BITS as the upper limit.
> 
>     This effectively disables huge DMA window in LPAR under pHyp if
>     persistent memory is present but this is the best we can do.
> 
>     Signed-off-by: Alexey Kardashevskiy <aik at ozlabs.ru>
>     ---
>      arch/powerpc/platforms/pseries/iommu.c | 9 +++++++++
>      1 file changed, 9 insertions(+)
> 
>     diff --git a/arch/powerpc/platforms/pseries/iommu.c
>     b/arch/powerpc/platforms/pseries/iommu.c
>     index 2e0a8eab5588..6d47b4a3ce39 100644
>     --- a/arch/powerpc/platforms/pseries/iommu.c
>     +++ b/arch/powerpc/platforms/pseries/iommu.c
>     @@ -945,6 +945,15 @@ static phys_addr_t ddw_memory_hotplug_max(void)
>       phys_addr_t max_addr = memory_hotplug_max();
>       struct device_node *memory;
>      
>     + /*
>     + * The "ibm,pmemory" can appear anywhere in the address space.
>     + * Assuming it is still backed by page structs, set the upper limit
>     + * for the huge DMA window as MAX_PHYSMEM_BITS.
>     + */
>     + if (of_find_node_by_type(NULL, "ibm,pmemory"))
>     + return (sizeof(phys_addr_t) * 8 <= MAX_PHYSMEM_BITS) ?
>     + (phys_addr_t) -1 : (1ULL << MAX_PHYSMEM_BITS);
>     +
>       for_each_node_by_type(memory, "memory") {
>       unsigned long start, size;
>       int n_mem_addr_cells, n_mem_size_cells, len;
>     --
>     2.17.1
>      
> 
>  
> 

-- 
Alexey


More information about the Linuxppc-dev mailing list