lkml.org 
[lkml]   [2005]   [Oct]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH] release_resource() check for NULL resource
    On Mon, Oct 03, 2005 at 03:43:50PM +0300, Pekka Enberg wrote:
    > Usually yes but it makes releasing partial initialization much simpler
    > because you can reuse the normal release counterpart. For example,
    >
    > static int driver_init(void)
    > {
    > dev->resource1 = request_region(...);
    > if (!dev->resource1)
    > goto failed;
    >
    > dev->resource2 = request_region(...);
    > if (!dev->resource2)
    > goto failed;
    >
    > return 0;
    >
    > failed:
    > driver_release(dev);
    > return -1;
    > }
    >
    > static void driver_release(struct device * dev)
    > {
    > release_resource(dev->resource1);
    > release_resource(dev->resource2);
    > kfree(dev);
    > }
    >
    > Many drivers have the release function copy-pasted to init with lots
    > of goto labels exactly because release_region, iounmap, and friends
    > aren't NULL safe.

    And the above is buggy. request_region() allocates memory.
    release_resource() unregisters the resource but does _not_
    free the allocated memory.

    On the other hand, release_region() is the counter-part of
    request_region() and should be used to release resources
    created by request_region().

    --
    Russell King
    Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/
    maintainer of: 2.6 Serial core
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-10-03 14:52    [W:3.110 / U:0.420 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site