summaryrefslogtreecommitdiffstats
path: root/debian/patches-rt/0095-printk-ringbuffer-Consider-committed-as-finalized-in.patch
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--debian/patches-rt/0095-printk-ringbuffer-Consider-committed-as-finalized-in.patch62
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 000000000..932ba13e7
--- /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.