diff options
author | Peter Zijlstra <peterz@infradead.org> | 2023-01-12 20:43:27 +0100 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2023-01-13 11:48:15 +0100 |
commit | a01353cf1896ea5b8a7bbc5e2b2d38feed8b7aaa (patch) | |
tree | d481b825921d2e5f4431e3929454f0520ca017ce /include/linux/clockchips.h | |
parent | 0c5ffc3d7b15978c6b184938cd6b8af06e436424 (diff) | |
download | linux-stable-a01353cf1896ea5b8a7bbc5e2b2d38feed8b7aaa.tar.gz linux-stable-a01353cf1896ea5b8a7bbc5e2b2d38feed8b7aaa.tar.bz2 linux-stable-a01353cf1896ea5b8a7bbc5e2b2d38feed8b7aaa.zip |
cpuidle: Fix ct_idle_*() usage
The whole disable-RCU, enable-IRQS dance is very intricate since
changing IRQ state is traced, which depends on RCU.
Add two helpers for the cpuidle case that mirror the entry code:
ct_cpuidle_enter()
ct_cpuidle_exit()
And fix all the cases where the enter/exit dance was buggy.
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Tested-by: Tony Lindgren <tony@atomide.com>
Tested-by: Ulf Hansson <ulf.hansson@linaro.org>
Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: Frederic Weisbecker <frederic@kernel.org>
Link: https://lore.kernel.org/r/20230112195540.130014793@infradead.org
Diffstat (limited to 'include/linux/clockchips.h')
-rw-r--r-- | include/linux/clockchips.h | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/include/linux/clockchips.h b/include/linux/clockchips.h index 8ae9a95ebf5b..9aac31d856f3 100644 --- a/include/linux/clockchips.h +++ b/include/linux/clockchips.h @@ -211,7 +211,7 @@ extern int tick_receive_broadcast(void); extern void tick_setup_hrtimer_broadcast(void); extern int tick_check_broadcast_expired(void); # else -static inline int tick_check_broadcast_expired(void) { return 0; } +static __always_inline int tick_check_broadcast_expired(void) { return 0; } static inline void tick_setup_hrtimer_broadcast(void) { } # endif @@ -219,7 +219,7 @@ static inline void tick_setup_hrtimer_broadcast(void) { } static inline void clockevents_suspend(void) { } static inline void clockevents_resume(void) { } -static inline int tick_check_broadcast_expired(void) { return 0; } +static __always_inline int tick_check_broadcast_expired(void) { return 0; } static inline void tick_setup_hrtimer_broadcast(void) { } #endif /* !CONFIG_GENERIC_CLOCKEVENTS */ |