ratelimit_types.h (1361B)
1/* SPDX-License-Identifier: GPL-2.0 */ 2#ifndef _LINUX_RATELIMIT_TYPES_H 3#define _LINUX_RATELIMIT_TYPES_H 4 5#include <linux/bits.h> 6#include <linux/param.h> 7#include <linux/spinlock_types_raw.h> 8 9#define DEFAULT_RATELIMIT_INTERVAL (5 * HZ) 10#define DEFAULT_RATELIMIT_BURST 10 11 12/* issue num suppressed message on exit */ 13#define RATELIMIT_MSG_ON_RELEASE BIT(0) 14 15struct ratelimit_state { 16 raw_spinlock_t lock; /* protect the state */ 17 18 int interval; 19 int burst; 20 int printed; 21 int missed; 22 unsigned long begin; 23 unsigned long flags; 24}; 25 26#define RATELIMIT_STATE_INIT_FLAGS(name, interval_init, burst_init, flags_init) { \ 27 .lock = __RAW_SPIN_LOCK_UNLOCKED(name.lock), \ 28 .interval = interval_init, \ 29 .burst = burst_init, \ 30 .flags = flags_init, \ 31 } 32 33#define RATELIMIT_STATE_INIT(name, interval_init, burst_init) \ 34 RATELIMIT_STATE_INIT_FLAGS(name, interval_init, burst_init, 0) 35 36#define RATELIMIT_STATE_INIT_DISABLED \ 37 RATELIMIT_STATE_INIT(ratelimit_state, 0, DEFAULT_RATELIMIT_BURST) 38 39#define DEFINE_RATELIMIT_STATE(name, interval_init, burst_init) \ 40 \ 41 struct ratelimit_state name = \ 42 RATELIMIT_STATE_INIT(name, interval_init, burst_init) \ 43 44extern int ___ratelimit(struct ratelimit_state *rs, const char *func); 45#define __ratelimit(state) ___ratelimit(state, __func__) 46 47#endif /* _LINUX_RATELIMIT_TYPES_H */