From d60bedaedf4578cfc6e52c95db7e82861c9874a7 Mon Sep 17 00:00:00 2001 From: Jeff Lien Date: Mon, 12 Oct 2026 15:38:00 -0500 Subject: [PATCH] ocp: Fix OCP telemetry timestamp field decode Signed-off-by: Jeff Lien --- src/field-parser.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/field-parser.c b/src/field-parser.c index 6df2582508..05018213d0 100644 --- a/src/field-parser.c +++ b/src/field-parser.c @@ -9,6 +9,7 @@ #include #include +#include #include #include "cleanup.h" @@ -87,10 +88,16 @@ char *process_field_size_8(int offset, char *sfield, __u8 *buf) datastr = shr_hex_to_ascii(buffer); } else if (strstr(sfield, "Timestamp")) { char ts_buf[128]; - - lval_lo = *((__u64 *)(&buf[offset])); - - shr_format_ts(le64_to_cpu(lval_lo), ts_buf); + /* + * TELDF-4 is defined by OCP to hold the NVMe Timestamp + * (Feature Identifier 0Eh) get features structure, not a + * flat 64-bit value; reintrepret it as such rather than + * mask it by hand. + */ + struct nvme_timestamp *ts = + (struct nvme_timestamp *)&buf[offset]; + + shr_format_ts(int48_to_long(ts->timestamp), ts_buf); datastr = strdup(ts_buf); } else { lval_lo = *((__u64 *)(&buf[offset]));