diff options
Diffstat (limited to 'arch/x86/platform/uv/uv_irq.c')
| -rw-r--r-- | arch/x86/platform/uv/uv_irq.c | 9 | 
1 files changed, 7 insertions, 2 deletions
diff --git a/arch/x86/platform/uv/uv_irq.c b/arch/x86/platform/uv/uv_irq.c index f25c2765a5c9..acf7752da952 100644 --- a/arch/x86/platform/uv/uv_irq.c +++ b/arch/x86/platform/uv/uv_irq.c @@ -135,6 +135,7 @@ arch_enable_uv_irq(char *irq_name, unsigned int irq, int cpu, int mmr_blade,  	unsigned long mmr_value;  	struct uv_IO_APIC_route_entry *entry;  	int mmr_pnode, err; +	unsigned int dest;  	BUILD_BUG_ON(sizeof(struct uv_IO_APIC_route_entry) !=  			sizeof(unsigned long)); @@ -143,6 +144,10 @@ arch_enable_uv_irq(char *irq_name, unsigned int irq, int cpu, int mmr_blade,  	if (err != 0)  		return err; +	err = apic->cpu_mask_to_apicid_and(eligible_cpu, eligible_cpu, &dest); +	if (err != 0) +		return err; +  	if (limit == UV_AFFINITY_CPU)  		irq_set_status_flags(irq, IRQ_NO_BALANCING);  	else @@ -159,7 +164,7 @@ arch_enable_uv_irq(char *irq_name, unsigned int irq, int cpu, int mmr_blade,  	entry->polarity		= 0;  	entry->trigger		= 0;  	entry->mask		= 0; -	entry->dest		= apic->cpu_mask_to_apicid(eligible_cpu); +	entry->dest		= dest;  	mmr_pnode = uv_blade_to_pnode(mmr_blade);  	uv_write_global_mmr64(mmr_pnode, mmr_offset, mmr_value); @@ -222,7 +227,7 @@ uv_set_irq_affinity(struct irq_data *data, const struct cpumask *mask,  	if (cfg->move_in_progress)  		send_cleanup_vector(cfg); -	return 0; +	return IRQ_SET_MASK_OK_NOCOPY;  }  /*  | 
