lkml.org 
[lkml]   [2009]   [Jan]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
SubjectRe: [PATCH] dmatest: flush and invalidate destination buffer before DMA
From
On Thu, 8 Jan 2009 10:20:56 -0700, "Dan Williams" <dan.j.williams@intel.com> wrote:
> On Thu, Jan 8, 2009 at 1:36 AM, Haavard Skinnemoen
> > I think it does. The dmatest driver should definitely use
> > DMA_BIDIRECTIONAL on the destination buffer to ensure that the poison
> > values are written to RAM and not just written to cache and discarded.
>
> True.
>
> > Now, this probably means that the destination buffer must be _unmapped_
> > with DMA_BIDIRECTIONAL too, which is difficult to do with the current
> > asymmetrical API...
>
> A map and unmap should work for the current platforms with dma
> drivers, but you are right I think this is a violation of the api.
> For correctness we would need the entire operation covered by
> DMA_BIDIRECTIONAL to support platforms that may implement a dma bounce
> buffer. Or, we could change dmatest to not go through the dma-memcpy
> api, allowing dma_alloc to be used for the destination.

Do you mean something like this?

dmatest_init_srcbuf(thread->srcbuf, src_off, len);
dmatest_init_dstbuf(thread->dstbuf, dst_off, len);

dma_src = dma_map_single(dev->dev, src + src_off, len,
DMA_TO_DEVICE);
dma_dest = dma_map_single(dev->dev, dest_buf, test_buf_size,
DMA_BIDIRECTIONAL);
tx = dev->device_prep_dma_memcpy(chan, dma_dest + dst_off,
dma_src, len,
DMA_CTRL_ACK | DMA_COMPL_SKIP_DEST_UNMAP);
if (!tx) {
/* error */
}
tx->callback = NULL;
cookie = tx->tx_submit(tx);
...
/* wait for completion */
...
dma_unmap_single(dev->dev, dma_dest, test_buf_size,
DMA_BIDIRECTIONAL);

It will make dmatest more aggressive, for example, a option for
testing DMA_PREP_INTERRUPT handling of a lowlevel driver can be added
easily.

---
Atsushi Nemoto


\
 
 \ /
  Last update: 2009-01-09 09:33    [W:0.131 / U:0.272 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site