use asm() for lock release, not a C assignment
This commit is contained in:
parent
d63ac118e8
commit
34c2efc1d0
1 changed files with 4 additions and 2 deletions
|
@ -59,8 +59,10 @@ release(struct spinlock *lk)
|
||||||
// stores; __sync_synchronize() tells them both to not re-order.
|
// stores; __sync_synchronize() tells them both to not re-order.
|
||||||
__sync_synchronize();
|
__sync_synchronize();
|
||||||
|
|
||||||
// Release the lock.
|
// Release the lock, equivalent to lk->locked = 0.
|
||||||
lk->locked = 0;
|
// This code can't use a C assignment, since it might
|
||||||
|
// not be atomic.
|
||||||
|
asm volatile("movl $0, %0" : "+m" (lk->locked) : );
|
||||||
|
|
||||||
popcli();
|
popcli();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue