Page MenuHomeFreeBSD

D44698.id136790.diff
No OneTemporary

D44698.id136790.diff

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

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)

Event Timeline