mirror of
https://github.com/torvalds/linux.git
synced 2024-11-26 22:21:42 +00:00
irqchip/ls-scfg-msi: Fix MSI affinity handling
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. Also prevent the driver from messing with the internals of the affinity setting infrastructure. Reported-by: Alexandre Belloni <alexandre.belloni@bootlin.com> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Tested-by: Alexandre Belloni <alexandre.belloni@bootlin.com> Cc: Jason Cooper <jason@lakedaemon.net> Cc: Yang Yingliang <yangyingliang@huawei.com> Cc: Sumit Garg <sumit.garg@linaro.org> Link: https://lkml.kernel.org/r/20180622095254.5906-3-marc.zyngier@arm.com
This commit is contained in:
parent
72a8edc2d9
commit
893fbfff97
@ -93,8 +93,12 @@ static void ls_scfg_msi_compose_msg(struct irq_data *data, struct msi_msg *msg)
|
|||||||
msg->address_lo = lower_32_bits(msi_data->msiir_addr);
|
msg->address_lo = lower_32_bits(msi_data->msiir_addr);
|
||||||
msg->data = data->hwirq;
|
msg->data = data->hwirq;
|
||||||
|
|
||||||
if (msi_affinity_flag)
|
if (msi_affinity_flag) {
|
||||||
msg->data |= cpumask_first(data->common->affinity);
|
const struct cpumask *mask;
|
||||||
|
|
||||||
|
mask = irq_data_get_effective_affinity_mask(data);
|
||||||
|
msg->data |= cpumask_first(mask);
|
||||||
|
}
|
||||||
|
|
||||||
iommu_dma_map_msi_msg(data->irq, msg);
|
iommu_dma_map_msi_msg(data->irq, msg);
|
||||||
}
|
}
|
||||||
@ -121,7 +125,7 @@ static int ls_scfg_msi_set_affinity(struct irq_data *irq_data,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
cpumask_copy(irq_data->common->affinity, mask);
|
irq_data_update_effective_affinity(irq_data, cpumask_of(cpu));
|
||||||
|
|
||||||
return IRQ_SET_MASK_OK;
|
return IRQ_SET_MASK_OK;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user