195 lines
3.3 KiB
Plaintext
195 lines
3.3 KiB
Plaintext
// Copyright (c) 2019-2020 Nordic Semiconductor ASA
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
// Replace use of K_NO_WAIT and K_FOREVER in API that requires
|
|
// timeouts be specified as integral milliseconds.
|
|
//
|
|
// These constants used to have the values 0 and -1 respectively; they
|
|
// are now timeout values which are opaque non-integral values that
|
|
// can't be converted to integers automatically. For K_NO_WAIT replace
|
|
// with 0; for K_FOREVER replace with SYS_FOREVER_MS, the value of
|
|
// which is -1.
|
|
//
|
|
// Options: --include-headers
|
|
|
|
virtual patch
|
|
virtual report
|
|
|
|
// ** Handle millisecond timeout as the last parameter
|
|
|
|
// Match identifier passed as timeout
|
|
@match_fn_l1@
|
|
identifier fn =~ "(?x)^
|
|
(dmic_read
|
|
|bt_buf_get_(rx|cmd_complete|evt)
|
|
|bt_mesh_cfg_cli_timeout_set
|
|
|isotp_(bind|recv(_net)?|send(_net)?(_ctx)?_buf)
|
|
|tty_set_(tx|rx)_timeout
|
|
|can_(write|recover)
|
|
|uart_(tx|rx_enable)
|
|
|dns_(resolve_name|get_addr_info)
|
|
|net_config_init
|
|
|net_ppp_ping
|
|
|websocket_(send|recv)_msg
|
|
)$";
|
|
identifier T;
|
|
@@
|
|
fn(..., T);
|
|
|
|
@report_fn_l1
|
|
extends match_fn_l1
|
|
depends on report
|
|
@
|
|
identifier K_NO_WAIT =~ "^K_NO_WAIT$";
|
|
identifier K_FOREVER =~ "^K_FOREVER$";
|
|
position p;
|
|
@@
|
|
fn@p(...,
|
|
(
|
|
K_NO_WAIT
|
|
|
|
|
K_FOREVER
|
|
)
|
|
)
|
|
|
|
@script:python
|
|
depends on report
|
|
@
|
|
fn << match_fn_l1.fn;
|
|
T << match_fn_l1.T;
|
|
p << report_fn_l1.p;
|
|
@@
|
|
msg = "WARNING: [msl1] replace constant {} with ms duration in {}".format(T, fn)
|
|
coccilib.report.print_report(p[0], msg);
|
|
|
|
@fix_fn_l1
|
|
extends match_fn_l1
|
|
depends on patch
|
|
@
|
|
identifier K_NO_WAIT =~ "^K_NO_WAIT$";
|
|
identifier K_FOREVER =~ "^K_FOREVER$";
|
|
@@
|
|
fn(...,
|
|
(
|
|
- K_NO_WAIT
|
|
+ 0
|
|
|
|
|
- K_FOREVER
|
|
+ SYS_FOREVER_MS
|
|
))
|
|
|
|
// ** Handle millisecond timeout as second from last parameter
|
|
|
|
// Match identifier passed as timeout
|
|
@match_fn_l2@
|
|
identifier fn =~ "(?x)^
|
|
(http_client_req
|
|
|websocket_connect
|
|
)$";
|
|
expression L1;
|
|
identifier T;
|
|
@@
|
|
fn(..., T, L1)
|
|
|
|
@report_fn_l2
|
|
extends match_fn_l2
|
|
depends on report
|
|
@
|
|
identifier K_NO_WAIT =~ "^K_NO_WAIT$";
|
|
identifier K_FOREVER =~ "^K_FOREVER$";
|
|
expression X1;
|
|
position p;
|
|
@@
|
|
fn@p(...,
|
|
(
|
|
K_NO_WAIT
|
|
|
|
|
K_FOREVER
|
|
)
|
|
, X1)
|
|
|
|
@script:python
|
|
depends on report
|
|
@
|
|
fn << match_fn_l2.fn;
|
|
T << match_fn_l2.T;
|
|
p << report_fn_l2.p;
|
|
@@
|
|
msg = "WARNING: [msl2] replace constant {} with ms duration in {}".format(T, fn)
|
|
coccilib.report.print_report(p[0], msg);
|
|
|
|
@fix_fn_l2
|
|
extends match_fn_l2
|
|
depends on patch
|
|
@
|
|
identifier K_NO_WAIT =~ "^K_NO_WAIT$";
|
|
identifier K_FOREVER =~ "^K_FOREVER$";
|
|
expression X1;
|
|
@@
|
|
fn(...,
|
|
(
|
|
- K_NO_WAIT
|
|
+ 0
|
|
|
|
|
- K_FOREVER
|
|
+ SYS_FOREVER_MS
|
|
)
|
|
, X1)
|
|
|
|
// ** Handle millisecond timeout as third from last parameter
|
|
|
|
// Match identifier passed as timeout
|
|
@match_fn_l3@
|
|
identifier fn =~ "(?x)^
|
|
(can_send
|
|
|lora_recv
|
|
)$";
|
|
expression L1;
|
|
expression L2;
|
|
identifier T;
|
|
@@
|
|
fn(..., T, L2, L1)
|
|
|
|
@report_fn_l3
|
|
extends match_fn_l3
|
|
depends on report
|
|
@
|
|
identifier K_NO_WAIT =~ "^K_NO_WAIT$";
|
|
identifier K_FOREVER =~ "^K_FOREVER$";
|
|
position p;
|
|
@@
|
|
fn@p(...,
|
|
(
|
|
K_NO_WAIT
|
|
|
|
|
K_FOREVER
|
|
)
|
|
, L2, L1)
|
|
|
|
@script:python
|
|
depends on report
|
|
@
|
|
fn << match_fn_l3.fn;
|
|
T << match_fn_l3.T;
|
|
p << report_fn_l3.p;
|
|
@@
|
|
msg = "WARNING: [msl3] replace constant {} with ms duration in {}".format(T, fn)
|
|
coccilib.report.print_report(p[0], msg);
|
|
|
|
@fix_fn_l3
|
|
extends match_fn_l3
|
|
depends on patch
|
|
@
|
|
identifier K_NO_WAIT =~ "^K_NO_WAIT$";
|
|
identifier K_FOREVER =~ "^K_FOREVER$";
|
|
@@
|
|
fn(...,
|
|
(
|
|
- K_NO_WAIT
|
|
+ 0
|
|
|
|
|
- K_FOREVER
|
|
+ SYS_FOREVER_MS
|
|
)
|
|
, L2, L1)
|