- Timestamp:
- 2005-10-17T23:31:41Z (20 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 4b2c872d
- Parents:
- 75eacab
- Location:
- src/synch
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
src/synch/rwlock.c
r75eacab r22f7769 97 97 int _rwlock_write_lock_timeout(rwlock_t *rwl, __u32 usec, int trylock) 98 98 { 99 pri_t pri;99 ipl_t ipl; 100 100 int rc; 101 101 102 pri = cpu_priority_high();102 ipl = interrupts_disable(); 103 103 spinlock_lock(&THREAD->lock); 104 104 THREAD->rwlock_holder_type = RWLOCK_WRITER; 105 105 spinlock_unlock(&THREAD->lock); 106 cpu_priority_restore(pri);106 interrupts_restore(ipl); 107 107 108 108 /* … … 119 119 */ 120 120 121 pri = cpu_priority_high();121 ipl = interrupts_disable(); 122 122 spinlock_lock(&rwl->lock); 123 123 /* … … 129 129 let_others_in(rwl, ALLOW_READERS_ONLY); 130 130 spinlock_unlock(&rwl->lock); 131 cpu_priority_restore(pri);131 interrupts_restore(ipl); 132 132 } 133 133 … … 152 152 { 153 153 int rc; 154 pri_t pri;155 156 pri = cpu_priority_high();154 ipl_t ipl; 155 156 ipl = interrupts_disable(); 157 157 spinlock_lock(&THREAD->lock); 158 158 THREAD->rwlock_holder_type = RWLOCK_READER; … … 205 205 /* 206 206 * The sleep timeouted. 207 * We just restore the cpu priority.207 * We just restore interrupt priority level. 208 208 */ 209 209 case ESYNCH_OK_BLOCKED: … … 216 216 * rwl->lock is held.) 217 217 */ 218 cpu_priority_restore(pri);218 interrupts_restore(ipl); 219 219 break; 220 220 case ESYNCH_OK_ATOMIC: … … 237 237 238 238 spinlock_unlock(&rwl->lock); 239 cpu_priority_restore(pri);239 interrupts_restore(ipl); 240 240 241 241 return ESYNCH_OK_ATOMIC; … … 252 252 void rwlock_write_unlock(rwlock_t *rwl) 253 253 { 254 pri_t pri;255 256 pri = cpu_priority_high();254 ipl_t ipl; 255 256 ipl = interrupts_disable(); 257 257 spinlock_lock(&rwl->lock); 258 258 let_others_in(rwl, ALLOW_ALL); 259 259 spinlock_unlock(&rwl->lock); 260 cpu_priority_restore(pri);260 interrupts_restore(ipl); 261 261 262 262 } … … 273 273 void rwlock_read_unlock(rwlock_t *rwl) 274 274 { 275 pri_t pri;276 277 pri = cpu_priority_high();275 ipl_t ipl; 276 277 ipl = interrupts_disable(); 278 278 spinlock_lock(&rwl->lock); 279 279 if (!--rwl->readers_in) 280 280 let_others_in(rwl, ALLOW_ALL); 281 281 spinlock_unlock(&rwl->lock); 282 cpu_priority_restore(pri);282 interrupts_restore(ipl); 283 283 } 284 284 … … 290 290 * 291 291 * Must be called with rwl->lock locked. 292 * Must be called with cpu_priority_high'ed.292 * Must be called with interrupts_disable()'d. 293 293 * 294 294 * @param rwl Reader/Writer lock. -
src/synch/semaphore.c
r75eacab r22f7769 43 43 void semaphore_initialize(semaphore_t *s, int val) 44 44 { 45 pri_t pri;45 ipl_t ipl; 46 46 47 47 waitq_initialize(&s->wq); 48 48 49 pri = cpu_priority_high();49 ipl = interrupts_disable(); 50 50 51 51 spinlock_lock(&s->wq.lock); … … 53 53 spinlock_unlock(&s->wq.lock); 54 54 55 cpu_priority_restore(pri);55 interrupts_restore(ipl); 56 56 } 57 57 -
src/synch/waitq.c
r75eacab r22f7769 138 138 int waitq_sleep_timeout(waitq_t *wq, __u32 usec, int nonblocking) 139 139 { 140 volatile pri_t pri; /* must be live after context_restore() */140 volatile ipl_t ipl; /* must be live after context_restore() */ 141 141 142 142 143 143 restart: 144 pri = cpu_priority_high();144 ipl = interrupts_disable(); 145 145 146 146 /* … … 154 154 if (THREAD->timeout_pending) { 155 155 spinlock_unlock(&THREAD->lock); 156 cpu_priority_restore(pri);156 interrupts_restore(ipl); 157 157 goto restart; 158 158 } … … 165 165 wq->missed_wakeups--; 166 166 spinlock_unlock(&wq->lock); 167 cpu_priority_restore(pri);167 interrupts_restore(ipl); 168 168 return ESYNCH_OK_ATOMIC; 169 169 } … … 172 172 /* return immediatelly instead of going to sleep */ 173 173 spinlock_unlock(&wq->lock); 174 cpu_priority_restore(pri);174 interrupts_restore(ipl); 175 175 return ESYNCH_WOULD_BLOCK; 176 176 } … … 190 190 before_thread_runs(); 191 191 spinlock_unlock(&THREAD->lock); 192 cpu_priority_restore(pri);192 interrupts_restore(ipl); 193 193 return ESYNCH_TIMEOUT; 194 194 } … … 208 208 209 209 scheduler(); /* wq->lock is released in scheduler_separated_stack() */ 210 cpu_priority_restore(pri);210 interrupts_restore(ipl); 211 211 212 212 return ESYNCH_OK_BLOCKED; … … 229 229 void waitq_wakeup(waitq_t *wq, int all) 230 230 { 231 pri_t pri;232 233 pri = cpu_priority_high();231 ipl_t ipl; 232 233 ipl = interrupts_disable(); 234 234 spinlock_lock(&wq->lock); 235 235 … … 237 237 238 238 spinlock_unlock(&wq->lock); 239 cpu_priority_restore(pri);239 interrupts_restore(ipl); 240 240 } 241 241
Note:
See TracChangeset
for help on using the changeset viewer.