genode/repos/base/src/base
Martin Stein ec6c19a487 base: memory barriers in lock implementations
The memory barrier prevents the compiler from changing the program order
of memory accesses in such a way that accesses to the guarded resource
get outside the guarded stage. As cmpxchg() defines the start of the
guarded stage it also represents an effective memory barrier.

On x86, the architecture ensures to not reorder writes with older reads,
writes to memory with other writes (except in cases that are not
relevant for our locks), or read/write instructions with I/O
instructions, locked instructions, and serializing instructions.

However on ARM, the architectural memory model allows not only that
memory accesses take local effect in another order as their program
order but also that different observers (components that can access
memory like data-busses, TLBs and branch predictors) observe these
effects each in another order. Thus, a correct program order isn't
sufficient for a correct observation order. An additional architectural
preservation of the memory barrier is needed to achieve this.

Fixes #692
2014-11-28 12:02:34 +01:00
..
allocator Move repositories to 'repos/' subdirectory 2014-05-14 16:08:00 +02:00
avl_tree Move repositories to 'repos/' subdirectory 2014-05-14 16:08:00 +02:00
child Move repositories to 'repos/' subdirectory 2014-05-14 16:08:00 +02:00
console Move repositories to 'repos/' subdirectory 2014-05-14 16:08:00 +02:00
cpu base: interface for D- and I-cache synchronization 2014-05-27 11:14:45 +02:00
cxx Move repositories to 'repos/' subdirectory 2014-05-14 16:08:00 +02:00
elf Move repositories to 'repos/' subdirectory 2014-05-14 16:08:00 +02:00
env base: introduce caching attributes (fix #1184) 2014-06-26 10:57:26 +02:00
heap heap: release some memory to the RAM session 2014-10-10 13:02:38 +02:00
include Move repositories to 'repos/' subdirectory 2014-05-14 16:08:00 +02:00
ipc Move repositories to 'repos/' subdirectory 2014-05-14 16:08:00 +02:00
lock base: memory barriers in lock implementations 2014-11-28 12:02:34 +01:00
pager Fix race condition in page fault notification 2014-07-24 10:18:07 +02:00
process Move repositories to 'repos/' subdirectory 2014-05-14 16:08:00 +02:00
server Move repositories to 'repos/' subdirectory 2014-05-14 16:08:00 +02:00
signal Increase slab-block size in signal component 2014-10-10 13:02:29 +02:00
thread Move repositories to 'repos/' subdirectory 2014-05-14 16:08:00 +02:00
README Move repositories to 'repos/' subdirectory 2014-05-14 16:08:00 +02:00

This directory contains the mandatory Genode infrastructure
on which all Genode components rely. Each subdirectory
corresponds to a library.

:Note: Do not mistake the name of this directory with the
  make variable $(BASE_DIR). The make variable refers to
  the top-level directory of the whole Genode source tree.