From 8a1a60d49adacac7f7bd5e72d8336793a1430711 Mon Sep 17 00:00:00 2001
From: Nathan Whitehorn <nwhitehorn@FreeBSD.org>
Date: Tue, 7 Feb 2012 19:14:13 +0000
Subject: [PATCH] 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
---
 sys/powerpc/ofw/ofw_pci.c | 22 ++++++----------------
 1 file changed, 6 insertions(+), 16 deletions(-)

diff --git a/sys/powerpc/ofw/ofw_pci.c b/sys/powerpc/ofw/ofw_pci.c
index 7580749befc7..46d483d62b4f 100644
--- a/sys/powerpc/ofw/ofw_pci.c
+++ b/sys/powerpc/ofw/ofw_pci.c
@@ -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));
 }