Merge 3.9-rc5 into tty-next
We need the fixes here as well. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
@@ -110,7 +110,6 @@ struct edgeport_port {
|
||||
wait_queue_head_t wait_chase; /* for handling sleeping while waiting for chase to finish */
|
||||
wait_queue_head_t wait_open; /* for handling sleeping while waiting for open to finish */
|
||||
wait_queue_head_t wait_command; /* for handling sleeping while waiting for command to finish */
|
||||
wait_queue_head_t delta_msr_wait; /* for handling sleeping while waiting for msr change to happen */
|
||||
|
||||
struct async_icount icount;
|
||||
struct usb_serial_port *port; /* loop back to the owner of this object */
|
||||
@@ -866,7 +865,6 @@ static int edge_open(struct tty_struct *tty, struct usb_serial_port *port)
|
||||
/* initialize our wait queues */
|
||||
init_waitqueue_head(&edge_port->wait_open);
|
||||
init_waitqueue_head(&edge_port->wait_chase);
|
||||
init_waitqueue_head(&edge_port->delta_msr_wait);
|
||||
init_waitqueue_head(&edge_port->wait_command);
|
||||
|
||||
/* initialize our icount structure */
|
||||
@@ -1651,13 +1649,17 @@ static int edge_ioctl(struct tty_struct *tty,
|
||||
dev_dbg(&port->dev, "%s (%d) TIOCMIWAIT\n", __func__, port->number);
|
||||
cprev = edge_port->icount;
|
||||
while (1) {
|
||||
prepare_to_wait(&edge_port->delta_msr_wait,
|
||||
prepare_to_wait(&port->delta_msr_wait,
|
||||
&wait, TASK_INTERRUPTIBLE);
|
||||
schedule();
|
||||
finish_wait(&edge_port->delta_msr_wait, &wait);
|
||||
finish_wait(&port->delta_msr_wait, &wait);
|
||||
/* see if a signal did it */
|
||||
if (signal_pending(current))
|
||||
return -ERESTARTSYS;
|
||||
|
||||
if (port->serial->disconnected)
|
||||
return -EIO;
|
||||
|
||||
cnow = edge_port->icount;
|
||||
if (cnow.rng == cprev.rng && cnow.dsr == cprev.dsr &&
|
||||
cnow.dcd == cprev.dcd && cnow.cts == cprev.cts)
|
||||
@@ -2033,7 +2035,7 @@ static void handle_new_msr(struct edgeport_port *edge_port, __u8 newMsr)
|
||||
icount->dcd++;
|
||||
if (newMsr & EDGEPORT_MSR_DELTA_RI)
|
||||
icount->rng++;
|
||||
wake_up_interruptible(&edge_port->delta_msr_wait);
|
||||
wake_up_interruptible(&edge_port->port->delta_msr_wait);
|
||||
}
|
||||
|
||||
/* Save the new modem status */
|
||||
|
Reference in New Issue
Block a user