On Mon, 18 May 2026 22:30:51 +0530
Praveen Talari <[email protected]> wrote:

> @@ -0,0 +1,103 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +#undef TRACE_SYSTEM
> +#define TRACE_SYSTEM qcom_geni_spi
> +
> +#if !defined(_TRACE_QCOM_GENI_SPI_H) || defined(TRACE_HEADER_MULTI_READ)
> +#define _TRACE_QCOM_GENI_SPI_H
> +
> +#include <linux/tracepoint.h>
> +
> +TRACE_EVENT(geni_spi_setup_params,
> +         TP_PROTO(struct device *dev, u8 cs, u32 mode,
> +                  u32 mode_changed, bool cs_changed),
> +         TP_ARGS(dev, cs, mode, mode_changed, cs_changed),
> +
> +         TP_STRUCT__entry(__string(name, dev_name(dev))
> +                          __field(u8, cs)

A u8 followed by a u32 will create a 3 byte hole in the structure
layout that gets recorded onto the ring buffer. Best to move that field
to after the bool cs_changed, for better compaction.

> +                          __field(u32, mode)
> +                          __field(u32, mode_changed)
> +                          __field(bool, cs_changed)
> +         ),
> +
> +         TP_fast_assign(__assign_str(name);
> +                        __entry->cs = cs;
> +                        __entry->mode = mode;
> +                        __entry->mode_changed = mode_changed;
> +                        __entry->cs_changed = cs_changed;
> +         ),
> +
> +         TP_printk("%s: cs=%u mode=0x%08x mode_changed=0x%08x cs_changed=%d",
> +                   __get_str(name), __entry->cs, __entry->mode,
> +                   __entry->mode_changed, __entry->cs_changed)
> +);
> +
> +TRACE_EVENT(geni_spi_clk_cfg,
> +         TP_PROTO(struct device *dev, unsigned long req_hz,
> +                  unsigned long sclk_hz, unsigned int clk_idx,
> +                  unsigned int clk_div, unsigned int bpw),
> +         TP_ARGS(dev, req_hz, sclk_hz, clk_idx, clk_div, bpw),
> +
> +         TP_STRUCT__entry(__string(name, dev_name(dev))

__string items inject a 4 byte meta data so they are basically the same
as a u32 item on the structure. Move this to the end or after the long
words so that on 64 bit architectures you don't create a 4 byte hole
here.

-- Steve

> +                          __field(unsigned long, req_hz)
> +                          __field(unsigned long, sclk_hz)
> +                          __field(unsigned int, clk_idx)
> +                          __field(unsigned int, clk_div)
> +                          __field(unsigned int, bpw)
> +         ),
> +
> +         TP_fast_assign(__assign_str(name);
> +                        __entry->req_hz = req_hz;
> +                        __entry->sclk_hz = sclk_hz;
> +                        __entry->clk_idx = clk_idx;
> +                        __entry->clk_div = clk_div;
> +                        __entry->bpw = bpw;
> +         ),
> +
> +         TP_printk("%s: req_hz=%lu sclk_hz=%lu clk_idx=%u clk_div=%u bpw=%u",
> +                   __get_str(name), __entry->req_hz, __entry->sclk_hz,
> +                   __entry->clk_idx, __entry->clk_div, __entry->bpw)
> +);

Reply via email to