diff options
Diffstat (limited to 'debian/patches-rt/0089-printk-ringbuffer-Clarify-special-lpos-values.patch')
-rw-r--r-- | debian/patches-rt/0089-printk-ringbuffer-Clarify-special-lpos-values.patch | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/debian/patches-rt/0089-printk-ringbuffer-Clarify-special-lpos-values.patch b/debian/patches-rt/0089-printk-ringbuffer-Clarify-special-lpos-values.patch new file mode 100644 index 0000000000..397f61984c --- /dev/null +++ b/debian/patches-rt/0089-printk-ringbuffer-Clarify-special-lpos-values.patch @@ -0,0 +1,92 @@ +From: John Ogness <john.ogness@linutronix.de> +Date: Mon, 23 Oct 2023 11:11:05 +0000 +Subject: [PATCH 089/134] printk: ringbuffer: Clarify special lpos values +Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz + +For empty line records, no data blocks are created. Instead, +these valid records are identified by special logical position +values (in fields of @prb_desc.text_blk_lpos). + +Currently the macro NO_LPOS is used for empty line records. +This name is confusing because it does not imply _why_ there is +no data block. + +Rename NO_LPOS to EMPTY_LINE_LPOS so that it is clear why there +is no data block. + +Also add comments explaining the use of EMPTY_LINE_LPOS as well +as clarification to the values used to represent data-less +blocks. + +Signed-off-by: John Ogness <john.ogness@linutronix.de> +Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> +--- + kernel/printk/printk_ringbuffer.c | 20 ++++++++++++++++---- + kernel/printk/printk_ringbuffer.h | 16 +++++++++++++++- + 2 files changed, 31 insertions(+), 5 deletions(-) + +--- a/kernel/printk/printk_ringbuffer.c ++++ b/kernel/printk/printk_ringbuffer.c +@@ -1034,9 +1034,13 @@ static char *data_alloc(struct printk_ri + unsigned long next_lpos; + + if (size == 0) { +- /* Specify a data-less block. */ +- blk_lpos->begin = NO_LPOS; +- blk_lpos->next = NO_LPOS; ++ /* ++ * Data blocks are not created for empty lines. Instead, the ++ * reader will recognize these special lpos values and handle ++ * it appropriately. ++ */ ++ blk_lpos->begin = EMPTY_LINE_LPOS; ++ blk_lpos->next = EMPTY_LINE_LPOS; + return NULL; + } + +@@ -1214,10 +1218,18 @@ static const char *get_data(struct prb_d + + /* Data-less data block description. */ + if (BLK_DATALESS(blk_lpos)) { +- if (blk_lpos->begin == NO_LPOS && blk_lpos->next == NO_LPOS) { ++ /* ++ * Records that are just empty lines are also valid, even ++ * though they do not have a data block. For such records ++ * explicitly return empty string data to signify success. ++ */ ++ if (blk_lpos->begin == EMPTY_LINE_LPOS && ++ blk_lpos->next == EMPTY_LINE_LPOS) { + *data_size = 0; + return ""; + } ++ ++ /* Data lost, invalid, or otherwise unavailable. */ + return NULL; + } + +--- a/kernel/printk/printk_ringbuffer.h ++++ b/kernel/printk/printk_ringbuffer.h +@@ -127,8 +127,22 @@ enum desc_state { + #define DESC_SV(id, state) (((unsigned long)state << DESC_FLAGS_SHIFT) | id) + #define DESC_ID_MASK (~DESC_FLAGS_MASK) + #define DESC_ID(sv) ((sv) & DESC_ID_MASK) ++ ++/* ++ * Special data block logical position values (for fields of ++ * @prb_desc.text_blk_lpos). ++ * ++ * - Bit0 is used to identify if the record has no data block. (Implemented in ++ * the LPOS_DATALESS() macro.) ++ * ++ * - Bit1 specifies the reason for not having a data block. ++ * ++ * These special values could never be real lpos values because of the ++ * meta data and alignment padding of data blocks. (See to_blk_size() for ++ * details.) ++ */ + #define FAILED_LPOS 0x1 +-#define NO_LPOS 0x3 ++#define EMPTY_LINE_LPOS 0x3 + + #define FAILED_BLK_LPOS \ + { \ |