Commit 47c810a7 authored by David Howells's avatar David Howells
Browse files

rxrpc: trace: Don't use __builtin_return_address for rxrpc_peer tracing



In rxrpc tracing, use enums to generate lists of points of interest rather
than __builtin_return_address() for the rxrpc_peer tracepoint

Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
cc: Marc Dionne <marc.dionne@auristor.com>
cc: linux-afs@lists.infradead.org
parent 0fde882f
Loading
Loading
Loading
Loading
+26 −17
Original line number Diff line number Diff line
@@ -63,10 +63,23 @@
	E_(rxrpc_local_use_work,		"USE work    ")

#define rxrpc_peer_traces \
	EM(rxrpc_peer_got,			"GOT") \
	EM(rxrpc_peer_new,			"NEW") \
	EM(rxrpc_peer_processing,		"PRO") \
	E_(rxrpc_peer_put,			"PUT")
	EM(rxrpc_peer_free,			"FREE        ") \
	EM(rxrpc_peer_get_accept,		"GET accept  ") \
	EM(rxrpc_peer_get_activate_call,	"GET act-call") \
	EM(rxrpc_peer_get_bundle,		"GET bundle  ") \
	EM(rxrpc_peer_get_client_conn,		"GET cln-conn") \
	EM(rxrpc_peer_get_input_error,		"GET inpt-err") \
	EM(rxrpc_peer_get_keepalive,		"GET keepaliv") \
	EM(rxrpc_peer_get_lookup_client,	"GET look-cln") \
	EM(rxrpc_peer_get_service_conn,		"GET srv-conn") \
	EM(rxrpc_peer_new_client,		"NEW client  ") \
	EM(rxrpc_peer_new_prealloc,		"NEW prealloc") \
	EM(rxrpc_peer_put_bundle,		"PUT bundle  ") \
	EM(rxrpc_peer_put_call,			"PUT call    ") \
	EM(rxrpc_peer_put_conn,			"PUT conn    ") \
	EM(rxrpc_peer_put_discard_tmp,		"PUT disc-tmp") \
	EM(rxrpc_peer_put_input_error,		"PUT inpt-err") \
	E_(rxrpc_peer_put_keepalive,		"PUT keepaliv")

#define rxrpc_conn_traces \
	EM(rxrpc_conn_got,			"GOT") \
@@ -394,30 +407,26 @@ TRACE_EVENT(rxrpc_local,
	    );

TRACE_EVENT(rxrpc_peer,
	    TP_PROTO(unsigned int peer_debug_id, enum rxrpc_peer_trace op,
		     int usage, const void *where),
	    TP_PROTO(unsigned int peer_debug_id, int ref, enum rxrpc_peer_trace why),

	    TP_ARGS(peer_debug_id, op, usage, where),
	    TP_ARGS(peer_debug_id, ref, why),

	    TP_STRUCT__entry(
		    __field(unsigned int,	peer		)
		    __field(int,		op		)
		    __field(int,		usage		)
		    __field(const void *,	where		)
		    __field(int,		ref		)
		    __field(int,		why		)
			     ),

	    TP_fast_assign(
		    __entry->peer = peer_debug_id;
		    __entry->op = op;
		    __entry->usage = usage;
		    __entry->where = where;
		    __entry->ref = ref;
		    __entry->why = why;
			   ),

	    TP_printk("P=%08x %s u=%d sp=%pSR",
	    TP_printk("P=%08x %s r=%d",
		      __entry->peer,
		      __print_symbolic(__entry->op, rxrpc_peer_traces),
		      __entry->usage,
		      __entry->where)
		      __print_symbolic(__entry->why, rxrpc_peer_traces),
		      __entry->ref)
	    );

