lkml.org 
[lkml]   [2013]   [May]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 2/7] input: pxa27x_keypad: Pass correct pointer to free_irq()
    Date
    free_irq() expects the same pointer that was passed to request_irq(), otherwise
    the IRQ is not freed.

    The issue was found using the following coccinelle script:

    <smpl>
    @r1@
    type T;
    T devid;
    @@
    request_irq(..., devid)

    @r2@
    type r1.T;
    T devid;
    position p;
    @@
    free_irq@p(..., devid)

    @@
    position p != r2.p;
    @@
    *free_irq@p(...)
    </smpl>

    Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
    ---
    drivers/input/keyboard/pxa27x_keypad.c | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    diff --git a/drivers/input/keyboard/pxa27x_keypad.c b/drivers/input/keyboard/pxa27x_keypad.c
    index 74e30cc..b674e7a 100644
    --- a/drivers/input/keyboard/pxa27x_keypad.c
    +++ b/drivers/input/keyboard/pxa27x_keypad.c
    @@ -582,7 +582,7 @@ static int pxa27x_keypad_probe(struct platform_device *pdev)
    return 0;

    failed_free_irq:
    - free_irq(irq, pdev);
    + free_irq(irq, keypad);
    failed_put_clk:
    clk_put(keypad->clk);
    failed_free_io:
    @@ -600,7 +600,7 @@ static int pxa27x_keypad_remove(struct platform_device *pdev)
    struct pxa27x_keypad *keypad = platform_get_drvdata(pdev);
    struct resource *res;

    - free_irq(keypad->irq, pdev);
    + free_irq(keypad->irq, keypad);
    clk_put(keypad->clk);

    input_unregister_device(keypad->input_dev);
    --
    1.8.0


    \
     
     \ /
      Last update: 2013-05-20 17:21    [W:3.941 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site