1 /// Use setup_timer function instead of initializing timer with the function
4 // Copyright: (C) 2016 Vaishali Thakkar, Oracle. GPLv2
5 // Options: --no-includes --include-headers
6 // Keywords: init_timer, setup_timer
13 @match_immediate_function_data_after_init_timer
14 depends on patch && !context && !org && !report@
15 expression e, func, da;
19 +setup_timer (&e, func, da);
29 @match_function_and_data_after_init_timer
30 depends on patch && !context && !org && !report@
31 expression e1, e2, e3, e4, e5, a, b;
35 +setup_timer (&e1, a, b);
70 // It is dangerous to use setup_timer if data field is initialized
71 // in another function.
73 @script:python depends on r2@
77 cocci.include_match(False)
79 @r3 depends on patch && !context && !org && !report@
85 +setup_timer (&e6, c, 0UL);
89 // ----------------------------------------------------------------------------
91 @match_immediate_function_data_after_init_timer_context
92 depends on !patch && (context || org || report)@
93 expression da, e, func;
99 * e@j1.function = func;
103 * e@j2.function = func;
106 @match_function_and_data_after_init_timer_context
107 depends on !patch && (context || org || report)@
108 expression a, b, e1, e2, e3, e4, e5;
109 position j0 != match_immediate_function_data_after_init_timer_context.j0,j1,j2;
112 * init_timer@j0 (&e1);
116 * e1@j1.function = a;
122 * e1@j2.function = a;
125 @r3_context depends on !patch && (context || org || report)@
126 expression c, e6, e7;
129 {match_immediate_function_data_after_init_timer_context.j0,
130 match_function_and_data_after_init_timer_context.j0}, j1;
133 * init_timer@j0@p (&e6);
135 * e6@j1.function = c;
137 // ----------------------------------------------------------------------------
139 @script:python match_immediate_function_data_after_init_timer_org
141 j0 << match_immediate_function_data_after_init_timer_context.j0;
142 j1 << match_immediate_function_data_after_init_timer_context.j1;
143 j2 << match_immediate_function_data_after_init_timer_context.j2;
146 msg = "Use setup_timer function."
147 coccilib.org.print_todo(j0[0], msg)
148 coccilib.org.print_link(j1[0], "")
149 coccilib.org.print_link(j2[0], "")
151 @script:python match_function_and_data_after_init_timer_org depends on org@
152 j0 << match_function_and_data_after_init_timer_context.j0;
153 j1 << match_function_and_data_after_init_timer_context.j1;
154 j2 << match_function_and_data_after_init_timer_context.j2;
157 msg = "Use setup_timer function."
158 coccilib.org.print_todo(j0[0], msg)
159 coccilib.org.print_link(j1[0], "")
160 coccilib.org.print_link(j2[0], "")
162 @script:python r3_org depends on org@
167 msg = "Use setup_timer function."
168 coccilib.org.print_todo(j0[0], msg)
169 coccilib.org.print_link(j1[0], "")
171 // ----------------------------------------------------------------------------
173 @script:python match_immediate_function_data_after_init_timer_report
175 j0 << match_immediate_function_data_after_init_timer_context.j0;
176 j1 << match_immediate_function_data_after_init_timer_context.j1;
179 msg = "Use setup_timer function for function on line %s." % (j1[0].line)
180 coccilib.report.print_report(j0[0], msg)
182 @script:python match_function_and_data_after_init_timer_report depends on report@
183 j0 << match_function_and_data_after_init_timer_context.j0;
184 j1 << match_function_and_data_after_init_timer_context.j1;
187 msg = "Use setup_timer function for function on line %s." % (j1[0].line)
188 coccilib.report.print_report(j0[0], msg)
190 @script:python r3_report depends on report@
195 msg = "Use setup_timer function for function on line %s." % (j1[0].line)
196 coccilib.report.print_report(j0[0], msg)