ARM: 7573/1: idmap: use flush_cache_louis() and flush TLBs only when necessary
authorNicolas Pitre <nicolas.pitre@linaro.org>
Thu, 8 Nov 2012 18:46:07 +0000 (19:46 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Tue, 13 Nov 2012 11:47:41 +0000 (11:47 +0000)
commite40678559fdf3f56ce9a349365fbf39e1f63ecc0
treebf17297c143e5aa6f55f73bd44d703a4f3817686
parentb62655f4c6f3e4d21934eee14ac2ac5cd479c97c
ARM: 7573/1: idmap: use flush_cache_louis() and flush TLBs only when necessary

Flushing the cache is needed for the hardware to see the idmap table
and therefore can be done at init time.  On ARMv7 it is not necessary to
flush L2 so flush_cache_louis() is used here instead.

There is no point flushing the cache in setup_mm_for_reboot() as the
caller should, and already is, taking care of this.  If switching the
memory map requires a cache flush, then cpu_switch_mm() already includes
that operation.

What is not done by cpu_switch_mm() on ASID capable CPUs is TLB flushing
as the whole point of the ASID is to tag the TLBs and avoid flushing them
on a context switch.  Since we don't have a clean ASID for the identity
mapping, we need to flush the TLB explicitly in that case.  Otherwise
this is already performed by cpu_switch_mm().

Signed-off-by: Nicolas Pitre <nico@linaro.org>
Acked-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/mm/idmap.c