Rev 907 | Rev 1062 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 907 | Rev 1007 | ||
|---|---|---|---|
| Line 281... | Line 281... | ||
| 281 | 281 | ||
| 282 | ipl = interrupts_disable(); |
282 | ipl = interrupts_disable(); |
| 283 | 283 | ||
| 284 | if (atomic_get(&haltstate)) |
284 | if (atomic_get(&haltstate)) |
| 285 | halt(); |
285 | halt(); |
| 286 | 286 | ||
| 287 | if (THREAD) { |
287 | if (THREAD) { |
| 288 | spinlock_lock(&THREAD->lock); |
288 | spinlock_lock(&THREAD->lock); |
| 289 | #ifndef CONFIG_FPU_LAZY |
289 | #ifndef CONFIG_FPU_LAZY |
| 290 | fpu_context_save(THREAD->saved_fpu_context); |
290 | fpu_context_save(THREAD->saved_fpu_context); |
| 291 | #endif |
291 | #endif |
| Line 293... | Line 293... | ||
| 293 | /* |
293 | /* |
| 294 | * This is the place where threads leave scheduler(); |
294 | * This is the place where threads leave scheduler(); |
| 295 | */ |
295 | */ |
| 296 | spinlock_unlock(&THREAD->lock); |
296 | spinlock_unlock(&THREAD->lock); |
| 297 | interrupts_restore(THREAD->saved_context.ipl); |
297 | interrupts_restore(THREAD->saved_context.ipl); |
| - | 298 | ||
| 298 | return; |
299 | return; |
| 299 | } |
300 | } |
| 300 | 301 | ||
| 301 | /* |
302 | /* |
| 302 | * Interrupt priority level of preempted thread is recorded here |
303 | * Interrupt priority level of preempted thread is recorded here |
| Line 340... | Line 341... | ||
| 340 | * Assume THREAD->lock is held. |
341 | * Assume THREAD->lock is held. |
| 341 | */ |
342 | */ |
| 342 | void scheduler_separated_stack(void) |
343 | void scheduler_separated_stack(void) |
| 343 | { |
344 | { |
| 344 | int priority; |
345 | int priority; |
| 345 | 346 | ||
| 346 | ASSERT(CPU != NULL); |
347 | ASSERT(CPU != NULL); |
| 347 | 348 | ||
| 348 | if (THREAD) { |
349 | if (THREAD) { |
| 349 | /* must be run after the switch to scheduler stack */ |
350 | /* must be run after the switch to scheduler stack */ |
| 350 | after_thread_ran(); |
351 | after_thread_ran(); |
| 351 | 352 | ||
| 352 | switch (THREAD->state) { |
353 | switch (THREAD->state) { |