forked from torvalds/linux
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
printk: Make linux/printk.h self-contained
As it stands if you include printk.h it will fail to compile because it requires definitions from ratelimit.h. However, simply including ratelimit.h from printk.h does not work due to inclusion loops involving sched.h and kernel.h. This patch solves this by moving bits from ratelimit.h into a new header file which can then be included by printk.h without any worries about header loops. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
- Loading branch information
1 parent
b29482f
commit 17b4184
Showing
3 changed files
with
45 additions
and
35 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
/* SPDX-License-Identifier: GPL-2.0 */ | ||
#ifndef _LINUX_RATELIMIT_TYPES_H | ||
#define _LINUX_RATELIMIT_TYPES_H | ||
|
||
#include <linux/bits.h> | ||
#include <linux/param.h> | ||
#include <linux/spinlock_types.h> | ||
|
||
#define DEFAULT_RATELIMIT_INTERVAL (5 * HZ) | ||
#define DEFAULT_RATELIMIT_BURST 10 | ||
|
||
/* issue num suppressed message on exit */ | ||
#define RATELIMIT_MSG_ON_RELEASE BIT(0) | ||
|
||
struct ratelimit_state { | ||
raw_spinlock_t lock; /* protect the state */ | ||
|
||
int interval; | ||
int burst; | ||
int printed; | ||
int missed; | ||
unsigned long begin; | ||
unsigned long flags; | ||
}; | ||
|
||
#define RATELIMIT_STATE_INIT(name, interval_init, burst_init) { \ | ||
.lock = __RAW_SPIN_LOCK_UNLOCKED(name.lock), \ | ||
.interval = interval_init, \ | ||
.burst = burst_init, \ | ||
} | ||
|
||
#define RATELIMIT_STATE_INIT_DISABLED \ | ||
RATELIMIT_STATE_INIT(ratelimit_state, 0, DEFAULT_RATELIMIT_BURST) | ||
|
||
#define DEFINE_RATELIMIT_STATE(name, interval_init, burst_init) \ | ||
\ | ||
struct ratelimit_state name = \ | ||
RATELIMIT_STATE_INIT(name, interval_init, burst_init) \ | ||
|
||
extern int ___ratelimit(struct ratelimit_state *rs, const char *func); | ||
#define __ratelimit(state) ___ratelimit(state, __func__) | ||
|
||
#endif /* _LINUX_RATELIMIT_TYPES_H */ |