Linus,

please pull the latest smp-urgent-for-linus git tree from:

   git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git 
smp-urgent-for-linus

up to:  19dbdcb8039c: smp: Warn on function calls from softirq context

Add warnings to the smp function calls so callers from wrong contexts get
detected.

Thanks,

        tglx

------------------>
Peter Zijlstra (1):
      smp: Warn on function calls from softirq context


 kernel/smp.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/kernel/smp.c b/kernel/smp.c
index 616d4d114847..7dbcb402c2fc 100644
--- a/kernel/smp.c
+++ b/kernel/smp.c
@@ -291,6 +291,14 @@ int smp_call_function_single(int cpu, smp_call_func_t 
func, void *info,
        WARN_ON_ONCE(cpu_online(this_cpu) && irqs_disabled()
                     && !oops_in_progress);
 
+       /*
+        * When @wait we can deadlock when we interrupt between llist_add() and
+        * arch_send_call_function_ipi*(); when !@wait we can deadlock due to
+        * csd_lock() on because the interrupt context uses the same csd
+        * storage.
+        */
+       WARN_ON_ONCE(!in_task());
+
        csd = &csd_stack;
        if (!wait) {
                csd = this_cpu_ptr(&csd_data);
@@ -416,6 +424,14 @@ void smp_call_function_many(const struct cpumask *mask,
        WARN_ON_ONCE(cpu_online(this_cpu) && irqs_disabled()
                     && !oops_in_progress && !early_boot_irqs_disabled);
 
+       /*
+        * When @wait we can deadlock when we interrupt between llist_add() and
+        * arch_send_call_function_ipi*(); when !@wait we can deadlock due to
+        * csd_lock() on because the interrupt context uses the same csd
+        * storage.
+        */
+       WARN_ON_ONCE(!in_task());
+
        /* Try to fastpath.  So, what's a CPU they want? Ignoring this one. */
        cpu = cpumask_first_and(mask, cpu_online_mask);
        if (cpu == this_cpu)

Reply via email to