Commit 22e4a348 authored by Yajun Deng's avatar Yajun Deng Committed by Christoph Hellwig

dma-contiguous: support per-numa CMA for all architectures

In the commit b7176c26 ("dma-contiguous: provide the ability to
reserve per-numa CMA"), Barry adds DMA_PERNUMA_CMA for ARM64.

But this feature is architecture independent, so support per-numa CMA
for all architectures, and enable it by default if NUMA.
Signed-off-by: default avatarYajun Deng <yajun.deng@linux.dev>
Tested-by: default avatarYicong Yang <yangyicong@hisilicon.com>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
parent 3d6f126b
...@@ -696,7 +696,7 @@ ...@@ -696,7 +696,7 @@
kernel/dma/contiguous.c kernel/dma/contiguous.c
cma_pernuma=nn[MG] cma_pernuma=nn[MG]
[ARM64,KNL,CMA] [KNL,CMA]
Sets the size of kernel per-numa memory area for Sets the size of kernel per-numa memory area for
contiguous memory allocations. A value of 0 disables contiguous memory allocations. A value of 0 disables
per-numa CMA altogether. And If this option is not per-numa CMA altogether. And If this option is not
......
...@@ -434,8 +434,6 @@ void __init bootmem_init(void) ...@@ -434,8 +434,6 @@ void __init bootmem_init(void)
arm64_hugetlb_cma_reserve(); arm64_hugetlb_cma_reserve();
#endif #endif
dma_pernuma_cma_reserve();
kvm_hyp_reserve(); kvm_hyp_reserve();
/* /*
......
...@@ -169,12 +169,6 @@ static inline void dma_free_contiguous(struct device *dev, struct page *page, ...@@ -169,12 +169,6 @@ static inline void dma_free_contiguous(struct device *dev, struct page *page,
} }
#endif /* CONFIG_DMA_CMA*/ #endif /* CONFIG_DMA_CMA*/
#ifdef CONFIG_DMA_PERNUMA_CMA
void dma_pernuma_cma_reserve(void);
#else
static inline void dma_pernuma_cma_reserve(void) { }
#endif /* CONFIG_DMA_PERNUMA_CMA */
#ifdef CONFIG_DMA_DECLARE_COHERENT #ifdef CONFIG_DMA_DECLARE_COHERENT
int dma_declare_coherent_memory(struct device *dev, phys_addr_t phys_addr, int dma_declare_coherent_memory(struct device *dev, phys_addr_t phys_addr,
dma_addr_t device_addr, size_t size); dma_addr_t device_addr, size_t size);
......
...@@ -147,10 +147,10 @@ if DMA_CMA ...@@ -147,10 +147,10 @@ if DMA_CMA
config DMA_PERNUMA_CMA config DMA_PERNUMA_CMA
bool "Enable separate DMA Contiguous Memory Area for each NUMA Node" bool "Enable separate DMA Contiguous Memory Area for each NUMA Node"
default NUMA && ARM64 default NUMA
help help
Enable this option to get pernuma CMA areas so that devices like Enable this option to get pernuma CMA areas so that NUMA devices
ARM64 SMMU can get local memory by DMA coherent APIs. can get local memory by DMA coherent APIs.
You can set the size of pernuma CMA by specifying "cma_pernuma=size" You can set the size of pernuma CMA by specifying "cma_pernuma=size"
on the kernel's command line. on the kernel's command line.
......
...@@ -128,7 +128,7 @@ static inline __maybe_unused phys_addr_t cma_early_percent_memory(void) ...@@ -128,7 +128,7 @@ static inline __maybe_unused phys_addr_t cma_early_percent_memory(void)
#endif #endif
#ifdef CONFIG_DMA_PERNUMA_CMA #ifdef CONFIG_DMA_PERNUMA_CMA
void __init dma_pernuma_cma_reserve(void) static void __init dma_pernuma_cma_reserve(void)
{ {
int nid; int nid;
...@@ -153,6 +153,10 @@ void __init dma_pernuma_cma_reserve(void) ...@@ -153,6 +153,10 @@ void __init dma_pernuma_cma_reserve(void)
(unsigned long long)pernuma_size_bytes / SZ_1M, nid); (unsigned long long)pernuma_size_bytes / SZ_1M, nid);
} }
} }
#else
static inline void __init dma_pernuma_cma_reserve(void)
{
}
#endif #endif
/** /**
...@@ -171,6 +175,8 @@ void __init dma_contiguous_reserve(phys_addr_t limit) ...@@ -171,6 +175,8 @@ void __init dma_contiguous_reserve(phys_addr_t limit)
phys_addr_t selected_limit = limit; phys_addr_t selected_limit = limit;
bool fixed = false; bool fixed = false;
dma_pernuma_cma_reserve();
pr_debug("%s(limit %08lx)\n", __func__, (unsigned long)limit); pr_debug("%s(limit %08lx)\n", __func__, (unsigned long)limit);
if (size_cmdline != -1) { if (size_cmdline != -1) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment