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