From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757723AbcGZSGK (ORCPT ); Tue, 26 Jul 2016 14:06:10 -0400 Received: from mail-wm0-f66.google.com ([74.125.82.66]:34029 "EHLO mail-wm0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757664AbcGZSEL (ORCPT ); Tue, 26 Jul 2016 14:04:11 -0400 From: Mathieu OTHACEHE To: johan@kernel.org, gregkh@linuxfoundation.org Cc: linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, Mathieu OTHACEHE Subject: [PATCH v2 20/22] usb: serial: ti_usb_3410_5052: Set shadow msr before waking up waiters Date: Tue, 26 Jul 2016 20:00:00 +0200 Message-Id: <20160726180002.2398-21-m.othacehe@gmail.com> X-Mailer: git-send-email 2.9.0 In-Reply-To: <20160726180002.2398-1-m.othacehe@gmail.com> References: <20160726180002.2398-1-m.othacehe@gmail.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Save msr before testing the delta and waking up any waiters. Also use port directly instead of tport->tp_port. Signed-off-by: Mathieu OTHACEHE --- drivers/usb/serial/ti_usb_3410_5052.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c index 24e1d52..168a969 100644 --- a/drivers/usb/serial/ti_usb_3410_5052.c +++ b/drivers/usb/serial/ti_usb_3410_5052.c @@ -1547,9 +1547,12 @@ static void ti_handle_new_msr(struct usb_serial_port *port, u8 msr) dev_dbg(&port->dev, "%s - msr 0x%02X\n", __func__, msr); + spin_lock_irqsave(&tport->tp_lock, flags); + tport->tp_msr = msr & TI_MSR_MASK; + spin_unlock_irqrestore(&tport->tp_lock, flags); + if (msr & TI_MSR_DELTA_MASK) { - spin_lock_irqsave(&tport->tp_lock, flags); - icount = &tport->tp_port->icount; + icount = &port->icount; if (msr & TI_MSR_DELTA_CTS) icount->cts++; if (msr & TI_MSR_DELTA_DSR) @@ -1558,11 +1561,9 @@ static void ti_handle_new_msr(struct usb_serial_port *port, u8 msr) icount->dcd++; if (msr & TI_MSR_DELTA_RI) icount->rng++; + wake_up_interruptible(&port->port.delta_msr_wait); - spin_unlock_irqrestore(&tport->tp_lock, flags); } - - tport->tp_msr = msr & TI_MSR_MASK; } -- 2.9.0