On Tue, 21 Jul 2020 at 14:09, Nicolas Saenz Julienne <nsaenzjulie...@suse.de> wrote: > > 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 > > <nsaenzjulie...@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.
Thank you for the prompt reply Nicolas. Here is the boot log with the reverted patch https://pastebin.ubuntu.com/p/BrhPf83nKF/ Here is my phone's dts https://github.com/pundiramit/linux/commit/2a394c199deeaf4c91e0e008e8fba2a72f494d8c And here is my kernel tree just in case https://github.com/pundiramit/linux/commits/beryllium-mainline Regards, Amit Pundir > > Regards, > Nicolas > > > Regards, > > Amit Pundir > > > > > Reported-by: Jeremy Linton <jeremy.lin...@arm.com> > > > Signed-off-by: Nicolas Saenz Julienne <nsaenzjulie...@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 > > > >