Rev 2071 | Rev 2089 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2071 | Rev 2087 | ||
---|---|---|---|
Line 358... | Line 358... | ||
358 | * Therefore the scheduler() function continues in |
358 | * Therefore the scheduler() function continues in |
359 | * scheduler_separated_stack(). |
359 | * scheduler_separated_stack(). |
360 | */ |
360 | */ |
361 | context_save(&CPU->saved_context); |
361 | context_save(&CPU->saved_context); |
362 | context_set(&CPU->saved_context, FADDR(scheduler_separated_stack), |
362 | context_set(&CPU->saved_context, FADDR(scheduler_separated_stack), |
363 | (uintptr_t) CPU->stack, CPU_STACK_SIZE); |
363 | (uintptr_t) CPU->stack, CPU_STACK_SIZE); |
364 | context_restore(&CPU->saved_context); |
364 | context_restore(&CPU->saved_context); |
365 | /* not reached */ |
365 | /* not reached */ |
366 | } |
366 | } |
367 | 367 | ||
368 | /** Scheduler stack switch wrapper |
368 | /** Scheduler stack switch wrapper |
Line 498... | Line 498... | ||
498 | spinlock_lock(&THREAD->lock); |
498 | spinlock_lock(&THREAD->lock); |
499 | THREAD->state = Running; |
499 | THREAD->state = Running; |
500 | 500 | ||
501 | #ifdef SCHEDULER_VERBOSE |
501 | #ifdef SCHEDULER_VERBOSE |
502 | printf("cpu%d: tid %d (priority=%d, ticks=%lld, nrdy=%ld)\n", |
502 | printf("cpu%d: tid %d (priority=%d, ticks=%lld, nrdy=%ld)\n", |
503 | CPU->id, THREAD->tid, THREAD->priority, THREAD->ticks, |
503 | CPU->id, THREAD->tid, THREAD->priority, THREAD->ticks, |
504 | atomic_get(&CPU->nrdy)); |
504 | atomic_get(&CPU->nrdy)); |
505 | #endif |
505 | #endif |
506 | 506 | ||
507 | /* |
507 | /* |
508 | * Some architectures provide late kernel PA2KA(identity) |
508 | * Some architectures provide late kernel PA2KA(identity) |
509 | * mapping in a page fault handler. However, the page fault |
509 | * mapping in a page fault handler. However, the page fault |
Line 633... | Line 633... | ||
633 | * Ready t on local CPU |
633 | * Ready t on local CPU |
634 | */ |
634 | */ |
635 | spinlock_lock(&t->lock); |
635 | spinlock_lock(&t->lock); |
636 | #ifdef KCPULB_VERBOSE |
636 | #ifdef KCPULB_VERBOSE |
637 | printf("kcpulb%d: TID %d -> cpu%d, nrdy=%ld, " |
637 | printf("kcpulb%d: TID %d -> cpu%d, nrdy=%ld, " |
638 | "avg=%nd\n", CPU->id, t->tid, CPU->id, |
638 | "avg=%nd\n", CPU->id, t->tid, CPU->id, |
639 | atomic_get(&CPU->nrdy), |
639 | atomic_get(&CPU->nrdy), |
640 | atomic_get(&nrdy) / config.cpu_active); |
640 | atomic_get(&nrdy) / config.cpu_active); |
641 | #endif |
641 | #endif |
642 | t->flags |= THREAD_FLAG_STOLEN; |
642 | t->flags |= THREAD_FLAG_STOLEN; |
643 | t->state = Entering; |
643 | t->state = Entering; |
644 | spinlock_unlock(&t->lock); |
644 | spinlock_unlock(&t->lock); |
645 | 645 | ||
Line 701... | Line 701... | ||
701 | if (!cpus[cpu].active) |
701 | if (!cpus[cpu].active) |
702 | continue; |
702 | continue; |
703 | 703 | ||
704 | spinlock_lock(&cpus[cpu].lock); |
704 | spinlock_lock(&cpus[cpu].lock); |
705 | printf("cpu%d: address=%p, nrdy=%ld, needs_relink=%ld\n", |
705 | printf("cpu%d: address=%p, nrdy=%ld, needs_relink=%ld\n", |
706 | cpus[cpu].id, &cpus[cpu], atomic_get(&cpus[cpu].nrdy), |
706 | cpus[cpu].id, &cpus[cpu], atomic_get(&cpus[cpu].nrdy), |
707 | cpus[cpu].needs_relink); |
707 | cpus[cpu].needs_relink); |
708 | 708 | ||
709 | for (i = 0; i < RQ_COUNT; i++) { |
709 | for (i = 0; i < RQ_COUNT; i++) { |
710 | r = &cpus[cpu].rq[i]; |
710 | r = &cpus[cpu].rq[i]; |
711 | spinlock_lock(&r->lock); |
711 | spinlock_lock(&r->lock); |
712 | if (!r->n) { |
712 | if (!r->n) { |
Line 716... | Line 716... | ||
716 | printf("\trq[%d]: ", i); |
716 | printf("\trq[%d]: ", i); |
717 | for (cur = r->rq_head.next; cur != &r->rq_head; |
717 | for (cur = r->rq_head.next; cur != &r->rq_head; |
718 | cur = cur->next) { |
718 | cur = cur->next) { |
719 | t = list_get_instance(cur, thread_t, rq_link); |
719 | t = list_get_instance(cur, thread_t, rq_link); |
720 | printf("%d(%s) ", t->tid, |
720 | printf("%d(%s) ", t->tid, |
721 | thread_states[t->state]); |
721 | thread_states[t->state]); |
722 | } |
722 | } |
723 | printf("\n"); |
723 | printf("\n"); |
724 | spinlock_unlock(&r->lock); |
724 | spinlock_unlock(&r->lock); |
725 | } |
725 | } |
726 | spinlock_unlock(&cpus[cpu].lock); |
726 | spinlock_unlock(&cpus[cpu].lock); |