diff options
| author | Frederic Weisbecker <fweisbec@gmail.com> | 2013-02-05 00:48:46 +0100 | 
|---|---|---|
| committer | Frederic Weisbecker <fweisbec@gmail.com> | 2013-02-05 00:48:46 +0100 | 
| commit | 077931446b85e7858bf9dc0927cd116669b965d2 (patch) | |
| tree | 02fbdf4a42b30b841a61aca399bd0ac6a5c308e6 /include/linux/tick.h | |
| parent | f7c819c020db9796ae3a662b82a310617f92b15b (diff) | |
| parent | 74876a98a87a115254b3a66a14b27320b7f0acaa (diff) | |
| download | olio-linux-3.10-077931446b85e7858bf9dc0927cd116669b965d2.tar.xz olio-linux-3.10-077931446b85e7858bf9dc0927cd116669b965d2.zip  | |
Merge branch 'nohz/printk-v8' into irq/core
Conflicts:
	kernel/irq_work.c
Add support for printk in full dynticks CPU.
* Don't stop tick with irq works pending. This
fix is generally useful and concerns archs that
can't raise self IPIs.
* Flush irq works before CPU offlining.
* Introduce "lazy" irq works that can wait for the
next tick to be executed, unless it's stopped.
* Implement klogd wake up using irq work. This
removes the ad-hoc printk_tick()/printk_needs_cpu()
hooks and make it working even in dynticks mode.
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Diffstat (limited to 'include/linux/tick.h')
| -rw-r--r-- | include/linux/tick.h | 17 | 
1 files changed, 16 insertions, 1 deletions
diff --git a/include/linux/tick.h b/include/linux/tick.h index 1a6567b4849..553272e6af5 100644 --- a/include/linux/tick.h +++ b/include/linux/tick.h @@ -8,6 +8,8 @@  #include <linux/clockchips.h>  #include <linux/irqflags.h> +#include <linux/percpu.h> +#include <linux/hrtimer.h>  #ifdef CONFIG_GENERIC_CLOCKEVENTS @@ -122,13 +124,26 @@ static inline int tick_oneshot_mode_active(void) { return 0; }  #endif /* !CONFIG_GENERIC_CLOCKEVENTS */  # ifdef CONFIG_NO_HZ +DECLARE_PER_CPU(struct tick_sched, tick_cpu_sched); + +static inline int tick_nohz_tick_stopped(void) +{ +	return __this_cpu_read(tick_cpu_sched.tick_stopped); +} +  extern void tick_nohz_idle_enter(void);  extern void tick_nohz_idle_exit(void);  extern void tick_nohz_irq_exit(void);  extern ktime_t tick_nohz_get_sleep_length(void);  extern u64 get_cpu_idle_time_us(int cpu, u64 *last_update_time);  extern u64 get_cpu_iowait_time_us(int cpu, u64 *last_update_time); -# else + +# else /* !CONFIG_NO_HZ */ +static inline int tick_nohz_tick_stopped(void) +{ +	return 0; +} +  static inline void tick_nohz_idle_enter(void) { }  static inline void tick_nohz_idle_exit(void) { }  |