mirror of
				https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
				synced 2025-10-31 02:59:34 +00:00 
			
		
		
		
	 717115e1a5
			
		
	
	
		717115e1a5
		
	
	
	
	
		
			
			All ratelimit user use same jiffies and burst params, so some messages (callbacks) will be lost. For example: a call printk_ratelimit(5 * HZ, 1) b call printk_ratelimit(5 * HZ, 1) before the 5*HZ timeout of a, then b will will be supressed. - rewrite __ratelimit, and use a ratelimit_state as parameter. Thanks for hints from andrew. - Add WARN_ON_RATELIMIT, update rcupreempt.h - remove __printk_ratelimit - use __ratelimit in net_ratelimit Signed-off-by: Dave Young <hidave.darkstar@gmail.com> Cc: "David S. Miller" <davem@davemloft.net> Cc: "Paul E. McKenney" <paulmck@us.ibm.com> Cc: Dave Young <hidave.darkstar@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
		
			
				
	
	
		
			28 lines
		
	
	
		
			592 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			28 lines
		
	
	
		
			592 B
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef _LINUX_RATELIMIT_H
 | |
| #define _LINUX_RATELIMIT_H
 | |
| #include <linux/param.h>
 | |
| 
 | |
| #define DEFAULT_RATELIMIT_INTERVAL (5 * HZ)
 | |
| #define DEFAULT_RATELIMIT_BURST 10
 | |
| 
 | |
| struct ratelimit_state {
 | |
| 	int interval;
 | |
| 	int burst;
 | |
| 	int printed;
 | |
| 	int missed;
 | |
| 	unsigned long begin;
 | |
| };
 | |
| 
 | |
| #define DEFINE_RATELIMIT_STATE(name, interval, burst)		\
 | |
| 		struct ratelimit_state name = {interval, burst,}
 | |
| 
 | |
| extern int __ratelimit(struct ratelimit_state *rs);
 | |
| 
 | |
| static inline int ratelimit(void)
 | |
| {
 | |
| 	static DEFINE_RATELIMIT_STATE(rs, DEFAULT_RATELIMIT_INTERVAL,
 | |
| 					DEFAULT_RATELIMIT_BURST);
 | |
| 	return __ratelimit(&rs);
 | |
| }
 | |
| #endif
 |