]> git.openfabrics.org - ~emulex/infiniband.git/commitdiff
crypto: hifn_795x - Pass correct pointer to free_irq()
authorLars-Peter Clausen <lars@metafoo.de>
Mon, 20 May 2013 17:14:50 +0000 (19:14 +0200)
committerHerbert Xu <herbert@gondor.apana.org.au>
Tue, 28 May 2013 07:43:04 +0000 (15:43 +0800)
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>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/hifn_795x.c

index ebf130e894b50da2bb69bf08a7d3f5210af70d7d..12fea3e223481fcb19485a8a3d6220050a7e3587 100644 (file)
@@ -2676,7 +2676,7 @@ err_out_stop_device:
        hifn_reset_dma(dev, 1);
        hifn_stop_device(dev);
 err_out_free_irq:
-       free_irq(dev->irq, dev->name);
+       free_irq(dev->irq, dev);
        tasklet_kill(&dev->tasklet);
 err_out_free_desc:
        pci_free_consistent(pdev, sizeof(struct hifn_dma),
@@ -2711,7 +2711,7 @@ static void hifn_remove(struct pci_dev *pdev)
                hifn_reset_dma(dev, 1);
                hifn_stop_device(dev);
 
-               free_irq(dev->irq, dev->name);
+               free_irq(dev->irq, dev);
                tasklet_kill(&dev->tasklet);
 
                hifn_flush(dev);