linux/arch
Catalin Marinas e7c5650f60 ARM: 5996/1: ARM: Change the mandatory barriers implementation (4/4)
The mandatory barriers (mb, rmb, wmb) are used even on uniprocessor
systems for things like ordering Normal Non-cacheable memory accesses
with DMA transfer (via Device memory writes). The current implementation
uses dmb() for mb() and friends but this is not sufficient. The DMB only
ensures the relative ordering of the observability of accesses by other
processors or devices acting as masters. In case of DMA transfers
started by writes to device memory, the relative ordering is not ensured
because accesses to slave ports of a device are not considered
observable by the DMB definition.

A DSB is required for the data to reach the main memory (even if mapped
as Normal Non-cacheable) before the device receives the notification to
begin the transfer. Furthermore, some L2 cache controllers (like L2x0 or
PL310) buffer stores to Normal Non-cacheable memory and this would need
to be drained with the outer_sync() function call.

The patch also allows platforms to define their own mandatory barriers
implementation by selecting CONFIG_ARCH_HAS_BARRIERS and providing a
mach/barriers.h file.

Note that the SMP barriers are unchanged (being DMBs as before) since
they are only guaranteed to work with Normal Cacheable memory.

Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2010-03-25 21:13:50 +00:00
..
alpha alpha: fix compile errors in dma-mapping-common.h 2010-03-18 22:35:28 -04:00
arm ARM: 5996/1: ARM: Change the mandatory barriers implementation (4/4) 2010-03-25 21:13:50 +00:00
avr32 avr32: use generic ptrace_resume code 2010-03-12 15:52:38 -08:00
blackfin Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/vapier/blackfin 2010-03-18 17:02:35 -07:00
cris Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2010-03-12 16:04:50 -08:00
frv dma-mapping: frv: remove the obsolete and unnecessary DMA API comments 2010-03-12 15:52:42 -08:00
h8300 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2010-03-12 16:04:50 -08:00
ia64 ACPI: processor: driver doesn't need to evaluate _PDC 2010-03-14 21:17:22 -04:00
m32r m32r: use generic ptrace_resume code 2010-03-12 15:52:39 -08:00
m68k Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2010-03-12 16:04:50 -08:00
m68knommu m68knommu: use generic ptrace_resume code 2010-03-12 15:52:38 -08:00
microblaze Merge branch 'for-linus' of git://git.monstr.eu/linux-2.6-microblaze 2010-03-18 16:57:24 -07:00
mips init dynamic bin_attribute structures 2010-03-14 20:28:39 -07:00
mn10300 dma-mapping: mn10300: remove the obsolete and unnecessary DMA API comments 2010-03-12 15:52:42 -08:00
parisc pci-dma: add linux/pci-dma.h to linux/pci.h 2010-03-12 15:52:42 -08:00
powerpc Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc 2010-03-19 13:42:43 -07:00
s390 [S390] fix boot failures with compressed kernels 2010-03-24 11:49:54 +01:00
score ptrace: move user_enable_single_step & co prototypes to linux/ptrace.h 2010-03-12 15:52:38 -08:00
sh sh: Silence unintialized variable warnings in dwarf unwinder. 2010-03-23 17:07:41 +09:00
sparc Merge branch 'perf-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2010-03-13 14:39:42 -08:00
um um: remove dma_sync_single_range 2010-03-12 15:52:40 -08:00
x86 x86 / perf: Fix suspend to RAM on HP nx6325 2010-03-22 09:57:19 -07:00
xtensa Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2010-03-12 16:04:50 -08:00
.gitignore
Kconfig Merge branch 'perf-probes-for-linus-2' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2010-03-05 10:50:22 -08:00