]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
EDAC/{skx_common,skx,i10nm}: Move the common debug code to skx_common
authorQiuxu Zhuo <qiuxu.zhuo@intel.com>
Thu, 29 Aug 2024 05:51:01 +0000 (13:51 +0800)
committerTony Luck <tony.luck@intel.com>
Tue, 3 Sep 2024 19:35:06 +0000 (12:35 -0700)
Commit

  afdb82fd763c ("EDAC, i10nm: make skx_common.o a separate module")

made skx_common.o a separate module. With skx_common.o now a separate
module, move the common debug code setup_{skx,i10nm}_debug() and
teardown_{skx,i10nm}_debug() in {skx,i10nm}_base.c to skx_common.c to
reduce code duplication. Additionally, prefix these function names with
'skx' to maintain consistency with other names in the file.

Signed-off-by: Qiuxu Zhuo <qiuxu.zhuo@intel.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
Link: https://lore.kernel.org/all/20240829055101.56245-1-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 24dd896d9a9d58c7caed6649faab4eeb10248f3e..c5b99d575cc7a4f50314493b6da683b3bb7b3806 100644 (file)
@@ -1013,54 +1013,6 @@ static struct notifier_block i10nm_mce_dec = {
        .priority       = MCE_PRIO_EDAC,
 };
 
-#ifdef CONFIG_EDAC_DEBUG
-/*
- * Debug feature.
- * Exercise the address decode logic by writing an address to
- * /sys/kernel/debug/edac/i10nm_test/addr.
- */
-static struct dentry *i10nm_test;
-
-static int debugfs_u64_set(void *data, u64 val)
-{
-       struct mce m;
-
-       pr_warn_once("Fake error to 0x%llx injected via debugfs\n", val);
-
-       memset(&m, 0, sizeof(m));
-       /* ADDRV + MemRd + Unknown channel */
-       m.status = MCI_STATUS_ADDRV + 0x90;
-       /* One corrected error */
-       m.status |= BIT_ULL(MCI_STATUS_CEC_SHIFT);
-       m.addr = val;
-       skx_mce_check_error(NULL, 0, &m);
-
-       return 0;
-}
-DEFINE_SIMPLE_ATTRIBUTE(fops_u64_wo, NULL, debugfs_u64_set, "%llu\n");
-
-static void setup_i10nm_debug(void)
-{
-       i10nm_test = edac_debugfs_create_dir("i10nm_test");
-       if (!i10nm_test)
-               return;
-
-       if (!edac_debugfs_create_file("addr", 0200, i10nm_test,
-                                     NULL, &fops_u64_wo)) {
-               debugfs_remove(i10nm_test);
-               i10nm_test = NULL;
-       }
-}
-
-static void teardown_i10nm_debug(void)
-{
-       debugfs_remove_recursive(i10nm_test);
-}
-#else
-static inline void setup_i10nm_debug(void) {}
-static inline void teardown_i10nm_debug(void) {}
-#endif /*CONFIG_EDAC_DEBUG*/
-
 static int __init i10nm_init(void)
 {
        u8 mc = 0, src_id = 0, node_id = 0;
@@ -1159,7 +1111,7 @@ static int __init i10nm_init(void)
 
        opstate_init();
        mce_register_decode_chain(&i10nm_mce_dec);
-       setup_i10nm_debug();
+       skx_setup_debug("i10nm_test");
 
        if (retry_rd_err_log && res_cfg->offsets_scrub && res_cfg->offsets_demand) {
                skx_set_decode(i10nm_mc_decode, show_retry_rd_err_log);
@@ -1187,7 +1139,7 @@ static void __exit i10nm_exit(void)
                        enable_retry_rd_err_log(false);
        }
 
-       teardown_i10nm_debug();
+       skx_teardown_debug();
        mce_unregister_decode_chain(&i10nm_mce_dec);
        skx_adxl_put();
        skx_remove();
index af3fa807acdba9899107a3191fde11c6926aa3c1..14cfd394b4696487d78bdb21ede26393ee7e1ddb 100644 (file)
@@ -587,54 +587,6 @@ static struct notifier_block skx_mce_dec = {
        .priority       = MCE_PRIO_EDAC,
 };
 
-#ifdef CONFIG_EDAC_DEBUG
-/*
- * Debug feature.
- * Exercise the address decode logic by writing an address to
- * /sys/kernel/debug/edac/skx_test/addr.
- */
-static struct dentry *skx_test;
-
-static int debugfs_u64_set(void *data, u64 val)
-{
-       struct mce m;
-
-       pr_warn_once("Fake error to 0x%llx injected via debugfs\n", val);
-
-       memset(&m, 0, sizeof(m));
-       /* ADDRV + MemRd + Unknown channel */
-       m.status = MCI_STATUS_ADDRV + 0x90;
-       /* One corrected error */
-       m.status |= BIT_ULL(MCI_STATUS_CEC_SHIFT);
-       m.addr = val;
-       skx_mce_check_error(NULL, 0, &m);
-
-       return 0;
-}
-DEFINE_SIMPLE_ATTRIBUTE(fops_u64_wo, NULL, debugfs_u64_set, "%llu\n");
-
-static void setup_skx_debug(void)
-{
-       skx_test = edac_debugfs_create_dir("skx_test");
-       if (!skx_test)
-               return;
-
-       if (!edac_debugfs_create_file("addr", 0200, skx_test,
-                                     NULL, &fops_u64_wo)) {
-               debugfs_remove(skx_test);
-               skx_test = NULL;
-       }
-}
-
-static void teardown_skx_debug(void)
-{
-       debugfs_remove_recursive(skx_test);
-}
-#else
-static inline void setup_skx_debug(void) {}
-static inline void teardown_skx_debug(void) {}
-#endif /*CONFIG_EDAC_DEBUG*/
-
 /*
  * skx_init:
  *     make sure we are running on the correct cpu model
@@ -728,7 +680,7 @@ static int __init skx_init(void)
        /* Ensure that the OPSTATE is set correctly for POLL or NMI */
        opstate_init();
 
-       setup_skx_debug();
+       skx_setup_debug("skx_test");
 
        mce_register_decode_chain(&skx_mce_dec);
 
@@ -742,7 +694,7 @@ static void __exit skx_exit(void)
 {
        edac_dbg(2, "\n");
        mce_unregister_decode_chain(&skx_mce_dec);
-       teardown_skx_debug();
+       skx_teardown_debug();
        if (nvdimm_count)
                skx_adxl_put();
        skx_remove();
index 8d18099fd528cfb6428ac26937e327d7e95decc1..7cd074401167127ad02bb83b2c7205fab74006a0 100644 (file)
@@ -739,6 +739,53 @@ void skx_remove(void)
 }
 EXPORT_SYMBOL_GPL(skx_remove);
 
+#ifdef CONFIG_EDAC_DEBUG
+/*
+ * Debug feature.
+ * Exercise the address decode logic by writing an address to
+ * /sys/kernel/debug/edac/{skx,i10nm}_test/addr.
+ */
+static struct dentry *skx_test;
+
+static int debugfs_u64_set(void *data, u64 val)
+{
+       struct mce m;
+
+       pr_warn_once("Fake error to 0x%llx injected via debugfs\n", val);
+
+       memset(&m, 0, sizeof(m));
+       /* ADDRV + MemRd + Unknown channel */
+       m.status = MCI_STATUS_ADDRV + 0x90;
+       /* One corrected error */
+       m.status |= BIT_ULL(MCI_STATUS_CEC_SHIFT);
+       m.addr = val;
+       skx_mce_check_error(NULL, 0, &m);
+
+       return 0;
+}
+DEFINE_SIMPLE_ATTRIBUTE(fops_u64_wo, NULL, debugfs_u64_set, "%llu\n");
+
+void skx_setup_debug(const char *name)
+{
+       skx_test = edac_debugfs_create_dir(name);
+       if (!skx_test)
+               return;
+
+       if (!edac_debugfs_create_file("addr", 0200, skx_test,
+                                     NULL, &fops_u64_wo)) {
+               debugfs_remove(skx_test);
+               skx_test = NULL;
+       }
+}
+EXPORT_SYMBOL_GPL(skx_setup_debug);
+
+void skx_teardown_debug(void)
+{
+       debugfs_remove_recursive(skx_test);
+}
+EXPORT_SYMBOL_GPL(skx_teardown_debug);
+#endif /*CONFIG_EDAC_DEBUG*/
+
 MODULE_LICENSE("GPL v2");
 MODULE_AUTHOR("Tony Luck");
 MODULE_DESCRIPTION("MC Driver for Intel server processors");
index 11faf1db4fa4820a1a2759b6a32d39281eba0b3d..cafae2c7b4975a04a25995c35e3dac94478616e2 100644 (file)
@@ -260,4 +260,12 @@ int skx_mce_check_error(struct notifier_block *nb, unsigned long val,
 
 void skx_remove(void);
 
+#ifdef CONFIG_EDAC_DEBUG
+void skx_setup_debug(const char *name);
+void skx_teardown_debug(void);
+#else
+static inline void skx_setup_debug(const char *name) {}
+static inline void skx_teardown_debug(void) {}
+#endif
+
 #endif /* _SKX_COMM_EDAC_H */