Thread (64 messages) 64 messages, 5 authors, 2010-05-28
STALE5871d

[PATCH 2/8] ARM: Implement read/write for ownership in theARMv6 DMA cache ops

From: Ronen Shitrit <hidden>
Date: 2010-05-13 05:27:02

Our ARM v6 does have speculative prefetch...

Sent from my phone

On 13/05/2010, at 00:21, "Catalin Marinas" [off-list ref]  
wrote:
On Wed, 2010-05-12 at 19:59 +0100, Russell King - ARM Linux wrote:
quoted
On Wed, May 12, 2010 at 07:48:52PM +0100, Russell King - ARM Linux  
wrote:
quoted
Aren't there CPUs which speculatively prefetch _and_ which don't  
have
broadcast cache ops?  If yes, then we can't use the "read/write to
gain ownership" approach - and since we can't use IPIs either, I  
think
we're sadly boxed in by hardware restrictions to the point of not  
being
able to run with DMA on these CPUs.
I just had a second thought that what I wrote above was tosh, but  
then
had a third thought which reconfirmed it as a valid point...

Consider if the CPU speculatively prefetches the line you're going to
read before the DMA has completed, and it prefetches the pre-DMA  
data.
I won't consider this scenario :). For such cores there isn't an easy
workaround to the DMA cache operations. Even with IPI via FIQ, you may
still have the risk of cache lines migrating around CPUs and missing  
the
cache flushing.

AFAICT, ARM11MPCore doesn't do this.
quoted
Since my implementation of v6_dma_inv_range is destructive, I  
removed it
from dma_unmap_area() with the precondition that the CPU doesn't do
speculative accesses. With my patch, the dma_unmap_area() doesn't  
change
the content of the SDRAM.

I don't entirely understand why corruption happens with the e1000  
driver
(looking at the e1000.c code it uses consistent memory).

-- 
Catalin
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help