• Nicolas Pitre's avatar
    ARM: 6639/1: allow highmem on SMP platforms without h/w TLB ops broadcast · aaa50048
    Nicolas Pitre authored
    In commit e616c591, highmem support was
    deactivated for SMP platforms without hardware TLB ops broadcast because
    usage of kmap_high_get() requires that IRQs be disabled when kmap_lock
    is locked which is incompatible with the IPI mechanism used by the
    software TLB ops broadcast invoked through flush_all_zero_pkmaps().
    
    The reason for kmap_high_get() is to ensure that the currently kmap'd
    page usage count does not decrease to zero while we're using its
    existing virtual mapping in an atomic context.  With a VIVT cache this
    is essential to do due to cache coherency issues, but with a VIPT cache
    this is only an optimization so not to pay the price of establishing a
    second mapping if an existing one can be used.  However, on VIPT
    platforms without hardware TLB maintenance we can give up on that
    optimization in order to be able to use highmem.
    
    From ARMv7 onwards the TLB ops are broadcasted in hardware, so let's
    disable ARCH_NEEDS_KMAP_HIGH_GET only when CONFIG_SMP and
    CONFIG_CPU_TLB_V6 are defined.
    Signed-off-by: default avatarNicolas Pitre <nicolas.pitre@linaro.org>
    Tested-by: default avatarSaeed Bishara <saeed.bishara@gmail.com>
    Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
    aaa50048
highmem.h 2.03 KB