turnstile
struct turnstile { struct thread *owner; bool applied_pi_boost; enum thread_prio_class prio_class; struct list_head hash_list; struct list_head freelist; size_t waiters; void *lock_obj; struct rbt queues[TURNSTILE_NUM_QUEUES]; enum turnstile_state state;};struct turnstile referenced types:
struct turnstile_hash_chain { struct list_head list; struct spinlock lock;};struct turnstile_hash_chain referenced types:
struct turnstile_hash_table { struct turnstile_hash_chain heads[TURNSTILE_HASH_SIZE];};struct turnstile_hash_table referenced types:
enum turnstile_state { TURNSTILE_STATE_UNUSED, TURNSTILE_STATE_IN_HASH_TABLE, TURNSTILE_STATE_IN_FREE_LIST,};void turnstiles_init();struct turnstile * turnstile_create(void);turnstile_create referenced types:
void turnstile_destroy(struct turnstile *ts);turnstile_destroy referenced types:
struct turnstile * turnstile_init(struct turnstile *ts);turnstile_init referenced types:
struct turnstile * turnstile_block(struct turnstile *ts, size_t queue_num, void *lock_obj, enum irql lock_irql, struct thread *owner);turnstile_block referenced types:
struct turnstile * turnstile_lookup(void *obj, enum irql *irql_out);turnstile_lookup referenced types:
void turnstile_unlock(void *obj, enum irql irql);turnstile_unlock referenced types:
void turnstile_wake(struct turnstile *ts, size_t queue, size_t num_threads, enum irql lock_irql);turnstile_wake referenced types:
size_t turnstile_get_waiter_count(void *lock_obj);int32_t turnstile_thread_priority(struct thread *t);turnstile_thread_priority referenced types:
Defines
Section titled “Defines”#define TURNSTILE_WRITER_QUEUE 0#define TURNSTILE_READER_QUEUE 1#define TURNSTILE_NUM_QUEUES 2#define turnstile_from_freelist(fl) \ (container_of(fl, struct turnstile, freelist))#define turnstile_from_hash_list_node(hln) \ (container_of(hln, struct turnstile, hash_list))#define TURNSTILE_HASH_SIZE 128#define TURNSTILE_HASH_MASK (TURNSTILE_HASH_SIZE - 1)#define TURNSTILE_OBJECT_HASH(obj) \ ((((uintptr_t) (obj) >> 3) * 2654435761u) & TURNSTILE_HASH_MASK)#define TURNSTILE_CHAIN(sobj) global.turnstiles[TURNSTILE_OBJECT_HASH(sobj)]