Lines Matching refs:efd

108 	struct eventfd *efd;  in eventfd_create_file()  local
114 efd = malloc(sizeof(*efd), M_EVENTFD, M_WAITOK | M_ZERO); in eventfd_create_file()
115 efd->efd_flags = flags; in eventfd_create_file()
116 efd->efd_count = initval; in eventfd_create_file()
117 mtx_init(&efd->efd_lock, "eventfd", NULL, MTX_DEF); in eventfd_create_file()
118 knlist_init_mtx(&efd->efd_sel.si_note, &efd->efd_lock); in eventfd_create_file()
123 finit(fp, fflags, DTYPE_EVENTFD, efd, &eventfdops); in eventfd_create_file()
131 struct eventfd *efd; in eventfd_close() local
133 efd = fp->f_data; in eventfd_close()
134 seldrain(&efd->efd_sel); in eventfd_close()
135 knlist_destroy(&efd->efd_sel.si_note); in eventfd_close()
136 mtx_destroy(&efd->efd_lock); in eventfd_close()
137 free(efd, M_EVENTFD); in eventfd_close()
145 struct eventfd *efd; in eventfd_read() local
153 efd = fp->f_data; in eventfd_read()
154 mtx_lock(&efd->efd_lock); in eventfd_read()
155 while (error == 0 && efd->efd_count == 0) { in eventfd_read()
157 mtx_unlock(&efd->efd_lock); in eventfd_read()
160 error = mtx_sleep(&efd->efd_count, &efd->efd_lock, PCATCH, in eventfd_read()
164 MPASS(efd->efd_count > 0); in eventfd_read()
165 if ((efd->efd_flags & EFD_SEMAPHORE) != 0) { in eventfd_read()
167 --efd->efd_count; in eventfd_read()
169 count = efd->efd_count; in eventfd_read()
170 efd->efd_count = 0; in eventfd_read()
172 KNOTE_LOCKED(&efd->efd_sel.si_note, 0); in eventfd_read()
173 selwakeup(&efd->efd_sel); in eventfd_read()
174 wakeup(&efd->efd_count); in eventfd_read()
175 mtx_unlock(&efd->efd_lock); in eventfd_read()
178 mtx_unlock(&efd->efd_lock); in eventfd_read()
187 struct eventfd *efd; in eventfd_write() local
200 efd = fp->f_data; in eventfd_write()
201 mtx_lock(&efd->efd_lock); in eventfd_write()
203 if (UINT64_MAX - efd->efd_count <= count) { in eventfd_write()
205 mtx_unlock(&efd->efd_lock); in eventfd_write()
210 error = mtx_sleep(&efd->efd_count, &efd->efd_lock, in eventfd_write()
216 MPASS(UINT64_MAX - efd->efd_count > count); in eventfd_write()
217 efd->efd_count += count; in eventfd_write()
218 KNOTE_LOCKED(&efd->efd_sel.si_note, 0); in eventfd_write()
219 selwakeup(&efd->efd_sel); in eventfd_write()
220 wakeup(&efd->efd_count); in eventfd_write()
222 mtx_unlock(&efd->efd_lock); in eventfd_write()
231 struct eventfd *efd; in eventfd_poll() local
234 efd = fp->f_data; in eventfd_poll()
236 mtx_lock(&efd->efd_lock); in eventfd_poll()
237 if ((events & (POLLIN | POLLRDNORM)) != 0 && efd->efd_count > 0) in eventfd_poll()
240 efd->efd_count) in eventfd_poll()
243 selrecord(td, &efd->efd_sel); in eventfd_poll()
244 mtx_unlock(&efd->efd_lock); in eventfd_poll()
252 struct eventfd *efd = fp->f_data; in eventfd_kqfilter() local
254 mtx_lock(&efd->efd_lock); in eventfd_kqfilter()
263 mtx_unlock(&efd->efd_lock); in eventfd_kqfilter()
267 kn->kn_hook = efd; in eventfd_kqfilter()
268 knlist_add(&efd->efd_sel.si_note, kn, 1); in eventfd_kqfilter()
269 mtx_unlock(&efd->efd_lock); in eventfd_kqfilter()
277 struct eventfd *efd = kn->kn_hook; in filt_eventfddetach() local
279 mtx_lock(&efd->efd_lock); in filt_eventfddetach()
280 knlist_remove(&efd->efd_sel.si_note, kn, 1); in filt_eventfddetach()
281 mtx_unlock(&efd->efd_lock); in filt_eventfddetach()
287 struct eventfd *efd = kn->kn_hook; in filt_eventfdread() local
290 mtx_assert(&efd->efd_lock, MA_OWNED); in filt_eventfdread()
291 kn->kn_data = (int64_t)efd->efd_count; in filt_eventfdread()
292 ret = efd->efd_count > 0; in filt_eventfdread()
300 struct eventfd *efd = kn->kn_hook; in filt_eventfdwrite() local
303 mtx_assert(&efd->efd_lock, MA_OWNED); in filt_eventfdwrite()
304 kn->kn_data = (int64_t)(UINT64_MAX - 1 - efd->efd_count); in filt_eventfdwrite()
305 ret = UINT64_MAX - 1 > efd->efd_count; in filt_eventfdwrite()
334 struct eventfd *efd = fp->f_data; in eventfd_fill_kinfo() local
337 mtx_lock(&efd->efd_lock); in eventfd_fill_kinfo()
338 kif->kf_un.kf_eventfd.kf_eventfd_value = efd->efd_count; in eventfd_fill_kinfo()
339 kif->kf_un.kf_eventfd.kf_eventfd_flags = efd->efd_flags; in eventfd_fill_kinfo()
340 kif->kf_un.kf_eventfd.kf_eventfd_addr = (uintptr_t)efd; in eventfd_fill_kinfo()
341 mtx_unlock(&efd->efd_lock); in eventfd_fill_kinfo()