comment memory barriers
This commit is contained in:
parent
0b75a8e8be
commit
e7a5b3c5ee
1 changed files with 8 additions and 1 deletions
|
@ -50,6 +50,10 @@ acquire(struct spinlock *lock)
|
|||
|
||||
while(cmpxchg(0, 1, &lock->locked) == 1)
|
||||
;
|
||||
|
||||
// Now that lock is acquired, make sure
|
||||
// we wait for all pending writes from other
|
||||
// processors.
|
||||
cpuid(0, 0, 0, 0, 0); // memory barrier
|
||||
|
||||
// Record info about lock acquisition for debugging.
|
||||
|
@ -64,13 +68,16 @@ acquire(struct spinlock *lock)
|
|||
void
|
||||
release(struct spinlock *lock)
|
||||
{
|
||||
|
||||
if(!holding(lock))
|
||||
panic("release");
|
||||
|
||||
lock->pcs[0] = 0;
|
||||
lock->cpu = 0xffffffff;
|
||||
|
||||
// Before unlocking the lock, make sure to flush
|
||||
// any pending memory writes from this processor.
|
||||
cpuid(0, 0, 0, 0, 0); // memory barrier
|
||||
|
||||
lock->locked = 0;
|
||||
if(--cpus[cpu()].nlock == 0)
|
||||
sti();
|
||||
|
|
Loading…
Reference in a new issue