cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

netfs.h (9685B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/* Network filesystem support module tracepoints
      3 *
      4 * Copyright (C) 2021 Red Hat, Inc. All Rights Reserved.
      5 * Written by David Howells (dhowells@redhat.com)
      6 */
      7#undef TRACE_SYSTEM
      8#define TRACE_SYSTEM netfs
      9
     10#if !defined(_TRACE_NETFS_H) || defined(TRACE_HEADER_MULTI_READ)
     11#define _TRACE_NETFS_H
     12
     13#include <linux/tracepoint.h>
     14
     15/*
     16 * Define enums for tracing information.
     17 */
     18#define netfs_read_traces					\
     19	EM(netfs_read_trace_expanded,		"EXPANDED ")	\
     20	EM(netfs_read_trace_readahead,		"READAHEAD")	\
     21	EM(netfs_read_trace_readpage,		"READPAGE ")	\
     22	E_(netfs_read_trace_write_begin,	"WRITEBEGN")
     23
     24#define netfs_rreq_origins					\
     25	EM(NETFS_READAHEAD,			"RA")		\
     26	EM(NETFS_READPAGE,			"RP")		\
     27	E_(NETFS_READ_FOR_WRITE,		"RW")
     28
     29#define netfs_rreq_traces					\
     30	EM(netfs_rreq_trace_assess,		"ASSESS ")	\
     31	EM(netfs_rreq_trace_copy,		"COPY   ")	\
     32	EM(netfs_rreq_trace_done,		"DONE   ")	\
     33	EM(netfs_rreq_trace_free,		"FREE   ")	\
     34	EM(netfs_rreq_trace_resubmit,		"RESUBMT")	\
     35	EM(netfs_rreq_trace_unlock,		"UNLOCK ")	\
     36	E_(netfs_rreq_trace_unmark,		"UNMARK ")
     37
     38#define netfs_sreq_sources					\
     39	EM(NETFS_FILL_WITH_ZEROES,		"ZERO")		\
     40	EM(NETFS_DOWNLOAD_FROM_SERVER,		"DOWN")		\
     41	EM(NETFS_READ_FROM_CACHE,		"READ")		\
     42	E_(NETFS_INVALID_READ,			"INVL")		\
     43
     44#define netfs_sreq_traces					\
     45	EM(netfs_sreq_trace_download_instead,	"RDOWN")	\
     46	EM(netfs_sreq_trace_free,		"FREE ")	\
     47	EM(netfs_sreq_trace_prepare,		"PREP ")	\
     48	EM(netfs_sreq_trace_resubmit_short,	"SHORT")	\
     49	EM(netfs_sreq_trace_submit,		"SUBMT")	\
     50	EM(netfs_sreq_trace_terminated,		"TERM ")	\
     51	EM(netfs_sreq_trace_write,		"WRITE")	\
     52	EM(netfs_sreq_trace_write_skip,		"SKIP ")	\
     53	E_(netfs_sreq_trace_write_term,		"WTERM")
     54
     55#define netfs_failures							\
     56	EM(netfs_fail_check_write_begin,	"check-write-begin")	\
     57	EM(netfs_fail_copy_to_cache,		"copy-to-cache")	\
     58	EM(netfs_fail_read,			"read")			\
     59	EM(netfs_fail_short_read,		"short-read")		\
     60	E_(netfs_fail_prepare_write,		"prep-write")
     61
     62#define netfs_rreq_ref_traces					\
     63	EM(netfs_rreq_trace_get_hold,		"GET HOLD   ")	\
     64	EM(netfs_rreq_trace_get_subreq,		"GET SUBREQ ")	\
     65	EM(netfs_rreq_trace_put_complete,	"PUT COMPLT ")	\
     66	EM(netfs_rreq_trace_put_discard,	"PUT DISCARD")	\
     67	EM(netfs_rreq_trace_put_failed,		"PUT FAILED ")	\
     68	EM(netfs_rreq_trace_put_hold,		"PUT HOLD   ")	\
     69	EM(netfs_rreq_trace_put_subreq,		"PUT SUBREQ ")	\
     70	EM(netfs_rreq_trace_put_zero_len,	"PUT ZEROLEN")	\
     71	E_(netfs_rreq_trace_new,		"NEW        ")
     72
     73#define netfs_sreq_ref_traces					\
     74	EM(netfs_sreq_trace_get_copy_to_cache,	"GET COPY2C ")	\
     75	EM(netfs_sreq_trace_get_resubmit,	"GET RESUBMIT")	\
     76	EM(netfs_sreq_trace_get_short_read,	"GET SHORTRD")	\
     77	EM(netfs_sreq_trace_new,		"NEW        ")	\
     78	EM(netfs_sreq_trace_put_clear,		"PUT CLEAR  ")	\
     79	EM(netfs_sreq_trace_put_failed,		"PUT FAILED ")	\
     80	EM(netfs_sreq_trace_put_merged,		"PUT MERGED ")	\
     81	EM(netfs_sreq_trace_put_no_copy,	"PUT NO COPY")	\
     82	E_(netfs_sreq_trace_put_terminated,	"PUT TERM   ")
     83
     84#ifndef __NETFS_DECLARE_TRACE_ENUMS_ONCE_ONLY
     85#define __NETFS_DECLARE_TRACE_ENUMS_ONCE_ONLY
     86
     87#undef EM
     88#undef E_
     89#define EM(a, b) a,
     90#define E_(a, b) a
     91
     92enum netfs_read_trace { netfs_read_traces } __mode(byte);
     93enum netfs_rreq_trace { netfs_rreq_traces } __mode(byte);
     94enum netfs_sreq_trace { netfs_sreq_traces } __mode(byte);
     95enum netfs_failure { netfs_failures } __mode(byte);
     96enum netfs_rreq_ref_trace { netfs_rreq_ref_traces } __mode(byte);
     97enum netfs_sreq_ref_trace { netfs_sreq_ref_traces } __mode(byte);
     98
     99#endif
    100
    101/*
    102 * Export enum symbols via userspace.
    103 */
    104#undef EM
    105#undef E_
    106#define EM(a, b) TRACE_DEFINE_ENUM(a);
    107#define E_(a, b) TRACE_DEFINE_ENUM(a);
    108
    109netfs_read_traces;
    110netfs_rreq_origins;
    111netfs_rreq_traces;
    112netfs_sreq_sources;
    113netfs_sreq_traces;
    114netfs_failures;
    115netfs_rreq_ref_traces;
    116netfs_sreq_ref_traces;
    117
    118/*
    119 * Now redefine the EM() and E_() macros to map the enums to the strings that
    120 * will be printed in the output.
    121 */
    122#undef EM
    123#undef E_
    124#define EM(a, b)	{ a, b },
    125#define E_(a, b)	{ a, b }
    126
    127TRACE_EVENT(netfs_read,
    128	    TP_PROTO(struct netfs_io_request *rreq,
    129		     loff_t start, size_t len,
    130		     enum netfs_read_trace what),
    131
    132	    TP_ARGS(rreq, start, len, what),
    133
    134	    TP_STRUCT__entry(
    135		    __field(unsigned int,		rreq		)
    136		    __field(unsigned int,		cookie		)
    137		    __field(loff_t,			start		)
    138		    __field(size_t,			len		)
    139		    __field(enum netfs_read_trace,	what		)
    140		    __field(unsigned int,		netfs_inode	)
    141			     ),
    142
    143	    TP_fast_assign(
    144		    __entry->rreq	= rreq->debug_id;
    145		    __entry->cookie	= rreq->cache_resources.debug_id;
    146		    __entry->start	= start;
    147		    __entry->len	= len;
    148		    __entry->what	= what;
    149		    __entry->netfs_inode = rreq->inode->i_ino;
    150			   ),
    151
    152	    TP_printk("R=%08x %s c=%08x ni=%x s=%llx %zx",
    153		      __entry->rreq,
    154		      __print_symbolic(__entry->what, netfs_read_traces),
    155		      __entry->cookie,
    156		      __entry->netfs_inode,
    157		      __entry->start, __entry->len)
    158	    );
    159
    160TRACE_EVENT(netfs_rreq,
    161	    TP_PROTO(struct netfs_io_request *rreq,
    162		     enum netfs_rreq_trace what),
    163
    164	    TP_ARGS(rreq, what),
    165
    166	    TP_STRUCT__entry(
    167		    __field(unsigned int,		rreq		)
    168		    __field(unsigned int,		flags		)
    169		    __field(enum netfs_io_origin,	origin		)
    170		    __field(enum netfs_rreq_trace,	what		)
    171			     ),
    172
    173	    TP_fast_assign(
    174		    __entry->rreq	= rreq->debug_id;
    175		    __entry->flags	= rreq->flags;
    176		    __entry->origin	= rreq->origin;
    177		    __entry->what	= what;
    178			   ),
    179
    180	    TP_printk("R=%08x %s %s f=%02x",
    181		      __entry->rreq,
    182		      __print_symbolic(__entry->origin, netfs_rreq_origins),
    183		      __print_symbolic(__entry->what, netfs_rreq_traces),
    184		      __entry->flags)
    185	    );
    186
    187TRACE_EVENT(netfs_sreq,
    188	    TP_PROTO(struct netfs_io_subrequest *sreq,
    189		     enum netfs_sreq_trace what),
    190
    191	    TP_ARGS(sreq, what),
    192
    193	    TP_STRUCT__entry(
    194		    __field(unsigned int,		rreq		)
    195		    __field(unsigned short,		index		)
    196		    __field(short,			error		)
    197		    __field(unsigned short,		flags		)
    198		    __field(enum netfs_io_source,	source		)
    199		    __field(enum netfs_sreq_trace,	what		)
    200		    __field(size_t,			len		)
    201		    __field(size_t,			transferred	)
    202		    __field(loff_t,			start		)
    203			     ),
    204
    205	    TP_fast_assign(
    206		    __entry->rreq	= sreq->rreq->debug_id;
    207		    __entry->index	= sreq->debug_index;
    208		    __entry->error	= sreq->error;
    209		    __entry->flags	= sreq->flags;
    210		    __entry->source	= sreq->source;
    211		    __entry->what	= what;
    212		    __entry->len	= sreq->len;
    213		    __entry->transferred = sreq->transferred;
    214		    __entry->start	= sreq->start;
    215			   ),
    216
    217	    TP_printk("R=%08x[%u] %s %s f=%02x s=%llx %zx/%zx e=%d",
    218		      __entry->rreq, __entry->index,
    219		      __print_symbolic(__entry->source, netfs_sreq_sources),
    220		      __print_symbolic(__entry->what, netfs_sreq_traces),
    221		      __entry->flags,
    222		      __entry->start, __entry->transferred, __entry->len,
    223		      __entry->error)
    224	    );
    225
    226TRACE_EVENT(netfs_failure,
    227	    TP_PROTO(struct netfs_io_request *rreq,
    228		     struct netfs_io_subrequest *sreq,
    229		     int error, enum netfs_failure what),
    230
    231	    TP_ARGS(rreq, sreq, error, what),
    232
    233	    TP_STRUCT__entry(
    234		    __field(unsigned int,		rreq		)
    235		    __field(short,			index		)
    236		    __field(short,			error		)
    237		    __field(unsigned short,		flags		)
    238		    __field(enum netfs_io_source,	source		)
    239		    __field(enum netfs_failure,		what		)
    240		    __field(size_t,			len		)
    241		    __field(size_t,			transferred	)
    242		    __field(loff_t,			start		)
    243			     ),
    244
    245	    TP_fast_assign(
    246		    __entry->rreq	= rreq->debug_id;
    247		    __entry->index	= sreq ? sreq->debug_index : -1;
    248		    __entry->error	= error;
    249		    __entry->flags	= sreq ? sreq->flags : 0;
    250		    __entry->source	= sreq ? sreq->source : NETFS_INVALID_READ;
    251		    __entry->what	= what;
    252		    __entry->len	= sreq ? sreq->len : rreq->len;
    253		    __entry->transferred = sreq ? sreq->transferred : 0;
    254		    __entry->start	= sreq ? sreq->start : 0;
    255			   ),
    256
    257	    TP_printk("R=%08x[%d] %s f=%02x s=%llx %zx/%zx %s e=%d",
    258		      __entry->rreq, __entry->index,
    259		      __print_symbolic(__entry->source, netfs_sreq_sources),
    260		      __entry->flags,
    261		      __entry->start, __entry->transferred, __entry->len,
    262		      __print_symbolic(__entry->what, netfs_failures),
    263		      __entry->error)
    264	    );
    265
    266TRACE_EVENT(netfs_rreq_ref,
    267	    TP_PROTO(unsigned int rreq_debug_id, int ref,
    268		     enum netfs_rreq_ref_trace what),
    269
    270	    TP_ARGS(rreq_debug_id, ref, what),
    271
    272	    TP_STRUCT__entry(
    273		    __field(unsigned int,		rreq		)
    274		    __field(int,			ref		)
    275		    __field(enum netfs_rreq_ref_trace,	what		)
    276			     ),
    277
    278	    TP_fast_assign(
    279		    __entry->rreq	= rreq_debug_id;
    280		    __entry->ref	= ref;
    281		    __entry->what	= what;
    282			   ),
    283
    284	    TP_printk("R=%08x %s r=%u",
    285		      __entry->rreq,
    286		      __print_symbolic(__entry->what, netfs_rreq_ref_traces),
    287		      __entry->ref)
    288	    );
    289
    290TRACE_EVENT(netfs_sreq_ref,
    291	    TP_PROTO(unsigned int rreq_debug_id, unsigned int subreq_debug_index,
    292		     int ref, enum netfs_sreq_ref_trace what),
    293
    294	    TP_ARGS(rreq_debug_id, subreq_debug_index, ref, what),
    295
    296	    TP_STRUCT__entry(
    297		    __field(unsigned int,		rreq		)
    298		    __field(unsigned int,		subreq		)
    299		    __field(int,			ref		)
    300		    __field(enum netfs_sreq_ref_trace,	what		)
    301			     ),
    302
    303	    TP_fast_assign(
    304		    __entry->rreq	= rreq_debug_id;
    305		    __entry->subreq	= subreq_debug_index;
    306		    __entry->ref	= ref;
    307		    __entry->what	= what;
    308			   ),
    309
    310	    TP_printk("R=%08x[%x] %s r=%u",
    311		      __entry->rreq,
    312		      __entry->subreq,
    313		      __print_symbolic(__entry->what, netfs_sreq_ref_traces),
    314		      __entry->ref)
    315	    );
    316
    317#undef EM
    318#undef E_
    319#endif /* _TRACE_NETFS_H */
    320
    321/* This part must be outside protection */
    322#include <trace/define_trace.h>