summaryrefslogtreecommitdiff
path: root/drivers/base
diff options
context:
space:
mode:
authorNicolas Pitre <nico@cam.org>2006-12-04 20:19:31 +0100
committerRussell King <rmk+kernel@arm.linux.org.uk>2006-12-07 16:06:45 +0000
commit838ccbc35eae5b44d47724e5f694dbec4a26d269 (patch)
tree374cd5d33b42cd5464bd45d62193307bc5f994ce /drivers/base
parentfa4adc614922c24601320e55bc5a1f837abad6e9 (diff)
[ARM] 3978/1: macro to provide a 63-bit value from a 32-bit hardware counter
This is done in a completely lockless fashion. Bits 0 to 31 of the count are provided by the hardware while bits 32 to 62 are stored in memory. The top bit in memory is used to synchronize with the hardware count half-period. When the top bit of both counters (hardware and in memory) differ then the memory is updated with a new value, incrementing it when the hardware counter wraps around. Because a word store in memory is atomic then the incremented value will always be in synch with the top bit indicating to any potential concurrent reader if the value in memory is up to date or not wrt the needed increment. And any race in updating the value in memory is harmless as the same value would be stored more than once. Signed-off-by: Nicolas Pitre <nico@cam.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'drivers/base')
0 files changed, 0 insertions, 0 deletions