Samuel Thibault
2007-Nov-23 16:45 UTC
[Xen-devel] [PATCH] [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@citrix.com> --- Note: there is no such use in the current code, but I have an overflow fix for netfront which depends on this. diff -r f2711b7eae95 -r 36bf1e737b87 extras/mini-os/include/semaphore.h --- a/extras/mini-os/include/semaphore.h Thu Nov 22 19:55:42 2007 +0000 +++ b/extras/mini-os/include/semaphore.h Fri Nov 23 13:21:02 2007 +0000 @@ -41,14 +41,25 @@ 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-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel