From: Mahad Ibrahim <mahad.ibrahim.dev@gmail.com>
To: corbet@lwn.net
Cc: skhan@linuxfoundation.org, linux-doc@vger.kernel.org,
linux-kernel@vger.kernel.org, mahad.ibrahim.dev@gmail.com
Subject: [PATCH] docs: fix Sphinx C parser crash on __cond_acquires macro
Date: Tue, 17 Mar 2026 11:11:56 -0400 [thread overview]
Message-ID: <20260317151156.1106-1-mahad.ibrahim.dev@gmail.com> (raw)
When building the kernel-docs, the Sphinx C parser threw two errors:
1. /home/code/linux/Documentation/core-api/kref:328:
./include/linux/kref.h:72: WARNING: Invalid C declaration: Expected
end of definition. [error at 96]
int kref_put_mutex (
struct kref *kref,
void (*release) (struct kref *kref),
struct mutex *mutex)
__cond_acquires(true# mutex)
2. /home/code/linux/Documentation/core-api/kref:328:
./include/linux/kref.h:94: WARNING: Invalid C declaration: Expected
end of definition. [error at 92]
int kref_put_lock (
struct kref *kref,
void (*release)(struct kref *kref),
spinlock_t *lock)
__cond_acquires(true# lock)
The root cause of these errors is due to the parser's inability to
understand sparse __cond_acquires() parameterized macro attached to the
function. The parser expects a ';' or a '{' to verify a valid function
signature ending.
As of Sphinx 3.0, the parser is equipped to handle such cases via the
c_paren_attributes list however that functionality was not adopted.
Out of all sparse/compiler-based context analysis parameterized macros
inside the kernel, only __cond_acquires appears in the context of a
kernel-docs comment and function, which is why it is the only macro that
threw an error.
This bug may be attributed to the kernel's recent shift from sparse to
compiler-based context analysis, increased strictness of Sphinx C
parser, or some other change which transcended domains.
Add c_paren_attributes to enable Sphinx parser to handle parameterized
function macros like __cond_acquires.
Signed-off-by: Mahad Ibrahim <mahad.ibrahim.dev@gmail.com>
---
Documentation/conf.py | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/Documentation/conf.py b/Documentation/conf.py
index 679861503a25..f2efe7fd107e 100644
--- a/Documentation/conf.py
+++ b/Documentation/conf.py
@@ -227,6 +227,13 @@ c_id_attributes = [
"__bpf_kfunc",
]
+# Since Sphinx 3.0, parameterized macros must be escaped using
+# c_paren_attributes to prevent C domain parser crashes.
+c_paren_attributes = [
+ #include/linux/compiler-context-analysis.h
+ "__cond_acquires",
+]
+
# Ensure that autosectionlabel will produce unique names
autosectionlabel_prefix_document = True
autosectionlabel_maxdepth = 2
--
2.39.5
next reply other threads:[~2026-03-17 15:12 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-17 15:11 Mahad Ibrahim [this message]
2026-03-17 15:43 ` [PATCH] docs: fix Sphinx C parser crash on __cond_acquires macro Mauro Carvalho Chehab
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260317151156.1106-1-mahad.ibrahim.dev@gmail.com \
--to=mahad.ibrahim.dev@gmail.com \
--cc=corbet@lwn.net \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=skhan@linuxfoundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.