* [PATCH 0/2] delete premature free_irq
@ 2013-09-02 9:54 Julia Lawall
2013-09-02 9:54 ` [PATCH 2/2] drivers:net: " Julia Lawall
0 siblings, 1 reply; 3+ messages in thread
From: Julia Lawall @ 2013-09-02 9:54 UTC (permalink / raw)
To: linux-spi; +Cc: kernel-janitors, linux-kernel, linux-arm-kernel, netdev
platform_get_request, or its wrapper platform_get_irq, doesn't allocate
anything, so there is nothing to free. Free_irq matches up with
request_irq and related functions.
The complete semantic patch used is as follows
(http://coccinelle.lip6.fr/)
// <smpl>
@@
identifier l;
statement S1;
expression e,e1;
@@
*e = platform_get_irq(...);
... when != request_irq(e,...)
when != request_threaded_irq(e,...)
when != request_any_context_irq(e,...)
when != if (...) { <+... request_irq(e,...) ...+> } else S1
when != if (...) { <+... request_threaded_irq(e,...) ...+> } else S1
when != if (...) { <+... request_any_context_irq(e,...) ...+> } else S1
when != e1 = e
*goto l;
...
*free_irq(e,...)
@@
identifier l;
statement S,S1;
expression e,e1;
@@
*e = platform_get_irq(...);
... when != request_irq(e,...)
when != request_threaded_irq(e,...)
when != request_any_context_irq(e,...)
when != if (...) { <+... request_irq(e,...) ...+> } else S1
when != if (...) { <+... request_threaded_irq(e,...) ...+> } else S1
when != if (...) { <+... request_any_context_irq(e,...) ...+> } else S1
*e1 = e;
... when != request_irq(\(e\|e1\),...)
when != request_threaded_irq(\(e\|e1\),...)
when != request_any_context_irq(\(e\|e1\),...)
when != if (...) { <+... request_irq(\(e\|e1\),...) ...+> } else S
when != if (...) { <+... request_threaded_irq(\(e\|e1\),...) ...+> } else S
when != if (...) { <+... request_any_context_irq(\(e\|e1\),...) ...+> } else S
*goto l;
...
*free_irq(\(e\|e1\),...)
@@
identifier l;
statement S;
expression e,e1;
@@
*e1 = e = platform_get_irq(...);
... when != request_irq(\(e\|e1\),...)
when != request_threaded_irq(\(e\|e1\),...)
when != request_any_context_irq(\(e\|e1\),...)
when != if (...) { <+... request_irq(\(e\|e1\),...) ...+> } else S
when != if (...) { <+... request_threaded_irq(\(e\|e1\),...) ...+> } else S
when != if (...) { <+... request_any_context_irq(\(e\|e1\),...) ...+> } else S
*goto l;
...
*free_irq(\(e\|e1\),...)
// -------------------------------------------------------------------------
@@
identifier l;
statement S,S1;
expression e,e2,e3;
@@
*e = platform_get_resource(e2,IORESOURCE_IRQ,e3);
... when != request_irq(e->start,...)
when != request_threaded_irq(e->start,...)
when != request_any_context_irq(e->start,...)
when != if (...) { <+... request_irq(e->start,...) ...+> } else S1
when != if (...) { <+... request_threaded_irq(e->start,...) ...+> } else S1
when != if (...) { <+... request_any_context_irq(e->start,...) ...+> } else S1
*goto l;
...
*free_irq(e->start,...)
@@
identifier l;
statement S,S1;
expression e,e1,e2,e3;
@@
*e = platform_get_resource(e2,IORESOURCE_IRQ,e3);
... when != request_irq(e->start,...)
when != request_threaded_irq(e->start,...)
when != request_any_context_irq(e->start,...)
when != if (...) { <+... request_irq(e->start,...) ...+> } else S1
when != if (...) { <+... request_threaded_irq(e->start,...) ...+> } else S1
when != if (...) { <+... request_any_context_irq(e->start,...) ...+> } else S1
e1 = e->start;
... when != request_irq(\(e->start\|e1\),...)
when != request_threaded_irq(\(e->start\|e1\),...)
when != request_any_context_irq(\(e->start\|e1\),...)
when != if (...) { <+... request_irq(\(e->start\|e1\),...) ...+> } else S
when != if (...) { <+... request_threaded_irq(\(e->start\|e1\),...) ...+> } else S
when != if (...) { <+... request_any_context_irq(\(e->start\|e1\),...) ...+> } else S
*goto l;
...
*free_irq(\(e->start\|e1\),...)
// </smpl>
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH 2/2] drivers:net: delete premature free_irq
2013-09-02 9:54 [PATCH 0/2] delete premature free_irq Julia Lawall
@ 2013-09-02 9:54 ` Julia Lawall
2013-09-04 17:18 ` David Miller
0 siblings, 1 reply; 3+ messages in thread
From: Julia Lawall @ 2013-09-02 9:54 UTC (permalink / raw)
To: Wan ZongShun; +Cc: kernel-janitors, linux-arm-kernel, netdev, linux-kernel
From: Julia Lawall <Julia.Lawall@lip6.fr>
Free_irq is not needed if there has been no request_irq. Free_irq is
removed from both the probe and remove functions. The correct request_irq
and free_irq are found in the open and close functions.
A simplified version of the semantic match that finds this problem is as
follows: (http://coccinelle.lip6.fr/)
// <smpl>
@@
expression e;
@@
*e = platform_get_irq(...);
... when != request_irq(e,...)
*free_irq(e,...)
// </smpl>
Signed-off-by: Julia Lawall <Julia.Lawall@lip6.fr>
---
Not tested.
drivers/net/ethernet/nuvoton/w90p910_ether.c | 11 ++---------
1 file changed, 2 insertions(+), 9 deletions(-)
diff --git a/drivers/net/ethernet/nuvoton/w90p910_ether.c b/drivers/net/ethernet/nuvoton/w90p910_ether.c
index dcfe58f..79645f7 100644
--- a/drivers/net/ethernet/nuvoton/w90p910_ether.c
+++ b/drivers/net/ethernet/nuvoton/w90p910_ether.c
@@ -1014,7 +1014,7 @@ static int w90p910_ether_probe(struct platform_device *pdev)
if (ether->rxirq < 0) {
dev_err(&pdev->dev, "failed to get ether rx irq\n");
error = -ENXIO;
- goto failed_free_txirq;
+ goto failed_free_io;
}
platform_set_drvdata(pdev, dev);
@@ -1023,7 +1023,7 @@ static int w90p910_ether_probe(struct platform_device *pdev)
if (IS_ERR(ether->clk)) {
dev_err(&pdev->dev, "failed to get ether clock\n");
error = PTR_ERR(ether->clk);
- goto failed_free_rxirq;
+ goto failed_free_io;
}
ether->rmiiclk = clk_get(&pdev->dev, "RMII");
@@ -1049,10 +1049,6 @@ failed_put_rmiiclk:
clk_put(ether->rmiiclk);
failed_put_clk:
clk_put(ether->clk);
-failed_free_rxirq:
- free_irq(ether->rxirq, pdev);
-failed_free_txirq:
- free_irq(ether->txirq, pdev);
failed_free_io:
iounmap(ether->reg);
failed_free_mem:
@@ -1075,9 +1071,6 @@ static int w90p910_ether_remove(struct platform_device *pdev)
iounmap(ether->reg);
release_mem_region(ether->res->start, resource_size(ether->res));
- free_irq(ether->txirq, dev);
- free_irq(ether->rxirq, dev);
-
del_timer_sync(ðer->check_timer);
free_netdev(dev);
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH 2/2] drivers:net: delete premature free_irq
2013-09-02 9:54 ` [PATCH 2/2] drivers:net: " Julia Lawall
@ 2013-09-04 17:18 ` David Miller
0 siblings, 0 replies; 3+ messages in thread
From: David Miller @ 2013-09-04 17:18 UTC (permalink / raw)
To: Julia.Lawall
Cc: mcuos.com, kernel-janitors, linux-arm-kernel, netdev,
linux-kernel
From: Julia Lawall <Julia.Lawall@lip6.fr>
Date: Mon, 2 Sep 2013 11:54:21 +0200
> From: Julia Lawall <Julia.Lawall@lip6.fr>
>
> Free_irq is not needed if there has been no request_irq. Free_irq is
> removed from both the probe and remove functions. The correct request_irq
> and free_irq are found in the open and close functions.
>
> A simplified version of the semantic match that finds this problem is as
> follows: (http://coccinelle.lip6.fr/)
...
> Signed-off-by: Julia Lawall <Julia.Lawall@lip6.fr>
Applied, thank you.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2013-09-04 17:18 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-09-02 9:54 [PATCH 0/2] delete premature free_irq Julia Lawall
2013-09-02 9:54 ` [PATCH 2/2] drivers:net: " Julia Lawall
2013-09-04 17:18 ` David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).