From: Erwan Le Ray <erwan.leray@foss.st.com> To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Jiri Slaby <jslaby@suse.com>, Rob Herring <robh+dt@kernel.org>, Maxime Coquelin <mcoquelin.stm32@gmail.com>, Alexandre Torgue <alexandre.torgue@foss.st.com> Cc: <linux-serial@vger.kernel.org>, <devicetree@vger.kernel.org>, <linux-stm32@st-md-mailman.stormreply.com>, <linux-arm-kernel@lists.infradead.org>, <linux-kernel@vger.kernel.org>, Erwan Le Ray <erwan.leray@foss.st.com>, Fabrice Gasnier <fabrice.gasnier@foss.st.com>, Valentin Caron <valentin.caron@foss.st.com> Subject: [PATCH v2 1/8] serial: stm32: fix DMA initialization error handling Date: Wed, 6 Jan 2021 17:21:56 +0100 [thread overview] Message-ID: <20210106162203.28854-2-erwan.leray@foss.st.com> (raw) In-Reply-To: <20210106162203.28854-1-erwan.leray@foss.st.com> DMA initialization error handling is not properly implemented in the driver. Fix DMA initialization error handling by: - moving TX DMA descriptor request error handling in a new dedicated fallback_err label - adding error handling to TX DMA descriptor submission - adding error handling to RX DMA descriptor submission This patch depends on '24832ca3ee85 ("tty: serial: stm32-usart: Remove set but unused 'cookie' variables")' which unfortunately doesn't include a "Fixes" tag. Fixes: 3489187204eb ("serial: stm32: adding dma support") Signed-off-by: Erwan Le Ray <erwan.leray@foss.st.com> --- Changes in v2: - delete DMA cookie variables removal from V1 patch as already done by a previous patch - update commit message as DMA cookie variables removal is no more included in this patch diff --git a/drivers/tty/serial/stm32-usart.c b/drivers/tty/serial/stm32-usart.c index f4de32d3f2af..6248304a001f 100644 --- a/drivers/tty/serial/stm32-usart.c +++ b/drivers/tty/serial/stm32-usart.c @@ -383,17 +383,18 @@ static void stm32_transmit_chars_dma(struct uart_port *port) DMA_MEM_TO_DEV, DMA_PREP_INTERRUPT); - if (!desc) { - for (i = count; i > 0; i--) - stm32_transmit_chars_pio(port); - return; - } + if (!desc) + goto fallback_err; desc->callback = stm32_tx_dma_complete; desc->callback_param = port; /* Push current DMA TX transaction in the pending queue */ - dmaengine_submit(desc); + if (dma_submit_error(dmaengine_submit(desc))) { + /* dma no yet started, safe to free resources */ + dmaengine_terminate_async(stm32port->tx_ch); + goto fallback_err; + } /* Issue pending DMA TX requests */ dma_async_issue_pending(stm32port->tx_ch); @@ -402,6 +403,11 @@ static void stm32_transmit_chars_dma(struct uart_port *port) xmit->tail = (xmit->tail + count) & (UART_XMIT_SIZE - 1); port->icount.tx += count; + return; + +fallback_err: + for (i = count; i > 0; i--) + stm32_transmit_chars_pio(port); } static void stm32_transmit_chars(struct uart_port *port) @@ -1130,7 +1136,11 @@ static int stm32_of_dma_rx_probe(struct stm32_port *stm32port, desc->callback_param = NULL; /* Push current DMA transaction in the pending queue */ - dmaengine_submit(desc); + ret = dma_submit_error(dmaengine_submit(desc)); + if (ret) { + dmaengine_terminate_sync(stm32port->rx_ch); + goto config_err; + } /* Issue pending DMA requests */ dma_async_issue_pending(stm32port->rx_ch); -- 2.17.1
WARNING: multiple messages have this Message-ID (diff)
From: Erwan Le Ray <erwan.leray@foss.st.com> To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Jiri Slaby <jslaby@suse.com>, Rob Herring <robh+dt@kernel.org>, Maxime Coquelin <mcoquelin.stm32@gmail.com>, Alexandre Torgue <alexandre.torgue@foss.st.com> Cc: devicetree@vger.kernel.org, Valentin Caron <valentin.caron@foss.st.com>, Erwan Le Ray <erwan.leray@foss.st.com>, linux-kernel@vger.kernel.org, Fabrice Gasnier <fabrice.gasnier@foss.st.com>, linux-serial@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org Subject: [PATCH v2 1/8] serial: stm32: fix DMA initialization error handling Date: Wed, 6 Jan 2021 17:21:56 +0100 [thread overview] Message-ID: <20210106162203.28854-2-erwan.leray@foss.st.com> (raw) In-Reply-To: <20210106162203.28854-1-erwan.leray@foss.st.com> DMA initialization error handling is not properly implemented in the driver. Fix DMA initialization error handling by: - moving TX DMA descriptor request error handling in a new dedicated fallback_err label - adding error handling to TX DMA descriptor submission - adding error handling to RX DMA descriptor submission This patch depends on '24832ca3ee85 ("tty: serial: stm32-usart: Remove set but unused 'cookie' variables")' which unfortunately doesn't include a "Fixes" tag. Fixes: 3489187204eb ("serial: stm32: adding dma support") Signed-off-by: Erwan Le Ray <erwan.leray@foss.st.com> --- Changes in v2: - delete DMA cookie variables removal from V1 patch as already done by a previous patch - update commit message as DMA cookie variables removal is no more included in this patch diff --git a/drivers/tty/serial/stm32-usart.c b/drivers/tty/serial/stm32-usart.c index f4de32d3f2af..6248304a001f 100644 --- a/drivers/tty/serial/stm32-usart.c +++ b/drivers/tty/serial/stm32-usart.c @@ -383,17 +383,18 @@ static void stm32_transmit_chars_dma(struct uart_port *port) DMA_MEM_TO_DEV, DMA_PREP_INTERRUPT); - if (!desc) { - for (i = count; i > 0; i--) - stm32_transmit_chars_pio(port); - return; - } + if (!desc) + goto fallback_err; desc->callback = stm32_tx_dma_complete; desc->callback_param = port; /* Push current DMA TX transaction in the pending queue */ - dmaengine_submit(desc); + if (dma_submit_error(dmaengine_submit(desc))) { + /* dma no yet started, safe to free resources */ + dmaengine_terminate_async(stm32port->tx_ch); + goto fallback_err; + } /* Issue pending DMA TX requests */ dma_async_issue_pending(stm32port->tx_ch); @@ -402,6 +403,11 @@ static void stm32_transmit_chars_dma(struct uart_port *port) xmit->tail = (xmit->tail + count) & (UART_XMIT_SIZE - 1); port->icount.tx += count; + return; + +fallback_err: + for (i = count; i > 0; i--) + stm32_transmit_chars_pio(port); } static void stm32_transmit_chars(struct uart_port *port) @@ -1130,7 +1136,11 @@ static int stm32_of_dma_rx_probe(struct stm32_port *stm32port, desc->callback_param = NULL; /* Push current DMA transaction in the pending queue */ - dmaengine_submit(desc); + ret = dma_submit_error(dmaengine_submit(desc)); + if (ret) { + dmaengine_terminate_sync(stm32port->rx_ch); + goto config_err; + } /* Issue pending DMA requests */ dma_async_issue_pending(stm32port->rx_ch); -- 2.17.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2021-01-06 16:23 UTC|newest] Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-01-06 16:21 [PATCH 0/7] STM32 uart cleanup and improvements Erwan Le Ray 2021-01-06 16:21 ` Erwan Le Ray 2021-01-06 16:21 ` Erwan Le Ray [this message] 2021-01-06 16:21 ` [PATCH v2 1/8] serial: stm32: fix DMA initialization error handling Erwan Le Ray 2021-01-06 16:21 ` [PATCH v2 2/8] serial: stm32: fix code cleaning warnings and checks Erwan Le Ray 2021-01-06 16:21 ` Erwan Le Ray 2021-01-11 9:58 ` Jiri Slaby 2021-01-11 9:58 ` Jiri Slaby 2021-01-12 10:02 ` Erwan LE RAY 2021-01-12 10:02 ` Erwan LE RAY 2021-01-12 10:24 ` Greg Kroah-Hartman 2021-01-12 10:24 ` Greg Kroah-Hartman 2021-01-06 16:21 ` [PATCH v2 3/8] serial: stm32: add "_usart" prefix in functions name Erwan Le Ray 2021-01-06 16:21 ` Erwan Le Ray 2021-01-06 16:21 ` [PATCH v2 4/8] serial: stm32: add author Erwan Le Ray 2021-01-06 16:21 ` Erwan Le Ray 2021-01-11 9:59 ` Jiri Slaby 2021-01-11 9:59 ` Jiri Slaby 2021-01-06 16:22 ` [PATCH v2 5/8] dt-bindings: serial: stm32: update rts-gpios and cts-gpios Erwan Le Ray 2021-01-06 16:22 ` Erwan Le Ray 2021-01-06 16:22 ` [PATCH v2 6/8] serial: stm32: update conflicting RTS/CTS config comment Erwan Le Ray 2021-01-06 16:22 ` Erwan Le Ray 2021-01-06 16:22 ` [PATCH v2 7/8] serial: stm32: clean probe and remove port deinit Erwan Le Ray 2021-01-06 16:22 ` Erwan Le Ray 2021-01-06 16:22 ` [PATCH v2 8/8] serial: stm32: update transmission complete error message in shutdown Erwan Le Ray 2021-01-06 16:22 ` Erwan Le Ray
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20210106162203.28854-2-erwan.leray@foss.st.com \ --to=erwan.leray@foss.st.com \ --cc=alexandre.torgue@foss.st.com \ --cc=devicetree@vger.kernel.org \ --cc=fabrice.gasnier@foss.st.com \ --cc=gregkh@linuxfoundation.org \ --cc=jslaby@suse.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-serial@vger.kernel.org \ --cc=linux-stm32@st-md-mailman.stormreply.com \ --cc=mcoquelin.stm32@gmail.com \ --cc=robh+dt@kernel.org \ --cc=valentin.caron@foss.st.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.