diff options
Diffstat (limited to 'drivers/serial/serial_core.c')
| -rw-r--r-- | drivers/serial/serial_core.c | 17 | 
1 files changed, 14 insertions, 3 deletions
| diff --git a/drivers/serial/serial_core.c b/drivers/serial/serial_core.c index c54af8774393..d5f636fbf29a 100644 --- a/drivers/serial/serial_core.c +++ b/drivers/serial/serial_core.c @@ -49,6 +49,12 @@   */  static DEFINE_MUTEX(port_mutex); +/* + * lockdep: port->lock is initialized in two places, but we + *          want only one lock-class: + */ +static struct lock_class_key port_lock_key; +  #define HIGH_BITS_OFFSET	((sizeof(long)-sizeof(int))*8)  #define uart_users(state)	((state)->count + ((state)->info ? (state)->info->blocked_open : 0)) @@ -690,7 +696,8 @@ static int uart_set_info(struct uart_state *state,  		    (new_serial.baud_base != port->uartclk / 16) ||  		    (close_delay != state->close_delay) ||  		    (closing_wait != state->closing_wait) || -		    (new_serial.xmit_fifo_size != port->fifosize) || +		    (new_serial.xmit_fifo_size && +		     new_serial.xmit_fifo_size != port->fifosize) ||  		    (((new_flags ^ old_flags) & ~UPF_USR_MASK) != 0))  			goto exit;  		port->flags = ((port->flags & ~UPF_USR_MASK) | @@ -795,7 +802,8 @@ static int uart_set_info(struct uart_state *state,  	port->custom_divisor   = new_serial.custom_divisor;  	state->close_delay     = close_delay;  	state->closing_wait    = closing_wait; -	port->fifosize         = new_serial.xmit_fifo_size; +	if (new_serial.xmit_fifo_size) +		port->fifosize = new_serial.xmit_fifo_size;  	if (state->info->tty)  		state->info->tty->low_latency =  			(port->flags & UPF_LOW_LATENCY) ? 1 : 0; @@ -1865,6 +1873,7 @@ uart_set_options(struct uart_port *port, struct console *co,  	 * early.  	 */  	spin_lock_init(&port->lock); +	lockdep_set_class(&port->lock, &port_lock_key);  	memset(&termios, 0, sizeof(struct termios)); @@ -2247,8 +2256,10 @@ int uart_add_one_port(struct uart_driver *drv, struct uart_port *port)  	 * If this port is a console, then the spinlock is already  	 * initialised.  	 */ -	if (!(uart_console(port) && (port->cons->flags & CON_ENABLED))) +	if (!(uart_console(port) && (port->cons->flags & CON_ENABLED))) {  		spin_lock_init(&port->lock); +		lockdep_set_class(&port->lock, &port_lock_key); +	}  	uart_configure_port(drv, state, port); | 
