lkml.org 
[lkml]   [2014]   [Jun]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH 00/22] Add and use pci_zalloc_consistent


On Mon, 23 Jun 2014, Joe Perches wrote:

> (Adding Julia Lawall and removing almost all other cc's)
>
> On Tue, 2014-06-24 at 09:27 +1000, Julian Calaby wrote:
> > Hi Joe,
>
> Hello Julian.
>
> > > $ cat ./scripts/coccinelle/api/alloc/pci_zalloc_consistent.cocci
> > > ///
> > > /// Use pci_zalloc_consistent rather than
> > > /// pci_alloc_consistent followed by memset with 0
> > > ///
> > > /// This considers some simple cases that are common and easy to validate
> > > /// Note in particular that there are no ...s in the rule, so all of the
> > > /// matched code has to be contiguous
> > > ///
> > > /// Blatantly cribbed from: scripts/coccinelle/api/alloc/kzalloc-simple.cocci
> > >
> > > @@
> > > type T, T2;
> > > expression x;
> > > expression E1,E2,E3;
> > > statement S;
> > > @@
> > >
> > > - x = (T)pci_alloc_consistent(E1,E2,E3);
> > > + x = pci_zalloc_consistent(E1,E2,E3);
> > > if ((x==NULL) || ...) S
> > > - memset((T2)x,0,E2);
> >
> > I don't know much about SmPL, but wouldn't having that if statement
> > there reduce your matches?
>
> No, not really.
>
> Almost none of the pci_alloc_consistent calls
> do not have a test for failure immediately after
> them.

Do not or do?

The advantage of the if is that you are sure that nothing strange happens
to x between alloc and memset. But a problem can be that sometimes people
allocate two things, and then do error checking for both of them. Then
you rule would not match. Or the set the return variable to an error code
before doing the check rather than in the if branch.

You could put the following between the malloc and the memset in stead of
the if.

... when != ( f(...,x,...) | <+...x...+> = E3 )
when != ( while(...) S | for(...;...;...) S )

This has given reasonable results for kmalloc and memset.

julia

> Coccinelle is a very cool code transformation tool,
> quite useful for these sorts of patch conversions.
>
> http://coccinelle.lip6.fr/documentation.php
>
>
>


\
 
 \ /
  Last update: 2014-06-24 07:41    [W:0.084 / U:0.204 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site