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] Make semaphores callback-safe

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] [Mini-OS] Make semaphores callback-safe
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Sat, 24 Nov 2007 19:00:09 -0800
Delivery-date: Sat, 24 Nov 2007 19:00:24 -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 1195910799 0
# Node ID 9e88db95ddc7eedb687252b0ed8f73a21841e742
# Parent  0814fb0f8a4debac73c97a55affed02a07767bcc
[Mini-OS] Make semaphores callback-safe

One may want to use semaphores in event handlers to wake threads
waiting for a resource, so semaphores then need to be callback-safe.

Signed-off-by: Samuel Thibault <samuel.thibault@xxxxxxxxxx>
---
 extras/mini-os/include/semaphore.h |   13 ++++++++++++-
 1 files changed, 12 insertions(+), 1 deletion(-)

diff -r 0814fb0f8a4d -r 9e88db95ddc7 extras/mini-os/include/semaphore.h
--- a/extras/mini-os/include/semaphore.h        Sat Nov 24 13:23:22 2007 +0000
+++ b/extras/mini-os/include/semaphore.h        Sat Nov 24 13:26:39 2007 +0000
@@ -49,14 +49,25 @@ static inline void init_MUTEX(struct sem
 
 static void inline down(struct semaphore *sem)
 {
-    wait_event(sem->wait, sem->count > 0);
+    unsigned long flags;
+    while (1) {
+        wait_event(sem->wait, sem->count > 0);
+        local_irq_save(flags);
+        if (sem->count > 0)
+            break;
+        local_irq_restore(flags);
+    }
     sem->count--;
+    local_irq_restore(flags);
 }
 
 static void inline up(struct semaphore *sem)
 {
+    unsigned long flags;
+    local_irq_save(flags);
     sem->count++;
     wake_up(&sem->wait);
+    local_irq_restore(flags);
 }
 
 /* FIXME! Thre read/write semaphores are unimplemented! */

_______________________________________________
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] Make semaphores callback-safe, Xen patchbot-unstable <=