On Thu, 28 Jun 2012, yafo lee wrote:
> Hi guys,
> I write the following rules to remove "request_irq" from funciton
> "alx_request_msix_irq":
> @@
> expression ret;
> @@
> static int alx_request_msix_irq(struct alx_adapter *adpt)
> {
> + int rid = 0;
> ...
> - ret = request_irq(...);
> ...
> }
Use a nest: <... ...>. ... matches a control-flow path that doesn't
contain what is before and after the ... But when there is a loop, there
is necessarily the possibility of a call to request_irq before and after,
ie the one in the next and previous iterations of the loop.
julia
>
> but it doesn't work for the source code:
>
> static int alx_request_msix_irq(struct alx_adapter *adpt)
> {
> irqreturn_t (*handler)(int, void *);
> int msix_idx;
> int num_msix_intrs = adpt->num_msix_intrs;
> int retval = 0;
>
> for (msix_idx = 0; msix_idx < num_msix_intrs; msix_idx++) {
>
> handler = alx_msix_rtx;
>
> retval = request_irq(adpt->msix_entries[msix_idx].vector,
> handler, 0, msix->name, msix);
>
> if (retval)
> return retval;
> }
>
> return 0;
> }
>
>
> it only works when I move the "request_irq" call out of the for loop:
>
> static int alx_request_msix_irq(struct alx_adapter *adpt)
> {
> irqreturn_t (*handler)(int, void *);
> int msix_idx;
> int num_msix_intrs = adpt->num_msix_intrs;
> int retval = 0;
>
> handler = alx_msix_rtx;
> retval = request_irq(adpt->msix_entries[msix_idx].vector,
> handler, 0, msix->name, msix);
>
> for (msix_idx = 0; msix_idx < num_msix_intrs; msix_idx++) {
> if (retval)
> return retval;
> }
>
> return 0;
> }
>
> _______________________________________________
> Cocci mailing list
> [email protected]
> http://lists.diku.dk/mailman/listinfo/cocci
> (Web access from inside DIKUs LAN only)
>
_______________________________________________
Cocci mailing list
[email protected]
http://lists.diku.dk/mailman/listinfo/cocci
(Web access from inside DIKUs LAN only)