lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-id: <201212061647.58297.b.zolnierkie@samsung.com> Date: Thu, 06 Dec 2012 16:47:58 +0100 From: Bartlomiej Zolnierkiewicz <b.zolnierkie@...sung.com> To: Dan Williams <djbw@...com> Cc: linux-kernel@...r.kernel.org, linux@....linux.org.uk, vinod.koul@...el.com, Tomasz Figa <t.figa@...sung.com>, Kyungmin Park <kyungmin.park@...sung.com>, dave.jiang@...el.com Subject: Re: [PATCH 04/12] async_memcpy: convert to dmaengine_unmap_data On Thursday 06 December 2012 10:25:31 Dan Williams wrote: > Use the generic unmap object to unmap dma buffers. > > Cc: Tomasz Figa <t.figa@...sung.com> > Cc: Kyungmin Park <kyungmin.park@...sung.com> > Reported-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@...sung.com> > Signed-off-by: Dan Williams <djbw@...com> > --- > crypto/async_tx/async_memcpy.c | 39 ++++++++++++++++++++++----------------- > drivers/dma/dmaengine.c | 3 ++- > include/linux/dmaengine.h | 2 ++ > 3 files changed, 26 insertions(+), 18 deletions(-) > > diff --git a/crypto/async_tx/async_memcpy.c b/crypto/async_tx/async_memcpy.c > index 9e62fef..ca95c4c 100644 > --- a/crypto/async_tx/async_memcpy.c > +++ b/crypto/async_tx/async_memcpy.c > @@ -50,33 +50,36 @@ async_memcpy(struct page *dest, struct page *src, unsigned int dest_offset, > &dest, 1, &src, 1, len); > struct dma_device *device = chan ? chan->device : NULL; > struct dma_async_tx_descriptor *tx = NULL; > + struct dmaengine_unmap_data *unmap = NULL; > > - if (device && is_dma_copy_aligned(device, src_offset, dest_offset, len)) { > - dma_addr_t dma_dest, dma_src; > - unsigned long dma_prep_flags = 0; > + if (device) > + unmap = dmaengine_get_unmap_data(device->dev, 2, GFP_NOIO); > + > + if (unmap && is_dma_copy_aligned(device, src_offset, dest_offset, len)) { > + unsigned long dma_prep_flags = DMA_COMPL_SKIP_SRC_UNMAP | > + DMA_COMPL_SKIP_DEST_UNMAP; > > if (submit->cb_fn) > dma_prep_flags |= DMA_PREP_INTERRUPT; > if (submit->flags & ASYNC_TX_FENCE) > dma_prep_flags |= DMA_PREP_FENCE; > - dma_dest = dma_map_page(device->dev, dest, dest_offset, len, > - DMA_FROM_DEVICE); > - > - dma_src = dma_map_page(device->dev, src, src_offset, len, > - DMA_TO_DEVICE); > - > - tx = device->device_prep_dma_memcpy(chan, dma_dest, dma_src, > - len, dma_prep_flags); > - if (!tx) { > - dma_unmap_page(device->dev, dma_dest, len, > - DMA_FROM_DEVICE); > - dma_unmap_page(device->dev, dma_src, len, > - DMA_TO_DEVICE); > - } > + > + unmap->to_cnt = 1; > + unmap->addr[0] = dma_map_page(device->dev, src, src_offset, len, > + DMA_TO_DEVICE); > + unmap->from_cnt = 1; > + unmap->addr[1] = dma_map_page(device->dev, dest, dest_offset, len, > + DMA_FROM_DEVICE); unmap->len is not set anywhere > + > + tx = device->device_prep_dma_memcpy(chan, unmap->addr[1], > + unmap->addr[0], len, > + dma_prep_flags); > } > > if (tx) { > pr_debug("%s: (async) len: %zu\n", __func__, len); > + > + dma_set_unmap(tx, unmap); > async_tx_submit(chan, tx, submit); > } else { > void *dest_buf, *src_buf; > @@ -96,6 +99,8 @@ async_memcpy(struct page *dest, struct page *src, unsigned int dest_offset, > async_tx_sync_epilog(submit); > } > > + dmaengine_unmap_put(unmap); > + > return tx; > } > EXPORT_SYMBOL_GPL(async_memcpy); Best regards, -- Bartlomiej Zolnierkiewicz Samsung Poland R&D Center -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists