summaryrefslogtreecommitdiffstats
path: root/kernel/printk/printk_ringbuffer.h
diff options
context:
space:
mode:
authorJohn Ogness <john.ogness@linutronix.de>2020-07-21 15:31:28 +0206
committerPetr Mladek <pmladek@suse.com>2020-09-08 09:32:59 +0200
commitd397820f36ffe4701343b6ee12687d60db0ed8db (patch)
tree1e0e4cf837e026131eaaa7ede9753cf11ed8959f /kernel/printk/printk_ringbuffer.h
parent3270ecb5214ad11a4a94af92c4bf47740c90d294 (diff)
downloadlinux-d397820f36ffe4701343b6ee12687d60db0ed8db.tar.gz
linux-d397820f36ffe4701343b6ee12687d60db0ed8db.tar.bz2
linux-d397820f36ffe4701343b6ee12687d60db0ed8db.zip
printk: ringbuffer: support dataless records
With commit 896fbe20b4e2333fb55 ("printk: use the lockless ringbuffer"), printk() started silently dropping messages without text because such records are not supported by the new printk ringbuffer. Add support for such records. Currently dataless records are denoted by INVALID_LPOS in order to recognize failed prb_reserve() calls. Change the ringbuffer to instead use two different identifiers (FAILED_LPOS and NO_LPOS) to distinguish between failed prb_reserve() records and successful dataless records, respectively. Fixes: 896fbe20b4e2333fb55 ("printk: use the lockless ringbuffer") Fixes: https://lkml.kernel.org/r/20200718121053.GA691245@elver.google.com Reported-by: Marco Elver <elver@google.com> Signed-off-by: John Ogness <john.ogness@linutronix.de> Cc: Petr Mladek <pmladek@suse.com> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Marco Elver <elver@google.com> Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com> Signed-off-by: Petr Mladek <pmladek@suse.com> Link: https://lore.kernel.org/r/20200721132528.9661-1-john.ogness@linutronix.de
Diffstat (limited to 'kernel/printk/printk_ringbuffer.h')
-rw-r--r--kernel/printk/printk_ringbuffer.h15
1 files changed, 8 insertions, 7 deletions
diff --git a/kernel/printk/printk_ringbuffer.h b/kernel/printk/printk_ringbuffer.h
index 3e46a7423c13..e6302da041f9 100644
--- a/kernel/printk/printk_ringbuffer.h
+++ b/kernel/printk/printk_ringbuffer.h
@@ -120,12 +120,13 @@ struct prb_reserved_entry {
#define DESC_FLAGS_MASK (DESC_COMMITTED_MASK | DESC_REUSE_MASK)
#define DESC_ID_MASK (~DESC_FLAGS_MASK)
#define DESC_ID(sv) ((sv) & DESC_ID_MASK)
-#define INVALID_LPOS 1
+#define FAILED_LPOS 0x1
+#define NO_LPOS 0x3
-#define INVALID_BLK_LPOS \
+#define FAILED_BLK_LPOS \
{ \
- .begin = INVALID_LPOS, \
- .next = INVALID_LPOS, \
+ .begin = FAILED_LPOS, \
+ .next = FAILED_LPOS, \
}
/*
@@ -147,7 +148,7 @@ struct prb_reserved_entry {
*
* To satisfy Req1, the tail initially points to a descriptor that is
* minimally initialized (having no data block, i.e. data-less with the
- * data block's lpos @begin and @next values set to INVALID_LPOS).
+ * data block's lpos @begin and @next values set to FAILED_LPOS).
*
* To satisfy Req2, the initial tail descriptor is initialized to the
* reusable state. Readers recognize reusable descriptors as existing
@@ -242,8 +243,8 @@ static struct prb_desc _##name##_descs[_DESCS_COUNT(descbits)] = { \
/* reusable */ \
.state_var = ATOMIC_INIT(DESC0_SV(descbits)), \
/* no associated data block */ \
- .text_blk_lpos = INVALID_BLK_LPOS, \
- .dict_blk_lpos = INVALID_BLK_LPOS, \
+ .text_blk_lpos = FAILED_BLK_LPOS, \
+ .dict_blk_lpos = FAILED_BLK_LPOS, \
}, \
}; \
static struct printk_ringbuffer name = { \