diff options
author | David Daney <ddaney@caviumnetworks.com> | 2009-01-02 08:49:41 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-01-02 13:19:42 -0500 |
commit | b430428a188e8a434325e251d0704af4b88b4711 (patch) | |
tree | b00c4a1872c2a1db32002933f5b061d245787b1b /drivers/serial | |
parent | bc3256288b8ff9787623805e53cf7c6d5a2b4591 (diff) |
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>
Diffstat (limited to 'drivers/serial')
-rw-r--r-- | drivers/serial/8250.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c index 303272af386e..8e28750a4058 100644 --- a/drivers/serial/8250.c +++ b/drivers/serial/8250.c | |||
@@ -2752,12 +2752,23 @@ static struct uart_driver serial8250_reg = { | |||
2752 | */ | 2752 | */ |
2753 | int __init early_serial_setup(struct uart_port *port) | 2753 | int __init early_serial_setup(struct uart_port *port) |
2754 | { | 2754 | { |
2755 | struct uart_port *p; | ||
2756 | |||
2755 | if (port->line >= ARRAY_SIZE(serial8250_ports)) | 2757 | if (port->line >= ARRAY_SIZE(serial8250_ports)) |
2756 | return -ENODEV; | 2758 | return -ENODEV; |
2757 | 2759 | ||
2758 | serial8250_isa_init_ports(); | 2760 | serial8250_isa_init_ports(); |
2759 | serial8250_ports[port->line].port = *port; | 2761 | p = &serial8250_ports[port->line].port; |
2760 | serial8250_ports[port->line].port.ops = &serial8250_pops; | 2762 | p->iobase = port->iobase; |
2763 | p->membase = port->membase; | ||
2764 | p->irq = port->irq; | ||
2765 | p->uartclk = port->uartclk; | ||
2766 | p->fifosize = port->fifosize; | ||
2767 | p->regshift = port->regshift; | ||
2768 | p->iotype = port->iotype; | ||
2769 | p->flags = port->flags; | ||
2770 | p->mapbase = port->mapbase; | ||
2771 | p->private_data = port->private_data; | ||
2761 | return 0; | 2772 | return 0; |
2762 | } | 2773 | } |
2763 | 2774 | ||