Re: [PATCH 2/6] irqchip/ls-scfg-msi: Fix MSI affinity handling

From: Thomas Gleixner
Date: Tue Jun 19 2018 - 08:00:34 EST


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.belloni@xxxxxxxxxxx>
> Signed-off-by: Marc Zyngier <marc.zyngier@xxxxxxx>
> ---
> 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