Skip to contentSkip to conversation

timers/nohz updates for v3.18

GIT PULL Ingo Molnar 4 participants 6 messages Oct 9, 2014

Subsystems (21)
lore
Share & tools
lore

Ingo Molnar

author maintainer
#0 lore raw

Linus,

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
index e858aa0ad8af..a52cbf178c3a 100644
@@ -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
index e76fd79f32b0..b8fffc1a2ac2 100644
@@ -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
new file mode 100644
index 000000000000..712d03e5973a
@@ -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
index 9388a3d479e1..bbe22fcb78f6 100644
@@ -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
index 0b3fcf86e6ba..c1968475cc4e 100644
@@ -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
new file mode 100644
index 000000000000..8e24ef3f7c82
@@ -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
index a498f2cd2c2a..780f82c827b6 100644
@@ -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
index 474339718105..b06d1d90ee8c 100644
@@ -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
index 00a0f3ccd6eb..2a71b1cb9848 100644
@@ -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
index 0d93b9a79ca9..46ed6bb9c679 100644
@@ -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
index 8dbdce8421b0..e77e0c1dbe75 100644
@@ -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
index 31742dfadff9..802b94c4ca86 100644
@@ -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
index 5b73921b6e9d..3caf05cabfc5 100644
@@ -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
index 0e69796b58c7..5f234a5a2320 100644
@@ -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
index e8317d2d6c8d..747320be9d0e 100644
@@ -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
index accc10a3dc78..e02448b0648b 100644
@@ -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
index c67c94a2d672..dbaf9f3065e8 100644
@@ -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
index c29ead89a317..7b8111c8f937 100644
@@ -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
index 27a3acda6c19..448143b8cabd 100644
@@ -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
index 335e5290ec75..57012ef1f51e 100644
@@ -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
index ecbd6676bd33..77eb1a68d13b 100644
@@ -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
index 480af0d9c2f5..89b61d7dc790 100644
@@ -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
index ecf25e6678ad..ffb024b8423f 100644
@@ -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
index 7f23f162ce9c..31e8f59aff38 100644
@@ -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
index b3fea0722ff1..773f86676588 100644
@@ -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
index aad209199f7e..1909d2a5b82f 100644
@@ -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
index c19e47dacb31..5a6c9acff0d2 100644
@@ -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
index cdd1b447bb6c..f5f94ce1692c 100644
@@ -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
index 0aa5675e7025..e6462b8a6284 100644
@@ -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
index 7bd64aa2e94a..244b12c8cb39 100644
@@ -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
index 1e5fb872a4aa..5a2bb53faa42 100644
@@ -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
new file mode 100644
index 000000000000..78162f8e248b
@@ -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
index 1de84e3ab4e0..15d741ddfeeb 100644
@@ -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
index c3d20ba6eb86..105d38922c44 100644
@@ -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
new file mode 100644
index 000000000000..a44f452c6590
@@ -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
index bf9422c3aefe..bf3fe719c7ce 100644
@@ -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
index 9a82c7dc3fdd..595ee86f5e0d 100644
@@ -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
index bb1aed928f21..8af2f1abfe38 100644
@@ -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
index e6bcbe756663..385b85aded19 100644
@@ -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
index 0a0608edeb26..052b4b53c3d6 100644
@@ -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
index c19c1d84b6f3..366aeb4f2c66 100644
@@ -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
index aca5dfe2fa3d..9bbb8344ed3b 100644
@@ -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);
#1 lore raw

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.git timers-nohz-for-linus

Quoted 7 lines

# 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

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

#2 lore raw
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.git timers-nohz-for-linus

# HEAD: 9b01f5bf3999a3db5b1bbd9fdfd80d8d304e94ee nohz: nohz full depends on irq work self IPI support

Main changes:

Quoted 7 lines
Quoted 3 lines

- Fix the deadlock reported by Dave Jones et al
- Clean up and fix nohz_full interaction 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?

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.

maintainer
#3 lore raw
Quoted 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.git timers-nohz-for-linus

# HEAD: 9b01f5bf3999a3db5b1bbd9fdfd80d8d304e94ee nohz: nohz full depends on irq work self IPI support

Main changes:

Quoted 7 lines
Quoted 3 lines

- Fix the deadlock reported by Dave Jones et al
- Clean up and fix nohz_full interaction 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?

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: 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.

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

#4 lore raw
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.git timers-nohz-for-linus

# HEAD: 9b01f5bf3999a3db5b1bbd9fdfd80d8d304e94ee nohz: nohz full depends on irq work self IPI support

Main changes:

Quoted 7 lines
Quoted 3 lines

- Fix the deadlock reported by Dave Jones et al
- Clean up and fix nohz_full interaction 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?

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

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

maintainer
#5 lore raw
Quoted 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.git timers-nohz-for-linus

# HEAD: 9b01f5bf3999a3db5b1bbd9fdfd80d8d304e94ee nohz: nohz full depends on irq work self IPI support

Main changes:

Quoted 7 lines
Quoted 3 lines

- Fix the deadlock reported by Dave Jones et al
- Clean up and fix nohz_full interaction 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?

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

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?

Quoted 8 lines

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.

Great, I'll queue these up soon.

greg k-h