[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] [Mini-OS] add wait_event_deadline
add wait_event_deadline Signed-off-by: Samuel Thibault <samuel.thibault@xxxxxxxxxxxxx> Signed-off-by: Tim Deegan <tim.deegan@xxxxxxxxxxxxx> diff -r a66bdc82d8fa extras/mini-os/include/wait.h --- a/extras/mini-os/include/wait.h Wed Jan 16 11:44:41 2008 +0000 +++ b/extras/mini-os/include/wait.h Thu Jan 17 12:29:01 2008 +0000 @@ -85,29 +85,31 @@ static inline void wake_up(struct wait_q local_irq_restore(flags); \ } while (0) -#define wait_event(wq, condition) do{ \ - unsigned long flags; \ - if(condition) \ - break; \ - DEFINE_WAIT(__wait); \ - for(;;) \ - { \ - /* protect the list */ \ - local_irq_save(flags); \ - add_wait_queue(&wq, &__wait); \ - block(current); \ - local_irq_restore(flags); \ - if(condition) \ - break; \ - schedule(); \ - } \ - local_irq_save(flags); \ - /* need to wake up */ \ - wake(current); \ - remove_wait_queue(&__wait); \ - local_irq_restore(flags); \ +#define wait_event_deadline(wq, condition, deadline) do { \ + unsigned long flags; \ + if(condition) \ + break; \ + DEFINE_WAIT(__wait); \ + for(;;) \ + { \ + /* protect the list */ \ + local_irq_save(flags); \ + add_wait_queue(&wq, &__wait); \ + current->wakeup_time = deadline; \ + clear_runnable(current); \ + local_irq_restore(flags); \ + if((condition) || (deadline && NOW() >= deadline)) \ + break; \ + schedule(); \ + } \ + local_irq_save(flags); \ + /* need to wake up */ \ + wake(current); \ + remove_wait_queue(&__wait); \ + local_irq_restore(flags); \ } while(0) +#define wait_event(wq, condition) wait_event_deadline(wq, condition, 0) _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |