Merge tag 'tty-6.10-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty
Pull tty / serial updates from Greg KH:
"Here is the big set of tty/serial driver changes for 6.10-rc1.
Included in here are:
- Usual good set of api cleanups and evolution by Jiri Slaby to make
the serial interfaces move out of the 1990's by using kfifos
instead of hand-rolling their own logic.
- 8250_exar driver updates
- max3100 driver updates
- sc16is7xx driver updates
- exar driver updates
- sh-sci driver updates
- tty ldisc api addition to help refuse bindings
- other smaller serial driver updates
All of these have been in linux-next for a while with no reported
issues"
* tag 'tty-6.10-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty: (113 commits)
serial: Clear UPF_DEAD before calling tty_port_register_device_attr_serdev()
serial: imx: Raise TX trigger level to 8
serial: 8250_pnp: Simplify "line" related code
serial: sh-sci: simplify locking when re-issuing RXDMA fails
serial: sh-sci: let timeout timer only run when DMA is scheduled
serial: sh-sci: describe locking requirements for invalidating RXDMA
serial: sh-sci: protect invalidating RXDMA on shutdown
tty: add the option to have a tty reject a new ldisc
serial: core: Call device_set_awake_path() for console port
dt-bindings: serial: brcm,bcm2835-aux-uart: convert to dtschema
tty: serial: uartps: Add support for uartps controller reset
arm64: zynqmp: Add resets property for UART nodes
dt-bindings: serial: cdns,uart: Add optional reset property
serial: 8250_pnp: Switch to DEFINE_SIMPLE_DEV_PM_OPS()
serial: 8250_exar: Keep the includes sorted
serial: 8250_exar: Make type of bit the same in exar_ee_*_bit()
serial: 8250_exar: Use BIT() in exar_ee_read()
serial: 8250_exar: Switch to use dev_err_probe()
serial: 8250_exar: Return directly from switch-cases
serial: 8250_exar: Decrease indentation level
...
This commit is contained in:
+72
-28
@@ -383,9 +383,6 @@ static int console_locked;
|
||||
/*
|
||||
* Array of consoles built from command line options (console=)
|
||||
*/
|
||||
|
||||
#define MAX_CMDLINECONSOLES 8
|
||||
|
||||
static struct console_cmdline console_cmdline[MAX_CMDLINECONSOLES];
|
||||
|
||||
static int preferred_console = -1;
|
||||
@@ -2503,6 +2500,17 @@ static int __init console_setup(char *str)
|
||||
if (_braille_console_setup(&str, &brl_options))
|
||||
return 1;
|
||||
|
||||
/* Save the console for driver subsystem use */
|
||||
if (console_opt_save(str, brl_options))
|
||||
return 1;
|
||||
|
||||
/* Flag register_console() to not call try_enable_default_console() */
|
||||
console_set_on_cmdline = 1;
|
||||
|
||||
/* Don't attempt to parse a DEVNAME:0.0 style console */
|
||||
if (strchr(str, ':'))
|
||||
return 1;
|
||||
|
||||
/*
|
||||
* Decode str into name, index, options.
|
||||
*/
|
||||
@@ -2533,6 +2541,13 @@ static int __init console_setup(char *str)
|
||||
}
|
||||
__setup("console=", console_setup);
|
||||
|
||||
/* Only called from add_preferred_console_match() */
|
||||
int console_opt_add_preferred_console(const char *name, const short idx,
|
||||
char *options, char *brl_options)
|
||||
{
|
||||
return __add_preferred_console(name, idx, options, brl_options, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* add_preferred_console - add a device to the list of preferred consoles.
|
||||
* @name: device name
|
||||
@@ -3146,6 +3161,40 @@ void console_unblank(void)
|
||||
pr_flush(1000, true);
|
||||
}
|
||||
|
||||
/*
|
||||
* Rewind all consoles to the oldest available record.
|
||||
*
|
||||
* IMPORTANT: The function is safe only when called under
|
||||
* console_lock(). It is not enforced because
|
||||
* it is used as a best effort in panic().
|
||||
*/
|
||||
static void __console_rewind_all(void)
|
||||
{
|
||||
struct console *c;
|
||||
short flags;
|
||||
int cookie;
|
||||
u64 seq;
|
||||
|
||||
seq = prb_first_valid_seq(prb);
|
||||
|
||||
cookie = console_srcu_read_lock();
|
||||
for_each_console_srcu(c) {
|
||||
flags = console_srcu_read_flags(c);
|
||||
|
||||
if (flags & CON_NBCON) {
|
||||
nbcon_seq_force(c, seq);
|
||||
} else {
|
||||
/*
|
||||
* This assignment is safe only when called under
|
||||
* console_lock(). On panic, legacy consoles are
|
||||
* only best effort.
|
||||
*/
|
||||
c->seq = seq;
|
||||
}
|
||||
}
|
||||
console_srcu_read_unlock(cookie);
|
||||
}
|
||||
|
||||
/**
|
||||
* console_flush_on_panic - flush console content on panic
|
||||
* @mode: flush all messages in buffer or just the pending ones
|
||||
@@ -3174,30 +3223,8 @@ void console_flush_on_panic(enum con_flush_mode mode)
|
||||
*/
|
||||
console_may_schedule = 0;
|
||||
|
||||
if (mode == CONSOLE_REPLAY_ALL) {
|
||||
struct console *c;
|
||||
short flags;
|
||||
int cookie;
|
||||
u64 seq;
|
||||
|
||||
seq = prb_first_valid_seq(prb);
|
||||
|
||||
cookie = console_srcu_read_lock();
|
||||
for_each_console_srcu(c) {
|
||||
flags = console_srcu_read_flags(c);
|
||||
|
||||
if (flags & CON_NBCON) {
|
||||
nbcon_seq_force(c, seq);
|
||||
} else {
|
||||
/*
|
||||
* This is an unsynchronized assignment. On
|
||||
* panic legacy consoles are only best effort.
|
||||
*/
|
||||
c->seq = seq;
|
||||
}
|
||||
}
|
||||
console_srcu_read_unlock(cookie);
|
||||
}
|
||||
if (mode == CONSOLE_REPLAY_ALL)
|
||||
__console_rewind_all();
|
||||
|
||||
console_flush_all(false, &next_seq, &handover);
|
||||
}
|
||||
@@ -3495,7 +3522,7 @@ void register_console(struct console *newcon)
|
||||
* Note that a console with tty binding will have CON_CONSDEV
|
||||
* flag set and will be first in the list.
|
||||
*/
|
||||
if (preferred_console < 0) {
|
||||
if (preferred_console < 0 && !console_set_on_cmdline) {
|
||||
if (hlist_empty(&console_list) || !console_first()->device ||
|
||||
console_first()->flags & CON_BOOT) {
|
||||
try_enable_default_console(newcon);
|
||||
@@ -4286,6 +4313,23 @@ void kmsg_dump_rewind(struct kmsg_dump_iter *iter)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(kmsg_dump_rewind);
|
||||
|
||||
/**
|
||||
* console_replay_all - replay kernel log on consoles
|
||||
*
|
||||
* Try to obtain lock on console subsystem and replay all
|
||||
* available records in printk buffer on the consoles.
|
||||
* Does nothing if lock is not obtained.
|
||||
*
|
||||
* Context: Any context.
|
||||
*/
|
||||
void console_replay_all(void)
|
||||
{
|
||||
if (console_trylock()) {
|
||||
__console_rewind_all();
|
||||
/* Consoles are flushed as part of console_unlock(). */
|
||||
console_unlock();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
|
||||
Reference in New Issue
Block a user