Messages in this thread | | | Date | Mon, 9 Nov 2020 09:04:06 -0800 | From | Minchan Kim <> | Subject | Re: [PATCH] mm/zsmalloc: include sparsemem.h for MAX_PHYSMEM_BITS |
| |
On Sun, Nov 08, 2020 at 02:16:37AM +0100, Stefan Agner wrote: > On 2020-11-08 01:56, Andrew Morton wrote: > > On Sat, 7 Nov 2020 16:22:06 +0100 Stefan Agner <stefan@agner.ch> wrote: > > > >> Most architectures define MAX_PHYSMEM_BITS in asm/sparsemem.h and don't > >> include it in asm/pgtable.h. Include asm/sparsemem.h directly to get > >> the MAX_PHYSMEM_BITS define on all architectures. > >> > >> This fixes a crash when accessing zram on 32-bit ARM platform with LPAE and > >> more than 4GB of memory: > >> Unable to handle kernel NULL pointer dereference at virtual address 00000000 > > > > Mysterious. Presumably without this include, some compilation unit is > > picking up the wrong value of MAX_PHYSMEM_BITS? But I couldn't > > actually see where/how this occurs. Can you please explain further? > > Not sure if I got that right, but from what I understand if > MAX_PHYSMEM_BITS is not set in mm/zsmalloc.c it will set > MAX_PHYSMEM_BITS to BITS_PER_LONG. And this is 32-bit, too short when > LPAE is in use...
True. It's headache in the zsmalloc. Somedays I'd really like to fix it via redesigning of metadata management.
Thanks for the fixing the ancient bug, Stefan.
| |