Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp1165208yba; Thu, 9 May 2019 11:49:59 -0700 (PDT) X-Google-Smtp-Source: APXvYqwtc9lBanWer+u/Vje8m/g1ItpIU6WQ0l3j5JpVElGYtH1fNDdzYMYggBMJ2ftOV1nqFvWI X-Received: by 2002:a17:902:363:: with SMTP id 90mr7434433pld.131.1557427799833; Thu, 09 May 2019 11:49:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557427799; cv=none; d=google.com; s=arc-20160816; b=yzI2YDV0DncvPLbfeRd0RF9ktoo65j9m87T8JkZvfxOCYH2dBx0AV/fQyp5e/sXybc WZLxLEnlDXyVKzADzdpoW+Z6tKWmOMePyd1GUoA67oWXcpMu6G6RnbchKhPf4B1al483 jUV95XAEqS21QF0GdpJi6d1CxS5AyTMLCTAbvskWsWrP1qOIYASOofFnYvS3uPxI/k/Z mR0tQDN/EmEZb2onkemb3L/Ls7E8zE2EF2mRjsdD56du6v9X3Y3YeAgRyl0s7LfOaGr1 7c+xJaZLeCTeGHYdkGcfYpCyygeWyVWuIZeYGK5IWt+UV5sKADv7meeU0ao+6Yzqvd54 DJBQ== 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=tPiRodEN5Sub/88tzxBaPRBEsVioIlwvOf0QfB/w+dzMMB1UGw7MPtj6DI7ks995z1 twnEG1INt1wUCyLo8QK88syrcldx7oOAbE1sLHR9Zu2S7QpkljgarqWbvhbgXCagTpQJ aiJjT83V/ZPqFSSCYud01slpMaYsOQfNlS+NXG61eLuRE2UBi6sZkEMs66qsK1U/Rsfj FkiNPJ3zrpshPZRo4tlRL4lSbvgMOWt9l7kN1VIe7AVKC6hrgHGlJv9un2QpIf/1MPoF ly67QyDRdYn/1bEfgWz+WFwq+FULuEGIR1ENRuAifCP6l3pGEl2NB0AlUElw9Y+24MJT t6qA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=ho+mOrIN; 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 i2si4506161pgi.0.2019.05.09.11.49.43; Thu, 09 May 2019 11:49:59 -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=ho+mOrIN; 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 S1727663AbfEISqo (ORCPT + 99 others); Thu, 9 May 2019 14:46:44 -0400 Received: from mail.kernel.org ([198.145.29.99]:39114 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727660AbfEISqn (ORCPT ); Thu, 9 May 2019 14:46:43 -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 8259B2182B; Thu, 9 May 2019 18:46:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1557427603; bh=MOv2AaTh1w0/0TobC/dEXlg7Pdgap2FW3MINoZAneYU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ho+mOrIN5Pk6KwYJ0A9+cC/az5Y9tvWDyoJEJYCL+3ZGnTunJZrarzicUEp9tigNz IigufMwemH3VBt5ch06Gi/cQGsMGdsJrNMxBK91Zu9rofNxZfn80yx3HpZIDPwH6UD nvEKSQggcnu65Ys52Cl4FeAbq//4DsjBpR9KFVqE= 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.14 32/42] USB: serial: f81232: fix interrupt worker not stop Date: Thu, 9 May 2019 20:42:21 +0200 Message-Id: <20190509181259.118772686@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190509181252.616018683@linuxfoundation.org> References: <20190509181252.616018683@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[] = {