 /* If a CPU which we ran on has gone down, OK. */ cpus_and(cpumask, cpumask, cpu_online_map); if (cpus_empty(cpumask)) return; 
static void flush_tlb_others(cpumask_t cpumask, struct mm_struct *mm,						unsigned long va){	cpumask_t tmp;	/*	 * A couple of (to be removed) sanity checks:	 *	 * - we do not send IPIs to not-yet booted CPUs.	 * - current CPU must not be in mask	 * - mask must exist :)	 */	BUG_ON(cpus_empty(cpumask));	cpus_and(tmp, cpumask, cpu_online_map);	BUG_ON(!cpus_equal(cpumask, tmp));	BUG_ON(cpu_isset(smp_processor_id(), cpumask));	BUG_ON(!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.	 */	spin_lock(&tlbstate_lock);		flush_mm = mm;	flush_va = va;#if NR_CPUS <= BITS_PER_LONG	atomic_set_mask(cpumask, &flush_cpumask);#else	{		int k;		unsigned long *flush_mask = (unsigned long *)&flush_cpumask;		unsigned long *cpu_mask = (unsigned long *)&cpumask;		for (k = 0; k < BITS_TO_LONGS(NR_CPUS); ++k)			atomic_set_mask(cpu_mask[k], &flush_mask[k]);	}#endif	/*	 * We have to send the IPI only to	 * CPUs affected.	 */	send_IPI_mask(cpumask, INVALIDATE_TLB_VECTOR);	while (!cpus_empty(flush_cpumask))		/* nothing. lockup detection does not belong here */		mb();	flush_mm = NULL;	flush_va = 0;	spin_unlock(&tlbstate_lock);}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/f370513640492641b4046bfd9a6e4714f6ae530d/smp.c/buggy/arch/i386/kernel/smp.c