From patchwork Fri Jun 29 14:25:12 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geert Uytterhoeven X-Patchwork-Id: 10496699 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 06E5C60325 for ; Fri, 29 Jun 2018 14:25:31 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E2D3929173 for ; Fri, 29 Jun 2018 14:25:30 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D6BBB292F5; Fri, 29 Jun 2018 14:25:30 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00, MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C6E9F2929E for ; Fri, 29 Jun 2018 14:25:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932809AbeF2OZ1 (ORCPT ); Fri, 29 Jun 2018 10:25:27 -0400 Received: from baptiste.telenet-ops.be ([195.130.132.51]:37708 "EHLO baptiste.telenet-ops.be" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755467AbeF2OZW (ORCPT ); Fri, 29 Jun 2018 10:25:22 -0400 Received: from ayla.of.borg ([84.194.111.163]) by baptiste.telenet-ops.be with bizsmtp id 4eRL1y00W3XaVaC01eRLLu; Fri, 29 Jun 2018 16:25:21 +0200 Received: from rox.of.borg ([192.168.97.57]) by ayla.of.borg with esmtp (Exim 4.86_2) (envelope-from ) id 1fYuKu-0006sM-Go; Fri, 29 Jun 2018 16:25:20 +0200 Received: from geert by rox.of.borg with local (Exim 4.90_1) (envelope-from ) id 1fYuKu-0005Ph-FK; Fri, 29 Jun 2018 16:25:20 +0200 From: Geert Uytterhoeven To: Greg Kroah-Hartman , Jiri Slaby , Laurent Pinchart , Ulrich Hecht , Wolfram Sang Cc: linux-serial@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-sh@vger.kernel.org, Geert Uytterhoeven Subject: [PATCH 3/4] serial: sh-sci: Stop TX DMA workqueue during port shutdown Date: Fri, 29 Jun 2018 16:25:12 +0200 Message-Id: <20180629142513.20743-7-geert+renesas@glider.be> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180629142513.20743-1-geert+renesas@glider.be> References: <20180629142513.20743-1-geert+renesas@glider.be> Sender: linux-sh-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-sh@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The transmit DMA workqueue is never stopped, hence the work function may be called after the port has been shut down. Fix this race condition by cancelling queued work, if any, before DMA release. Don't initialize the work if DMA initialization failed, as it won't be used anyway. Signed-off-by: Geert Uytterhoeven --- drivers/tty/serial/sh-sci.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c index 061660ccf9442d02..58016386558c6789 100644 --- a/drivers/tty/serial/sh-sci.c +++ b/drivers/tty/serial/sh-sci.c @@ -1704,6 +1704,7 @@ static void sci_tx_dma_release(struct sci_port *s) struct dma_chan *chan = s->chan_tx_saved; struct uart_port *port = &s->port; + cancel_work_sync(&s->work_tx); dev_dbg_dma(port->dev, "%s\n", __func__); s->chan_tx_saved = s->chan_tx = NULL; s->cookie_tx = -EINVAL; @@ -1978,10 +1979,9 @@ static void sci_request_dma(struct uart_port *port) UART_XMIT_SIZE, port->state->xmit.buf, &s->tx_dma_addr); + INIT_WORK(&s->work_tx, work_fn_tx); s->chan_tx_saved = s->chan_tx = chan; } - - INIT_WORK(&s->work_tx, work_fn_tx); } chan = sci_request_dma_chan(port, DMA_DEV_TO_MEM);