xen: handled remapped IRQs when enabling a pcifront PCI device.
This happens to not be an issue currently because we take pains to try to ensure that the GSI-IRQ mapping is 1-1 in a PV guest and that regular event channels do not clash. However a subsequent patch is going to break this 1-1 mapping. Signed-off-by: Ian Campbell <ian.campbell@citrix.com> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com> Cc: Jeremy Fitzhardinge <jeremy@goop.org>
This commit is contained in:
parent
100b33c8bd
commit
3f2a230caf
|
@ -226,21 +226,27 @@ static int xen_pcifront_enable_irq(struct pci_dev *dev)
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
int share = 1;
|
int share = 1;
|
||||||
|
u8 gsi;
|
||||||
|
|
||||||
dev_info(&dev->dev, "Xen PCI enabling IRQ: %d\n", dev->irq);
|
rc = pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &gsi);
|
||||||
|
|
||||||
if (dev->irq < 0)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
if (dev->irq < NR_IRQS_LEGACY)
|
|
||||||
share = 0;
|
|
||||||
|
|
||||||
rc = xen_allocate_pirq(dev->irq, share, "pcifront");
|
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
dev_warn(&dev->dev, "Xen PCI IRQ: %d, failed to register:%d\n",
|
dev_warn(&dev->dev, "Xen PCI: failed to read interrupt line: %d\n",
|
||||||
dev->irq, rc);
|
rc);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (gsi < NR_IRQS_LEGACY)
|
||||||
|
share = 0;
|
||||||
|
|
||||||
|
rc = xen_allocate_pirq(gsi, share, "pcifront");
|
||||||
|
if (rc < 0) {
|
||||||
|
dev_warn(&dev->dev, "Xen PCI: failed to register GSI%d: %d\n",
|
||||||
|
gsi, rc);
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
dev->irq = rc;
|
||||||
|
dev_info(&dev->dev, "Xen PCI mapped GSI%d to IRQ%d\n", gsi, dev->irq);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue