have to work the unit test for ovsrcu_barrier API. will send all the fix in the next version.
Eelco Chaudron <[email protected]> 于2022年5月25日周三 20:44写道: > > > On 24 May 2022, at 16:29, Peng He wrote: > > > Signed-off-by: Peng He <[email protected]> > > Signed-off-by: Peng He <[email protected]> > > This patch is making existing test fail: > > 10: checkpatch - sign-offs ok > 11: checkpatch - parenthesized constructs FAILED ( > checkpatch.at:27) > 12: checkpatch - catastrophic backtracking FAILED ( > checkpatch.at:27) > 13: checkpatch - parenthesized constructs - for FAILED ( > checkpatch.at:27) > 14: checkpatch - comments FAILED ( > checkpatch.at:27) > 15: checkpatch - whitespace around operator FAILED ( > checkpatch.at:27) > 16: checkpatch - check misuse APIs ok > 17: checkpatch - whitespace around cast FAILED ( > checkpatch.at:27) > 18: checkpatch - malformed tags ok > 19: checkpatch - Unicode code FAILED ( > checkpatch.at:27) > > See also the fix below, which was what I had in mind asking for a single > macro. > > > --- > > tests/checkpatch.at | 30 ++++++++++++++++++++++++++---- > > utilities/checkpatch.py | 36 +++++++++++++++++++++++++++++++++--- > > 2 files changed, 59 insertions(+), 7 deletions(-) > > > > diff --git a/tests/checkpatch.at b/tests/checkpatch.at > > index fadb625e9..4dceb8b26 100755 > > --- a/tests/checkpatch.at > > +++ b/tests/checkpatch.at > > @@ -159,17 +159,21 @@ try_checkpatch \ > > AT_CLEANUP > > > > > > -m4_define([COMMON_PATCH_HEADER], [dnl > > +m4_define([_COMMON_PATCH_HEADER], [dnl > > Author: A > > > > Signed-off-by: A > > --- > > - diff --git a/A.c b/A.c > > + diff --git a/$1 b/$1 > > index 0000000..1111111 100644 > > - --- a/A.c > > - +++ b/A.c > > + --- a/$1 > > + +++ b/$1 > > @@ -1,1 +1,1 @@]) > > > > +m4_define([COMMON_PATCH_HEADER], > > + [_COMMON_PATCH_HEADER([A.c]) > > +]) > > + > > > I was hoping for a more simple solution, i.e. if $1 is not present use A.c > or else the value given. > This is a diff I used to also make all existing tests pass: > > diff --git a/tests/checkpatch.at b/tests/checkpatch.at > index 4dceb8b26..5b326b083 100755 > --- a/tests/checkpatch.at > +++ b/tests/checkpatch.at > @@ -159,24 +159,20 @@ try_checkpatch \ > AT_CLEANUP > > > -m4_define([_COMMON_PATCH_HEADER], [dnl > +m4_define([COMMON_PATCH_HEADER], [dnl > Author: A > > Signed-off-by: A > --- > - diff --git a/$1 b/$1 > + diff --git a/$([[ ! -z "$1" ]] && echo "$1" || echo "A.c") b/$([[ ! > -z "$1" ]] && echo "$1" || echo "A.c") > index 0000000..1111111 100644 > - --- a/$1 > - +++ b/$1 > + --- a/$([[ ! -z "$1" ]] && echo "$1" || echo "A.c") > + +++ b/$([[ ! -z "$1" ]] && echo "$1" || echo "A.c") > @@ -1,1 +1,1 @@]) > > -m4_define([COMMON_PATCH_HEADER], > - [_COMMON_PATCH_HEADER([A.c]) > -]) > - > - > AT_SETUP([checkpatch - parenthesized constructs]) > for ctr in 'if' 'while' 'switch' 'HMAP_FOR_EACH' 'BITMAP_FOR_EACH_1'; do > + > try_checkpatch \ > "COMMON_PATCH_HEADER > + $ctr (first_run) { > @@ -354,7 +350,7 @@ AT_CLEANUP > > AT_SETUP([checkpatch - check misuse APIs]) > try_checkpatch \ > - "_COMMON_PATCH_HEADER([a.c]) > + "COMMON_PATCH_HEADER([a.c]) > + ovsrcu_barrier(); > " \ > "WARNING: Are you sure you need to use ovsrcu_barrier(), "\ > @@ -364,7 +360,7 @@ try_checkpatch \ > " > > try_checkpatch \ > - "_COMMON_PATCH_HEADER([lib/ovs-rcu.c]) > + "COMMON_PATCH_HEADER([lib/ovs-rcu.c]) > + ovsrcu_barrier(); > " > > I was trying string substitution but that did not work with the framework, > i.e. $(1:-A.c}. > Not sure if this $() is the best way, maybe there is a more elegant way. > > > > > AT_SETUP([checkpatch - parenthesized constructs]) > > for ctr in 'if' 'while' 'switch' 'HMAP_FOR_EACH' 'BITMAP_FOR_EACH_1'; do > > @@ -348,6 +352,24 @@ try_checkpatch \ > > > > AT_CLEANUP > > > > +AT_SETUP([checkpatch - check misuse APIs]) > > +try_checkpatch \ > > + "_COMMON_PATCH_HEADER([a.c]) > > See above patch, make this just COMMON_PATCH_HEADER, with not parameters. > > > + + ovsrcu_barrier(); > > + " \ > > + "WARNING: Are you sure you need to use ovsrcu_barrier(), "\ > > +"in most cases ovsrcu_synchronize() will be fine? > > + #8 FILE: a.c:1: > > See above, make it A.c > > > + ovsrcu_barrier(); > > +" > > + > > +try_checkpatch \ > > + "_COMMON_PATCH_HEADER([lib/ovs-rcu.c]) > > + + ovsrcu_barrier(); > > + " > > + > > > +AT_CLEANUP > > + > > AT_SETUP([checkpatch - whitespace around cast]) > > try_checkpatch \ > > "COMMON_PATCH_HEADER > > diff --git a/utilities/checkpatch.py b/utilities/checkpatch.py > > index 8c7faa419..8c02ac3ce 100755 > > --- a/utilities/checkpatch.py > > +++ b/utilities/checkpatch.py > > @@ -620,6 +620,10 @@ def regex_error_factory(description): > > return lambda: print_error(description) > > > > > > +def regex_warn_factory(description): > > + return lambda: print_warning(description) > > + > > + > > std_functions = [ > > ('malloc', 'Use xmalloc() in place of malloc()'), > > ('calloc', 'Use xcalloc() in place of calloc()'), > > @@ -636,6 +640,7 @@ std_functions = [ > > ('assert', 'Use ovs_assert() in place of assert()'), > > ('error', 'Use ovs_error() in place of error()'), > > ] > > + > > checks += [ > > {'regex': r'(\.c|\.h)(\.in)?$', > > 'match_name': None, > > @@ -644,6 +649,21 @@ checks += [ > > 'print': regex_error_factory(description)} > > for (function_name, description) in std_functions] > > > > +easy_to_misuse_api = [ > > + ('ovsrcu_barrier', > > + 'lib/ovs-rcu.c', > > + 'Are you sure you need to use ovsrcu_barrier(), ' > > + 'in most cases ovsrcu_synchronize() will be fine?'), > > + ] > > + > > +checks += [ > > + {'regex': r'(\.c)(\.in)?$', > > + 'match_name': lambda x: x != location, > > + 'prereq': lambda x: not is_comment_line(x), > > + 'check': regex_function_factory(function_name), > > + 'print': regex_warn_factory(description)} > > + for (function_name, location, description) in easy_to_misuse_api] > > + > > > > def regex_operator_factory(operator): > > regex = re.compile(r'^[^#][^"\']*[^ "]%s[^ "\'][^"]*' % operator) > > @@ -676,12 +696,22 @@ def get_file_type_checks(filename): > > global checks > > checkList = [] > > for check in checks: > > + regex_check = True > > + match_check = True > > + > > if check['regex'] is None and check['match_name'] is None: > > checkList.append(check) > > + continue > > + > > if check['regex'] is not None and \ > > - re.compile(check['regex']).search(filename) is not None: > > - checkList.append(check) > > - elif check['match_name'] is not None and > check['match_name'](filename): > > + re.compile(check['regex']).search(filename) is None: > > + regex_check = False > > + > > + if check['match_name'] is not None and \ > > + not check['match_name'](filename): > > + match_check = False > > + > > + if regex_check and match_check: > > checkList.append(check) > > return checkList > > > > -- > > 2.25.1 > > -- hepeng _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
