Rev 2071 | Rev 2089 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2071 | Rev 2085 | ||
---|---|---|---|
Line 40... | Line 40... | ||
40 | #include <synch/waitq.h> |
40 | #include <synch/waitq.h> |
41 | #include <genarch/mm/page_ht.h> |
41 | #include <genarch/mm/page_ht.h> |
42 | #include <genarch/mm/page_pt.h> |
42 | #include <genarch/mm/page_pt.h> |
43 | 43 | ||
44 | /** Kernel-side futex structure. */ |
44 | /** Kernel-side futex structure. */ |
45 | struct futex { |
45 | typedef struct { |
46 | uintptr_t paddr; /**< Physical address of the status variable. */ |
46 | uintptr_t paddr; /**< Physical address of the status variable. */ |
47 | waitq_t wq; /**< Wait queue for threads waiting for futex availability. */ |
47 | waitq_t wq; /**< Wait queue for threads waiting for futex availability. */ |
48 | link_t ht_link; /**< Futex hash table link. */ |
48 | link_t ht_link; /**< Futex hash table link. */ |
49 | count_t refcount; /**< Number of tasks that reference this futex. */ |
49 | count_t refcount; /**< Number of tasks that reference this futex. */ |
50 | }; |
50 | } futex_t; |
51 | 51 | ||
52 | extern void futex_init(void); |
52 | extern void futex_init(void); |
53 | extern unative_t sys_futex_sleep_timeout(uintptr_t uaddr, uint32_t usec, int flags); |
53 | extern unative_t sys_futex_sleep_timeout(uintptr_t uaddr, uint32_t usec, int flags); |
54 | extern unative_t sys_futex_wakeup(uintptr_t uaddr); |
54 | extern unative_t sys_futex_wakeup(uintptr_t uaddr); |
55 | 55 |