Skip to content

Commit ea3b0b7

Browse files
dthompsobp3tk0v
authored andcommitted
EDAC/bluefield: Don't use bluefield_edac_readl() result on error
The bluefield_edac_readl() routine returns an uninitialized result on error paths. In those cases the calling routine should not use the uninitialized result. The driver should simply log the error, and then return early. Fixes: e419675 ("EDAC/bluefield: Use Arm SMC for EMI access on BlueField-2") Signed-off-by: David Thompson <davthompson@nvidia.com> Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de> Reviewed-by: Shravan Kumar Ramani <shravankr@nvidia.com> Link: https://lore.kernel.org/20250318214747.12271-1-davthompson@nvidia.com
1 parent 2b2408a commit ea3b0b7

File tree

1 file changed

+15
-5
lines changed

1 file changed

+15
-5
lines changed

drivers/edac/bluefield_edac.c

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -199,8 +199,10 @@ static void bluefield_gather_report_ecc(struct mem_ctl_info *mci,
199199
* error without the detailed information.
200200
*/
201201
err = bluefield_edac_readl(priv, MLXBF_SYNDROM, &dram_syndrom);
202-
if (err)
202+
if (err) {
203203
dev_err(priv->dev, "DRAM syndrom read failed.\n");
204+
return;
205+
}
204206

205207
serr = FIELD_GET(MLXBF_SYNDROM__SERR, dram_syndrom);
206208
derr = FIELD_GET(MLXBF_SYNDROM__DERR, dram_syndrom);
@@ -213,20 +215,26 @@ static void bluefield_gather_report_ecc(struct mem_ctl_info *mci,
213215
}
214216

215217
err = bluefield_edac_readl(priv, MLXBF_ADD_INFO, &dram_additional_info);
216-
if (err)
218+
if (err) {
217219
dev_err(priv->dev, "DRAM additional info read failed.\n");
220+
return;
221+
}
218222

219223
err_prank = FIELD_GET(MLXBF_ADD_INFO__ERR_PRANK, dram_additional_info);
220224

221225
ecc_dimm = (err_prank >= 2 && priv->dimm_ranks[0] <= 2) ? 1 : 0;
222226

223227
err = bluefield_edac_readl(priv, MLXBF_ERR_ADDR_0, &edea0);
224-
if (err)
228+
if (err) {
225229
dev_err(priv->dev, "Error addr 0 read failed.\n");
230+
return;
231+
}
226232

227233
err = bluefield_edac_readl(priv, MLXBF_ERR_ADDR_1, &edea1);
228-
if (err)
234+
if (err) {
229235
dev_err(priv->dev, "Error addr 1 read failed.\n");
236+
return;
237+
}
230238

231239
ecc_dimm_addr = ((u64)edea1 << 32) | edea0;
232240

@@ -250,8 +258,10 @@ static void bluefield_edac_check(struct mem_ctl_info *mci)
250258
return;
251259

252260
err = bluefield_edac_readl(priv, MLXBF_ECC_CNT, &ecc_count);
253-
if (err)
261+
if (err) {
254262
dev_err(priv->dev, "ECC count read failed.\n");
263+
return;
264+
}
255265

256266
single_error_count = FIELD_GET(MLXBF_ECC_CNT__SERR_CNT, ecc_count);
257267
double_error_count = FIELD_GET(MLXBF_ECC_CNT__DERR_CNT, ecc_count);

0 commit comments

Comments
 (0)