Removes vcores_wanted() from 2LS ops
authorBarret Rhoden <brho@cs.berkeley.edu>
Mon, 14 Mar 2011 18:56:34 +0000 (11:56 -0700)
committerKevin Klues <klueska@cs.berkeley.edu>
Thu, 3 Nov 2011 00:36:00 +0000 (17:36 -0700)
It was only called from thread_runnable, which was right after another
2LS op where they can just request what they want.

user/parlib/include/uthread.h
user/parlib/uthread.c
user/pthread/pthread.c

index fc678b2..acc8ad4 100644 (file)
@@ -37,7 +37,6 @@ struct schedule_ops {
        void (*thread_yield)(struct uthread *);
        void (*thread_exit)(struct uthread *);
        void (*thread_blockon_sysc)(struct syscall *);
-       unsigned int (*vcores_wanted)(void);
        /* Functions event handling wants */
        void (*preempt_pending)(void);
        void (*spawn_thread)(uintptr_t pc_start, void *data);   /* don't run yet */
index aaafd2c..29c4240 100644 (file)
@@ -119,11 +119,6 @@ void uthread_runnable(struct uthread *uthread)
        assert(sched_ops->thread_runnable);
        uthread->state = UT_RUNNABLE;
        sched_ops->thread_runnable(uthread);
-
-       /* TODO: consider moving this to the 2LS */
-       /* Ask the 2LS how many vcores it wants, and put in the request. */
-       assert(sched_ops->vcores_wanted);
-       vcore_request(sched_ops->vcores_wanted());
 }
 
 /* Need to have this as a separate, non-inlined function since we clobber the
index 79a85ee..16c5553 100644 (file)
@@ -37,7 +37,6 @@ struct uthread *pth_thread_create(void (*func)(void), void *udata);
 void pth_thread_runnable(struct uthread *uthread);
 void pth_thread_yield(struct uthread *uthread);
 void pth_thread_exit(struct uthread *uthread);
-unsigned int pth_vcores_wanted(void);
 void pth_preempt_pending(void);
 void pth_spawn_thread(uintptr_t pc_start, void *data);
 void pth_blockon_sysc(struct syscall *sysc);
@@ -54,7 +53,6 @@ struct schedule_ops pthread_sched_ops = {
        pth_thread_yield,
        pth_thread_exit,
        pth_blockon_sysc,
-       pth_vcores_wanted,
        0, /* pth_preempt_pending, */
        0, /* pth_spawn_thread, */
 };
@@ -187,6 +185,9 @@ void pth_thread_runnable(struct uthread *uthread)
        TAILQ_INSERT_TAIL(&ready_queue, pthread, next);
        threads_ready++;
        mcs_unlock_notifsafe(&queue_lock, &local_qn);
+       /* Smarter schedulers should look at the num_vcores() and how much work is
+        * going on to make a decision about how many vcores to request. */
+       vcore_request(threads_ready);
 }
 
 /* The calling thread is yielding.  Do what you need to do to restart (like put
@@ -227,13 +228,6 @@ void pth_thread_exit(struct uthread *uthread)
                pthread->finished = 1;
 }
 
-/* Returns how many *more* vcores we want.  Smarter schedulers should look at
- * the num_vcores() and how much work is going on to make this decision. */
-unsigned int pth_vcores_wanted(void)
-{
-       return 1;
-}
-
 void pth_preempt_pending(void)
 {
 }