watchdog: Convert release_resource to release_region/release_mem_region

Request_mem_region should be used with release_mem_region, not
release_resource.

In pnx4008_wdt.c, a missing clk_put is added as well.

The semantic match that finds the first problem is as follows:
(http://coccinelle.lip6.fr/)

// <smpl>
@@
expression x,E;
@@
*x = request_mem_region(...)
... when != release_mem_region(x)
when != x = E
* release_resource(x);
// </smpl>

Signed-off-by: Julia Lawall <julia@diku.dk>
Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
Cc: stable <stable@kernel.org>

authored by Julia Lawall and committed by Wim Van Sebroeck f712eacf f72401e9

+31 -39
+10 -12
drivers/watchdog/davinci_wdt.c
··· 202 202 static int __devinit davinci_wdt_probe(struct platform_device *pdev) 203 203 { 204 204 int ret = 0, size; 205 - struct resource *res; 206 205 struct device *dev = &pdev->dev; 207 206 208 207 wdt_clk = clk_get(dev, NULL); ··· 215 216 216 217 dev_info(dev, "heartbeat %d sec\n", heartbeat); 217 218 218 - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 219 - if (res == NULL) { 219 + wdt_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 220 + if (wdt_mem == NULL) { 220 221 dev_err(dev, "failed to get memory region resource\n"); 221 222 return -ENOENT; 222 223 } 223 224 224 - size = resource_size(res); 225 - wdt_mem = request_mem_region(res->start, size, pdev->name); 226 - 227 - if (wdt_mem == NULL) { 225 + size = resource_size(wdt_mem); 226 + if (!request_mem_region(wdt_mem->start, size, pdev->name)) { 228 227 dev_err(dev, "failed to get memory region\n"); 229 228 return -ENOENT; 230 229 } 231 230 232 - wdt_base = ioremap(res->start, size); 231 + wdt_base = ioremap(wdt_mem->start, size); 233 232 if (!wdt_base) { 234 233 dev_err(dev, "failed to map memory region\n"); 234 + release_mem_region(wdt_mem->start, size); 235 + wdt_mem = NULL; 235 236 return -ENOMEM; 236 237 } 237 238 238 239 ret = misc_register(&davinci_wdt_miscdev); 239 240 if (ret < 0) { 240 241 dev_err(dev, "cannot register misc device\n"); 241 - release_resource(wdt_mem); 242 - kfree(wdt_mem); 242 + release_mem_region(wdt_mem->start, size); 243 + wdt_mem = NULL; 243 244 } else { 244 245 set_bit(WDT_DEVICE_INITED, &wdt_status); 245 246 } ··· 252 253 { 253 254 misc_deregister(&davinci_wdt_miscdev); 254 255 if (wdt_mem) { 255 - release_resource(wdt_mem); 256 - kfree(wdt_mem); 256 + release_mem_region(wdt_mem->start, resource_size(wdt_mem)); 257 257 wdt_mem = NULL; 258 258 } 259 259
+8 -12
drivers/watchdog/max63xx_wdt.c
··· 270 270 { 271 271 int ret = 0; 272 272 int size; 273 - struct resource *res; 274 273 struct device *dev = &pdev->dev; 275 274 struct max63xx_timeout *table; 276 275 ··· 293 294 294 295 max63xx_pdev = pdev; 295 296 296 - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 297 - if (res == NULL) { 297 + wdt_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 298 + if (wdt_mem == NULL) { 298 299 dev_err(dev, "failed to get memory region resource\n"); 299 300 return -ENOENT; 300 301 } 301 302 302 - size = resource_size(res); 303 - wdt_mem = request_mem_region(res->start, size, pdev->name); 304 - 305 - if (wdt_mem == NULL) { 303 + size = resource_size(wdt_mem); 304 + if (!request_mem_region(wdt_mem->start, size, pdev->name)) { 306 305 dev_err(dev, "failed to get memory region\n"); 307 306 return -ENOENT; 308 307 } 309 308 310 - wdt_base = ioremap(res->start, size); 309 + wdt_base = ioremap(wdt_mem->start, size); 311 310 if (!wdt_base) { 312 311 dev_err(dev, "failed to map memory region\n"); 313 312 ret = -ENOMEM; ··· 323 326 out_unmap: 324 327 iounmap(wdt_base); 325 328 out_request: 326 - release_resource(wdt_mem); 327 - kfree(wdt_mem); 329 + release_mem_region(wdt_mem->start, size); 330 + wdt_mem = NULL; 328 331 329 332 return ret; 330 333 } ··· 333 336 { 334 337 misc_deregister(&max63xx_wdt_miscdev); 335 338 if (wdt_mem) { 336 - release_resource(wdt_mem); 337 - kfree(wdt_mem); 339 + release_mem_region(wdt_mem->start, resource_size(wdt_mem)); 338 340 wdt_mem = NULL; 339 341 } 340 342
+13 -15
drivers/watchdog/pnx4008_wdt.c
··· 254 254 static int __devinit pnx4008_wdt_probe(struct platform_device *pdev) 255 255 { 256 256 int ret = 0, size; 257 - struct resource *res; 258 257 259 258 if (heartbeat < 1 || heartbeat > MAX_HEARTBEAT) 260 259 heartbeat = DEFAULT_HEARTBEAT; ··· 261 262 printk(KERN_INFO MODULE_NAME 262 263 "PNX4008 Watchdog Timer: heartbeat %d sec\n", heartbeat); 263 264 264 - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 265 - if (res == NULL) { 265 + wdt_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 266 + if (wdt_mem == NULL) { 266 267 printk(KERN_INFO MODULE_NAME 267 268 "failed to get memory region resouce\n"); 268 269 return -ENOENT; 269 270 } 270 271 271 - size = resource_size(res); 272 - wdt_mem = request_mem_region(res->start, size, pdev->name); 272 + size = resource_size(wdt_mem); 273 273 274 - if (wdt_mem == NULL) { 274 + if (!request_mem_region(wdt_mem->start, size, pdev->name)) { 275 275 printk(KERN_INFO MODULE_NAME "failed to get memory region\n"); 276 276 return -ENOENT; 277 277 } 278 - wdt_base = (void __iomem *)IO_ADDRESS(res->start); 278 + wdt_base = (void __iomem *)IO_ADDRESS(wdt_mem->start); 279 279 280 280 wdt_clk = clk_get(&pdev->dev, NULL); 281 281 if (IS_ERR(wdt_clk)) { 282 282 ret = PTR_ERR(wdt_clk); 283 - release_resource(wdt_mem); 284 - kfree(wdt_mem); 283 + release_mem_region(wdt_mem->start, size); 284 + wdt_mem = NULL; 285 285 goto out; 286 286 } 287 287 288 288 ret = clk_enable(wdt_clk); 289 289 if (ret) { 290 - release_resource(wdt_mem); 291 - kfree(wdt_mem); 290 + release_mem_region(wdt_mem->start, size); 291 + wdt_mem = NULL; 292 + clk_put(wdt_clk); 292 293 goto out; 293 294 } 294 295 295 296 ret = misc_register(&pnx4008_wdt_miscdev); 296 297 if (ret < 0) { 297 298 printk(KERN_ERR MODULE_NAME "cannot register misc device\n"); 298 - release_resource(wdt_mem); 299 - kfree(wdt_mem); 299 + release_mem_region(wdt_mem->start, size); 300 + wdt_mem = NULL; 300 301 clk_disable(wdt_clk); 301 302 clk_put(wdt_clk); 302 303 } else { ··· 319 320 clk_put(wdt_clk); 320 321 321 322 if (wdt_mem) { 322 - release_resource(wdt_mem); 323 - kfree(wdt_mem); 323 + release_mem_region(wdt_mem->start, resource_size(wdt_mem)); 324 324 wdt_mem = NULL; 325 325 } 326 326 return 0;