diff --git a/sys/kern/sys_eventfd.c b/sys/kern/sys_eventfd.c --- a/sys/kern/sys_eventfd.c +++ b/sys/kern/sys_eventfd.c @@ -157,6 +157,21 @@ free(efd, M_EVENTFD); } +void +eventfd_signal_mask(struct eventfd *efd, unsigned int mask __unused) +{ + mtx_lock(&efd->efd_lock); + + if (efd->efd_count < UINT64_MAX) + efd->efd_count++; + + KNOTE_LOCKED(&efd->efd_sel.si_note, 0); + selwakeup(&efd->efd_sel); + wakeup(&efd->efd_count); + + mtx_unlock(&efd->efd_lock); +} + static int eventfd_close(struct file *fp, struct thread *td) { diff --git a/sys/sys/eventfd.h b/sys/sys/eventfd.h --- a/sys/sys/eventfd.h +++ b/sys/sys/eventfd.h @@ -44,6 +44,7 @@ int flags); struct eventfd *eventfd_get(struct file *fp); void eventfd_put(struct eventfd *efd); +void eventfd_signal_mask(struct eventfd *efd, unsigned int mask); #else