]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
printk: nbcon: Export console_is_usable
authorMarcos Paulo de Souza <mpdesouza@suse.com>
Thu, 16 Oct 2025 14:47:54 +0000 (11:47 -0300)
committerPetr Mladek <pmladek@suse.com>
Fri, 24 Oct 2025 10:19:23 +0000 (12:19 +0200)
The helper will be used on KDB code in the next commits.

Reviewed-by: Petr Mladek <pmladek@suse.com>
Reviewed-by: John Ogness <john.ogness@linutronix.de>
Signed-off-by: Marcos Paulo de Souza <mpdesouza@suse.com>
Link: https://patch.msgid.link/20251016-nbcon-kgdboc-v6-1-866aac60a80e@suse.com
Signed-off-by: Petr Mladek <pmladek@suse.com>
include/linux/console.h
kernel/printk/internal.h

index 8f10d0a85bb4536e4b0dda4e8ccbdf87978bbb4a..5c3a718c22fcc4cf28a557a4c13ed2f9123c0e5c 100644 (file)
@@ -19,6 +19,7 @@
 #include <linux/irq_work.h>
 #include <linux/rculist.h>
 #include <linux/rcuwait.h>
+#include <linux/smp.h>
 #include <linux/types.h>
 #include <linux/vesa.h>
 
@@ -605,6 +606,48 @@ extern bool nbcon_can_proceed(struct nbcon_write_context *wctxt);
 extern bool nbcon_enter_unsafe(struct nbcon_write_context *wctxt);
 extern bool nbcon_exit_unsafe(struct nbcon_write_context *wctxt);
 extern void nbcon_reacquire_nobuf(struct nbcon_write_context *wctxt);
+
+/*
+ * Check if the given console is currently capable and allowed to print
+ * records. Note that this function does not consider the current context,
+ * which can also play a role in deciding if @con can be used to print
+ * records.
+ */
+static inline bool console_is_usable(struct console *con, short flags, bool use_atomic)
+{
+       if (!(flags & CON_ENABLED))
+               return false;
+
+       if ((flags & CON_SUSPENDED))
+               return false;
+
+       if (flags & CON_NBCON) {
+               /* The write_atomic() callback is optional. */
+               if (use_atomic && !con->write_atomic)
+                       return false;
+
+               /*
+                * For the !use_atomic case, @printk_kthreads_running is not
+                * checked because the write_thread() callback is also used
+                * via the legacy loop when the printer threads are not
+                * available.
+                */
+       } else {
+               if (!con->write)
+                       return false;
+       }
+
+       /*
+        * Console drivers may assume that per-cpu resources have been
+        * allocated. So unless they're explicitly marked as being able to
+        * cope (CON_ANYTIME) don't call them until this CPU is officially up.
+        */
+       if (!cpu_online(raw_smp_processor_id()) && !(flags & CON_ANYTIME))
+               return false;
+
+       return true;
+}
+
 #else
 static inline void nbcon_cpu_emergency_enter(void) { }
 static inline void nbcon_cpu_emergency_exit(void) { }
@@ -612,6 +655,8 @@ static inline bool nbcon_can_proceed(struct nbcon_write_context *wctxt) { return
 static inline bool nbcon_enter_unsafe(struct nbcon_write_context *wctxt) { return false; }
 static inline bool nbcon_exit_unsafe(struct nbcon_write_context *wctxt) { return false; }
 static inline void nbcon_reacquire_nobuf(struct nbcon_write_context *wctxt) { }
+static inline bool console_is_usable(struct console *con, short flags,
+                                    bool use_atomic) { return false; }
 #endif
 
 extern int console_set_on_cmdline;
index f72bbfa266d6c9bbc533661c40386aa5f0df6c8f..7e3128ec933693807f1265408c01fc23eb8a79f4 100644 (file)
@@ -3,7 +3,6 @@
  * internal.h - printk internal definitions
  */
 #include <linux/console.h>
-#include <linux/percpu.h>
 #include <linux/types.h>
 
 #if defined(CONFIG_PRINTK) && defined(CONFIG_SYSCTL)
@@ -112,47 +111,6 @@ bool nbcon_kthread_create(struct console *con);
 void nbcon_kthread_stop(struct console *con);
 void nbcon_kthreads_wake(void);
 
-/*
- * Check if the given console is currently capable and allowed to print
- * records. Note that this function does not consider the current context,
- * which can also play a role in deciding if @con can be used to print
- * records.
- */
-static inline bool console_is_usable(struct console *con, short flags, bool use_atomic)
-{
-       if (!(flags & CON_ENABLED))
-               return false;
-
-       if ((flags & CON_SUSPENDED))
-               return false;
-
-       if (flags & CON_NBCON) {
-               /* The write_atomic() callback is optional. */
-               if (use_atomic && !con->write_atomic)
-                       return false;
-
-               /*
-                * For the !use_atomic case, @printk_kthreads_running is not
-                * checked because the write_thread() callback is also used
-                * via the legacy loop when the printer threads are not
-                * available.
-                */
-       } else {
-               if (!con->write)
-                       return false;
-       }
-
-       /*
-        * Console drivers may assume that per-cpu resources have been
-        * allocated. So unless they're explicitly marked as being able to
-        * cope (CON_ANYTIME) don't call them until this CPU is officially up.
-        */
-       if (!cpu_online(raw_smp_processor_id()) && !(flags & CON_ANYTIME))
-               return false;
-
-       return true;
-}
-
 /**
  * nbcon_kthread_wake - Wake up a console printing thread
  * @con:       Console to operate on
@@ -204,9 +162,6 @@ static inline bool nbcon_legacy_emit_next_record(struct console *con, bool *hand
 static inline void nbcon_kthread_wake(struct console *con) { }
 static inline void nbcon_kthreads_wake(void) { }
 
-static inline bool console_is_usable(struct console *con, short flags,
-                                    bool use_atomic) { return false; }
-
 #endif /* CONFIG_PRINTK */
 
 extern bool have_boot_console;