55 lines
1.9 KiB
Plaintext
55 lines
1.9 KiB
Plaintext
From: Jeff Mahoney <jeffm@suse.com>
|
|
Subject: kmsg: Fix parameter limitations
|
|
Patch-mainline: Whenever kmsg is upstream
|
|
|
|
The kmsg infrastructure, currently only employed on s/390, has limitations
|
|
with the parameters it can handle due to the way it assembles the
|
|
magic string for parsing with scripts/kmsg-doc.
|
|
|
|
cpp expects the result to be a valid expression and exits with an error
|
|
if it is not.
|
|
|
|
The netfilter ipvs code causes this error, though there are more examples:
|
|
error: pasting "_ARGS_" and "&" does not give a valid preprocessing token
|
|
|
|
This stems from an otherwise valid expression:
|
|
pr_info("Registered protocols (%s)\n", &protocols[2]);
|
|
|
|
It tries to concatenate _ARGS_ and &protocols[2] and fails.
|
|
|
|
This patch fixes the issue by stringifying the entire parameter list
|
|
and allowing kmsg-doc to unquote the resultant expression.
|
|
|
|
The dev_* expressions that evaluate to __KMSG_DEV are unaffected because
|
|
the insertion of the "dev, " between _ARGS_ and the parameter list ends
|
|
up creating a valid expression.
|
|
|
|
Signed-off-by: Jeff Mahoney <jeffm@suse.com>
|
|
---
|
|
include/linux/printk.h | 2 +-
|
|
scripts/kmsg-doc | 2 +-
|
|
2 files changed, 2 insertions(+), 2 deletions(-)
|
|
|
|
--- a/include/linux/printk.h
|
|
+++ b/include/linux/printk.h
|
|
@@ -416,7 +416,7 @@ extern int hex_to_bin(char ch);
|
|
|
|
/* generate magic string for scripts/kmsg-doc to parse */
|
|
#define pr_printk_hash(level, format, ...) \
|
|
- __KMSG_PRINT(level _FMT_ format _ARGS_ ##__VA_ARGS__ _END_)
|
|
+ __KMSG_PRINT(level _FMT_ format _ARGS_ #__VA_ARGS__ _END_)
|
|
|
|
#elif defined(CONFIG_KMSG_IDS) && defined(KMSG_COMPONENT)
|
|
|
|
--- a/scripts/kmsg-doc
|
|
+++ b/scripts/kmsg-doc
|
|
@@ -307,7 +307,7 @@ sub process_cpp_file($$$$)
|
|
|
|
while (<FD>) {
|
|
chomp;
|
|
- if (/.*__KMSG_PRINT\(\s*(\S*)\s*_FMT_(.*)_ARGS_\s*(.*)?_END_\s*\)/o) {
|
|
+ if (/.*__KMSG_PRINT\(\s*(\S*)\s*_FMT_(.*)_ARGS_\s*"(.*)"\s*_END_\s*\)/o) {
|
|
if ($component ne "") {
|
|
add_kmsg_print($component, $1, $2, $3);
|
|
} else {
|