Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756115AbbLALSH (ORCPT ); Tue, 1 Dec 2015 06:18:07 -0500 Received: from mail3-relais-sop.national.inria.fr ([192.134.164.104]:30840 "EHLO mail3-relais-sop.national.inria.fr" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752161AbbLALSE (ORCPT ); Tue, 1 Dec 2015 06:18:04 -0500 X-IronPort-AV: E=Sophos;i="5.20,368,1444687200"; d="scan'208";a="155740698" Date: Tue, 1 Dec 2015 12:17:44 +0100 (CET) From: Julia Lawall X-X-Sender: jll@hadrien To: Boris Brezillon cc: David Woodhouse , Brian Norris , linux-mtd@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Jonathan Corbet , linux-doc@vger.kernel.org, Hartley Sweeten , Ryan Mallon , Shawn Guo , Sascha Hauer , Imre Kaloz , Krzysztof Halasa , Tony Lindgren , linux-omap@vger.kernel.org, Alexander Clouter , Thomas Petazzoni , Gregory CLEMENT , Jason Cooper , Sebastian Hesselbarth , Andrew Lunn , Daniel Mack , Haojian Zhuang , Robert Jarzmik , Marek Vasut , Steven Miao , adi-buildroot-devel@lists.sourceforge.net, Mikael Starvik , Jesper Nilsson , linux-cris-kernel@axis.com, Josh Wu , Wan ZongShun , Ezequiel Garcia , Maxim Levitsky , Kukjin Kim , Krzysztof Kozlowski , linux-samsung-soc@vger.kernel.org, Maxime Ripard , Chen-Yu Tsai , linux-sunxi@googlegroups.com, Stefan Agner , Greg Kroah-Hartman , devel@driverdev.osuosl.org, Julia Lawall Subject: Re: [PATCH v2 11/25] coccinelle: nand: detect and correct drivers embedding an mtd_info object In-Reply-To: <1448967802-25796-12-git-send-email-boris.brezillon@free-electrons.com> Message-ID: References: <1448967802-25796-1-git-send-email-boris.brezillon@free-electrons.com> <1448967802-25796-12-git-send-email-boris.brezillon@free-electrons.com> User-Agent: Alpine 2.10 (DEB 1266 2009-07-14) 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 Content-Length: 4172 Lines: 154 On Tue, 1 Dec 2015, Boris Brezillon wrote: > Add nand-priv-no-mtd.cocci to detect and correct NAND controller drivers > directly embedding an mtd_info struct in their private struct. > > Signed-off-by: Boris Brezillon > Cc: Julia Lawall > --- > Hi Julia, > > Not sure this is the correct way to detect and fix offending drivers, > but I get some warnings when launching coccicheck in org or report mode: > > "warning: fix2: inherited metavariable __chipfield not used in the -, +, > or context code" > > Note that I don't get those warnings when running in patch mode. > > Any idea (feel free to propose a better solution to detect and fix those > offending drivers)? Hi, Is this code generated with sgen? If so, could you send me the original semantic patch? Another thing that is immediately apparent is that you have <... ...> on the outside of one of the rules. This should never be needed. The warning suggests that your org and report versions are not doing as much as the patch version. If you have used sgen to generate the semantic patch then that would be strange. If you have hand written the whole thing, then maybe you could simplify it to just do the patch version, and then I can check it and run sgen on it to make a complete version. julia > > Best Regards, > > Boris > --- > scripts/coccinelle/api/nand-priv-no-mtd.cocci | 91 +++++++++++++++++++++++++++ > 1 file changed, 91 insertions(+) > create mode 100644 scripts/coccinelle/api/nand-priv-no-mtd.cocci > > diff --git a/scripts/coccinelle/api/nand-priv-no-mtd.cocci b/scripts/coccinelle/api/nand-priv-no-mtd.cocci > new file mode 100644 > index 0000000..b2c0c22 > --- /dev/null > +++ b/scripts/coccinelle/api/nand-priv-no-mtd.cocci > @@ -0,0 +1,91 @@ > +/// Fix NAND controller drivers declaring their own mtd_info struct instead > +/// of the one provided in struct nand_chip. > +/// > +// Confidence: Low > +// Copyright: (C) 2015 Boris Brezillon GPL v2. > + > +virtual patch > +virtual context > +virtual org > +virtual report > + > +@match1@ > +identifier __chipfield, __mtdfield; > +type __type; > +@@ > +( > + __type { > + ... > + struct nand_chip __chipfield; > + ... > + struct mtd_info __mtdfield; > + ... > + }; > +| > + __type { > + ... > + struct mtd_info __mtdfield; > + ... > + struct nand_chip __chipfield; > + ... > + }; > +) > + > +@fix1 depends on match1 && patch && !context && !org && !report@ > +identifier match1.__mtdfield; > +type match1.__type; > +@@ > + __type { > + ... > +- struct mtd_info __mtdfield; > + ... > + }; > + > +@fix2 depends on match1 && patch && !context && !org && !report@ > +identifier match1.__chipfield, match1.__mtdfield; > +identifier __subfield; > +type match1.__type; > +__type *__priv; > +@@ > +<... > +( > +- __priv->__mtdfield.__subfield > ++ nand_to_mtd(&__priv->__chipfield)->__subfield > +| > +- &(__priv->__mtdfield) > ++ nand_to_mtd(&__priv->__chipfield) > +) > +...> > + > +// ---------------------------------------------------------------------------- > + > +@fix1_context depends on match1 && !patch && (context || org || report)@ > +identifier match1.__mtdfield; > +type match1.__type; > +position j0; > +@@ > + > + __type { > + ... > +* struct mtd_info __mtdfield@j0; > + ... > + }; > + > +// ---------------------------------------------------------------------------- > + > +@script:python fix1_org depends on org@ > +j0 << fix1_context.j0; > +@@ > + > +msg = "struct nand_chip already embeds an mtd_info object (use nand_to_mtd())." > +coccilib.org.print_todo(j0[0], msg) > + > +// ---------------------------------------------------------------------------- > + > +@script:python fix1_report depends on report@ > +j0 << fix1_context.j0; > +@@ > + > +msg = "struct nand_chip already embeds an mtd_info object (use nand_to_mtd())." > +coccilib.report.print_report(j0[0], msg) > + > -- > 2.1.4 > > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/