Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp1186820yba; Thu, 9 May 2019 12:11:26 -0700 (PDT) X-Google-Smtp-Source: APXvYqzUT8jxAzKVNUOYeFiAD91ZOH3LB0SNBMTWdXyEV8OPcBn4uT/aDIov3wXL4sTntnyxNKkM X-Received: by 2002:a63:6a42:: with SMTP id f63mr7941162pgc.377.1557429086271; Thu, 09 May 2019 12:11:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557429086; cv=none; d=google.com; s=arc-20160816; b=zuP+vu6vOTQ3/N5aJU8EwRQHW3sCxLXFHS+EuRJ1b5N521F39AvbKqVFHK9iGf5ahv PO8Cs/dM91vqMc1ER6FNmxgTdLdzj29xJSzhDnZ5Hw3QHa2O75c0xWdyd82ZTFT7E+Mm dNUdR1ekAQ4OtI+DkmDkx1sezzYGBKwpG2xUvWVw9vRLH8bRMKvLBBwbe4R3Ft1PcK7t /6Z3tY80vxH0Sn5DU0mrQP3nGUSsJXOrpt2doRm+NBJrRCsrYqDHZ0t83nVaAo93x9O8 i9Von/BP+uvrhfqZ0bwtUmbV/UvKnwD/yqPHpR2iWrnqh0SxeYNSH82fONpXk4c+5O4e YHnA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=Bx4hRO244bWrKaqfI2GoZG5SlFgbRkWdyUjGDSyAzL0=; b=ko+XWihHkZ1TozLlRyn5qTrcT7Taia5uNc7V+ezaDInpVX9M4VR/woUXl0OjhcUy1H R/tzr3fjpiW+tF32aTJAGDIXZPfRpOBl+ht2SUNyFTGdAKzRgVyJ+U/Fm76ImY1zpBfW EKSjmzQPZGeQiGTkANFoAlMsa6ORsxagD1pf1rrU8pOR5cK1bgzz4q3dFUOdvdnzss/C ExeA0NeYA5a/LEDHXmjm9aTXY/Mk1eRa6hOoXq524QdJ8YKSDCdNiadg1EZ3jXgsYD4d cyH1iaxaAP9rDpCfB2xL21nt2c5/t7WlHVxa42Gu2ErAfu8w8SlQsubarrZdEoK2i1Ya 7kGQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=D7Blw1Ik; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id n5si3949725plk.196.2019.05.09.12.11.10; Thu, 09 May 2019 12:11:26 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=D7Blw1Ik; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727413AbfEITJK (ORCPT + 99 others); Thu, 9 May 2019 15:09:10 -0400 Received: from mail.kernel.org ([198.145.29.99]:35880 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727025AbfEISo3 (ORCPT ); Thu, 9 May 2019 14:44:29 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id B2BF9217D6; Thu, 9 May 2019 18:44:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1557427468; bh=MOv2AaTh1w0/0TobC/dEXlg7Pdgap2FW3MINoZAneYU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=D7Blw1IkQuPe/vYMxcMBr9/sVKZ3AixNVyxOAKKnZO0HNGcyJMjoD1+AdX1E5I/gY YGX7ad9Wdv0Jx3MlInRucmgf9iTDiQG8jOIuHOGNdlq7sYYqh87xwmbawe/VATC1Tu g/gX3NoYJt0rF/W6auk9y7UiIRNJuGDNX/lD14jg= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, "Ji-Ze Hong (Peter Hong)" , Johan Hovold Subject: [PATCH 4.9 21/28] USB: serial: f81232: fix interrupt worker not stop Date: Thu, 9 May 2019 20:42:13 +0200 Message-Id: <20190509181254.812697083@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190509181247.647767531@linuxfoundation.org> References: <20190509181247.647767531@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Ji-Ze Hong (Peter Hong) commit 804dbee1e49774918339c1e5a87400988c0819e8 upstream. The F81232 will use interrupt worker to handle MSR change. This patch will fix the issue that interrupt work should stop in close() and suspend(). This also fixes line-status events being disabled after a suspend cycle until the port is re-opened. Signed-off-by: Ji-Ze Hong (Peter Hong) [ johan: amend commit message ] Fixes: 87fe5adcd8de ("USB: f81232: implement read IIR/MSR with endpoint") Cc: stable # 4.1 Signed-off-by: Johan Hovold Signed-off-by: Greg Kroah-Hartman --- drivers/usb/serial/f81232.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) --- a/drivers/usb/serial/f81232.c +++ b/drivers/usb/serial/f81232.c @@ -560,9 +560,12 @@ static int f81232_open(struct tty_struct static void f81232_close(struct usb_serial_port *port) { + struct f81232_private *port_priv = usb_get_serial_port_data(port); + f81232_port_disable(port); usb_serial_generic_close(port); usb_kill_urb(port->interrupt_in_urb); + flush_work(&port_priv->interrupt_work); } static void f81232_dtr_rts(struct usb_serial_port *port, int on) @@ -656,6 +659,40 @@ static int f81232_port_remove(struct usb return 0; } +static int f81232_suspend(struct usb_serial *serial, pm_message_t message) +{ + struct usb_serial_port *port = serial->port[0]; + struct f81232_private *port_priv = usb_get_serial_port_data(port); + int i; + + for (i = 0; i < ARRAY_SIZE(port->read_urbs); ++i) + usb_kill_urb(port->read_urbs[i]); + + usb_kill_urb(port->interrupt_in_urb); + + if (port_priv) + flush_work(&port_priv->interrupt_work); + + return 0; +} + +static int f81232_resume(struct usb_serial *serial) +{ + struct usb_serial_port *port = serial->port[0]; + int result; + + if (tty_port_initialized(&port->port)) { + result = usb_submit_urb(port->interrupt_in_urb, GFP_NOIO); + if (result) { + dev_err(&port->dev, "submit interrupt urb failed: %d\n", + result); + return result; + } + } + + return usb_serial_generic_resume(serial); +} + static struct usb_serial_driver f81232_device = { .driver = { .owner = THIS_MODULE, @@ -679,6 +716,8 @@ static struct usb_serial_driver f81232_d .read_int_callback = f81232_read_int_callback, .port_probe = f81232_port_probe, .port_remove = f81232_port_remove, + .suspend = f81232_suspend, + .resume = f81232_resume, }; static struct usb_serial_driver * const serial_drivers[] = {