Changes in kernel/generic/include/synch/waitq.h [d314571:597fa24] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/include/synch/waitq.h
rd314571 r597fa24 41 41 #include <adt/list.h> 42 42 43 typedef enum { 44 WAKEUP_FIRST = 0, 45 WAKEUP_ALL 46 } wakeup_mode_t; 43 #define WAITQ_INITIALIZER_WITH_COUNT(name, count) (waitq_t) { \ 44 .lock = IRQ_SPINLOCK_INITIALIZER(#name ".lock"), \ 45 .sleepers = LIST_INITIALIZER((name).sleepers), \ 46 .wakeup_balance = (count), \ 47 } 48 49 #define WAITQ_INITIALIZER(name) WAITQ_INITIALIZER_WITH_COUNT(name, 0) 50 51 #define WAITQ_INITIALIZE_WITH_COUNT(name, count) \ 52 waitq_t name = WAITQ_INITIALIZER_WITH_COUNT(name, count) 53 54 #define WAITQ_INITIALIZE(name) \ 55 waitq_t name = WAITQ_INITIALIZER(name) 47 56 48 57 /** Wait queue structure. … … 57 66 58 67 /** 59 * Number of waitq_wakeup() calls that didn't find a thread to wake up.60 * 68 * If negative, number of wakeups that are to be ignored (necessary for futex operation). 69 * If positive, number of wakeups that weren't able to wake a thread. 61 70 */ 62 int missed_wakeups; 63 64 /** Number of wakeups that need to be ignored due to futex timeout. */ 65 int ignore_wakeups; 71 int wakeup_balance; 66 72 67 73 /** List of sleeping threads for which there was no missed_wakeup. */ 68 74 list_t sleepers; 75 76 bool closed; 69 77 } waitq_t; 70 78 71 #define waitq_sleep(wq) \ 72 waitq_sleep_timeout((wq), SYNCH_NO_TIMEOUT, SYNCH_FLAGS_NONE, NULL) 79 typedef struct wait_guard { 80 ipl_t ipl; 81 } wait_guard_t; 73 82 74 83 struct thread; 75 84 76 85 extern void waitq_initialize(waitq_t *); 77 extern errno_t waitq_sleep_timeout(waitq_t *, uint32_t, unsigned int, bool *); 78 extern ipl_t waitq_sleep_prepare(waitq_t *); 79 extern errno_t waitq_sleep_timeout_unsafe(waitq_t *, uint32_t, unsigned int, bool *); 80 extern void waitq_sleep_finish(waitq_t *, bool, ipl_t); 81 extern void waitq_wakeup(waitq_t *, wakeup_mode_t); 82 extern void _waitq_wakeup_unsafe(waitq_t *, wakeup_mode_t); 83 extern void waitq_interrupt_sleep(struct thread *); 84 extern int waitq_count_get(waitq_t *); 85 extern void waitq_count_set(waitq_t *, int val); 86 extern void waitq_initialize_with_count(waitq_t *, int); 87 extern errno_t waitq_sleep(waitq_t *); 88 extern errno_t _waitq_sleep_timeout(waitq_t *, uint32_t, unsigned int); 89 extern errno_t waitq_sleep_timeout(waitq_t *, uint32_t); 90 extern wait_guard_t waitq_sleep_prepare(waitq_t *); 91 extern errno_t waitq_sleep_unsafe(waitq_t *, wait_guard_t); 92 extern errno_t waitq_sleep_timeout_unsafe(waitq_t *, uint32_t, unsigned int, wait_guard_t); 93 94 extern void waitq_wake_one(waitq_t *); 95 extern void waitq_wake_all(waitq_t *); 96 extern void waitq_signal(waitq_t *); 97 extern void waitq_close(waitq_t *); 86 98 87 99 #endif
Note:
See TracChangeset
for help on using the changeset viewer.