[RFC PATCH] ARM: Flush L2 cache on soft_restart

Will Deacon will.deacon at arm.com
Wed Oct 2 08:49:03 EDT 2013


On Wed, Oct 02, 2013 at 12:34:16PM +0100, Taras Kondratiuk wrote:
> Kexec disables L2 cache before jumping to reboot code,
> but it doesn't flush it. So often just copied reboot code
> gets corrupted, because part of it is stored in L2 cache
> and have not reached memory.
> 
> Flushing cache prevents this corruption.
> 
> I'm facing this issue on Pandaboard ES, but it looks like
> similar issue is observed on TC2 board [1].

TC2 doesn't have an outer cache, so that report is not relevant to this
patch.

> [1] http://www.spinics.net/lists/arm-kernel/msg264339.html
> 
> Signed-off-by: Taras Kondratiuk <taras.kondratiuk at linaro.org>
> ---
>  arch/arm/kernel/process.c |    6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c
> index 94f6b05..e359b62 100644
> --- a/arch/arm/kernel/process.c
> +++ b/arch/arm/kernel/process.c
> @@ -103,9 +103,11 @@ void soft_restart(unsigned long addr)
>  	local_irq_disable();
>  	local_fiq_disable();
>  
> -	/* Disable the L2 if we're the last man standing. */
> -	if (num_online_cpus() == 1)
> +	/* Flush and disable the L2 if we're the last man standing. */
> +	if (num_online_cpus() == 1) {
> +		outer_flush_all();
>  		outer_disable();

l2x0_disable already contains a flush, so this doesn't change anything.

Will



More information about the linux-arm-kernel mailing list