Rev 557 | Rev 625 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 557 | Rev 623 | ||
|---|---|---|---|
| Line 190... | Line 190... | ||
| 190 | * In order to prevent a race condition when a reader |
190 | * In order to prevent a race condition when a reader |
| 191 | * could block another reader at the head of the waitq, |
191 | * could block another reader at the head of the waitq, |
| 192 | * we register a function to unlock rwl->lock |
192 | * we register a function to unlock rwl->lock |
| 193 | * after this thread is put asleep. |
193 | * after this thread is put asleep. |
| 194 | */ |
194 | */ |
| - | 195 | #ifdef CONFIG_SMP |
|
| 195 | thread_register_call_me(release_spinlock, &rwl->lock); |
196 | thread_register_call_me(release_spinlock, &rwl->lock); |
| - | 197 | #else |
|
| - | 198 | thread_register_call_me(release_spinlock, NULL); |
|
| - | 199 | #endif |
|
| 196 | 200 | ||
| 197 | rc = _mutex_lock_timeout(&rwl->exclusive, usec, trylock); |
201 | rc = _mutex_lock_timeout(&rwl->exclusive, usec, trylock); |
| 198 | switch (rc) { |
202 | switch (rc) { |
| 199 | case ESYNCH_WOULD_BLOCK: |
203 | case ESYNCH_WOULD_BLOCK: |
| 200 | /* |
204 | /* |
| 201 | * release_spinlock() wasn't called |
205 | * release_spinlock() wasn't called |
| 202 | */ |
206 | */ |
| 203 | thread_register_call_me(NULL, NULL); |
207 | thread_register_call_me(NULL, NULL); |
| 204 | spinlock_unlock(&rwl->lock); |
208 | spinlock_unlock(&rwl->lock); |
| 205 | case ESYNCH_TIMEOUT: |
209 | case ESYNCH_TIMEOUT: |
| 206 | /* |
210 | /* |
| 207 | * The sleep timeouted. |
211 | * The sleep timeouted. |
| 208 | * We just restore interrupt priority level. |
212 | * We just restore interrupt priority level. |