[PATCH 2/8] ARM: Implement read/write for ownership in theARMv6 DMA cache ops
From: Ronen Shitrit <hidden>
Date: 2010-05-17 06:29:35
Got it, thanks. This is my patch over Catalin original patch for v6_dma_inv_range
--- cache-v6.S 2010-05-17 08:12:18.000000000 +0300
+++ cache-v6.S 2010-05-17 08:16:16.000000000 +0300@@ -210,9 +210,15 @@ #else mcrne p15, 0, r1, c7, c15, 1 @ clean & invalidate unified line #endif -1: #ifdef CONFIG_SMP - str r0, [r0] @ write for ownership + mrs r2, cpsr + orr r3, r2, #PSR_F_BIT | PSR_I_BIT + msr cpsr_c, r3 @ Disable interrupts +1: + ldr r2, [r0] @ read for ownership + str r2, [r0] @ write for ownership +#else +1: #endif #ifdef HARVARD_CACHE mcr p15, 0, r0, c7, c6, 1 @ invalidate D line
@@ -222,6 +228,9 @@ add r0, r0, #D_CACHE_LINE_SIZE cmp r0, r1 blo 1b +#ifdef CONFIG_SMP + msr cpsr_c, r2 @ Restore interrupts +#endif mov r0, #0 mcr p15, 0, r0, c7, c10, 4 @ drain write buffer mov pc, lr -----Original Message-----
From: Russell King - ARM Linux [mailto:linux at arm.linux.org.uk] Sent: Sunday, May 16, 2010 6:01 PM To: Ronen Shitrit Cc: Catalin Marinas; linux-arm-kernel at lists.infradead.org Subject: Re: [PATCH 2/8] ARM: Implement read/write for ownership in theARMv6 DMA cache ops On Sun, May 16, 2010 at 09:29:47AM +0300, Ronen Shitrit wrote:
Our ARMv6 do speculative rd for both I and D cache...
That means doing this read-write for ownership trick can lead to corrupted data on your CPU, since the CPU may prefetch data from the DMA buffer before the unmap has happened. This means Catalin's patch is unsafe for your situation.