Commit | Line | Data |
---|---|---|
b4a461e7 HX |
1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | #ifndef _LINUX_RATELIMIT_TYPES_H | |
3 | #define _LINUX_RATELIMIT_TYPES_H | |
4 | ||
5 | #include <linux/bits.h> | |
6 | #include <linux/param.h> | |
77993b59 | 7 | #include <linux/spinlock_types_raw.h> |
b4a461e7 HX |
8 | |
9 | #define DEFAULT_RATELIMIT_INTERVAL (5 * HZ) | |
10 | #define DEFAULT_RATELIMIT_BURST 10 | |
11 | ||
12 | /* issue num suppressed message on exit */ | |
13 | #define RATELIMIT_MSG_ON_RELEASE BIT(0) | |
14 | ||
15 | struct ratelimit_state { | |
16 | raw_spinlock_t lock; /* protect the state */ | |
17 | ||
18 | int interval; | |
19 | int burst; | |
20 | int printed; | |
21 | int missed; | |
22 | unsigned long begin; | |
23 | unsigned long flags; | |
24 | }; | |
25 | ||
c01d4d0a JD |
26 | #define RATELIMIT_STATE_INIT_FLAGS(name, interval_init, burst_init, flags_init) { \ |
27 | .lock = __RAW_SPIN_LOCK_UNLOCKED(name.lock), \ | |
28 | .interval = interval_init, \ | |
29 | .burst = burst_init, \ | |
30 | .flags = flags_init, \ | |
b4a461e7 HX |
31 | } |
32 | ||
c01d4d0a JD |
33 | #define RATELIMIT_STATE_INIT(name, interval_init, burst_init) \ |
34 | RATELIMIT_STATE_INIT_FLAGS(name, interval_init, burst_init, 0) | |
35 | ||
b4a461e7 HX |
36 | #define RATELIMIT_STATE_INIT_DISABLED \ |
37 | RATELIMIT_STATE_INIT(ratelimit_state, 0, DEFAULT_RATELIMIT_BURST) | |
38 | ||
39 | #define DEFINE_RATELIMIT_STATE(name, interval_init, burst_init) \ | |
40 | \ | |
41 | struct ratelimit_state name = \ | |
42 | RATELIMIT_STATE_INIT(name, interval_init, burst_init) \ | |
43 | ||
44 | extern int ___ratelimit(struct ratelimit_state *rs, const char *func); | |
45 | #define __ratelimit(state) ___ratelimit(state, __func__) | |
46 | ||
47 | #endif /* _LINUX_RATELIMIT_TYPES_H */ |