summaryrefslogtreecommitdiff
path: root/kern/llsync.c
AgeCommit message (Collapse)Author
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-06-01kern/thread: update creation attributes handlingRichard Braun
Make passing attributes and passing a thread name mandatory.
2013-05-25kern/llsync: replace raw bitmaps with cpumapsRichard Braun
2013-05-24kern/llsync: group related functionsRichard Braun
This minor change groups the reset/commit and register/unregister functions together for better discoverability.
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: fix first processor registrationRichard Braun
Intuitively, registering the first processor should trigger a global checkpoint to get the lockless synchronization system started. It is possible, however, that this case occurs frequently on idle systems, where processors are normally not registered, and only perform load balancing. It can also happen that a processor determines itself as the only registered one whereas reset interrupts have not yet been processed, in which case a global checkpoint should just not occur. The real condition for a global checkpoint is the number of pending checkpoints reaching 0.
2013-05-24kern/llsync: minor refactoringRichard Braun
Move code handling the unregistration of the last processor in the global checkpoint processing function, where list management actually occurs.
2013-05-24kern/llsync: disable interrupts on per-CPU data accessRichard Braun
Not strictly required, but makes things simpler at virtually no cost.
2013-05-24kern/llsync: assume interrupts are disabled on commitRichard Braun
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-24kern/llsync: fix deadlockRichard Braun
2013-05-24kern/llsync: set worker thread processor affinityRichard 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).