TRACE_EVENT(rxrpc_conn,
+1 −1
Original line number Diff line number Diff line
@@ -328,7 +328,7 @@ struct rxrpc_call *rxrpc_kernel_begin_call(struct socket *sock,
		mutex_unlock(&call->user_mutex);
	}

	rxrpc_put_peer(cp.peer);
	rxrpc_put_peer(cp.peer, rxrpc_peer_put_discard_tmp);
	_leave(" = %p", call);
	return call;
}
+6 −5
Original line number Diff line number Diff line
@@ -1063,14 +1063,15 @@ struct rxrpc_peer *rxrpc_lookup_peer_rcu(struct rxrpc_local *,
					 const struct sockaddr_rxrpc *);
struct rxrpc_peer *rxrpc_lookup_peer(struct rxrpc_sock *, struct rxrpc_local *,
				     struct sockaddr_rxrpc *, gfp_t);
struct rxrpc_peer *rxrpc_alloc_peer(struct rxrpc_local *, gfp_t);
struct rxrpc_peer *rxrpc_alloc_peer(struct rxrpc_local *, gfp_t,
				    enum rxrpc_peer_trace);
void rxrpc_new_incoming_peer(struct rxrpc_sock *, struct rxrpc_local *,
			     struct rxrpc_peer *);
void rxrpc_destroy_all_peers(struct rxrpc_net *);
struct rxrpc_peer *rxrpc_get_peer(struct rxrpc_peer *);
struct rxrpc_peer *rxrpc_get_peer_maybe(struct rxrpc_peer *);
void rxrpc_put_peer(struct rxrpc_peer *);
void rxrpc_put_peer_locked(struct rxrpc_peer *);
struct rxrpc_peer *rxrpc_get_peer(struct rxrpc_peer *, enum rxrpc_peer_trace);
struct rxrpc_peer *rxrpc_get_peer_maybe(struct rxrpc_peer *, enum rxrpc_peer_trace);
void rxrpc_put_peer(struct rxrpc_peer *, enum rxrpc_peer_trace);
void rxrpc_put_peer_locked(struct rxrpc_peer *, enum rxrpc_peer_trace);

/*
 * proc.c
+5 −3
Original line number Diff line number Diff line
@@ -70,7 +70,9 @@ static int rxrpc_service_prealloc_one(struct rxrpc_sock *rx,
	head = b->peer_backlog_head;
	tail = READ_ONCE(b->peer_backlog_tail);
	if (CIRC_CNT(head, tail, size) < max) {
		struct rxrpc_peer *peer = rxrpc_alloc_peer(rx->local, gfp);
		struct rxrpc_peer *peer;

		peer = rxrpc_alloc_peer(rx->local, gfp, rxrpc_peer_new_prealloc);
		if (!peer)
			return -ENOMEM;
		b->peer_backlog[head] = peer;
@@ -286,7 +288,7 @@ static struct rxrpc_call *rxrpc_alloc_incoming_call(struct rxrpc_sock *rx,
		return NULL;

	if (!conn) {
		if (peer && !rxrpc_get_peer_maybe(peer))
		if (peer && !rxrpc_get_peer_maybe(peer, rxrpc_peer_get_service_conn))
			peer = NULL;
		if (!peer) {
			peer = b->peer_backlog[peer_tail];
@@ -323,7 +325,7 @@ static struct rxrpc_call *rxrpc_alloc_incoming_call(struct rxrpc_sock *rx,
	call->conn = conn;
	call->security = conn->security;
	call->security_ix = conn->security_ix;
	call->peer = rxrpc_get_peer(conn->peer);
	call->peer = rxrpc_get_peer(conn->peer, rxrpc_peer_get_accept);
	call->cong_ssthresh = call->peer->cong_ssthresh;
	call->tx_last_sent = ktime_get_real();
	return call;
+1 −1
Original line number Diff line number Diff line
@@ -636,7 +636,7 @@ static void rxrpc_destroy_call(struct work_struct *work)
	rxrpc_delete_call_timer(call);

	rxrpc_put_connection(call->conn);
	rxrpc_put_peer(call->peer);
	rxrpc_put_peer(call->peer, rxrpc_peer_put_call);
	kmem_cache_free(rxrpc_call_jar, call);
	if (atomic_dec_and_test(&rxnet->nr_calls))
		wake_up_var(&rxnet->nr_calls);
Loading