Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F97664715
D44698.id136790.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D44698.id136790.diff
View Options
diff --git a/sys/dev/pci/pci_host_generic.c b/sys/dev/pci/pci_host_generic.c
--- a/sys/dev/pci/pci_host_generic.c
+++ b/sys/dev/pci/pci_host_generic.c
@@ -80,6 +80,7 @@
struct resource_map map;
#endif
struct generic_pcie_core_softc *sc;
+ struct rman *rm;
uint64_t phys_base;
uint64_t pci_base;
uint64_t size;
@@ -183,75 +184,51 @@
range_descr = "prefetch";
flags = RF_PREFETCHABLE;
type = SYS_RES_MEMORY;
- error = rman_manage_region(&sc->pmem_rman,
- pci_base, pci_base + size - 1);
+ rm = &sc->pmem_rman;
break;
case FLAG_TYPE_MEM:
range_descr = "memory";
flags = 0;
type = SYS_RES_MEMORY;
- error = rman_manage_region(&sc->mem_rman,
- pci_base, pci_base + size - 1);
+ rm = &sc->mem_rman;
break;
case FLAG_TYPE_IO:
range_descr = "I/O port";
flags = 0;
type = SYS_RES_IOPORT;
- error = rman_manage_region(&sc->io_rman,
- pci_base, pci_base + size - 1);
+ rm = &sc->io_rman;
break;
default:
continue;
}
- if (error) {
- device_printf(dev, "rman_manage_region() failed."
- "error = %d\n", error);
- goto err_rman_manage;
- }
+ if (bootverbose)
+ device_printf(dev,
+ "PCI addr: 0x%jx, CPU addr: 0x%jx, Size: 0x%jx, Type: %s\n",
+ pci_base, phys_base, size, range_descr);
error = bus_set_resource(dev, type, rid, phys_base, size);
if (error != 0) {
device_printf(dev,
"failed to set resource for range %d: %d\n", tuple,
error);
- goto err_rman_manage;
+ continue;
}
sc->ranges[tuple].res = bus_alloc_resource_any(dev, type, &rid,
RF_ACTIVE | RF_UNMAPPED | flags);
if (sc->ranges[tuple].res == NULL) {
device_printf(dev,
"failed to allocate resource for range %d\n", tuple);
- error = ENXIO;
- goto err_rman_manage;
+ continue;
+ }
+ error = rman_manage_region(rm, pci_base, pci_base + size - 1);
+ if (error) {
+ device_printf(dev, "rman_manage_region() failed."
+ "error = %d\n", error);
+ continue;
}
- if (bootverbose)
- device_printf(dev,
- "PCI addr: 0x%jx, CPU addr: 0x%jx, Size: 0x%jx, Type: %s\n",
- pci_base, phys_base, size, range_descr);
}
return (0);
-err_rman_manage:
- for (tuple = 0; tuple < MAX_RANGES_TUPLES; tuple++) {
- if (sc->ranges[tuple].size == 0)
- continue; /* empty range element */
- switch (FLAG_TYPE(sc->ranges[tuple].flags)) {
- case FLAG_TYPE_PMEM:
- case FLAG_TYPE_MEM:
- type = SYS_RES_MEMORY;
- break;
- case FLAG_TYPE_IO:
- type = SYS_RES_IOPORT;
- break;
- default:
- continue;
- }
- if (sc->ranges[tuple].res != NULL)
- bus_release_resource(dev, type, tuple + 1,
- sc->ranges[tuple].res);
- bus_delete_resource(dev, type, tuple + 1);
- }
- rman_fini(&sc->io_rman);
err_io_rman:
rman_fini(&sc->mem_rman);
err_mem_rman:
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, Oct 1, 4:14 PM (20 h, 50 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
13262902
Default Alt Text
D44698.id136790.diff (2 KB)
Attached To
Mode
D44698: pci_host_generic: Tolerate range resource allocation failures
Attached
Detach File
Event Timeline
Log In to Comment