forked from mirrors/linux
		
	 92cf211874
			
		
	
	
		92cf211874
		
	
	
	
	
		
			
			preempt_mask.h defines all the preempt_count semantics and related symbols: preempt, softirq, hardirq, nmi, preempt active, need resched, etc... preempt.h defines the accessors and mutators of preempt_count. But there is a messy dependency game around those two header files: * preempt_mask.h includes preempt.h in order to access preempt_count() * preempt_mask.h defines all preempt_count semantic and symbols except PREEMPT_NEED_RESCHED that is needed by asm/preempt.h Thus we need to define it from preempt.h, right before including asm/preempt.h, instead of defining it to preempt_mask.h with the other preempt_count symbols. Therefore the preempt_count semantics happen to be spread out. * We plan to introduce preempt_active_[enter,exit]() to consolidate preempt_schedule*() code. But we'll need to access both preempt_count mutators (preempt_count_add()) and preempt_count symbols (PREEMPT_ACTIVE, PREEMPT_OFFSET). The usual place to define preempt operations is in preempt.h but then we'll need symbols in preempt_mask.h which already includes preempt.h. So we end up with a ressource circle dependency. Lets merge preempt_mask.h into preempt.h to solve these dependency issues. This way we gather semantic symbols and operation definition of preempt_count in a single file. This is a dumb copy-paste merge. Further merge re-arrangments are performed in a subsequent patch to ease review. Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Link: http://lkml.kernel.org/r/1431441711-29753-2-git-send-email-fweisbec@gmail.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
		
			
				
	
	
		
			34 lines
		
	
	
	
		
			764 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
	
		
			764 B
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef _LINUX_BH_H
 | |
| #define _LINUX_BH_H
 | |
| 
 | |
| #include <linux/preempt.h>
 | |
| 
 | |
| #ifdef CONFIG_TRACE_IRQFLAGS
 | |
| extern void __local_bh_disable_ip(unsigned long ip, unsigned int cnt);
 | |
| #else
 | |
| static __always_inline void __local_bh_disable_ip(unsigned long ip, unsigned int cnt)
 | |
| {
 | |
| 	preempt_count_add(cnt);
 | |
| 	barrier();
 | |
| }
 | |
| #endif
 | |
| 
 | |
| static inline void local_bh_disable(void)
 | |
| {
 | |
| 	__local_bh_disable_ip(_THIS_IP_, SOFTIRQ_DISABLE_OFFSET);
 | |
| }
 | |
| 
 | |
| extern void _local_bh_enable(void);
 | |
| extern void __local_bh_enable_ip(unsigned long ip, unsigned int cnt);
 | |
| 
 | |
| static inline void local_bh_enable_ip(unsigned long ip)
 | |
| {
 | |
| 	__local_bh_enable_ip(ip, SOFTIRQ_DISABLE_OFFSET);
 | |
| }
 | |
| 
 | |
| static inline void local_bh_enable(void)
 | |
| {
 | |
| 	__local_bh_enable_ip(_THIS_IP_, SOFTIRQ_DISABLE_OFFSET);
 | |
| }
 | |
| 
 | |
| #endif /* _LINUX_BH_H */
 |