pci_host_generic: stop address translation in bus_alloc_resource

Translating the provided range prior to rman_reserve_resource(9) is
decidedly wrong; the caller may be trying to do a wildcard allocation,
for which the implementation is expected to DTRT and clamp the range to
what's actually feasible.

We don't use the resulting translation here anyways, so just remove it
entirely -- the rman in the default implementation is derived from
sc->ranges, so the translation should trivially succeed every time as
long as the reservation succeeded.  If something has gone awry in a
derived driver, we'll detect it when we translate prior to activation,
so there's likely no diagnostic value in retaining the translation after
reservation either.

Reviewed by:	andrew
Noticed by:	jhb
Differential Revision:	https://reviews.freebsd.org/D36618
This commit is contained in:
Kyle Evans 2022-09-26 14:24:21 -05:00
parent 818cae0ff7
commit bd93b5f79a

View File

@ -436,7 +436,6 @@ pci_host_generic_core_alloc_resource(device_t dev, device_t child, int type,
struct generic_pcie_core_softc *sc;
struct resource *res;
struct rman *rm;
rman_res_t phys_start, phys_end;
sc = device_get_softc(dev);
@ -452,16 +451,6 @@ pci_host_generic_core_alloc_resource(device_t dev, device_t child, int type,
return (BUS_ALLOC_RESOURCE(device_get_parent(dev), child,
type, rid, start, end, count, flags));
/* Translate the address from a PCI address to a physical address */
if (generic_pcie_translate_resource_common(dev, type, start, end,
&phys_start, &phys_end) != 0) {
device_printf(dev,
"Failed to translate resource %jx-%jx type %x for %s\n",
(uintmax_t)start, (uintmax_t)end, type,
device_get_nameunit(child));
return (NULL);
}
if (bootverbose) {
device_printf(dev,
"rman_reserve_resource: start=%#jx, end=%#jx, count=%#jx\n",