• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6/include/linux/
1#ifndef _LINUX_RATELIMIT_H
2#define _LINUX_RATELIMIT_H
3
4#include <linux/param.h>
5#include <linux/spinlock.h>
6
7#define DEFAULT_RATELIMIT_INTERVAL	(5 * HZ)
8#define DEFAULT_RATELIMIT_BURST		10
9
10struct ratelimit_state {
11	spinlock_t	lock;		/* protect the state */
12
13	int		interval;
14	int		burst;
15	int		printed;
16	int		missed;
17	unsigned long	begin;
18};
19
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	}
27
28static 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
39extern int ___ratelimit(struct ratelimit_state *rs, const char *func);
40#define __ratelimit(state) ___ratelimit(state, __func__)
41
42#endif /* _LINUX_RATELIMIT_H */
43