Re: [PATCH v3] powerpc/mce: log the error for all unrecoverable errors

2023-02-15 Thread Michael Ellerman
On Wed, 1 Feb 2023 15:29:33 +0530, Ganesh Goudar wrote:
> For all unrecoverable errors we are missing to log the
> error, Since machine_check_log_err() is not getting called
> for unrecoverable errors. machine_check_log_err() is called
> from deferred handler, To run deferred handlers we have to do
> irq work raise from the exception handler.
> 
> For recoverable errors exception vector code takes care of
> running deferred handlers.
> 
> [...]

Applied to powerpc/next.

[1/1] powerpc/mce: log the error for all unrecoverable errors
  https://git.kernel.org/powerpc/c/2115732e548304e52ca1bbdb714f45f4a2461653

cheers


[PATCH v3] powerpc/mce: log the error for all unrecoverable errors

2023-02-01 Thread Ganesh Goudar
For all unrecoverable errors we are missing to log the
error, Since machine_check_log_err() is not getting called
for unrecoverable errors. machine_check_log_err() is called
from deferred handler, To run deferred handlers we have to do
irq work raise from the exception handler.

For recoverable errors exception vector code takes care of
running deferred handlers.

For unrecoverable errors raise irq work in save_mce_event(),
So that we log the error from MCE deferred handler.

Log without this change

 MCE: CPU27: machine check (Severe)  Real address Load/Store (foreign/control 
memory) [Not recovered]
 MCE: CPU27: PID: 10580 Comm: inject-ra-err NIP: [1df4]
 MCE: CPU27: Initiator CPU
 MCE: CPU27: Unknown

Log with this change

 MCE: CPU24: machine check (Severe)  Real address Load/Store (foreign/control 
memory) [Not recovered]
 MCE: CPU24: PID: 1589811 Comm: inject-ra-err NIP: [1e48]
 MCE: CPU24: Initiator CPU
 MCE: CPU24: Unknown
 RTAS: event: 5, Type: Platform Error (224), Severity: 3

Signed-off-by: Ganesh Goudar 
Reviewed-by: Mahesh Salgaonkar 
---
V3: Rephrasing the commit message.
---
 arch/powerpc/kernel/mce.c | 10 +++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/arch/powerpc/kernel/mce.c b/arch/powerpc/kernel/mce.c
index 6c5d30fba766..219f28637a3e 100644
--- a/arch/powerpc/kernel/mce.c
+++ b/arch/powerpc/kernel/mce.c
@@ -131,6 +131,13 @@ void save_mce_event(struct pt_regs *regs, long handled,
if (mce->error_type == MCE_ERROR_TYPE_UE)
mce->u.ue_error.ignore_event = mce_err->ignore_event;
 
+   /*
+* Raise irq work, So that we don't miss to log the error for
+* unrecoverable errors.
+*/
+   if (mce->disposition == MCE_DISPOSITION_NOT_RECOVERED)
+   mce_irq_work_queue();
+
if (!addr)
return;
 
@@ -233,9 +240,6 @@ static void machine_check_ue_event(struct 
machine_check_event *evt)
}
memcpy(_paca->mce_info->mce_ue_event_queue[index],
   evt, sizeof(*evt));
-
-   /* Queue work to process this event later. */
-   mce_irq_work_queue();
 }
 
 /*
-- 
2.39.1