07 Aug, 2018

1 commit

  • Commit 701b3a3c0ac4 ("PATCH scripts/kernel-doc") fixed the two
    instances of literal braces that Perl 5.28 warns about, but there are
    still more than it doesn't warn about.

    Escape all left braces that are treated as literal characters. Also
    escape literal right braces, for consistency and to avoid confusing
    bracket-matching in text editors.

    Signed-off-by: Ben Hutchings
    Signed-off-by: Jonathan Corbet

    Ben Hutchings
     

23 Jul, 2018

1 commit

  • Fix a warning whinge from Perl introduced by "scripts: kernel-doc: parse next structs/unions"

    Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.32), passed through in regex; marked by
    Reviewed-by: Mauro Carvalho Chehab
    Signed-off-by: Jonathan Corbet

    valdis.kletnieks@vt.edu
     

30 Mar, 2018

1 commit


21 Mar, 2018

1 commit


21 Feb, 2018

2 commits

  • So once upon a time I set out to fix the problem reported by Tobin wherein
    a literal block within a kerneldoc comment would be corrupted in
    processing. On the way, though, I got annoyed at the way I have to learn
    how kernel-doc works from the beginning every time I tear into it.

    As a result, seven of the following eight patches just get rid of some dead
    code and reorganize the rest - mostly turning the 500-line process_file()
    function into something a bit more rational. Sphinx output is unchanged
    after these are applied. Then, at the end, there's a tweak to stop messing
    with literal blocks.

    If anybody was unaware that I've not done any serious Perl since the
    1990's, they will certainly understand that fact now.

    Jonathan Corbet
     
  • Add the SPDX header while I'm in the neighborhood. The source itself just
    says "GNU General Public License", but it also refers people to the COPYING
    file for further information. Since COPYING says 2.0-only, that is what I
    have put into the header.

    Signed-off-by: Jonathan Corbet

    Jonathan Corbet
     

19 Feb, 2018

2 commits


16 Feb, 2018

8 commits


02 Jan, 2018

1 commit

  • The logic with inhibits warnings for definitions that is not
    output is incomplete: it doesn't cover the cases where
    OUTPUT_INTERNAL and OUTPUT_EXPORTED are used.

    As the most common case is OUTPUT_ALL, place it first,
    in order to optimize a litte bit the check logic.

    Fixes: 2defb2729217 ("scripts: kernel-doc: apply filtering rules to warnings")
    Reported-by: Randy Dunlap
    Acked-and-Tested-by: Randy Dunlap
    Signed-off-by: Mauro Carvalho Chehab
    Signed-off-by: Jonathan Corbet

    Mauro Carvalho Chehab
     

22 Dec, 2017

