/* * ratelimit.c - Do something with rate limit. * * Isolated from kernel/printk.c by Dave Young <hidave.darkstar@gmail.com> * * 2008-05-01 rewrite the function and use a ratelimit_state data struct as * parameter. Now every user can use their own standalone ratelimit_state. * * This file is released under the GPLv2. */ #include <linux/ratelimit.h> #include <linux/jiffies.h> #include <linux/export.h> /* * __ratelimit - rate limiting * @rs: ratelimit_state data * @func: name of calling function * * This enforces a rate limit: not more than @rs->burst callbacks * in every @rs->interval * * RETURNS: * 0 means callbacks will be suppressed. * 1 means go ahead and do it. */
int ___ratelimit(struct ratelimit_state *rs, const char *func) { unsigned long flags; int ret; if (!rs->interval) return 1; /* * If we contend on this state's lock then almost * by definition we are too busy to print a message, * in addition to the one that will be printed by * the entity that is holding the lock already: */ if (!raw_spin_trylock_irqsave(&rs->lock, flags)) return 0; if (!rs->begin) rs->begin = jiffies; if (time_is_before_jiffies(rs->begin + rs->interval)) { if (rs->missed) { if (!(rs->flags & RATELIMIT_MSG_ON_RELEASE)) { printk_deferred(KERN_WARNING "%s: %d callbacks suppressed\n", func, rs->missed); rs->missed = 0; } } rs->begin = jiffies; rs->printed = 0; } if (rs->burst && rs->burst > rs->printed) { rs->printed++; ret = 1; } else { rs->missed++; ret = 0; } raw_spin_unlock_irqrestore(&rs->lock, flags); return ret; }Contributors
Person | Tokens | Prop | Commits | CommitProp |
Dave Young | 111 | 62.36% | 2 | 20.00% |
Ingo Molnar | 31 | 17.42% | 2 | 20.00% |
Borislav Petkov | 20 | 11.24% | 1 | 10.00% |
Christian Bornträger | 7 | 3.93% | 1 | 10.00% |
Alexey Dobriyan | 4 | 2.25% | 1 | 10.00% |
Sergey Senozhatsky | 2 | 1.12% | 1 | 10.00% |
Thomas Gleixner | 2 | 1.12% | 1 | 10.00% |
Yong Zhang | 1 | 0.56% | 1 | 10.00% |
Total | 178 | 100.00% | 10 | 100.00% |
Person | Tokens | Prop | Commits | CommitProp |
Dave Young | 122 | 62.89% | 2 | 15.38% |
Ingo Molnar | 33 | 17.01% | 3 | 23.08% |
Borislav Petkov | 20 | 10.31% | 1 | 7.69% |
Christian Bornträger | 8 | 4.12% | 1 | 7.69% |
Alexey Dobriyan | 4 | 2.06% | 1 | 7.69% |
Thomas Gleixner | 2 | 1.03% | 1 | 7.69% |
Sergey Senozhatsky | 2 | 1.03% | 1 | 7.69% |
Yong Zhang | 2 | 1.03% | 2 | 15.38% |
Paul Gortmaker | 1 | 0.52% | 1 | 7.69% |
Total | 194 | 100.00% | 13 | 100.00% |