]> www.infradead.org Git - users/mchehab/rasdaemon.git/commitdiff
rasdaemon: add timestamp for hip08 OEM error records in sqlite3 DB
authorXiaofei Tan <tanxiaofei@huawei.com>
Tue, 8 Oct 2019 12:38:57 +0000 (20:38 +0800)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Thu, 10 Oct 2019 17:33:43 +0000 (14:33 -0300)
This patch does two things:
1.Add timestamp for hip08 OEM error records in sqlite3 DB.
2.Add suffix "_v2" for hip08 OEM event names to keep compatibility
with old sqlite3 DB.

Signed-off-by: Xiaofei Tan <tanxiaofei@huawei.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
non-standard-hisi_hip07.c
non-standard-hisi_hip08.c
ras-non-standard-handler.c
ras-non-standard-handler.h

index 7f58fb3238f4c8c092168a64c64e7149ebfe6ef8..09ddcb2639cf77368374fea08b67e52bcc01d131 100644 (file)
@@ -89,11 +89,13 @@ static char *sas_axi_err_type(int etype)
 
 static int decode_hip07_sas_error(struct ras_events *ras,
                                  struct ras_ns_dec_tab *dec_tab,
-                                 struct trace_seq *s, const void *error)
+                                 struct trace_seq *s,
+                                 struct ras_non_standard_event *event)
 {
        char buf[1024];
        char *p = buf;
-       const struct hisi_sas_err_sec *err = error;
+       const struct hisi_sas_err_sec *err =
+                       (struct hisi_sas_err_sec *)event->error;
 
        if (err->val_bits == 0) {
                trace_seq_printf(s, "%s: no valid error data\n",
@@ -124,7 +126,8 @@ static int decode_hip07_sas_error(struct ras_events *ras,
 
 static int decode_hip07_hns_error(struct ras_events *ras,
                                  struct ras_ns_dec_tab *dec_tab,
-                                 struct trace_seq *s, const void *error)
+                                 struct trace_seq *s,
+                                 struct ras_non_standard_event *event)
 {
        return 0;
 }
index 002f4bf113e66e7b7de2e5c39a0ee44a3ad262e9..61e19b72267c6e87de3767ac40aee98bad8d5ae1 100644 (file)
@@ -140,6 +140,7 @@ enum hisi_oem_data_type {
 
 enum {
        hip08_oem_type1_field_id,
+       hip08_oem_type1_field_timestamp,
        hip08_oem_type1_field_version,
        hip08_oem_type1_field_soc_id,
        hip08_oem_type1_field_socket_id,
@@ -152,6 +153,7 @@ enum {
 
 enum {
        hip08_oem_type2_field_id,
+       hip08_oem_type2_field_timestamp,
        hip08_oem_type2_field_version,
        hip08_oem_type2_field_soc_id,
        hip08_oem_type2_field_socket_id,
@@ -164,6 +166,7 @@ enum {
 
 enum {
        hip08_pcie_local_field_id,
+       hip08_pcie_local_field_timestamp,
        hip08_pcie_local_field_version,
        hip08_pcie_local_field_soc_id,
        hip08_pcie_local_field_socket_id,
@@ -289,6 +292,7 @@ static char *pcie_local_sub_module_name(uint8_t id)
 #ifdef HAVE_SQLITE3
 static const struct db_fields hip08_oem_type1_event_fields[] = {
        { .name = "id",                 .type = "INTEGER PRIMARY KEY" },
+       { .name = "timestamp",          .type = "TEXT" },
        { .name = "version",            .type = "INTEGER" },
        { .name = "soc_id",             .type = "INTEGER" },
        { .name = "socket_id",          .type = "INTEGER" },
@@ -300,13 +304,14 @@ static const struct db_fields hip08_oem_type1_event_fields[] = {
 };
 
 static const struct db_table_descriptor hip08_oem_type1_event_tab = {
-       .name = "hip08_oem_type1_event",
+       .name = "hip08_oem_type1_event_v2",
        .fields = hip08_oem_type1_event_fields,
        .num_fields = ARRAY_SIZE(hip08_oem_type1_event_fields),
 };
 
 static const struct db_fields hip08_oem_type2_event_fields[] = {
        { .name = "id",                 .type = "INTEGER PRIMARY KEY" },
+       { .name = "timestamp",          .type = "TEXT" },
        { .name = "version",            .type = "INTEGER" },
        { .name = "soc_id",             .type = "INTEGER" },
        { .name = "socket_id",          .type = "INTEGER" },
@@ -318,13 +323,14 @@ static const struct db_fields hip08_oem_type2_event_fields[] = {
 };
 
 static const struct db_table_descriptor hip08_oem_type2_event_tab = {
-       .name = "hip08_oem_type2_event",
+       .name = "hip08_oem_type2_event_v2",
        .fields = hip08_oem_type2_event_fields,
        .num_fields = ARRAY_SIZE(hip08_oem_type2_event_fields),
 };
 
 static const struct db_fields hip08_pcie_local_event_fields[] = {
        { .name = "id",                 .type = "INTEGER PRIMARY KEY" },
+       { .name = "timestamp",          .type = "TEXT" },
        { .name = "version",            .type = "INTEGER" },
        { .name = "soc_id",             .type = "INTEGER" },
        { .name = "socket_id",          .type = "INTEGER" },
@@ -338,7 +344,7 @@ static const struct db_fields hip08_pcie_local_event_fields[] = {
 };
 
 static const struct db_table_descriptor hip08_pcie_local_event_tab = {
-       .name = "hip08_pcie_local_event",
+       .name = "hip08_pcie_local_event_v2",
        .fields = hip08_pcie_local_event_fields,
        .num_fields = ARRAY_SIZE(hip08_pcie_local_event_fields),
 };
@@ -399,9 +405,11 @@ static int step_vendor_data_tab(struct ras_ns_dec_tab *dec_tab, char *name)
 /* error data decoding functions */
 static int decode_hip08_oem_type1_error(struct ras_events *ras,
                                        struct ras_ns_dec_tab *dec_tab,
-                                       struct trace_seq *s, const void *error)
+                                       struct trace_seq *s,
+                                       struct ras_non_standard_event *event)
 {
-       const struct hisi_oem_type1_err_sec *err = error;
+       const struct hisi_oem_type1_err_sec *err =
+                       (struct hisi_oem_type1_err_sec*)event->error;
        char buf[1024];
        char *p = buf;
 
@@ -422,6 +430,9 @@ static int decode_hip08_oem_type1_error(struct ras_events *ras,
                }
        }
 #endif
+       record_vendor_data(dec_tab, hisi_oem_data_type_text,
+                          hip08_oem_type1_field_timestamp,
+                          0, event->timestamp);
 
        p += sprintf(p, "[ ");
        p += sprintf(p, "table_version=%d ", err->version);
@@ -524,9 +535,11 @@ static int decode_hip08_oem_type1_error(struct ras_events *ras,
 
 static int decode_hip08_oem_type2_error(struct ras_events *ras,
                                        struct ras_ns_dec_tab *dec_tab,
-                                       struct trace_seq *s, const void *error)
+                                       struct trace_seq *s,
+                                       struct ras_non_standard_event *event)
 {
-       const struct hisi_oem_type2_err_sec *err = error;
+       const struct hisi_oem_type2_err_sec *err =
+                       (struct hisi_oem_type2_err_sec *)event->error;
        char buf[1024];
        char *p = buf;
 
@@ -546,6 +559,10 @@ static int decode_hip08_oem_type2_error(struct ras_events *ras,
                }
        }
 #endif
+       record_vendor_data(dec_tab, hisi_oem_data_type_text,
+                          hip08_oem_type2_field_timestamp,
+                          0, event->timestamp);
+
        p += sprintf(p, "[ ");
        p += sprintf(p, "table_version=%d ", err->version);
        record_vendor_data(dec_tab, hisi_oem_data_type_int,
@@ -657,9 +674,11 @@ static int decode_hip08_oem_type2_error(struct ras_events *ras,
 
 static int decode_hip08_pcie_local_error(struct ras_events *ras,
                                         struct ras_ns_dec_tab *dec_tab,
-                                        struct trace_seq *s, const void *error)
+                                        struct trace_seq *s,
+                                        struct ras_non_standard_event *event)
 {
-       const struct hisi_pcie_local_err_sec *err = error;
+       const struct hisi_pcie_local_err_sec *err =
+                       (struct hisi_pcie_local_err_sec *)event->error;
        char buf[1024];
        char *p = buf;
        uint32_t i;
@@ -680,6 +699,10 @@ static int decode_hip08_pcie_local_error(struct ras_events *ras,
                }
        }
 #endif
+       record_vendor_data(dec_tab, hisi_oem_data_type_text,
+                          hip08_pcie_local_field_timestamp,
+                          0, event->timestamp);
+
        p += sprintf(p, "[ ");
        p += sprintf(p, "table_version=%d ", err->version);
        record_vendor_data(dec_tab, hisi_oem_data_type_int,
index 4eda80bd847c0c1f7703d4843a4c3bee11a2edf3..1b5d67a2f7bb843bee5662b5431c43a1a304841e 100644 (file)
@@ -166,8 +166,7 @@ int ras_non_standard_event_handler(struct trace_seq *s,
                for (i = 0; dec_tab[i].decode; i++) {
                        if (uuid_le_cmp(ev.sec_type,
                                        dec_tab[i].sec_type) == 0) {
-                               dec_tab[i].decode(ras, &dec_tab[i],
-                                                 s, ev.error);
+                               dec_tab[i].decode(ras, &dec_tab[i], s, &ev);
                                dec_done = true;
                                break;
                        }
index a7e48a3e29f510589b8a0820da5a7d0710434807..fd9dd9296478b80e0352498e26f5d00fc72e09e4 100644 (file)
@@ -23,7 +23,7 @@
 typedef struct ras_ns_dec_tab {
        const char *sec_type;
        int (*decode)(struct ras_events *ras, struct ras_ns_dec_tab *dec_tab,
-                     struct trace_seq *s, const void *err);
+                     struct trace_seq *s, struct ras_non_standard_event *event);
 #ifdef HAVE_SQLITE3
 #include <sqlite3.h>
        sqlite3_stmt *stmt_dec_record;