Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp1169868yba; Thu, 9 May 2019 11:55:11 -0700 (PDT) X-Google-Smtp-Source: APXvYqzcFremy6qS+pbD46u7zbOr5Pz/SqdLmPmJKalTyUDjLKoi24BpCJbheUYEH+6SgqD9ehmn X-Received: by 2002:a62:2a55:: with SMTP id q82mr7707313pfq.90.1557428111131; Thu, 09 May 2019 11:55:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557428111; cv=none; d=google.com; s=arc-20160816; b=eDflwLQvcS6pUAr8o+SLHWlU2AFTM4AS5vHM+B1WuQF8RGqTs5Y740As1TfruBsm8E yrZtqxlvTY5RmJ4sjZCUorCC5OA8nfROiyUpi4LOfEAbjQhuSOm5DyXAlf2O3bF2n4bf 25fUyXrHx4dorkcN6ze2HXSHTmiiKL43JriRDAPENQt3hEpUItSF2Em/yY+3vWjpuPBF uVxuUXD15W+5XE+1C7M13ZmgIlFeHcmzxzizcOMH3YjBE6KqZdWJrwKz/8PbY28rX8EG 6cW6aS0VMCF3kJUxQzX6uqmMuAwOsQk/HSkJ3MEDM7ipz/kXXndGwkvwp2erF4yQvYhO JaLA== 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=hsL8KMRQY2WJPb1eUjxkVZvaZNqJ34OoRYFZke/IbpQ=; b=HiOH5T8pJY5rcxzX0pGs0v7tS+Fp0HRD5fT688mkYFijdqHgh/iPfox5byxsvjL+SG 6JfAZOv+YrbQJJlFY75p+YVhirmBS2tdCjIon+MPb8k8CYATQfDSIzTT6Ltk6dUF5SJR anZcbeQ4hD4KQ4KolWIiBpBXQ6cWg4uw3d0xejCzzDKMJCJqofv5W2D5I2Ehf/DxsV2e LDcFbR1Cc74VJVSK8GKYX5zLPexwHXxo72va4HxaKCHRZtbxS57VWwyFFbz6V46oz943 pjbkz6PQhuVdt81bJF5XQcmG3sNhbnjh2xrfMZn5/cA3+qyGfZC0RzcnmFzxlAY/YjMI 7hXw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=THjV+Ufx; 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 co15si4327062plb.330.2019.05.09.11.54.55; Thu, 09 May 2019 11:55:11 -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=THjV+Ufx; 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 S1729014AbfEISyI (ORCPT + 99 others); Thu, 9 May 2019 14:54:08 -0400 Received: from mail.kernel.org ([198.145.29.99]:48734 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728256AbfEISyF (ORCPT ); Thu, 9 May 2019 14:54:05 -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 94B9A204FD; Thu, 9 May 2019 18:54:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1557428045; bh=y588Izky8SnyNVqv+CaJcldVbCrc8tfq22LbV1mgVjI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=THjV+UfxSchwZVtui26Lh8ba1PolQI48oxbVKUH95qKEEgFRVCRkEwldUTRG9KGM6 uZ+dOAQ7vF3NMXCpjXVOBtaXEek1/w5ClSM23QSYzfB3SEPZt4wKR5poS2zhWWPFGY vyX+DpQY55k6ugKQ32ulWlBRE/zIQLeIRBBdkga8= 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 5.0 76/95] USB: serial: f81232: fix interrupt worker not stop Date: Thu, 9 May 2019 20:42:33 +0200 Message-Id: <20190509181314.681328937@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190509181309.180685671@linuxfoundation.org> References: <20190509181309.180685671@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 @@ -556,9 +556,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) @@ -632,6 +635,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, @@ -655,6 +692,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[] = {