• Joonsoo Kim's avatar
    ARM: CMA: avoid double mapping to the CMA area if CONFIG_HIGHMEM=y · 3d2054ad
    Joonsoo Kim authored
    CMA area is now managed by the separate zone, ZONE_MOVABLE, to fix many
    MM related problems.  In this implementation, if CONFIG_HIGHMEM = y,
    then ZONE_MOVABLE is considered as HIGHMEM and the memory of the CMA
    area is also considered as HIGHMEM.  That means that they are considered
    as the page without direct mapping.  However, CMA area could be in a
    lowmem and the memory could have direct mapping.
    
    In ARM, when establishing a new mapping for DMA, direct mapping should
    be cleared since two mapping with different cache policy could cause
    unknown problem.  With this patch, PageHighmem() for the CMA memory
    located in lowmem returns true so that the function for DMA mapping
    cannot notice whether it needs to clear direct mapping or not,
    correctly.  To handle this situation, this patch always clears direct
    mapping for such CMA memory.
    
    Link: http://lkml.kernel.org/r/1512114786-5085-4-git-send-email-iamjoonsoo.kim@lge.comSigned-off-by: default avatarJoonsoo Kim <iamjoonsoo.kim@lge.com>
    Tested-by: default avatarTony Lindgren <tony@atomide.com>
    Cc: "Aneesh Kumar K . V" <aneesh.kumar@linux.vnet.ibm.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Laura Abbott <lauraa@codeaurora.org>
    Cc: Marek Szyprowski <m.szyprowski@samsung.com>
    Cc: Mel Gorman <mgorman@techsingularity.net>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Michal Nazarewicz <mina86@mina86.com>
    Cc: Minchan Kim <minchan@kernel.org>
    Cc: Rik van Riel <riel@redhat.com>
    Cc: Russell King <linux@armlinux.org.uk>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Will Deacon <will.deacon@arm.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    3d2054ad
dma-mapping.c 63.7 KB