Eelco Chaudron <[email protected]> 于2022年5月23日周一 17:25写道:

>
>
> On 23 May 2022, at 11:13, Peng He wrote:
>
> > there are two tests:
> >
> > 1) check the usage of this api in a normal file
> > 2) if the api is defined in its own file, which is specified in the
> > 'location' field in checkpatch.py, the warning should be skipped.
> >
> > So, either use a new macro, either make COMMON_PATCH_HEADER a macro with
> a
> > specified filename.
> >
> > Eelco Chaudron <[email protected]> 于2022年5月23日周一 17:07写道:
> >
> >>
> >>
> >> On 23 May 2022, at 10:56, Peng He wrote:
> >>
> >>> Eelco Chaudron <[email protected]> 于2022年5月23日周一 16:04写道:
> >>>
> >>>>
> >>>>
> >>>> On 20 May 2022, at 12:24, Peng He wrote:
> >>>>
> >>>>> Signed-off-by: Peng He <[email protected]>
> >>>>> Signed-off-by: Peng He <[email protected]>
> >>>>> Acked-by: Eelco Chaudron <[email protected]>
> >>>>> Acked-by: Aaron Conole <[email protected]>
> >>>>
> >>>> You should remove any ACKs if you re-send the patch with changes. In
> >>>> addition only sending this patch out of the series is confusing, so
> you
> >>>> need to re-send the entire series.
> >>>>
> >>>
> >>> OK.
> >>>
> >>>>
> >>>>> ---
> >>>>>  tests/checkpatch.at     | 29 +++++++++++++++++++++++++++++
> >>>>>  utilities/checkpatch.py | 36 +++++++++++++++++++++++++++++++++---
> >>>>>  2 files changed, 62 insertions(+), 3 deletions(-)
> >>>>>
> >>>>> diff --git a/tests/checkpatch.at b/tests/checkpatch.at
> >>>>> index fadb625e9..f77a55d76 100755
> >>>>> --- a/tests/checkpatch.at
> >>>>> +++ b/tests/checkpatch.at
> >>>>> @@ -170,6 +170,17 @@ m4_define([COMMON_PATCH_HEADER], [dnl
> >>>>>      +++ b/A.c
> >>>>>      @@ -1,1 +1,1 @@])
> >>>>>
> >>>>> +m4_define([PATCH_HEADER], [dnl
> >>>>> +    Author: A
> >>>>> +
> >>>>> +    Signed-off-by: A
> >>>>> +    ---
> >>>>> +    diff --git a/$1 b/$1
> >>>>> +    index 0000000..1111111 100644
> >>>>> +    --- a/$1
> >>>>> +    +++ b/$1
> >>>>> +    @@ -1,1 +1,1 @@])
> >>>>> +
> >>>>>
> >>>>>  AT_SETUP([checkpatch - parenthesized constructs])
> >>>>>  for ctr in 'if' 'while' 'switch' 'HMAP_FOR_EACH'
> 'BITMAP_FOR_EACH_1';
> >> do
> >>>>> @@ -348,6 +359,24 @@ try_checkpatch \
> >>>>>
> >>>>>  AT_CLEANUP
> >>>>>
> >>>>> +AT_SETUP([checkpatch - check misuse APIs])
> >>>>> +try_checkpatch \
> >>>>> +   "PATCH_HEADER([a.c])
> >>>>
> >>>> There is already the COMMON_PATCH_HEADER, this should work here as
> well.
> >>>>
> >>>
> >>> you mean by expending COMMON_PATCH_HEADER, like use
> _COMMON_PATCH_HEADER
> >>> with a
> >>> parameter, the PATCH_HEADER has a file parameter.
> >>
> >> You could just use COMMON_PATCH_HEADER with a fixed file name? Do you
> >> really need the file parameter, you can’t use the A.c below?
>
>
> Missed the second part :( Maybe you can change COMMON_PATCH_HEADER in such
> a way that if no arguments are present it uses A.c and if there is an
> argument substitute that.
>


OK.
will change it and resend a new version.

>
> >>
> >>>>> +    +     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:
> >>>>> +         ovsrcu_barrier();
> >>>>> +"
> >>>>> +
> >>>>> +try_checkpatch \
> >>>>> +   "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
> >>
> >>
> >
> > --
> > hepeng
>
>

-- 
hepeng
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to