mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
crypto: atmel-tdes - simplify DMA buffer initialization
Calculate the buffer length in a single statement and simplify the error handling. Inline the dma_mapping_error() checks and return -ENOMEM from the common error path. If mapping the output buffer fails, unmap the previously mapped input buffer first. Also use dev_err() to log errors and %zu to format size_t, and clarify the error messages. Signed-off-by: Thorsten Blum <blum@kernel.org> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
356892abad
commit
f69442515f
|
|
@ -308,45 +308,33 @@ static int atmel_tdes_crypt_pdc_stop(struct atmel_tdes_dev *dd)
|
|||
|
||||
static int atmel_tdes_buff_init(struct atmel_tdes_dev *dd)
|
||||
{
|
||||
int err = -ENOMEM;
|
||||
|
||||
dd->buf_in = (void *)__get_free_page(GFP_KERNEL);
|
||||
dd->buf_out = (void *)__get_free_page(GFP_KERNEL);
|
||||
dd->buflen = PAGE_SIZE;
|
||||
dd->buflen &= ~(DES_BLOCK_SIZE - 1);
|
||||
dd->buflen = PAGE_SIZE & ~(DES_BLOCK_SIZE - 1);
|
||||
|
||||
if (!dd->buf_in || !dd->buf_out) {
|
||||
dev_dbg(dd->dev, "unable to alloc pages.\n");
|
||||
dev_err(dd->dev, "failed to allocate DMA buffers\n");
|
||||
goto err_alloc;
|
||||
}
|
||||
|
||||
/* MAP here */
|
||||
dd->dma_addr_in = dma_map_single(dd->dev, dd->buf_in,
|
||||
dd->buflen, DMA_TO_DEVICE);
|
||||
err = dma_mapping_error(dd->dev, dd->dma_addr_in);
|
||||
if (err) {
|
||||
dev_dbg(dd->dev, "dma %zd bytes error\n", dd->buflen);
|
||||
goto err_map_in;
|
||||
}
|
||||
dd->dma_addr_in = dma_map_single(dd->dev, dd->buf_in, dd->buflen, DMA_TO_DEVICE);
|
||||
if (dma_mapping_error(dd->dev, dd->dma_addr_in))
|
||||
goto err_map;
|
||||
|
||||
dd->dma_addr_out = dma_map_single(dd->dev, dd->buf_out,
|
||||
dd->buflen, DMA_FROM_DEVICE);
|
||||
err = dma_mapping_error(dd->dev, dd->dma_addr_out);
|
||||
if (err) {
|
||||
dev_dbg(dd->dev, "dma %zd bytes error\n", dd->buflen);
|
||||
goto err_map_out;
|
||||
dd->dma_addr_out = dma_map_single(dd->dev, dd->buf_out, dd->buflen, DMA_FROM_DEVICE);
|
||||
if (dma_mapping_error(dd->dev, dd->dma_addr_out)) {
|
||||
dma_unmap_single(dd->dev, dd->dma_addr_in, dd->buflen, DMA_TO_DEVICE);
|
||||
goto err_map;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
err_map_out:
|
||||
dma_unmap_single(dd->dev, dd->dma_addr_in, dd->buflen,
|
||||
DMA_TO_DEVICE);
|
||||
err_map_in:
|
||||
err_map:
|
||||
dev_err(dd->dev, "failed to map %zu bytes for DMA\n", dd->buflen);
|
||||
err_alloc:
|
||||
free_page((unsigned long)dd->buf_out);
|
||||
free_page((unsigned long)dd->buf_in);
|
||||
return err;
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
static void atmel_tdes_buff_cleanup(struct atmel_tdes_dev *dd)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user