diff options
| author | rsc <rsc> | 2007-08-24 20:06:14 +0000 | 
|---|---|---|
| committer | rsc <rsc> | 2007-08-24 20:06:14 +0000 | 
| commit | 5af5f6aa7f52db85f0f22555ae39395dbe68b731 (patch) | |
| tree | 556fe8b50bcf1e65512204c302a0bb5f9a9280b1 | |
| parent | 4bcd0f6a77e20c78632b64fe6ee57129556a531d (diff) | |
| download | xv6-labs-5af5f6aa7f52db85f0f22555ae39395dbe68b731.tar.gz xv6-labs-5af5f6aa7f52db85f0f22555ae39395dbe68b731.tar.bz2 xv6-labs-5af5f6aa7f52db85f0f22555ae39395dbe68b731.zip | |
Reorder spinlock.c: acquire and release first
| -rw-r--r-- | spinlock.c | 51 | 
1 files changed, 26 insertions, 25 deletions
| @@ -18,31 +18,6 @@ initlock(struct spinlock *lock, char *name)    lock->cpu = 0xffffffff;  } -// Record the current call stack in pcs[] by following the %ebp chain. -void -getcallerpcs(void *v, uint pcs[]) -{ -  uint *ebp; -  int i; -   -  ebp = (uint*)v - 2; -  for(i = 0; i < 10; i++){ -    if(ebp == 0 || ebp == (uint*)0xffffffff) -      break; -    pcs[i] = ebp[1];     // saved %eip -    ebp = (uint*)ebp[0]; // saved %ebp -  } -  for(; i < 10; i++) -    pcs[i] = 0; -} - -// Check whether this cpu is holding the lock. -int -holding(struct spinlock *lock) -{ -  return lock->locked && lock->cpu == cpu() + 10; -} -  // Acquire the lock.  // Loops (spins) until the lock is acquired.  // (Because contention is handled by spinning, @@ -90,3 +65,29 @@ release(struct spinlock *lock)    if(--cpus[cpu()].nlock == 0)      sti();  } + +// Record the current call stack in pcs[] by following the %ebp chain. +void +getcallerpcs(void *v, uint pcs[]) +{ +  uint *ebp; +  int i; +   +  ebp = (uint*)v - 2; +  for(i = 0; i < 10; i++){ +    if(ebp == 0 || ebp == (uint*)0xffffffff) +      break; +    pcs[i] = ebp[1];     // saved %eip +    ebp = (uint*)ebp[0]; // saved %ebp +  } +  for(; i < 10; i++) +    pcs[i] = 0; +} + +// Check whether this cpu is holding the lock. +int +holding(struct spinlock *lock) +{ +  return lock->locked && lock->cpu == cpu() + 10; +} + | 