11 commits

  • When kernel-doc is called with output selection filters,
    it will be called lots of time for a single file. If
    there is a warning present there, it means that it may
    print hundreds of identical warnings.

    Worse than that, the -function NAME actually filters only
    functions. So, it makes no sense at all to print warnings
    for structs or enums.

    Signed-off-by: Mauro Carvalho Chehab
    Signed-off-by: Jonathan Corbet

    Mauro Carvalho Chehab
     
  • It is possible to use nested structs like:

    struct {
    struct {
    void *arg1;
    } st1, st2, *st3, st4;
    };

    Handling it requires to split each parameter. Change the logic
    to allow such definitions.

    In order to test the new nested logic, the following file
    was used to test


    struct foo { int a; }; /* Just to avoid errors if compiled */

    /**
    * struct my_struct - a struct with nested unions and structs
    * @arg1: first argument of anonymous union/anonymous struct
    * @arg2: second argument of anonymous union/anonymous struct
    * @arg1b: first argument of anonymous union/anonymous struct
    * @arg2b: second argument of anonymous union/anonymous struct
    * @arg3: third argument of anonymous union/anonymous struct
    * @arg4: fourth argument of anonymous union/anonymous struct
    * @bar.st1.arg1: first argument of struct st1 on union bar
    * @bar.st1.arg2: second argument of struct st1 on union bar
    * @bar.st1.bar1: bar1 at st1
    * @bar.st1.bar2: bar2 at st1
    * @bar.st2.arg1: first argument of struct st2 on union bar
    * @bar.st2.arg2: second argument of struct st2 on union bar
    * @bar.st3.arg2: second argument of struct st3 on union bar
    * @f1: nested function on anonimous union/struct
    * @bar.st2.f2: nested function on named union/struct
    */
    struct my_struct {
    /* Anonymous union/struct*/
    union {
    struct {
    char arg1 : 1;
    char arg2 : 3;
    };
    struct {
    int arg1b;
    int arg2b;
    };
    struct {
    void *arg3;
    int arg4;
    int (*f1)(char foo, int bar);
    };
    };
    union {
    struct {
    int arg1;
    int arg2;
    struct foo bar1, *bar2;
    } st1; /* bar.st1 is undocumented, cause a warning */
    struct {
    void *arg1; /* bar.st3.arg1 is undocumented, cause a warning */
    int arg2;
    int (*f2)(char foo, int bar); /* bar.st3.fn2 is undocumented, cause a warning */
    } st2, st3, *st4;
    int (*f3)(char foo, int bar); /* f3 is undocumented, cause a warning */
    } bar; /* bar is undocumented, cause a warning */

    /* private: */
    int undoc_privat; /* is undocumented but private, no warning */

    /* public: */
    int undoc_public; /* is undocumented, cause a warning */
    };

    It produces the following warnings, as expected:

    test2.h:57: warning: Function parameter or member 'bar' not described in 'my_struct'
    test2.h:57: warning: Function parameter or member 'bar.st1' not described in 'my_struct'
    test2.h:57: warning: Function parameter or member 'bar.st2' not described in 'my_struct'
    test2.h:57: warning: Function parameter or member 'bar.st3' not described in 'my_struct'
    test2.h:57: warning: Function parameter or member 'bar.st3.arg1' not described in 'my_struct'
    test2.h:57: warning: Function parameter or member 'bar.st3.f2' not described in 'my_struct'
    test2.h:57: warning: Function parameter or member 'bar.st4' not described in 'my_struct'
    test2.h:57: warning: Function parameter or member 'bar.st4.arg1' not described in 'my_struct'
    test2.h:57: warning: Function parameter or member 'bar.st4.arg2' not described in 'my_struct'
    test2.h:57: warning: Function parameter or member 'bar.st4.f2' not described in 'my_struct'
    test2.h:57: warning: Function parameter or member 'bar.f3' not described in 'my_struct'
    test2.h:57: warning: Function parameter or member 'undoc_public' not described in 'my_struct'

    Suggested-by: Markus Heiser
    Signed-off-by: Mauro Carvalho Chehab
    Signed-off-by: Jonathan Corbet

    Mauro Carvalho Chehab
     
  • Function arguments are different than usual ones. So, an
    special logic is needed in order to handle such arguments
    on nested structs.

    Signed-off-by: Mauro Carvalho Chehab
    Signed-off-by: Jonathan Corbet

    Mauro Carvalho Chehab
     
  • The logic at create_parameterlist()'s ancillary push_parameter()
    function has already a way to output the declaration name, with
    would help to discover what declaration is missing.

    However, currently, the logic is utterly broken, as it uses
    the var $type with a wrong meaning. With the current code,
    it will never print anything. I suspect that originally
    it was using the second argument of output_declaration().

    I opted to not rely on a globally defined $declaration_name,
    but, instead, to pass it explicitly as a parameter.

    While here, I removed a unaligned check for !$anon_struct_union.
    This is not needed, as, if $anon_struct_union is not zero,
    $parameterdescs{$param} will be defined.

    Signed-off-by: Mauro Carvalho Chehab
    Signed-off-by: Jonathan Corbet

    Mauro Carvalho Chehab
     
  • The check_sections() function has a $nested parameter, meant
    to identify when a nested struct is present. As we now have
    a logic that handles it, get rid of such parameter.

    Suggested-by: Markus Heiser
    Signed-off-by: Mauro Carvalho Chehab
    Signed-off-by: Jonathan Corbet

    Mauro Carvalho Chehab
     
  • There are several places within the Kernel tree with nested
    structs/unions, like this one:

    struct ingenic_cgu_clk_info {
    const char *name;
    enum {
    CGU_CLK_NONE = 0,
    CGU_CLK_EXT = BIT(0),
    CGU_CLK_PLL = BIT(1),
    CGU_CLK_GATE = BIT(2),
    CGU_CLK_MUX = BIT(3),
    CGU_CLK_MUX_GLITCHFREE = BIT(4),
    CGU_CLK_DIV = BIT(5),
    CGU_CLK_FIXDIV = BIT(6),
    CGU_CLK_CUSTOM = BIT(7),
    } type;
    int parents[4];
    union {
    struct ingenic_cgu_pll_info pll;
    struct {
    struct ingenic_cgu_gate_info gate;
    struct ingenic_cgu_mux_info mux;
    struct ingenic_cgu_div_info div;
    struct ingenic_cgu_fixdiv_info fixdiv;
    };
    struct ingenic_cgu_custom_info custom;
    };
    };

    Currently, such struct is documented as:

    **Definition**

    ::
    struct ingenic_cgu_clk_info {
    const char * name;
    };

    **Members**

    ``name``
    name of the clock

    With is obvioulsy wrong. It also generates an error:
    drivers/clk/ingenic/cgu.h:169: warning: No description found for parameter 'enum'

    However, there's nothing wrong with this kernel-doc markup: everything
    is documented there.

    It makes sense to document all fields there. So, add a
    way for the core to parse those structs.

    With this patch, all documented fields will properly generate
    documentation.

    Signed-off-by: Mauro Carvalho Chehab
    Signed-off-by: Jonathan Corbet

    Mauro Carvalho Chehab
     
  • Sphinx has a hard time dealing with tabs, causing it to
    misinterpret paragraph continuation.

    As we're now mainly focused on supporting ReST output,
    replace tabs by spaces, in order to avoid troubles when
    the output is parsed by Sphinx.

    Signed-off-by: Mauro Carvalho Chehab
    Signed-off-by: Jonathan Corbet

    Mauro Carvalho Chehab
     
  • Right now, if kernel-doc is called without arguments, it
    defaults to man pages. IMO, it makes more sense to
    default to ReST, as this is the output that it is most
    used nowadays, and it easier to check if everything got
    parsed fine on an enriched text mode format.

    Signed-off-by: Mauro Carvalho Chehab
    Signed-off-by: Jonathan Corbet

    Mauro Carvalho Chehab
     
  • Right now, if one uses "--rst" instead of "-rst", it just
    ignore the argument and produces a man page. Change the
    logic to accept both "-cmd" and "--cmd". Also, if
    "cmd" doesn't exist, print the usage information and exit.

    Signed-off-by: Mauro Carvalho Chehab
    Signed-off-by: Jonathan Corbet

    Mauro Carvalho Chehab
     
  • Since there isn't any docbook code anymore upstream,
    we can get rid of several output formats:

    - docbook/xml, html, html5 and list formats were used by
    the old build system;
    - As ReST is text, there's not much sense on outputting
    on a different text format.

    After this patch, only man and rst output formats are
    supported.

    Signed-off-by: Mauro Carvalho Chehab
    Acked-by: Jani Nikula
    Signed-off-by: Jonathan Corbet

    Mauro Carvalho Chehab
     
  • Everything there is already described at
    Documentation/doc-guide/kernel-doc.rst. So, there's no reason why
    to keep it anymore.

    Signed-off-by: Mauro Carvalho Chehab
    Signed-off-by: Jonathan Corbet

    Mauro Carvalho Chehab
     

