From patchwork Tue Dec 1 11:03:08 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Boris BREZILLON X-Patchwork-Id: 7735991 Return-Path: X-Original-To: patchwork-linux-samsung-soc@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 5ADD5BEEE5 for ; Tue, 1 Dec 2015 11:10:11 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 7BB4320524 for ; Tue, 1 Dec 2015 11:10:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 7F3B9206AF for ; Tue, 1 Dec 2015 11:10:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752921AbbLALKD (ORCPT ); Tue, 1 Dec 2015 06:10:03 -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 Received: by mail.free-electrons.com (Postfix, from userid 110) id A9EF64907; Tue, 1 Dec 2015 12:03:41 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 Received: from localhost.localdomain (AToulouse-657-1-983-46.w86-217.abo.wanadoo.fr [86.217.137.46]) by mail.free-electrons.com (Postfix) with ESMTPSA id BBB811DA6; Tue, 1 Dec 2015 12:03:39 +0100 (CET) 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-samsung-soc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-samsung-soc@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP 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) +