Lines Matching refs:bytelock

56 ck_bytelock_init(struct ck_bytelock *bytelock)  in ck_bytelock_init()  argument
60 bytelock->owner = 0; in ck_bytelock_init()
61 bytelock->n_readers = 0; in ck_bytelock_init()
62 for (i = 0; i < sizeof bytelock->readers; i++) in ck_bytelock_init()
63 bytelock->readers[i] = false; in ck_bytelock_init()
82 ck_bytelock_write_lock(struct ck_bytelock *bytelock, unsigned int slot) in ck_bytelock_write_lock() argument
84 CK_BYTELOCK_TYPE *readers = (void *)bytelock->readers; in ck_bytelock_write_lock()
88 while (ck_pr_cas_uint(&bytelock->owner, 0, slot) == false) in ck_bytelock_write_lock()
92 if (slot <= sizeof bytelock->readers) in ck_bytelock_write_lock()
93 ck_pr_store_8(&bytelock->readers[slot - 1], false); in ck_bytelock_write_lock()
101 for (i = 0; i < sizeof(bytelock->readers) / CK_BYTELOCK_LENGTH; i++) { in ck_bytelock_write_lock()
107 while (ck_pr_load_uint(&bytelock->n_readers) != 0) in ck_bytelock_write_lock()
119 ck_bytelock_write_unlock(struct ck_bytelock *bytelock) in ck_bytelock_write_unlock() argument
123 ck_pr_store_uint(&bytelock->owner, 0); in ck_bytelock_write_unlock()
128 ck_bytelock_read_lock(struct ck_bytelock *bytelock, unsigned int slot) in ck_bytelock_read_lock() argument
131 if (ck_pr_load_uint(&bytelock->owner) == slot) { in ck_bytelock_read_lock()
132 ck_pr_store_8(&bytelock->readers[slot - 1], true); in ck_bytelock_read_lock()
134 ck_pr_store_uint(&bytelock->owner, 0); in ck_bytelock_read_lock()
139 if (slot > sizeof bytelock->readers) { in ck_bytelock_read_lock()
141 ck_pr_inc_uint(&bytelock->n_readers); in ck_bytelock_read_lock()
143 if (ck_pr_load_uint(&bytelock->owner) == 0) in ck_bytelock_read_lock()
145 ck_pr_dec_uint(&bytelock->n_readers); in ck_bytelock_read_lock()
147 while (ck_pr_load_uint(&bytelock->owner) != 0) in ck_bytelock_read_lock()
158 ck_pr_fas_8(&bytelock->readers[slot], true); in ck_bytelock_read_lock()
161 ck_pr_store_8(&bytelock->readers[slot], true); in ck_bytelock_read_lock()
170 if (ck_pr_load_uint(&bytelock->owner) == 0) in ck_bytelock_read_lock()
173 ck_pr_store_8(&bytelock->readers[slot], false); in ck_bytelock_read_lock()
174 while (ck_pr_load_uint(&bytelock->owner) != 0) in ck_bytelock_read_lock()
183 ck_bytelock_read_unlock(struct ck_bytelock *bytelock, unsigned int slot) in ck_bytelock_read_unlock() argument
188 if (slot > sizeof bytelock->readers) in ck_bytelock_read_unlock()
189 ck_pr_dec_uint(&bytelock->n_readers); in ck_bytelock_read_unlock()
191 ck_pr_store_8(&bytelock->readers[slot - 1], false); in ck_bytelock_read_unlock()