[PATCH] arc: Re-enable MMU upon die()

Vineet Gupta Vineet.Gupta1 at synopsys.com
Fri Sep 1 08:30:12 PDT 2017


On 09/01/2017 04:40 AM, Jose Abreu wrote:
> I recently came upon a scenario where I would get a double fault
> after a machine check error. It turns out that for Ksymbol lookup
> to work with modules we need to have MMU enabled because module
> address is mapped in the cached space.
>
> This patch re-enables the MMU before start printing the stacktrace
> making stacktracing of modules work upon a fatal exception.
>
> Signed-off-by: Jose Abreu <joabreu at synopsys.com>
> Cc: Vineet Gupta <vgupta at synopsys.com>
> Cc: Alexey Brodkin <abrodkin at synopsys.com>
> ---
>   arch/arc/kernel/traps.c | 5 +++++
>   1 file changed, 5 insertions(+)
>
> diff --git a/arch/arc/kernel/traps.c b/arch/arc/kernel/traps.c
> index ff83e78..9533e06 100644
> --- a/arch/arc/kernel/traps.c
> +++ b/arch/arc/kernel/traps.c
> @@ -19,6 +19,8 @@
>   #include <linux/ptrace.h>
>   #include <linux/kprobes.h>
>   #include <linux/kgdb.h>
> +#include <asm/arcregs.h>
> +#include <asm/mmu.h>
>   #include <asm/setup.h>
>   #include <asm/unaligned.h>
>   #include <asm/kprobes.h>
> @@ -30,6 +32,9 @@ void __init trap_init(void)
>   
>   void die(const char *str, struct pt_regs *regs, unsigned long address)
>   {
> +	/* MMU must be enabled for Ksymbol lookup in modules */
> +	write_aux_reg(ARC_REG_PID, MMU_ENABLE | read_aux_reg(ARC_REG_PID));

die() is a *generic* API and can even be called from other places not necessarily 
coming from machine check.
The problem with mmu disabling is specific to machine check for dup TLB exception 
and needs to be fixed there not in common code.

-Vineet



More information about the linux-snps-arc mailing list