diff options
author | David Daney <ddaney@caviumnetworks.com> | 2010-01-08 20:17:44 -0500 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2010-02-27 06:53:06 -0500 |
commit | 6b07d38aaa520cee922fadfeaf90c97faf217045 (patch) | |
tree | 3d68d10c95ed7d87fd1692448e3903b801b40e94 /arch/mips/Kconfig | |
parent | f252ffd50c97dae87b45f1dbad24f71358ccfbd6 (diff) |
MIPS: Octeon: Use optimized memory barrier primitives.
In order to achieve correct synchronization semantics, the Octeon port
had defined CONFIG_WEAK_REORDERING_BEYOND_LLSC. This resulted in code
that looks like:
sync
ll ...
.
.
.
sc ...
.
.
sync
The second SYNC was redundant, but harmless.
Octeon has a SYNCW instruction that acts as a write-memory-barrier
(due to an erratum in some parts two SYNCW are used). It is much
faster than SYNC because it imposes ordering on the writes, but
doesn't otherwise stall the execution pipeline. On Octeon, SYNC
stalls execution until all preceeding writes are committed to the
coherent memory system.
Using:
syncw;syncw
ll
.
.
.
sc
.
.
Has identical semantics to the first sequence, but is much faster.
The SYNCW orders the writes, and the SC will not complete successfully
until the write is committed to the coherent memory system. So at the
end all preceeding writes have been committed. Since Octeon does not
do speculative reads, this functions as a full barrier.
The patch removes CONFIG_WEAK_REORDERING_BEYOND_LLSC, and substitutes
SYNCW for SYNC in write-memory-barriers.
Signed-off-by: David Daney <ddaney@caviumnetworks.com>
To: linux-mips@linux-mips.org
Patchwork: http://patchwork.linux-mips.org/patch/850/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips/Kconfig')
-rw-r--r-- | arch/mips/Kconfig | 1 |
1 files changed, 0 insertions, 1 deletions
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index 8b5d174685f0..70376e586315 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig | |||
@@ -1295,7 +1295,6 @@ config CPU_CAVIUM_OCTEON | |||
1295 | select SYS_SUPPORTS_SMP | 1295 | select SYS_SUPPORTS_SMP |
1296 | select NR_CPUS_DEFAULT_16 | 1296 | select NR_CPUS_DEFAULT_16 |
1297 | select WEAK_ORDERING | 1297 | select WEAK_ORDERING |
1298 | select WEAK_REORDERING_BEYOND_LLSC | ||
1299 | select CPU_SUPPORTS_HIGHMEM | 1298 | select CPU_SUPPORTS_HIGHMEM |
1300 | select CPU_SUPPORTS_HUGEPAGES | 1299 | select CPU_SUPPORTS_HUGEPAGES |
1301 | help | 1300 | help |