]> www.infradead.org Git - users/mchehab/rasdaemon.git/commitdiff
rasdaemon: store PCIe dev name and TLP header for the aer event
authorShiju Jose <shiju.jose@huawei.com>
Wed, 13 Nov 2019 16:31:13 +0000 (16:31 +0000)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Wed, 20 Nov 2019 04:16:24 +0000 (05:16 +0100)
This patch adds logging and recording of the PCIe dev name and the
TLP header for the aer event.

Signed-off-by: Shiju Jose <shiju.jose@huawei.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
ras-aer-handler.c
ras-record.c
ras-record.h

index 664f7b4aa2fcb8702eee7236dcc8990b67996a03..8ddd43924afb249c34ce66e5d32e62d2b361e5af 100644 (file)
@@ -52,6 +52,8 @@ static const char *aer_uncor_errors[32] = {
        [20] = "Unsupported Request",
 };
 
+#define BUF_LEN        1024
+
 int ras_aer_event_handler(struct trace_seq *s,
                         struct pevent_record *record,
                         struct event_format *event, void *context)
@@ -59,11 +61,12 @@ int ras_aer_event_handler(struct trace_seq *s,
        int len;
        unsigned long long severity_val;
        unsigned long long status_val;
+       unsigned long long val;
        struct ras_events *ras = context;
        time_t now;
        struct tm *tm;
        struct ras_aer_event ev;
-       char buf[1024];
+       char buf[BUF_LEN];
 
        /*
         * Newer kernels (3.10-rc1 or upper) provide an uptime clock.
@@ -89,6 +92,7 @@ int ras_aer_event_handler(struct trace_seq *s,
                                           record, &len, 1);
        if (!ev.dev_name)
                return -1;
+       trace_seq_printf(s, "%s ", ev.dev_name);
 
        if (pevent_get_field_val(s,  event, "status", record, &status_val, 1) < 0)
                return -1;
@@ -104,6 +108,21 @@ int ras_aer_event_handler(struct trace_seq *s,
        else
                bitfield_msg(buf, sizeof(buf), aer_uncor_errors, 32, 0, 0, status_val);
        ev.msg = buf;
+
+       if (pevent_get_field_val(s, event, "tlp_header_valid",
+                               record, &val, 1) < 0)
+               return -1;
+
+       ev.tlp_header_valid = val;
+       if (ev.tlp_header_valid) {
+               ev.tlp_header = pevent_get_field_raw(s, event, "tlp_header",
+                                                    record, &len, 1);
+               snprintf((buf + strlen(ev.msg)), BUF_LEN - strlen(ev.msg),
+                        " TLP Header: %08x %08x %08x %08x",
+                        ev.tlp_header[0], ev.tlp_header[1],
+                        ev.tlp_header[2], ev.tlp_header[3]);
+       }
+
        trace_seq_printf(s, "%s ", ev.msg);
 
        /* Use hw_event_aer_err_type switch between different severity_val */
index ca58b228fa93a1b157805fe8e8f6f315e8000929..318baceeb2315903f4dec2fe1ccb5a74b057e831 100644 (file)
@@ -106,6 +106,7 @@ int ras_store_mc_event(struct ras_events *ras, struct ras_mc_event *ev)
 static const struct db_fields aer_event_fields[] = {
                { .name="id",                   .type="INTEGER PRIMARY KEY" },
                { .name="timestamp",            .type="TEXT" },
+               { .name="dev_name",             .type="TEXT" },
                { .name="err_type",             .type="TEXT" },
                { .name="err_msg",              .type="TEXT" },
 };
@@ -126,8 +127,9 @@ int ras_store_aer_event(struct ras_events *ras, struct ras_aer_event *ev)
        log(TERM, LOG_INFO, "aer_event store: %p\n", priv->stmt_aer_event);
 
        sqlite3_bind_text(priv->stmt_aer_event,  1, ev->timestamp, -1, NULL);
-       sqlite3_bind_text(priv->stmt_aer_event,  2, ev->error_type, -1, NULL);
-       sqlite3_bind_text(priv->stmt_aer_event,  3, ev->msg, -1, NULL);
+       sqlite3_bind_text(priv->stmt_aer_event,  2, ev->dev_name, -1, NULL);
+       sqlite3_bind_text(priv->stmt_aer_event,  3, ev->error_type, -1, NULL);
+       sqlite3_bind_text(priv->stmt_aer_event,  4, ev->msg, -1, NULL);
 
        rc = sqlite3_step(priv->stmt_aer_event);
        if (rc != SQLITE_OK && rc != SQLITE_DONE)
index a67b1938ea11a22dd2a8a68b98df501d09ef1c09..3fbdc5e876cc474422cae40dbff817a1c12c3d0d 100644 (file)
@@ -43,6 +43,8 @@ struct ras_aer_event {
        char timestamp[64];
        const char *error_type;
        const char *dev_name;
+       uint8_t tlp_header_valid;
+       uint32_t *tlp_header;
        const char *msg;
 };