8250: Don't clobber spinlocks.
In serial8250_isa_init_ports(), the port's lock is initialized. We should not overwrite it. In early_serial_setup(), only copy in the fields we need. Since the early console code only uses a subset of the fields, these are sufficient. Signed-off-by: David Daney <ddaney@caviumnetworks.com> Signed-off-by: Tomaso Paoletti <tpaoletti@caviumnetworks.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Alan Cox <alan@redhat.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
bc3256288b
commit
b430428a18
1 changed files with 13 additions and 2 deletions
|
@ -2752,12 +2752,23 @@ static struct uart_driver serial8250_reg = {
|
||||||
*/
|
*/
|
||||||
int __init early_serial_setup(struct uart_port *port)
|
int __init early_serial_setup(struct uart_port *port)
|
||||||
{
|
{
|
||||||
|
struct uart_port *p;
|
||||||
|
|
||||||
if (port->line >= ARRAY_SIZE(serial8250_ports))
|
if (port->line >= ARRAY_SIZE(serial8250_ports))
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
serial8250_isa_init_ports();
|
serial8250_isa_init_ports();
|
||||||
serial8250_ports[port->line].port = *port;
|
p = &serial8250_ports[port->line].port;
|
||||||
serial8250_ports[port->line].port.ops = &serial8250_pops;
|
p->iobase = port->iobase;
|
||||||
|
p->membase = port->membase;
|
||||||
|
p->irq = port->irq;
|
||||||
|
p->uartclk = port->uartclk;
|
||||||
|
p->fifosize = port->fifosize;
|
||||||
|
p->regshift = port->regshift;
|
||||||
|
p->iotype = port->iotype;
|
||||||
|
p->flags = port->flags;
|
||||||
|
p->mapbase = port->mapbase;
|
||||||
|
p->private_data = port->private_data;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue