]> www.infradead.org Git - users/mchehab/rasdaemon.git/commitdiff
ras-arm-handler: cope with latest upstream changes
authorMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Wed, 17 Jul 2024 05:01:29 +0000 (07:01 +0200)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Wed, 17 Jul 2024 05:01:29 +0000 (07:01 +0200)
Unfortunately, rasdaemon support for the firmware first
CPER ARM processor extended trace was added years before
having it merged upstream. That's bad, specially since
upstream revision requested a change on some fields.

Fix support for it by aligning with latest upstream version:
        https://lore.kernel.org/linux-edac/3853853f820a666253ca8ed6c7c724dc3d50044a.1720679234.git.mchehab+huawei@kernel.org/T/#m17003e47912b228e91e57ac6e4f90ea30061aa3b

A backward-compatible logic was added to avoid breaking with
existing OOT support.

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

index 1fa510e3e926bf90a361c1d3468ba8e5fc47c124..ac3cb86cfe3bfd2a8bec5b746c6216b6ca267dc9 100644 (file)
@@ -208,15 +208,22 @@ int ras_arm_event_handler(struct trace_seq *s,
        ev.psci_state = val;
        trace_seq_printf(s, " psci_state: %d", ev.psci_state);
 
-       // Upstream kKernels up to version 6.10 don't decode UEFI 2.6+ N.17 table
+       /* Upstream Kernels up to version 6.10 don't decode UEFI 2.6+ N.17 table */
        if (tep_get_field_val(s, event, "pei_len", record, &val, 1) >= 0) {
+               bool legacy_patch = false;
+
                ev.pei_len = val;
                trace_seq_printf(s, " ARM Processor Err Info data len: %d\n",
                                 ev.pei_len);
 
-               ev.pei_error = tep_get_field_raw(s, event, "buf", record, &len, 1);
-               if (!ev.pei_error)
-                       return -1;
+               ev.pei_error = tep_get_field_raw(s, event, "pei_buf", record, &len, 1);
+               if (!ev.pei_error) {
+                       /* Keep support for OOT CPER N.16/N.17 full table patch */
+                       ev.pei_error = tep_get_field_raw(s, event, "buf", record, &len, 1);
+                       if (!ev.pei_error)
+                               return -1;
+                       legacy_patch = true;
+               }
                display_raw_data(s, ev.pei_error, ev.pei_len);
 
                if (tep_get_field_val(s, event, "ctx_len", record, &val, 1) < 0)
@@ -225,7 +232,10 @@ int ras_arm_event_handler(struct trace_seq *s,
                trace_seq_printf(s, " ARM Processor Err Context Info data len: %d\n",
                                 ev.ctx_len);
 
-               ev.ctx_error = tep_get_field_raw(s, event, "buf1", record, &len, 1);
+               if (!legacy_patch)
+                       ev.ctx_error = tep_get_field_raw(s, event, "ctx_buf", record, &len, 1);
+               else
+                       ev.ctx_error = tep_get_field_raw(s, event, "buf1", record, &len, 1);
                if (!ev.ctx_error)
                        return -1;
                display_raw_data(s, ev.ctx_error, ev.ctx_len);
@@ -236,7 +246,10 @@ int ras_arm_event_handler(struct trace_seq *s,
                trace_seq_printf(s, " Vendor Specific Err Info data len: %d\n",
                                 ev.oem_len);
 
-               ev.vsei_error = tep_get_field_raw(s, event, "buf2", record, &len, 1);
+               if (!legacy_patch)
+                       ev.vsei_error = tep_get_field_raw(s, event, "oem_buf", record, &len, 1);
+               else
+                       ev.vsei_error = tep_get_field_raw(s, event, "buf2", record, &len, 1);
                if (!ev.vsei_error)
                        return -1;