Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d4089a33 authored by Heikki Krogerus's avatar Heikki Krogerus Committed by Greg Kroah-Hartman
Browse files

serial: 8250_dma: check the result of TX buffer mapping



Using dma_mapping_error() to make sure the mapping did not
fail.

Signed-off-by: default avatarHeikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 06aa82e4
Loading
Loading
Loading
Loading
+12 −5
Original line number Diff line number Diff line
@@ -192,21 +192,28 @@ int serial8250_request_dma(struct uart_8250_port *p)

	dma->rx_buf = dma_alloc_coherent(dma->rxchan->device->dev, dma->rx_size,
					&dma->rx_addr, GFP_KERNEL);
	if (!dma->rx_buf) {
		dma_release_channel(dma->rxchan);
		dma_release_channel(dma->txchan);
		return -ENOMEM;
	}
	if (!dma->rx_buf)
		goto err;

	/* TX buffer */
	dma->tx_addr = dma_map_single(dma->txchan->device->dev,
					p->port.state->xmit.buf,
					UART_XMIT_SIZE,
					DMA_TO_DEVICE);
	if (dma_mapping_error(dma->txchan->device->dev, dma->tx_addr)) {
		dma_free_coherent(dma->rxchan->device->dev, dma->rx_size,
				  dma->rx_buf, dma->rx_addr);
		goto err;
	}

	dev_dbg_ratelimited(p->port.dev, "got both dma channels\n");

	return 0;
err:
	dma_release_channel(dma->rxchan);
	dma_release_channel(dma->txchan);

	return -ENOMEM;
}
EXPORT_SYMBOL_GPL(serial8250_request_dma);