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 | ||