Messages in this thread | | | Subject | Re: [PATCH] dma-pool: Do not allocate pool memory from CMA | From | Nicolas Saenz Julienne <> | Date | Tue, 21 Jul 2020 10:39:49 +0200 |
| |
Hi Amit,
On Tue, 2020-07-21 at 12:51 +0530, Amit Pundir wrote: > On Wed, 8 Jul 2020 at 22:43, Nicolas Saenz Julienne > <nsaenzjulienne@suse.de> wrote: > > There is no guarantee to CMA's placement, so allocating a zone > > specific > > atomic pool from CMA might return memory from a completely > > different > > memory zone. So stop using it. > > > > Fixes: c84dc6e68a1d ("dma-pool: add additional coherent pools to > > map to gfp mask") > > Hi Nicolas, > > I see a boot regression with this commit d9765e41d8e9 "dma-pool: > Do not allocate pool memory from CMA" on my Xiaomi Poco F1 > (Qcom sdm845) phone running v5.8-rc6. I can't boot past the > bootloader splash screen with this patch. > > Phone boots fine if I revert this patch. I carry only one out of tree > dts patch https://lkml.org/lkml/2020/6/25/52. And since this is a > stock > phone, I don't have access to serial/dmesg logs until I boot to AOSP > (adb) shell. > > Any thoughts as to what might be going wrong here? I'd be happy to > help debug things. For what it's worth, I don't see this regression > on > other two sdm845 devices (db845c and Pixel 3) I tested on.
Can you provide a boot log (even if without my patch) and the device- tree files? It'd help a lot figuring things out.
Regards, Nicolas
> Regards, > Amit Pundir > > > Reported-by: Jeremy Linton <jeremy.linton@arm.com> > > Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de> > > --- > > > > An more costly alternative would be adding an option to > > dma_alloc_from_contiguous() so it fails when the allocation doesn't > > fall > > in a specific zone. > > > > kernel/dma/pool.c | 11 ++--------- > > 1 file changed, 2 insertions(+), 9 deletions(-) > > > > diff --git a/kernel/dma/pool.c b/kernel/dma/pool.c > > index 8cfa01243ed2..4bc1c46ae6ef 100644 > > --- a/kernel/dma/pool.c > > +++ b/kernel/dma/pool.c > > @@ -6,7 +6,6 @@ > > #include <linux/debugfs.h> > > #include <linux/dma-direct.h> > > #include <linux/dma-noncoherent.h> > > -#include <linux/dma-contiguous.h> > > #include <linux/init.h> > > #include <linux/genalloc.h> > > #include <linux/set_memory.h> > > @@ -69,12 +68,7 @@ static int atomic_pool_expand(struct gen_pool > > *pool, size_t pool_size, > > > > do { > > pool_size = 1 << (PAGE_SHIFT + order); > > - > > - if (dev_get_cma_area(NULL)) > > - page = dma_alloc_from_contiguous(NULL, 1 << > > order, > > - order, > > false); > > - else > > - page = alloc_pages(gfp, order); > > + page = alloc_pages(gfp, order); > > } while (!page && order-- > 0); > > if (!page) > > goto out; > > @@ -118,8 +112,7 @@ static int atomic_pool_expand(struct gen_pool > > *pool, size_t pool_size, > > dma_common_free_remap(addr, pool_size); > > #endif > > free_page: __maybe_unused > > - if (!dma_release_from_contiguous(NULL, page, 1 << order)) > > - __free_pages(page, order); > > + __free_pages(page, order); > > out: > > return ret; > > } > > -- > > 2.27.0 > >
| |