kernel-doc: fix syscall wrapper processing
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>
This commit is contained in:
parent
f40b45a2e4
commit
b4870bc5ee
1 changed files with 39 additions and 1 deletions
|
@ -1827,6 +1827,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;
|
||||
|
@ -1839,11 +1873,15 @@ sub process_state3_function($$) {
|
|||
elsif ($x =~ /([^\{]*)/) {
|
||||
$prototype .= $1;
|
||||
}
|
||||
|
||||
if (($x =~ /\{/) || ($x =~ /\#\s*define/) || ($x =~ /;/)) {
|
||||
$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();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue