]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - drivers/edac/edac_mc.c
EDAC: Delete edac_stub.c
[mirror_ubuntu-bionic-kernel.git] / drivers / edac / edac_mc.c
index 735546ea6ebe835eb54a19ce239c3151d8606cac..536b65aa6facfebc590051db84bcf226609f20be 100644 (file)
@@ -43,6 +43,8 @@
 int edac_op_state = EDAC_OPSTATE_INVAL;
 EXPORT_SYMBOL_GPL(edac_op_state);
 
+static int edac_report = EDAC_REPORTING_ENABLED;
+
 /* lock to memory controller's control array */
 static DEFINE_MUTEX(mem_ctls_mutex);
 static LIST_HEAD(mc_devices);
@@ -55,6 +57,65 @@ static void const *edac_mc_owner;
 
 static struct bus_type mc_bus[EDAC_MAX_MCS];
 
+int get_edac_report_status(void)
+{
+       return edac_report;
+}
+EXPORT_SYMBOL_GPL(get_edac_report_status);
+
+void set_edac_report_status(int new)
+{
+       if (new == EDAC_REPORTING_ENABLED ||
+           new == EDAC_REPORTING_DISABLED ||
+           new == EDAC_REPORTING_FORCE)
+               edac_report = new;
+}
+EXPORT_SYMBOL_GPL(set_edac_report_status);
+
+static int edac_report_set(const char *str, const struct kernel_param *kp)
+{
+       if (!str)
+               return -EINVAL;
+
+       if (!strncmp(str, "on", 2))
+               edac_report = EDAC_REPORTING_ENABLED;
+       else if (!strncmp(str, "off", 3))
+               edac_report = EDAC_REPORTING_DISABLED;
+       else if (!strncmp(str, "force", 5))
+               edac_report = EDAC_REPORTING_FORCE;
+
+       return 0;
+}
+
+static int edac_report_get(char *buffer, const struct kernel_param *kp)
+{
+       int ret = 0;
+
+       switch (edac_report) {
+       case EDAC_REPORTING_ENABLED:
+               ret = sprintf(buffer, "on");
+               break;
+       case EDAC_REPORTING_DISABLED:
+               ret = sprintf(buffer, "off");
+               break;
+       case EDAC_REPORTING_FORCE:
+               ret = sprintf(buffer, "force");
+               break;
+       default:
+               ret = -EINVAL;
+               break;
+       }
+
+       return ret;
+}
+
+static const struct kernel_param_ops edac_report_ops = {
+       .set = edac_report_set,
+       .get = edac_report_get,
+};
+
+module_param_cb(edac_report, &edac_report_ops, &edac_report, 0644);
+
 unsigned edac_dimm_info_location(struct dimm_info *dimm, char *buf,
                                 unsigned len)
 {