Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: Xen: Changelog

[xen-4.1-testing] xen: Fix schedule()'s grabbing of the schedule lock

 

 

Xen changelog RSS feed   Index | Next | Previous | View Threaded


patchbot at xen

Jul 9, 2012, 8:33 AM

Post #1 of 1 (81 views)
Permalink
[xen-4.1-testing] xen: Fix schedule()'s grabbing of the schedule lock

# HG changeset patch
# User George Dunlap <george.dunlap [at] eu>
# Date 1341825884 -3600
# Node ID c1f43d07dc1ed4203afe4f0a207da04213c53e3e
# Parent 01366a3245870bed6666f98d498528697d082701
xen: Fix schedule()'s grabbing of the schedule lock

Because the location of the lock can change between the time you read
it and the time you grab it, the per-cpu schedule locks need to check
after lock acquisition that the lock location hasn't changed, and
release and re-try if so. This change was effected throughout the
source code, but one very important place was apparently missed: in
schedule() itself.

Signed-off-by: George Dunlap <george.dunlap [at] eu>
Committed-by: Keir Fraser <keir [at] xen>
xen-unstable changeset: 25162:478bec603d3d
xen-unstable date: Tue Apr 10 10:41:30 2012 +0100
---


diff -r 01366a324587 -r c1f43d07dc1e xen/common/schedule.c
--- a/xen/common/schedule.c Mon Jul 09 10:23:57 2012 +0100
+++ b/xen/common/schedule.c Mon Jul 09 10:24:44 2012 +0100
@@ -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);


_______________________________________________
Xen-changelog mailing list
Xen-changelog [at] lists
http://lists.xensource.com/xen-changelog

Xen changelog RSS feed   Index | Next | Previous | View Threaded
 
 


Interested in having your list archived? Contact Gossamer Threads
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.