git: 2afea415b919 - stable/14 - pci_host_generic: Properly handle bus_release_resource of IRQ resources
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 27 Feb 2025 14:17:01 UTC
The branch stable/14 has been updated by jhb:
URL: https://cgit.FreeBSD.org/src/commit/?id=2afea415b91992f401b795dc6cbdd9539367d344
commit 2afea415b91992f401b795dc6cbdd9539367d344
Author: John Baldwin <jhb@FreeBSD.org>
AuthorDate: 2024-02-16 01:56:01 +0000
Commit: John Baldwin <jhb@FreeBSD.org>
CommitDate: 2025-02-27 13:09:21 +0000
pci_host_generic: Properly handle bus_release_resource of IRQ resources
Unlike other bus methods updated to use bus_generic_rman_* in commit
d79b6b8ec267, the bus_release_resource method was using
bus_generic_rman_release_resource for all types other than
PCI_RES_BUS. Instead, bus_generic_rman_* should only be used for
memory and I/O port resources for this driver.
Tested by: cperciva
Reviewed by: cperciva
Fixes: d79b6b8ec267 pci_host_generic: Don't rewrite resource start address for translation
Differential Revision: https://reviews.freebsd.org/D43925
(cherry picked from commit feefc3c71e33d8f97879c4889d5cf1ec82e98cd9)
---
sys/dev/pci/pci_host_generic.c | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/sys/dev/pci/pci_host_generic.c b/sys/dev/pci/pci_host_generic.c
index ca384d9a1483..386b8411d29a 100644
--- a/sys/dev/pci/pci_host_generic.c
+++ b/sys/dev/pci/pci_host_generic.c
@@ -431,16 +431,24 @@ int
pci_host_generic_core_release_resource(device_t dev, device_t child, int type,
int rid, struct resource *res)
{
+#if defined(NEW_PCIB) && defined(PCI_RES_BUS)
struct generic_pcie_core_softc *sc;
sc = device_get_softc(dev);
-
+#endif
+ switch (type) {
#if defined(NEW_PCIB) && defined(PCI_RES_BUS)
- if (type == PCI_RES_BUS) {
+ case PCI_RES_BUS:
return (pci_domain_release_bus(sc->ecam, child, rid, res));
- }
#endif
- return (bus_generic_rman_release_resource(dev, child, type, rid, res));
+ case SYS_RES_IOPORT:
+ case SYS_RES_MEMORY:
+ return (bus_generic_rman_release_resource(dev, child, type, rid,
+ res));
+ default:
+ return (bus_generic_release_resource(dev, child, type, rid,
+ res));
+ }
}
static struct pcie_range *