diff options
author | Peng He <hepeng.0320@bytedance.com> | 2022-05-26 03:13:18 +0000 |
---|---|---|
committer | Ilya Maximets <i.maximets@ovn.org> | 2022-05-30 23:39:56 +0200 |
commit | 071b802c61a3bf0b9304764b4cbc10dfad972105 (patch) | |
tree | c4f8717244c43f7a6707b14e44d8d53bb8530f31 /utilities | |
parent | 805e9340d561e28838fa0dd35ad3babfe1d6db6f (diff) | |
download | openvswitch-071b802c61a3bf0b9304764b4cbc10dfad972105.tar.gz |
checkpatch.py: Add checks for easy-to-misuse APIs.
Signed-off-by: Peng He <hepeng.0320@bytedance.com>
Acked-by: Eelco Chaudron <echaudro@redhat.com>
Acked-by: Aaron Conole <aconole@redhat.com>
Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
Diffstat (limited to 'utilities')
-rwxr-xr-x | utilities/checkpatch.py | 36 |
1 files changed, 33 insertions, 3 deletions
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 |