Message ID | 20201224115323.3540130-3-dwmw2@infradead.org (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Xen INTX/GSI event channel delivery fixes | expand |
On 12/24/20 6:53 AM, David Woodhouse wrote: > From: David Woodhouse <dwmw@amazon.co.uk> > > 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>
diff --git a/drivers/xen/platform-pci.c b/drivers/xen/platform-pci.c index 9db557b76511..18f0ed8b1f93 100644 --- a/drivers/xen/platform-pci.c +++ b/drivers/xen/platform-pci.c @@ -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) {