]>
Commit | Line | Data |
---|---|---|
717115e1 DY |
1 | #ifndef _LINUX_RATELIMIT_H |
2 | #define _LINUX_RATELIMIT_H | |
979f693d | 3 | |
717115e1 | 4 | #include <linux/param.h> |
f40c396a | 5 | #include <linux/spinlock.h> |
717115e1 | 6 | |
979f693d IM |
7 | #define DEFAULT_RATELIMIT_INTERVAL (5 * HZ) |
8 | #define DEFAULT_RATELIMIT_BURST 10 | |
717115e1 DY |
9 | |
10 | struct ratelimit_state { | |
979f693d IM |
11 | spinlock_t lock; /* protect the state */ |
12 | ||
13 | int interval; | |
14 | int burst; | |
15 | int printed; | |
16 | int missed; | |
17 | unsigned long begin; | |
717115e1 DY |
18 | }; |
19 | ||
979f693d IM |
20 | #define DEFINE_RATELIMIT_STATE(name, interval_init, burst_init) \ |
21 | \ | |
22 | struct ratelimit_state name = { \ | |
23 | .lock = __SPIN_LOCK_UNLOCKED(name.lock), \ | |
24 | .interval = interval_init, \ | |
25 | .burst = burst_init, \ | |
26 | } | |
717115e1 | 27 | |
f40c396a OH |
28 | static inline void ratelimit_state_init(struct ratelimit_state *rs, |
29 | int interval, int burst) | |
30 | { | |
31 | spin_lock_init(&rs->lock); | |
32 | rs->interval = interval; | |
33 | rs->burst = burst; | |
34 | rs->printed = 0; | |
35 | rs->missed = 0; | |
36 | rs->begin = 0; | |
37 | } | |
38 | ||
f5d87d85 NK |
39 | extern struct ratelimit_state printk_ratelimit_state; |
40 | ||
5c828713 CB |
41 | extern int ___ratelimit(struct ratelimit_state *rs, const char *func); |
42 | #define __ratelimit(state) ___ratelimit(state, __func__) | |
979f693d IM |
43 | |
44 | #endif /* _LINUX_RATELIMIT_H */ |