12 Dec, 2017

1 commit

  • On media, we now have an struct declared with:

    struct lirc_fh {
    struct list_head list;
    struct rc_dev *rc;
    int carrier_low;
    bool send_timeout_reports;
    DECLARE_KFIFO_PTR(rawir, unsigned int);
    DECLARE_KFIFO_PTR(scancodes, struct lirc_scancode);
    wait_queue_head_t wait_poll;
    u8 send_mode;
    u8 rec_mode;
    };

    gpiolib.c has a similar declaration with DECLARE_KFIFO().

    Currently, those produce the following error:

    ./include/media/rc-core.h:96: warning: No description found for parameter 'int'
    ./include/media/rc-core.h:96: warning: No description found for parameter 'lirc_scancode'
    ./include/media/rc-core.h:96: warning: Excess struct member 'rawir' description in 'lirc_fh'
    ./include/media/rc-core.h:96: warning: Excess struct member 'scancodes' description in 'lirc_fh'
    ../drivers/gpio/gpiolib.c:601: warning: No description found for parameter '16'
    ../drivers/gpio/gpiolib.c:601: warning: Excess struct member 'events' description in 'lineevent_state'

    So, teach kernel-doc how to parse DECLARE_KFIFO() and DECLARE_KFIFO_PTR().

    While here, relax at the past DECLARE_foo() macros, accepting a random
    number of spaces after comma.

    The addition of DECLARE_KFIFO() was
    Suggested-by: Randy Dunlap

    Signed-off-by: Mauro Carvalho Chehab
    Tested-by: Randy Dunlap
    Signed-off-by: Jonathan Corbet

    Mauro Carvalho Chehab
     

02 Dec, 2017

1 commit

  • My bisect scripts starting running into build failures when trying to
    compile 4.15-rc1 with the builds failing with things like:

    drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c:2078: error: Cannot parse struct or union!

    The line in question is actually just a #define, but after some digging
    it turns out that my scripts pass W=1 and since commit 3a025e1d1c2ea
    ("Add optional check for bad kernel-doc comments") that results in
    kernel-doc running on each source file. The file in question has a
    badly formatted comment immediately before the #define:

    /**
    * struct brcmf_skbuff_cb reserves first two bytes in sk_buff::cb for
    * bus layer usage.
    */

    which causes the regex in dump_struct to fail (lack of braces following
    struct declaration) and kernel-doc returns 1, which causes the build
    to fail.

    Fix the issue by always returning 0 from kernel-doc when invoked with
    -none. It successfully generates no documentation, and prints out any
    issues.

    Cc: Matthew Wilcox
    Cc: Jonathan Corbet
    Signed-off-by: Will Deacon
    Signed-off-by: Jonathan Corbet

    Will Deacon
     

24 Nov, 2017

1 commit

  • Pull documentation updates from Jonathan Corbet:
    "A few late-arriving docs updates that have no real reason to wait.

    There's a new "Co-Developed-by" tag described by Greg, and a build
    enhancement from Willy to generate docs warnings during a kernel build
    (but only when additional warnings have been requested in general)"

    * tag 'docs-4.15-2' of git://git.lwn.net/linux:
    Add optional check for bad kernel-doc comments
    Documentation: fix profile= options in kernel-parameters.txt
    documentation/svga.txt: update outdated file
    kokr/memory-barriers.txt: Fix typo in paring example
    kokr/memory-barriers/txt: Replace uses of "transitive"
    Documentation/process: add Co-Developed-by: tag for patches with multiple authors

    Linus Torvalds
     

21 Nov, 2017

1 commit

  • Implement a '-none' output mode for kernel-doc which will only output
    warning messages, and suppresses the warning message about there being
    no kernel-doc in the file.

    If the build has requested additional warnings, automatically check all
    .c files. This patch does not check .h files. Enabling the warning
    by default would add about 1300 warnings, so it's default off for now.
    People who care can use this to check they didn't break the docs and
    maybe we'll get all the warnings fixed and be able to enable this check
    by default in the future.

    Signed-off-by: Matthew Wilcox
    Signed-off-by: Jonathan Corbet

    Matthew Wilcox
     

16 Nov, 2017

