x86/mm/pat: Don't report PAT on CPUs that don't support it
[linux/fpc-iii.git] / scripts / coccinelle / api / setup_timer.cocci
blobeb6bd9e4ab1abee4f1385188a2382f730432c3da
1 /// Use setup_timer function instead of initializing timer with the function
2 /// and data fields
3 // Confidence: High
4 // Copyright: (C) 2016 Vaishali Thakkar, Oracle. GPLv2
5 // Options: --no-includes --include-headers
6 // Keywords: init_timer, setup_timer
8 virtual patch
9 virtual context
10 virtual org
11 virtual report
13 @match_immediate_function_data_after_init_timer
14 depends on patch && !context && !org && !report@
15 expression e, func, da;
18 -init_timer (&e);
19 +setup_timer (&e, func, da);
22 -e.function = func;
23 -e.data = da;
25 -e.data = da;
26 -e.function = func;
29 @match_function_and_data_after_init_timer
30 depends on patch && !context && !org && !report@
31 expression e1, e2, e3, e4, e5, a, b;
34 -init_timer (&e1);
35 +setup_timer (&e1, a, b);
37 ... when != a = e2
38     when != b = e3
40 -e1.function = a;
41 ... when != b = e4
42 -e1.data = b;
44 -e1.data = b;
45 ... when != a = e5
46 -e1.function = a;
49 @r1 exists@
50 identifier f;
51 position p;
54 f(...) { ... when any
55   init_timer@p(...)
56   ... when any
59 @r2 exists@
60 identifier g != r1.f;
61 struct timer_list t;
62 expression e8;
65 g(...) { ... when any
66   t.data = e8
67   ... when any
70 // It is dangerous to use setup_timer if data field is initialized
71 // in another function.
73 @script:python depends on r2@
74 p << r1.p;
77 cocci.include_match(False)
79 @r3 depends on patch && !context && !org && !report@
80 expression e6, e7, c;
81 position r1.p;
84 -init_timer@p (&e6);
85 +setup_timer (&e6, c, 0UL);
86 ... when != c = e7
87 -e6.function = c;
89 // ----------------------------------------------------------------------------
91 @match_immediate_function_data_after_init_timer_context
92 depends on !patch && (context || org || report)@
93 expression da, e, func;
94 position j0, j1, j2;
97 * init_timer@j0 (&e);
99 * e@j1.function = func;
100 * e@j2.data = da;
102 * e@j1.data = da;
103 * e@j2.function = func;
106 @match_function_and_data_after_init_timer_context
107 depends on !patch &&
108 !match_immediate_function_data_after_init_timer_context &&
109  (context || org || report)@
110 expression a, b, e1, e2, e3, e4, e5;
111 position j0, j1, j2;
114 * init_timer@j0 (&e1);
115 ... when != a = e2
116     when != b = e3
118 * e1@j1.function = a;
119 ... when != b = e4
120 * e1@j2.data = b;
122 * e1@j1.data = b;
123 ... when != a = e5
124 * e1@j2.function = a;
127 @r3_context depends on !patch &&
128 !match_immediate_function_data_after_init_timer_context &&
129 !match_function_and_data_after_init_timer_context &&
130  (context || org || report)@
131 expression c, e6, e7;
132 position r1.p;
133 position j0, j1;
136 * init_timer@j0@p (&e6);
137 ... when != c = e7
138 * e6@j1.function = c;
140 // ----------------------------------------------------------------------------
142 @script:python match_immediate_function_data_after_init_timer_org
143 depends on org@
144 j0 << match_immediate_function_data_after_init_timer_context.j0;
145 j1 << match_immediate_function_data_after_init_timer_context.j1;
146 j2 << match_immediate_function_data_after_init_timer_context.j2;
149 msg = "Use setup_timer function."
150 coccilib.org.print_todo(j0[0], msg)
151 coccilib.org.print_link(j1[0], "")
152 coccilib.org.print_link(j2[0], "")
154 @script:python match_function_and_data_after_init_timer_org depends on org@
155 j0 << match_function_and_data_after_init_timer_context.j0;
156 j1 << match_function_and_data_after_init_timer_context.j1;
157 j2 << match_function_and_data_after_init_timer_context.j2;
160 msg = "Use setup_timer function."
161 coccilib.org.print_todo(j0[0], msg)
162 coccilib.org.print_link(j1[0], "")
163 coccilib.org.print_link(j2[0], "")
165 @script:python r3_org depends on org@
166 j0 << r3_context.j0;
167 j1 << r3_context.j1;
170 msg = "Use setup_timer function."
171 coccilib.org.print_todo(j0[0], msg)
172 coccilib.org.print_link(j1[0], "")
174 // ----------------------------------------------------------------------------
176 @script:python match_immediate_function_data_after_init_timer_report
177 depends on report@
178 j0 << match_immediate_function_data_after_init_timer_context.j0;
179 j1 << match_immediate_function_data_after_init_timer_context.j1;
182 msg = "Use setup_timer function for function on line %s." % (j1[0].line)
183 coccilib.report.print_report(j0[0], msg)
185 @script:python match_function_and_data_after_init_timer_report depends on report@
186 j0 << match_function_and_data_after_init_timer_context.j0;
187 j1 << match_function_and_data_after_init_timer_context.j1;
190 msg = "Use setup_timer function for function on line %s." % (j1[0].line)
191 coccilib.report.print_report(j0[0], msg)
193 @script:python r3_report depends on report@
194 j0 << r3_context.j0;
195 j1 << r3_context.j1;
198 msg = "Use setup_timer function for function on line %s." % (j1[0].line)
199 coccilib.report.print_report(j0[0], msg)