| 1 |
|
| 2 | #undef TRACE_SYSTEM
|
| 3 | #define TRACE_SYSTEM 9p
|
| 4 |
|
| 5 | #if !defined(_TRACE_9P_H) || defined(TRACE_HEADER_MULTI_READ)
|
| 6 | #define _TRACE_9P_H
|
| 7 |
|
| 8 | #include <linux/tracepoint.h>
|
| 9 |
|
| 10 | #define P9_MSG_T \
|
| 11 | EM( P9_TLERROR, "P9_TLERROR" ) \
|
| 12 | EM( P9_RLERROR, "P9_RLERROR" ) \
|
| 13 | EM( P9_TSTATFS, "P9_TSTATFS" ) \
|
| 14 | EM( P9_RSTATFS, "P9_RSTATFS" ) \
|
| 15 | EM( P9_TLOPEN, "P9_TLOPEN" ) \
|
| 16 | EM( P9_RLOPEN, "P9_RLOPEN" ) \
|
| 17 | EM( P9_TLCREATE, "P9_TLCREATE" ) \
|
| 18 | EM( P9_RLCREATE, "P9_RLCREATE" ) \
|
| 19 | EM( P9_TSYMLINK, "P9_TSYMLINK" ) \
|
| 20 | EM( P9_RSYMLINK, "P9_RSYMLINK" ) \
|
| 21 | EM( P9_TMKNOD, "P9_TMKNOD" ) \
|
| 22 | EM( P9_RMKNOD, "P9_RMKNOD" ) \
|
| 23 | EM( P9_TRENAME, "P9_TRENAME" ) \
|
| 24 | EM( P9_RRENAME, "P9_RRENAME" ) \
|
| 25 | EM( P9_TREADLINK, "P9_TREADLINK" ) \
|
| 26 | EM( P9_RREADLINK, "P9_RREADLINK" ) \
|
| 27 | EM( P9_TGETATTR, "P9_TGETATTR" ) \
|
| 28 | EM( P9_RGETATTR, "P9_RGETATTR" ) \
|
| 29 | EM( P9_TSETATTR, "P9_TSETATTR" ) \
|
| 30 | EM( P9_RSETATTR, "P9_RSETATTR" ) \
|
| 31 | EM( P9_TXATTRWALK, "P9_TXATTRWALK" ) \
|
| 32 | EM( P9_RXATTRWALK, "P9_RXATTRWALK" ) \
|
| 33 | EM( P9_TXATTRCREATE, "P9_TXATTRCREATE" ) \
|
| 34 | EM( P9_RXATTRCREATE, "P9_RXATTRCREATE" ) \
|
| 35 | EM( P9_TREADDIR, "P9_TREADDIR" ) \
|
| 36 | EM( P9_RREADDIR, "P9_RREADDIR" ) \
|
| 37 | EM( P9_TFSYNC, "P9_TFSYNC" ) \
|
| 38 | EM( P9_RFSYNC, "P9_RFSYNC" ) \
|
| 39 | EM( P9_TLOCK, "P9_TLOCK" ) \
|
| 40 | EM( P9_RLOCK, "P9_RLOCK" ) \
|
| 41 | EM( P9_TGETLOCK, "P9_TGETLOCK" ) \
|
| 42 | EM( P9_RGETLOCK, "P9_RGETLOCK" ) \
|
| 43 | EM( P9_TLINK, "P9_TLINK" ) \
|
| 44 | EM( P9_RLINK, "P9_RLINK" ) \
|
| 45 | EM( P9_TMKDIR, "P9_TMKDIR" ) \
|
| 46 | EM( P9_RMKDIR, "P9_RMKDIR" ) \
|
| 47 | EM( P9_TRENAMEAT, "P9_TRENAMEAT" ) \
|
| 48 | EM( P9_RRENAMEAT, "P9_RRENAMEAT" ) \
|
| 49 | EM( P9_TUNLINKAT, "P9_TUNLINKAT" ) \
|
| 50 | EM( P9_RUNLINKAT, "P9_RUNLINKAT" ) \
|
| 51 | EM( P9_TVERSION, "P9_TVERSION" ) \
|
| 52 | EM( P9_RVERSION, "P9_RVERSION" ) \
|
| 53 | EM( P9_TAUTH, "P9_TAUTH" ) \
|
| 54 | EM( P9_RAUTH, "P9_RAUTH" ) \
|
| 55 | EM( P9_TATTACH, "P9_TATTACH" ) \
|
| 56 | EM( P9_RATTACH, "P9_RATTACH" ) \
|
| 57 | EM( P9_TERROR, "P9_TERROR" ) \
|
| 58 | EM( P9_RERROR, "P9_RERROR" ) \
|
| 59 | EM( P9_TFLUSH, "P9_TFLUSH" ) \
|
| 60 | EM( P9_RFLUSH, "P9_RFLUSH" ) \
|
| 61 | EM( P9_TWALK, "P9_TWALK" ) \
|
| 62 | EM( P9_RWALK, "P9_RWALK" ) \
|
| 63 | EM( P9_TOPEN, "P9_TOPEN" ) \
|
| 64 | EM( P9_ROPEN, "P9_ROPEN" ) \
|
| 65 | EM( P9_TCREATE, "P9_TCREATE" ) \
|
| 66 | EM( P9_RCREATE, "P9_RCREATE" ) \
|
| 67 | EM( P9_TREAD, "P9_TREAD" ) \
|
| 68 | EM( P9_RREAD, "P9_RREAD" ) \
|
| 69 | EM( P9_TWRITE, "P9_TWRITE" ) \
|
| 70 | EM( P9_RWRITE, "P9_RWRITE" ) \
|
| 71 | EM( P9_TCLUNK, "P9_TCLUNK" ) \
|
| 72 | EM( P9_RCLUNK, "P9_RCLUNK" ) \
|
| 73 | EM( P9_TREMOVE, "P9_TREMOVE" ) \
|
| 74 | EM( P9_RREMOVE, "P9_RREMOVE" ) \
|
| 75 | EM( P9_TSTAT, "P9_TSTAT" ) \
|
| 76 | EM( P9_RSTAT, "P9_RSTAT" ) \
|
| 77 | EM( P9_TWSTAT, "P9_TWSTAT" ) \
|
| 78 | EMe(P9_RWSTAT, "P9_RWSTAT" )
|
| 79 |
|
| 80 |
|
| 81 | #define P9_FID_REFTYPE \
|
| 82 | EM( P9_FID_REF_CREATE, "create " ) \
|
| 83 | EM( P9_FID_REF_GET, "get " ) \
|
| 84 | EM( P9_FID_REF_PUT, "put " ) \
|
| 85 | EMe(P9_FID_REF_DESTROY, "destroy" )
|
| 86 |
|
| 87 |
|
| 88 | #undef EM
|
| 89 | #undef EMe
|
| 90 | #define EM(a, b) TRACE_DEFINE_ENUM(a);
|
| 91 | #define EMe(a, b) TRACE_DEFINE_ENUM(a);
|
| 92 |
|
| 93 | P9_MSG_T
|
| 94 | P9_FID_REFTYPE
|
| 95 |
|
| 96 |
|
| 97 | #ifndef __9P_DECLARE_TRACE_ENUMS_ONLY_ONCE
|
| 98 | #define __9P_DECLARE_TRACE_ENUMS_ONLY_ONCE
|
| 99 | #undef EM
|
| 100 | #undef EMe
|
| 101 | #define EM(a, b) a,
|
| 102 | #define EMe(a, b) a
|
| 103 |
|
| 104 | enum p9_fid_reftype {
|
| 105 | P9_FID_REFTYPE
|
| 106 | } __mode(byte);
|
| 107 |
|
| 108 | #endif
|
| 109 |
|
| 110 | |
| 111 | * Now redefine the EM() and EMe() macros to map the enums to the strings
|
| 112 | * that will be printed in the output.
|
| 113 |
|
| 114 | #undef EM
|
| 115 | #undef EMe
|
| 116 | #define EM(a, b) { a, b },
|
| 117 | #define EMe(a, b) { a, b }
|
| 118 |
|
| 119 | #define show_9p_op(type) \
|
| 120 | __print_symbolic(type, P9_MSG_T)
|
| 121 | #define show_9p_fid_reftype(type) \
|
| 122 | __print_symbolic(type, P9_FID_REFTYPE)
|
| 123 |
|
| 124 | TRACE_EVENT(9p_client_req,
|
| 125 | TP_PROTO(struct p9_client *clnt, int8_t type, int tag),
|
| 126 |
|
| 127 | TP_ARGS(clnt, type, tag),
|
| 128 |
|
| 129 | TP_STRUCT__entry(
|
| 130 | __field( void *, clnt )
|
| 131 | __field( __u8, type )
|
| 132 | __field( __u32, tag )
|
| 133 | ),
|
| 134 |
|
| 135 | TP_fast_assign(
|
| 136 | __entry->clnt = clnt;
|
| 137 | __entry->type = type;
|
| 138 | __entry->tag = tag;
|
| 139 | ),
|
| 140 |
|
| 141 | TP_printk("client %lu request %s tag %d",
|
| 142 | (long)__entry->clnt, show_9p_op(__entry->type),
|
| 143 | __entry->tag)
|
| 144 | );
|
| 145 |
|
| 146 | TRACE_EVENT(9p_client_res,
|
| 147 | TP_PROTO(struct p9_client *clnt, int8_t type, int tag, int err),
|
| 148 |
|
| 149 | TP_ARGS(clnt, type, tag, err),
|
| 150 |
|
| 151 | TP_STRUCT__entry(
|
| 152 | __field( void *, clnt )
|
| 153 | __field( __u8, type )
|
| 154 | __field( __u32, tag )
|
| 155 | __field( __u32, err )
|
| 156 | ),
|
| 157 |
|
| 158 | TP_fast_assign(
|
| 159 | __entry->clnt = clnt;
|
| 160 | __entry->type = type;
|
| 161 | __entry->tag = tag;
|
| 162 | __entry->err = err;
|
| 163 | ),
|
| 164 |
|
| 165 | TP_printk("client %lu response %s tag %d err %d",
|
| 166 | (long)__entry->clnt, show_9p_op(__entry->type),
|
| 167 | __entry->tag, __entry->err)
|
| 168 | );
|
| 169 |
|
| 170 |
|
| 171 | #define P9_PROTO_DUMP_SZ 32
|
| 172 | TRACE_EVENT(9p_protocol_dump,
|
| 173 | TP_PROTO(struct p9_client *clnt, struct p9_fcall *pdu),
|
| 174 |
|
| 175 | TP_ARGS(clnt, pdu),
|
| 176 |
|
| 177 | TP_STRUCT__entry(
|
| 178 | __field( void *, clnt )
|
| 179 | __field( __u8, type )
|
| 180 | __field( __u16, tag )
|
| 181 | __dynamic_array(unsigned char, line,
|
| 182 | min_t(size_t, pdu->capacity, P9_PROTO_DUMP_SZ))
|
| 183 | ),
|
| 184 |
|
| 185 | TP_fast_assign(
|
| 186 | __entry->clnt = clnt;
|
| 187 | __entry->type = pdu->id;
|
| 188 | __entry->tag = pdu->tag;
|
| 189 | memcpy(__get_dynamic_array(line), pdu->sdata,
|
| 190 | __get_dynamic_array_len(line));
|
| 191 | ),
|
| 192 | TP_printk("clnt %lu %s(tag = %d)\n%*ph\n",
|
| 193 | (unsigned long)__entry->clnt, show_9p_op(__entry->type),
|
| 194 | __entry->tag, __get_dynamic_array_len(line),
|
| 195 | __get_dynamic_array(line))
|
| 196 | );
|
| 197 |
|
| 198 |
|
| 199 | TRACE_EVENT(9p_fid_ref,
|
| 200 | TP_PROTO(struct p9_fid *fid, __u8 type),
|
| 201 |
|
| 202 | TP_ARGS(fid, type),
|
| 203 |
|
| 204 | TP_STRUCT__entry(
|
| 205 | __field( int, fid )
|
| 206 | __field( int, refcount )
|
| 207 | __field( __u8, type )
|
| 208 | ),
|
| 209 |
|
| 210 | TP_fast_assign(
|
| 211 | __entry->fid = fid->fid;
|
| 212 | __entry->refcount = refcount_read(&fid->count);
|
| 213 | __entry->type = type;
|
| 214 | ),
|
| 215 |
|
| 216 | TP_printk("%s fid %d, refcount %d",
|
| 217 | show_9p_fid_reftype(__entry->type),
|
| 218 | __entry->fid, __entry->refcount)
|
| 219 | );
|
| 220 |
|
| 221 |
|
| 222 | #endif
|
| 223 |
|
| 224 |
|
| 225 | #include <trace/define_trace.h>
|