diff options
Diffstat (limited to 'arch/x86/mm/tlb.c')
| -rw-r--r-- | arch/x86/mm/tlb.c | 21 | 
1 files changed, 10 insertions, 11 deletions
diff --git a/arch/x86/mm/tlb.c b/arch/x86/mm/tlb.c index 821e97017e9..c814e144a3f 100644 --- a/arch/x86/mm/tlb.c +++ b/arch/x86/mm/tlb.c @@ -183,18 +183,17 @@ static void flush_tlb_others_ipi(const struct cpumask *cpumask,  	f->flush_mm = mm;  	f->flush_va = va; -	cpumask_andnot(to_cpumask(f->flush_cpumask), -		       cpumask, cpumask_of(smp_processor_id())); - -	/* -	 * We have to send the IPI only to -	 * CPUs affected. -	 */ -	apic->send_IPI_mask(to_cpumask(f->flush_cpumask), -		      INVALIDATE_TLB_VECTOR_START + sender); +	if (cpumask_andnot(to_cpumask(f->flush_cpumask), cpumask, cpumask_of(smp_processor_id()))) { +		/* +		 * We have to send the IPI only to +		 * CPUs affected. +		 */ +		apic->send_IPI_mask(to_cpumask(f->flush_cpumask), +			      INVALIDATE_TLB_VECTOR_START + sender); -	while (!cpumask_empty(to_cpumask(f->flush_cpumask))) -		cpu_relax(); +		while (!cpumask_empty(to_cpumask(f->flush_cpumask))) +			cpu_relax(); +	}  	f->flush_mm = NULL;  	f->flush_va = 0;  |