From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932439AbcELIyK (ORCPT ); Thu, 12 May 2016 04:54:10 -0400 Received: from mail-wm0-f68.google.com ([74.125.82.68]:34821 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751646AbcELIuj (ORCPT ); Thu, 12 May 2016 04:50:39 -0400 From: Mathieu OTHACEHE To: johan@kernel.org Cc: gregkh@linuxfoundation.org, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, Mathieu OTHACEHE Subject: [PATCH 29/36] usb: serial: ti_usb_3410_5052: Set shadow msr before waking up waiters Date: Thu, 12 May 2016 10:49:01 +0200 Message-Id: <1463042948-12205-30-git-send-email-m.othacehe@gmail.com> X-Mailer: git-send-email 2.8.2 In-Reply-To: <1463042948-12205-1-git-send-email-m.othacehe@gmail.com> References: <1463042948-12205-1-git-send-email-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 72cb675..1d8d8ef 100644 --- a/drivers/usb/serial/ti_usb_3410_5052.c +++ b/drivers/usb/serial/ti_usb_3410_5052.c @@ -1240,9 +1240,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) @@ -1251,11 +1254,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; } static int ti_do_download(struct usb_serial *serial, -- 2.8.2