powerpc/powernv: Machine check exception handling.
Add basic error handling in machine check exception handler. - If MSR_RI isn't set, we can not recover. - Check if disposition set to OpalMCE_DISPOSITION_RECOVERED. - Check if address at fault is inside kernel address space, if not then send SIGBUS to process if we hit exception when in userspace. - If address at fault is not provided then and if we get a synchronous machine check while in userspace then kill the task. Signed-off-by: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:

committed by
Benjamin Herrenschmidt

parent
28446de2ce
commit
b63a0ffe35
@@ -316,3 +316,30 @@ void machine_check_print_event_info(struct machine_check_event *evt)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
uint64_t get_mce_fault_addr(struct machine_check_event *evt)
|
||||
{
|
||||
switch (evt->error_type) {
|
||||
case MCE_ERROR_TYPE_UE:
|
||||
if (evt->u.ue_error.effective_address_provided)
|
||||
return evt->u.ue_error.effective_address;
|
||||
break;
|
||||
case MCE_ERROR_TYPE_SLB:
|
||||
if (evt->u.slb_error.effective_address_provided)
|
||||
return evt->u.slb_error.effective_address;
|
||||
break;
|
||||
case MCE_ERROR_TYPE_ERAT:
|
||||
if (evt->u.erat_error.effective_address_provided)
|
||||
return evt->u.erat_error.effective_address;
|
||||
break;
|
||||
case MCE_ERROR_TYPE_TLB:
|
||||
if (evt->u.tlb_error.effective_address_provided)
|
||||
return evt->u.tlb_error.effective_address;
|
||||
break;
|
||||
default:
|
||||
case MCE_ERROR_TYPE_UNKNOWN:
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(get_mce_fault_addr);
|
||||
|
Reference in New Issue
Block a user