Skip to content

Commit

Permalink
ARM: 8422/1: enable imprecise aborts during early kernel startup
Browse files Browse the repository at this point in the history
This patch adds imprecise abort enable/disable macros and uses them to
enable imprecise aborts early when starting the kernel.

This helps in tracking down the real cause for such imprecise abort, as
they are handled as soon as they occur. Until now those aborts would
only be enabled when entering the userspace and as a consequence crash
the first userspace process if any abort had been raised during kernel
startup.

Signed-off-by: Fabrice Gasnier <fabrice.gasnier@st.com>
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
  • Loading branch information
Lucas Stach authored and Russell King committed Sep 22, 2015
1 parent 1f93e4a commit bbeb920
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 0 deletions.
10 changes: 10 additions & 0 deletions arch/arm/include/asm/irqflags.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,14 @@ static inline void arch_local_irq_disable(void)

#define local_fiq_enable() __asm__("cpsie f @ __stf" : : : "memory", "cc")
#define local_fiq_disable() __asm__("cpsid f @ __clf" : : : "memory", "cc")

#ifndef CONFIG_CPU_V7M
#define local_abt_enable() __asm__("cpsie a @ __sta" : : : "memory", "cc")
#define local_abt_disable() __asm__("cpsid a @ __cla" : : : "memory", "cc")
#else
#define local_abt_enable() do { } while (0)
#define local_abt_disable() do { } while (0)
#endif
#else

/*
Expand Down Expand Up @@ -136,6 +144,8 @@ static inline void arch_local_irq_disable(void)
: "memory", "cc"); \
})

#define local_abt_enable() do { } while (0)
#define local_abt_disable() do { } while (0)
#endif

/*
Expand Down
1 change: 1 addition & 0 deletions arch/arm/kernel/smp.c
Original file line number Diff line number Diff line change
Expand Up @@ -400,6 +400,7 @@ asmlinkage void secondary_start_kernel(void)

local_irq_enable();
local_fiq_enable();
local_abt_enable();

/*
* OK, it's off to the idle thread for us
Expand Down
3 changes: 3 additions & 0 deletions arch/arm/mm/mmu.c
Original file line number Diff line number Diff line change
Expand Up @@ -1363,6 +1363,9 @@ static void __init devicemaps_init(const struct machine_desc *mdesc)
*/
local_flush_tlb_all();
flush_cache_all();

/* Enable asynchronous aborts */
local_abt_enable();
}

static void __init kmap_init(void)
Expand Down

0 comments on commit bbeb920

Please sign in to comment.