Message ID | 20211126024711.54937-1-calvinzhang.cool@gmail.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | mm: kmemleak: Ignore kmemleak scanning on CMA regions | expand |
On Fri, 26 Nov 2021 10:47:11 +0800 Calvin Zhang <calvinzhang.cool@gmail.com> wrote: > Just like this: > commit 620951e27457 ("mm/cma: make kmemleak ignore CMA regions"). > > Add kmemleak_ignore_phys() for CMA created from of reserved node. Could we please have a full, standalone changelog for this patch? The 620951e27457 changelog says "Without this, the kernel crashes...". Does your patch also fix a crash? If so under what circumstances and should we backport this fix into -stable kernels? Etcetera.
On Sat, Nov 27, 2021 at 04:07:18PM -0800, Andrew Morton wrote: >On Fri, 26 Nov 2021 10:47:11 +0800 Calvin Zhang <calvinzhang.cool@gmail.com> wrote: > >> Just like this: >> commit 620951e27457 ("mm/cma: make kmemleak ignore CMA regions"). >> >> Add kmemleak_ignore_phys() for CMA created from of reserved node. > >Could we please have a full, standalone changelog for this patch? Yes, I will add. > >The 620951e27457 changelog says "Without this, the kernel crashes...". >Does your patch also fix a crash? If so under what circumstances and >should we backport this fix into -stable kernels? No crash occurred. 620951e27457 avoids crashes caused by accessing highmem and it was fixed later. Now kmemleak_alloc_phys() and kmemleak_ignore_phys() skip highmem. This patch is based on the point that CMA regions don't contain pointers to other kmemleak objects, and ignores CMA regions from reserved memory as what 620951e27457 did. -- Thanks Calvin
On Sun, Nov 28, 2021 at 09:50:53AM +0800, Calvin Zhang wrote: > On Sat, Nov 27, 2021 at 04:07:18PM -0800, Andrew Morton wrote: > >On Fri, 26 Nov 2021 10:47:11 +0800 Calvin Zhang <calvinzhang.cool@gmail.com> wrote: > >> Just like this: > >> commit 620951e27457 ("mm/cma: make kmemleak ignore CMA regions"). > >> > >> Add kmemleak_ignore_phys() for CMA created from of reserved node. [...] > >The 620951e27457 changelog says "Without this, the kernel crashes...". > >Does your patch also fix a crash? If so under what circumstances and > >should we backport this fix into -stable kernels? > > No crash occurred. 620951e27457 avoids crashes caused by accessing > highmem and it was fixed later. Now kmemleak_alloc_phys() and > kmemleak_ignore_phys() skip highmem. This patch is based on the > point that CMA regions don't contain pointers to other kmemleak > objects, and ignores CMA regions from reserved memory as what > 620951e27457 did. Note that kmemleak_ignore() only works if there was a prior kmemleak_alloc() on that address range. With the previous commit we get this via the memblock_alloc_range() but I fail to see one on the rmem_cma_setup() path.
On Thu, Dec 02, 2021 at 06:11:12PM +0000, Catalin Marinas wrote: >On Sun, Nov 28, 2021 at 09:50:53AM +0800, Calvin Zhang wrote: >> On Sat, Nov 27, 2021 at 04:07:18PM -0800, Andrew Morton wrote: >> >On Fri, 26 Nov 2021 10:47:11 +0800 Calvin Zhang <calvinzhang.cool@gmail.com> wrote: >> >> Just like this: >> >> commit 620951e27457 ("mm/cma: make kmemleak ignore CMA regions"). >> >> >> >> Add kmemleak_ignore_phys() for CMA created from of reserved node. >[...] >> >The 620951e27457 changelog says "Without this, the kernel crashes...". >> >Does your patch also fix a crash? If so under what circumstances and >> >should we backport this fix into -stable kernels? >> >> No crash occurred. 620951e27457 avoids crashes caused by accessing >> highmem and it was fixed later. Now kmemleak_alloc_phys() and >> kmemleak_ignore_phys() skip highmem. This patch is based on the >> point that CMA regions don't contain pointers to other kmemleak >> objects, and ignores CMA regions from reserved memory as what >> 620951e27457 did. > >Note that kmemleak_ignore() only works if there was a prior >kmemleak_alloc() on that address range. With the previous commit we get >this via the memblock_alloc_range() but I fail to see one on the >rmem_cma_setup() path. rmem is from memblock_reserve() or early_init_dt_alloc_reserved_memory_arch() kmemleak_alloc() is not called in the first case. And It's bad to add one. I think all the reserved regions should be allocated from memblock without kmemleak_alloc() and let rmem handler choose to add it as kmemleak object by kmemleak_alloc(). Because MEMBLOCK_ALLOC_NOLEAKTRACE conflicts with range parameter in memlbock_alloc_* series, all reserved regions and default CMA region are allocated with kmemleak_alloc(). I think it's better to add memblock_alloc_* series a spearate flag paramter (like "NOLEAKTRACE") instead of encoding MEMBLOCK_ALLOC_NOLEAKTRACE in `end` parameter. -- Calvin
diff --git a/kernel/dma/contiguous.c b/kernel/dma/contiguous.c index 3d63d91cba5c..66bd9a59615e 100644 --- a/kernel/dma/contiguous.c +++ b/kernel/dma/contiguous.c @@ -50,6 +50,7 @@ #include <linux/sizes.h> #include <linux/dma-map-ops.h> #include <linux/cma.h> +#include <linux/kmemleak.h> #ifdef CONFIG_CMA_SIZE_MBYTES #define CMA_SIZE_MBYTES CONFIG_CMA_SIZE_MBYTES @@ -426,6 +427,9 @@ static int __init rmem_cma_setup(struct reserved_mem *rmem) pr_err("Reserved memory: unable to setup CMA region\n"); return err; } + + kmemleak_ignore_phys(rmem->base); + /* Architecture specific contiguous memory fixup. */ dma_contiguous_early_fixup(rmem->base, rmem->size);
Just like this: commit 620951e27457 ("mm/cma: make kmemleak ignore CMA regions"). Add kmemleak_ignore_phys() for CMA created from of reserved node. Signed-off-by: Calvin Zhang <calvinzhang.cool@gmail.com> --- kernel/dma/contiguous.c | 4 ++++ 1 file changed, 4 insertions(+)