Skip to content

Commit d4a930a

Browse files
author
Marc Zyngier
committed
Merge branch irq/plic-masking into irq/irqchip-next
* irq/plic-masking: : . : SiFive PLIC optimisations from Samuel Holland: : : "This series removes the spinlocks and cpumask operations from the PLIC : driver's hot path. As far as I know, using the priority to mask : interrupts is an intended usage and will work on all existing : implementations. [...]" : . irqchip/sifive-plic: Separate the enable and mask operations irqchip/sifive-plic: Make better use of the effective affinity mask PCI: hv: Take a const cpumask in hv_compose_msi_req_get_cpu() genirq: Provide an IRQ affinity mask in non-SMP configs genirq: Return a const cpumask from irq_data_get_affinity_mask genirq: Add and use an irq_data_update_affinity helper genirq: Refactor accessors to use irq_data_get_affinity_mask genirq: Drop redundant irq_init_effective_affinity genirq: GENERIC_IRQ_EFFECTIVE_AFF_MASK depends on SMP genirq: GENERIC_IRQ_IPI depends on SMP irqchip/mips-gic: Only register IPI domain when SMP is enabled Signed-off-by: Marc Zyngier <maz@kernel.org>
2 parents 828f560 + a1706a1 commit d4a930a

File tree

25 files changed

+176
-125
lines changed

25 files changed

+176
-125
lines changed

arch/alpha/kernel/irq.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ int irq_select_affinity(unsigned int irq)
6060
cpu = (cpu < (NR_CPUS-1) ? cpu + 1 : 0);
6161
last_cpu = cpu;
6262

63-
cpumask_copy(irq_data_get_affinity_mask(data), cpumask_of(cpu));
63+
irq_data_update_affinity(data, cpumask_of(cpu));
6464
chip->irq_set_affinity(data, cpumask_of(cpu), false);
6565
return 0;
6666
}

arch/arm/mach-hisi/Kconfig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ config ARCH_HIP04
4040
select HAVE_ARM_ARCH_TIMER
4141
select MCPM if SMP
4242
select MCPM_QUAD_CLUSTER if SMP
43-
select GENERIC_IRQ_EFFECTIVE_AFF_MASK
43+
select GENERIC_IRQ_EFFECTIVE_AFF_MASK if SMP
4444
help
4545
Support for Hisilicon HiP04 SoC family
4646

