mirror of
https://github.com/OpenVoiceOS/OpenVoiceOS
synced 2025-02-21 22:27:49 +01:00
97 lines
3.2 KiB
Diff
97 lines
3.2 KiB
Diff
From 20fd4439f644cf99034529d23ebbadfbedcf1923 Mon Sep 17 00:00:00 2001
|
|
From: Junxiao Chang <junxiao.chang@intel.com>
|
|
Date: Tue, 23 Jan 2024 13:40:32 +0800
|
|
Subject: [PATCH 195/196] printk: nbcon: move locked_port flag to struct
|
|
uart_port
|
|
|
|
Console pointer in uart_port might be shared among multiple uart
|
|
ports. Flag port locked by nbcon should be saved in uart_port
|
|
structure instead of in console structure.
|
|
|
|
Fixes: 6424f396c49e ("printk: nbcon: Implement processing in port->lock wrapper")
|
|
Suggested-by: John Ogness <john.ogness@linutronix.de>
|
|
Signed-off-by: Junxiao Chang <junxiao.chang@intel.com>
|
|
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
|
|
Link: https://lore.kernel.org/all/20240123054033.183114-2-junxiao.chang@intel.com
|
|
(cherry picked from commit d4fb86a96cb4a1efd24ca13a2ac234a1c9a3fdc5)
|
|
Signed-off-by: Clark Williams <clark.williams@gmail.com>
|
|
---
|
|
include/linux/console.h | 2 --
|
|
include/linux/serial_core.h | 1 +
|
|
kernel/printk/nbcon.c | 8 ++++----
|
|
3 files changed, 5 insertions(+), 6 deletions(-)
|
|
|
|
diff --git a/include/linux/console.h b/include/linux/console.h
|
|
index f8a062867888..1eb9580e9b18 100644
|
|
--- a/include/linux/console.h
|
|
+++ b/include/linux/console.h
|
|
@@ -304,7 +304,6 @@ struct nbcon_write_context {
|
|
* @nbcon_state: State for nbcon consoles
|
|
* @nbcon_seq: Sequence number of the next record for nbcon to print
|
|
* @pbufs: Pointer to nbcon private buffer
|
|
- * @locked_port: True, if the port lock is locked by nbcon
|
|
* @kthread: Printer kthread for this console
|
|
* @rcuwait: RCU-safe wait object for @kthread waking
|
|
* @irq_work: Defer @kthread waking to IRQ work context
|
|
@@ -338,7 +337,6 @@ struct console {
|
|
atomic_t __private nbcon_state;
|
|
atomic_long_t __private nbcon_seq;
|
|
struct printk_buffers *pbufs;
|
|
- bool locked_port;
|
|
struct task_struct *kthread;
|
|
struct rcuwait rcuwait;
|
|
struct irq_work irq_work;
|
|
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h
|
|
index e5947b13f2f1..99d3f1e24bec 100644
|
|
--- a/include/linux/serial_core.h
|
|
+++ b/include/linux/serial_core.h
|
|
@@ -488,6 +488,7 @@ struct uart_port {
|
|
struct uart_icount icount; /* statistics */
|
|
|
|
struct console *cons; /* struct console, if any */
|
|
+ bool nbcon_locked_port; /* True, if the port is locked by nbcon */
|
|
/* flags must be updated while holding port mutex */
|
|
upf_t flags;
|
|
|
|
diff --git a/kernel/printk/nbcon.c b/kernel/printk/nbcon.c
|
|
index 1b1b585b1675..b53d93585ee7 100644
|
|
--- a/kernel/printk/nbcon.c
|
|
+++ b/kernel/printk/nbcon.c
|
|
@@ -1586,7 +1586,7 @@ void nbcon_acquire(struct uart_port *up)
|
|
if (!uart_is_nbcon(up))
|
|
return;
|
|
|
|
- WARN_ON_ONCE(con->locked_port);
|
|
+ WARN_ON_ONCE(up->nbcon_locked_port);
|
|
|
|
do {
|
|
do {
|
|
@@ -1597,7 +1597,7 @@ void nbcon_acquire(struct uart_port *up)
|
|
|
|
} while (!nbcon_context_enter_unsafe(&ctxt));
|
|
|
|
- con->locked_port = true;
|
|
+ up->nbcon_locked_port = true;
|
|
}
|
|
EXPORT_SYMBOL_GPL(nbcon_acquire);
|
|
|
|
@@ -1623,13 +1623,13 @@ void nbcon_release(struct uart_port *up)
|
|
.prio = NBCON_PRIO_NORMAL,
|
|
};
|
|
|
|
- if (!con->locked_port)
|
|
+ if (!up->nbcon_locked_port)
|
|
return;
|
|
|
|
if (nbcon_context_exit_unsafe(&ctxt))
|
|
nbcon_context_release(&ctxt);
|
|
|
|
- con->locked_port = false;
|
|
+ up->nbcon_locked_port = false;
|
|
}
|
|
EXPORT_SYMBOL_GPL(nbcon_release);
|
|
|
|
--
|
|
2.45.1
|
|
|