Subject: + kernel-smpc-quit-unconditionally-enabling-irqs-in-on_each_cpu_mask.patch added to -mm tree To: david.daney@xxxxxxxxxx,a.p.zijlstra@xxxxxxxxx,cl@xxxxxxxxx,cmetcalf@xxxxxxxxxx,gilad@xxxxxxxxxxxxx From: akpm@xxxxxxxxxxxxxxxxxxxx Date: Mon, 12 Aug 2013 15:16:38 -0700 The patch titled Subject: kernel/smp.c: quit unconditionally enabling irqs in on_each_cpu_mask(). has been added to the -mm tree. Its filename is kernel-smpc-quit-unconditionally-enabling-irqs-in-on_each_cpu_mask.patch This patch should soon appear at http://ozlabs.org/~akpm/mmots/broken-out/kernel-smpc-quit-unconditionally-enabling-irqs-in-on_each_cpu_mask.patch and later at http://ozlabs.org/~akpm/mmotm/broken-out/kernel-smpc-quit-unconditionally-enabling-irqs-in-on_each_cpu_mask.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/SubmitChecklist when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: David Daney <david.daney@xxxxxxxxxx> Subject: kernel/smp.c: quit unconditionally enabling irqs in on_each_cpu_mask(). As in f21afc25f9ed ("smp.h: Use local_irq_{save,restore}() in !SMP version of on_each_cpu()"), we don't want to enable irqs if they are not already enabled. I don't know of any bugs currently caused by this unconditional local_irq_enable(), but I want to use this function in MIPS/OCTEON early boot (when we have early_boot_irqs_disabled). This also makes this function have similar semantics to on_each_cpu() which is good in itself. Signed-off-by: David Daney <david.daney@xxxxxxxxxx> Cc: Gilad Ben-Yossef <gilad@xxxxxxxxxxxxx> Cc: Christoph Lameter <cl@xxxxxxxxx> Cc: Chris Metcalf <cmetcalf@xxxxxxxxxx> Cc: Peter Zijlstra <a.p.zijlstra@xxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- kernel/smp.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff -puN kernel/smp.c~kernel-smpc-quit-unconditionally-enabling-irqs-in-on_each_cpu_mask kernel/smp.c --- a/kernel/smp.c~kernel-smpc-quit-unconditionally-enabling-irqs-in-on_each_cpu_mask +++ a/kernel/smp.c @@ -575,8 +575,10 @@ EXPORT_SYMBOL(on_each_cpu); * * If @wait is true, then returns once @func has returned. * - * You must not call this function with disabled interrupts or - * from a hardware interrupt handler or from a bottom half handler. + * You must not call this function with disabled interrupts or from a + * hardware interrupt handler or from a bottom half handler. The + * exception is that it may be used during early boot while + * early_boot_irqs_disabled is set. */ void on_each_cpu_mask(const struct cpumask *mask, smp_call_func_t func, void *info, bool wait) @@ -585,9 +587,10 @@ void on_each_cpu_mask(const struct cpuma smp_call_function_many(mask, func, info, wait); if (cpumask_test_cpu(cpu, mask)) { - local_irq_disable(); + unsigned long flags; + local_irq_save(flags); func(info); - local_irq_enable(); + local_irq_restore(flags); } put_cpu(); } _ Patches currently in -mm which might be from david.daney@xxxxxxxxxx are linux-next.patch revert-include-linux-smph-on_each_cpu-switch-back-to-a-macro.patch smp-quit-unconditionally-enabling-irq-in-on_each_cpu_mask-and-on_each_cpu_cond.patch upc-use-local_irq_saverestore-in-smp_call_function_single.patch smph-move-smp-version-of-on_each_cpu-out-of-line.patch extable-skip-sorting-if-the-table-is-empty.patch kernel-smpc-quit-unconditionally-enabling-irqs-in-on_each_cpu_mask.patch -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html