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

Commit 987db9f7 authored by David Howells's avatar David Howells
Browse files

rxrpc: Use the tx-phase skb flag to simplify tracing



Use the previously-added transmit-phase skbuff private flag to simplify the
socket buffer tracing a bit.  Which phase the skbuff comes from can now be
divined from the skb rather than having to be guessed from the call state.

We can also reduce the number of rxrpc_skb_trace values by eliminating the
difference between Tx and Rx in the symbols.

Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
parent b311e684
Loading
Loading
Loading
Loading
+22 −29
Original line number Diff line number Diff line
@@ -23,20 +23,15 @@
#define __RXRPC_DECLARE_TRACE_ENUMS_ONCE_ONLY

enum rxrpc_skb_trace {
	rxrpc_skb_rx_cleaned,
	rxrpc_skb_rx_freed,
	rxrpc_skb_rx_got,
	rxrpc_skb_rx_lost,
	rxrpc_skb_rx_purged,
	rxrpc_skb_rx_received,
	rxrpc_skb_rx_rotated,
	rxrpc_skb_rx_seen,
	rxrpc_skb_tx_cleaned,
	rxrpc_skb_tx_freed,
	rxrpc_skb_tx_got,
	rxrpc_skb_tx_new,
	rxrpc_skb_tx_rotated,
	rxrpc_skb_tx_seen,
	rxrpc_skb_cleaned,
	rxrpc_skb_freed,
	rxrpc_skb_got,
	rxrpc_skb_lost,
	rxrpc_skb_new,
	rxrpc_skb_purged,
	rxrpc_skb_received,
	rxrpc_skb_rotated,
	rxrpc_skb_seen,
};

