The helper will be used on KDB code in the next commits.
Reviewed-by: Petr Mladek <pmladek@suse.com>
Signed-off-by: Marcos Paulo de Souza <mpdesouza@suse.com>
---
include/linux/console.h | 44 ++++++++++++++++++++++++++++++++++++++++++++
kernel/printk/internal.h | 44 --------------------------------------------
2 files changed, 44 insertions(+), 44 deletions(-)
diff --git a/include/linux/console.h b/include/linux/console.h
index 8f10d0a85bb4536e4b0dda4e8ccbdf87978bbb4a..67af483574727c00eea1d5a1eacc994755c92607 100644
--- a/include/linux/console.h
+++ b/include/linux/console.h
@@ -605,6 +605,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 +654,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;
diff --git a/kernel/printk/internal.h b/kernel/printk/internal.h
index f72bbfa266d6c9bbc533661c40386aa5f0df6c8f..7238da161ff9814fe8a22e4836624e50ee5b71d3 100644
--- a/kernel/printk/internal.h
+++ b/kernel/printk/internal.h
@@ -112,47 +112,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 +163,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;
--
2.51.0
On 2025-09-30, Marcos Paulo de Souza <mpdesouza@suse.com> wrote: > The helper will be used on KDB code in the next commits. > > Reviewed-by: Petr Mladek <pmladek@suse.com> > Signed-off-by: Marcos Paulo de Souza <mpdesouza@suse.com> > --- > include/linux/console.h | 44 ++++++++++++++++++++++++++++++++++++++++++++ > kernel/printk/internal.h | 44 -------------------------------------------- > 2 files changed, 44 insertions(+), 44 deletions(-) > > diff --git a/include/linux/console.h b/include/linux/console.h > index 8f10d0a85bb4536e4b0dda4e8ccbdf87978bbb4a..67af483574727c00eea1d5a1eacc994755c92607 100644 > --- a/include/linux/console.h > +++ b/include/linux/console.h > @@ -605,6 +605,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 +654,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; > diff --git a/kernel/printk/internal.h b/kernel/printk/internal.h > index f72bbfa266d6c9bbc533661c40386aa5f0df6c8f..7238da161ff9814fe8a22e4836624e50ee5b71d3 100644 > --- a/kernel/printk/internal.h > +++ b/kernel/printk/internal.h > @@ -112,47 +112,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 +163,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; This also needs the required includes moved over as well. smp.h is probably more appropriate than the higher level percpu.h: diff --git a/include/linux/console.h b/include/linux/console.h index b34c5a0b86303..9406342b27db4 100644 --- a/include/linux/console.h +++ b/include/linux/console.h @@ -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> diff --git a/kernel/printk/internal.h b/kernel/printk/internal.h index 077927ed56c5f..7203b7b969c06 100644 --- a/kernel/printk/internal.h +++ b/kernel/printk/internal.h @@ -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) On a side note, we are missing <linux/rcuwait.h> in kernel/printk/internal.h. It currently relies on console.h as a proxy. But I guess that is out of scope for this series. John
© 2016 - 2025 Red Hat, Inc.