WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] [Mini-OS] Fix domain blocking race

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] [Mini-OS] Fix domain blocking race
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Sat, 24 Nov 2007 19:00:17 -0800
Delivery-date: Sat, 24 Nov 2007 19:01:16 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1195911099 0
# Node ID 96409cebd74bebbc8572cafb6ab019bbb49bdd17
# Parent  2c52520f3284525741aedd55ab06a41cd2c784fd
[Mini-OS] Fix domain blocking race

A callback which wakes a thread may happen between the moment
schedule() gives hand to the idle thread and the latter blocks the
domain.  Idle hence needs to atomically check that no thread is
running and block, else awoken threads may have to wait up to 10
seconds.

Signed-off-by: Samuel Thibault <samuel.thibault@xxxxxxxxxx>
---
 extras/mini-os/sched.c |   29 +++++++++++++++++++++++------
 1 files changed, 23 insertions(+), 6 deletions(-)

diff -r 2c52520f3284 -r 96409cebd74b extras/mini-os/sched.c
--- a/extras/mini-os/sched.c    Sat Nov 24 13:31:01 2007 +0000
+++ b/extras/mini-os/sched.c    Sat Nov 24 13:31:39 2007 +0000
@@ -224,12 +224,29 @@ void idle_thread_fn(void *unused)
 void idle_thread_fn(void *unused)
 {
     s_time_t until;
-    for(;;)
-    {
-        schedule();
-        /* block until the next timeout expires, or for 10 secs, whichever 
comes first */
-        until = blocking_time();
-        block_domain(until);
+    unsigned long flags;
+    struct list_head *iterator;
+    struct thread *next, *thread;
+    for(;;)
+    {
+        schedule();
+        next = NULL;
+        local_irq_save(flags);
+        list_for_each(iterator, &idle_thread->thread_list)
+        {
+            thread = list_entry(iterator, struct thread, thread_list);
+            if(is_runnable(thread)) 
+            {
+                next = thread;
+                break;
+            }
+        }
+        if (!next) {
+            /* block until the next timeout expires, or for 10 secs, whichever 
comes first */
+            until = blocking_time();
+            block_domain(until);
+        }
+        local_irq_restore(flags);
         wake_expired();
     }
 }

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] [Mini-OS] Fix domain blocking race, Xen patchbot-unstable <=