Changeset f76fed4 in mainline for generic/src/proc/scheduler.c
- Timestamp:
- 2006-03-03T00:20:31Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 09c18f7
- Parents:
- ddcf365
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
generic/src/proc/scheduler.c
rddcf365 rf76fed4 64 64 { 65 65 before_thread_runs_arch(); 66 66 #ifdef CONFIG_FPU_LAZY 67 67 if(THREAD==CPU->fpu_owner) 68 68 fpu_enable(); 69 69 else 70 70 fpu_disable(); 71 71 #else 72 72 fpu_enable(); 73 73 if (THREAD->fpu_context_exists) 74 fpu_context_restore( &(THREAD->saved_fpu_context));74 fpu_context_restore(THREAD->saved_fpu_context); 75 75 else { 76 fpu_init( &(THREAD->saved_fpu_context));76 fpu_init(); 77 77 THREAD->fpu_context_exists=1; 78 78 } 79 79 #endif 80 80 } 81 81 … … 103 103 if (CPU->fpu_owner != NULL) { 104 104 spinlock_lock(&CPU->fpu_owner->lock); 105 fpu_context_save( &CPU->fpu_owner->saved_fpu_context);105 fpu_context_save(CPU->fpu_owner->saved_fpu_context); 106 106 /* don't prevent migration */ 107 107 CPU->fpu_owner->fpu_context_engaged=0; … … 111 111 spinlock_lock(&THREAD->lock); 112 112 if (THREAD->fpu_context_exists) { 113 fpu_context_restore( &THREAD->saved_fpu_context);113 fpu_context_restore(THREAD->saved_fpu_context); 114 114 } else { 115 fpu_init(&(THREAD->saved_fpu_context)); 115 /* Allocate FPU context */ 116 if (!THREAD->saved_fpu_context) { 117 /* Might sleep */ 118 spinlock_unlock(&THREAD->lock); 119 THREAD->saved_fpu_context = slab_alloc(fpu_context_slab, 120 0); 121 spinlock_lock(&THREAD->lock); 122 } 123 fpu_init(); 116 124 THREAD->fpu_context_exists=1; 117 125 } … … 275 283 if (THREAD) { 276 284 spinlock_lock(&THREAD->lock); 277 278 fpu_context_save( &(THREAD->saved_fpu_context));279 285 #ifndef CONFIG_FPU_LAZY 286 fpu_context_save(THREAD->saved_fpu_context); 287 #endif 280 288 if (!context_save(&THREAD->saved_context)) { 281 289 /* … … 422 430 as_switch(as1, as2); 423 431 } 424 TASK = THREAD->task; 432 TASK = THREAD->task; 425 433 } 426 434 427 435 THREAD->state = Running; 428 436 429 437 #ifdef SCHEDULER_VERBOSE 430 438 printf("cpu%d: tid %d (priority=%d,ticks=%d,nrdy=%d)\n", CPU->id, THREAD->tid, THREAD->priority, THREAD->ticks, atomic_get(&CPU->nrdy)); 431 439 #endif 432 440 433 441 /* … … 547 555 */ 548 556 spinlock_lock(&t->lock); 549 557 #ifdef KCPULB_VERBOSE 550 558 printf("kcpulb%d: TID %d -> cpu%d, nrdy=%d, avg=%d\n", CPU->id, t->tid, CPU->id, atomic_get(&CPU->nrdy), atomic_get(&nrdy) / config.cpu_active); 551 559 #endif 552 560 t->flags |= X_STOLEN; 553 561 spinlock_unlock(&t->lock);
Note:
See TracChangeset
for help on using the changeset viewer.