Re: mm/percpu.c: use smarter memory allocation for struct pcpu_alloc_info (crisv32 hang)

From: Guenter Roeck
Date: Mon Nov 27 2017 - 16:11:23 EST


On Mon, Nov 27, 2017 at 12:54:21PM -0800, Tejun Heo wrote:
> Hello, Nicolas.
>
> On Mon, Nov 27, 2017 at 03:51:04PM -0500, Nicolas Pitre wrote:
> > Subject: percpu: hack to let the CRIS architecture to boot until they clean up
> >
> > Commit 438a506180 ("percpu: don't forget to free the temporary struct
> > pcpu_alloc_info") uncovered a problem on the CRIS architecture where
> > the bootmem allocator is initialized with virtual addresses. Given it
> > has:
> >
> > #define __va(x) ((void *)((unsigned long)(x) | 0x80000000))
> >
> > then things just work out because the end result is the same whether you
> > give this a physical or a virtual address.
> >
> > Untill you call memblock_free_early(__pa(address)) that is, because
> > values from __pa() don't match with the virtual addresses stuffed in the
> > bootmem allocator anymore.
> >
> > Avoid freeing the temporary pcpu_alloc_info memory on that architecture
> > until they fix things up to let the kernel boot like it did before.
> >
> > Signed-off-by: Nicolas Pitre <nico@xxxxxxxxxx>
>
> This totally works for me. Replaced the revert with this one.
>
Same here.

Thanks,
Guenter

> Thanks!
>
> --
> tejun