RE: ARC compact700 NPS platform - EZ_MachineCheck exception handler

From: Ofer Levi(SW)
Date: Mon May 21 2018 - 09:20:02 EST


Resending, due to typo in LKML mail address.


Hi Vineet,

The EV_MachineCheck exception handler is halting the core for exceptions
which are not tlb_overlap_fault.
Since for the NPS platform each core is running a single thread in ZOL (Zero
Overhead Linux) isolation mode, we feel that most of the time it is safe to
resume execution instead of halting the core.
I would appreciate it if you could review the change below and let me know
what you think, if this change is valid or if we missed or overlooked
something.
We are not looking to push this change upstream, but will be used on some
systems.

Please see below our implementation after label 1.

Thanks
Ofer

ENTRY(EV_MachineCheck)

EXCEPTION_PROLOGUE

#ifdef CONFIG_CONTEXT_TRACKING
bl context_tracking_user_exit
#endif

lr r2, [ecr]
lr r0, [efa]
mov r1, sp

; hardware auto-disables MMU, re-enable it to allow kernel vaddr
; access for say stack unwinding of modules for crash dumps
lr r3, [ARC_REG_PID]
or r3, r3, MMU_ENABLE
sr r3, [ARC_REG_PID]

lsr r3, r2, 8
bmsk r3, r3, 7
brne r3, ECR_C_MCHK_DUP_TLB, 1f

bl do_tlb_overlap_fault
b ret_from_exception

1:
FAKE_RET_FROM_EXCPN
bl do_machine_check ; using DO_ERROR_INFO macro
b ret_from_exception

END(EV_MachineCheck)