aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/ia64/kernel/msi_ia64.c10
-rw-r--r--arch/ia64/sn/kernel/irq.c4
-rw-r--r--arch/ia64/sn/kernel/msi_sn.c2
3 files changed, 5 insertions, 11 deletions
diff --git a/arch/ia64/kernel/msi_ia64.c b/arch/ia64/kernel/msi_ia64.c
index fb2f1e622877..c430f9198d1b 100644
--- a/arch/ia64/kernel/msi_ia64.c
+++ b/arch/ia64/kernel/msi_ia64.c
@@ -17,12 +17,9 @@ static int ia64_set_msi_irq_affinity(struct irq_data *idata,
17{ 17{
18 struct msi_msg msg; 18 struct msi_msg msg;
19 u32 addr, data; 19 u32 addr, data;
20 int cpu = first_cpu(*cpu_mask); 20 int cpu = cpumask_first_and(cpu_mask, cpu_online_mask);
21 unsigned int irq = idata->irq; 21 unsigned int irq = idata->irq;
22 22
23 if (!cpu_online(cpu))
24 return -1;
25
26 if (irq_prepare_move(irq, cpu)) 23 if (irq_prepare_move(irq, cpu))
27 return -1; 24 return -1;
28 25
@@ -139,10 +136,7 @@ static int dmar_msi_set_affinity(struct irq_data *data,
139 unsigned int irq = data->irq; 136 unsigned int irq = data->irq;
140 struct irq_cfg *cfg = irq_cfg + irq; 137 struct irq_cfg *cfg = irq_cfg + irq;
141 struct msi_msg msg; 138 struct msi_msg msg;
142 int cpu = cpumask_first(mask); 139 int cpu = cpumask_first_and(mask, cpu_online_mask);
143
144 if (!cpu_online(cpu))
145 return -1;
146 140
147 if (irq_prepare_move(irq, cpu)) 141 if (irq_prepare_move(irq, cpu))
148 return -1; 142 return -1;
diff --git a/arch/ia64/sn/kernel/irq.c b/arch/ia64/sn/kernel/irq.c
index 62cf4dde6a04..85d095154902 100644
--- a/arch/ia64/sn/kernel/irq.c
+++ b/arch/ia64/sn/kernel/irq.c
@@ -209,8 +209,8 @@ static int sn_set_affinity_irq(struct irq_data *data,
209 nasid_t nasid; 209 nasid_t nasid;
210 int slice; 210 int slice;
211 211
212 nasid = cpuid_to_nasid(cpumask_first(mask)); 212 nasid = cpuid_to_nasid(cpumask_first_and(mask, cpu_online_mask));
213 slice = cpuid_to_slice(cpumask_first(mask)); 213 slice = cpuid_to_slice(cpumask_first_and(mask, cpu_online_mask));
214 214
215 list_for_each_entry_safe(sn_irq_info, sn_irq_info_safe, 215 list_for_each_entry_safe(sn_irq_info, sn_irq_info_safe,
216 sn_irq_lh[irq], list) 216 sn_irq_lh[irq], list)
diff --git a/arch/ia64/sn/kernel/msi_sn.c b/arch/ia64/sn/kernel/msi_sn.c
index 2b98b9e088de..afc58d2799ad 100644
--- a/arch/ia64/sn/kernel/msi_sn.c
+++ b/arch/ia64/sn/kernel/msi_sn.c
@@ -166,7 +166,7 @@ static int sn_set_msi_irq_affinity(struct irq_data *data,
166 struct sn_pcibus_provider *provider; 166 struct sn_pcibus_provider *provider;
167 unsigned int cpu, irq = data->irq; 167 unsigned int cpu, irq = data->irq;
168 168
169 cpu = cpumask_first(cpu_mask); 169 cpu = cpumask_first_and(cpu_mask, cpu_online_mask);
170 sn_irq_info = sn_msi_info[irq].sn_irq_info; 170 sn_irq_info = sn_msi_info[irq].sn_irq_info;
171 if (sn_irq_info == NULL || sn_irq_info->irq_int_bit >= 0) 171 if (sn_irq_info == NULL || sn_irq_info->irq_int_bit >= 0)
172 return -1; 172 return -1;