diff --git a/xen/common/schedule.c b/xen/common/schedule.c index 1ed1bbb4ad..e06e44e690 100644 --- a/xen/common/schedule.c +++ b/xen/common/schedule.c @@ -1122,6 +1122,7 @@ static void schedule(void) bool_t tasklet_work_scheduled = 0; struct schedule_data *sd; struct task_slice next_slice; + int cpu = smp_processor_id(); ASSERT(!in_atomic()); @@ -1146,7 +1147,7 @@ static void schedule(void) BUG(); } - spin_lock_irq(sd->schedule_lock); + pcpu_schedule_lock_irq(cpu); stop_timer(&sd->s_timer); @@ -1163,7 +1164,7 @@ static void schedule(void) if ( unlikely(prev == next) ) { - spin_unlock_irq(sd->schedule_lock); + pcpu_schedule_unlock_irq(cpu); trace_continue_running(next); return continue_running(prev); } @@ -1201,7 +1202,7 @@ static void schedule(void) ASSERT(!next->is_running); next->is_running = 1; - spin_unlock_irq(sd->schedule_lock); + pcpu_schedule_unlock_irq(cpu); perfc_incr(sched_ctx);