Pull percpu-dtc into release branch
[pandora-kernel.git] / arch / i386 / kernel / smp.c
index 1b080ab..0e89778 100644 (file)
@@ -374,8 +374,7 @@ static void flush_tlb_others(cpumask_t cpumask, struct mm_struct *mm,
        /*
         * i'm not happy about this global shared spinlock in the
         * MM hot path, but we'll see how contended it is.
-        * Temporarily this turns IRQs off, so that lockups are
-        * detected by the NMI watchdog.
+        * AK: x86-64 has a faster method that could be ported.
         */
        spin_lock(&tlbstate_lock);
        
@@ -400,7 +399,7 @@ static void flush_tlb_others(cpumask_t cpumask, struct mm_struct *mm,
 
        while (!cpus_empty(flush_cpumask))
                /* nothing. lockup detection does not belong here */
-               mb();
+               cpu_relax();
 
        flush_mm = NULL;
        flush_va = 0;
@@ -693,6 +692,10 @@ int smp_call_function_single(int cpu, void (*func) (void *info), void *info,
                put_cpu();
                return -EBUSY;
        }
+
+       /* Can deadlock when called with interrupts disabled */
+       WARN_ON(irqs_disabled());
+
        spin_lock_bh(&call_lock);
        __smp_call_function_single(cpu, func, info, nonatomic, wait);
        spin_unlock_bh(&call_lock);