Changeset ff14c520 in mainline


Ignore:
Timestamp:
2006-03-16T22:31:39Z (19 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
93165be
Parents:
37c57f2
Message:

It is now possible to associate symbolic names with both threads and tasks.
More verbose kconsole threads, tasks and scheduler commands.

Files:
21 edited

Legend:

Unmodified
Added
Removed
  • arch/sparc64/src/sparc64.c

    r37c57f2 rff14c520  
    5858         * Create thread that reads characters from OFW's input.
    5959         */
    60         t = thread_create(kofwinput, NULL, TASK, 0);
     60        t = thread_create(kofwinput, NULL, TASK, 0, "kofwinput");
    6161        if (!t)
    6262                panic("cannot create kofwinput\n");
     
    6666         * Create thread that polls keyboard.
    6767         */
    68         t = thread_create(kkbdpoll, NULL, TASK, 0);
     68        t = thread_create(kkbdpoll, NULL, TASK, 0, "kkbdpoll");
    6969        if (!t)
    7070                panic("cannot create kkbdpoll\n");
  • generic/include/proc/task.h

    r37c57f2 rff14c520  
    3838struct task {
    3939        SPINLOCK_DECLARE(lock);
     40        char *name;
    4041        link_t th_head;         /**< List of threads contained in this task. */
    4142        link_t tasks_link;      /**< Link to other tasks within the system. */
     
    5354
    5455extern void task_init(void);
    55 extern task_t *task_create(as_t *as);
    56 extern task_t *task_run_program(void * program_addr);
     56extern task_t *task_create(as_t *as, char *name);
     57extern task_t *task_run_program(void *program_addr, char *name);
    5758
    5859#endif
  • generic/include/proc/thread.h

    r37c57f2 rff14c520  
    6060#define X_STOLEN        (1<<1)
    6161
     62/** Thread structure. There is one per thread. */
    6263struct thread {
     64        char *name;
     65       
    6366        link_t rq_link;                         /**< Run queue link. */
    6467        link_t wq_link;                         /**< Wait queue link. */
     
    126129
    127130extern void thread_init(void);
    128 extern thread_t *thread_create(void (* func)(void *), void *arg, task_t *task, int flags);
     131extern thread_t *thread_create(void (* func)(void *), void *arg, task_t *task, int flags, char *name);
    129132extern void thread_ready(thread_t *t);
    130133extern void thread_exit(void);
  • generic/src/main/kinit.c

    r37c57f2 rff14c520  
    8181                 * Just a beautification.
    8282                 */
    83                 if ((t = thread_create(kmp, NULL, TASK, 0))) {
     83                if ((t = thread_create(kmp, NULL, TASK, 0, "kmp"))) {
    8484                        spinlock_lock(&t->lock);
    8585                        t->flags |= X_WIRED;
     
    106106                for (i = 0; i < config.cpu_count; i++) {
    107107
    108                         if ((t = thread_create(kcpulb, NULL, TASK, 0))) {
     108                        if ((t = thread_create(kcpulb, NULL, TASK, 0, "kcpulb"))) {
    109109                                spinlock_lock(&t->lock);                       
    110110                                t->flags |= X_WIRED;
     
    127127         * Create kernel console.
    128128         */
    129         if ((t = thread_create(kconsole, "kconsole", TASK, 0)))
     129        if ((t = thread_create(kconsole, "kconsole", TASK, 0, "kconsole")))
    130130                thread_ready(t);
    131131        else
     
    143143                        panic("init[%d].addr is not frame aligned", i);
    144144
    145                 utask = task_run_program((void *) init.tasks[i].addr);
     145                utask = task_run_program((void *) init.tasks[i].addr, "USPACE");
    146146                if (utask) {
    147147                        if (!ipc_phone_0)
  • generic/src/main/main.c

    r37c57f2 rff14c520  
    197197         * Create kernel task.
    198198         */
    199         k = task_create(AS_KERNEL);
     199        k = task_create(AS_KERNEL, "KERNEL");
    200200        if (!k)
    201201                panic("can't create kernel task\n");
     
    204204         * Create the first thread.
    205205         */
    206         t = thread_create(kinit, NULL, k, 0);
     206        t = thread_create(kinit, NULL, k, 0, "kinit");
    207207        if (!t)
    208208                panic("can't create kinit thread\n");
  • generic/src/proc/scheduler.c

    r37c57f2 rff14c520  
    618618         * let's not be interrupted */
    619619        ipl = interrupts_disable();
    620         printf("Scheduler dump:\n");
    621620        for (cpu=0;cpu < config.cpu_count; cpu++) {
    622621
     
    625624
    626625                spinlock_lock(&cpus[cpu].lock);
    627                 printf("cpu%d: nrdy: %d, needs_relink: %d\n",
    628                        cpus[cpu].id, atomic_get(&cpus[cpu].nrdy), cpus[cpu].needs_relink);
     626                printf("cpu%d: address=%P, nrdy=%d, needs_relink=%d\n",
     627                       cpus[cpu].id, &cpus[cpu], atomic_get(&cpus[cpu].nrdy), cpus[cpu].needs_relink);
    629628               
    630629                for (i=0; i<RQ_COUNT; i++) {
  • generic/src/proc/task.c

    r37c57f2 rff14c520  
    6363 *
    6464 * @param as Task's address space.
     65 * @param name Symbolic name.
    6566 *
    6667 * @return New task's structure
    6768 *
    6869 */
    69 task_t *task_create(as_t *as)
     70task_t *task_create(as_t *as, char *name)
    7071{
    7172        ipl_t ipl;
     
    7980        list_initialize(&ta->tasks_link);
    8081        ta->as = as;
     82        ta->name = name;
    8183
    8284       
     
    102104/** Create new task with 1 thread and run it
    103105 *
     106 * @param programe_addr Address of program executable image.
     107 * @param name Program name.
     108 *
    104109 * @return Task of the running program or NULL on error
    105110 */
    106 task_t * task_run_program(void *program_addr)
     111task_t * task_run_program(void *program_addr, char *name)
    107112{
    108113        as_t *as;
     
    120125        }
    121126       
    122         task = task_create(as);
     127        task = task_create(as, name);
    123128        t = thread_create(uinit, (void *)((elf_header_t *)program_addr)->e_entry,
    124                           task, THREAD_USER_STACK);
     129                          task, 0, "uinit");
    125130       
    126131        /*
     
    149154                t = list_get_instance(cur, task_t, tasks_link);
    150155                spinlock_lock(&t->lock);
    151                 printf("Task: %Q ActiveCalls: %d", t->taskid,
    152                       atomic_get(&t->active_calls));
     156                printf("%s: address=%P, taskid=%Q, as=%P, ActiveCalls: %d",
     157                        t->name, t, t->taskid, t->as, atomic_get(&t->active_calls));
    153158                for (i=0; i < IPC_MAX_PHONES; i++) {
    154159                        if (t->phones[i].callee)
  • generic/src/proc/thread.c

    r37c57f2 rff14c520  
    249249 * @param task  Task to which the thread belongs.
    250250 * @param flags Thread flags.
     251 * @param name  Symbolic name.
    251252 *
    252253 * @return New thread's structure on success, NULL on failure.
    253254 *
    254255 */
    255 thread_t *thread_create(void (* func)(void *), void *arg, task_t *task, int flags)
     256thread_t *thread_create(void (* func)(void *), void *arg, task_t *task, int flags, char *name)
    256257{
    257258        thread_t *t;
     
    280281        interrupts_restore(ipl);
    281282       
     283        t->name = name;
    282284        t->thread_code = func;
    283285        t->thread_arg = arg;
     
    410412        for (cur=threads_head.next; cur!=&threads_head; cur=cur->next) {
    411413                t = list_get_instance(cur, thread_t, threads_link);
    412                 printf("Thr: %d(%s) ", t->tid, thread_states[t->state]);
     414                printf("%s: address=%P, tid=%d, state=%s, task=%P, code=%P, stack=%P, cpu=",
     415                        t->name, t, t->tid, thread_states[t->state], t->task, t->thread_code, t->kstack);
    413416                if (t->cpu)
    414417                        printf("cpu%d ", t->cpu->id);
     418                else
     419                        printf("none");
    415420                printf("\n");
    416421        }
  • test/fpu/fpu1/test.c

    r37c57f2 rff14c520  
    144144}
    145145
    146 
    147146void test(void)
    148147{
     
    156155
    157156        for (i=0; i<THREADS/2; i++) { 
    158                 if (!(t = thread_create(e, NULL, TASK, 0)))
     157                if (!(t = thread_create(e, NULL, TASK, 0, "e")))
    159158                        panic("could not create thread\n");
    160159                thread_ready(t);
    161                 if (!(t = thread_create(pi, NULL, TASK, 0)))
     160                if (!(t = thread_create(pi, NULL, TASK, 0, "pi")))
    162161                        panic("could not create thread\n");
    163162                thread_ready(t);
     
    173172        printf("Test passed.\n");
    174173}
    175 
    176 /*
    177 static void pi(void *data)
    178 {
    179 #undef PI_10e8 
    180 #define PI_10e8 3141592
    181 
    182 
    183         int i;
    184         double lpi, pi;
    185         double n, ab, ad;
    186 
    187 
    188         printf("pi test\n");
    189 
    190         waitq_sleep(&can_start);
    191 
    192 
    193         for (i = 0; i<ATTEMPTS; i++) {
    194                 lpi = -1;
    195                 pi = 0;
    196 
    197                 for (n=2, ab = sqrt(2); lpi != pi; n *= 2, ab = ad) {
    198                         double sc, cd;
    199 
    200                         sc = sqrt(1 - (ab*ab/4));
    201                         cd = 1 - sc;
    202                         ad = sqrt(ab*ab/4 + cd*cd);
    203                         lpi = pi;
    204                         pi = 2 * n * ad;
    205                 }
    206 
    207                 atomic_inc(&threads_ok);
    208                 if((int)(1000000*pi)!=PI_10e8)
    209                         panic("tid%d: pi*10e6=%d\n", THREAD->tid, (int) 1000000*pi);
    210         }
    211 
    212         printf("tid%d: pi*10e6=%d\n", THREAD->tid, (int) 1000000*pi);
    213 }
    214 */
  • test/fpu/mips1/test.c

    r37c57f2 rff14c520  
    113113
    114114        for (i=0; i<THREADS/2; i++) { 
    115                 if (!(t = thread_create(testit1, (void *)((__native)i*2), TASK, 0)))
     115                if (!(t = thread_create(testit1, (void *)((__native)i*2), TASK, 0, "testit1")))
    116116                        panic("could not create thread\n");
    117117                thread_ready(t);
    118                 if (!(t = thread_create(testit2, (void *)((__native)i*2+1), TASK, 0)))
     118                if (!(t = thread_create(testit2, (void *)((__native)i*2+1), TASK, 0, "testit2")))
    119119                        panic("could not create thread\n");
    120120                thread_ready(t);
  • test/fpu/sse1/test.c

    r37c57f2 rff14c520  
    113113
    114114        for (i=0; i<THREADS/2; i++) { 
    115                 if (!(t = thread_create(testit1, (void *)((__native)i*2), TASK, 0)))
     115                if (!(t = thread_create(testit1, (void *)((__native)i*2), TASK, 0, "testit1")))
    116116                        panic("could not create thread\n");
    117117                thread_ready(t);
    118                 if (!(t = thread_create(testit2, (void *)((__native)i*2+1), TASK, 0)))
     118                if (!(t = thread_create(testit2, (void *)((__native)i*2+1), TASK, 0, "testit2")))
    119119                        panic("could not create thread\n");
    120120                thread_ready(t);
  • test/mm/falloc2/test.c

    r37c57f2 rff14c520  
    4545#define THREADS 8
    4646
    47 static void thread(void * arg);
     47static void falloc(void * arg);
    4848static void failed(void);
    4949
    5050static atomic_t thread_count;
    5151
    52 void thread(void * arg)
     52void falloc(void * arg)
    5353{
    5454        int status, order, run, allocated, i;
     
    108108        for (i = 0; i < THREADS; i++) {
    109109                thread_t * thrd;
    110                 thrd = thread_create(thread, NULL, TASK, 0);
     110                thrd = thread_create(falloc, NULL, TASK, 0, "falloc");
    111111                if (thrd)
    112112                        thread_ready(thrd);
  • test/mm/slab1/test.c

    r37c57f2 rff14c520  
    109109semaphore_t thr_sem;
    110110
    111 static void thread(void *data)
     111static void slabtest(void *data)
    112112{
    113113        int offs = (int)(__native) data;
     
    139139        semaphore_initialize(&thr_sem,0);
    140140        for (i=0; i<THREADS; i++) { 
    141                 if (!(t = thread_create(thread, (void *)(__native)i, TASK, 0)))
     141                if (!(t = thread_create(slabtest, (void *)(__native)i, TASK, 0, "slabtest")))
    142142                        panic("could not create thread\n");
    143143                thread_ready(t);
  • test/mm/slab2/test.c

    r37c57f2 rff14c520  
    123123#define THREADS 8
    124124
    125 static void thread(void *priv)
     125static void slabtest(void *priv)
    126126{
    127127        void *data=NULL, *new;
     
    189189        semaphore_initialize(&thr_sem,0);
    190190        for (i=0; i<THREADS; i++) { 
    191                 if (!(t = thread_create(thread, NULL, TASK, 0)))
     191                if (!(t = thread_create(slabtest, NULL, TASK, 0, "slabtest")))
    192192                        panic("could not create thread\n");
    193193                thread_ready(t);
  • test/synch/rwlock2/test.c

    r37c57f2 rff14c520  
    7575        rwlock_read_lock(&rwlock);     
    7676       
    77         thrd = thread_create(writer, NULL, TASK, 0);
     77        thrd = thread_create(writer, NULL, TASK, 0, "writer");
    7878        if (thrd)
    7979                thread_ready(thrd);
  • test/synch/rwlock3/test.c

    r37c57f2 rff14c520  
    7878       
    7979        for (i=0; i<4; i++) {
    80                 thrd = thread_create(reader, NULL, TASK, 0);
     80                thrd = thread_create(reader, NULL, TASK, 0, "reader");
    8181                if (thrd)
    8282                        thread_ready(thrd);
  • test/synch/rwlock4/test.c

    r37c57f2 rff14c520  
    138138                printf("Creating %d readers\n", k);
    139139                for (i=0; i<k; i++) {
    140                         thrd = thread_create(reader, NULL, TASK, 0);
     140                        thrd = thread_create(reader, NULL, TASK, 0, "reader");
    141141                        if (thrd)
    142142                                thread_ready(thrd);
     
    148148                printf("Creating %d writers\n", k);
    149149                for (i=0; i<k; i++) {
    150                         thrd = thread_create(writer, NULL, TASK, 0);
     150                        thrd = thread_create(writer, NULL, TASK, 0, "writer");
    151151                        if (thrd)
    152152                                thread_ready(thrd);
  • test/synch/rwlock5/test.c

    r37c57f2 rff14c520  
    9696                for (j=0; j<(READERS+WRITERS)/2; j++) {
    9797                        for (k=0; k<i; k++) {
    98                                 thrd = thread_create(reader, NULL, TASK, 0);
     98                                thrd = thread_create(reader, NULL, TASK, 0, "reader");
    9999                                if (thrd)
    100100                                        thread_ready(thrd);
     
    103103                        }
    104104                        for (k=0; k<(4-i); k++) {
    105                                 thrd = thread_create(writer, NULL, TASK, 0);
     105                                thrd = thread_create(writer, NULL, TASK, 0, "writer");
    106106                                if (thrd)
    107107                                        thread_ready(thrd);
  • test/synch/semaphore1/test.c

    r37c57f2 rff14c520  
    100100                for (j=0; j<(CONSUMERS+PRODUCERS)/2; j++) {
    101101                        for (k=0; k<i; k++) {
    102                                 thrd = thread_create(consumer, NULL, TASK, 0);
     102                                thrd = thread_create(consumer, NULL, TASK, 0, "consumer");
    103103                                if (thrd)
    104104                                        thread_ready(thrd);
     
    107107                        }
    108108                        for (k=0; k<(4-i); k++) {
    109                                 thrd = thread_create(producer, NULL, TASK, 0);
     109                                thrd = thread_create(producer, NULL, TASK, 0, "producer");
    110110                                if (thrd)
    111111                                        thread_ready(thrd);
  • test/synch/semaphore2/test.c

    r37c57f2 rff14c520  
    108108                printf("Creating %d consumers\n", k);
    109109                for (i=0; i<k; i++) {
    110                         thrd = thread_create(consumer, NULL, TASK, 0);
     110                        thrd = thread_create(consumer, NULL, TASK, 0, "consumer");
    111111                        if (thrd)
    112112                                thread_ready(thrd);
  • test/thread/thread1/test.c

    r37c57f2 rff14c520  
    4040#define THREADS 5
    4141
    42 static void thread(void *data)
     42static void threadtest(void *data)
    4343{
    4444    while(1)
     
    5555
    5656        for (i=0; i<THREADS; i++) { 
    57                 if (!(t = thread_create(thread, NULL, TASK, 0)))
     57                if (!(t = thread_create(threadtest, NULL, TASK, 0, "threadtest")))
    5858                        panic("could not create thread\n");
    5959                thread_ready(t);
Note: See TracChangeset for help on using the changeset viewer.