/* Just some sanity to ensure that the scheduler is set up okay. */
ASSERT(current->domain == IDLE_DOMAIN_ID);
(void)wake_up(current);
- schedule();
+ __enter_scheduler();
/*
* Declares CPU setup done to the boot processor.
if ( p == current )
{
- schedule();
+ __enter_scheduler();
BUG(); /* never get here */
}
else
void stop_domain(void)
{
- current -> state = TASK_SUSPENDED;
- clear_bit(_HYP_EVENT_STOP, &(current->hyp_events));
- schedule ();
+ set_current_state(TASK_SUSPENDED);
+ clear_bit(_HYP_EVENT_STOP, ¤t->hyp_events);
+ __enter_scheduler();
}
long stop_other_domain(unsigned int dom)
typedef void (*hyp_event_callback_fn_t)(void);
-extern void schedule(void);
-
/* Ordering must match definitions of _HYP_EVENT_* in xeno/sched.h */
static hyp_event_callback_fn_t event_call_fn[] =
{
- schedule,
+ __enter_scheduler,
kill_domain,
stop_domain
};
{
current->state = TASK_INTERRUPTIBLE;
current->warpback = 0; /* XXX should only do this when blocking */
- schedule();
+ __enter_scheduler();
return 0;
}
* i.e., the domain with lowest EVT.
* The runqueue should be ordered by EVT so that is easy.
****************************************************************************/
-asmlinkage void schedule(void)
+asmlinkage void __enter_scheduler(void)
{
struct task_struct *prev, *next, *next_prime, *p;
struct list_head *tmp;
{
if (in_interrupt())
printk("Attempt to kill tasklet from interrupt\n");
-
- while (test_and_set_bit(TASKLET_STATE_SCHED, &t->state)) {
- set_current_state(TASK_RUNNING);
- do {
- current->policy |= SCHED_YIELD;
- schedule();
- } while (test_bit(TASKLET_STATE_SCHED, &t->state));
- }
+ while (test_and_set_bit(TASKLET_STATE_SCHED, &t->state))
+ while (test_bit(TASKLET_STATE_SCHED, &t->state))
+ do_softirq();
tasklet_unlock_wait(t);
clear_bit(TASKLET_STATE_SCHED, &t->state);
}
int wake_up(struct task_struct *p);
long do_yield(void);
void reschedule(struct task_struct *p);
-asmlinkage void schedule(void);
+
+/* NB. Limited entry in Xen. Not for arbitrary use! */
+asmlinkage void __enter_scheduler(void);
+#define schedule() __schedule_not_callable_in_xen()
/* A compatibility hack for Linux drivers. */
#define MAX_SCHEDULE_TIMEOUT 0UL