Commit f72401e94d159bc4b2beab51d74e956da2c32e0a
Committed by
Wim Van Sebroeck
1 parent
89078d572e
Exists in
master
and in
39 other branches
watchdog: s3c2410_wdt.c: Convert release_resource to release_region/release_mem_region
Request_mem_region should be used with release_mem_region, not release_resource. The semantic match that finds this 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>
Showing 1 changed file with 8 additions and 11 deletions Side-by-side Diff
drivers/watchdog/s3c2410_wdt.c
... | ... | @@ -402,7 +402,6 @@ |
402 | 402 | |
403 | 403 | static int __devinit s3c2410wdt_probe(struct platform_device *pdev) |
404 | 404 | { |
405 | - struct resource *res; | |
406 | 405 | struct device *dev; |
407 | 406 | unsigned int wtcon; |
408 | 407 | int started = 0; |
409 | 408 | |
410 | 409 | |
... | ... | @@ -416,20 +415,19 @@ |
416 | 415 | |
417 | 416 | /* get the memory region for the watchdog timer */ |
418 | 417 | |
419 | - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | |
420 | - if (res == NULL) { | |
418 | + wdt_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); | |
419 | + if (wdt_mem == NULL) { | |
421 | 420 | dev_err(dev, "no memory resource specified\n"); |
422 | 421 | return -ENOENT; |
423 | 422 | } |
424 | 423 | |
425 | - size = resource_size(res); | |
426 | - wdt_mem = request_mem_region(res->start, size, pdev->name); | |
427 | - if (wdt_mem == NULL) { | |
424 | + size = resource_size(wdt_mem); | |
425 | + if (!request_mem_region(wdt_mem->start, size, pdev->name)) { | |
428 | 426 | dev_err(dev, "failed to get memory region\n"); |
429 | 427 | return -EBUSY; |
430 | 428 | } |
431 | 429 | |
432 | - wdt_base = ioremap(res->start, size); | |
430 | + wdt_base = ioremap(wdt_mem->start, size); | |
433 | 431 | if (wdt_base == NULL) { |
434 | 432 | dev_err(dev, "failed to ioremap() region\n"); |
435 | 433 | ret = -EINVAL; |
... | ... | @@ -524,8 +522,8 @@ |
524 | 522 | iounmap(wdt_base); |
525 | 523 | |
526 | 524 | err_req: |
527 | - release_resource(wdt_mem); | |
528 | - kfree(wdt_mem); | |
525 | + release_mem_region(wdt_mem->start, size); | |
526 | + wdt_mem = NULL; | |
529 | 527 | |
530 | 528 | return ret; |
531 | 529 | } |
... | ... | @@ -545,8 +543,7 @@ |
545 | 543 | |
546 | 544 | iounmap(wdt_base); |
547 | 545 | |
548 | - release_resource(wdt_mem); | |
549 | - kfree(wdt_mem); | |
546 | + release_mem_region(wdt_mem->start, resource_size(wdt_mem)); | |
550 | 547 | wdt_mem = NULL; |
551 | 548 | return 0; |
552 | 549 | } |