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 19e34d4234SDavid Howells TRACE_EVENT(rxrpc_call, 20fff72429SDavid Howells TP_PROTO(struct rxrpc_call *call, enum rxrpc_call_trace op, 212ab27215SDavid Howells int usage, const void *where, const void *aux), 22e34d4234SDavid Howells 232ab27215SDavid Howells TP_ARGS(call, op, usage, where, aux), 24e34d4234SDavid Howells 25e34d4234SDavid Howells TP_STRUCT__entry( 26e34d4234SDavid Howells __field(struct rxrpc_call *, call ) 27e34d4234SDavid Howells __field(int, op ) 28e34d4234SDavid Howells __field(int, usage ) 29e34d4234SDavid Howells __field(const void *, where ) 30e34d4234SDavid Howells __field(const void *, aux ) 31e34d4234SDavid Howells ), 32e34d4234SDavid Howells 33e34d4234SDavid Howells TP_fast_assign( 34e34d4234SDavid Howells __entry->call = call; 35e34d4234SDavid Howells __entry->op = op; 36e34d4234SDavid Howells __entry->usage = usage; 37e34d4234SDavid Howells __entry->where = where; 38e34d4234SDavid Howells __entry->aux = aux; 39e34d4234SDavid Howells ), 40e34d4234SDavid Howells 412ab27215SDavid Howells TP_printk("c=%p %s u=%d sp=%pSR a=%p", 42e34d4234SDavid Howells __entry->call, 43fff72429SDavid Howells rxrpc_call_traces[__entry->op], 44e34d4234SDavid Howells __entry->usage, 45e34d4234SDavid Howells __entry->where, 46e34d4234SDavid Howells __entry->aux) 47e34d4234SDavid Howells ); 48e34d4234SDavid Howells 49df844fd4SDavid Howells TRACE_EVENT(rxrpc_skb, 50df844fd4SDavid Howells TP_PROTO(struct sk_buff *skb, int op, int usage, int mod_count, 51df844fd4SDavid Howells const void *where), 52df844fd4SDavid Howells 53df844fd4SDavid Howells TP_ARGS(skb, op, usage, mod_count, where), 54df844fd4SDavid Howells 55df844fd4SDavid Howells TP_STRUCT__entry( 56df844fd4SDavid Howells __field(struct sk_buff *, skb ) 57df844fd4SDavid Howells __field(int, op ) 58df844fd4SDavid Howells __field(int, usage ) 59df844fd4SDavid Howells __field(int, mod_count ) 60df844fd4SDavid Howells __field(const void *, where ) 61df844fd4SDavid Howells ), 62df844fd4SDavid Howells 63df844fd4SDavid Howells TP_fast_assign( 64df844fd4SDavid Howells __entry->skb = skb; 65df844fd4SDavid Howells __entry->op = op; 66df844fd4SDavid Howells __entry->usage = usage; 67df844fd4SDavid Howells __entry->mod_count = mod_count; 68df844fd4SDavid Howells __entry->where = where; 69df844fd4SDavid Howells ), 70df844fd4SDavid Howells 71df844fd4SDavid Howells TP_printk("s=%p %s u=%d m=%d p=%pSR", 72df844fd4SDavid Howells __entry->skb, 73df844fd4SDavid Howells (__entry->op == 0 ? "NEW" : 74df844fd4SDavid Howells __entry->op == 1 ? "SEE" : 75df844fd4SDavid Howells __entry->op == 2 ? "GET" : 76df844fd4SDavid Howells __entry->op == 3 ? "FRE" : 77df844fd4SDavid Howells "PUR"), 78df844fd4SDavid Howells __entry->usage, 79df844fd4SDavid Howells __entry->mod_count, 80df844fd4SDavid Howells __entry->where) 81df844fd4SDavid Howells ); 82df844fd4SDavid Howells 83*49e19ec7SDavid Howells TRACE_EVENT(rxrpc_rx_packet, 84*49e19ec7SDavid Howells TP_PROTO(struct rxrpc_skb_priv *sp), 85*49e19ec7SDavid Howells 86*49e19ec7SDavid Howells TP_ARGS(sp), 87*49e19ec7SDavid Howells 88*49e19ec7SDavid Howells TP_STRUCT__entry( 89*49e19ec7SDavid Howells __field_struct(struct rxrpc_host_header, hdr ) 90*49e19ec7SDavid Howells ), 91*49e19ec7SDavid Howells 92*49e19ec7SDavid Howells TP_fast_assign( 93*49e19ec7SDavid Howells memcpy(&__entry->hdr, &sp->hdr, sizeof(__entry->hdr)); 94*49e19ec7SDavid Howells ), 95*49e19ec7SDavid Howells 96*49e19ec7SDavid Howells TP_printk("%08x:%08x:%08x:%04x %08x %08x %02x %02x", 97*49e19ec7SDavid Howells __entry->hdr.epoch, __entry->hdr.cid, 98*49e19ec7SDavid Howells __entry->hdr.callNumber, __entry->hdr.serviceId, 99*49e19ec7SDavid Howells __entry->hdr.serial, __entry->hdr.seq, 100*49e19ec7SDavid Howells __entry->hdr.type, __entry->hdr.flags) 101*49e19ec7SDavid Howells ); 102*49e19ec7SDavid Howells 103*49e19ec7SDavid Howells TRACE_EVENT(rxrpc_rx_done, 104*49e19ec7SDavid Howells TP_PROTO(int result, int abort_code), 105*49e19ec7SDavid Howells 106*49e19ec7SDavid Howells TP_ARGS(result, abort_code), 107*49e19ec7SDavid Howells 108*49e19ec7SDavid Howells TP_STRUCT__entry( 109*49e19ec7SDavid Howells __field(int, result ) 110*49e19ec7SDavid Howells __field(int, abort_code ) 111*49e19ec7SDavid Howells ), 112*49e19ec7SDavid Howells 113*49e19ec7SDavid Howells TP_fast_assign( 114*49e19ec7SDavid Howells __entry->result = result; 115*49e19ec7SDavid Howells __entry->abort_code = abort_code; 116*49e19ec7SDavid Howells ), 117*49e19ec7SDavid Howells 118*49e19ec7SDavid Howells TP_printk("r=%d a=%d", __entry->result, __entry->abort_code) 119*49e19ec7SDavid Howells ); 120*49e19ec7SDavid Howells 1215a42976dSDavid Howells TRACE_EVENT(rxrpc_abort, 1225a42976dSDavid Howells TP_PROTO(const char *why, u32 cid, u32 call_id, rxrpc_seq_t seq, 1235a42976dSDavid Howells int abort_code, int error), 1245a42976dSDavid Howells 1255a42976dSDavid Howells TP_ARGS(why, cid, call_id, seq, abort_code, error), 1265a42976dSDavid Howells 1275a42976dSDavid Howells TP_STRUCT__entry( 1285a42976dSDavid Howells __array(char, why, 4 ) 1295a42976dSDavid Howells __field(u32, cid ) 1305a42976dSDavid Howells __field(u32, call_id ) 1315a42976dSDavid Howells __field(rxrpc_seq_t, seq ) 1325a42976dSDavid Howells __field(int, abort_code ) 1335a42976dSDavid Howells __field(int, error ) 1345a42976dSDavid Howells ), 1355a42976dSDavid Howells 1365a42976dSDavid Howells TP_fast_assign( 1375a42976dSDavid Howells memcpy(__entry->why, why, 4); 1385a42976dSDavid Howells __entry->cid = cid; 1395a42976dSDavid Howells __entry->call_id = call_id; 1405a42976dSDavid Howells __entry->abort_code = abort_code; 1415a42976dSDavid Howells __entry->error = error; 1425a42976dSDavid Howells __entry->seq = seq; 1435a42976dSDavid Howells ), 1445a42976dSDavid Howells 1455a42976dSDavid Howells TP_printk("%08x:%08x s=%u a=%d e=%d %s", 1465a42976dSDavid Howells __entry->cid, __entry->call_id, __entry->seq, 1475a42976dSDavid Howells __entry->abort_code, __entry->error, __entry->why) 1485a42976dSDavid Howells ); 1495a42976dSDavid Howells 150df844fd4SDavid Howells #endif /* _TRACE_RXRPC_H */ 151df844fd4SDavid Howells 152df844fd4SDavid Howells /* This part must be outside protection */ 153df844fd4SDavid Howells #include <trace/define_trace.h> 154