forked from mirrors/linux
		
	 00357f5ec5
			
		
	
	
		00357f5ec5
		
	
	
	
	
		
			
			The primary observation is that nohz enter/exit is always from the
current CPU, therefore NOHZ_TICK_STOPPED does not in fact need to be
an atomic.
Secondary is that we appear to have 2 nearly identical hooks in the
nohz enter code, set_cpu_sd_state_idle() and
nohz_balance_enter_idle(). Fold the whole set_cpu_sd_state thing into
nohz_balance_{enter,exit}_idle.
Removes an atomic op from both enter and exit paths.
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
		
	
			
		
			
				
	
	
		
			38 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* SPDX-License-Identifier: GPL-2.0 */
 | |
| #ifndef _LINUX_SCHED_NOHZ_H
 | |
| #define _LINUX_SCHED_NOHZ_H
 | |
| 
 | |
| /*
 | |
|  * This is the interface between the scheduler and nohz/dynticks:
 | |
|  */
 | |
| 
 | |
| #if defined(CONFIG_SMP) && defined(CONFIG_NO_HZ_COMMON)
 | |
| extern void cpu_load_update_nohz_start(void);
 | |
| extern void cpu_load_update_nohz_stop(void);
 | |
| #else
 | |
| static inline void cpu_load_update_nohz_start(void) { }
 | |
| static inline void cpu_load_update_nohz_stop(void) { }
 | |
| #endif
 | |
| 
 | |
| #if defined(CONFIG_SMP) && defined(CONFIG_NO_HZ_COMMON)
 | |
| extern void nohz_balance_enter_idle(int cpu);
 | |
| extern int get_nohz_timer_target(void);
 | |
| #else
 | |
| static inline void nohz_balance_enter_idle(int cpu) { }
 | |
| #endif
 | |
| 
 | |
| #ifdef CONFIG_NO_HZ_COMMON
 | |
| void calc_load_nohz_start(void);
 | |
| void calc_load_nohz_stop(void);
 | |
| #else
 | |
| static inline void calc_load_nohz_start(void) { }
 | |
| static inline void calc_load_nohz_stop(void) { }
 | |
| #endif /* CONFIG_NO_HZ_COMMON */
 | |
| 
 | |
| #if defined(CONFIG_NO_HZ_COMMON) && defined(CONFIG_SMP)
 | |
| extern void wake_up_nohz_cpu(int cpu);
 | |
| #else
 | |
| static inline void wake_up_nohz_cpu(int cpu) { }
 | |
| #endif
 | |
| 
 | |
| #endif /* _LINUX_SCHED_NOHZ_H */
 |