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/kernel.h | 2 +-
|
||
|
scripts/kmsg-doc | 2 +-
|
||
|
2 files changed, 2 insertions(+), 2 deletions(-)
|
||
|
|
||
|
--- a/include/linux/kernel.h
|
||
|
+++ b/include/linux/kernel.h
|
||
|
@@ -391,7 +391,7 @@ static inline char *pack_hex_byte(char *
|
||
|
|
||
|
/* 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 {
|