enum rxrpc_local_trace {
@@ -228,20 +223,15 @@ enum rxrpc_tx_point {
 * Declare tracing information enums and their string mappings for display.
 */
#define rxrpc_skb_traces \
	EM(rxrpc_skb_rx_cleaned,		"Rx CLN") \
	EM(rxrpc_skb_rx_freed,			"Rx FRE") \
	EM(rxrpc_skb_rx_got,			"Rx GOT") \
	EM(rxrpc_skb_rx_lost,			"Rx *L*") \
	EM(rxrpc_skb_rx_purged,			"Rx PUR") \
	EM(rxrpc_skb_rx_received,		"Rx RCV") \
	EM(rxrpc_skb_rx_rotated,		"Rx ROT") \
	EM(rxrpc_skb_rx_seen,			"Rx SEE") \
	EM(rxrpc_skb_tx_cleaned,		"Tx CLN") \
	EM(rxrpc_skb_tx_freed,			"Tx FRE") \
	EM(rxrpc_skb_tx_got,			"Tx GOT") \
	EM(rxrpc_skb_tx_new,			"Tx NEW") \
	EM(rxrpc_skb_tx_rotated,		"Tx ROT") \
	E_(rxrpc_skb_tx_seen,			"Tx SEE")
	EM(rxrpc_skb_cleaned,			"CLN") \
	EM(rxrpc_skb_freed,			"FRE") \
	EM(rxrpc_skb_got,			"GOT") \
	EM(rxrpc_skb_lost,			"*L*") \
	EM(rxrpc_skb_new,			"NEW") \
	EM(rxrpc_skb_purged,			"PUR") \
	EM(rxrpc_skb_received,			"RCV") \
	EM(rxrpc_skb_rotated,			"ROT") \
	E_(rxrpc_skb_seen,			"SEE")

#define rxrpc_local_traces \
	EM(rxrpc_local_got,			"GOT") \
@@ -650,6 +640,7 @@ TRACE_EVENT(rxrpc_skb,
	    TP_STRUCT__entry(
		    __field(struct sk_buff *,		skb		)
		    __field(enum rxrpc_skb_trace,	op		)
		    __field(u8,				flags		)
		    __field(int,			usage		)
		    __field(int,			mod_count	)
		    __field(const void *,		where		)
@@ -657,14 +648,16 @@ TRACE_EVENT(rxrpc_skb,

	    TP_fast_assign(
		    __entry->skb = skb;
		    __entry->flags = rxrpc_skb(skb)->rx_flags;
		    __entry->op = op;
		    __entry->usage = usage;
		    __entry->mod_count = mod_count;
		    __entry->where = where;
			   ),

	    TP_printk("s=%p %s u=%d m=%d p=%pSR",
	    TP_printk("s=%p %cx %s u=%d m=%d p=%pSR",
		      __entry->skb,
		      __entry->flags & RXRPC_SKB_TX_BUFFER ? 'T' : 'R',
		      __print_symbolic(__entry->op, rxrpc_skb_traces),
		      __entry->usage,
		      __entry->mod_count,
+1 −0
Original line number Diff line number Diff line
@@ -185,6 +185,7 @@ struct rxrpc_host_header {
 * - max 48 bytes (struct sk_buff::cb)
 */
struct rxrpc_skb_priv {
	atomic_t	nr_ring_pins;		/* Number of rxtx ring pins */
	u8		nr_subpackets;		/* Number of subpackets */
	u8		rx_flags;		/* Received packet flags */
#define RXRPC_SKB_INCL_LAST	0x01		/* - Includes last packet */
+4 −4
Original line number Diff line number Diff line
@@ -199,7 +199,7 @@ static void rxrpc_resend(struct rxrpc_call *call, unsigned long now_j)
			continue;

		skb = call->rxtx_buffer[ix];
		rxrpc_see_skb(skb, rxrpc_skb_tx_seen);
		rxrpc_see_skb(skb, rxrpc_skb_seen);

		if (anno_type == RXRPC_TX_ANNO_UNACK) {
			if (ktime_after(skb->tstamp, max_age)) {
@@ -255,18 +255,18 @@ static void rxrpc_resend(struct rxrpc_call *call, unsigned long now_j)
			continue;

		skb = call->rxtx_buffer[ix];
		rxrpc_get_skb(skb, rxrpc_skb_tx_got);
		rxrpc_get_skb(skb, rxrpc_skb_got);
		spin_unlock_bh(&call->lock);

		if (rxrpc_send_data_packet(call, skb, true) < 0) {
			rxrpc_free_skb(skb, rxrpc_skb_tx_freed);
			rxrpc_free_skb(skb, rxrpc_skb_freed);
			return;
		}

		if (rxrpc_is_client_call(call))
			rxrpc_expose_client_call(call);

		rxrpc_free_skb(skb, rxrpc_skb_tx_freed);
		rxrpc_free_skb(skb, rxrpc_skb_freed);
		spin_lock_bh(&call->lock);

		/* We need to clear the retransmit state, but there are two
+2 −4
Original line number Diff line number Diff line
@@ -429,9 +429,7 @@ static void rxrpc_cleanup_ring(struct rxrpc_call *call)
	int i;

	for (i = 0; i < RXRPC_RXTX_BUFF_SIZE; i++) {
		rxrpc_free_skb(call->rxtx_buffer[i],
			       (call->tx_phase ? rxrpc_skb_tx_cleaned :
				rxrpc_skb_rx_cleaned));
		rxrpc_free_skb(call->rxtx_buffer[i], rxrpc_skb_cleaned);
		call->rxtx_buffer[i] = NULL;
	}
}
@@ -587,7 +585,7 @@ void rxrpc_cleanup_call(struct rxrpc_call *call)
	ASSERTCMP(call->conn, ==, NULL);

	rxrpc_cleanup_ring(call);
	rxrpc_free_skb(call->tx_pending, rxrpc_skb_tx_cleaned);
	rxrpc_free_skb(call->tx_pending, rxrpc_skb_cleaned);

	call_rcu(&call->rcu, rxrpc_rcu_destroy_call);
}
+3 −3
Original line number Diff line number Diff line
@@ -472,7 +472,7 @@ void rxrpc_process_connection(struct work_struct *work)
	/* go through the conn-level event packets, releasing the ref on this
	 * connection that each one has when we've finished with it */
	while ((skb = skb_dequeue(&conn->rx_queue))) {
		rxrpc_see_skb(skb, rxrpc_skb_rx_seen);
		rxrpc_see_skb(skb, rxrpc_skb_seen);
		ret = rxrpc_process_event(conn, skb, &abort_code);
		switch (ret) {
		case -EPROTO:
@@ -484,7 +484,7 @@ void rxrpc_process_connection(struct work_struct *work)
			goto requeue_and_leave;
		case -ECONNABORTED:
		default:
			rxrpc_free_skb(skb, rxrpc_skb_rx_freed);
			rxrpc_free_skb(skb, rxrpc_skb_freed);
			break;
		}
	}
@@ -501,6 +501,6 @@ void rxrpc_process_connection(struct work_struct *work)
protocol_error:
	if (rxrpc_abort_connection(conn, ret, abort_code) < 0)
		goto requeue_and_leave;
	rxrpc_free_skb(skb, rxrpc_skb_rx_freed);
	rxrpc_free_skb(skb, rxrpc_skb_freed);
	goto out;
}
Loading