Commit 8f4fd86a authored by David Woodhouse's avatar David Woodhouse Committed by Juergen Gross

xen: Set platform PCI device INTX affinity to CPU0

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: default avatarDavid Woodhouse <dwmw@amazon.co.uk>
Reviewed-by: default avatarBoris Ostrovsky <boris.ostrovsky@oracle.com>
Link: https://lore.kernel.org/r/20210106153958.584169-3-dwmw2@infradead.orgSigned-off-by: default avatarJuergen Gross <jgross@suse.com>
parent 3499ba81
...@@ -132,6 +132,13 @@ static int platform_pci_probe(struct pci_dev *pdev, ...@@ -132,6 +132,13 @@ static int platform_pci_probe(struct pci_dev *pdev,
dev_warn(&pdev->dev, "request_irq failed err=%d\n", ret); dev_warn(&pdev->dev, "request_irq failed err=%d\n", ret);
goto out; 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); callback_via = get_callback_via(pdev);
ret = xen_set_callback_via(callback_via); ret = xen_set_callback_via(callback_via);
if (ret) { if (ret) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment