On Tue, 19 Jun 2018, Marc Zyngier wrote: > The ls-scfs-msi driver is not dealing with the effective affinity > as it should. Let's fix that, and make it clear that the effective > affinity is restricted to a single CPU. > > Reported-by: Alexandre Belloni <alexandre.bell...@bootlin.com> > Signed-off-by: Marc Zyngier <marc.zyng...@arm.com> > --- > drivers/irqchip/irq-ls-scfg-msi.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/irqchip/irq-ls-scfg-msi.c > b/drivers/irqchip/irq-ls-scfg-msi.c > index 1ec3bfe56693..2811cc53e425 100644 > --- a/drivers/irqchip/irq-ls-scfg-msi.c > +++ b/drivers/irqchip/irq-ls-scfg-msi.c > @@ -121,7 +121,8 @@ static int ls_scfg_msi_set_affinity(struct irq_data > *irq_data, > return -EINVAL; > } > > - cpumask_copy(irq_data->common->affinity, mask); > + cpumask_copy(irq_data->common->affinity, cpumask_of(cpu));
That's wrong. The driver should not fiddle with the affinity mask at all and just store the effective mask. > + irq_data_update_effective_affinity(irq_data, cpumask_of(cpu)); > > return IRQ_SET_MASK_OK; If yuo look at the call site, then you'll notice that it will do: case IRQ_SET_MASK_OK: case IRQ_SET_MASK_OK_DONE: cpumask_copy(desc->irq_common_data.affinity, mask); So the cpumask_copy() can just go away. Thanks, tglx