Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755215AbeAMQYe (ORCPT + 1 other); Sat, 13 Jan 2018 11:24:34 -0500 Received: from mail3-relais-sop.national.inria.fr ([192.134.164.104]:61572 "EHLO mail3-relais-sop.national.inria.fr" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754998AbeAMQYd (ORCPT ); Sat, 13 Jan 2018 11:24:33 -0500 X-IronPort-AV: E=Sophos;i="5.46,354,1511823600"; d="scan'208";a="251104546" Date: Sat, 13 Jan 2018 17:24:22 +0100 (CET) From: Julia Lawall X-X-Sender: jll@hadrien To: Himanshu Jha cc: yamada.masahiro@socionext.com, Julia.Lawall@lip6.fr, Gilles Muller , nicolas.palix@imag.fr, michal.lkml@markovi.net, cocci@systeme.lip6.fr, linux-kernel@vger.kernel.org Subject: Re: [PATCH] Coccinelle: alloc_cast: Add more memory allocating functions to the list In-Reply-To: <1515858990-31699-1-git-send-email-himanshujha199640@gmail.com> Message-ID: References: <1515858990-31699-1-git-send-email-himanshujha199640@gmail.com> User-Agent: Alpine 2.20 (DEB 67 2015-01-07) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Return-Path: On Sat, 13 Jan 2018, Himanshu Jha wrote: > Add more memory allocating functions that are frequently used in the kernel > code to the existing list and remove the useless casts where it is > unnecessary. > > But preserve those casts having __attribute__ such as __force, __iomem, > etc which are used by Sparse in the static analysis of the code. > > Also remove two blank lines at EOF. > > Signed-off-by: Himanshu Jha Acked-by: Julia Lawall > --- > scripts/coccinelle/api/alloc/alloc_cast.cocci | 92 +++++++++++++++++++++------ > 1 file changed, 71 insertions(+), 21 deletions(-) > > diff --git a/scripts/coccinelle/api/alloc/alloc_cast.cocci b/scripts/coccinelle/api/alloc/alloc_cast.cocci > index 6c308ee..408ee38 100644 > --- a/scripts/coccinelle/api/alloc/alloc_cast.cocci > +++ b/scripts/coccinelle/api/alloc/alloc_cast.cocci > @@ -5,10 +5,11 @@ > //# kmalloc, kzalloc, kcalloc, kmem_cache_alloc, kmem_cache_zalloc, > //# kmem_cache_alloc_node, kmalloc_node and kzalloc_node and removes > //# the casting as it is not required. The result in the patch case may > -//#need some reformatting. > +//# need some reformatting. > // > // Confidence: High > -// Copyright: 2014, Himangi Saraogi GPLv2. > +// Copyright: (C) 2014 Himangi Saraogi GPLv2. > +// Copyright: (C) 2017 Himanshu Jha GPLv2. > // Comments: > // Options: --no-includes --include-headers > // > @@ -18,55 +19,104 @@ virtual patch > virtual org > virtual report > > +@initialize:python@ > +@@ > +import re > +pattern = '__' > +m = re.compile(pattern) > + > +@r1 depends on context || patch@ > +type T; > +@@ > + > + (T *) > + \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\| > + kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\|vmalloc\|vzalloc\| > + dma_alloc_coherent\|dma_zalloc_coherent\|devm_kmalloc\|devm_kzalloc\| > + kvmalloc\|kvzalloc\|kvmalloc_node\|kvzalloc_node\|pci_alloc_consistent\| > + pci_zalloc_consistent\|kmem_alloc\|kmem_zalloc\|kmem_zone_alloc\| > + kmem_zone_zalloc\|vmalloc_node\|vzalloc_node\)(...) > + > //---------------------------------------------------------- > // For context mode > //---------------------------------------------------------- > > -@depends on context@ > -type T; > +@script:python depends on context@ > +t << r1.T; > +@@ > + > +if m.search(t) != None: > + cocci.include_match(False) > + > +@depends on context && r1@ > +type r1.T; > @@ > > * (T *) > \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\| > - kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\)(...) > + kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\|vmalloc\|vzalloc\| > + dma_alloc_coherent\|dma_zalloc_coherent\|devm_kmalloc\|devm_kzalloc\| > + kvmalloc\|kvzalloc\|kvmalloc_node\|kvzalloc_node\|pci_alloc_consistent\| > + pci_zalloc_consistent\|kmem_alloc\|kmem_zalloc\|kmem_zone_alloc\| > + kmem_zone_zalloc\|vmalloc_node\|vzalloc_node\)(...) > > //---------------------------------------------------------- > // For patch mode > //---------------------------------------------------------- > > -@depends on patch@ > -type T; > +@script:python depends on patch@ > +t << r1.T; > +@@ > + > +if m.search(t) != None: > + cocci.include_match(False) > + > +@depends on patch && r1@ > +type r1.T; > @@ > > - (T *) > - (\(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\| > - kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\)(...)) > + \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\| > + kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\|vmalloc\|vzalloc\| > + dma_alloc_coherent\|dma_zalloc_coherent\|devm_kmalloc\|devm_kzalloc\| > + kvmalloc\|kvzalloc\|kvmalloc_node\|kvzalloc_node\|pci_alloc_consistent\| > + pci_zalloc_consistent\|kmem_alloc\|kmem_zalloc\|kmem_zone_alloc\| > + kmem_zone_zalloc\|vmalloc_node\|vzalloc_node\)(...) > > //---------------------------------------------------------- > // For org and report mode > //---------------------------------------------------------- > > -@r depends on org || report@ > +@r2 depends on org || report@ > type T; > position p; > @@ > > - (T@p *)\(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\| > - kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\)(...) > + (T@p *) > + \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\| > + kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\|vmalloc\|vzalloc\| > + dma_alloc_coherent\|dma_zalloc_coherent\|devm_kmalloc\|devm_kzalloc\| > + kvmalloc\|kvzalloc\|kvmalloc_node\|kvzalloc_node\|pci_alloc_consistent\| > + pci_zalloc_consistent\|kmem_alloc\|kmem_zalloc\|kmem_zone_alloc\| > + kmem_zone_zalloc\|vmalloc_node\|vzalloc_node\)(...) > > @script:python depends on org@ > -p << r.p; > -t << r.T; > +p << r2.p; > +t << r2.T; > @@ > > -coccilib.org.print_safe_todo(p[0], t) > +if m.search(t) != None: > + cocci.include_match(False) > +else: > + coccilib.org.print_safe_todo(p[0], t) > > @script:python depends on report@ > -p << r.p; > -t << r.T; > +p << r2.p; > +t << r2.T; > @@ > > -msg="WARNING: casting value returned by memory allocation function to (%s *) is useless." % (t) > -coccilib.report.print_report(p[0], msg) > - > - > +if m.search(t) != None: > + cocci.include_match(False) > +else: > + msg="WARNING: casting value returned by memory allocation function to (%s *) is useless." % (t) > + coccilib.report.print_report(p[0], msg) > -- > 2.7.4 > >