arch/ia64/kernel/iosapic.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -834,7 +834,7 @@ iosapic_unregister_intr (unsigned int gsi)
834834
if (iosapic_intr_info[irq].count == 0) {
835835
#ifdef CONFIG_SMP
836836
/* Clear affinity */
837-
cpumask_setall(irq_get_affinity_mask(irq));
837+
irq_data_update_affinity(irq_get_irq_data(irq), cpu_all_mask);
838838
#endif
839839
/* Clear the interrupt information */
840840
iosapic_intr_info[irq].dest = 0;

arch/ia64/kernel/irq.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@ static char irq_redir [NR_IRQS]; // = { [0 ... NR_IRQS-1] = 1 };
5757
void set_irq_affinity_info (unsigned int irq, int hwid, int redir)
5858
{
5959
if (irq < NR_IRQS) {
60-
cpumask_copy(irq_get_affinity_mask(irq),
61-
cpumask_of(cpu_logical_id(hwid)));
60+
irq_data_update_affinity(irq_get_irq_data(irq),
61+
cpumask_of(cpu_logical_id(hwid)));
6262
irq_redir[irq] = (char) (redir & 0xff);
6363
}
6464
}

arch/ia64/kernel/msi_ia64.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ static int ia64_set_msi_irq_affinity(struct irq_data *idata,
3737
msg.data = data;
3838

3939
pci_write_msi_msg(irq, &msg);
40-
cpumask_copy(irq_data_get_affinity_mask(idata), cpumask_of(cpu));
40+
irq_data_update_affinity(idata, cpumask_of(cpu));
4141

4242
return 0;
4343
}
@@ -132,7 +132,7 @@ static int dmar_msi_set_affinity(struct irq_data *data,
132132
msg.address_lo |= MSI_ADDR_DEST_ID_CPU(cpu_physical_id(cpu));
133133

134134
dmar_msi_write(irq, &msg);
135-
cpumask_copy(irq_data_get_affinity_mask(data), mask);
135+
irq_data_update_affinity(data, mask);
136136

137137
return 0;
138138
}

arch/mips/cavium-octeon/octeon-irq.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ static int next_cpu_for_irq(struct irq_data *data)
263263

264264
#ifdef CONFIG_SMP
265265
int cpu;
266-
struct cpumask *mask = irq_data_get_affinity_mask(data);
266+
const struct cpumask *mask = irq_data_get_affinity_mask(data);
267267
int weight = cpumask_weight(mask);
268268
struct octeon_ciu_chip_data *cd = irq_data_get_irq_chip_data(data);
269269

@@ -758,7 +758,7 @@ static void octeon_irq_cpu_offline_ciu(struct irq_data *data)
758758
{
759759
int cpu = smp_processor_id();
760760
cpumask_t new_affinity;
761-
struct cpumask *mask = irq_data_get_affinity_mask(data);
761+
const struct cpumask *mask = irq_data_get_affinity_mask(data);
762762

763763
if (!cpumask_test_cpu(cpu, mask))
764764
return;

arch/parisc/kernel/irq.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ unsigned long txn_affinity_addr(unsigned int irq, int cpu)
315315
{
316316
#ifdef CONFIG_SMP
317317
struct irq_data *d = irq_get_irq_data(irq);
318-
cpumask_copy(irq_data_get_affinity_mask(d), cpumask_of(cpu));
318+
irq_data_update_affinity(d, cpumask_of(cpu));
319319
#endif
320320

321321
return per_cpu(cpu_data, cpu).txn_addr;

arch/sh/kernel/irq.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -230,16 +230,17 @@ void migrate_irqs(void)
230230
struct irq_data *data = irq_get_irq_data(irq);
231231

232232
if (irq_data_get_node(data) == cpu) {
233-
struct cpumask *mask = irq_data_get_affinity_mask(data);
233+
const struct cpumask *mask = irq_data_get_affinity_mask(data);
234234
unsigned int newcpu = cpumask_any_and(mask,
235235
cpu_online_mask);
236236
if (newcpu >= nr_cpu_ids) {
237237
pr_info_ratelimited("IRQ%u no longer affine to CPU%u\n",
238238
irq, cpu);
239239

240-
cpumask_setall(mask);
240+
irq_set_affinity(irq, cpu_all_mask);
241+
} else {
242+
irq_set_affinity(irq, mask);
241243
}
242-
irq_set_affinity(irq, mask);
243244
}
244245
}
245246
}

arch/x86/hyperv/irqdomain.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ static void hv_irq_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)
192192
struct pci_dev *dev;
193193
struct hv_interrupt_entry out_entry, *stored_entry;
194194
struct irq_cfg *cfg = irqd_cfg(data);
195-
cpumask_t *affinity;
195+
const cpumask_t *affinity;
196196
int cpu;
197197
u64 status;
198198

arch/xtensa/kernel/irq.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ void migrate_irqs(void)
169169

170170
for_each_active_irq(i) {
171171
struct irq_data *data = irq_get_irq_data(i);
172-
struct cpumask *mask;
172+
const struct cpumask *mask;
173173
unsigned int newcpu;
174174

175175
if (irqd_is_per_cpu(data))
@@ -185,9 +185,10 @@ void migrate_irqs(void)
185185
pr_info_ratelimited("IRQ%u no longer affine to CPU%u\n",
186186
i, cpu);
187187

188-
cpumask_setall(mask);
188+
irq_set_affinity(i, cpu_all_mask);
189+
} else {
190+
irq_set_affinity(i, mask);
189191
}
190-
irq_set_affinity(i, mask);
191192
}
192193
}
193194
#endif /* CONFIG_HOTPLUG_CPU */

0 commit comments

Comments
 (0)