Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b3bf6aa7 authored by Catalin Marinas's avatar Catalin Marinas
Browse files

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: default avatarCatalin Marinas <catalin.marinas@arm.com>
parent df503ba7
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -56,6 +56,9 @@ static inline void arch_local_irq_disable(void)
#define local_fiq_enable()	asm("msr	daifclr, #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.
 */
+5 −0
Original line number Diff line number Diff line
@@ -205,6 +205,11 @@ u64 __cpu_logical_map[NR_CPUS] = { [0 ... NR_CPUS-1] = INVALID_HWID };

void __init setup_arch(char **cmdline_p)
{
	/*
	 * Unmask asynchronous aborts early to catch possible system errors.
	 */
	local_async_enable();

	setup_processor();

	setup_machine_fdt(__fdt_pointer);
+1 −0
Original line number Diff line number Diff line
@@ -160,6 +160,7 @@ asmlinkage void secondary_start_kernel(void)

	local_irq_enable();
	local_fiq_enable();
	local_async_enable();

	/*
	 * OK, it's off to the idle thread for us