timers/nohz updates for v3.18
Subsystems (21)
Ingo Molnar
maintainerLinus,
Please pull the latest timers-nohz-for-linus git tree from:
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers-nohz-for-linus
# HEAD: 9b01f5bf3999a3db5b1bbd9fdfd80d8d304e94ee nohz: nohz full depends on irq work self IPI support
Main changes:
- Fix the deadlock reported by Dave Jones et al
- Clean up and fix nohz_full interaction with arch abilities
- nohz init code consolidation/cleanup
Thanks,
Ingo
------------------>
Frederic Weisbecker (7):
nohz: Move nohz full init call to tick init
irq_work: Force raised irq work to run on irq work interrupt
x86: Tell irq work about self IPI support
arm: Tell irq work about self IPI support
arm64: Tell irq work about self IPI support
nohz: Consolidate nohz full init code
nohz: nohz full depends on irq work self IPI support
Peter Zijlstra (1):
irq_work: Introduce arch_irq_work_has_interrupt()
arch/alpha/include/asm/Kbuild | 1 + arch/arc/include/asm/Kbuild | 1 + arch/arm/include/asm/irq_work.h | 11 ++++++++ arch/arm/kernel/smp.c | 2 +- arch/arm64/include/asm/Kbuild | 2 +- arch/arm64/include/asm/irq_work.h | 11 ++++++++ arch/arm64/include/asm/smp.h | 2 ++ arch/arm64/kernel/smp.c | 2 +- arch/avr32/include/asm/Kbuild | 1 + arch/blackfin/include/asm/Kbuild | 1 + arch/c6x/include/asm/Kbuild | 1 + arch/cris/include/asm/Kbuild | 1 + arch/frv/include/asm/Kbuild | 1 + arch/hexagon/include/asm/Kbuild | 1 + arch/ia64/include/asm/Kbuild | 1 + arch/m32r/include/asm/Kbuild | 1 + arch/m68k/include/asm/Kbuild | 1 + arch/metag/include/asm/Kbuild | 1 + arch/microblaze/include/asm/Kbuild | 1 + arch/mips/include/asm/Kbuild | 1 + arch/mn10300/include/asm/Kbuild | 1 + arch/openrisc/include/asm/Kbuild | 1 + arch/parisc/include/asm/Kbuild | 1 + arch/powerpc/include/asm/Kbuild | 1 + arch/s390/include/asm/Kbuild | 1 + arch/score/include/asm/Kbuild | 1 + arch/sh/include/asm/Kbuild | 1 + arch/sparc/include/asm/Kbuild | 1 + arch/tile/include/asm/Kbuild | 1 + arch/um/include/asm/Kbuild | 1 + arch/unicore32/include/asm/Kbuild | 1 + arch/x86/include/asm/irq_work.h | 11 ++++++++ arch/x86/kernel/irq_work.c | 2 +- arch/xtensa/include/asm/Kbuild | 1 + include/asm-generic/irq_work.h | 10 ++++++++ include/linux/irq_work.h | 3 +++ include/linux/tick.h | 2 -- init/main.c | 1 - kernel/irq_work.c | 15 +++++++++-- kernel/time/tick-common.c | 1 + kernel/time/tick-internal.h | 7 +++++ kernel/time/tick-sched.c | 52 ++++++++++++++++++++++++-------------- kernel/time/timer.c | 2 +- 43 files changed, 133 insertions(+), 29 deletions(-) create mode 100644 arch/arm/include/asm/irq_work.h create mode 100644 arch/arm64/include/asm/irq_work.h create mode 100644 arch/x86/include/asm/irq_work.h create mode 100644 include/asm-generic/irq_work.h
arch/alpha/include/asm/Kbuild +1 -0
@@ -4,6 +4,7 @@ generic-y += clkdev.h generic-y += cputime.h generic-y += exec.h generic-y += hash.h +generic-y += irq_work.h generic-y += mcs_spinlock.h generic-y += preempt.h generic-y += scatterlist.h
arch/arc/include/asm/Kbuild +1 -0
@@ -18,6 +18,7 @@ generic-y += ioctl.h generic-y += ioctls.h generic-y += ipcbuf.h generic-y += irq_regs.h +generic-y += irq_work.h generic-y += kmap_types.h generic-y += kvm_para.h generic-y += local.h
arch/arm/include/asm/irq_work.h new file +11 -0
@@ -0,0 +1,11 @@ +#ifndef __ASM_ARM_IRQ_WORK_H +#define __ASM_ARM_IRQ_WORK_H + +#include <asm/smp_plat.h> + +static inline bool arch_irq_work_has_interrupt (void ) +{ +return is_smp (); +} + +#endif /* _ASM_ARM_IRQ_WORK_H */
arch/arm/kernel/smp.c +1 -1
@@ -503,7 +503,7 @@ void arch_send_call_function_single_ipi(int cpu)#ifdef CONFIG_IRQ_WORK void arch_irq_work_raise (void ) { -if (is_smp ()) +if (arch_irq_work_has_interrupt ())smp_cross_call (cpumask_of (smp_processor_id ()),IPI_IRQ_WORK ); }#endif
arch/arm64/include/asm/Kbuild +1 -1
@@ -9,8 +9,8 @@ generic-y += current.h generic-y += delay.h generic-y += div64.h generic-y += dma.h -generic-y += emergency-restart.h generic-y += early_ioremap.h +generic-y += emergency-restart.h generic-y += errno.h generic-y += ftrace.h generic-y += hash.h
arch/arm64/include/asm/irq_work.h new file +11 -0
@@ -0,0 +1,11 @@ +#ifndef __ASM_IRQ_WORK_H +#define __ASM_IRQ_WORK_H + +#include <asm/smp.h> + +static inline bool arch_irq_work_has_interrupt (void ) +{ +return !!__smp_cross_call; +} + +#endif /* __ASM_IRQ_WORK_H */
arch/arm64/include/asm/smp.h +2 -0
@@ -48,6 +48,8 @@ extern void smp_init_cpus(void);*/ extern void set_smp_cross_call (void (*)(const struct cpumask *,unsigned int )); +extern void (*__smp_cross_call)(const struct cpumask *,unsigned int ); +/* * Called from the secondary holding pen, this is the secondary CPU entry point. */
arch/arm64/kernel/smp.c +1 -1
@@ -470,7 +470,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus) } } -static void (*__smp_cross_call)(const struct cpumask *,unsigned int ); +void (*__smp_cross_call)(const struct cpumask *,unsigned int );void __init set_smp_cross_call (void (*fn)(const struct cpumask *,unsigned int )) {
arch/avr32/include/asm/Kbuild +1 -0
@@ -9,6 +9,7 @@ generic-y += exec.h generic-y += futex.h generic-y += hash.h generic-y += irq_regs.h +generic-y += irq_work.h generic-y += local.h generic-y += local64.h generic-y += mcs_spinlock.h
arch/blackfin/include/asm/Kbuild +1 -0
@@ -15,6 +15,7 @@ generic-y += hw_irq.h generic-y += ioctl.h generic-y += ipcbuf.h generic-y += irq_regs.h +generic-y += irq_work.h generic-y += kdebug.h generic-y += kmap_types.h generic-y += kvm_para.h
arch/c6x/include/asm/Kbuild +1 -0
@@ -22,6 +22,7 @@ generic-y += ioctl.h generic-y += ioctls.h generic-y += ipcbuf.h generic-y += irq_regs.h +generic-y += irq_work.h generic-y += kdebug.h generic-y += kmap_types.h generic-y += local.h
arch/cris/include/asm/Kbuild +1 -0
@@ -8,6 +8,7 @@ generic-y += clkdev.h generic-y += cputime.h generic-y += exec.h generic-y += hash.h +generic-y += irq_work.h generic-y += kvm_para.h generic-y += linkage.h generic-y += mcs_spinlock.h
arch/frv/include/asm/Kbuild +1 -0
@@ -3,6 +3,7 @@ generic-y += clkdev.h generic-y += cputime.h generic-y += exec.h generic-y += hash.h +generic-y += irq_work.h generic-y += mcs_spinlock.h generic-y += preempt.h generic-y += scatterlist.h
arch/hexagon/include/asm/Kbuild +1 -0
@@ -23,6 +23,7 @@ generic-y += ioctls.h generic-y += iomap.h generic-y += ipcbuf.h generic-y += irq_regs.h +generic-y += irq_work.h generic-y += kdebug.h generic-y += kmap_types.h generic-y += local.h
arch/ia64/include/asm/Kbuild +1 -0
@@ -2,6 +2,7 @@ generic-y += clkdev.h generic-y += exec.h generic-y += hash.h +generic-y += irq_work.h generic-y += kvm_para.h generic-y += mcs_spinlock.h generic-y += preempt.h
arch/m32r/include/asm/Kbuild +1 -0
@@ -3,6 +3,7 @@ generic-y += clkdev.h generic-y += cputime.h generic-y += exec.h generic-y += hash.h +generic-y += irq_work.h generic-y += mcs_spinlock.h generic-y += module.h generic-y += preempt.h
arch/m68k/include/asm/Kbuild +1 -0
@@ -11,6 +11,7 @@ generic-y += hw_irq.h generic-y += ioctl.h generic-y += ipcbuf.h generic-y += irq_regs.h +generic-y += irq_work.h generic-y += kdebug.h generic-y += kmap_types.h generic-y += kvm_para.h
arch/metag/include/asm/Kbuild +1 -0
@@ -19,6 +19,7 @@ generic-y += ioctl.h generic-y += ioctls.h generic-y += ipcbuf.h generic-y += irq_regs.h +generic-y += irq_work.h generic-y += kdebug.h generic-y += kmap_types.h generic-y += kvm_para.h
arch/microblaze/include/asm/Kbuild +1 -0
@@ -5,6 +5,7 @@ generic-y += cputime.h generic-y += device.h generic-y += exec.h generic-y += hash.h +generic-y += irq_work.h generic-y += mcs_spinlock.h generic-y += preempt.h generic-y += scatterlist.h
arch/mips/include/asm/Kbuild +1 -0
@@ -3,6 +3,7 @@ generic-y += cputime.h generic-y += current.h generic-y += emergency-restart.h generic-y += hash.h +generic-y += irq_work.h generic-y += local64.h generic-y += mcs_spinlock.h generic-y += mutex.h
arch/mn10300/include/asm/Kbuild +1 -0
@@ -4,6 +4,7 @@ generic-y += clkdev.h generic-y += cputime.h generic-y += exec.h generic-y += hash.h +generic-y += irq_work.h generic-y += mcs_spinlock.h generic-y += preempt.h generic-y += scatterlist.h
arch/openrisc/include/asm/Kbuild +1 -0
@@ -31,6 +31,7 @@ generic-y += ioctl.h generic-y += ioctls.h generic-y += ipcbuf.h generic-y += irq_regs.h +generic-y += irq_work.h generic-y += kdebug.h generic-y += kmap_types.h generic-y += kvm_para.h
arch/parisc/include/asm/Kbuild +1 -0
@@ -10,6 +10,7 @@ generic-y += exec.h generic-y += hash.h generic-y += hw_irq.h generic-y += irq_regs.h +generic-y += irq_work.h generic-y += kdebug.h generic-y += kvm_para.h generic-y += local.h
arch/powerpc/include/asm/Kbuild +1 -0
@@ -1,6 +1,7 @@ generic-y += clkdev.h generic-y += hash.h +generic-y += irq_work.h generic-y += mcs_spinlock.h generic-y += preempt.h generic-y += rwsem.h
arch/s390/include/asm/Kbuild +1 -0
@@ -2,6 +2,7 @@ generic-y += clkdev.h generic-y += hash.h +generic-y += irq_work.h generic-y += mcs_spinlock.h generic-y += preempt.h generic-y += scatterlist.h
arch/score/include/asm/Kbuild +1 -0
@@ -6,6 +6,7 @@ generic-y += barrier.h generic-y += clkdev.h generic-y += cputime.h generic-y += hash.h +generic-y += irq_work.h generic-y += mcs_spinlock.h generic-y += preempt.h generic-y += scatterlist.h
arch/sh/include/asm/Kbuild +1 -0
@@ -12,6 +12,7 @@ generic-y += hash.h generic-y += ioctl.h generic-y += ipcbuf.h generic-y += irq_regs.h +generic-y += irq_work.h generic-y += kvm_para.h generic-y += local.h generic-y += local64.h
arch/sparc/include/asm/Kbuild +1 -0
@@ -8,6 +8,7 @@ generic-y += emergency-restart.h generic-y += exec.h generic-y += hash.h generic-y += irq_regs.h +generic-y += irq_work.h generic-y += linkage.h generic-y += local.h generic-y += local64.h
arch/tile/include/asm/Kbuild +1 -0
@@ -17,6 +17,7 @@ generic-y += ioctl.h generic-y += ioctls.h generic-y += ipcbuf.h generic-y += irq_regs.h +generic-y += irq_work.h generic-y += local.h generic-y += local64.h generic-y += mcs_spinlock.h
arch/um/include/asm/Kbuild +1 -0
@@ -14,6 +14,7 @@ generic-y += hash.h generic-y += hw_irq.h generic-y += io.h generic-y += irq_regs.h +generic-y += irq_work.h generic-y += kdebug.h generic-y += mcs_spinlock.h generic-y += mutex.h
arch/unicore32/include/asm/Kbuild +1 -0
@@ -22,6 +22,7 @@ generic-y += ioctl.h generic-y += ioctls.h generic-y += ipcbuf.h generic-y += irq_regs.h +generic-y += irq_work.h generic-y += kdebug.h generic-y += kmap_types.h generic-y += local.h
arch/x86/include/asm/irq_work.h new file +11 -0
@@ -0,0 +1,11 @@ +#ifndef _ASM_IRQ_WORK_H +#define _ASM_IRQ_WORK_H + +#include <asm/processor.h> + +static inline bool arch_irq_work_has_interrupt (void ) +{ +return cpu_has_apic; +} + +#endif /* _ASM_IRQ_WORK_H */
arch/x86/kernel/irq_work.c +1 -1
@@ -41,7 +41,7 @@ __visible void smp_trace_irq_work_interrupt(struct pt_regs *regs)void arch_irq_work_raise (void ) {#ifdef CONFIG_X86_LOCAL_APIC -if (!cpu_has_apic) +if (!arch_irq_work_has_interrupt ())return ; apic->send_IPI_self (IRQ_WORK_VECTOR );
arch/xtensa/include/asm/Kbuild +1 -0
@@ -12,6 +12,7 @@ generic-y += hardirq.h generic-y += hash.h generic-y += ioctl.h generic-y += irq_regs.h +generic-y += irq_work.h generic-y += kdebug.h generic-y += kmap_types.h generic-y += kvm_para.h
include/asm-generic/irq_work.h new file +10 -0
@@ -0,0 +1,10 @@ +#ifndef __ASM_IRQ_WORK_H +#define __ASM_IRQ_WORK_H + +static inline bool arch_irq_work_has_interrupt (void ) +{ +return false; +} + +#endif /* __ASM_IRQ_WORK_H */ +
include/linux/irq_work.h +3 -0
@@ -39,9 +39,12 @@ bool irq_work_queue_on(struct irq_work *work, int cpu);#endif void irq_work_run (void ); +void irq_work_tick (void );void irq_work_sync (struct irq_work *work);#ifdef CONFIG_IRQ_WORK +#include <asm/irq_work.h> +bool irq_work_needs_cpu (void );#else static inline bool irq_work_needs_cpu (void ) {return false; }
include/linux/tick.h +0 -2
@@ -181,14 +181,12 @@ static inline bool tick_nohz_full_cpu(int cpu) return cpumask_test_cpu(cpu, tick_nohz_full_mask); } -extern void tick_nohz_init (void );extern void __tick_nohz_full_check (void );extern void tick_nohz_full_kick (void );extern void tick_nohz_full_kick_cpu (int cpu);extern void tick_nohz_full_kick_all (void );extern void __tick_nohz_task_switch (struct task_struct *tsk);#else -static inline void tick_nohz_init (void ) { }static inline bool tick_nohz_full_enabled (void ) {return false; }static inline bool tick_nohz_full_cpu (int cpu) {return false; }static inline void __tick_nohz_full_check (void ) { }
init/main.c +0 -1
@@ -577,7 +577,6 @@ asmlinkage __visible void __init start_kernel(void)local_irq_disable ();idr_init_cache ();rcu_init (); -tick_nohz_init ();context_tracking_init ();radix_tree_init ();/* init some links before init_ISA_irqs() */
kernel/irq_work.c +13 -2
@@ -115,8 +115,10 @@ bool irq_work_needs_cpu(void) raised = &__get_cpu_var (raised_list); lazy = &__get_cpu_var (lazy_list); -if (llist_empty (raised) &&llist_empty (lazy)) -return false; + +if (llist_empty (raised) ||arch_irq_work_has_interrupt ()) +if (llist_empty (lazy)) +return false;/* All work should have been flushed before going offline */ WARN_ON_ONCE (cpu_is_offline (smp_processor_id ()));
@@ -171,6 +173,15 @@ void irq_work_run(void) }EXPORT_SYMBOL_GPL (irq_work_run); +void irq_work_tick (void ) +{ +struct llist_head *raised = &__get_cpu_var (raised_list); + +if (!llist_empty (raised) && !arch_irq_work_has_interrupt ()) +irq_work_run_list (raised); +irq_work_run_list (&__get_cpu_var (lazy_list)); +} +/* * Synchronize against the irq_work @entry, ensures the entry is not * currently in use.
kernel/time/tick-common.c +1 -0
@@ -400,4 +400,5 @@ void tick_resume(void)void __init tick_init (void ) {tick_broadcast_init (); +tick_nohz_init (); }
kernel/time/tick-internal.h +7 -0
@@ -99,6 +99,13 @@ static inline int tick_broadcast_oneshot_active(void) { return 0; }static inline bool tick_broadcast_oneshot_available (void ) {return false; }#endif /* !TICK_ONESHOT */ +/* NO_HZ_FULL internal */ +#ifdef CONFIG_NO_HZ_FULL +extern void tick_nohz_init (void ); +# else +static inline void tick_nohz_init (void ) { } +#endif +/* * Broadcasting support */
kernel/time/tick-sched.c +33 -19
79 lines not on this page · raw message
kernel/time/timer.c +1 -1
@@ -1385,7 +1385,7 @@ void update_process_times(int user_tick)rcu_check_callbacks (cpu, user_tick);#ifdef CONFIG_IRQ_WORK if (in_irq ()) -irq_work_run (); +irq_work_tick ();#endif scheduler_tick ();run_posix_cpu_timers (p);
Hmm..
Quoted 5 lines · Ingo Molnar
Please pull the latest timers-nohz-for-linus git tree from:
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.gittimers-nohz-for-linus
Quoted 7 lines
# HEAD:
9b01f5bf3999a3db5b1bbd9fdfd80d8d304e94eenohz: nohz full depends on irq work self IPI supportMain changes:
- Fix the deadlock reported by Dave Jones et al
- Clean up and fixnohz_fullinteraction with arch abilities
- nohz init code consolidation/cleanup
Ok, pulled. But none of these are marked for stable, yet the deadlock people are seeing is in 3.17. Is there a separate line of minimal fixes just for that? Or was the lack of stable tags just an oversight?
Linus
Quoted 12 lines · Linus Torvalds
Hmm..
Quoted 9 lines · Ingo Molnar
Please pull the latest timers-nohz-for-linus git tree from:
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.gittimers-nohz-for-linus# HEAD:
9b01f5bf3999a3db5b1bbd9fdfd80d8d304e94eenohz: nohz full depends on irq work self IPI supportMain changes:
Quoted 7 lines
Quoted 3 lines
- Fix the deadlock reported by Dave Jones et al
- Clean up and fixnohz_fullinteraction with arch abilities
- nohz init code consolidation/cleanupOk, pulled. But none of these are marked for stable, yet the deadlock people are seeing is in 3.17. Is there a separate line of minimal fixes just for that? Or was the lack of stable tags just an oversight?
It was first intended because the patchset is quite invasive and nohz full has no known users, or perhaps there is one... So I thought that backporting could be more dangerous than anything.
Now thinking more about it I could isolate the following patches for stable:
irq_work: Introduce arch_irq_work_has_interrupt()
irq_work: Force raised irq work to run on irq work interrupt
x86: Tell irq work about self IPI support
arm: Tell irq work about self IPI support
Sending these to [email protected] would catch up, right? I can still do that.
Thanks.
Greg KH
maintainerQuoted 28 lines · Frederic Weisbecker
Quoted 12 lines · Linus Torvalds
Hmm..
Quoted 9 lines · Ingo Molnar
Please pull the latest timers-nohz-for-linus git tree from:
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.gittimers-nohz-for-linus# HEAD:
9b01f5bf3999a3db5b1bbd9fdfd80d8d304e94eenohz: nohz full depends on irq work self IPI supportMain changes:
Quoted 7 lines
Quoted 3 lines
- Fix the deadlock reported by Dave Jones et al
- Clean up and fixnohz_fullinteraction with arch abilities
- nohz init code consolidation/cleanupOk, pulled. But none of these are marked for stable, yet the deadlock people are seeing is in 3.17. Is there a separate line of minimal fixes just for that? Or was the lack of stable tags just an oversight?
It was first intended because the patchset is quite invasive and nohz full has no known users, or perhaps there is one... So I thought that backporting could be more dangerous than anything.
Now thinking more about it I could isolate the following patches for stable:
Quoted 7 lines
irq_work: Introducearch_irq_work_has_interrupt()
irq_work: Force raised irq work to run on irq work interrupt
x86: Tell irq work about self IPI support
arm: Tell irq work about self IPI supportSending these to [email protected] would catch up, right? I can still do that.
If I can just pick those patches directly, that's all I need for the stable trees. What are the git ids in Linus's tree for these patches, so that I know I got this correct?
thanks,
greg k-h
Quoted 34 lines · Greg KH
Quoted 33 lines · Frederic Weisbecker
Quoted 12 lines · Linus Torvalds
Hmm..
Quoted 9 lines · Ingo Molnar
Please pull the latest timers-nohz-for-linus git tree from:
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.gittimers-nohz-for-linus# HEAD:
9b01f5bf3999a3db5b1bbd9fdfd80d8d304e94eenohz: nohz full depends on irq work self IPI supportMain changes:
Quoted 7 lines
Quoted 3 lines
- Fix the deadlock reported by Dave Jones et al
- Clean up and fixnohz_fullinteraction with arch abilities
- nohz init code consolidation/cleanupOk, pulled. But none of these are marked for stable, yet the deadlock people are seeing is in 3.17. Is there a separate line of minimal fixes just for that? Or was the lack of stable tags just an oversight?
It was first intended because the patchset is quite invasive and nohz full has no known users, or perhaps there is one... So I thought that backporting could be more dangerous than anything.
Now thinking more about it I could isolate the following patches for stable:
irq_work: Introducearch_irq_work_has_interrupt()
irq_work: Force raised irq work to run on irq work interrupt
x86: Tell irq work about self IPI support
arm: Tell irq work about self IPI support
Quoted 6 lines
Quoted 2 lines
Sending these to [email protected] would catch up, right? I can still do that.
If I can just pick those patches directly, that's all I need for the stable trees. What are the git ids in Linus's tree for these patches, so that I know I got this correct?
Awesome, here we go in order:
_ c5c38ef3d70377dc504a6a3f611a3ec814bc757b: irq_work: Introduce arch_irq_work_has_interrupt() _ 76a33061b9323b7fdb220ae5fa116c10833ec22e: irq_work: Force raised irq work to run on irq work interrupt _ 3010279f0fc36f0388872203e63ca49912f648fd: x86: Tell irq work about self IPI support
_ 09f6edd424218eb69078551b2ecfada1f2d098eb: arm: Tell irq work about self IPI support
Only 3.17 should be concerned.
Thanks a lot Greg!
Quoted 3 lines
thanks,
greg k-h
Greg KH
maintainerQuoted 42 lines · Frederic Weisbecker
Quoted 34 lines · Greg KH
Quoted 33 lines · Frederic Weisbecker
Quoted 12 lines · Linus Torvalds
Hmm..
Quoted 9 lines · Ingo Molnar
Please pull the latest timers-nohz-for-linus git tree from:
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.gittimers-nohz-for-linus# HEAD:
9b01f5bf3999a3db5b1bbd9fdfd80d8d304e94eenohz: nohz full depends on irq work self IPI supportMain changes:
Quoted 7 lines
Quoted 3 lines
- Fix the deadlock reported by Dave Jones et al
- Clean up and fixnohz_fullinteraction with arch abilities
- nohz init code consolidation/cleanupOk, pulled. But none of these are marked for stable, yet the deadlock people are seeing is in 3.17. Is there a separate line of minimal fixes just for that? Or was the lack of stable tags just an oversight?
It was first intended because the patchset is quite invasive and nohz full has no known users, or perhaps there is one... So I thought that backporting could be more dangerous than anything.
Now thinking more about it I could isolate the following patches for stable:
irq_work: Introducearch_irq_work_has_interrupt()
irq_work: Force raised irq work to run on irq work interrupt
x86: Tell irq work about self IPI support
arm: Tell irq work about self IPI supportQuoted 6 lines
Quoted 2 lines
Sending these to [email protected] would catch up, right? I can still do that.
If I can just pick those patches directly, that's all I need for the stable trees. What are the git ids in Linus's tree for these patches, so that I know I got this correct?
Quoted 8 lines
Awesome, here we go in order:
_
c5c38ef3d70377dc504a6a3f611a3ec814bc757b:irq_work: Introducearch_irq_work_has_interrupt()_76a33061b9323b7fdb220ae5fa116c10833ec22e:irq_work: Force raised irq work to run on irq work interrupt _3010279f0fc36f0388872203e63ca49912f648fd: x86: Tell irq work about self IPI support
_09f6edd424218eb69078551b2ecfada1f2d098eb: arm: Tell irq work about self IPI supportOnly 3.17 should be concerned.
Great, I'll queue these up soon.
greg k-h