lkml.org 
[lkml]   [2020]   [Jun]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2] checkpatch: fix CONST_STRUCT when const_structs.checkpatch is missing
    Date
    Checkpatch reports warnings when some specific structs are not declared
    as const in the code. The list of structs to consider was initially
    defined in the checkpatch.pl script itself, but it was later moved to an
    external file (scripts/const_structs.checkpatch), in commit bf1fa1dae68e
    ("checkpatch: externalize the structs that should be const"). This
    introduced two minor issues:

    - When file scripts/const_structs.checkpatch is not present (for
    example, if checkpatch is run outside of the kernel directory with the
    "--no-tree" option), a warning is printed to stderr to tell the user
    that "No structs that should be const will be found". This is fair,
    but the warning is printed unconditionally, even if the option
    "--ignore CONST_STRUCT" is passed. In the latter case, we explicitly
    ask checkpatch to skip this check, so no warning should be printed.

    - When scripts/const_structs.checkpatch is missing, or even when trying
    to silence the warning by adding an empty file, $const_structs is set
    to "", and the regex used for finding structs that should be const,
    "$line =~ /\bstruct\s+($const_structs)\b(?!\s*\{)/)", matches all
    structs found in the code, thus reporting a number of false positives.

    Let's fix the first item by skipping scripts/const_structs.checkpatch
    processing if "CONST_STRUCT" checks are ignored, and the second one by
    skipping the test if $const_structs is not defined.

    Signed-off-by: Quentin Monnet <quentin@isovalent.com>
    ---
    v2:
    - Check if $const_structs is defined instead of non-empty.
    - Remove "Fixes" tag.
    ---
    scripts/checkpatch.pl | 13 ++++++++-----
    1 file changed, 8 insertions(+), 5 deletions(-)

    diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
    index db9d94f90431..3b14bf3e4d4e 100755
    --- a/scripts/checkpatch.pl
    +++ b/scripts/checkpatch.pl
    @@ -770,7 +770,7 @@ sub read_words {
    next;
    }

    - $$wordsRef .= '|' if ($$wordsRef ne "");
    + $$wordsRef .= '|' if (defined($$wordsRef) && $$wordsRef ne "");
    $$wordsRef .= $line;
    }
    close($file);
    @@ -780,9 +780,11 @@ sub read_words {
    return 0;
    }

    -my $const_structs = "";
    -read_words(\$const_structs, $conststructsfile)
    - or warn "No structs that should be const will be found - file '$conststructsfile': $!\n";
    +my $const_structs;
    +if (show_type("CONST_STRUCT")) {
    + read_words(\$const_structs, $conststructsfile)
    + or warn "No structs that should be const will be found - file '$conststructsfile': $!\n";
    +}

    my $typeOtherTypedefs = "";
    if (length($typedefsfile)) {
    @@ -6656,7 +6658,8 @@ sub process {

    # check for various structs that are normally const (ops, kgdb, device_tree)
    # and avoid what seem like struct definitions 'struct foo {'
    - if ($line !~ /\bconst\b/ &&
    + if (defined($const_structs) &&
    + $line !~ /\bconst\b/ &&
    $line =~ /\bstruct\s+($const_structs)\b(?!\s*\{)/) {
    WARN("CONST_STRUCT",
    "struct $1 should normally be const\n" . $herecurr);
    --
    2.20.1
    \
     
     \ /
      Last update: 2020-06-23 12:38    [W:3.603 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site