On Wed, 2019-07-31 at 18:07 +0100, Catalin Marinas wrote: > On Wed, Jul 31, 2019 at 05:47:48PM +0200, Nicolas Saenz Julienne wrote: > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > > index 1c4ffabbe1cb..f5279ef85756 100644 > > --- a/arch/arm64/mm/init.c > > +++ b/arch/arm64/mm/init.c > > @@ -50,6 +50,13 @@ > > s64 memstart_addr __ro_after_init = -1; > > EXPORT_SYMBOL(memstart_addr); > > > > +/* > > + * We might create both a ZONE_DMA and ZONE_DMA32. ZONE_DMA is needed if > > there > > + * are periferals unable to address the first naturally aligned 4GB of ram. > > + * ZONE_DMA32 will be expanded to cover the rest of that memory. If such > > + * limitations doesn't exist only ZONE_DMA32 is created. > > + */ > > Shouldn't we instead only create ZONE_DMA to cover the whole 32-bit > range and leave ZONE_DMA32 empty? Can__GFP_DMA allocations fall back > onto ZONE_DMA32? Hi Catalin, thanks for the review. You're right, the GFP_DMA page allocation will fail with a nasty dmesg error if ZONE_DMA is configured but empty. Unsurprisingly the opposite situation is fine (GFP_DMA32 with an empty ZONE_DMA32). I switched to the scheme you're suggesting for the next version of the series. The comment will be something the likes of this: /* * We create both a ZONE_DMA and ZONE_DMA32. ZONE_DMA's size is decided based * on whether the SoC's peripherals are able to address the first naturally * aligned 4 GB of ram. * * If limited, ZONE_DMA covers that area and ZONE_DMA32 the rest of that 32 bit * addressable memory. * * If not ZONE_DMA is expanded to cover the whole 32 bit addressable memory and * ZONE_DMA32 is left empty. */ Regards, Nicolas