Subversion Repositories HelenOS

Rev

Rev 2131 | Rev 2292 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2131 Rev 2283
Line 59... Line 59...
59
#include <adt/list.h>
59
#include <adt/list.h>
60
#include <panic.h>
60
#include <panic.h>
61
#include <cpu.h>
61
#include <cpu.h>
62
#include <print.h>
62
#include <print.h>
63
#include <debug.h>
63
#include <debug.h>
-
 
64
#include <proc/tasklet.h>
64
 
65
 
65
static void before_task_runs(void);
66
static void before_task_runs(void);
66
static void before_thread_runs(void);
67
static void before_thread_runs(void);
67
static void after_thread_ran(void);
68
static void after_thread_ran(void);
68
static void scheduler_separated_stack(void);
69
static void scheduler_separated_stack(void);
Line 224... Line 225...
224
 
225
 
225
        /*
226
        /*
226
         * Take the first thread from the queue.
227
         * Take the first thread from the queue.
227
         */
228
         */
228
        t = list_get_instance(r->rq_head.next, thread_t, rq_link);
229
        t = list_get_instance(r->rq_head.next, thread_t, rq_link);
-
 
230
        if (verbose)
-
 
231
            printf("cpu%d removing, rq_head %x, t: %x, next: %x, link: %x \n",CPU->id, r->rq_head, t, r->rq_head.next, t->rq_link);
229
        list_remove(&t->rq_link);
232
        list_remove(&t->rq_link);
-
 
233
        if (verbose)
-
 
234
            printf("cpu%d  removed, rq_head %x, t: %x, next: %x, link: %x \n",CPU->id, r->rq_head, t, r->rq_head.next, t->rq_link);
230
 
235
 
231
        spinlock_unlock(&r->lock);
236
        spinlock_unlock(&r->lock);
232
 
237
 
233
        spinlock_lock(&t->lock);
238
        spinlock_lock(&t->lock);
234
        t->cpu = CPU;
239
        t->cpu = CPU;
Line 436... Line 441...
436
            if (THREAD->call_me) {
441
            if (THREAD->call_me) {
437
                THREAD->call_me(THREAD->call_me_with);
442
                THREAD->call_me(THREAD->call_me_with);
438
                THREAD->call_me = NULL;
443
                THREAD->call_me = NULL;
439
                THREAD->call_me_with = NULL;
444
                THREAD->call_me_with = NULL;
440
            }
445
            }
441
 
446
            if (verbose)
-
 
447
                printf("cpu%d, Sleeping unlocking \n", CPU->id);
442
            spinlock_unlock(&THREAD->lock);
448
            spinlock_unlock(&THREAD->lock);
443
 
449
 
444
            break;
450
            break;
445
 
451
 
446
        default:
452
        default:
Line 452... Line 458...
452
            break;
458
            break;
453
        }
459
        }
454
 
460
 
455
        THREAD = NULL;
461
        THREAD = NULL;
456
    }
462
    }
457
 
463
    if (verbose)
-
 
464
        printf("cpu%d looking for next thread\n", CPU->id);
458
    THREAD = find_best_thread();
465
    THREAD = find_best_thread();
459
   
466
   
-
 
467
    if (verbose)
-
 
468
        printf("cpu%d t locking  THREAD:%x \n", CPU->id, THREAD);
460
    spinlock_lock(&THREAD->lock);
469
    spinlock_lock(&THREAD->lock);
461
    priority = THREAD->priority;
470
    priority = THREAD->priority;
462
    spinlock_unlock(&THREAD->lock);
471
    spinlock_unlock(&THREAD->lock);
-
 
472
    if (verbose)
-
 
473
        printf("cpu%d t unlocked after priority THREAD:%x \n", CPU->id, THREAD);
463
 
474
 
464
    relink_rq(priority);       
475
    relink_rq(priority);       
465
 
476
 
466
    /*
477
    /*
467
     * If both the old and the new task are the same, lots of work is
478
     * If both the old and the new task are the same, lots of work is