OSDN Git Service

platform/surface: aggregator: Add target and source IDs to command trace events
authorMaximilian Luz <luzmaximilian@gmail.com>
Fri, 2 Dec 2022 22:33:21 +0000 (23:33 +0100)
committerHans de Goede <hdegoede@redhat.com>
Thu, 2 Feb 2023 21:48:20 +0000 (22:48 +0100)
Add command source and target IDs to trace events.

Tracing support for the Surface Aggregator driver was originally
implemented at a time when only two peers were known: Host and SAM. We
now know that there are at least five, with three actively being used
(Host, SAM, KIP; four with Debug if you want to count manually enabling
that interface). So it makes sense to also explicitly name the peers
involved when tracing.

Signed-off-by: Maximilian Luz <luzmaximilian@gmail.com>
Link: https://lore.kernel.org/r/20221202223327.690880-4-luzmaximilian@gmail.com
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
drivers/platform/surface/aggregator/trace.h

index 2a2c177..55cc61b 100644 (file)
@@ -96,6 +96,7 @@ TRACE_DEFINE_ENUM(SSAM_SSH_TC_POS);
 #define SSAM_SEQ_NOT_APPLICABLE                ((u16)-1)
 #define SSAM_RQID_NOT_APPLICABLE       ((u32)-1)
 #define SSAM_SSH_TC_NOT_APPLICABLE     0
+#define SSAM_SSH_TID_NOT_APPLICABLE    ((u8)-1)
 
 #ifndef _SURFACE_AGGREGATOR_TRACE_HELPERS
 #define _SURFACE_AGGREGATOR_TRACE_HELPERS
@@ -151,11 +152,43 @@ static inline u32 ssam_trace_get_request_id(const struct ssh_packet *p)
 }
 
 /**
+ * ssam_trace_get_request_tid() - Read the packet's request target ID.
+ * @p: The packet.
+ *
+ * Return: Returns the packet's request target ID (TID) field if the packet
+ * represents a request with command data, or %SSAM_SSH_TID_NOT_APPLICABLE
+ * if not (e.g. flush request, control packet).
+ */
+static inline u32 ssam_trace_get_request_tid(const struct ssh_packet *p)
+{
+       if (!p->data.ptr || p->data.len < SSH_COMMAND_MESSAGE_LENGTH(0))
+               return SSAM_SSH_TID_NOT_APPLICABLE;
+
+       return get_unaligned_le16(&p->data.ptr[SSH_MSGOFFSET_COMMAND(tid)]);
+}
+
+/**
+ * ssam_trace_get_request_sid() - Read the packet's request source ID.
+ * @p: The packet.
+ *
+ * Return: Returns the packet's request source ID (SID) field if the packet
+ * represents a request with command data, or %SSAM_SSH_TID_NOT_APPLICABLE
+ * if not (e.g. flush request, control packet).
+ */
+static inline u32 ssam_trace_get_request_sid(const struct ssh_packet *p)
+{
+       if (!p->data.ptr || p->data.len < SSH_COMMAND_MESSAGE_LENGTH(0))
+               return SSAM_SSH_TID_NOT_APPLICABLE;
+
+       return get_unaligned_le16(&p->data.ptr[SSH_MSGOFFSET_COMMAND(sid)]);
+}
+
+/**
  * ssam_trace_get_request_tc() - Read the packet's request target category.
  * @p: The packet.
  *
  * Return: Returns the packet's request target category (TC) field if the
- * packet represents a request with command data, or %SSAM_TC_NOT_APPLICABLE
+ * packet represents a request with command data, or %SSAM_SSH_TC_NOT_APPLICABLE
  * if not (e.g. flush request, control packet).
  */
 static inline u32 ssam_trace_get_request_tc(const struct ssh_packet *p)
@@ -232,8 +265,18 @@ static inline u32 ssam_trace_get_request_tc(const struct ssh_packet *p)
                { SSAM_RQID_NOT_APPLICABLE,             "N/A" }         \
        )
 
