diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2009-06-12 05:29:27 -0400 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2009-06-13 06:00:26 -0400 |
commit | cd6d95d8449b7c9f415f26041e9ae173d387b6bd (patch) | |
tree | ddd1f2d6436f398419045b3e0ee860c01523cfea /include/linux | |
parent | 3f68535adad8dd89499505a65fb25d0e02d118cc (diff) |
clocksource: prevent selection of low resolution clocksourse also for nohz=on
commit 3f68535adad (clocksource: sanity check sysfs clocksource
changes) prevents selection of non high resolution capable
clocksources when high resolution mode is active, but did not take
into account that the same rules apply for highres=off nohz=on.
Check the tick device mode instead of hrtimer_hres_active() to verify
whether the system needs to be protected from a switch to jiffies or
other non highres capable clock sources.
Reported-by: Luming Yu <luming.yu@gmail.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/hrtimer.h | 2 | ||||
-rw-r--r-- | include/linux/tick.h | 3 |
2 files changed, 4 insertions, 1 deletions
diff --git a/include/linux/hrtimer.h b/include/linux/hrtimer.h index 58021b0c396d..0d2f7c8a33d6 100644 --- a/include/linux/hrtimer.h +++ b/include/linux/hrtimer.h | |||
@@ -305,7 +305,7 @@ static inline int hrtimer_is_hres_active(struct hrtimer *timer) | |||
305 | 305 | ||
306 | extern ktime_t ktime_get(void); | 306 | extern ktime_t ktime_get(void); |
307 | extern ktime_t ktime_get_real(void); | 307 | extern ktime_t ktime_get_real(void); |
308 | extern int hrtimer_hres_active(void); | 308 | |
309 | 309 | ||
310 | DECLARE_PER_CPU(struct tick_device, tick_cpu_device); | 310 | DECLARE_PER_CPU(struct tick_device, tick_cpu_device); |
311 | 311 | ||
diff --git a/include/linux/tick.h b/include/linux/tick.h index 469b82d88b3b..0482229c07db 100644 --- a/include/linux/tick.h +++ b/include/linux/tick.h | |||
@@ -97,10 +97,12 @@ extern void tick_clock_notify(void); | |||
97 | extern int tick_check_oneshot_change(int allow_nohz); | 97 | extern int tick_check_oneshot_change(int allow_nohz); |
98 | extern struct tick_sched *tick_get_tick_sched(int cpu); | 98 | extern struct tick_sched *tick_get_tick_sched(int cpu); |
99 | extern void tick_check_idle(int cpu); | 99 | extern void tick_check_idle(int cpu); |
100 | extern int tick_oneshot_mode_active(void); | ||
100 | # else | 101 | # else |
101 | static inline void tick_clock_notify(void) { } | 102 | static inline void tick_clock_notify(void) { } |
102 | static inline int tick_check_oneshot_change(int allow_nohz) { return 0; } | 103 | static inline int tick_check_oneshot_change(int allow_nohz) { return 0; } |
103 | static inline void tick_check_idle(int cpu) { } | 104 | static inline void tick_check_idle(int cpu) { } |
105 | static inline int tick_oneshot_mode_active(void) { return 0; } | ||
104 | # endif | 106 | # endif |
105 | 107 | ||
106 | #else /* CONFIG_GENERIC_CLOCKEVENTS */ | 108 | #else /* CONFIG_GENERIC_CLOCKEVENTS */ |
@@ -109,6 +111,7 @@ static inline void tick_cancel_sched_timer(int cpu) { } | |||
109 | static inline void tick_clock_notify(void) { } | 111 | static inline void tick_clock_notify(void) { } |
110 | static inline int tick_check_oneshot_change(int allow_nohz) { return 0; } | 112 | static inline int tick_check_oneshot_change(int allow_nohz) { return 0; } |
111 | static inline void tick_check_idle(int cpu) { } | 113 | static inline void tick_check_idle(int cpu) { } |
114 | static inline int tick_oneshot_mode_active(void) { return 0; } | ||
112 | #endif /* !CONFIG_GENERIC_CLOCKEVENTS */ | 115 | #endif /* !CONFIG_GENERIC_CLOCKEVENTS */ |
113 | 116 | ||
114 | # ifdef CONFIG_NO_HZ | 117 | # ifdef CONFIG_NO_HZ |