doc-rst: kernel-doc: fix handling of address_space tags
authorMauro Carvalho Chehab <mchehab@s-opensource.com>
Fri, 22 Jul 2016 14:46:36 +0000 (11:46 -0300)
committerJonathan Corbet <corbet@lwn.net>
Fri, 22 Jul 2016 21:34:24 +0000 (15:34 -0600)
The RST cpp:function handler is very pedantic: it doesn't allow any
macros like __user on it:

Documentation/media/kapi/dtv-core.rst:28: WARNING: Error when parsing function declaration.
If the function has no return type:
  Error in declarator or parameters and qualifiers
  Invalid definition: Expecting "(" in parameters_and_qualifiers. [error at 8]
    ssize_t dvb_ringbuffer_pkt_read_user (struct dvb_ringbuffer * rbuf, size_t idx, int offset, u8 __user * buf, size_t len)
    --------^
If the function has a return type:
  Error in declarator or parameters and qualifiers
  If pointer to member declarator:
    Invalid definition: Expected '::' in pointer to member (function). [error at 37]
      ssize_t dvb_ringbuffer_pkt_read_user (struct dvb_ringbuffer * rbuf, size_t idx, int offset, u8 __user * buf, size_t len)
      -------------------------------------^
  If declarator-id:
    Invalid definition: Expecting "," or ")" in parameters_and_qualifiers, got "*". [error at 102]
      ssize_t dvb_ringbuffer_pkt_read_user (struct dvb_ringbuffer * rbuf, size_t idx, int offset, u8 __user * buf, size_t len)
      ------------------------------------------------------------------------------------------------------^

So, we have to remove it from the function prototype.

Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Jonathan Corbet <corbet@lwn.net>
scripts/kernel-doc

index 7388e88a1f5093eeadf6629e28e02b7cab69d1ac..4f2e9049e8fa4219218b9ccc7ffd50d9558f1016 100755 (executable)
@@ -1848,6 +1848,10 @@ sub output_function_rst(%) {
        }
        $count++;
        $type = $args{'parametertypes'}{$parameter};
+
+       # RST doesn't like address_space tags at function prototypes
+       $type =~ s/__(user|kernel|iomem|percpu|pmem|rcu)\s*//;
+
        if ($type =~ m/([^\(]*\(\*)\s*\)\s*\(([^\)]*)\)/) {
            # pointer-to-function
            print $1 . $parameter . ") (" . $2;