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:
Родитель
f40b45a2e4
Коммит
b4870bc5ee
|
@ -1827,6 +1827,40 @@ sub reset_state {
|
||||||
$state = 0;
|
$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($$) {
|
sub process_state3_function($$) {
|
||||||
my $x = shift;
|
my $x = shift;
|
||||||
my $file = shift;
|
my $file = shift;
|
||||||
|
@ -1839,11 +1873,15 @@ sub process_state3_function($$) {
|
||||||
elsif ($x =~ /([^\{]*)/) {
|
elsif ($x =~ /([^\{]*)/) {
|
||||||
$prototype .= $1;
|
$prototype .= $1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (($x =~ /\{/) || ($x =~ /\#\s*define/) || ($x =~ /;/)) {
|
if (($x =~ /\{/) || ($x =~ /\#\s*define/) || ($x =~ /;/)) {
|
||||||
$prototype =~ s@/\*.*?\*/@@gos; # strip comments.
|
$prototype =~ s@/\*.*?\*/@@gos; # strip comments.
|
||||||
$prototype =~ s@[\r\n]+@ @gos; # strip newlines/cr's.
|
$prototype =~ s@[\r\n]+@ @gos; # strip newlines/cr's.
|
||||||
$prototype =~ s@^\s+@@gos; # strip leading spaces
|
$prototype =~ s@^\s+@@gos; # strip leading spaces
|
||||||
dump_function($prototype,$file);
|
if ($prototype =~ /SYSCALL_DEFINE/) {
|
||||||
|
syscall_munge();
|
||||||
|
}
|
||||||
|
dump_function($prototype, $file);
|
||||||
reset_state();
|
reset_state();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче