aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/tick.h
diff options
context:
space:
mode:
authorFrederic Weisbecker <fweisbec@gmail.com>2011-11-17 12:48:14 -0500
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>2011-12-11 13:31:57 -0500
commit1268fbc746ea1cd279886a740dcbad4ba5232225 (patch)
treedc0ff36b4114992a3f67479e25132f5e99f36b9e /include/linux/tick.h
parentb58bdccaa8d908e0f71dae396468a0d3f7bb3125 (diff)
nohz: Remove tick_nohz_idle_enter_norcu() / tick_nohz_idle_exit_norcu()
Those two APIs were provided to optimize the calls of tick_nohz_idle_enter() and rcu_idle_enter() into a single irq disabled section. This way no interrupt happening in-between would needlessly process any RCU job. Now we are talking about an optimization for which benefits have yet to be measured. Let's start simple and completely decouple idle rcu and dyntick idle logics to simplify. Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Peter Zijlstra <peterz@infradead.org> Reviewed-by: Josh Triplett <josh@joshtriplett.org> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Diffstat (limited to 'include/linux/tick.h')
-rw-r--r--include/linux/tick.h47
1 files changed, 1 insertions, 46 deletions
diff --git a/include/linux/tick.h b/include/linux/tick.h
index 327434a05757..ab8be90b5cc9 100644
--- a/include/linux/tick.h
+++ b/include/linux/tick.h
@@ -122,45 +122,8 @@ static inline int tick_oneshot_mode_active(void) { return 0; }
122#endif /* !CONFIG_GENERIC_CLOCKEVENTS */ 122#endif /* !CONFIG_GENERIC_CLOCKEVENTS */
123 123
124# ifdef CONFIG_NO_HZ 124# ifdef CONFIG_NO_HZ
125extern void __tick_nohz_idle_enter(void); 125extern void tick_nohz_idle_enter(void);
126static inline void tick_nohz_idle_enter(void)
127{
128 local_irq_disable();
129 __tick_nohz_idle_enter();
130 local_irq_enable();
131}
132extern void tick_nohz_idle_exit(void); 126extern void tick_nohz_idle_exit(void);
133
134/*
135 * Call this pair of function if the arch doesn't make any use
136 * of RCU in-between. You won't need to call rcu_idle_enter() and
137 * rcu_idle_exit().
138 * Otherwise you need to call tick_nohz_idle_enter() and tick_nohz_idle_exit()
139 * and explicitly tell RCU about the window around the place the CPU enters low
140 * power mode where no RCU use is made. This is done by calling rcu_idle_enter()
141 * after the last use of RCU before the CPU is put to sleep and by calling
142 * rcu_idle_exit() before the first use of RCU after the CPU woke up.
143 */
144static inline void tick_nohz_idle_enter_norcu(void)
145{
146 /*
147 * Also call rcu_idle_enter() in the irq disabled section even
148 * if it disables irq itself.
149 * Just an optimization that prevents from an interrupt happening
150 * between it and __tick_nohz_idle_enter() to lose time to help
151 * completing a grace period while we could be in extended grace
152 * period already.
153 */
154 local_irq_disable();
155 __tick_nohz_idle_enter();
156 rcu_idle_enter();
157 local_irq_enable();
158}
159static inline void tick_nohz_idle_exit_norcu(void)
160{
161 rcu_idle_exit();
162 tick_nohz_idle_exit();
163}
164extern void tick_nohz_irq_exit(void); 127extern void tick_nohz_irq_exit(void);
165extern ktime_t tick_nohz_get_sleep_length(void); 128extern ktime_t tick_nohz_get_sleep_length(void);
166extern u64 get_cpu_idle_time_us(int cpu, u64 *last_update_time); 129extern u64 get_cpu_idle_time_us(int cpu, u64 *last_update_time);
@@ -168,14 +131,6 @@ extern u64 get_cpu_iowait_time_us(int cpu, u64 *last_update_time);
168# else 131# else
169static inline void tick_nohz_idle_enter(void) { } 132static inline void tick_nohz_idle_enter(void) { }
170static inline void tick_nohz_idle_exit(void) { } 133static inline void tick_nohz_idle_exit(void) { }
171static inline void tick_nohz_idle_enter_norcu(void)
172{
173 rcu_idle_enter();
174}
175static inline void tick_nohz_idle_exit_norcu(void)
176{
177 rcu_idle_exit();
178}
179 134
180static inline ktime_t tick_nohz_get_sleep_length(void) 135static inline ktime_t tick_nohz_get_sleep_length(void)
181{ 136{