17f904d7eSThomas Gleixner// SPDX-License-Identifier: GPL-2.0-only 253302c1dSJulia Lawall/// Find missing clk_puts. 353302c1dSJulia Lawall/// 453302c1dSJulia Lawall//# This only signals a missing clk_put when there is a clk_put later 553302c1dSJulia Lawall//# in the same function. 653302c1dSJulia Lawall//# False positives can be due to loops. 753302c1dSJulia Lawall// 853302c1dSJulia Lawall// Confidence: Moderate 97f904d7eSThomas Gleixner// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. 107f904d7eSThomas Gleixner// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. 11*f01701ceSJulia Lawall// URL: https://coccinelle.gitlabpages.inria.fr/website 1253302c1dSJulia Lawall// Comments: 1353302c1dSJulia Lawall// Options: 1453302c1dSJulia Lawall 1553302c1dSJulia Lawallvirtual context 1653302c1dSJulia Lawallvirtual org 1753302c1dSJulia Lawallvirtual report 1853302c1dSJulia Lawall 1953302c1dSJulia Lawall@clk@ 2053302c1dSJulia Lawallexpression e; 2153302c1dSJulia Lawallstatement S,S1; 2253302c1dSJulia Lawallint ret; 2353302c1dSJulia Lawallposition p1,p2,p3; 2453302c1dSJulia Lawall@@ 2553302c1dSJulia Lawall 2653302c1dSJulia Lawalle = clk_get@p1(...) 2753302c1dSJulia Lawall... when != clk_put(e) 2853302c1dSJulia Lawallif (<+...e...+>) S 2953302c1dSJulia Lawall... when any 3053302c1dSJulia Lawall when != clk_put(e) 3153302c1dSJulia Lawall when != if (...) { ... clk_put(e); ... } 3253302c1dSJulia Lawall( 3353302c1dSJulia Lawall if (ret == 0) S1 3453302c1dSJulia Lawall| 3553302c1dSJulia Lawallif (...) 3653302c1dSJulia Lawall { ... 3753302c1dSJulia Lawall return 0; } 3853302c1dSJulia Lawall| 3953302c1dSJulia Lawallif (...) 4053302c1dSJulia Lawall { ... 4153302c1dSJulia Lawall return <+...e...+>; } 4253302c1dSJulia Lawall| 4353302c1dSJulia Lawall*if@p2 (...) 4453302c1dSJulia Lawall { ... when != clk_put(e) 4553302c1dSJulia Lawall when forall 4653302c1dSJulia Lawall return@p3 ...; } 4753302c1dSJulia Lawall) 4853302c1dSJulia Lawall... when any 4953302c1dSJulia Lawallclk_put(e); 5053302c1dSJulia Lawall 5153302c1dSJulia Lawall@script:python depends on org@ 5253302c1dSJulia Lawallp1 << clk.p1; 5353302c1dSJulia Lawallp2 << clk.p2; 5453302c1dSJulia Lawallp3 << clk.p3; 5553302c1dSJulia Lawall@@ 5653302c1dSJulia Lawall 5753302c1dSJulia Lawallcocci.print_main("clk_get",p1) 5853302c1dSJulia Lawallcocci.print_secs("if",p2) 5953302c1dSJulia Lawallcocci.print_secs("needed clk_put",p3) 6053302c1dSJulia Lawall 6153302c1dSJulia Lawall@script:python depends on report@ 6253302c1dSJulia Lawallp1 << clk.p1; 6353302c1dSJulia Lawallp2 << clk.p2; 6453302c1dSJulia Lawallp3 << clk.p3; 6553302c1dSJulia Lawall@@ 6653302c1dSJulia Lawall 6753302c1dSJulia Lawallmsg = "ERROR: missing clk_put; clk_get on line %s and execution via conditional on line %s" % (p1[0].line,p2[0].line) 6853302c1dSJulia Lawallcoccilib.report.print_report(p3[0],msg) 69