1df844fd4SDavid Howells /* AF_RXRPC tracepoints 2df844fd4SDavid Howells * 3df844fd4SDavid Howells * Copyright (C) 2016 Red Hat, Inc. All Rights Reserved. 4df844fd4SDavid Howells * Written by David Howells (dhowells@redhat.com) 5df844fd4SDavid Howells * 6df844fd4SDavid Howells * This program is free software; you can redistribute it and/or 7df844fd4SDavid Howells * modify it under the terms of the GNU General Public Licence 8df844fd4SDavid Howells * as published by the Free Software Foundation; either version 9df844fd4SDavid Howells * 2 of the Licence, or (at your option) any later version. 10df844fd4SDavid Howells */ 11df844fd4SDavid Howells #undef TRACE_SYSTEM 12df844fd4SDavid Howells #define TRACE_SYSTEM rxrpc 13df844fd4SDavid Howells 14df844fd4SDavid Howells #if !defined(_TRACE_RXRPC_H) || defined(TRACE_HEADER_MULTI_READ) 15df844fd4SDavid Howells #define _TRACE_RXRPC_H 16df844fd4SDavid Howells 17df844fd4SDavid Howells #include <linux/tracepoint.h> 18df844fd4SDavid Howells 19363deeabSDavid Howells TRACE_EVENT(rxrpc_conn, 20363deeabSDavid Howells TP_PROTO(struct rxrpc_connection *conn, enum rxrpc_conn_trace op, 21363deeabSDavid Howells int usage, const void *where), 22363deeabSDavid Howells 23363deeabSDavid Howells TP_ARGS(conn, op, usage, where), 24363deeabSDavid Howells 25363deeabSDavid Howells TP_STRUCT__entry( 26363deeabSDavid Howells __field(struct rxrpc_connection *, conn ) 27363deeabSDavid Howells __field(int, op ) 28363deeabSDavid Howells __field(int, usage ) 29363deeabSDavid Howells __field(const void *, where ) 30363deeabSDavid Howells ), 31363deeabSDavid Howells 32363deeabSDavid Howells TP_fast_assign( 33363deeabSDavid Howells __entry->conn = conn; 34363deeabSDavid Howells __entry->op = op; 35363deeabSDavid Howells __entry->usage = usage; 36363deeabSDavid Howells __entry->where = where; 37363deeabSDavid Howells ), 38363deeabSDavid Howells 39363deeabSDavid Howells TP_printk("C=%p %s u=%d sp=%pSR", 40363deeabSDavid Howells __entry->conn, 41363deeabSDavid Howells rxrpc_conn_traces[__entry->op], 42363deeabSDavid Howells __entry->usage, 43363deeabSDavid Howells __entry->where) 44363deeabSDavid Howells ); 45363deeabSDavid Howells 46363deeabSDavid Howells TRACE_EVENT(rxrpc_client, 47363deeabSDavid Howells TP_PROTO(struct rxrpc_connection *conn, int channel, 48363deeabSDavid Howells enum rxrpc_client_trace op), 49363deeabSDavid Howells 50363deeabSDavid Howells TP_ARGS(conn, channel, op), 51363deeabSDavid Howells 52363deeabSDavid Howells TP_STRUCT__entry( 53363deeabSDavid Howells __field(struct rxrpc_connection *, conn ) 54363deeabSDavid Howells __field(u32, cid ) 55363deeabSDavid Howells __field(int, channel ) 56363deeabSDavid Howells __field(int, usage ) 57363deeabSDavid Howells __field(enum rxrpc_client_trace, op ) 58363deeabSDavid Howells __field(enum rxrpc_conn_cache_state, cs ) 59363deeabSDavid Howells ), 60363deeabSDavid Howells 61363deeabSDavid Howells TP_fast_assign( 62363deeabSDavid Howells __entry->conn = conn; 63363deeabSDavid Howells __entry->channel = channel; 64363deeabSDavid Howells __entry->usage = atomic_read(&conn->usage); 65363deeabSDavid Howells __entry->op = op; 66363deeabSDavid Howells __entry->cid = conn->proto.cid; 67363deeabSDavid Howells __entry->cs = conn->cache_state; 68363deeabSDavid Howells ), 69363deeabSDavid Howells 70363deeabSDavid Howells TP_printk("C=%p h=%2d %s %s i=%08x u=%d", 71363deeabSDavid Howells __entry->conn, 72363deeabSDavid Howells __entry->channel, 73363deeabSDavid Howells rxrpc_client_traces[__entry->op], 74363deeabSDavid Howells rxrpc_conn_cache_states[__entry->cs], 75363deeabSDavid Howells __entry->cid, 76363deeabSDavid Howells __entry->usage) 77363deeabSDavid Howells ); 78363deeabSDavid Howells 79e34d4234SDavid Howells TRACE_EVENT(rxrpc_call, 80fff72429SDavid Howells TP_PROTO(struct rxrpc_call *call, enum rxrpc_call_trace op, 812ab27215SDavid Howells int usage, const void *where, const void *aux), 82e34d4234SDavid Howells 832ab27215SDavid Howells TP_ARGS(call, op, usage, where, aux), 84e34d4234SDavid Howells 85e34d4234SDavid Howells TP_STRUCT__entry( 86e34d4234SDavid Howells __field(struct rxrpc_call *, call ) 87e34d4234SDavid Howells __field(int, op ) 88e34d4234SDavid Howells __field(int, usage ) 89e34d4234SDavid Howells __field(const void *, where ) 90e34d4234SDavid Howells __field(const void *, aux ) 91e34d4234SDavid Howells ), 92e34d4234SDavid Howells 93e34d4234SDavid Howells TP_fast_assign( 94e34d4234SDavid Howells __entry->call = call; 95e34d4234SDavid Howells __entry->op = op; 96e34d4234SDavid Howells __entry->usage = usage; 97e34d4234SDavid Howells __entry->where = where; 98e34d4234SDavid Howells __entry->aux = aux; 99e34d4234SDavid Howells ), 100e34d4234SDavid Howells 1012ab27215SDavid Howells TP_printk("c=%p %s u=%d sp=%pSR a=%p", 102e34d4234SDavid Howells __entry->call, 103fff72429SDavid Howells rxrpc_call_traces[__entry->op], 104e34d4234SDavid Howells __entry->usage, 105e34d4234SDavid Howells __entry->where, 106e34d4234SDavid Howells __entry->aux) 107e34d4234SDavid Howells ); 108e34d4234SDavid Howells 109df844fd4SDavid Howells TRACE_EVENT(rxrpc_skb, 11071f3ca40SDavid Howells TP_PROTO(struct sk_buff *skb, enum rxrpc_skb_trace op, 11171f3ca40SDavid Howells int usage, int mod_count, const void *where), 112df844fd4SDavid Howells 113df844fd4SDavid Howells TP_ARGS(skb, op, usage, mod_count, where), 114df844fd4SDavid Howells 115df844fd4SDavid Howells TP_STRUCT__entry( 116df844fd4SDavid Howells __field(struct sk_buff *, skb ) 11771f3ca40SDavid Howells __field(enum rxrpc_skb_trace, op ) 118df844fd4SDavid Howells __field(int, usage ) 119df844fd4SDavid Howells __field(int, mod_count ) 120df844fd4SDavid Howells __field(const void *, where ) 121df844fd4SDavid Howells ), 122df844fd4SDavid Howells 123df844fd4SDavid Howells TP_fast_assign( 124df844fd4SDavid Howells __entry->skb = skb; 125df844fd4SDavid Howells __entry->op = op; 126df844fd4SDavid Howells __entry->usage = usage; 127df844fd4SDavid Howells __entry->mod_count = mod_count; 128df844fd4SDavid Howells __entry->where = where; 129df844fd4SDavid Howells ), 130df844fd4SDavid Howells 131df844fd4SDavid Howells TP_printk("s=%p %s u=%d m=%d p=%pSR", 132df844fd4SDavid Howells __entry->skb, 13371f3ca40SDavid Howells rxrpc_skb_traces[__entry->op], 134df844fd4SDavid Howells __entry->usage, 135df844fd4SDavid Howells __entry->mod_count, 136df844fd4SDavid Howells __entry->where) 137df844fd4SDavid Howells ); 138df844fd4SDavid Howells 13949e19ec7SDavid Howells TRACE_EVENT(rxrpc_rx_packet, 14049e19ec7SDavid Howells TP_PROTO(struct rxrpc_skb_priv *sp), 14149e19ec7SDavid Howells 14249e19ec7SDavid Howells TP_ARGS(sp), 14349e19ec7SDavid Howells 14449e19ec7SDavid Howells TP_STRUCT__entry( 14549e19ec7SDavid Howells __field_struct(struct rxrpc_host_header, hdr ) 14649e19ec7SDavid Howells ), 14749e19ec7SDavid Howells 14849e19ec7SDavid Howells TP_fast_assign( 14949e19ec7SDavid Howells memcpy(&__entry->hdr, &sp->hdr, sizeof(__entry->hdr)); 15049e19ec7SDavid Howells ), 15149e19ec7SDavid Howells 152a3868bfcSDavid Howells TP_printk("%08x:%08x:%08x:%04x %08x %08x %02x %02x %s", 15349e19ec7SDavid Howells __entry->hdr.epoch, __entry->hdr.cid, 15449e19ec7SDavid Howells __entry->hdr.callNumber, __entry->hdr.serviceId, 15549e19ec7SDavid Howells __entry->hdr.serial, __entry->hdr.seq, 156a3868bfcSDavid Howells __entry->hdr.type, __entry->hdr.flags, 157a3868bfcSDavid Howells __entry->hdr.type <= 15 ? rxrpc_pkts[__entry->hdr.type] : "?UNK") 15849e19ec7SDavid Howells ); 15949e19ec7SDavid Howells 16049e19ec7SDavid Howells TRACE_EVENT(rxrpc_rx_done, 16149e19ec7SDavid Howells TP_PROTO(int result, int abort_code), 16249e19ec7SDavid Howells 16349e19ec7SDavid Howells TP_ARGS(result, abort_code), 16449e19ec7SDavid Howells 16549e19ec7SDavid Howells TP_STRUCT__entry( 16649e19ec7SDavid Howells __field(int, result ) 16749e19ec7SDavid Howells __field(int, abort_code ) 16849e19ec7SDavid Howells ), 16949e19ec7SDavid Howells 17049e19ec7SDavid Howells TP_fast_assign( 17149e19ec7SDavid Howells __entry->result = result; 17249e19ec7SDavid Howells __entry->abort_code = abort_code; 17349e19ec7SDavid Howells ), 17449e19ec7SDavid Howells 17549e19ec7SDavid Howells TP_printk("r=%d a=%d", __entry->result, __entry->abort_code) 17649e19ec7SDavid Howells ); 17749e19ec7SDavid Howells 1785a42976dSDavid Howells TRACE_EVENT(rxrpc_abort, 1795a42976dSDavid Howells TP_PROTO(const char *why, u32 cid, u32 call_id, rxrpc_seq_t seq, 1805a42976dSDavid Howells int abort_code, int error), 1815a42976dSDavid Howells 1825a42976dSDavid Howells TP_ARGS(why, cid, call_id, seq, abort_code, error), 1835a42976dSDavid Howells 1845a42976dSDavid Howells TP_STRUCT__entry( 1855a42976dSDavid Howells __array(char, why, 4 ) 1865a42976dSDavid Howells __field(u32, cid ) 1875a42976dSDavid Howells __field(u32, call_id ) 1885a42976dSDavid Howells __field(rxrpc_seq_t, seq ) 1895a42976dSDavid Howells __field(int, abort_code ) 1905a42976dSDavid Howells __field(int, error ) 1915a42976dSDavid Howells ), 1925a42976dSDavid Howells 1935a42976dSDavid Howells TP_fast_assign( 1945a42976dSDavid Howells memcpy(__entry->why, why, 4); 1955a42976dSDavid Howells __entry->cid = cid; 1965a42976dSDavid Howells __entry->call_id = call_id; 1975a42976dSDavid Howells __entry->abort_code = abort_code; 1985a42976dSDavid Howells __entry->error = error; 1995a42976dSDavid Howells __entry->seq = seq; 2005a42976dSDavid Howells ), 2015a42976dSDavid Howells 2025a42976dSDavid Howells TP_printk("%08x:%08x s=%u a=%d e=%d %s", 2035a42976dSDavid Howells __entry->cid, __entry->call_id, __entry->seq, 2045a42976dSDavid Howells __entry->abort_code, __entry->error, __entry->why) 2055a42976dSDavid Howells ); 2065a42976dSDavid Howells 207a124fe3eSDavid Howells TRACE_EVENT(rxrpc_transmit, 208a124fe3eSDavid Howells TP_PROTO(struct rxrpc_call *call, enum rxrpc_transmit_trace why), 209a124fe3eSDavid Howells 210a124fe3eSDavid Howells TP_ARGS(call, why), 211a124fe3eSDavid Howells 212a124fe3eSDavid Howells TP_STRUCT__entry( 213a124fe3eSDavid Howells __field(struct rxrpc_call *, call ) 214a124fe3eSDavid Howells __field(enum rxrpc_transmit_trace, why ) 215a124fe3eSDavid Howells __field(rxrpc_seq_t, tx_hard_ack ) 216a124fe3eSDavid Howells __field(rxrpc_seq_t, tx_top ) 217a124fe3eSDavid Howells ), 218a124fe3eSDavid Howells 219a124fe3eSDavid Howells TP_fast_assign( 220a124fe3eSDavid Howells __entry->call = call; 221a124fe3eSDavid Howells __entry->why = why; 222a124fe3eSDavid Howells __entry->tx_hard_ack = call->tx_hard_ack; 223a124fe3eSDavid Howells __entry->tx_top = call->tx_top; 224a124fe3eSDavid Howells ), 225a124fe3eSDavid Howells 226a124fe3eSDavid Howells TP_printk("c=%p %s f=%08x n=%u", 227a124fe3eSDavid Howells __entry->call, 228a124fe3eSDavid Howells rxrpc_transmit_traces[__entry->why], 229a124fe3eSDavid Howells __entry->tx_hard_ack + 1, 230a124fe3eSDavid Howells __entry->tx_top - __entry->tx_hard_ack) 231a124fe3eSDavid Howells ); 232a124fe3eSDavid Howells 233ec71eb9aSDavid Howells TRACE_EVENT(rxrpc_rx_ack, 234ec71eb9aSDavid Howells TP_PROTO(struct rxrpc_call *call, rxrpc_seq_t first, u8 reason, u8 n_acks), 235ec71eb9aSDavid Howells 236ec71eb9aSDavid Howells TP_ARGS(call, first, reason, n_acks), 237ec71eb9aSDavid Howells 238ec71eb9aSDavid Howells TP_STRUCT__entry( 239ec71eb9aSDavid Howells __field(struct rxrpc_call *, call ) 240ec71eb9aSDavid Howells __field(rxrpc_seq_t, first ) 241ec71eb9aSDavid Howells __field(u8, reason ) 242ec71eb9aSDavid Howells __field(u8, n_acks ) 243ec71eb9aSDavid Howells ), 244ec71eb9aSDavid Howells 245ec71eb9aSDavid Howells TP_fast_assign( 246ec71eb9aSDavid Howells __entry->call = call; 247ec71eb9aSDavid Howells __entry->first = first; 248ec71eb9aSDavid Howells __entry->reason = reason; 249ec71eb9aSDavid Howells __entry->n_acks = n_acks; 250ec71eb9aSDavid Howells ), 251ec71eb9aSDavid Howells 252ec71eb9aSDavid Howells TP_printk("c=%p %s f=%08x n=%u", 253ec71eb9aSDavid Howells __entry->call, 2549c7ad434SDavid Howells rxrpc_ack_names[__entry->reason], 255ec71eb9aSDavid Howells __entry->first, 256ec71eb9aSDavid Howells __entry->n_acks) 257ec71eb9aSDavid Howells ); 258ec71eb9aSDavid Howells 259be832aecSDavid Howells TRACE_EVENT(rxrpc_tx_data, 260be832aecSDavid Howells TP_PROTO(struct rxrpc_call *call, rxrpc_seq_t seq, 261*a1767077SDavid Howells rxrpc_serial_t serial, u8 flags, bool retrans, bool lose), 262f3639df2SDavid Howells 263*a1767077SDavid Howells TP_ARGS(call, seq, serial, flags, retrans, lose), 264f3639df2SDavid Howells 265f3639df2SDavid Howells TP_STRUCT__entry( 266f3639df2SDavid Howells __field(struct rxrpc_call *, call ) 267be832aecSDavid Howells __field(rxrpc_seq_t, seq ) 268f3639df2SDavid Howells __field(rxrpc_serial_t, serial ) 269be832aecSDavid Howells __field(u8, flags ) 270*a1767077SDavid Howells __field(bool, retrans ) 271be832aecSDavid Howells __field(bool, lose ) 272be832aecSDavid Howells ), 273be832aecSDavid Howells 274be832aecSDavid Howells TP_fast_assign( 275be832aecSDavid Howells __entry->call = call; 276be832aecSDavid Howells __entry->seq = seq; 277be832aecSDavid Howells __entry->serial = serial; 278be832aecSDavid Howells __entry->flags = flags; 279*a1767077SDavid Howells __entry->retrans = retrans; 280be832aecSDavid Howells __entry->lose = lose; 281be832aecSDavid Howells ), 282be832aecSDavid Howells 283be832aecSDavid Howells TP_printk("c=%p DATA %08x q=%08x fl=%02x%s", 284be832aecSDavid Howells __entry->call, 285be832aecSDavid Howells __entry->serial, 286be832aecSDavid Howells __entry->seq, 287be832aecSDavid Howells __entry->flags, 288be832aecSDavid Howells __entry->lose ? " *LOSE*" : "") 289be832aecSDavid Howells ); 290be832aecSDavid Howells 291be832aecSDavid Howells TRACE_EVENT(rxrpc_tx_ack, 292be832aecSDavid Howells TP_PROTO(struct rxrpc_call *call, rxrpc_serial_t serial, 293be832aecSDavid Howells rxrpc_seq_t ack_first, rxrpc_serial_t ack_serial, 294be832aecSDavid Howells u8 reason, u8 n_acks), 295be832aecSDavid Howells 296be832aecSDavid Howells TP_ARGS(call, serial, ack_first, ack_serial, reason, n_acks), 297be832aecSDavid Howells 298be832aecSDavid Howells TP_STRUCT__entry( 299be832aecSDavid Howells __field(struct rxrpc_call *, call ) 300be832aecSDavid Howells __field(rxrpc_serial_t, serial ) 301be832aecSDavid Howells __field(rxrpc_seq_t, ack_first ) 302be832aecSDavid Howells __field(rxrpc_serial_t, ack_serial ) 303f3639df2SDavid Howells __field(u8, reason ) 304f3639df2SDavid Howells __field(u8, n_acks ) 305f3639df2SDavid Howells ), 306f3639df2SDavid Howells 307f3639df2SDavid Howells TP_fast_assign( 308f3639df2SDavid Howells __entry->call = call; 309f3639df2SDavid Howells __entry->serial = serial; 310be832aecSDavid Howells __entry->ack_first = ack_first; 311be832aecSDavid Howells __entry->ack_serial = ack_serial; 312f3639df2SDavid Howells __entry->reason = reason; 313f3639df2SDavid Howells __entry->n_acks = n_acks; 314f3639df2SDavid Howells ), 315f3639df2SDavid Howells 316be832aecSDavid Howells TP_printk(" c=%p ACK %08x %s f=%08x r=%08x n=%u", 317f3639df2SDavid Howells __entry->call, 318f3639df2SDavid Howells __entry->serial, 3199c7ad434SDavid Howells rxrpc_ack_names[__entry->reason], 320be832aecSDavid Howells __entry->ack_first, 321be832aecSDavid Howells __entry->ack_serial, 322f3639df2SDavid Howells __entry->n_acks) 323f3639df2SDavid Howells ); 324f3639df2SDavid Howells 32558dc63c9SDavid Howells TRACE_EVENT(rxrpc_receive, 32658dc63c9SDavid Howells TP_PROTO(struct rxrpc_call *call, enum rxrpc_receive_trace why, 32758dc63c9SDavid Howells rxrpc_serial_t serial, rxrpc_seq_t seq), 32858dc63c9SDavid Howells 32958dc63c9SDavid Howells TP_ARGS(call, why, serial, seq), 33058dc63c9SDavid Howells 33158dc63c9SDavid Howells TP_STRUCT__entry( 33258dc63c9SDavid Howells __field(struct rxrpc_call *, call ) 33358dc63c9SDavid Howells __field(enum rxrpc_receive_trace, why ) 33458dc63c9SDavid Howells __field(rxrpc_serial_t, serial ) 33558dc63c9SDavid Howells __field(rxrpc_seq_t, seq ) 33658dc63c9SDavid Howells __field(rxrpc_seq_t, hard_ack ) 33758dc63c9SDavid Howells __field(rxrpc_seq_t, top ) 33858dc63c9SDavid Howells ), 33958dc63c9SDavid Howells 34058dc63c9SDavid Howells TP_fast_assign( 34158dc63c9SDavid Howells __entry->call = call; 34258dc63c9SDavid Howells __entry->why = why; 34358dc63c9SDavid Howells __entry->serial = serial; 34458dc63c9SDavid Howells __entry->seq = seq; 34558dc63c9SDavid Howells __entry->hard_ack = call->rx_hard_ack; 34658dc63c9SDavid Howells __entry->top = call->rx_top; 34758dc63c9SDavid Howells ), 34858dc63c9SDavid Howells 34958dc63c9SDavid Howells TP_printk("c=%p %s r=%08x q=%08x w=%08x-%08x", 35058dc63c9SDavid Howells __entry->call, 35158dc63c9SDavid Howells rxrpc_receive_traces[__entry->why], 35258dc63c9SDavid Howells __entry->serial, 35358dc63c9SDavid Howells __entry->seq, 35458dc63c9SDavid Howells __entry->hard_ack, 35558dc63c9SDavid Howells __entry->top) 35658dc63c9SDavid Howells ); 35758dc63c9SDavid Howells 35884997905SDavid Howells TRACE_EVENT(rxrpc_recvmsg, 35984997905SDavid Howells TP_PROTO(struct rxrpc_call *call, enum rxrpc_recvmsg_trace why, 36084997905SDavid Howells rxrpc_seq_t seq, unsigned int offset, unsigned int len, 36184997905SDavid Howells int ret), 36284997905SDavid Howells 36384997905SDavid Howells TP_ARGS(call, why, seq, offset, len, ret), 36484997905SDavid Howells 36584997905SDavid Howells TP_STRUCT__entry( 36684997905SDavid Howells __field(struct rxrpc_call *, call ) 36784997905SDavid Howells __field(enum rxrpc_recvmsg_trace, why ) 36884997905SDavid Howells __field(rxrpc_seq_t, seq ) 36984997905SDavid Howells __field(unsigned int, offset ) 37084997905SDavid Howells __field(unsigned int, len ) 37184997905SDavid Howells __field(int, ret ) 37284997905SDavid Howells ), 37384997905SDavid Howells 37484997905SDavid Howells TP_fast_assign( 37584997905SDavid Howells __entry->call = call; 37684997905SDavid Howells __entry->why = why; 37784997905SDavid Howells __entry->seq = seq; 37884997905SDavid Howells __entry->offset = offset; 37984997905SDavid Howells __entry->len = len; 38084997905SDavid Howells __entry->ret = ret; 38184997905SDavid Howells ), 38284997905SDavid Howells 38384997905SDavid Howells TP_printk("c=%p %s q=%08x o=%u l=%u ret=%d", 38484997905SDavid Howells __entry->call, 38584997905SDavid Howells rxrpc_recvmsg_traces[__entry->why], 38684997905SDavid Howells __entry->seq, 38784997905SDavid Howells __entry->offset, 38884997905SDavid Howells __entry->len, 38984997905SDavid Howells __entry->ret) 39084997905SDavid Howells ); 39184997905SDavid Howells 392cf1a6474SDavid Howells TRACE_EVENT(rxrpc_rtt_tx, 393cf1a6474SDavid Howells TP_PROTO(struct rxrpc_call *call, enum rxrpc_rtt_tx_trace why, 394cf1a6474SDavid Howells rxrpc_serial_t send_serial), 395cf1a6474SDavid Howells 396cf1a6474SDavid Howells TP_ARGS(call, why, send_serial), 397cf1a6474SDavid Howells 398cf1a6474SDavid Howells TP_STRUCT__entry( 399cf1a6474SDavid Howells __field(struct rxrpc_call *, call ) 400cf1a6474SDavid Howells __field(enum rxrpc_rtt_tx_trace, why ) 401cf1a6474SDavid Howells __field(rxrpc_serial_t, send_serial ) 402cf1a6474SDavid Howells ), 403cf1a6474SDavid Howells 404cf1a6474SDavid Howells TP_fast_assign( 405cf1a6474SDavid Howells __entry->call = call; 406cf1a6474SDavid Howells __entry->why = why; 407cf1a6474SDavid Howells __entry->send_serial = send_serial; 408cf1a6474SDavid Howells ), 409cf1a6474SDavid Howells 410cf1a6474SDavid Howells TP_printk("c=%p %s sr=%08x", 411cf1a6474SDavid Howells __entry->call, 412cf1a6474SDavid Howells rxrpc_rtt_tx_traces[__entry->why], 413cf1a6474SDavid Howells __entry->send_serial) 414cf1a6474SDavid Howells ); 415cf1a6474SDavid Howells 416cf1a6474SDavid Howells TRACE_EVENT(rxrpc_rtt_rx, 417cf1a6474SDavid Howells TP_PROTO(struct rxrpc_call *call, enum rxrpc_rtt_rx_trace why, 418cf1a6474SDavid Howells rxrpc_serial_t send_serial, rxrpc_serial_t resp_serial, 419cf1a6474SDavid Howells s64 rtt, u8 nr, s64 avg), 420cf1a6474SDavid Howells 421cf1a6474SDavid Howells TP_ARGS(call, why, send_serial, resp_serial, rtt, nr, avg), 422cf1a6474SDavid Howells 423cf1a6474SDavid Howells TP_STRUCT__entry( 424cf1a6474SDavid Howells __field(struct rxrpc_call *, call ) 425cf1a6474SDavid Howells __field(enum rxrpc_rtt_rx_trace, why ) 426cf1a6474SDavid Howells __field(u8, nr ) 427cf1a6474SDavid Howells __field(rxrpc_serial_t, send_serial ) 428cf1a6474SDavid Howells __field(rxrpc_serial_t, resp_serial ) 429cf1a6474SDavid Howells __field(s64, rtt ) 430cf1a6474SDavid Howells __field(u64, avg ) 431cf1a6474SDavid Howells ), 432cf1a6474SDavid Howells 433cf1a6474SDavid Howells TP_fast_assign( 434cf1a6474SDavid Howells __entry->call = call; 435cf1a6474SDavid Howells __entry->why = why; 436cf1a6474SDavid Howells __entry->send_serial = send_serial; 437cf1a6474SDavid Howells __entry->resp_serial = resp_serial; 438cf1a6474SDavid Howells __entry->rtt = rtt; 439cf1a6474SDavid Howells __entry->nr = nr; 440cf1a6474SDavid Howells __entry->avg = avg; 441cf1a6474SDavid Howells ), 442cf1a6474SDavid Howells 443cf1a6474SDavid Howells TP_printk("c=%p %s sr=%08x rr=%08x rtt=%lld nr=%u avg=%lld", 444cf1a6474SDavid Howells __entry->call, 445cf1a6474SDavid Howells rxrpc_rtt_rx_traces[__entry->why], 446cf1a6474SDavid Howells __entry->send_serial, 447cf1a6474SDavid Howells __entry->resp_serial, 448cf1a6474SDavid Howells __entry->rtt, 449cf1a6474SDavid Howells __entry->nr, 450cf1a6474SDavid Howells __entry->avg) 451cf1a6474SDavid Howells ); 452cf1a6474SDavid Howells 453fc7ab6d2SDavid Howells TRACE_EVENT(rxrpc_timer, 454fc7ab6d2SDavid Howells TP_PROTO(struct rxrpc_call *call, enum rxrpc_timer_trace why, 455fc7ab6d2SDavid Howells unsigned long now), 456fc7ab6d2SDavid Howells 457fc7ab6d2SDavid Howells TP_ARGS(call, why, now), 458fc7ab6d2SDavid Howells 459fc7ab6d2SDavid Howells TP_STRUCT__entry( 460fc7ab6d2SDavid Howells __field(struct rxrpc_call *, call ) 461fc7ab6d2SDavid Howells __field(enum rxrpc_timer_trace, why ) 462fc7ab6d2SDavid Howells __field(unsigned long, now ) 463fc7ab6d2SDavid Howells __field(unsigned long, expire_at ) 464fc7ab6d2SDavid Howells __field(unsigned long, ack_at ) 465fc7ab6d2SDavid Howells __field(unsigned long, resend_at ) 466fc7ab6d2SDavid Howells __field(unsigned long, timer ) 467fc7ab6d2SDavid Howells ), 468fc7ab6d2SDavid Howells 469fc7ab6d2SDavid Howells TP_fast_assign( 470fc7ab6d2SDavid Howells __entry->call = call; 471fc7ab6d2SDavid Howells __entry->why = why; 472fc7ab6d2SDavid Howells __entry->now = now; 473fc7ab6d2SDavid Howells __entry->expire_at = call->expire_at; 474fc7ab6d2SDavid Howells __entry->ack_at = call->ack_at; 475fc7ab6d2SDavid Howells __entry->resend_at = call->resend_at; 476fc7ab6d2SDavid Howells __entry->timer = call->timer.expires; 477fc7ab6d2SDavid Howells ), 478fc7ab6d2SDavid Howells 479fc7ab6d2SDavid Howells TP_printk("c=%p %s now=%lx x=%ld a=%ld r=%ld t=%ld", 480fc7ab6d2SDavid Howells __entry->call, 481fc7ab6d2SDavid Howells rxrpc_timer_traces[__entry->why], 482fc7ab6d2SDavid Howells __entry->now, 483fc7ab6d2SDavid Howells __entry->expire_at - __entry->now, 484fc7ab6d2SDavid Howells __entry->ack_at - __entry->now, 485fc7ab6d2SDavid Howells __entry->resend_at - __entry->now, 486fc7ab6d2SDavid Howells __entry->timer - __entry->now) 487fc7ab6d2SDavid Howells ); 488fc7ab6d2SDavid Howells 48989b475abSDavid Howells TRACE_EVENT(rxrpc_rx_lose, 49089b475abSDavid Howells TP_PROTO(struct rxrpc_skb_priv *sp), 49189b475abSDavid Howells 49289b475abSDavid Howells TP_ARGS(sp), 49389b475abSDavid Howells 49489b475abSDavid Howells TP_STRUCT__entry( 49589b475abSDavid Howells __field_struct(struct rxrpc_host_header, hdr ) 49689b475abSDavid Howells ), 49789b475abSDavid Howells 49889b475abSDavid Howells TP_fast_assign( 49989b475abSDavid Howells memcpy(&__entry->hdr, &sp->hdr, sizeof(__entry->hdr)); 50089b475abSDavid Howells ), 50189b475abSDavid Howells 50289b475abSDavid Howells TP_printk("%08x:%08x:%08x:%04x %08x %08x %02x %02x %s *LOSE*", 50389b475abSDavid Howells __entry->hdr.epoch, __entry->hdr.cid, 50489b475abSDavid Howells __entry->hdr.callNumber, __entry->hdr.serviceId, 50589b475abSDavid Howells __entry->hdr.serial, __entry->hdr.seq, 50689b475abSDavid Howells __entry->hdr.type, __entry->hdr.flags, 50789b475abSDavid Howells __entry->hdr.type <= 15 ? rxrpc_pkts[__entry->hdr.type] : "?UNK") 50889b475abSDavid Howells ); 50989b475abSDavid Howells 5109c7ad434SDavid Howells TRACE_EVENT(rxrpc_propose_ack, 5119c7ad434SDavid Howells TP_PROTO(struct rxrpc_call *call, enum rxrpc_propose_ack_trace why, 5129c7ad434SDavid Howells u8 ack_reason, rxrpc_serial_t serial, bool immediate, 5139c7ad434SDavid Howells bool background, enum rxrpc_propose_ack_outcome outcome), 5149c7ad434SDavid Howells 5159c7ad434SDavid Howells TP_ARGS(call, why, ack_reason, serial, immediate, background, 5169c7ad434SDavid Howells outcome), 5179c7ad434SDavid Howells 5189c7ad434SDavid Howells TP_STRUCT__entry( 5199c7ad434SDavid Howells __field(struct rxrpc_call *, call ) 5209c7ad434SDavid Howells __field(enum rxrpc_propose_ack_trace, why ) 5219c7ad434SDavid Howells __field(rxrpc_serial_t, serial ) 5229c7ad434SDavid Howells __field(u8, ack_reason ) 5239c7ad434SDavid Howells __field(bool, immediate ) 5249c7ad434SDavid Howells __field(bool, background ) 5259c7ad434SDavid Howells __field(enum rxrpc_propose_ack_outcome, outcome ) 5269c7ad434SDavid Howells ), 5279c7ad434SDavid Howells 5289c7ad434SDavid Howells TP_fast_assign( 5299c7ad434SDavid Howells __entry->call = call; 5309c7ad434SDavid Howells __entry->why = why; 5319c7ad434SDavid Howells __entry->serial = serial; 5329c7ad434SDavid Howells __entry->ack_reason = ack_reason; 5339c7ad434SDavid Howells __entry->immediate = immediate; 5349c7ad434SDavid Howells __entry->background = background; 5359c7ad434SDavid Howells __entry->outcome = outcome; 5369c7ad434SDavid Howells ), 5379c7ad434SDavid Howells 5389c7ad434SDavid Howells TP_printk("c=%p %s %s r=%08x i=%u b=%u%s", 5399c7ad434SDavid Howells __entry->call, 5409c7ad434SDavid Howells rxrpc_propose_ack_traces[__entry->why], 5419c7ad434SDavid Howells rxrpc_ack_names[__entry->ack_reason], 5429c7ad434SDavid Howells __entry->serial, 5439c7ad434SDavid Howells __entry->immediate, 5449c7ad434SDavid Howells __entry->background, 5459c7ad434SDavid Howells rxrpc_propose_ack_outcomes[__entry->outcome]) 5469c7ad434SDavid Howells ); 5479c7ad434SDavid Howells 548c6672e3fSDavid Howells TRACE_EVENT(rxrpc_retransmit, 549c6672e3fSDavid Howells TP_PROTO(struct rxrpc_call *call, rxrpc_seq_t seq, u8 annotation, 550c6672e3fSDavid Howells s64 expiry), 551c6672e3fSDavid Howells 552c6672e3fSDavid Howells TP_ARGS(call, seq, annotation, expiry), 553c6672e3fSDavid Howells 554c6672e3fSDavid Howells TP_STRUCT__entry( 555c6672e3fSDavid Howells __field(struct rxrpc_call *, call ) 556c6672e3fSDavid Howells __field(rxrpc_seq_t, seq ) 557c6672e3fSDavid Howells __field(u8, annotation ) 558c6672e3fSDavid Howells __field(s64, expiry ) 559c6672e3fSDavid Howells ), 560c6672e3fSDavid Howells 561c6672e3fSDavid Howells TP_fast_assign( 562c6672e3fSDavid Howells __entry->call = call; 563c6672e3fSDavid Howells __entry->seq = seq; 564c6672e3fSDavid Howells __entry->annotation = annotation; 565c6672e3fSDavid Howells __entry->expiry = expiry; 566c6672e3fSDavid Howells ), 567c6672e3fSDavid Howells 568c6672e3fSDavid Howells TP_printk("c=%p q=%x a=%02x xp=%lld", 569c6672e3fSDavid Howells __entry->call, 570c6672e3fSDavid Howells __entry->seq, 571c6672e3fSDavid Howells __entry->annotation, 572c6672e3fSDavid Howells __entry->expiry) 573c6672e3fSDavid Howells ); 574c6672e3fSDavid Howells 57557494343SDavid Howells TRACE_EVENT(rxrpc_congest, 57657494343SDavid Howells TP_PROTO(struct rxrpc_call *call, struct rxrpc_ack_summary *summary, 57757494343SDavid Howells rxrpc_serial_t ack_serial, enum rxrpc_congest_change change), 57857494343SDavid Howells 57957494343SDavid Howells TP_ARGS(call, summary, ack_serial, change), 58057494343SDavid Howells 58157494343SDavid Howells TP_STRUCT__entry( 58257494343SDavid Howells __field(struct rxrpc_call *, call ) 58357494343SDavid Howells __field(enum rxrpc_congest_change, change ) 58457494343SDavid Howells __field(rxrpc_seq_t, hard_ack ) 58557494343SDavid Howells __field(rxrpc_seq_t, top ) 58657494343SDavid Howells __field(rxrpc_seq_t, lowest_nak ) 58757494343SDavid Howells __field(rxrpc_serial_t, ack_serial ) 58857494343SDavid Howells __field_struct(struct rxrpc_ack_summary, sum ) 58957494343SDavid Howells ), 59057494343SDavid Howells 59157494343SDavid Howells TP_fast_assign( 59257494343SDavid Howells __entry->call = call; 59357494343SDavid Howells __entry->change = change; 59457494343SDavid Howells __entry->hard_ack = call->tx_hard_ack; 59557494343SDavid Howells __entry->top = call->tx_top; 59657494343SDavid Howells __entry->lowest_nak = call->acks_lowest_nak; 59757494343SDavid Howells __entry->ack_serial = ack_serial; 59857494343SDavid Howells memcpy(&__entry->sum, summary, sizeof(__entry->sum)); 59957494343SDavid Howells ), 60057494343SDavid Howells 60157494343SDavid Howells TP_printk("c=%p %08x %s %08x %s cw=%u ss=%u nr=%u,%u nw=%u,%u r=%u b=%u u=%u d=%u l=%x%s%s%s", 60257494343SDavid Howells __entry->call, 60357494343SDavid Howells __entry->ack_serial, 60457494343SDavid Howells rxrpc_ack_names[__entry->sum.ack_reason], 60557494343SDavid Howells __entry->hard_ack, 60657494343SDavid Howells rxrpc_congest_modes[__entry->sum.mode], 60757494343SDavid Howells __entry->sum.cwnd, 60857494343SDavid Howells __entry->sum.ssthresh, 60957494343SDavid Howells __entry->sum.nr_acks, __entry->sum.nr_nacks, 61057494343SDavid Howells __entry->sum.nr_new_acks, __entry->sum.nr_new_nacks, 61157494343SDavid Howells __entry->sum.nr_rot_new_acks, 61257494343SDavid Howells __entry->top - __entry->hard_ack, 61357494343SDavid Howells __entry->sum.cumulative_acks, 61457494343SDavid Howells __entry->sum.dup_acks, 61557494343SDavid Howells __entry->lowest_nak, __entry->sum.new_low_nack ? "!" : "", 61657494343SDavid Howells rxrpc_congest_changes[__entry->change], 61757494343SDavid Howells __entry->sum.retrans_timeo ? " rTxTo" : "") 61857494343SDavid Howells ); 61957494343SDavid Howells 620df844fd4SDavid Howells #endif /* _TRACE_RXRPC_H */ 621df844fd4SDavid Howells 622df844fd4SDavid Howells /* This part must be outside protection */ 623df844fd4SDavid Howells #include <trace/define_trace.h> 624