Lines Matching +full:re +full:- +full:initialization

1 // SPDX-License-Identifier: GPL-2.0-only
3 * ratelimit.c - Do something with rate limit.
7 * 2008-05-01 rewrite the function and use a ratelimit_state data struct as
16 * __ratelimit - rate limiting
20 * This enforces a rate limit: not more than @rs->burst callbacks
21 * in every @rs->interval
33 int interval = READ_ONCE(rs->interval); in ___ratelimit()
34 int burst = READ_ONCE(rs->burst); in ___ratelimit()
39 * Zero interval says never limit, otherwise, non-positive burst in ___ratelimit()
45 if (!(READ_ONCE(rs->flags) & RATELIMIT_INITIALIZED) || (!interval && !burst) || in ___ratelimit()
46 !raw_spin_trylock_irqsave(&rs->lock, flags)) in ___ratelimit()
49 /* Force re-initialization once re-enabled. */ in ___ratelimit()
50 rs->flags &= ~RATELIMIT_INITIALIZED; in ___ratelimit()
60 if (!raw_spin_trylock_irqsave(&rs->lock, flags)) { in ___ratelimit()
61 if (READ_ONCE(rs->flags) & RATELIMIT_INITIALIZED && in ___ratelimit()
62 atomic_read(&rs->rs_n_left) > 0 && atomic_dec_return(&rs->rs_n_left) >= 0) in ___ratelimit()
67 if (!(rs->flags & RATELIMIT_INITIALIZED)) { in ___ratelimit()
68 rs->begin = jiffies; in ___ratelimit()
69 rs->flags |= RATELIMIT_INITIALIZED; in ___ratelimit()
70 atomic_set(&rs->rs_n_left, rs->burst); in ___ratelimit()
73 if (time_is_before_jiffies(rs->begin + interval)) { in ___ratelimit()
80 atomic_set(&rs->rs_n_left, rs->burst); in ___ratelimit()
81 rs->begin = jiffies; in ___ratelimit()
83 if (!(rs->flags & RATELIMIT_MSG_ON_RELEASE)) { in ___ratelimit()
93 if (atomic_read(&rs->rs_n_left) > 0 && atomic_dec_return(&rs->rs_n_left) >= 0) in ___ratelimit()
97 raw_spin_unlock_irqrestore(&rs->lock, flags); in ___ratelimit()