Subject: [PATCH 3/14] ps3: system bus minor mmio fix

From: Geoff Levand <[email-masked]>
Date: Wed, 24 Jan 2007 18:39:51 -0800

From: Benjamin Herrenschmidt <[email-masked]>

Fix two minor bugs in the PS3 system bus mmio region code.  First, on error or
when freeing a region, retain the bus_addr and len fields to allow subsequent
calls to create the region.  Second, correct the region address argument to the
lv1_unmap_device_mmio_region() call.

Fixes modprobe/rmmod of some drivers.

Signed-off-by: Benjamin Herrenschmidt <[email-masked]>
Signed-off-by: Geoff Levand <[email-masked]>

---
 drivers/ps3/system-bus.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

--- ps3-linux-dev.orig/drivers/ps3/system-bus.c
+++ ps3-linux-dev/drivers/ps3/system-bus.c
@@ -50,7 +50,7 @@ int ps3_mmio_region_create(struct ps3_mm
 	if (result) {
 		pr_debug("%s:%d: lv1_map_device_mmio_region failed: %s\n",
 			__func__, __LINE__, ps3_result(result));
-		r->lpar_addr = r->len = r->bus_addr = 0;
+		r->lpar_addr = 0;
 	}
 
 	dump_mmio_region(r);
@@ -62,13 +62,13 @@ int ps3_free_mmio_region(struct ps3_mmio
 	int result;
 
 	result = lv1_unmap_device_mmio_region(r->did.bus_id, r->did.dev_id,
-		r->bus_addr);
+		r->lpar_addr);
 
 	if (result)
 		pr_debug("%s:%d: lv1_unmap_device_mmio_region failed: %s\n",
 			__func__, __LINE__, ps3_result(result));
 
-	r->lpar_addr = r->len = r->bus_addr = 0;
+	r->lpar_addr = 0;
 	return result;
 }