• Akinobu Mita's avatar
    cma: add placement specifier for "cma=" kernel parameter · 5ea3b1b2
    Akinobu Mita authored
    Currently, "cma=" kernel parameter is used to specify the size of CMA,
    but we can't specify where it is located.  We want to locate CMA below
    4GB for devices only supporting 32-bit addressing on 64-bit systems
    without iommu.
    
    This enables to specify the placement of CMA by extending "cma=" kernel
    parameter.
    
    Examples:
     1. locate 64MB CMA below 4GB by "cma=64M@0-4G"
     2. locate 64MB CMA exact at 512MB by "cma=64M@512M"
    
    Note that the DMA contiguous memory allocator on x86 assumes that
    page_address() works for the pages to allocate.  So this change requires
    to limit end address of contiguous memory area upto max_pfn_mapped to
    prevent from locating it on highmem area by the argument of
    dma_contiguous_reserve().
    Signed-off-by: default avatarAkinobu Mita <akinobu.mita@gmail.com>
    Cc: Marek Szyprowski <m.szyprowski@samsung.com>
    Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Cc: David Woodhouse <dwmw2@infradead.org>
    Cc: Don Dutile <ddutile@redhat.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Andi Kleen <andi@firstfloor.org>
    Cc: Yinghai Lu <yinghai@kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    5ea3b1b2
dma-contiguous.c 10.5 KB