2
* ratelimit.c - Do something with rate limit.
4
* Isolated from kernel/printk.c by Dave Young <hidave.darkstar@gmail.com>
6
* 2008-05-01 rewrite the function and use a ratelimit_state data struct as
7
* parameter. Now every user can use their own standalone ratelimit_state.
9
* This file is released under the GPLv2.
12
#include <linux/ratelimit.h>
13
#include <linux/jiffies.h>
14
#include <linux/module.h>
17
* __ratelimit - rate limiting
18
* @rs: ratelimit_state data
19
* @func: name of calling function
21
* This enforces a rate limit: not more than @rs->burst callbacks
22
* in every @rs->interval
25
* 0 means callbacks will be suppressed.
26
* 1 means go ahead and do it.
28
int ___ratelimit(struct ratelimit_state *rs, const char *func)
37
* If we contend on this state's lock then almost
38
* by definition we are too busy to print a message,
39
* in addition to the one that will be printed by
40
* the entity that is holding the lock already:
42
if (!raw_spin_trylock_irqsave(&rs->lock, flags))
48
if (time_is_before_jiffies(rs->begin + rs->interval)) {
50
printk(KERN_WARNING "%s: %d callbacks suppressed\n",
56
if (rs->burst && rs->burst > rs->printed) {
63
raw_spin_unlock_irqrestore(&rs->lock, flags);
67
EXPORT_SYMBOL(___ratelimit);