Ticket #174: spinlock_yield.diff
| File spinlock_yield.diff, 932 bytes (added by bart, 4 years ago) |
|---|
-
x86_spinlocks.h
25 25 $Id: x86_spinlocks.h 178 2006-03-06 09:08:40Z bart $ 26 26 */ 27 27 28 #ifdef HAVE_SCHED_H 29 # include <sched.h> 30 #endif 31 28 32 typedef struct { volatile unsigned int lock; 29 33 volatile pid_t pid; 30 34 volatile int locked; … … 35 39 #define spinlock_try_lock(rw) asm volatile("lock ; decl %0" :"=m" ((rw)->lock) : : "memory") 36 40 #define _spinlock_unlock(rw) asm volatile("lock ; incl %0" :"=m" ((rw)->lock) : : "memory") 37 41 42 43 #ifdef HAVE_SCHED_YIELD 44 # define yield sched_yield 45 #else 38 46 static inline void yield() 39 47 { 40 48 struct timeval t; … … 43 51 t.tv_usec = 100; 44 52 select(0, NULL, NULL, NULL, &t); 45 53 } 54 #endif 46 55 47 56 static inline void spinlock_unlock(spinlock_t* rw) { 48 57 if (rw->locked && (rw->pid == getpid())) {