On Wed, 06 May 2026 22:54:44 +0530
Praveen Talari <[email protected]> wrote:

> +TRACE_EVENT(geni_serial_tx_data,
> +         TP_PROTO(struct device *dev, const u8 *buf, unsigned int len),
> +         TP_ARGS(dev, buf, len),
> +
> +         TP_STRUCT__entry(__string(name, dev_name(dev))
> +                          __field(unsigned int, len)
> +                          __dynamic_array(u8, data, len)
> +         ),
> +
> +         TP_fast_assign(__assign_str(name);
> +                        __entry->len = len;
> +                        memcpy(__get_dynamic_array(data), buf, len);
> +         ),
> +
> +         TP_printk("%s: tx_len=%u data=%s",
> +                   __get_str(name), __entry->len,
> +                   __print_hex(__get_dynamic_array(data), __entry->len))
> +);
> +
> +TRACE_EVENT(geni_serial_rx_data,
> +         TP_PROTO(struct device *dev, const u8 *buf, unsigned int len),
> +         TP_ARGS(dev, buf, len),
> +
> +         TP_STRUCT__entry(__string(name, dev_name(dev))
> +                          __field(unsigned int, len)
> +                          __dynamic_array(u8, data, len)
> +         ),
> +
> +         TP_fast_assign(__assign_str(name);
> +                        __entry->len = len;
> +                        memcpy(__get_dynamic_array(data), buf, len);
> +         ),
> +
> +         TP_printk("%s: rx_len=%u data=%s",

Do you really need to say "tx_len" and "rx_len", could it just be "len" and
have the name of the tracepoint show what it is?

Each TRACE_EVENT() is really just a:

  DECLARE_EVENT_CLASS() followed by a DEFINE_EVENT()

underneath.

And each TRACE_EVENT() costs around 5K in size, where most of that is in
the DECLARE_EVENT_CLASS() portion. Thus, you can save some memory by using
DECLARE_EVENT_CLASS() and then define the above two events with
DEFINE_EVENT().

-- Steve


> +                   __get_str(name), __entry->len,
> +                   __print_hex(__get_dynamic_array(data), __entry->len))
> +);
> +


Reply via email to