Re: [PATCH v7 2/8] x86/mce: Unify AMD DFR handler with MCA Polling
From: Yazen Ghannam
Date: Mon Oct 27 2025 - 10:21:39 EST
On Mon, Oct 27, 2025 at 09:35:42AM -0400, Yazen Ghannam wrote:
> On Sat, Oct 25, 2025 at 05:03:04PM +0200, Borislav Petkov wrote:
> > On Fri, Oct 24, 2025 at 11:27:23PM +0200, Borislav Petkov wrote:
> > > On Fri, Oct 24, 2025 at 04:30:12PM -0400, Yazen Ghannam wrote:
> > > > Should I send another revision?
> > >
> > > Nah, I'm not done simplifying this yet. :-P
> >
> > Yeah, no, looks ok now:
> >
Here's another fixup. I also simplified the function parameters and
tweaked the code comments.
Thanks,
Yazen
---
arch/x86/kernel/cpu/mce/core.c | 17 +++++++----------
1 file changed, 7 insertions(+), 10 deletions(-)
diff --git a/arch/x86/kernel/cpu/mce/core.c b/arch/x86/kernel/cpu/mce/core.c
index 7be062429ce3..eaee48b8b339 100644
--- a/arch/x86/kernel/cpu/mce/core.c
+++ b/arch/x86/kernel/cpu/mce/core.c
@@ -726,21 +726,18 @@ DEFINE_PER_CPU(unsigned, mce_poll_count);
* 3) SMCA systems check MCA_DESTAT, if error was not found in MCA_STATUS, and
* log it.
*/
-static bool smca_should_log_poll_error(enum mcp_flags flags, struct mce_hw_err *err)
+static bool smca_should_log_poll_error(struct mce *m)
{
- struct mce *m = &err->m;
-
/*
- * If the MCA_STATUS register has a deferred error, then continue using it as
- * the status register.
- *
- * MCA_DESTAT will be cleared at the end of the handler.
+ * If MCA_STATUS happens to have a deferred error, then MCA_DESTAT will
+ * be cleared at the end of the handler.
*/
- if ((m->status & MCI_STATUS_VAL) && (m->status & MCI_STATUS_DEFERRED))
+ if (m->status & MCI_STATUS_VAL)
return true;
/*
- * If the MCA_DESTAT register has a deferred error, then use it instead.
+ * Use the MCA_DESTAT register if it has a deferred error. The redundant
+ * status bit check is to filter out any bogus errors.
*
* MCA_STATUS will not be cleared at the end of the handler.
*/
@@ -780,7 +777,7 @@ static bool should_log_poll_error(enum mcp_flags flags, struct mce_hw_err *err)
struct mce *m = &err->m;
if (mce_flags.smca)
- return smca_should_log_poll_error(flags, err);
+ return smca_should_log_poll_error(m);
/* If this entry is not valid, ignore it. */
if (!(m->status & MCI_STATUS_VAL))
--
2.51.1