Re: git: 0e33c2e6df7a - main - pci: Only re-route IRQs based on firmware on x86
- Reply: Colin Percival : "Re: git: 0e33c2e6df7a - main - pci: Only re-route IRQs based on firmware on x86"
- Reply: John Baldwin : "Re: git: 0e33c2e6df7a - main - pci: Only re-route IRQs based on firmware on x86"
- In reply to: Colin Percival : "git: 0e33c2e6df7a - main - pci: Only re-route IRQs based on firmware on x86"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 31 Mar 2025 19:14:38 UTC
On 29 Mar 2025, at 20:18, Colin Percival <cperciva@FreeBSD.org> wrote: > > The branch main has been updated by cperciva: > > URL: https://cgit.FreeBSD.org/src/commit/?id=0e33c2e6df7a5de65db40c7cc0fc97f66da28ccd > > commit 0e33c2e6df7a5de65db40c7cc0fc97f66da28ccd > Author: Colin Percival <cperciva@FreeBSD.org> > AuthorDate: 2025-03-28 18:07:01 +0000 > Commit: Colin Percival <cperciva@FreeBSD.org> > CommitDate: 2025-03-29 20:17:29 +0000 > > pci: Only re-route IRQs based on firmware on x86 > > There is a (very historical) call to pci_assign_interrupt for the > purpose of routing IRQs which may have been set up wrong by x86 BIOS > or firmware. On non-x86 systems, this is unnecessary; and on INTRNG > systems it results in a (synthetic) IRQ leak and ultimately a kernel > panic after many hotplug/unplug cycles. This is in fact incorrect. Whilst there may well be a leak that needs fixing, the rerouting is absolutely needed on non-x86 platforms. See 5884fab46153dee52bda660bcabca95c3cc97f44 and 7de649170fd804668da78f005c7966941b402106 for some of the history behind this. As a result of this commit the problem described in the second commit is reintroduced. Jess > Suggested by: jhb > Reviewed by: jhb > MFC after: 2 weeks > Sponsored by: Amazon > Differential Revision: https://reviews.freebsd.org/D49560 > --- > sys/dev/pci/pci.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/sys/dev/pci/pci.c b/sys/dev/pci/pci.c > index fe99d6beb029..3a51e4c38296 100644 > --- a/sys/dev/pci/pci.c > +++ b/sys/dev/pci/pci.c > @@ -4175,6 +4175,7 @@ pci_add_resources(device_t bus, device_t dev, int force, uint32_t prefetchmask) > if (q->devid == devid && q->type == PCI_QUIRK_MAP_REG) > pci_add_map(bus, dev, q->arg1, rl, force, 0); > > +#if defined(__i386__) || defined(__amd64__) > if (cfg->intpin > 0 && PCI_INTERRUPT_VALID(cfg->intline)) { > /* > * Try to re-route interrupts. Sometimes the BIOS or > @@ -4184,6 +4185,7 @@ pci_add_resources(device_t bus, device_t dev, int force, uint32_t prefetchmask) > */ > pci_assign_interrupt(bus, dev, 1); > } > +#endif > > if (pci_usb_takeover && pci_get_class(dev) == PCIC_SERIALBUS && > pci_get_subclass(dev) == PCIS_SERIALBUS_USB) {