1 commit

  • Fix up makefiles, remove references, and git rm kmemcheck.

    Link: http://lkml.kernel.org/r/20171007030159.22241-4-alexander.levin@verizon.com
    Signed-off-by: Sasha Levin
    Cc: Steven Rostedt
    Cc: Vegard Nossum
    Cc: Pekka Enberg
    Cc: Michal Hocko
    Cc: Eric W. Biederman
    Cc: Alexander Potapenko
    Cc: Tim Hansen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Levin, Alexander (Sasha Levin)
     

27 Sep, 2017

1 commit

  • The existing message
    "Excess struct/union/enum/typedef member [...]"
    made it sound like this would already be done, but the
    code is never invoked for enums or typedefs (and really
    can't be).

    Add some code to the enum dumper to handle this there
    instead.

    While at it, also make the above message more accurate
    by simply dumping the type that was passed in, and pass
    the struct/union differentiation in.

    Signed-off-by: Johannes Berg
    Signed-off-by: Jonathan Corbet

    Johannes Berg
     

31 Aug, 2017

1 commit

  • Reported by Johannes Berg [1]. Problem here: function
    process_proto_type() concatenates the striped lines of declaration
    without any whitespace. A one-liner of::

    struct something {
    struct foo
    bar;
    };

    has to be::

    struct something {struct foo bar;};

    Without the patching process_proto_type(), the result missed the space
    between 'foo' and 'bar'::

    struct something {struct foobar;};

    Bugfix of process_proto_type() brings next error when blank lines
    between enum declaration::

    warning: Enum value ' ' not described in enum 'foo'

    Problem here: dump_enum() does not strip leading whitespaces from
    the concatenated string (with the new additional space from
    process_proto_type).

    [1] https://www.mail-archive.com/linux-doc@vger.kernel.org/msg12410.html

    Signed-off-by: Markus Heiser
    Signed-off-by: Jonathan Corbet

    Markus Heiser
     

08 Jul, 2017

1 commit

  • …asahiroy/linux-kbuild

    Pull misc Kbuild updates from Masahiro Yamada:

    - Use more portable shebang for Perl scripts

    - Remove trailing spaces from GCC version in kernel log

    - Make initramfs generation deterministic

    * tag 'kbuild-misc-v4.13' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild:
    kbuild: create deterministic initramfs directory listings
    scripts/mkcompile_h: Remove trailing spaces from compiler version
    scripts: Switch to more portable Perl shebang

    Linus Torvalds
     

03 Jul, 2017

1 commit


14 May, 2017

1 commit

  • The default NetBSD package manager is pkgsrc and it installs Perl
    along other third party programs under custom and configurable prefix.
    The default prefix for binary prebuilt packages is /usr/pkg, and the
    Perl executable lands in /usr/pkg/bin/perl.

    This change switches "/usr/bin/perl" to "/usr/bin/env perl" as it's
    the most portable solution that should work for almost everybody.
    Perl's executable is detected automatically.

    This change switches -w option passed to the executable with more
    modern "use warnings;" approach. There is no functional change to the
    default behavior.

    While there, drop "require 5" from scripts/namespace.pl (Perl from 1994?).

    Signed-off-by: Kamil Rytarowski
    Signed-off-by: Masahiro Yamada

    Kamil Rytarowski
     

03 Apr, 2017

2 commits

  • lib/crc32c defines one parameter as:
    const u32 (*tab)[256]

    Better handle parenthesis, to avoid those warnings:

    ./lib/crc32.c:149: warning: No description found for parameter 'tab)[256]'
    ./lib/crc32.c:149: warning: Excess function parameter 'tab' description in 'crc32_le_generic'
    ./lib/crc32.c:294: warning: No description found for parameter 'tab)[256]'
    ./lib/crc32.c:294: warning: Excess function parameter 'tab' description in 'crc32_be_generic'

    Signed-off-by: Mauro Carvalho Chehab
    Signed-off-by: Jonathan Corbet

    Mauro Carvalho Chehab
     
  • On ReST, adding a text like ``literal`` is valid. However,
    the kernel-doc script won't handle it fine.

    We really need this feature, in order to escape things like
    %ph, with is found on some C files.

    Signed-off-by: Mauro Carvalho Chehab
    Signed-off-by: Jonathan Corbet

    Mauro Carvalho Chehab