On 25/11/2020 17:05, Denis Kirjanov wrote: > On 11/25/20, Laurent Vivier <lvivier@xxxxxxxxxx> wrote: >> With virtio multiqueue, normally each queue IRQ is mapped to a CPU. >> >> But since commit 0d9f0a52c8b9f ("virtio_scsi: use virtio IRQ affinity") >> this is broken on pseries. > > Please add "Fixes" tag. In fact, the code in commit 0d9f0a52c8b9f is correct. The problem is with MSI/X irq affinity and pseries. So this patch fixes more than virtio_scsi. I put this information because this commit allows to clearly show the problem. Perhaps I should remove this line in fact? Thanks, Laurent > > Thanks! > >> >> The affinity is correctly computed in msi_desc but this is not applied >> to the system IRQs. >> >> It appears the affinity is correctly passed to rtas_setup_msi_irqs() but >> lost at this point and never passed to irq_domain_alloc_descs() >> (see commit 06ee6d571f0e ("genirq: Add affinity hint to irq allocation")) >> because irq_create_mapping() doesn't take an affinity parameter. >> >> As the previous patch has added the affinity parameter to >> irq_create_mapping() we can forward the affinity from rtas_setup_msi_irqs() >> to irq_domain_alloc_descs(). >> >> With this change, the virtqueues are correctly dispatched between the CPUs >> on pseries. >> >> BugId: https://bugzilla.redhat.com/show_bug.cgi?id=1702939 >> Signed-off-by: Laurent Vivier <lvivier@xxxxxxxxxx> >> Reviewed-by: Greg Kurz <groug@xxxxxxxx> >> --- >> arch/powerpc/platforms/pseries/msi.c | 3 ++- >> 1 file changed, 2 insertions(+), 1 deletion(-) >> >> diff --git a/arch/powerpc/platforms/pseries/msi.c >> b/arch/powerpc/platforms/pseries/msi.c >> index 133f6adcb39c..b3ac2455faad 100644 >> --- a/arch/powerpc/platforms/pseries/msi.c >> +++ b/arch/powerpc/platforms/pseries/msi.c >> @@ -458,7 +458,8 @@ static int rtas_setup_msi_irqs(struct pci_dev *pdev, int >> nvec_in, int type) >> return hwirq; >> } >> >> - virq = irq_create_mapping(NULL, hwirq); >> + virq = irq_create_mapping_affinity(NULL, hwirq, >> + entry->affinity); >> >> if (!virq) { >> pr_debug("rtas_msi: Failed mapping hwirq %d\n", hwirq); >> -- >> 2.28.0 >> >> >