Message ID | 20211116112036.96349-3-tudor.ambarus@microchip.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | dmaengine: at_xdmac: Various fixes | expand |
Hi, Le 16/11/2021 à 12:20, Tudor Ambarus a écrit : > The tx_submit() method of struct dma_async_tx_descriptor is entitled > to do sanity checks and return errors if encountered. It's not the > case for the DMA controller drivers that this client is using > (at_h/xdmac), because they currently don't do sanity checks and always > return a positive cookie at tx_submit() method. In case the controller > drivers will implement sanity checks and return errors, print a message > so that the client will be informed that something went wrong at > tx_submit() level. > > Fixes: 08f738be88bb ("serial: at91: add tx dma support") > Signed-off-by: Tudor Ambarus <tudor.ambarus@microchip.com> > --- > drivers/tty/serial/atmel_serial.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/drivers/tty/serial/atmel_serial.c b/drivers/tty/serial/atmel_serial.c > index 2c99a47a2535..376f7a9c2868 100644 > --- a/drivers/tty/serial/atmel_serial.c > +++ b/drivers/tty/serial/atmel_serial.c > @@ -1004,6 +1004,11 @@ static void atmel_tx_dma(struct uart_port *port) > desc->callback = atmel_complete_tx_dma; > desc->callback_param = atmel_port; > atmel_port->cookie_tx = dmaengine_submit(desc); > + if (dma_submit_error(atmel_port->cookie_tx)) { > + dev_err(port->dev, "dma_submit_error %d\n", > + atmel_port->cookie_tx); > + return; > + } > } > > if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS) > @@ -1258,6 +1263,11 @@ static int atmel_prepare_rx_dma(struct uart_port *port) > desc->callback_param = port; > atmel_port->desc_rx = desc; > atmel_port->cookie_rx = dmaengine_submit(desc); > + if (dma_submit_error(atmel_port->cookie_rx)) { > + dev_err(port->dev, "dma_submit_error %d\n", > + atmel_port->cookie_rx); > + goto chan_err; > + } > > return 0; > > Acked-by: Richard Genoud <richard.genoud@gmail.com> Thanks !
diff --git a/drivers/tty/serial/atmel_serial.c b/drivers/tty/serial/atmel_serial.c index 2c99a47a2535..376f7a9c2868 100644 --- a/drivers/tty/serial/atmel_serial.c +++ b/drivers/tty/serial/atmel_serial.c @@ -1004,6 +1004,11 @@ static void atmel_tx_dma(struct uart_port *port) desc->callback = atmel_complete_tx_dma; desc->callback_param = atmel_port; atmel_port->cookie_tx = dmaengine_submit(desc); + if (dma_submit_error(atmel_port->cookie_tx)) { + dev_err(port->dev, "dma_submit_error %d\n", + atmel_port->cookie_tx); + return; + } } if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS) @@ -1258,6 +1263,11 @@ static int atmel_prepare_rx_dma(struct uart_port *port) desc->callback_param = port; atmel_port->desc_rx = desc; atmel_port->cookie_rx = dmaengine_submit(desc); + if (dma_submit_error(atmel_port->cookie_rx)) { + dev_err(port->dev, "dma_submit_error %d\n", + atmel_port->cookie_rx); + goto chan_err; + } return 0;
The tx_submit() method of struct dma_async_tx_descriptor is entitled to do sanity checks and return errors if encountered. It's not the case for the DMA controller drivers that this client is using (at_h/xdmac), because they currently don't do sanity checks and always return a positive cookie at tx_submit() method. In case the controller drivers will implement sanity checks and return errors, print a message so that the client will be informed that something went wrong at tx_submit() level. Fixes: 08f738be88bb ("serial: at91: add tx dma support") Signed-off-by: Tudor Ambarus <tudor.ambarus@microchip.com> --- drivers/tty/serial/atmel_serial.c | 10 ++++++++++ 1 file changed, 10 insertions(+)