From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756262AbbLALKF (ORCPT ); Tue, 1 Dec 2015 06:10:05 -0500 Received: from down.free-electrons.com ([37.187.137.238]:36677 "EHLO mail.free-electrons.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1755123AbbLALDo (ORCPT ); Tue, 1 Dec 2015 06:03:44 -0500 From: Boris Brezillon To: David Woodhouse , Brian Norris , linux-mtd@lists.infradead.org Cc: 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, Boris Brezillon , Julia Lawall Subject: [PATCH v2 11/25] coccinelle: nand: detect and correct drivers embedding an mtd_info object Date: Tue, 1 Dec 2015 12:03:08 +0100 Message-Id: <1448967802-25796-12-git-send-email-boris.brezillon@free-electrons.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1448967802-25796-1-git-send-email-boris.brezillon@free-electrons.com> References: <1448967802-25796-1-git-send-email-boris.brezillon@free-electrons.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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)? 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 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Brezillon Subject: [PATCH v2 11/25] coccinelle: nand: detect and correct drivers embedding an mtd_info object Date: Tue, 1 Dec 2015 12:03:08 +0100 Message-ID: <1448967802-25796-12-git-send-email-boris.brezillon@free-electrons.com> References: <1448967802-25796-1-git-send-email-boris.brezillon@free-electrons.com> Reply-To: boris.brezillon-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Return-path: In-Reply-To: <1448967802-25796-1-git-send-email-boris.brezillon-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org> List-Post: , List-Help: , List-Archive: , List-Unsubscribe: , To: David Woodhouse , Brian Norris , linux-mtd-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org Cc: linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Jonathan Corbet , linux-doc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Hartley Sweeten , Ryan Mallon , Shawn Guo , Sascha Hauer , Imre Kaloz , Krzysztof Halasa , Tony Lindgren , linux-omap-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Alexander Clouter , Thomas Petazzoni , Gregory CLEMENT , Jason Cooper , Sebastian Hesselbarth , Andrew Lunn , Daniel Mack , Haojian Zhuang , Robert Jarzmik , Marek Vasut , Steven Miao a List-Id: linux-omap@vger.kernel.org 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)? 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 From mboxrd@z Thu Jan 1 00:00:00 1970 From: boris.brezillon@free-electrons.com (Boris Brezillon) Date: Tue, 1 Dec 2015 12:03:08 +0100 Subject: [PATCH v2 11/25] coccinelle: nand: detect and correct drivers embedding an mtd_info object In-Reply-To: <1448967802-25796-1-git-send-email-boris.brezillon@free-electrons.com> References: <1448967802-25796-1-git-send-email-boris.brezillon@free-electrons.com> Message-ID: <1448967802-25796-12-git-send-email-boris.brezillon@free-electrons.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org 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)? 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 + + at match1@ +identifier __chipfield, __mtdfield; +type __type; +@@ +( + __type { + ... + struct nand_chip __chipfield; + ... + struct mtd_info __mtdfield; + ... + }; +| + __type { + ... + struct mtd_info __mtdfield; + ... + struct nand_chip __chipfield; + ... + }; +) + + at fix1 depends on match1 && patch && !context && !org && !report@ +identifier match1.__mtdfield; +type match1.__type; +@@ + __type { + ... +- struct mtd_info __mtdfield; + ... + }; + + at 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) +) +...> + +// ---------------------------------------------------------------------------- + + at fix1_context depends on match1 && !patch && (context || org || report)@ +identifier match1.__mtdfield; +type match1.__type; +position j0; +@@ + + __type { + ... +* struct mtd_info __mtdfield at j0; + ... + }; + +// ---------------------------------------------------------------------------- + + at 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