Merge tag 'fbdev-v5.2' of git://github.com/bzolnier/linux
[sfrench/cifs-2.6.git] / include / trace / events / wbt.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #undef TRACE_SYSTEM
3 #define TRACE_SYSTEM wbt
4
5 #if !defined(_TRACE_WBT_H) || defined(TRACE_HEADER_MULTI_READ)
6 #define _TRACE_WBT_H
7
8 #include <linux/tracepoint.h>
9 #include "../../../block/blk-wbt.h"
10
11 /**
12  * wbt_stat - trace stats for blk_wb
13  * @stat: array of read/write stats
14  */
15 TRACE_EVENT(wbt_stat,
16
17         TP_PROTO(struct backing_dev_info *bdi, struct blk_rq_stat *stat),
18
19         TP_ARGS(bdi, stat),
20
21         TP_STRUCT__entry(
22                 __array(char, name, 32)
23                 __field(s64, rmean)
24                 __field(u64, rmin)
25                 __field(u64, rmax)
26                 __field(s64, rnr_samples)
27                 __field(s64, rtime)
28                 __field(s64, wmean)
29                 __field(u64, wmin)
30                 __field(u64, wmax)
31                 __field(s64, wnr_samples)
32                 __field(s64, wtime)
33         ),
34
35         TP_fast_assign(
36                 strncpy(__entry->name, dev_name(bdi->dev), 32);
37                 __entry->rmean          = stat[0].mean;
38                 __entry->rmin           = stat[0].min;
39                 __entry->rmax           = stat[0].max;
40                 __entry->rnr_samples    = stat[0].nr_samples;
41                 __entry->wmean          = stat[1].mean;
42                 __entry->wmin           = stat[1].min;
43                 __entry->wmax           = stat[1].max;
44                 __entry->wnr_samples    = stat[1].nr_samples;
45         ),
46
47         TP_printk("%s: rmean=%llu, rmin=%llu, rmax=%llu, rsamples=%llu, "
48                   "wmean=%llu, wmin=%llu, wmax=%llu, wsamples=%llu\n",
49                   __entry->name, __entry->rmean, __entry->rmin, __entry->rmax,
50                   __entry->rnr_samples, __entry->wmean, __entry->wmin,
51                   __entry->wmax, __entry->wnr_samples)
52 );
53
54 /**
55  * wbt_lat - trace latency event
56  * @lat: latency trigger
57  */
58 TRACE_EVENT(wbt_lat,
59
60         TP_PROTO(struct backing_dev_info *bdi, unsigned long lat),
61
62         TP_ARGS(bdi, lat),
63
64         TP_STRUCT__entry(
65                 __array(char, name, 32)
66                 __field(unsigned long, lat)
67         ),
68
69         TP_fast_assign(
70                 strncpy(__entry->name, dev_name(bdi->dev), 32);
71                 __entry->lat = div_u64(lat, 1000);
72         ),
73
74         TP_printk("%s: latency %lluus\n", __entry->name,
75                         (unsigned long long) __entry->lat)
76 );
77
78 /**
79  * wbt_step - trace wb event step
80  * @msg: context message
81  * @step: the current scale step count
82  * @window: the current monitoring window
83  * @bg: the current background queue limit
84  * @normal: the current normal writeback limit
85  * @max: the current max throughput writeback limit
86  */
87 TRACE_EVENT(wbt_step,
88
89         TP_PROTO(struct backing_dev_info *bdi, const char *msg,
90                  int step, unsigned long window, unsigned int bg,
91                  unsigned int normal, unsigned int max),
92
93         TP_ARGS(bdi, msg, step, window, bg, normal, max),
94
95         TP_STRUCT__entry(
96                 __array(char, name, 32)
97                 __field(const char *, msg)
98                 __field(int, step)
99                 __field(unsigned long, window)
100                 __field(unsigned int, bg)
101                 __field(unsigned int, normal)
102                 __field(unsigned int, max)
103         ),
104
105         TP_fast_assign(
106                 strncpy(__entry->name, dev_name(bdi->dev), 32);
107                 __entry->msg    = msg;
108                 __entry->step   = step;
109                 __entry->window = div_u64(window, 1000);
110                 __entry->bg     = bg;
111                 __entry->normal = normal;
112                 __entry->max    = max;
113         ),
114
115         TP_printk("%s: %s: step=%d, window=%luus, background=%u, normal=%u, max=%u\n",
116                   __entry->name, __entry->msg, __entry->step, __entry->window,
117                   __entry->bg, __entry->normal, __entry->max)
118 );
119
120 /**
121  * wbt_timer - trace wb timer event
122  * @status: timer state status
123  * @step: the current scale step count
124  * @inflight: tracked writes inflight
125  */
126 TRACE_EVENT(wbt_timer,
127
128         TP_PROTO(struct backing_dev_info *bdi, unsigned int status,
129                  int step, unsigned int inflight),
130
131         TP_ARGS(bdi, status, step, inflight),
132
133         TP_STRUCT__entry(
134                 __array(char, name, 32)
135                 __field(unsigned int, status)
136                 __field(int, step)
137                 __field(unsigned int, inflight)
138         ),
139
140         TP_fast_assign(
141                 strncpy(__entry->name, dev_name(bdi->dev), 32);
142                 __entry->status         = status;
143                 __entry->step           = step;
144                 __entry->inflight       = inflight;
145         ),
146
147         TP_printk("%s: status=%u, step=%d, inflight=%u\n", __entry->name,
148                   __entry->status, __entry->step, __entry->inflight)
149 );
150
151 #endif /* _TRACE_WBT_H */
152
153 /* This part must be outside protection */
154 #include <trace/define_trace.h>