Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/proc/thread.c

    re535eeb r137691a  
    5050#include <synch/rwlock.h>
    5151#include <cpu.h>
    52 #include <str.h>
     52#include <func.h>
    5353#include <context.h>
    5454#include <adt/avl.h>
     
    8484        "Exiting",
    8585        "Lingering"
    86 };
    87 
    88 typedef struct {
    89         thread_id_t thread_id;
    90         thread_t *thread;
    91 } thread_iterator_t;
     86};
    9287
    9388/** Lock protecting the threads_tree AVL tree.
     
    137132        spinlock_lock(&THREAD->lock);
    138133        if (!THREAD->uncounted) {
    139                 thread_update_accounting(true);
    140                 uint64_t ucycles = THREAD->ucycles;
    141                 THREAD->ucycles = 0;
    142                 uint64_t kcycles = THREAD->kcycles;
    143                 THREAD->kcycles = 0;
    144 
     134                thread_update_accounting();
     135                uint64_t cycles = THREAD->cycles;
     136                THREAD->cycles = 0;
    145137                spinlock_unlock(&THREAD->lock);
    146138               
    147139                spinlock_lock(&TASK->lock);
    148                 TASK->ucycles += ucycles;
    149                 TASK->kcycles += kcycles;
     140                TASK->cycles += cycles;
    150141                spinlock_unlock(&TASK->lock);
    151142        } else
     
    332323        t->thread_arg = arg;
    333324        t->ticks = -1;
    334         t->ucycles = 0;
    335         t->kcycles = 0;
     325        t->cycles = 0;
    336326        t->uncounted = uncounted;
    337327        t->priority = -1;               /* start in rq[0] */
     
    624614        thread_t *t = avltree_get_instance(node, thread_t, threads_tree_node);
    625615       
    626         uint64_t ucycles, kcycles;
    627         char usuffix, ksuffix;
    628         order_suffix(t->ucycles, &ucycles, &usuffix);
    629         order_suffix(t->kcycles, &kcycles, &ksuffix);
     616        uint64_t cycles;
     617        char suffix;
     618        order(t->cycles, &cycles, &suffix);
    630619
    631620#ifdef __32_BITS__
    632         printf("%-6" PRIu64" %-10s %10p %-8s %10p %-3" PRIu32 " %10p %10p %9"
    633                 PRIu64 "%c %9" PRIu64 "%c ", t->tid, t->name, t,
    634                 thread_states[t->state], t->task, t->task->context, t->thread_code,
    635                 t->kstack, ucycles, usuffix, kcycles, ksuffix);
     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);
    636624#endif
    637625
    638626#ifdef __64_BITS__
    639         printf("%-6" PRIu64" %-10s %18p %-8s %18p %-3" PRIu32 " %18p %18p %9"
    640                 PRIu64 "%c %9" PRIu64 "%c ", t->tid, t->name, t,
    641                 thread_states[t->state], t->task, t->task->context, t->thread_code,
    642                 t->kstack, ucycles, usuffix, kcycles, ksuffix);
     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);
    643630#endif
    644631                       
     
    674661#ifdef __32_BITS__     
    675662        printf("tid    name       address    state    task       "
    676                 "ctx code       stack      ucycles    kcycles    cpu  "
     663                "ctx code       stack      cycles     cpu  "
    677664                "waitqueue\n");
    678665        printf("------ ---------- ---------- -------- ---------- "
    679                 "--- ---------- ---------- ---------- ---------- ---- "
     666                "--- ---------- ---------- ---------- ---- "
    680667                "----------\n");
    681668#endif
     
    683670#ifdef __64_BITS__
    684671        printf("tid    name       address            state    task               "
    685                 "ctx code               stack              ucycles    kcycles    cpu  "
     672                "ctx code               stack              cycles     cpu  "
    686673                "waitqueue\n");
    687674        printf("------ ---------- ------------------ -------- ------------------ "
    688                 "--- ------------------ ------------------ ---------- ---------- ---- "
     675                "--- ------------------ ------------------ ---------- ---- "
    689676                "------------------\n");
    690677#endif
     
    719706 * interrupts must be already disabled.
    720707 *
    721  * @param user  True to update user accounting, false for kernel.
    722  */
    723 void thread_update_accounting(bool user)
     708 */
     709void thread_update_accounting(void)
    724710{
    725711        uint64_t time = get_cycle();
    726         if (user) {
    727                 THREAD->ucycles += time - THREAD->last_cycle;
    728         } else {
    729                 THREAD->kcycles += time - THREAD->last_cycle;
    730         }
     712        THREAD->cycles += time - THREAD->last_cycle;
    731713        THREAD->last_cycle = time;
    732714}
    733 
    734 static bool thread_search_walker(avltree_node_t *node, void *arg)
    735 {
    736         thread_t *thread =
    737             (thread_t *) avltree_get_instance(node, thread_t, threads_tree_node);
    738         thread_iterator_t *iterator = (thread_iterator_t *) arg;
    739        
    740         if (thread->tid == iterator->thread_id) {
    741                 iterator->thread = thread;
    742                 return false;
    743         }
    744        
    745         return true;
    746 }
    747 
    748 /** Find thread structure corresponding to thread ID.
    749  *
    750  * The threads_lock must be already held by the caller of this function and
    751  * interrupts must be disabled.
    752  *
    753  * @param id Thread ID.
    754  *
    755  * @return Thread structure address or NULL if there is no such thread ID.
    756  *
    757  */
    758 thread_t *thread_find_by_id(thread_id_t thread_id)
    759 {
    760         thread_iterator_t iterator;
    761        
    762         iterator.thread_id = thread_id;
    763         iterator.thread = NULL;
    764        
    765         avltree_walk(&threads_tree, thread_search_walker, (void *) &iterator);
    766        
    767         return iterator.thread;
    768 }
    769 
    770715
    771716/** Process syscall to create new thread.
Note: See TracChangeset for help on using the changeset viewer.