mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-01 14:44:12 +00:00
serial: cpm_uart: Avoid suspicious locking
[ Upstream commit 36ef11d311
]
CHECK drivers/tty/serial/cpm_uart/cpm_uart_core.c
drivers/tty/serial/cpm_uart/cpm_uart_core.c:1271:39: warning: context imbalance in 'cpm_uart_console_write' - unexpected unlock
Allthough 'nolock' is not expected to change, sparse find the following
form suspicious:
if (unlikely(nolock)) {
local_irq_save(flags);
} else {
spin_lock_irqsave(&pinfo->port.lock, flags);
}
cpm_uart_early_write(pinfo, s, count, true);
if (unlikely(nolock)) {
local_irq_restore(flags);
} else {
spin_unlock_irqrestore(&pinfo->port.lock, flags);
}
Rewrite it a more obvious form:
if (unlikely(oops_in_progress)) {
local_irq_save(flags);
cpm_uart_early_write(pinfo, s, count, true);
local_irq_restore(flags);
} else {
spin_lock_irqsave(&pinfo->port.lock, flags);
cpm_uart_early_write(pinfo, s, count, true);
spin_unlock_irqrestore(&pinfo->port.lock, flags);
}
Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Link: https://lore.kernel.org/r/f7da5cdc9287960185829cfef681a7d8614efa1f.1691068700.git.christophe.leroy@csgroup.eu
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
0cac6cbb99
commit
468d16a2e8
1 changed files with 4 additions and 9 deletions
|
@ -1255,19 +1255,14 @@ static void cpm_uart_console_write(struct console *co, const char *s,
|
|||
{
|
||||
struct uart_cpm_port *pinfo = &cpm_uart_ports[co->index];
|
||||
unsigned long flags;
|
||||
int nolock = oops_in_progress;
|
||||
|
||||
if (unlikely(nolock)) {
|
||||
if (unlikely(oops_in_progress)) {
|
||||
local_irq_save(flags);
|
||||
} else {
|
||||
spin_lock_irqsave(&pinfo->port.lock, flags);
|
||||
}
|
||||
|
||||
cpm_uart_early_write(pinfo, s, count, true);
|
||||
|
||||
if (unlikely(nolock)) {
|
||||
cpm_uart_early_write(pinfo, s, count, true);
|
||||
local_irq_restore(flags);
|
||||
} else {
|
||||
spin_lock_irqsave(&pinfo->port.lock, flags);
|
||||
cpm_uart_early_write(pinfo, s, count, true);
|
||||
spin_unlock_irqrestore(&pinfo->port.lock, flags);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue