Request_mem_region should be used with release_mem_region, not
release_resource.
A semantic patch that partially fixes this problem is as follows:
(http://coccinelle.lip6.fr/)
// <smpl>
@b@
expression x,E;
@@
x = request_mem_region(x->start,...)
... when != release_mem_region(x->start,...)
when != x = E
(
- release_resource(x);
- kfree(x);
+ release_mem_region(x->start,resource_size(x));
|
?- release_resource(x);
+ release_mem_region(x->start,resource_size(x));
)
// </smpl>
Signed-off-by: Julia Lawall <redacted>
---
drivers/mmc/host/pxamci.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/mmc/host/pxamci.c b/drivers/mmc/host/pxamci.c
index 7257738..b6e7e64 100644
--- a/drivers/mmc/host/pxamci.c
+++ b/drivers/mmc/host/pxamci.c
@@ -774,7 +774,7 @@ err_gpio_ro:
}
if (mmc)
mmc_free_host(mmc);
- release_resource(r);
+ release_mem_region(r->start, resource_size(r));
return ret;
}
@@ -824,7 +824,7 @@ static int pxamci_remove(struct platform_device *pdev)
clk_put(host->clk);
- release_resource(host->res);
+ release_mem_region(host->res->start, resource_size(host->res));
mmc_free_host(mmc);
}