]> www.infradead.org Git - users/mchehab/rasdaemon.git/commitdiff
ras-mc-handler: cleanup trigger logic
authorMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Tue, 16 Jul 2024 05:38:13 +0000 (07:38 +0200)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Tue, 16 Jul 2024 05:42:28 +0000 (07:42 +0200)
- Only setup mc_ce_trigger/mc_ue_trigger if the trigger is
  valid;

- Check if the trigger is there before doing strcmp, as
  checking if a pointer is not null is faster than strcmp();

- Ensure that the trigger env vars will be const, as we don't
  want to accidentally override those env vars;

- Print trigger enabled messages when rasdaemon runs with -f;

- ensure that trigger variables will initialize to NULL;

- coding style cleanups.

Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
ras-events.c
ras-mc-handler.c
trigger.c
trigger.h

index 0df1d202fb3981127818f6045347c8a7818327d9..3c778e8f6d9b0e392d7dc5a95696b6f935d91d4a 100644 (file)
@@ -62,7 +62,7 @@
 
 extern char *choices_disable;
 
-const static struct event_trigger event_triggers[] = {
+static const struct event_trigger event_triggers[] = {
        { "mc_event", &mc_event_trigger_setup },
 };
 
@@ -284,6 +284,7 @@ free_ras:
 static void setup_event_trigger(char *event)
 {
        struct event_trigger trigger;
+
        for (int i = 0; i < ARRAY_SIZE(event_triggers); i++) {
                trigger = event_triggers[i];
                if (!strcmp(event, trigger.name))
index 2f06a01fcbc5c5ead9813e443d81349f03881e2a..26ff0be1e9aed04437cca942695a2bc6384964ec 100644 (file)
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 */
 #define _GNU_SOURCE
+#include <assert.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <unistd.h>
 #include <traceevent/kbuffer.h>
-#include <assert.h>
+#include <unistd.h>
+
 #include "ras-mc-handler.h"
-#include "ras-record.h"
 #include "ras-logger.h"
 #include "ras-page-isolation.h"
+#include "ras-record.h"
 #include "ras-report.h"
 #include "trigger.h"
 
 #define MAX_ENV 30
-static char *mc_ce_trigger;
-static char *mc_ue_trigger;
+static const char *mc_ce_trigger = NULL;
+static const char *mc_ue_trigger = NULL;
 
 void mc_event_trigger_setup(void)
 {
-       mc_ce_trigger = getenv("MC_CE_TRIGGER");
-       if (!mc_ce_trigger || !strcmp(mc_ce_trigger, "")
-                       || trigger_check(mc_ce_trigger) < 0) {
-               log(SYSLOG, LOG_ERR, "Cannot access mc_event ce trigger `%s`\n",
-                       mc_ce_trigger);
-       } else
-               log(SYSLOG, LOG_INFO, "Setup mc_event ce trigger `%s`\n",
-                       mc_ce_trigger);
-
-       mc_ue_trigger = getenv("MC_UE_TRIGGER");
-       if (!mc_ue_trigger || !strcmp(mc_ue_trigger, "")
-                       || trigger_check(mc_ue_trigger) < 0) {
-               log(SYSLOG, LOG_ERR, "Cannot access mc_event ue trigger `%s`\n",
-                       mc_ue_trigger);
-       } else
-               log(SYSLOG, LOG_INFO, "Setup mc_event ue trigger `%s`\n",
-                       mc_ue_trigger);
+       const char *trigger;
+
+       trigger = getenv("MC_CE_TRIGGER");
+       if (trigger && strcmp(trigger, "")) {
+               if (trigger_check(trigger) < 0) {
+                       log(ALL, LOG_ERR,
+                           "Cannot access mc_event ce trigger `%s`\n",
+                           trigger);
+               } else {
+                       log(ALL, LOG_INFO,
+                           "Setup mc_event ce trigger `%s`\n",
+                           trigger);
+                       mc_ce_trigger = trigger;
+               }
+       }
+
+       trigger = getenv("MC_UE_TRIGGER");
+       if (trigger && strcmp(trigger, "")) {
+               if (trigger_check(trigger) < 0) {
+                       log(ALL, LOG_ERR,
+                           "Cannot access mc_event ue trigger `%s`\n",
+                           trigger);
+               } else {
+                       log(ALL, LOG_INFO,
+                           "Setup mc_event ue trigger `%s`\n",
+                           trigger);
+                       mc_ue_trigger = trigger;
+               }
+       }
 }
 
 static void run_mc_trigger(struct ras_mc_event *ev, const char *mc_trigger)
@@ -60,7 +73,7 @@ static void run_mc_trigger(struct ras_mc_event *ev, const char *mc_trigger)
        int ei = 0;
        int i;
 
-       if (!mc_trigger || !strcmp(mc_trigger, ""))
+       if (!strcmp(mc_trigger, ""))
                return;
 
        if (asprintf(&env[ei++], "PATH=%s", getenv("PATH") ?: "/sbin:/usr/sbin:/bin:/usr/bin") < 0)
@@ -269,10 +282,10 @@ int ras_mc_event_handler(struct trace_seq *s,
        ras_report_mc_event(ras, &ev);
 #endif
 
-       if (!strcmp(ev.error_type, "Corrected"))
+       if (mc_ce_trigger && !strcmp(ev.error_type, "Corrected"))
                run_mc_trigger(&ev, mc_ce_trigger);
 
-       if (!strcmp(ev.error_type, "Uncorrected"))
+       if (mc_ue_trigger && !strcmp(ev.error_type, "Uncorrected"))
                run_mc_trigger(&ev, mc_ue_trigger);
 
        return 0;
index 95fb8caf905654565a61743ad79ac4f696e9ffab..0d91e05d435fb03fa2d4c15a89b3875f130dd6a5 100644 (file)
--- a/trigger.c
+++ b/trigger.c
@@ -6,7 +6,7 @@
 #include "ras-logger.h"
 #include "trigger.h"
 
-void run_trigger(const char *trigger, char *argv[], char **env, const charreporter)
+void run_trigger(const char *trigger, char *argv[], char **env, const char *reporter)
 {
        pid_t child;
        char *path;
@@ -39,7 +39,7 @@ void run_trigger(const char *trigger, char *argv[], char **env, const char* repo
        }
 }
 
-int trigger_check(char *s)
+int trigger_check(const char *s)
 {
        char *name;
        int rc;
index 556a7f2c2e9810d12a49e1f264758c43e58bd48f..ccd1a9bd0f9f8ac7329812fc9bb2187bda6f2dbc 100644 (file)
--- a/trigger.h
+++ b/trigger.h
@@ -6,8 +6,7 @@ struct event_trigger {
         void (*setup)(void);
 };
 
-int trigger_check(char *s);
+int trigger_check(const char *s);
 void run_trigger(const char *trigger, char *argv[], char **env, const char* reporter);
 
-
 #endif