]> www.infradead.org Git - linux-platform-drivers-x86.git/commitdiff
xen: Set platform PCI device INTX affinity to CPU0
authorDavid Woodhouse <dwmw@amazon.co.uk>
Wed, 6 Jan 2021 15:39:55 +0000 (15:39 +0000)
committerJuergen Gross <jgross@suse.com>
Wed, 13 Jan 2021 15:12:03 +0000 (16:12 +0100)
With INTX or GSI delivery, Xen uses the event channel structures of CPU0.

If the interrupt gets handled by Linux on a different CPU, then no events
are seen as pending. Rather than introducing locking to allow other CPUs
to process CPU0's events, just ensure that the PCI interrupts happens
only on CPU0.

Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Link: https://lore.kernel.org/r/20210106153958.584169-3-dwmw2@infradead.org
Signed-off-by: Juergen Gross <jgross@suse.com>
drivers/xen/platform-pci.c

index 9db557b76511b235a17416fc7b881cf3ff496f90..18f0ed8b1f93b8fab25824162f86bac9beb2d781 100644 (file)
@@ -132,6 +132,13 @@ static int platform_pci_probe(struct pci_dev *pdev,
                        dev_warn(&pdev->dev, "request_irq failed err=%d\n", ret);
                        goto out;
                }
+               /*
+                * It doesn't strictly *have* to run on CPU0 but it sure
+                * as hell better process the event channel ports delivered
+                * to CPU0.
+                */
+               irq_set_affinity(pdev->irq, cpumask_of(0));
+
                callback_via = get_callback_via(pdev);
                ret = xen_set_callback_via(callback_via);
                if (ret) {