summaryrefslogtreecommitdiff
path: root/kern/llsync.h
AgeCommit message (Collapse)Author
2018-02-20kern/llsync: remove moduleRichard Braun
2017-07-25kern/llsync: rename pointer accessorsRichard Braun
2017-07-13Switch to initialization operationsRichard Braun
2017-05-10x86/mb: remove moduleRichard Braun
The mb module has never been well defined, and has become irrelevant now that the kern/atomic module has been introduced. Phase it out until the need for non-SMP memory barriers rises.
2017-05-09kern/llsync: add atomic semantics to pointer accessorsRichard Braun
2017-02-04kern/list: updateRichard Braun
This change includes various fixes and additions, and in particular a subset of lock-less capable variants of the original interface.
2017-01-26kern/{llsync,rdxtree}: don't use llsync until it's readyRichard Braun
2016-12-09Force brackets around one-line conditional statementsRichard Braun
This change was done using astyle, with a few manual editing here and there.
2014-06-10kern/llsync: rework lockless synchronizationRichard Braun
Use a global checkpoint identifier as a generation counter and remove reset interrupts. For some reason I can't remember, using reset interrupts was thought to be more efficient, perhaps because accessing a global variable on each checkpoint looked expensive. But it's really not scalable, and a read-mostly global variable can get cached locally and not incur expensive access. In addition, add a decent amount of documentation about the semantics with regard to the rest of the system. Explicitely state that checkpoints are triggered by context switches and that it's not allowed to block inside read-side critical sections. Make periodic events attempt to trigger checkpoints too. Add a thread-local read-side critical section nesting counter so that it can be reliably determined whether the processor is running a read-side critical section or not.
2014-06-09kern/llsync: rename llsync_read_leave to llsync_read_exitRichard Braun
2013-06-14kern/llsync: rename read-side critical section functionsRichard Braun
Including "lock" in the name of these functions is misleading, since there is no lock object per se.
2013-06-03kern/llsync: use the work module for deferred processingRichard Braun
This change slightly affects the interface by making users directly pass work objects.
2013-05-24kern/llsync: fix checkpoint reset interrupt handlingRichard Braun
This change makes reset requests write both the per-processor flag as well as the checkpoint bitmap atomically, and adjusts the module logic accordingly. It fixes a race between checkpoint reset and system timer interrupts where the timer interrupt would make the local processor commit its checkpoint although it can't be reliably determined that it reached a checkpoint since the last global checkpoint, because the reset interrupt wasn't received yet. This problem would rarely happen on real hardware because of the near-instant handling of IPIs, but it was observed on virtual machines.
2013-05-24kern/llsync: improve concurrencyRichard Braun
Keep a local copy of a processor registration state to avoid acquiring the global lock when attempting to commit a checkpoint from an unregistered processor.
2013-05-16kern/llsync: minor comment fixRichard Braun
2013-05-15kern/llsync: new moduleRichard Braun
This module provides lockless synchronization so that reads can safely occur during updates, without holding a lock. It is based on passive serialization as described in US patent 4809168, and achieves a goal similar to Linux RCU (Read-Copy Update).