Re: [PATCH v3 2/2] dma-pool: Only allocate from CMA when in same memory zone
From: Nicolas Saenz Julienne
Date: Fri Aug 07 2020 - 04:50:24 EST
On Fri, 2020-08-07 at 07:21 +0200, Christoph Hellwig wrote:
> On Thu, Aug 06, 2020 at 08:47:55PM +0200, Nicolas Saenz Julienne 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. To get around this double check CMA's placement before
> > allocating from it.
> As the builtbot pointed out, memblock_start_of_DRAM can't be used from
> non-__init code. But lookig at it I think throwing that in
> is bogus anyway, as cma_get_base returns a proper physical address
It does indeed, but I'm comparing CMA's base with bitmasks that don't take into
account where the memory starts. Say memory starts at 0x80000000, and CMA falls
into ZONE_DMA [0x80000000 0xC0000000], if you want to compare it with
DMA_BIT_MASK(zone_dma_bits) you're forced to unify the memory bases.
That said, I now realize that this doesn't work for ZONE_DMA32 which has a hard
limit on 32bit addresses reglardless of the memory base.
That said I still need to call memblock_start_of_DRAM() any suggestions WRT
that? I could save the value in dma_atomic_pool_init(), which is __init code.
Description: This is a digitally signed message part