scripts/coccinelle: update int_literal_to_timeout for thread defines

Recent timeout rework reverted the interpretation of the delay
parameter to K_THREAD_DEFINE from a timeout to a count in
milliseconds, although the corresponding parameter in the
k_thread_create() function remains a timeout.  Convert timeout
expressions to millisecond durations where necessary.

Signed-off-by: Peter Bigot <peter.bigot@nordicsemi.no>
This commit is contained in:
Peter Bigot 2020-04-01 11:30:09 -05:00 committed by Johan Hedberg
commit 9d29e1c48c

View file

@ -88,7 +88,8 @@ C << r_last_timeout_const_report.C;
msg = "WARNING: replace constant {} with timeout in {}".format(C, fn) msg = "WARNING: replace constant {} with timeout in {}".format(C, fn)
coccilib.report.print_report(p[0], msg); coccilib.report.print_report(p[0], msg);
// ** Convert integer delays in K_THREAD_DEFINE to the appropriate macro // ** Convert timeout-valued delays in K_THREAD_DEFINE with durations
// ** in milliseconds
// Identify declarers where an identifier is used for the delay // Identify declarers where an identifier is used for the delay
@r_thread_decl_id@ @r_thread_decl_id@
@ -98,43 +99,55 @@ position p;
@@ @@
K_THREAD_DEFINE@p(..., C); K_THREAD_DEFINE@p(..., C);
// Select declarers with constant literal delay and replace with // Select declarers where the startup delay is a timeout expression
// appropriate macro // and replace with the corresponding millisecond duration.
@depends on patch@ @r_thread_decl_patch
depends on patch@
declarer name K_THREAD_DEFINE; declarer name K_THREAD_DEFINE;
constant C; identifier K_NO_WAIT =~ "^K_NO_WAIT$";
identifier K_FOREVER =~ "^K_FOREVER$";
expression E;
position p != r_thread_decl_id.p; position p != r_thread_decl_id.p;
@@ @@
K_THREAD_DEFINE@p(..., K_THREAD_DEFINE@p(...,
( (
- 0 - K_NO_WAIT
+ K_NO_WAIT + 0
| |
- -1 - K_FOREVER
+ K_FOREVER + -1
| |
- C - K_MSEC(E)
+ K_MSEC(C) + E
) )
); );
// Identify declarers where an identifier is used for the delay //
@r_thread_decl_const @r_thread_decl_report
depends on report@ depends on report@
declarer name K_THREAD_DEFINE; declarer name K_THREAD_DEFINE;
constant C; identifier K_NO_WAIT =~ "^K_NO_WAIT$";
identifier K_FOREVER =~ "^K_FOREVER$";
expression V;
position p != r_thread_decl_id.p; position p != r_thread_decl_id.p;
@@ @@
K_THREAD_DEFINE@p(..., C); K_THREAD_DEFINE@p(...,
(
K_NO_WAIT
|
K_FOREVER
|
K_MSEC(V)
)
);
@script:python @script:python
depends on report depends on report
@ @
C << r_thread_decl_const.C; p << r_thread_decl_report.p;
p << r_thread_decl_const.p;
@@ @@
msg = "WARNING: replace constant {} with timeout in K_THREAD_DEFINE".format(C) msg = "WARNING: replace timeout-valued delay with millisecond duration".format()
coccilib.report.print_report(p[0], msg); coccilib.report.print_report(p[0], msg);
// ** Handle k_timer_start where the second (not last) argument is a // ** Handle k_timer_start where the second (not last) argument is a