The bus resource adjustment API is not meant to work on active resources.

Return an error if a driver attempts this, and, if INVARIANTS is on,
panic.

Reviewed by:	jhb
This commit is contained in:
Nathan Whitehorn 2012-02-07 19:14:13 +00:00
parent ae5458e1fb
commit 8a1a60d49a

View File

@ -431,7 +431,11 @@ ofw_pci_adjust_resource(device_t bus, device_t child, int type,
{
struct rman *rm = NULL;
struct ofw_pci_softc *sc = device_get_softc(bus);
int error;
KASSERT(!(rman_get_flags(res) & RF_ACTIVE),
("active resources cannot be adjusted"));
if (rman_get_flags(res) & RF_ACTIVE)
return (EINVAL);
switch (type) {
case SYS_RES_MEMORY:
@ -447,21 +451,7 @@ ofw_pci_adjust_resource(device_t bus, device_t child, int type,
if (!rman_is_region_manager(res, rm))
return (EINVAL);
error = rman_adjust_resource(res, start, end);
if (error)
return (error);
if (rman_get_flags(res) & RF_ACTIVE) {
/* Remap memory resources */
error = ofw_pci_deactivate_resource(bus, child, type,
rman_get_rid(res), res);
if (error)
return (error);
error = ofw_pci_activate_resource(bus, child, type,
rman_get_rid(res), res);
}
return (error);
return (rman_adjust_resource(res, start, end));
}