]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
EDAC/{skx_common,skx,i10nm}: Split skx_set_decode()
authorQiuxu Zhuo <qiuxu.zhuo@intel.com>
Thu, 21 May 2026 07:31:06 +0000 (15:31 +0800)
committerTony Luck <tony.luck@intel.com>
Fri, 29 May 2026 15:34:12 +0000 (08:34 -0700)
skx_set_decode() currently handles both address decoding and Retry
Read error Log (RRL) reporting, coupling two independent functions
in a single API. This complicates setup/teardown and forces callers
to update unrelated state.

Introduce skx_set_show_rrl() and keep skx_set_decode() focused on
decode setup, allowing decode and RRL handling to be managed
independently.

Also rename the callback type and variable to skx_show_rrl_f and
show_rrl for clearer RRL terminology and consistency.

No functional changes intended.

Signed-off-by: Qiuxu Zhuo <qiuxu.zhuo@intel.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
Tested-by: Yi Lai <yi1.lai@intel.com>
Link: https://patch.msgid.link/20260521073112.3881223-3-qiuxu.zhuo@intel.com
drivers/edac/i10nm_base.c
drivers/edac/skx_base.c
drivers/edac/skx_common.c
drivers/edac/skx_common.h

index 0a0236583eb7cf72572bcee5b797c9e556f22c5f..c09790d5b95e81842bb542868553f6d9603d5594 100644 (file)
@@ -1208,13 +1208,13 @@ static int __init i10nm_init(void)
        skx_setup_debug("i10nm_test");
 
        if (retry_rd_err_log && res_cfg->reg_rrl_ddr) {
-               skx_set_decode(i10nm_mc_decode, show_retry_rd_err_log);
+               skx_set_show_rrl(show_retry_rd_err_log);
                if (retry_rd_err_log == 2)
                        enable_retry_rd_err_log(true);
-       } else {
-               skx_set_decode(i10nm_mc_decode, NULL);
        }
 
+       skx_set_decode(i10nm_mc_decode);
+
        i10nm_printk(KERN_INFO, "%s\n", I10NM_REVISION);
 
        return 0;
@@ -1227,10 +1227,12 @@ static void __exit i10nm_exit(void)
 {
        edac_dbg(2, "\n");
 
+       skx_set_decode(NULL);
+
        if (retry_rd_err_log && res_cfg->reg_rrl_ddr) {
-               skx_set_decode(NULL, NULL);
                if (retry_rd_err_log == 2)
                        enable_retry_rd_err_log(false);
+               skx_set_show_rrl(NULL);
        }
 
        skx_teardown_debug();
index aa6593ccda2d86cc07e235bf29e5e01af5e2b469..de749413ff9a842141faa920821568609fd8c44d 100644 (file)
@@ -671,14 +671,14 @@ static int __init skx_init(void)
                }
        }
 
-       skx_set_decode(skx_decode, skx_show_retry_rd_err_log);
+       skx_set_show_rrl(skx_show_retry_rd_err_log);
 
        if (nvdimm_count && skx_adxl_get() != -ENODEV) {
-               skx_set_decode(NULL, skx_show_retry_rd_err_log);
+               skx_set_decode(NULL);
        } else {
                if (nvdimm_count)
                        skx_printk(KERN_NOTICE, "Only decoding DDR4 address!\n");
-               skx_set_decode(skx_decode, skx_show_retry_rd_err_log);
+               skx_set_decode(skx_decode);
        }
 
        /* Ensure that the OPSTATE is set correctly for POLL or NMI */
index 1c4cc21679bcf3633527b8366205fa64c5268d16..2cdef2e69d71e6e047d615e3862095d544da7c2a 100644 (file)
@@ -46,7 +46,7 @@ static unsigned long adxl_nm_bitmap;
 
 static char skx_msg[MSG_SIZE];
 static skx_decode_f driver_decode;
-static skx_show_retry_log_f skx_show_retry_rd_err_log;
+static skx_show_rrl_f show_rrl;
 static u64 skx_tolm, skx_tohm;
 static LIST_HEAD(dev_edac_list);
 static bool skx_mem_cfg_2lm;
@@ -312,13 +312,18 @@ void skx_set_res_cfg(struct res_config *cfg)
 }
 EXPORT_SYMBOL_GPL(skx_set_res_cfg);
 
-void skx_set_decode(skx_decode_f decode, skx_show_retry_log_f show_retry_log)
+void skx_set_decode(skx_decode_f decode)
 {
        driver_decode = decode;
-       skx_show_retry_rd_err_log = show_retry_log;
 }
 EXPORT_SYMBOL_GPL(skx_set_decode);
 
+void skx_set_show_rrl(skx_show_rrl_f rrl)
+{
+       show_rrl = rrl;
+}
+EXPORT_SYMBOL_GPL(skx_set_show_rrl);
+
 static int skx_get_pkg_id(struct skx_dev *d, u8 *id)
 {
        int node;
@@ -767,8 +772,8 @@ static void skx_mce_output_error(struct mem_ctl_info *mci,
                         res->row, res->column, res->bank_address, res->bank_group);
        }
 
-       if (skx_show_retry_rd_err_log)
-               skx_show_retry_rd_err_log(res, skx_msg + len, MSG_SIZE - len, scrub_err);
+       if (show_rrl)
+               show_rrl(res, skx_msg + len, MSG_SIZE - len, scrub_err);
 
        edac_dbg(0, "%s\n", skx_msg);
 
index 95412459a84fb58064b9c9cddecbe3302cd99f8d..5a08f219e46d3ebb243afa8db6e5fffcaafe937f 100644 (file)
@@ -324,14 +324,15 @@ struct res_config {
 typedef int (*get_dimm_config_f)(struct mem_ctl_info *mci,
                                 struct res_config *cfg);
 typedef bool (*skx_decode_f)(struct decoded_addr *res);
-typedef void (*skx_show_retry_log_f)(struct decoded_addr *res, char *msg, int len, bool scrub_err);
+typedef void (*skx_show_rrl_f)(struct decoded_addr *res, char *msg, int len, bool scrub_err);
 
 u64 skx_readx(void __iomem *addr, u8 width);
 u64 skx_read_imc_reg(struct skx_imc *imc, int chan, u32 offset, u8 width);
 void skx_write_imc_reg(struct skx_imc *imc, int chan, u32 offset, u8 width, u64 val);
 int skx_adxl_get(void);
 void skx_adxl_put(void);
-void skx_set_decode(skx_decode_f decode, skx_show_retry_log_f show_retry_log);
+void skx_set_decode(skx_decode_f decode);
+void skx_set_show_rrl(skx_show_rrl_f rrl);
 void skx_set_mem_cfg(bool mem_cfg_2lm);
 void skx_set_res_cfg(struct res_config *cfg);
 void skx_init_mc_mapping(struct skx_dev *d);