Lines Matching refs:efd

683 	struct eventfd *efd;  in eventfd_create()  local
696 efd = malloc(sizeof(*efd), M_EPOLL, M_WAITOK | M_ZERO); in eventfd_create()
697 efd->efd_flags = flags; in eventfd_create()
698 efd->efd_count = initval; in eventfd_create()
699 mtx_init(&efd->efd_lock, "eventfd", NULL, MTX_DEF); in eventfd_create()
701 knlist_init_mtx(&efd->efd_sel.si_note, &efd->efd_lock); in eventfd_create()
707 finit(fp, fflags, DTYPE_LINUXEFD, efd, &eventfdops); in eventfd_create()
736 struct eventfd *efd; in eventfd_close() local
738 efd = fp->f_data; in eventfd_close()
739 if (fp->f_type != DTYPE_LINUXEFD || efd == NULL) in eventfd_close()
742 seldrain(&efd->efd_sel); in eventfd_close()
743 knlist_destroy(&efd->efd_sel.si_note); in eventfd_close()
746 mtx_destroy(&efd->efd_lock); in eventfd_close()
747 free(efd, M_EPOLL); in eventfd_close()
756 struct eventfd *efd; in eventfd_read() local
760 efd = fp->f_data; in eventfd_read()
761 if (fp->f_type != DTYPE_LINUXEFD || efd == NULL) in eventfd_read()
768 mtx_lock(&efd->efd_lock); in eventfd_read()
770 if (efd->efd_count == 0) { in eventfd_read()
772 mtx_unlock(&efd->efd_lock); in eventfd_read()
775 error = mtx_sleep(&efd->efd_count, &efd->efd_lock, PCATCH, "lefdrd", 0); in eventfd_read()
780 if ((efd->efd_flags & LINUX_EFD_SEMAPHORE) != 0) { in eventfd_read()
782 --efd->efd_count; in eventfd_read()
784 count = efd->efd_count; in eventfd_read()
785 efd->efd_count = 0; in eventfd_read()
787 KNOTE_LOCKED(&efd->efd_sel.si_note, 0); in eventfd_read()
788 selwakeup(&efd->efd_sel); in eventfd_read()
789 wakeup(&efd->efd_count); in eventfd_read()
790 mtx_unlock(&efd->efd_lock); in eventfd_read()
793 mtx_unlock(&efd->efd_lock); in eventfd_read()
802 struct eventfd *efd; in eventfd_write() local
806 efd = fp->f_data; in eventfd_write()
807 if (fp->f_type != DTYPE_LINUXEFD || efd == NULL) in eventfd_write()
819 mtx_lock(&efd->efd_lock); in eventfd_write()
821 if (UINT64_MAX - efd->efd_count <= count) { in eventfd_write()
823 mtx_unlock(&efd->efd_lock); in eventfd_write()
828 error = mtx_sleep(&efd->efd_count, &efd->efd_lock, in eventfd_write()
834 efd->efd_count += count; in eventfd_write()
835 KNOTE_LOCKED(&efd->efd_sel.si_note, 0); in eventfd_write()
836 selwakeup(&efd->efd_sel); in eventfd_write()
837 wakeup(&efd->efd_count); in eventfd_write()
839 mtx_unlock(&efd->efd_lock); in eventfd_write()
848 struct eventfd *efd; in eventfd_poll() local
851 efd = fp->f_data; in eventfd_poll()
852 if (fp->f_type != DTYPE_LINUXEFD || efd == NULL) in eventfd_poll()
855 mtx_lock(&efd->efd_lock); in eventfd_poll()
856 if ((events & (POLLIN|POLLRDNORM)) && efd->efd_count > 0) in eventfd_poll()
858 if ((events & (POLLOUT|POLLWRNORM)) && UINT64_MAX - 1 > efd->efd_count) in eventfd_poll()
861 selrecord(td, &efd->efd_sel); in eventfd_poll()
862 mtx_unlock(&efd->efd_lock); in eventfd_poll()
871 struct eventfd *efd; in eventfd_kqfilter() local
873 efd = fp->f_data; in eventfd_kqfilter()
874 if (fp->f_type != DTYPE_LINUXEFD || efd == NULL) in eventfd_kqfilter()
877 mtx_lock(&efd->efd_lock); in eventfd_kqfilter()
886 mtx_unlock(&efd->efd_lock); in eventfd_kqfilter()
890 kn->kn_hook = efd; in eventfd_kqfilter()
891 knlist_add(&efd->efd_sel.si_note, kn, 1); in eventfd_kqfilter()
892 mtx_unlock(&efd->efd_lock); in eventfd_kqfilter()
900 struct eventfd *efd = kn->kn_hook; in filt_eventfddetach() local
902 mtx_lock(&efd->efd_lock); in filt_eventfddetach()
903 knlist_remove(&efd->efd_sel.si_note, kn, 1); in filt_eventfddetach()
904 mtx_unlock(&efd->efd_lock); in filt_eventfddetach()
911 struct eventfd *efd = kn->kn_hook; in filt_eventfdread() local
914 mtx_assert(&efd->efd_lock, MA_OWNED); in filt_eventfdread()
915 ret = (efd->efd_count > 0); in filt_eventfdread()
924 struct eventfd *efd = kn->kn_hook; in filt_eventfdwrite() local
927 mtx_assert(&efd->efd_lock, MA_OWNED); in filt_eventfdwrite()
928 ret = (UINT64_MAX - 1 > efd->efd_count); in filt_eventfdwrite()