|
@@ -87,7 +87,8 @@ static void mn10300_cpupic_mask_ack(struct irq_data *d)
|
|
tmp2 = GxICR(irq);
|
|
tmp2 = GxICR(irq);
|
|
|
|
|
|
irq_affinity_online[irq] =
|
|
irq_affinity_online[irq] =
|
|
- cpumask_any_and(d->affinity, cpu_online_mask);
|
|
|
|
|
|
+ cpumask_any_and(irq_data_get_affinity_mask(d),
|
|
|
|
+ cpu_online_mask);
|
|
CROSS_GxICR(irq, irq_affinity_online[irq]) =
|
|
CROSS_GxICR(irq, irq_affinity_online[irq]) =
|
|
(tmp & (GxICR_LEVEL | GxICR_ENABLE)) | GxICR_DETECT;
|
|
(tmp & (GxICR_LEVEL | GxICR_ENABLE)) | GxICR_DETECT;
|
|
tmp = CROSS_GxICR(irq, irq_affinity_online[irq]);
|
|
tmp = CROSS_GxICR(irq, irq_affinity_online[irq]);
|
|
@@ -124,7 +125,7 @@ static void mn10300_cpupic_unmask_clear(struct irq_data *d)
|
|
} else {
|
|
} else {
|
|
tmp = GxICR(irq);
|
|
tmp = GxICR(irq);
|
|
|
|
|
|
- irq_affinity_online[irq] = cpumask_any_and(d->affinity,
|
|
|
|
|
|
+ irq_affinity_online[irq] = cpumask_any_and(irq_data_get_affinity_mask(d),
|
|
cpu_online_mask);
|
|
cpu_online_mask);
|
|
CROSS_GxICR(irq, irq_affinity_online[irq]) = (tmp & GxICR_LEVEL) | GxICR_ENABLE | GxICR_DETECT;
|
|
CROSS_GxICR(irq, irq_affinity_online[irq]) = (tmp & GxICR_LEVEL) | GxICR_ENABLE | GxICR_DETECT;
|
|
tmp = CROSS_GxICR(irq, irq_affinity_online[irq]);
|
|
tmp = CROSS_GxICR(irq, irq_affinity_online[irq]);
|
|
@@ -316,15 +317,16 @@ void migrate_irqs(void)
|
|
self = smp_processor_id();
|
|
self = smp_processor_id();
|
|
for (irq = 0; irq < NR_IRQS; irq++) {
|
|
for (irq = 0; irq < NR_IRQS; irq++) {
|
|
struct irq_data *data = irq_get_irq_data(irq);
|
|
struct irq_data *data = irq_get_irq_data(irq);
|
|
|
|
+ struct cpumask *mask = irq_data_get_affinity_mask(data);
|
|
|
|
|
|
if (irqd_is_per_cpu(data))
|
|
if (irqd_is_per_cpu(data))
|
|
continue;
|
|
continue;
|
|
|
|
|
|
- if (cpumask_test_cpu(self, data->affinity) &&
|
|
|
|
|
|
+ if (cpumask_test_cpu(self, mask) &&
|
|
!cpumask_intersects(&irq_affinity[irq], cpu_online_mask)) {
|
|
!cpumask_intersects(&irq_affinity[irq], cpu_online_mask)) {
|
|
int cpu_id;
|
|
int cpu_id;
|
|
cpu_id = cpumask_first(cpu_online_mask);
|
|
cpu_id = cpumask_first(cpu_online_mask);
|
|
- cpumask_set_cpu(cpu_id, data->affinity);
|
|
|
|
|
|
+ cpumask_set_cpu(cpu_id, mask);
|
|
}
|
|
}
|
|
/* We need to operate irq_affinity_online atomically. */
|
|
/* We need to operate irq_affinity_online atomically. */
|
|
arch_local_cli_save(flags);
|
|
arch_local_cli_save(flags);
|
|
@@ -335,8 +337,7 @@ void migrate_irqs(void)
|
|
GxICR(irq) = x & GxICR_LEVEL;
|
|
GxICR(irq) = x & GxICR_LEVEL;
|
|
tmp = GxICR(irq);
|
|
tmp = GxICR(irq);
|
|
|
|
|
|
- new = cpumask_any_and(data->affinity,
|
|
|
|
- cpu_online_mask);
|
|
|
|
|
|
+ new = cpumask_any_and(mask, cpu_online_mask);
|
|
irq_affinity_online[irq] = new;
|
|
irq_affinity_online[irq] = new;
|
|
|
|
|
|
CROSS_GxICR(irq, new) =
|
|
CROSS_GxICR(irq, new) =
|