Selecting the scheduler to call must be done under lock. Otherwise a
race might occur when switching schedulers in a cpupool
Signed-off-by: Juergen Gross <juergen.gross@ts.fujitsu.com>
Acked-by: George Dunlap <george.dunlap@eu.citrix.com>
xen-unstable changeset: 23843:
6684e3bafbbd
xen-unstable date: Sat Sep 17 16:19:26 2011 +0100
{
struct vcpu *prev = current, *next = NULL;
s_time_t now = NOW();
- struct scheduler *sched = this_cpu(scheduler);
+ struct scheduler *sched;
unsigned long *tasklet_work = &this_cpu(tasklet_work_to_do);
bool_t tasklet_work_scheduled = 0;
struct schedule_data *sd;
stop_timer(&sd->s_timer);
/* get policy-specific decision on scheduling... */
+ sched = this_cpu(scheduler);
next_slice = sched->do_schedule(sched, now, tasklet_work_scheduled);
next = next_slice.task;