xref: /OK3568_Linux_fs/kernel/drivers/block/null_blk_trace.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * null_blk device driver tracepoints.
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Copyright (C) 2020 Western Digital Corporation or its affiliates.
6*4882a593Smuzhiyun  */
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun #undef TRACE_SYSTEM
9*4882a593Smuzhiyun #define TRACE_SYSTEM nullb
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun #if !defined(_TRACE_NULLB_H) || defined(TRACE_HEADER_MULTI_READ)
12*4882a593Smuzhiyun #define _TRACE_NULLB_H
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun #include <linux/tracepoint.h>
15*4882a593Smuzhiyun #include <linux/trace_seq.h>
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun #include "null_blk.h"
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun const char *nullb_trace_disk_name(struct trace_seq *p, char *name);
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun #define __print_disk_name(name) nullb_trace_disk_name(p, name)
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun #ifndef TRACE_HEADER_MULTI_READ
__assign_disk_name(char * name,struct gendisk * disk)24*4882a593Smuzhiyun static inline void __assign_disk_name(char *name, struct gendisk *disk)
25*4882a593Smuzhiyun {
26*4882a593Smuzhiyun 	if (disk)
27*4882a593Smuzhiyun 		memcpy(name, disk->disk_name, DISK_NAME_LEN);
28*4882a593Smuzhiyun 	else
29*4882a593Smuzhiyun 		memset(name, 0, DISK_NAME_LEN);
30*4882a593Smuzhiyun }
31*4882a593Smuzhiyun #endif
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun TRACE_EVENT(nullb_zone_op,
34*4882a593Smuzhiyun 	    TP_PROTO(struct nullb_cmd *cmd, unsigned int zone_no,
35*4882a593Smuzhiyun 		     unsigned int zone_cond),
36*4882a593Smuzhiyun 	    TP_ARGS(cmd, zone_no, zone_cond),
37*4882a593Smuzhiyun 	    TP_STRUCT__entry(
38*4882a593Smuzhiyun 		__array(char, disk, DISK_NAME_LEN)
39*4882a593Smuzhiyun 		__field(enum req_opf, op)
40*4882a593Smuzhiyun 		__field(unsigned int, zone_no)
41*4882a593Smuzhiyun 		__field(unsigned int, zone_cond)
42*4882a593Smuzhiyun 	    ),
43*4882a593Smuzhiyun 	    TP_fast_assign(
44*4882a593Smuzhiyun 		__entry->op = req_op(cmd->rq);
45*4882a593Smuzhiyun 		__entry->zone_no = zone_no;
46*4882a593Smuzhiyun 		__entry->zone_cond = zone_cond;
47*4882a593Smuzhiyun 		__assign_disk_name(__entry->disk, cmd->rq->rq_disk);
48*4882a593Smuzhiyun 	    ),
49*4882a593Smuzhiyun 	    TP_printk("%s req=%-15s zone_no=%u zone_cond=%-10s",
50*4882a593Smuzhiyun 		      __print_disk_name(__entry->disk),
51*4882a593Smuzhiyun 		      blk_op_str(__entry->op),
52*4882a593Smuzhiyun 		      __entry->zone_no,
53*4882a593Smuzhiyun 		      blk_zone_cond_str(__entry->zone_cond))
54*4882a593Smuzhiyun );
55*4882a593Smuzhiyun 
56*4882a593Smuzhiyun TRACE_EVENT(nullb_report_zones,
57*4882a593Smuzhiyun 	    TP_PROTO(struct nullb *nullb, unsigned int nr_zones),
58*4882a593Smuzhiyun 	    TP_ARGS(nullb, nr_zones),
59*4882a593Smuzhiyun 	    TP_STRUCT__entry(
60*4882a593Smuzhiyun 		__array(char, disk, DISK_NAME_LEN)
61*4882a593Smuzhiyun 		__field(unsigned int, nr_zones)
62*4882a593Smuzhiyun 	    ),
63*4882a593Smuzhiyun 	    TP_fast_assign(
64*4882a593Smuzhiyun 		__entry->nr_zones = nr_zones;
65*4882a593Smuzhiyun 		__assign_disk_name(__entry->disk, nullb->disk);
66*4882a593Smuzhiyun 	    ),
67*4882a593Smuzhiyun 	    TP_printk("%s nr_zones=%u",
68*4882a593Smuzhiyun 		      __print_disk_name(__entry->disk), __entry->nr_zones)
69*4882a593Smuzhiyun );
70*4882a593Smuzhiyun 
71*4882a593Smuzhiyun #endif /* _TRACE_NULLB_H */
72*4882a593Smuzhiyun 
73*4882a593Smuzhiyun #undef TRACE_INCLUDE_PATH
74*4882a593Smuzhiyun #define TRACE_INCLUDE_PATH .
75*4882a593Smuzhiyun #undef TRACE_INCLUDE_FILE
76*4882a593Smuzhiyun #define TRACE_INCLUDE_FILE null_blk_trace
77*4882a593Smuzhiyun 
78*4882a593Smuzhiyun /* This part must be outside protection */
79*4882a593Smuzhiyun #include <trace/define_trace.h>
80