On 12/26/2015 11:58 PM, Julia Lawall wrote: > The error return value of platform_get_irq seems to often get dropped. > > Signed-off-by: Julia Lawall <Julia.Lawall at lip6.fr> > > --- > > v2: Check for the direct return case also. Added some mailing lists of > common offenders. > > diff --git a/scripts/coccinelle/api/platform_get_irq_return.cocci > b/scripts/coccinelle/api/platform_get_irq_return.cocci > new file mode 100644 > index 0000000..44680d0 > --- /dev/null > +++ b/scripts/coccinelle/api/platform_get_irq_return.cocci > @@ -0,0 +1,58 @@ > +/// Propagate the return value of platform_get_irq. > +//# Sometimes the return value of platform_get_irq is tested using <= 0, but > 0 > +//# might not be an appropriate return value in an error case. > +/// > +// Confidence: Moderate > +// Copyright: (C) 2015 Julia Lawall, Inria. GPLv2. > +// URL: http://coccinelle.lip6.fr/ > +// Options: --no-includes --include-headers > + > +virtual context > +virtual org > +virtual report > + > +// > ---------------------------------------------------------------------------- > + > + at r depends on context || org || report@ > +constant C; > +statement S; > +expression e, ret; > +position j0, j1; > +@@ > + > +* e at j0 = platform_get_irq(...); > +( > +if at j1 (...) { > + ... > + return -C; > +} else S > +| > +if at j1 (...) { > + ... > + ret = -C; > + ... > + return ret; > +} else S
Well, this seems to also cover the (e <= 0) checks which do make same sense in the light of Linus considering IRQ0 invalid. So I'd be more specific about the checks here -- 0 should indeed be overridden with something if it's considered invalid. MBR, Sergei