Changeset 62b6d17 in mainline for kernel/generic/src/proc
- Timestamp:
- 2006-12-14T16:47:36Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- aeaebcc
- Parents:
- 55cc9bc
- Location:
- kernel/generic/src/proc
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/proc/task.c
r55cc9bc r62b6d17 221 221 * Create the main thread. 222 222 */ 223 t1 = thread_create(uinit, kernel_uarg, task, THREAD_FLAG_USPACE, "uinit" );223 t1 = thread_create(uinit, kernel_uarg, task, THREAD_FLAG_USPACE, "uinit", false); 224 224 ASSERT(t1); 225 225 … … 227 227 * Create killer thread for the new task. 228 228 */ 229 t2 = thread_create(ktaskgc, t1, task, 0, "ktaskgc" );229 t2 = thread_create(ktaskgc, t1, task, 0, "ktaskgc", true); 230 230 ASSERT(t2); 231 231 thread_ready(t2); … … 286 286 287 287 spinlock_lock(&thr->lock); 288 289 if (thr == THREAD) /* Update accounting of current thread */ 290 thread_update_accounting(); 291 ret += thr->cycles; 292 288 /* Process only counted threads */ 289 if (!thr->uncounted) { 290 if (thr == THREAD) /* Update accounting of current thread */ 291 thread_update_accounting(); 292 ret += thr->cycles; 293 } 293 294 spinlock_unlock(&thr->lock); 294 295 } … … 329 330 spinlock_unlock(&tasks_lock); 330 331 331 t = thread_create(ktaskclnp, NULL, ta, 0, "ktaskclnp" );332 t = thread_create(ktaskclnp, NULL, ta, 0, "ktaskclnp", true); 332 333 333 334 spinlock_lock(&ta->lock); -
kernel/generic/src/proc/thread.c
r55cc9bc r62b6d17 124 124 125 125 spinlock_lock(&THREAD->lock); 126 thread_update_accounting(); 127 uint64_t cycles = THREAD->cycles; 128 THREAD->cycles = 0; 129 spinlock_unlock(&THREAD->lock); 130 131 spinlock_lock(&TASK->lock); 132 TASK->cycles += cycles; 133 spinlock_unlock(&TASK->lock); 126 if (!THREAD->uncounted) { 127 thread_update_accounting(); 128 uint64_t cycles = THREAD->cycles; 129 THREAD->cycles = 0; 130 spinlock_unlock(&THREAD->lock); 131 132 spinlock_lock(&TASK->lock); 133 TASK->cycles += cycles; 134 spinlock_unlock(&TASK->lock); 135 } else 136 spinlock_unlock(&THREAD->lock); 134 137 135 138 interrupts_restore(ipl); … … 303 306 * Create a new thread. 304 307 * 305 * @param func Thread's implementing function. 306 * @param arg Thread's implementing function argument. 307 * @param task Task to which the thread belongs. 308 * @param flags Thread flags. 309 * @param name Symbolic name. 308 * @param func Thread's implementing function. 309 * @param arg Thread's implementing function argument. 310 * @param task Task to which the thread belongs. 311 * @param flags Thread flags. 312 * @param name Symbolic name. 313 * @param uncounted Thread's accounting doesn't affect accumulated task accounting. 310 314 * 311 315 * @return New thread's structure on success, NULL on failure. 312 316 * 313 317 */ 314 thread_t *thread_create(void (* func)(void *), void *arg, task_t *task, int flags, char *name )318 thread_t *thread_create(void (* func)(void *), void *arg, task_t *task, int flags, char *name, bool uncounted) 315 319 { 316 320 thread_t *t; … … 345 349 t->ticks = -1; 346 350 t->cycles = 0; 351 t->uncounted = uncounted; 347 352 t->priority = -1; /* start in rq[0] */ 348 353 t->cpu = NULL; … … 650 655 } 651 656 652 if ((t = thread_create(uinit, kernel_uarg, TASK, THREAD_FLAG_USPACE, namebuf ))) {657 if ((t = thread_create(uinit, kernel_uarg, TASK, THREAD_FLAG_USPACE, namebuf, false))) { 653 658 tid = t->tid; 654 659 thread_ready(t);
Note:
See TracChangeset
for help on using the changeset viewer.