diff options
Diffstat (limited to 'debian/patches-rt/0095-printk-ringbuffer-Consider-committed-as-finalized-in.patch')
-rw-r--r-- | debian/patches-rt/0095-printk-ringbuffer-Consider-committed-as-finalized-in.patch | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/debian/patches-rt/0095-printk-ringbuffer-Consider-committed-as-finalized-in.patch b/debian/patches-rt/0095-printk-ringbuffer-Consider-committed-as-finalized-in.patch new file mode 100644 index 0000000000..932ba13e7d --- /dev/null +++ b/debian/patches-rt/0095-printk-ringbuffer-Consider-committed-as-finalized-in.patch @@ -0,0 +1,62 @@ +From: John Ogness <john.ogness@linutronix.de> +Date: Mon, 20 Nov 2023 12:46:35 +0100 +Subject: [PATCH 095/134] printk: ringbuffer: Consider committed as finalized + in panic +Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz + +A descriptor in the committed state means the record does not yet +exist for the reader. However, for the panic CPU, committed +records should be handled as finalized records since they contain +message data in a consistent state and may contain additional +hints as to the cause of the panic. + +Add an exception for records in the commit state to not be +considered non-existing when reading from the panic CPU. + +Signed-off-by: John Ogness <john.ogness@linutronix.de> +Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> +--- + kernel/printk/printk_ringbuffer.c | 17 ++++++++++++++--- + 1 file changed, 14 insertions(+), 3 deletions(-) + +--- a/kernel/printk/printk_ringbuffer.c ++++ b/kernel/printk/printk_ringbuffer.c +@@ -1857,6 +1857,8 @@ static bool copy_data(struct prb_data_ri + * descriptor. However, it also verifies that the record is finalized and has + * the sequence number @seq. On success, 0 is returned. + * ++ * For the panic CPU, committed descriptors are also considered finalized. ++ * + * Error return values: + * -EINVAL: A finalized record with sequence number @seq does not exist. + * -ENOENT: A finalized record with sequence number @seq exists, but its data +@@ -1875,17 +1877,26 @@ static int desc_read_finalized_seq(struc + + /* + * An unexpected @id (desc_miss) or @seq mismatch means the record +- * does not exist. A descriptor in the reserved or committed state +- * means the record does not yet exist for the reader. ++ * does not exist. A descriptor in the reserved state means the ++ * record does not yet exist for the reader. + */ + if (d_state == desc_miss || + d_state == desc_reserved || +- d_state == desc_committed || + s != seq) { + return -EINVAL; + } + + /* ++ * A descriptor in the committed state means the record does not yet ++ * exist for the reader. However, for the panic CPU, committed ++ * records are also handled as finalized records since they contain ++ * message data in a consistent state and may contain additional ++ * hints as to the cause of the panic. ++ */ ++ if (d_state == desc_committed && !this_cpu_in_panic()) ++ return -EINVAL; ++ ++ /* + * A descriptor in the reusable state may no longer have its data + * available; report it as existing but with lost data. Or the record + * may actually be a record with lost data. |