|
@@ -1212,8 +1212,14 @@ imx_console_write(struct console *co, const char *s, unsigned int count)
|
|
|
struct imx_port_ucrs old_ucr;
|
|
|
unsigned int ucr1;
|
|
|
unsigned long flags;
|
|
|
+ int locked = 1;
|
|
|
|
|
|
- spin_lock_irqsave(&sport->port.lock, flags);
|
|
|
+ if (sport->port.sysrq)
|
|
|
+ locked = 0;
|
|
|
+ else if (oops_in_progress)
|
|
|
+ locked = spin_trylock_irqsave(&sport->port.lock, flags);
|
|
|
+ else
|
|
|
+ spin_lock_irqsave(&sport->port.lock, flags);
|
|
|
|
|
|
/*
|
|
|
* First, save UCR1/2/3 and then disable interrupts
|
|
@@ -1240,7 +1246,8 @@ imx_console_write(struct console *co, const char *s, unsigned int count)
|
|
|
|
|
|
imx_port_ucrs_restore(&sport->port, &old_ucr);
|
|
|
|
|
|
- spin_unlock_irqrestore(&sport->port.lock, flags);
|
|
|
+ if (locked)
|
|
|
+ spin_unlock_irqrestore(&sport->port.lock, flags);
|
|
|
}
|
|
|
|
|
|
/*
|