Changeset 88dea9d in mainline for kernel/generic/src/proc/thread.c
- Timestamp:
- 2010-04-17T16:28:49Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 30a5470
- Parents:
- 5ba201d (diff), 95319bd (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/proc/thread.c
r5ba201d r88dea9d 132 132 spinlock_lock(&THREAD->lock); 133 133 if (!THREAD->uncounted) { 134 thread_update_accounting(); 135 uint64_t cycles = THREAD->cycles; 136 THREAD->cycles = 0; 134 thread_update_accounting(true); 135 uint64_t ucycles = THREAD->ucycles; 136 THREAD->ucycles = 0; 137 uint64_t kcycles = THREAD->kcycles; 138 THREAD->kcycles = 0; 139 137 140 spinlock_unlock(&THREAD->lock); 138 141 139 142 spinlock_lock(&TASK->lock); 140 TASK->cycles += cycles; 143 TASK->ucycles += ucycles; 144 TASK->kcycles += kcycles; 141 145 spinlock_unlock(&TASK->lock); 142 146 } else … … 323 327 t->thread_arg = arg; 324 328 t->ticks = -1; 325 t->cycles = 0; 329 t->ucycles = 0; 330 t->kcycles = 0; 326 331 t->uncounted = uncounted; 327 332 t->priority = -1; /* start in rq[0] */ … … 614 619 thread_t *t = avltree_get_instance(node, thread_t, threads_tree_node); 615 620 616 uint64_t cycles; 617 char suffix; 618 order(t->cycles, &cycles, &suffix); 621 uint64_t ucycles, kcycles; 622 char usuffix, ksuffix; 623 order(t->ucycles, &ucycles, &usuffix); 624 order(t->kcycles, &kcycles, &ksuffix); 619 625 620 626 #ifdef __32_BITS__ 621 printf("%-6" PRIu64" %-10s %10p %-8s %10p %-3" PRIu32 " %10p %10p %9" PRIu64 "%c ", 622 t->tid, t->name, t, thread_states[t->state], t->task, 623 t->task->context, t->thread_code, t->kstack, cycles, suffix); 627 printf("%-6" PRIu64" %-10s %10p %-8s %10p %-3" PRIu32 " %10p %10p %9" 628 PRIu64 "%c %9" PRIu64 "%c ", t->tid, t->name, t, 629 thread_states[t->state], t->task, t->task->context, t->thread_code, 630 t->kstack, ucycles, usuffix, kcycles, ksuffix); 624 631 #endif 625 632 626 633 #ifdef __64_BITS__ 627 printf("%-6" PRIu64" %-10s %18p %-8s %18p %-3" PRIu32 " %18p %18p %9" PRIu64 "%c ", 628 t->tid, t->name, t, thread_states[t->state], t->task, 629 t->task->context, t->thread_code, t->kstack, cycles, suffix); 634 printf("%-6" PRIu64" %-10s %18p %-8s %18p %-3" PRIu32 " %18p %18p %9" 635 PRIu64 "%c %9" PRIu64 "%c ", t->tid, t->name, t, 636 thread_states[t->state], t->task, t->task->context, t->thread_code, 637 t->kstack, ucycles, usuffix, kcycles, ksuffix); 630 638 #endif 631 639 … … 661 669 #ifdef __32_BITS__ 662 670 printf("tid name address state task " 663 "ctx code stack cyclescpu "671 "ctx code stack ucycles kcycles cpu " 664 672 "waitqueue\n"); 665 673 printf("------ ---------- ---------- -------- ---------- " 666 "--- ---------- ---------- ---------- ---- "674 "--- ---------- ---------- ---------- ---------- ---- " 667 675 "----------\n"); 668 676 #endif … … 670 678 #ifdef __64_BITS__ 671 679 printf("tid name address state task " 672 "ctx code stack cyclescpu "680 "ctx code stack ucycles kcycles cpu " 673 681 "waitqueue\n"); 674 682 printf("------ ---------- ------------------ -------- ------------------ " 675 "--- ------------------ ------------------ ---------- ---- "683 "--- ------------------ ------------------ ---------- ---------- ---- " 676 684 "------------------\n"); 677 685 #endif … … 706 714 * interrupts must be already disabled. 707 715 * 708 */ 709 void thread_update_accounting(void) 716 * @param user True to update user accounting, false for kernel. 717 */ 718 void thread_update_accounting(bool user) 710 719 { 711 720 uint64_t time = get_cycle(); 712 THREAD->cycles += time - THREAD->last_cycle; 721 if (user) { 722 THREAD->ucycles += time - THREAD->last_cycle; 723 } else { 724 THREAD->kcycles += time - THREAD->last_cycle; 725 } 713 726 THREAD->last_cycle = time; 714 727 }
Note:
See TracChangeset
for help on using the changeset viewer.