Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 58dc63c9 authored by David Howells's avatar David Howells
Browse files

rxrpc: Add a tracepoint to follow packets in the Rx buffer



Add a tracepoint to follow the life of packets that get added to a call's
receive buffer.

Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
parent f3639df2
Loading
Loading
Loading
Loading
+33 −0
Original line number Diff line number Diff line
@@ -290,6 +290,39 @@ TRACE_EVENT(rxrpc_tx_ack,
		      __entry->n_acks)
	    );

TRACE_EVENT(rxrpc_receive,
	    TP_PROTO(struct rxrpc_call *call, enum rxrpc_receive_trace why,
		     rxrpc_serial_t serial, rxrpc_seq_t seq),

	    TP_ARGS(call, why, serial, seq),

	    TP_STRUCT__entry(
		    __field(struct rxrpc_call *,	call		)
		    __field(enum rxrpc_receive_trace,	why		)
		    __field(rxrpc_serial_t,		serial		)
		    __field(rxrpc_seq_t,		seq		)
		    __field(rxrpc_seq_t,		hard_ack	)
		    __field(rxrpc_seq_t,		top		)
			     ),

	    TP_fast_assign(
		    __entry->call = call;
		    __entry->why = why;
		    __entry->serial = serial;
		    __entry->seq = seq;
		    __entry->hard_ack = call->rx_hard_ack;
		    __entry->top = call->rx_top;
			   ),

	    TP_printk("c=%p %s r=%08x q=%08x w=%08x-%08x",
		      __entry->call,
		      rxrpc_receive_traces[__entry->why],
		      __entry->serial,
		      __entry->seq,
		      __entry->hard_ack,
		      __entry->top)
	    );

#endif /* _TRACE_RXRPC_H */

/* This part must be outside protection */
+12 −0
Original line number Diff line number Diff line
@@ -605,6 +605,18 @@ enum rxrpc_transmit_trace {

extern const char rxrpc_transmit_traces[rxrpc_transmit__nr_trace][4];

enum rxrpc_receive_trace {
	rxrpc_receive_incoming,
	rxrpc_receive_queue,
	rxrpc_receive_queue_last,
	rxrpc_receive_front,
	rxrpc_receive_rotate,
	rxrpc_receive_end,
	rxrpc_receive__nr_trace
};

extern const char rxrpc_receive_traces[rxrpc_receive__nr_trace][4];

extern const char *const rxrpc_pkts[];
extern const char *rxrpc_acks(u8 reason);

+3 −0
Original line number Diff line number Diff line
@@ -367,6 +367,9 @@ struct rxrpc_call *rxrpc_new_incoming_call(struct rxrpc_local *local,
		goto out;
	}

	trace_rxrpc_receive(call, rxrpc_receive_incoming,
			    sp->hdr.serial, sp->hdr.seq);

	/* Make the call live. */
	rxrpc_incoming_call(rx, call, skb);
	conn = call->conn;
+5 −1
Original line number Diff line number Diff line
@@ -284,8 +284,12 @@ static void rxrpc_input_data(struct rxrpc_call *call, struct sk_buff *skb,
	call->rxtx_buffer[ix] = skb;
	if (after(seq, call->rx_top))
		smp_store_release(&call->rx_top, seq);
	if (flags & RXRPC_LAST_PACKET)
	if (flags & RXRPC_LAST_PACKET) {
		set_bit(RXRPC_CALL_RX_LAST, &call->flags);
		trace_rxrpc_receive(call, rxrpc_receive_queue_last, serial, seq);
	} else {
		trace_rxrpc_receive(call, rxrpc_receive_queue, serial, seq);
	}
	queued = true;

	if (after_eq(seq, call->rx_expect_next)) {
+9 −0
Original line number Diff line number Diff line
@@ -141,3 +141,12 @@ const char rxrpc_transmit_traces[rxrpc_transmit__nr_trace][4] = {
	[rxrpc_transmit_rotate]		= "ROT",
	[rxrpc_transmit_end]		= "END",
};

const char rxrpc_receive_traces[rxrpc_receive__nr_trace][4] = {
	[rxrpc_receive_incoming]	= "INC",
	[rxrpc_receive_queue]		= "QUE",
	[rxrpc_receive_queue_last]	= "QLS",
	[rxrpc_receive_front]		= "FRN",
	[rxrpc_receive_rotate]		= "ROT",
	[rxrpc_receive_end]		= "END",
};
Loading