|
|
|
|
|
|
|
|
|
|
xen-devel
[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
|
<Prev in Thread] |
Current Thread |
[Next in Thread> |
- [Xen-devel] [PATCH] [Mini-OS] add wait_event_deadline,
Samuel Thibault <=
|
|
|
|
|