Skip to content
Snippets Groups Projects
Commit be38c841 authored by rtm's avatar rtm
Browse files

document lock->locked=0 vs xchg(&lock->locked, 0)

parent 0159c8bb
No related branches found
No related tags found
No related merge requests found
......@@ -54,10 +54,14 @@ release(struct spinlock *lock)
lock->cpu = 0xffffffff;
// The xchg serializes, so that reads before release are
// not reordered after it. (This reordering would be allowed
// by the Intel manuals, but does not happen on current
// Intel processors. The xchg being asm volatile also keeps
// gcc from delaying the above assignments.)
// not reordered after it. The 1996 PentiumPro manual (Volume 3,
// 7.2) says reads can be carried out speculatively and in
// any order, which implies we need to serialize here.
// But the 2007 Intel 64 Architecture Memory Ordering White
// Paper says that Intel 64 and IA-32 will not move a load
// after a store. So lock->locked = 0 would work here.
// The xchg being asm volatile ensures gcc emits it after
// the above assignments (and after the critical section).
xchg(&lock->locked, 0);
popcli();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment