linux/include/linux/ratelimit_types.h
<<
>>
Prefs
   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.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(name, interval_init, burst_init) {         \
  27                .lock           = __RAW_SPIN_LOCK_UNLOCKED(name.lock),  \
  28                .interval       = interval_init,                        \
  29                .burst          = burst_init,                           \
  30        }
  31
  32#define RATELIMIT_STATE_INIT_DISABLED                                   \
  33        RATELIMIT_STATE_INIT(ratelimit_state, 0, DEFAULT_RATELIMIT_BURST)
  34
  35#define DEFINE_RATELIMIT_STATE(name, interval_init, burst_init)         \
  36                                                                        \
  37        struct ratelimit_state name =                                   \
  38                RATELIMIT_STATE_INIT(name, interval_init, burst_init)   \
  39
  40extern int ___ratelimit(struct ratelimit_state *rs, const char *func);
  41#define __ratelimit(state) ___ratelimit(state, __func__)
  42
  43#endif /* _LINUX_RATELIMIT_TYPES_H */
  44