• Max Filippov's avatar
    mm/highmem: make kmap cache coloring aware · 15de36a4
    Max Filippov authored
    User-visible effect:
     Architectures that choose this method of maintaining cache coherency
    (MIPS and xtensa currently) are able to use high memory on cores with
    aliasing data cache.  Without this fix such architectures can not use
    high memory (in case of xtensa it means that at most 128 MBytes of
    physical memory is available).
    
    The problem:
     VIPT cache with way size larger than MMU page size may suffer from
    aliasing problem: a single physical address accessed via different
    virtual addresses may end up in multiple locations in the cache.
    Virtual mappings of a physical address that always get cached in
    different cache locations are said to have different colors.  L1 caching
    hardware usually doesn't handle this situation leaving it up to
    software.  Software must avoid this situation as it leads to data
    corruption.
    
    What can be done:
     One way to handle this is to flush and invalidate data cache every time
    page mapping changes color.  The other way is to always map physical
    page at a virtual address with the same color.  Low memory pages already
    have this property.  Giving architecture a way to control color of high
    memory page mapping allows reusing of existing low memory cache alias
    handling code.
    
    How this is done with this patch:
     Provide hooks that allow architectures with aliasing cache to align
    mapping address of high pages according to their color.  Such
    architectures may enforce similar coloring of low- and high-memory page
    mappings and reuse existing cache management functions to support
    highmem.
    
    This code is based on the implementation of similar feature for MIPS by
    Leonid Yegoshin.
    Signed-off-by: 's avatarMax Filippov <jcmvbkbc@gmail.com>
    Cc: Leonid Yegoshin <Leonid.Yegoshin@imgtec.com>
    Cc: Chris Zankel <chris@zankel.net>
    Cc: Marc Gauthier <marc@cadence.com>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Steven Hill <Steven.Hill@imgtec.com>
    Signed-off-by: 's avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: 's avatarLinus Torvalds <torvalds@linux-foundation.org>
    15de36a4
highmem.c 11.8 KB