Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 #ifndef _LINUX_RATELIMIT_TYPES_H
0003 #define _LINUX_RATELIMIT_TYPES_H
0004 
0005 #include <linux/bits.h>
0006 #include <linux/param.h>
0007 #include <linux/spinlock_types_raw.h>
0008 
0009 #define DEFAULT_RATELIMIT_INTERVAL  (5 * HZ)
0010 #define DEFAULT_RATELIMIT_BURST     10
0011 
0012 /* issue num suppressed message on exit */
0013 #define RATELIMIT_MSG_ON_RELEASE    BIT(0)
0014 
0015 struct ratelimit_state {
0016     raw_spinlock_t  lock;       /* protect the state */
0017 
0018     int     interval;
0019     int     burst;
0020     int     printed;
0021     int     missed;
0022     unsigned long   begin;
0023     unsigned long   flags;
0024 };
0025 
0026 #define RATELIMIT_STATE_INIT_FLAGS(name, interval_init, burst_init, flags_init) { \
0027         .lock       = __RAW_SPIN_LOCK_UNLOCKED(name.lock),        \
0028         .interval   = interval_init,                  \
0029         .burst      = burst_init,                     \
0030         .flags      = flags_init,                     \
0031     }
0032 
0033 #define RATELIMIT_STATE_INIT(name, interval_init, burst_init) \
0034     RATELIMIT_STATE_INIT_FLAGS(name, interval_init, burst_init, 0)
0035 
0036 #define RATELIMIT_STATE_INIT_DISABLED                   \
0037     RATELIMIT_STATE_INIT(ratelimit_state, 0, DEFAULT_RATELIMIT_BURST)
0038 
0039 #define DEFINE_RATELIMIT_STATE(name, interval_init, burst_init)     \
0040                                     \
0041     struct ratelimit_state name =                   \
0042         RATELIMIT_STATE_INIT(name, interval_init, burst_init)   \
0043 
0044 extern int ___ratelimit(struct ratelimit_state *rs, const char *func);
0045 #define __ratelimit(state) ___ratelimit(state, __func__)
0046 
0047 #endif /* _LINUX_RATELIMIT_TYPES_H */