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