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)
|
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
|
cpuid(0, 0, 0, 0, 0); // memory barrier
|
||||||
|
|
||||||
// Record info about lock acquisition for debugging.
|
// Record info about lock acquisition for debugging.
|
||||||
|
@ -64,13 +68,16 @@ acquire(struct spinlock *lock)
|
||||||
void
|
void
|
||||||
release(struct spinlock *lock)
|
release(struct spinlock *lock)
|
||||||
{
|
{
|
||||||
|
|
||||||
if(!holding(lock))
|
if(!holding(lock))
|
||||||
panic("release");
|
panic("release");
|
||||||
|
|
||||||
lock->pcs[0] = 0;
|
lock->pcs[0] = 0;
|
||||||
lock->cpu = 0xffffffff;
|
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
|
cpuid(0, 0, 0, 0, 0); // memory barrier
|
||||||
|
|
||||||
lock->locked = 0;
|
lock->locked = 0;
|
||||||
if(--cpus[cpu()].nlock == 0)
|
if(--cpus[cpu()].nlock == 0)
|
||||||
sti();
|
sti();
|
||||||
|
|
Loading…
Reference in a new issue