mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
printk: nbcon: Export console_is_usable
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>
This commit is contained in:
committed by
Petr Mladek
parent
48e3694ae7
commit
4da42aaa82
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user