diff options
Diffstat (limited to 'arch')
| -rw-r--r-- | arch/x86/kernel/tlb_uv.c | 9 | 
1 files changed, 7 insertions, 2 deletions
| diff --git a/arch/x86/kernel/tlb_uv.c b/arch/x86/kernel/tlb_uv.c index d038b9c45cf..8afb69180c9 100644 --- a/arch/x86/kernel/tlb_uv.c +++ b/arch/x86/kernel/tlb_uv.c @@ -275,6 +275,8 @@ const struct cpumask *uv_flush_send_and_wait(int cpu, int this_blade,  	return NULL;  } +static DEFINE_PER_CPU(cpumask_var_t, uv_flush_tlb_mask); +  /**   * uv_flush_tlb_others - globally purge translation cache of a virtual   * address or all TLB's @@ -304,8 +306,7 @@ const struct cpumask *uv_flush_tlb_others(const struct cpumask *cpumask,  					  struct mm_struct *mm,  					  unsigned long va, unsigned int cpu)  { -	static DEFINE_PER_CPU(cpumask_t, flush_tlb_mask); -	struct cpumask *flush_mask = &__get_cpu_var(flush_tlb_mask); +	struct cpumask *flush_mask = __get_cpu_var(uv_flush_tlb_mask);  	int i;  	int bit;  	int blade; @@ -755,6 +756,10 @@ static int __init uv_bau_init(void)  	if (!is_uv_system())  		return 0; +	for_each_possible_cpu(cur_cpu) +		alloc_cpumask_var_node(&per_cpu(uv_flush_tlb_mask, cur_cpu), +				       GFP_KERNEL, cpu_to_node(cur_cpu)); +  	uv_bau_retry_limit = 1;  	uv_nshift = uv_hub_info->n_val;  	uv_mmask = (1UL << uv_hub_info->n_val) - 1; | 