-#define ssam_show_ssh_tc(rqid)                                         \
-       __print_symbolic(rqid,                                          \
+#define ssam_show_ssh_tid(tid)                                         \
+       __print_symbolic(tid,                                           \
+               { SSAM_SSH_TID_NOT_APPLICABLE,          "N/A"      },   \
+               { SSAM_SSH_TID_HOST,                    "Host"     },   \
+               { SSAM_SSH_TID_SAM,                     "SAM"      },   \
+               { SSAM_SSH_TID_KIP,                     "KIP"      },   \
+               { SSAM_SSH_TID_DEBUG,                   "Debug"    },   \
+               { SSAM_SSH_TID_SURFLINK,                "SurfLink" }    \
+       )
+
+#define ssam_show_ssh_tc(tc)                                           \
+       __print_symbolic(tc,                                            \
                { SSAM_SSH_TC_NOT_APPLICABLE,           "N/A"  },       \
                { SSAM_SSH_TC_SAM,                      "SAM"  },       \
                { SSAM_SSH_TC_BAT,                      "BAT"  },       \
@@ -313,6 +356,8 @@ DECLARE_EVENT_CLASS(ssam_command_class,
        TP_STRUCT__entry(
                __field(u16, rqid)
                __field(u16, len)
+               __field(u8, tid)
+               __field(u8, sid)
                __field(u8, tc)
                __field(u8, cid)
                __field(u8, iid)
@@ -320,14 +365,18 @@ DECLARE_EVENT_CLASS(ssam_command_class,
 
        TP_fast_assign(
                __entry->rqid = get_unaligned_le16(&cmd->rqid);
+               __entry->tid = cmd->tid;
+               __entry->sid = cmd->sid;
                __entry->tc = cmd->tc;
                __entry->cid = cmd->cid;
                __entry->iid = cmd->iid;
                __entry->len = len;
        ),
 
-       TP_printk("rqid=%#06x, tc=%s, cid=%#04x, iid=%#04x, len=%u",
+       TP_printk("rqid=%#06x, tid=%s, sid=%s, tc=%s, cid=%#04x, iid=%#04x, len=%u",
                __entry->rqid,
+               ssam_show_ssh_tid(__entry->tid),
+               ssam_show_ssh_tid(__entry->sid),
                ssam_show_ssh_tc(__entry->tc),
                __entry->cid,
                __entry->iid,
@@ -430,6 +479,8 @@ DECLARE_EVENT_CLASS(ssam_request_class,
                __field(u8, tc)
                __field(u16, cid)
                __field(u16, iid)
+               __field(u8, tid)
+               __field(u8, sid)
        ),
 
        TP_fast_assign(
@@ -439,16 +490,20 @@ DECLARE_EVENT_CLASS(ssam_request_class,
                __entry->state = READ_ONCE(request->state);
                __entry->rqid = ssam_trace_get_request_id(p);
                ssam_trace_ptr_uid(p, __entry->uid);
+               __entry->tid = ssam_trace_get_request_tid(p);
+               __entry->sid = ssam_trace_get_request_sid(p);
                __entry->tc = ssam_trace_get_request_tc(p);
                __entry->cid = ssam_trace_get_command_field_u8(p, cid);
                __entry->iid = ssam_trace_get_command_field_u8(p, iid);
        ),
 
-       TP_printk("uid=%s, rqid=%s, ty=%s, sta=%s, tc=%s, cid=%s, iid=%s",
+       TP_printk("uid=%s, rqid=%s, ty=%s, sta=%s, tid=%s, sid=%s, tc=%s, cid=%s, iid=%s",
                __entry->uid,
                ssam_show_request_id(__entry->rqid),
                ssam_show_request_type(__entry->state),
                ssam_show_request_state(__entry->state),
+               ssam_show_ssh_tid(__entry->tid),
+               ssam_show_ssh_tid(__entry->sid),
                ssam_show_ssh_tc(__entry->tc),
                ssam_show_generic_u8_field(__entry->cid),
                ssam_show_generic_u8_field(__entry->iid)
@@ -474,6 +529,8 @@ DECLARE_EVENT_CLASS(ssam_request_status_class,
                __field(u8, tc)
                __field(u16, cid)
                __field(u16, iid)
+               __field(u8, tid)
+               __field(u8, sid)
        ),
 
        TP_fast_assign(
@@ -484,16 +541,20 @@ DECLARE_EVENT_CLASS(ssam_request_status_class,
                __entry->rqid = ssam_trace_get_request_id(p);
                __entry->status = status;
                ssam_trace_ptr_uid(p, __entry->uid);
+               __entry->tid = ssam_trace_get_request_tid(p);
+               __entry->sid = ssam_trace_get_request_sid(p);
                __entry->tc = ssam_trace_get_request_tc(p);
                __entry->cid = ssam_trace_get_command_field_u8(p, cid);
                __entry->iid = ssam_trace_get_command_field_u8(p, iid);
        ),
 
-       TP_printk("uid=%s, rqid=%s, ty=%s, sta=%s, tc=%s, cid=%s, iid=%s, status=%d",
+       TP_printk("uid=%s, rqid=%s, ty=%s, sta=%s, tid=%s, sid=%s, tc=%s, cid=%s, iid=%s, status=%d",
                __entry->uid,
                ssam_show_request_id(__entry->rqid),
                ssam_show_request_type(__entry->state),
                ssam_show_request_state(__entry->state),
+               ssam_show_ssh_tid(__entry->tid),
+               ssam_show_ssh_tid(__entry->sid),
                ssam_show_ssh_tc(__entry->tc),
                ssam_show_generic_u8_field(__entry->cid),
                ssam_show_generic_u8_field(__entry->iid),