From: Jiri Slaby Date: Mon, 5 Mar 2012 13:52:21 +0000 (+0100) Subject: TTY: amiserial, simplify set_serial_info X-Git-Tag: MMI-PSA29.97-13-9~17267^2~54 X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=0f9b9684db2d1369fe303de5729cbdc817265bec;p=GitHub%2FMotorolaMobilityLLC%2Fkernel-slsi.git TTY: amiserial, simplify set_serial_info Do not copy whole serial_state. We only need to know whether the speed is to be changed. Hence store the info in advance and use it later. A simple bool is enough. Also remove reduntant assignments and move the tests directly to the 'if'. Signed-off-by: Jiri Slaby Cc: Geert Uytterhoeven Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/tty/amiserial.c b/drivers/tty/amiserial.c index 410e8e7e6bfe..165cd79faea2 100644 --- a/drivers/tty/amiserial.c +++ b/drivers/tty/amiserial.c @@ -1042,21 +1042,19 @@ static int set_serial_info(struct serial_state *state, struct serial_struct __user * new_info) { struct serial_struct new_serial; - struct serial_state old_state; - unsigned int change_irq,change_port; + bool change_spd; int retval = 0; if (copy_from_user(&new_serial,new_info,sizeof(new_serial))) return -EFAULT; tty_lock(); - old_state = *state; - - change_irq = new_serial.irq != state->irq; - change_port = (new_serial.port != state->port); - if(change_irq || change_port || (new_serial.xmit_fifo_size != state->xmit_fifo_size)) { - tty_unlock(); - return -EINVAL; + change_spd = ((new_serial.flags ^ state->flags) & ASYNC_SPD_MASK) || + new_serial.custom_divisor != state->custom_divisor; + if (new_serial.irq != state->irq || new_serial.port != state->port || + new_serial.xmit_fifo_size != state->xmit_fifo_size) { + tty_unlock(); + return -EINVAL; } if (!serial_isroot()) { @@ -1092,9 +1090,7 @@ static int set_serial_info(struct serial_state *state, check_and_exit: if (state->flags & ASYNC_INITIALIZED) { - if (((old_state.flags & ASYNC_SPD_MASK) != - (state->flags & ASYNC_SPD_MASK)) || - (old_state.custom_divisor != state->custom_divisor)) { + if (change_spd) { if ((state->flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI) state->tty->alt_speed = 57600; if ((state->flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI)