[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] [Mini-OS] Make semaphores callback-safe
# 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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |