Age | Commit message (Collapse) | Author |
|
This change slightly affects the interface by making users directly pass
work objects.
|
|
Make passing attributes and passing a thread name mandatory.
|
|
|
|
This minor change groups the reset/commit and register/unregister functions
together for better discoverability.
|
|
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.
|
|
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.
|
|
Move code handling the unregistration of the last processor in the global
checkpoint processing function, where list management actually occurs.
|
|
Not strictly required, but makes things simpler at virtually no cost.
|
|
|
|
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.
|
|
|
|
|
|
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).
|