arm64: Unmask asynchronous aborts when in kernel mode
The asynchronous aborts are generally fatal for the kernel but they can be masked via the pstate A bit. If a system error happens while in kernel mode, it won't be visible until returning to user space. This patch enables this kind of abort early to help identifying the cause. Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
This commit is contained in:
@@ -56,6 +56,9 @@ static inline void arch_local_irq_disable(void)
|
|||||||
#define local_fiq_enable() asm("msr daifclr, #1" : : : "memory")
|
#define local_fiq_enable() asm("msr daifclr, #1" : : : "memory")
|
||||||
#define local_fiq_disable() asm("msr daifset, #1" : : : "memory")
|
#define local_fiq_disable() asm("msr daifset, #1" : : : "memory")
|
||||||
|
|
||||||
|
#define local_async_enable() asm("msr daifclr, #4" : : : "memory")
|
||||||
|
#define local_async_disable() asm("msr daifset, #4" : : : "memory")
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Save the current interrupt enable state.
|
* Save the current interrupt enable state.
|
||||||
*/
|
*/
|
||||||
|
@@ -205,6 +205,11 @@ u64 __cpu_logical_map[NR_CPUS] = { [0 ... NR_CPUS-1] = INVALID_HWID };
|
|||||||
|
|
||||||
void __init setup_arch(char **cmdline_p)
|
void __init setup_arch(char **cmdline_p)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
* Unmask asynchronous aborts early to catch possible system errors.
|
||||||
|
*/
|
||||||
|
local_async_enable();
|
||||||
|
|
||||||
setup_processor();
|
setup_processor();
|
||||||
|
|
||||||
setup_machine_fdt(__fdt_pointer);
|
setup_machine_fdt(__fdt_pointer);
|
||||||
|
@@ -160,6 +160,7 @@ asmlinkage void secondary_start_kernel(void)
|
|||||||
|
|
||||||
local_irq_enable();
|
local_irq_enable();
|
||||||
local_fiq_enable();
|
local_fiq_enable();
|
||||||
|
local_async_enable();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* OK, it's off to the idle thread for us
|
* OK, it's off to the idle thread for us
|
||||||
|
Reference in New Issue
Block a user