]> www.infradead.org Git - users/mchehab/rasdaemon.git/commitdiff
Make event filter type specific
authorCong Wang <xiyou.wangcong@gmail.com>
Wed, 12 Jun 2019 22:06:37 +0000 (15:06 -0700)
committerCong Wang <xiyou.wangcong@gmail.com>
Wed, 26 Jun 2019 17:10:28 +0000 (10:10 -0700)
struct ras_events passed via context pointer is not per event,
therefore the per event filter must be specific to each event.

Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
ras-devlink-handler.c
ras-events.c
ras-events.h
ras-report.h

index 2699291c646ca10c275a0cdef305f66dbe4f13ec..e52d66e1b04438fb75cb3720dcc006a3e1ec11ac 100644 (file)
@@ -91,7 +91,8 @@ int ras_devlink_event_handler(struct trace_seq *s,
        struct tm *tm;
        struct devlink_event ev;
 
-       if (ras->filter && pevent_filter_match(ras->filter, record) == FILTER_MATCH)
+       if (ras->filters[DEVLINK_EVENT] &&
+           pevent_filter_match(ras->filters[DEVLINK_EVENT], record) == FILTER_MATCH)
                return 0;
        /*
         * Newer kernels (3.10-rc1 or upper) provide an uptime clock.
index 6ba7a6aef162b2727508105c852ecd388cc5faab..d7286ede0c25def920b0041fa54417d997132ded 100644 (file)
@@ -570,7 +570,7 @@ static int select_tracing_timestamp(struct ras_events *ras)
 
 static int add_event_handler(struct ras_events *ras, struct pevent *pevent,
                             unsigned page_size, char *group, char *event,
-                            pevent_event_handler_func func, char *filter_str)
+                            pevent_event_handler_func func, char *filter_str, int id)
 {
        int fd, size, rc;
        char *page, fname[MAX_PATH + 1];
@@ -639,7 +639,7 @@ static int add_event_handler(struct ras_events *ras, struct pevent *pevent,
                }
        }
 
-       ras->filter = filter;
+       ras->filters[id] = filter;
 
        /* Enable RAS events */
        rc = __toggle_ras_mc_event(ras, group, event, 1);
@@ -700,7 +700,7 @@ int handle_ras_events(int record_events)
        ras->record_events = record_events;
 
        rc = add_event_handler(ras, pevent, page_size, "ras", "mc_event",
-                              ras_mc_event_handler, NULL);
+                              ras_mc_event_handler, NULL, MC_EVENT);
        if (!rc)
                num_events++;
        else
@@ -709,7 +709,7 @@ int handle_ras_events(int record_events)
 
 #ifdef HAVE_AER
        rc = add_event_handler(ras, pevent, page_size, "ras", "aer_event",
-                              ras_aer_event_handler, NULL);
+                              ras_aer_event_handler, NULL, AER_EVENT);
        if (!rc)
                num_events++;
        else
@@ -719,7 +719,7 @@ int handle_ras_events(int record_events)
 
 #ifdef HAVE_NON_STANDARD
         rc = add_event_handler(ras, pevent, page_size, "ras", "non_standard_event",
-                               ras_non_standard_event_handler, NULL);
+                               ras_non_standard_event_handler, NULL, NON_STANDARD_EVENT);
         if (!rc)
                 num_events++;
         else
@@ -729,7 +729,7 @@ int handle_ras_events(int record_events)
 
 #ifdef HAVE_ARM
         rc = add_event_handler(ras, pevent, page_size, "ras", "arm_event",
-                               ras_arm_event_handler, NULL);
+                               ras_arm_event_handler, NULL, ARM_EVENT);
         if (!rc)
                 num_events++;
         else
@@ -746,7 +746,7 @@ int handle_ras_events(int record_events)
        if (ras->mce_priv) {
                rc = add_event_handler(ras, pevent, page_size,
                                       "mce", "mce_record",
-                                      ras_mce_event_handler, NULL);
+                                      ras_mce_event_handler, NULL, MCE_EVENT);
                if (!rc)
                        num_events++;
        else
@@ -757,7 +757,7 @@ int handle_ras_events(int record_events)
 
 #ifdef HAVE_EXTLOG
        rc = add_event_handler(ras, pevent, page_size, "ras", "extlog_mem_event",
-                              ras_extlog_mem_event_handler, NULL);
+                              ras_extlog_mem_event_handler, NULL, EXTLOG_EVENT);
        if (!rc) {
                /* tell kernel we are listening, so don't printk to console */
                (void)open("/sys/kernel/debug/ras/daemon_active", 0);
@@ -770,13 +770,13 @@ int handle_ras_events(int record_events)
 #ifdef HAVE_DEVLINK
        rc = add_event_handler(ras, pevent, page_size, "net",
                               "net_dev_xmit_timeout",
-                              ras_net_xmit_timeout_handler, NULL);
+                              ras_net_xmit_timeout_handler, NULL, DEVLINK_EVENT);
         if (!rc)
                filter_str = "devlink/devlink_health_report:msg=~\'TX timeout*\'";
 
        rc = add_event_handler(ras, pevent, page_size, "devlink",
                               "devlink_health_report",
-                              ras_devlink_event_handler, filter_str);
+                              ras_devlink_event_handler, filter_str, DEVLINK_EVENT);
         if (!rc)
                 num_events++;
         else
@@ -834,8 +834,10 @@ err:
                pevent_free(pevent);
 
        if (ras) {
-               if (ras->filter)
-                       pevent_filter_free(ras->filter);
+               for (i = 0; i < NR_EVENTS; i++) {
+                       if (ras->filters[i])
+                               pevent_filter_free(ras->filters[i]);
+               }
                free(ras);
        }
 
index 2fae2f12a4bab359573e59025c67b2d91759b900..0234f32ef39512593637edc80a014d2ce3055203 100644 (file)
 
 struct mce_priv;
 
+enum {
+       MC_EVENT,
+       MCE_EVENT,
+       AER_EVENT,
+       NON_STANDARD_EVENT,
+       ARM_EVENT,
+       EXTLOG_EVENT,
+       DEVLINK_EVENT,
+       NR_EVENTS
+};
+
 struct ras_events {
        char debugfs[MAX_PATH + 1];
        char tracing[MAX_PATH + 1];
@@ -51,7 +62,7 @@ struct ras_events {
        /* For ABRT socket*/
        int socketfd;
 
-       struct event_filter *filter;
+       struct event_filter *filters[NR_EVENTS];
 };
 
 struct pthread_data {
index cb133a1ee51daf427f58da8a2ac596af2c65c4ce..2addccb970a44d75e9d8ad019c639ce5c37a3c0f 100644 (file)
 /* ABRT socket file */
 #define ABRT_SOCKET "/var/run/abrt/abrt.socket"
 
-enum {
-       MC_EVENT,
-       MCE_EVENT,
-       AER_EVENT,
-       NON_STANDARD_EVENT,
-       ARM_EVENT,
-       DEVLINK_EVENT
-};
-
 #ifdef HAVE_ABRT_REPORT
 
 int ras_report_mc_event(struct ras_events *ras, struct ras_mc_event *ev);