lkml.org 
[lkml]   [2009]   [Feb]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 03/47] kernel-doc: fix syscall wrapper processing
    2.6.27-stable review patch.  If anyone has any objections, please let us know.

    ------------------

    From: Randy Dunlap <randy.dunlap@oracle.com>

    commit b4870bc5ee8c7a37541a3eb1208b5c76c13a078a upstream.

    Fix kernel-doc processing of SYSCALL wrappers.

    The SYSCALL wrapper patches played havoc with kernel-doc for
    syscalls. Syscalls that were scanned for DocBook processing
    reported warnings like this one, for sys_tgkill:

    Warning(kernel/signal.c:2285): No description found for parameter 'tgkill'
    Warning(kernel/signal.c:2285): No description found for parameter 'pid_t'
    Warning(kernel/signal.c:2285): No description found for parameter 'int'

    because the macro parameters all "look like" function parameters,
    although they are not:

    /**
    * sys_tgkill - send signal to one specific thread
    * @tgid: the thread group ID of the thread
    * @pid: the PID of the thread
    * @sig: signal to be sent
    *
    * This syscall also checks the @tgid and returns -ESRCH even if the PID
    * exists but it's not belonging to the target process anymore. This
    * method solves the problem of threads exiting and PIDs getting reused.
    */
    SYSCALL_DEFINE3(tgkill, pid_t, tgid, pid_t, pid, int, sig)
    {
    ...

    This patch special-cases the handling SYSCALL_DEFINE* function
    prototypes by expanding them to
    long sys_foobar(type1 arg1, type1 arg2, ...)

    Signed-off-by: Randy Dunlap <randy.dunlap@oracle.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    scripts/kernel-doc | 39 ++++++++++++++++++++++++++++++++++++++-
    1 file changed, 38 insertions(+), 1 deletion(-)

    --- a/scripts/kernel-doc
    +++ b/scripts/kernel-doc
    @@ -1758,6 +1758,40 @@ sub reset_state {
    $state = 0;
    }

    +sub syscall_munge() {
    + my $void = 0;
    +
    + $prototype =~ s@[\r\n\t]+@ @gos; # strip newlines/CR's/tabs
    +## if ($prototype =~ m/SYSCALL_DEFINE0\s*\(\s*(a-zA-Z0-9_)*\s*\)/) {
    + if ($prototype =~ m/SYSCALL_DEFINE0/) {
    + $void = 1;
    +## $prototype = "long sys_$1(void)";
    + }
    +
    + $prototype =~ s/SYSCALL_DEFINE.*\(/long sys_/; # fix return type & func name
    + if ($prototype =~ m/long (sys_.*?),/) {
    + $prototype =~ s/,/\(/;
    + } elsif ($void) {
    + $prototype =~ s/\)/\(void\)/;
    + }
    +
    + # now delete all of the odd-number commas in $prototype
    + # so that arg types & arg names don't have a comma between them
    + my $count = 0;
    + my $len = length($prototype);
    + if ($void) {
    + $len = 0; # skip the for-loop
    + }
    + for (my $ix = 0; $ix < $len; $ix++) {
    + if (substr($prototype, $ix, 1) eq ',') {
    + $count++;
    + if ($count % 2 == 1) {
    + substr($prototype, $ix, 1) = ' ';
    + }
    + }
    + }
    +}
    +
    sub process_state3_function($$) {
    my $x = shift;
    my $file = shift;
    @@ -1774,7 +1808,10 @@ sub process_state3_function($$) {
    $prototype =~ s@/\*.*?\*/@@gos; # strip comments.
    $prototype =~ s@[\r\n]+@ @gos; # strip newlines/cr's.
    $prototype =~ s@^\s+@@gos; # strip leading spaces
    - dump_function($prototype,$file);
    + if ($prototype =~ /SYSCALL_DEFINE/) {
    + syscall_munge();
    + }
    + dump_function($prototype, $file);
    reset_state();
    }
    }


    \
     
     \ /
      Last update: 2009-02-14 02:05    [W:4.228 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site