Lines Matching refs:efd

114 	struct eventfd *efd;  in eventfd_create_file()  local
120 efd = malloc(sizeof(*efd), M_EVENTFD, M_WAITOK | M_ZERO); in eventfd_create_file()
121 efd->efd_flags = flags; in eventfd_create_file()
122 efd->efd_count = initval; in eventfd_create_file()
123 mtx_init(&efd->efd_lock, "eventfd", NULL, MTX_DEF); in eventfd_create_file()
124 knlist_init_mtx(&efd->efd_sel.si_note, &efd->efd_lock); in eventfd_create_file()
129 finit(fp, fflags, DTYPE_EVENTFD, efd, &eventfdops); in eventfd_create_file()
137 struct eventfd *efd; in eventfd_close() local
139 efd = fp->f_data; in eventfd_close()
140 seldrain(&efd->efd_sel); in eventfd_close()
141 knlist_destroy(&efd->efd_sel.si_note); in eventfd_close()
142 mtx_destroy(&efd->efd_lock); in eventfd_close()
143 free(efd, M_EVENTFD); in eventfd_close()
151 struct eventfd *efd; in eventfd_read() local
159 efd = fp->f_data; in eventfd_read()
160 mtx_lock(&efd->efd_lock); in eventfd_read()
161 while (error == 0 && efd->efd_count == 0) { in eventfd_read()
163 mtx_unlock(&efd->efd_lock); in eventfd_read()
166 error = mtx_sleep(&efd->efd_count, &efd->efd_lock, PCATCH, in eventfd_read()
170 MPASS(efd->efd_count > 0); in eventfd_read()
171 if ((efd->efd_flags & EFD_SEMAPHORE) != 0) { in eventfd_read()
173 --efd->efd_count; in eventfd_read()
175 count = efd->efd_count; in eventfd_read()
176 efd->efd_count = 0; in eventfd_read()
178 KNOTE_LOCKED(&efd->efd_sel.si_note, 0); in eventfd_read()
179 selwakeup(&efd->efd_sel); in eventfd_read()
180 wakeup(&efd->efd_count); in eventfd_read()
181 mtx_unlock(&efd->efd_lock); in eventfd_read()
184 mtx_unlock(&efd->efd_lock); in eventfd_read()
193 struct eventfd *efd; in eventfd_write() local
206 efd = fp->f_data; in eventfd_write()
207 mtx_lock(&efd->efd_lock); in eventfd_write()
209 if (UINT64_MAX - efd->efd_count <= count) { in eventfd_write()
211 mtx_unlock(&efd->efd_lock); in eventfd_write()
216 error = mtx_sleep(&efd->efd_count, &efd->efd_lock, in eventfd_write()
222 MPASS(UINT64_MAX - efd->efd_count > count); in eventfd_write()
223 efd->efd_count += count; in eventfd_write()
224 KNOTE_LOCKED(&efd->efd_sel.si_note, 0); in eventfd_write()
225 selwakeup(&efd->efd_sel); in eventfd_write()
226 wakeup(&efd->efd_count); in eventfd_write()
228 mtx_unlock(&efd->efd_lock); in eventfd_write()
237 struct eventfd *efd; in eventfd_poll() local
240 efd = fp->f_data; in eventfd_poll()
242 mtx_lock(&efd->efd_lock); in eventfd_poll()
243 if ((events & (POLLIN | POLLRDNORM)) != 0 && efd->efd_count > 0) in eventfd_poll()
246 efd->efd_count) in eventfd_poll()
249 selrecord(td, &efd->efd_sel); in eventfd_poll()
250 mtx_unlock(&efd->efd_lock); in eventfd_poll()
258 struct eventfd *efd = fp->f_data; in eventfd_kqfilter() local
260 mtx_lock(&efd->efd_lock); in eventfd_kqfilter()
269 mtx_unlock(&efd->efd_lock); in eventfd_kqfilter()
273 kn->kn_hook = efd; in eventfd_kqfilter()
274 knlist_add(&efd->efd_sel.si_note, kn, 1); in eventfd_kqfilter()
275 mtx_unlock(&efd->efd_lock); in eventfd_kqfilter()
283 struct eventfd *efd = kn->kn_hook; in filt_eventfddetach() local
285 mtx_lock(&efd->efd_lock); in filt_eventfddetach()
286 knlist_remove(&efd->efd_sel.si_note, kn, 1); in filt_eventfddetach()
287 mtx_unlock(&efd->efd_lock); in filt_eventfddetach()
293 struct eventfd *efd = kn->kn_hook; in filt_eventfdread() local
296 mtx_assert(&efd->efd_lock, MA_OWNED); in filt_eventfdread()
297 kn->kn_data = (int64_t)efd->efd_count; in filt_eventfdread()
298 ret = efd->efd_count > 0; in filt_eventfdread()
306 struct eventfd *efd = kn->kn_hook; in filt_eventfdwrite() local
309 mtx_assert(&efd->efd_lock, MA_OWNED); in filt_eventfdwrite()
310 kn->kn_data = (int64_t)(UINT64_MAX - 1 - efd->efd_count); in filt_eventfdwrite()
311 ret = UINT64_MAX - 1 > efd->efd_count; in filt_eventfdwrite()
341 struct eventfd *efd = fp->f_data; in eventfd_fill_kinfo() local
344 mtx_lock(&efd->efd_lock); in eventfd_fill_kinfo()
345 kif->kf_un.kf_eventfd.kf_eventfd_value = efd->efd_count; in eventfd_fill_kinfo()
346 kif->kf_un.kf_eventfd.kf_eventfd_flags = efd->efd_flags; in eventfd_fill_kinfo()
347 mtx_unlock(&efd->efd_lock); in eventfd_fill_kinfo()