Skip to content

Commit

Permalink
EDAC/igen6: Fix the flood of invalid error reports
Browse files Browse the repository at this point in the history
The ECC_ERROR_LOG register of certain SoCs may contain the invalid value
~0, which results in a flood of invalid error reports in polling mode.

Fix the flood of invalid error reports by skipping the invalid ECC error
log value ~0.

Fixes: e14232a ("EDAC/igen6: Add polling support")
Reported-by: Ramses <ramses@well-founded.dev>
Closes: https://lore.kernel.org/all/OISL8Rv--F-9@well-founded.dev/
Reported-by: John <therealgraysky@proton.me>
Closes: https://lore.kernel.org/all/p5YcxOE6M3Ncxpn2-Ia_wCt61EM4LwIiN3LroQvT_-G2jMrFDSOW5k2A9D8UUzD2toGpQBN1eI0sL5dSKnkO8iteZegLoQEj-DwQaMhGx4A=@proton.me/
Signed-off-by: Qiuxu Zhuo <qiuxu.zhuo@intel.com>
  • Loading branch information
qzhuo2 authored and heftig committed Mar 7, 2025
1 parent a1ef65b commit 13f25cb
Showing 1 changed file with 15 additions and 6 deletions.
21 changes: 15 additions & 6 deletions drivers/edac/igen6_edac.c
Original file line number Diff line number Diff line change
Expand Up @@ -785,13 +785,22 @@ static u64 ecclog_read_and_clear(struct igen6_imc *imc)
{
u64 ecclog = readq(imc->window + ECC_ERROR_LOG_OFFSET);

if (ecclog & (ECC_ERROR_LOG_CE | ECC_ERROR_LOG_UE)) {
/* Clear CE/UE bits by writing 1s */
writeq(ecclog, imc->window + ECC_ERROR_LOG_OFFSET);
return ecclog;
}
/*
* Quirk: The ECC_ERROR_LOG register of certain SoCs may contain
* the invalid value ~0. This will result in a flood of invalid
* error reports in polling mode. Skip it.
*/
if (ecclog == ~0)
return 0;

return 0;
/* Neither a CE nor a UE. Skip it.*/
if (!(ecclog & (ECC_ERROR_LOG_CE | ECC_ERROR_LOG_UE)))
return 0;

/* Clear CE/UE bits by writing 1s */
writeq(ecclog, imc->window + ECC_ERROR_LOG_OFFSET);

return ecclog;
}

static void errsts_clear(struct igen6_imc *imc)
Expand Down

0 comments on commit 13f25cb

Please sign in to comment.