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

fscache.h (14255B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/* FS-Cache 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 fscache
      9
     10#if !defined(_TRACE_FSCACHE_H) || defined(TRACE_HEADER_MULTI_READ)
     11#define _TRACE_FSCACHE_H
     12
     13#include <linux/fscache.h>
     14#include <linux/tracepoint.h>
     15
     16/*
     17 * Define enums for tracing information.
     18 */
     19#ifndef __FSCACHE_DECLARE_TRACE_ENUMS_ONCE_ONLY
     20#define __FSCACHE_DECLARE_TRACE_ENUMS_ONCE_ONLY
     21
     22enum fscache_cache_trace {
     23	fscache_cache_collision,
     24	fscache_cache_get_acquire,
     25	fscache_cache_new_acquire,
     26	fscache_cache_put_alloc_volume,
     27	fscache_cache_put_cache,
     28	fscache_cache_put_prep_failed,
     29	fscache_cache_put_relinquish,
     30	fscache_cache_put_volume,
     31};
     32
     33enum fscache_volume_trace {
     34	fscache_volume_collision,
     35	fscache_volume_get_cookie,
     36	fscache_volume_get_create_work,
     37	fscache_volume_get_hash_collision,
     38	fscache_volume_free,
     39	fscache_volume_new_acquire,
     40	fscache_volume_put_cookie,
     41	fscache_volume_put_create_work,
     42	fscache_volume_put_hash_collision,
     43	fscache_volume_put_relinquish,
     44	fscache_volume_see_create_work,
     45	fscache_volume_see_hash_wake,
     46	fscache_volume_wait_create_work,
     47};
     48
     49enum fscache_cookie_trace {
     50	fscache_cookie_collision,
     51	fscache_cookie_discard,
     52	fscache_cookie_get_attach_object,
     53	fscache_cookie_get_end_access,
     54	fscache_cookie_get_hash_collision,
     55	fscache_cookie_get_inval_work,
     56	fscache_cookie_get_lru,
     57	fscache_cookie_get_use_work,
     58	fscache_cookie_new_acquire,
     59	fscache_cookie_put_hash_collision,
     60	fscache_cookie_put_lru,
     61	fscache_cookie_put_object,
     62	fscache_cookie_put_over_queued,
     63	fscache_cookie_put_relinquish,
     64	fscache_cookie_put_withdrawn,
     65	fscache_cookie_put_work,
     66	fscache_cookie_see_active,
     67	fscache_cookie_see_lru_discard,
     68	fscache_cookie_see_lru_do_one,
     69	fscache_cookie_see_relinquish,
     70	fscache_cookie_see_withdraw,
     71	fscache_cookie_see_work,
     72};
     73
     74enum fscache_active_trace {
     75	fscache_active_use,
     76	fscache_active_use_modify,
     77	fscache_active_unuse,
     78};
     79
     80enum fscache_access_trace {
     81	fscache_access_acquire_volume,
     82	fscache_access_acquire_volume_end,
     83	fscache_access_cache_pin,
     84	fscache_access_cache_unpin,
     85	fscache_access_invalidate_cookie,
     86	fscache_access_invalidate_cookie_end,
     87	fscache_access_io_end,
     88	fscache_access_io_not_live,
     89	fscache_access_io_read,
     90	fscache_access_io_resize,
     91	fscache_access_io_wait,
     92	fscache_access_io_write,
     93	fscache_access_lookup_cookie,
     94	fscache_access_lookup_cookie_end,
     95	fscache_access_lookup_cookie_end_failed,
     96	fscache_access_relinquish_volume,
     97	fscache_access_relinquish_volume_end,
     98	fscache_access_unlive,
     99};
    100
    101#endif
    102
    103/*
    104 * Declare tracing information enums and their string mappings for display.
    105 */
    106#define fscache_cache_traces						\
    107	EM(fscache_cache_collision,		"*COLLIDE*")		\
    108	EM(fscache_cache_get_acquire,		"GET acq  ")		\
    109	EM(fscache_cache_new_acquire,		"NEW acq  ")		\
    110	EM(fscache_cache_put_alloc_volume,	"PUT alvol")		\
    111	EM(fscache_cache_put_cache,		"PUT cache")		\
    112	EM(fscache_cache_put_prep_failed,	"PUT pfail")		\
    113	EM(fscache_cache_put_relinquish,	"PUT relnq")		\
    114	E_(fscache_cache_put_volume,		"PUT vol  ")
    115
    116#define fscache_volume_traces						\
    117	EM(fscache_volume_collision,		"*COLLIDE*")		\
    118	EM(fscache_volume_get_cookie,		"GET cook ")		\
    119	EM(fscache_volume_get_create_work,	"GET creat")		\
    120	EM(fscache_volume_get_hash_collision,	"GET hcoll")		\
    121	EM(fscache_volume_free,			"FREE     ")		\
    122	EM(fscache_volume_new_acquire,		"NEW acq  ")		\
    123	EM(fscache_volume_put_cookie,		"PUT cook ")		\
    124	EM(fscache_volume_put_create_work,	"PUT creat")		\
    125	EM(fscache_volume_put_hash_collision,	"PUT hcoll")		\
    126	EM(fscache_volume_put_relinquish,	"PUT relnq")		\
    127	EM(fscache_volume_see_create_work,	"SEE creat")		\
    128	EM(fscache_volume_see_hash_wake,	"SEE hwake")		\
    129	E_(fscache_volume_wait_create_work,	"WAIT crea")
    130
    131#define fscache_cookie_traces						\
    132	EM(fscache_cookie_collision,		"*COLLIDE*")		\
    133	EM(fscache_cookie_discard,		"DISCARD  ")		\
    134	EM(fscache_cookie_get_attach_object,	"GET attch")		\
    135	EM(fscache_cookie_get_hash_collision,	"GET hcoll")		\
    136	EM(fscache_cookie_get_end_access,	"GQ  endac")		\
    137	EM(fscache_cookie_get_inval_work,	"GQ  inval")		\
    138	EM(fscache_cookie_get_lru,		"GET lru  ")		\
    139	EM(fscache_cookie_get_use_work,		"GQ  use  ")		\
    140	EM(fscache_cookie_new_acquire,		"NEW acq  ")		\
    141	EM(fscache_cookie_put_hash_collision,	"PUT hcoll")		\
    142	EM(fscache_cookie_put_lru,		"PUT lru  ")		\
    143	EM(fscache_cookie_put_object,		"PUT obj  ")		\
    144	EM(fscache_cookie_put_over_queued,	"PQ  overq")		\
    145	EM(fscache_cookie_put_relinquish,	"PUT relnq")		\
    146	EM(fscache_cookie_put_withdrawn,	"PUT wthdn")		\
    147	EM(fscache_cookie_put_work,		"PQ  work ")		\
    148	EM(fscache_cookie_see_active,		"-   activ")		\
    149	EM(fscache_cookie_see_lru_discard,	"-   x-lru")		\
    150	EM(fscache_cookie_see_lru_do_one,	"-   lrudo")		\
    151	EM(fscache_cookie_see_relinquish,	"-   x-rlq")		\
    152	EM(fscache_cookie_see_withdraw,		"-   x-wth")		\
    153	E_(fscache_cookie_see_work,		"-   work ")
    154
    155#define fscache_active_traces		\
    156	EM(fscache_active_use,			"USE          ")	\
    157	EM(fscache_active_use_modify,		"USE-m        ")	\
    158	E_(fscache_active_unuse,		"UNUSE        ")
    159
    160#define fscache_access_traces		\
    161	EM(fscache_access_acquire_volume,	"BEGIN acq_vol")	\
    162	EM(fscache_access_acquire_volume_end,	"END   acq_vol")	\
    163	EM(fscache_access_cache_pin,		"PIN   cache  ")	\
    164	EM(fscache_access_cache_unpin,		"UNPIN cache  ")	\
    165	EM(fscache_access_invalidate_cookie,	"BEGIN inval  ")	\
    166	EM(fscache_access_invalidate_cookie_end,"END   inval  ")	\
    167	EM(fscache_access_io_end,		"END   io     ")	\
    168	EM(fscache_access_io_not_live,		"END   io_notl")	\
    169	EM(fscache_access_io_read,		"BEGIN io_read")	\
    170	EM(fscache_access_io_resize,		"BEGIN io_resz")	\
    171	EM(fscache_access_io_wait,		"WAIT  io     ")	\
    172	EM(fscache_access_io_write,		"BEGIN io_writ")	\
    173	EM(fscache_access_lookup_cookie,	"BEGIN lookup ")	\
    174	EM(fscache_access_lookup_cookie_end,	"END   lookup ")	\
    175	EM(fscache_access_lookup_cookie_end_failed,"END   lookupf")	\
    176	EM(fscache_access_relinquish_volume,	"BEGIN rlq_vol")	\
    177	EM(fscache_access_relinquish_volume_end,"END   rlq_vol")	\
    178	E_(fscache_access_unlive,		"END   unlive ")
    179
    180/*
    181 * Export enum symbols via userspace.
    182 */
    183#undef EM
    184#undef E_
    185#define EM(a, b) TRACE_DEFINE_ENUM(a);
    186#define E_(a, b) TRACE_DEFINE_ENUM(a);
    187
    188fscache_cache_traces;
    189fscache_volume_traces;
    190fscache_cookie_traces;
    191fscache_access_traces;
    192
    193/*
    194 * Now redefine the EM() and E_() macros to map the enums to the strings that
    195 * will be printed in the output.
    196 */
    197#undef EM
    198#undef E_
    199#define EM(a, b)	{ a, b },
    200#define E_(a, b)	{ a, b }
    201
    202
    203TRACE_EVENT(fscache_cache,
    204	    TP_PROTO(unsigned int cache_debug_id,
    205		     int usage,
    206		     enum fscache_cache_trace where),
    207
    208	    TP_ARGS(cache_debug_id, usage, where),
    209
    210	    TP_STRUCT__entry(
    211		    __field(unsigned int,		cache		)
    212		    __field(int,			usage		)
    213		    __field(enum fscache_cache_trace,	where		)
    214			     ),
    215
    216	    TP_fast_assign(
    217		    __entry->cache	= cache_debug_id;
    218		    __entry->usage	= usage;
    219		    __entry->where	= where;
    220			   ),
    221
    222	    TP_printk("C=%08x %s r=%d",
    223		      __entry->cache,
    224		      __print_symbolic(__entry->where, fscache_cache_traces),
    225		      __entry->usage)
    226	    );
    227
    228TRACE_EVENT(fscache_volume,
    229	    TP_PROTO(unsigned int volume_debug_id,
    230		     int usage,
    231		     enum fscache_volume_trace where),
    232
    233	    TP_ARGS(volume_debug_id, usage, where),
    234
    235	    TP_STRUCT__entry(
    236		    __field(unsigned int,		volume		)
    237		    __field(int,			usage		)
    238		    __field(enum fscache_volume_trace,	where		)
    239			     ),
    240
    241	    TP_fast_assign(
    242		    __entry->volume	= volume_debug_id;
    243		    __entry->usage	= usage;
    244		    __entry->where	= where;
    245			   ),
    246
    247	    TP_printk("V=%08x %s u=%d",
    248		      __entry->volume,
    249		      __print_symbolic(__entry->where, fscache_volume_traces),
    250		      __entry->usage)
    251	    );
    252
    253TRACE_EVENT(fscache_cookie,
    254	    TP_PROTO(unsigned int cookie_debug_id,
    255		     int ref,
    256		     enum fscache_cookie_trace where),
    257
    258	    TP_ARGS(cookie_debug_id, ref, where),
    259
    260	    TP_STRUCT__entry(
    261		    __field(unsigned int,		cookie		)
    262		    __field(int,			ref		)
    263		    __field(enum fscache_cookie_trace,	where		)
    264			     ),
    265
    266	    TP_fast_assign(
    267		    __entry->cookie	= cookie_debug_id;
    268		    __entry->ref	= ref;
    269		    __entry->where	= where;
    270			   ),
    271
    272	    TP_printk("c=%08x %s r=%d",
    273		      __entry->cookie,
    274		      __print_symbolic(__entry->where, fscache_cookie_traces),
    275		      __entry->ref)
    276	    );
    277
    278TRACE_EVENT(fscache_active,
    279	    TP_PROTO(unsigned int cookie_debug_id,
    280		     int ref,
    281		     int n_active,
    282		     int n_accesses,
    283		     enum fscache_active_trace why),
    284
    285	    TP_ARGS(cookie_debug_id, ref, n_active, n_accesses, why),
    286
    287	    TP_STRUCT__entry(
    288		    __field(unsigned int,		cookie		)
    289		    __field(int,			ref		)
    290		    __field(int,			n_active	)
    291		    __field(int,			n_accesses	)
    292		    __field(enum fscache_active_trace,	why		)
    293			     ),
    294
    295	    TP_fast_assign(
    296		    __entry->cookie	= cookie_debug_id;
    297		    __entry->ref	= ref;
    298		    __entry->n_active	= n_active;
    299		    __entry->n_accesses	= n_accesses;
    300		    __entry->why	= why;
    301			   ),
    302
    303	    TP_printk("c=%08x %s r=%d a=%d c=%d",
    304		      __entry->cookie,
    305		      __print_symbolic(__entry->why, fscache_active_traces),
    306		      __entry->ref,
    307		      __entry->n_accesses,
    308		      __entry->n_active)
    309	    );
    310
    311TRACE_EVENT(fscache_access_cache,
    312	    TP_PROTO(unsigned int cache_debug_id,
    313		     int ref,
    314		     int n_accesses,
    315		     enum fscache_access_trace why),
    316
    317	    TP_ARGS(cache_debug_id, ref, n_accesses, why),
    318
    319	    TP_STRUCT__entry(
    320		    __field(unsigned int,		cache		)
    321		    __field(int,			ref		)
    322		    __field(int,			n_accesses	)
    323		    __field(enum fscache_access_trace,	why		)
    324			     ),
    325
    326	    TP_fast_assign(
    327		    __entry->cache	= cache_debug_id;
    328		    __entry->ref	= ref;
    329		    __entry->n_accesses	= n_accesses;
    330		    __entry->why	= why;
    331			   ),
    332
    333	    TP_printk("C=%08x %s r=%d a=%d",
    334		      __entry->cache,
    335		      __print_symbolic(__entry->why, fscache_access_traces),
    336		      __entry->ref,
    337		      __entry->n_accesses)
    338	    );
    339
    340TRACE_EVENT(fscache_access_volume,
    341	    TP_PROTO(unsigned int volume_debug_id,
    342		     unsigned int cookie_debug_id,
    343		     int ref,
    344		     int n_accesses,
    345		     enum fscache_access_trace why),
    346
    347	    TP_ARGS(volume_debug_id, cookie_debug_id, ref, n_accesses, why),
    348
    349	    TP_STRUCT__entry(
    350		    __field(unsigned int,		volume		)
    351		    __field(unsigned int,		cookie		)
    352		    __field(int,			ref		)
    353		    __field(int,			n_accesses	)
    354		    __field(enum fscache_access_trace,	why		)
    355			     ),
    356
    357	    TP_fast_assign(
    358		    __entry->volume	= volume_debug_id;
    359		    __entry->cookie	= cookie_debug_id;
    360		    __entry->ref	= ref;
    361		    __entry->n_accesses	= n_accesses;
    362		    __entry->why	= why;
    363			   ),
    364
    365	    TP_printk("V=%08x c=%08x %s r=%d a=%d",
    366		      __entry->volume,
    367		      __entry->cookie,
    368		      __print_symbolic(__entry->why, fscache_access_traces),
    369		      __entry->ref,
    370		      __entry->n_accesses)
    371	    );
    372
    373TRACE_EVENT(fscache_access,
    374	    TP_PROTO(unsigned int cookie_debug_id,
    375		     int ref,
    376		     int n_accesses,
    377		     enum fscache_access_trace why),
    378
    379	    TP_ARGS(cookie_debug_id, ref, n_accesses, why),
    380
    381	    TP_STRUCT__entry(
    382		    __field(unsigned int,		cookie		)
    383		    __field(int,			ref		)
    384		    __field(int,			n_accesses	)
    385		    __field(enum fscache_access_trace,	why		)
    386			     ),
    387
    388	    TP_fast_assign(
    389		    __entry->cookie	= cookie_debug_id;
    390		    __entry->ref	= ref;
    391		    __entry->n_accesses	= n_accesses;
    392		    __entry->why	= why;
    393			   ),
    394
    395	    TP_printk("c=%08x %s r=%d a=%d",
    396		      __entry->cookie,
    397		      __print_symbolic(__entry->why, fscache_access_traces),
    398		      __entry->ref,
    399		      __entry->n_accesses)
    400	    );
    401
    402TRACE_EVENT(fscache_acquire,
    403	    TP_PROTO(struct fscache_cookie *cookie),
    404
    405	    TP_ARGS(cookie),
    406
    407	    TP_STRUCT__entry(
    408		    __field(unsigned int,		cookie		)
    409		    __field(unsigned int,		volume		)
    410		    __field(int,			v_ref		)
    411		    __field(int,			v_n_cookies	)
    412			     ),
    413
    414	    TP_fast_assign(
    415		    __entry->cookie		= cookie->debug_id;
    416		    __entry->volume		= cookie->volume->debug_id;
    417		    __entry->v_ref		= refcount_read(&cookie->volume->ref);
    418		    __entry->v_n_cookies	= atomic_read(&cookie->volume->n_cookies);
    419			   ),
    420
    421	    TP_printk("c=%08x V=%08x vr=%d vc=%d",
    422		      __entry->cookie,
    423		      __entry->volume, __entry->v_ref, __entry->v_n_cookies)
    424	    );
    425
    426TRACE_EVENT(fscache_relinquish,
    427	    TP_PROTO(struct fscache_cookie *cookie, bool retire),
    428
    429	    TP_ARGS(cookie, retire),
    430
    431	    TP_STRUCT__entry(
    432		    __field(unsigned int,		cookie		)
    433		    __field(unsigned int,		volume		)
    434		    __field(int,			ref		)
    435		    __field(int,			n_active	)
    436		    __field(u8,				flags		)
    437		    __field(bool,			retire		)
    438			     ),
    439
    440	    TP_fast_assign(
    441		    __entry->cookie	= cookie->debug_id;
    442		    __entry->volume	= cookie->volume->debug_id;
    443		    __entry->ref	= refcount_read(&cookie->ref);
    444		    __entry->n_active	= atomic_read(&cookie->n_active);
    445		    __entry->flags	= cookie->flags;
    446		    __entry->retire	= retire;
    447			   ),
    448
    449	    TP_printk("c=%08x V=%08x r=%d U=%d f=%02x rt=%u",
    450		      __entry->cookie, __entry->volume, __entry->ref,
    451		      __entry->n_active, __entry->flags, __entry->retire)
    452	    );
    453
    454TRACE_EVENT(fscache_invalidate,
    455	    TP_PROTO(struct fscache_cookie *cookie, loff_t new_size),
    456
    457	    TP_ARGS(cookie, new_size),
    458
    459	    TP_STRUCT__entry(
    460		    __field(unsigned int,		cookie		)
    461		    __field(loff_t,			new_size	)
    462			     ),
    463
    464	    TP_fast_assign(
    465		    __entry->cookie	= cookie->debug_id;
    466		    __entry->new_size	= new_size;
    467			   ),
    468
    469	    TP_printk("c=%08x sz=%llx",
    470		      __entry->cookie, __entry->new_size)
    471	    );
    472
    473TRACE_EVENT(fscache_resize,
    474	    TP_PROTO(struct fscache_cookie *cookie, loff_t new_size),
    475
    476	    TP_ARGS(cookie, new_size),
    477
    478	    TP_STRUCT__entry(
    479		    __field(unsigned int,		cookie		)
    480		    __field(loff_t,			old_size	)
    481		    __field(loff_t,			new_size	)
    482			     ),
    483
    484	    TP_fast_assign(
    485		    __entry->cookie	= cookie->debug_id;
    486		    __entry->old_size	= cookie->object_size;
    487		    __entry->new_size	= new_size;
    488			   ),
    489
    490	    TP_printk("c=%08x os=%08llx sz=%08llx",
    491		      __entry->cookie,
    492		      __entry->old_size,
    493		      __entry->new_size)
    494	    );
    495
    496#endif /* _TRACE_FSCACHE_H */
    497
    498/* This part must be outside protection */
    499#include <trace/define_trace.h>