Thread (27 messages) 27 messages, 3 authors, 2017-06-08

[PATCH v8 16/24] drivers/fsi: Add tracepoints for low-level operations

From: jk@ozlabs.org (Jeremy Kerr)
Date: 2017-06-08 02:06:20
Also in: linux-devicetree, lkml

Hi Steven,

Thanks for checking this out.
quoted
+TRACE_EVENT(fsi_master_write,
+	TP_PROTO(const struct fsi_master *master, int link, int id,
+			uint32_t addr, size_t size, const void *data),
+	TP_ARGS(master, link, id, addr, size, data),
+	TP_STRUCT__entry(
+		__field(int,	master_idx)
+		__field(int,	link)
+		__field(int,	id)
+		__field(__u32,	addr)
+		__field(size_t,	size)
+		__field(__u32,	data)
+	),
+	TP_fast_assign(
+		__entry->master_idx = master->idx;
+		__entry->link = link;
+		__entry->id = id;
+		__entry->addr = addr;
+		__entry->size = size;
+		__entry->data = 0;
+		memcpy(&__entry->data, data, size);

Um, can size ever be greater than 4? If so, this is a bug.
No, size will only ever be 1, 2, or 4, as they're the only valid FSI bus
transactions. Hence storing ->data as a u32 to keep things simple.
I think you may want to use a dynamic array here.

	TP_STRUCT__entry(
		[..]
		__dynamic_array(char, data, size)
	[..]

	TP_fast_assign(
		[..]
		memcpy(__get_dynamic_array(data), data, size);
	[..]

	TP_printk(...
		[..]
		__entry->size,
		__get_dynamic_array(data)

You may also want to look at __print_array() too.
The %ph specifier seems to do a decent job though...

Cheers,


Jeremy
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help