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

Commit f3639df2 authored by David Howells's avatar David Howells
Browse files

rxrpc: Add a tracepoint to log ACK transmission



Add a tracepoint to log information about ACK transmission.

Signed-off-by: default avatarDavid Howels <dhowells@redhat.com>
parent ec71eb9a
Loading
Loading
Loading
Loading
+30 −0
Original line number Diff line number Diff line
@@ -260,6 +260,36 @@ TRACE_EVENT(rxrpc_rx_ack,
		      __entry->n_acks)
	    );

TRACE_EVENT(rxrpc_tx_ack,
	    TP_PROTO(struct rxrpc_call *call, rxrpc_seq_t first,
		     rxrpc_serial_t serial, u8 reason, u8 n_acks),

	    TP_ARGS(call, first, serial, reason, n_acks),

	    TP_STRUCT__entry(
		    __field(struct rxrpc_call *,	call		)
		    __field(rxrpc_seq_t,		first		)
		    __field(rxrpc_serial_t,		serial		)
		    __field(u8,				reason		)
		    __field(u8,				n_acks		)
			     ),

	    TP_fast_assign(
		    __entry->call = call;
		    __entry->first = first;
		    __entry->serial = serial;
		    __entry->reason = reason;
		    __entry->n_acks = n_acks;
			   ),

	    TP_printk("c=%p %s f=%08x r=%08x n=%u",
		      __entry->call,
		      rxrpc_acks(__entry->reason),
		      __entry->first,
		      __entry->serial,
		      __entry->n_acks)
	    );

#endif /* _TRACE_RXRPC_H */

/* This part must be outside protection */
+3 −0
Original line number Diff line number Diff line
@@ -98,6 +98,9 @@ static void rxrpc_conn_retransmit_call(struct rxrpc_connection *conn,
		pkt.info.rwind		= htonl(rxrpc_rx_window_size);
		pkt.info.jumbo_max	= htonl(rxrpc_rx_jumbo_max);
		len += sizeof(pkt.ack) + sizeof(pkt.info);

		trace_rxrpc_tx_ack(NULL, chan->last_seq, 0,
				   RXRPC_ACK_DUPLICATE, 0);
		break;
	}

+6 −1
Original line number Diff line number Diff line
@@ -38,12 +38,14 @@ struct rxrpc_pkt_buffer {
static size_t rxrpc_fill_out_ack(struct rxrpc_call *call,
				 struct rxrpc_pkt_buffer *pkt)
{
	rxrpc_serial_t serial;
	rxrpc_seq_t hard_ack, top, seq;
	int ix;
	u32 mtu, jmax;
	u8 *ackp = pkt->acks;

	/* Barrier against rxrpc_input_data(). */
	serial = call->ackr_serial;
	hard_ack = READ_ONCE(call->rx_hard_ack);
	top = smp_load_acquire(&call->rx_top);

@@ -51,7 +53,7 @@ static size_t rxrpc_fill_out_ack(struct rxrpc_call *call,
	pkt->ack.maxSkew	= htons(call->ackr_skew);
	pkt->ack.firstPacket	= htonl(hard_ack + 1);
	pkt->ack.previousPacket	= htonl(call->ackr_prev_seq);
	pkt->ack.serial		= htonl(call->ackr_serial);
	pkt->ack.serial		= htonl(serial);
	pkt->ack.reason		= call->ackr_reason;
	pkt->ack.nAcks		= top - hard_ack;

@@ -75,6 +77,9 @@ static size_t rxrpc_fill_out_ack(struct rxrpc_call *call,
	pkt->ackinfo.rwind	= htonl(call->rx_winsize);
	pkt->ackinfo.jumbo_max	= htonl(jmax);

	trace_rxrpc_tx_ack(call, hard_ack + 1, serial, call->ackr_reason,
			   top - hard_ack);

	*ackp++ = 0;
	*ackp++ = 0;
	*ackp++ = 0;