• Mark Rutland's avatar
    arm64: remove broken cachepolicy code · 26a945ca
    Mark Rutland authored
    The cachepolicy kernel parameter was intended to aid in the debugging of
    coherency issues, but it is fundamentally broken for several reasons:
    
     * On SMP platforms, only the boot CPU's tcr_el1 is altered. Secondary
       CPUs may therefore use differ w.r.t. the attributes they apply to
       MT_NORMAL memory, resulting in a loss of coherency.
    
     * The cache maintenance using flush_dcache_all (based on Set/Way
       operations) is not guaranteed to empty a given CPU's cache hierarchy
       while said CPU has caches enabled, it cannot empty the caches of
       other coherent PEs, nor is it guaranteed to flush data to the PoC
       even when caches are disabled.
    
     * The TLBs are not invalidated around the modification of MAIR_EL1 and
       TCR_EL1, as required by the architecture (as both are permitted to be
       cached in a TLB). This may result in CPUs using attributes other than
       those expected for some memory accesses, resulting in a loss of
       coherency.
    
     * Exclusive accesses are not architecturally guaranteed to function as
       expected on memory marked as Write-Through or Non-Cacheable. Thus
       changing the attributes of MT_NORMAL away from the (architecurally
       safe) defaults may cause uses of these instructions (e.g. atomics) to
       behave erratically.
    
    Given this, the cachepolicy code cannot be used for debugging purposes
    as it alone is likely to cause coherency issues. This patch removes the
    broken cachepolicy code.
    Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
    Acked-by: default avatarWill Deacon <will.deacon@arm.com>
    Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    26a945ca
mmu.c 11.3 KB