Index: usr.sbin/bhyve/mevent.h =================================================================== --- usr.sbin/bhyve/mevent.h +++ usr.sbin/bhyve/mevent.h @@ -35,7 +35,8 @@ EVF_READ, EVF_WRITE, EVF_TIMER, - EVF_SIGNAL + EVF_SIGNAL, + EVF_VNODE, }; struct mevent; @@ -46,6 +47,8 @@ struct mevent *mevent_add_disabled(int fd, enum ev_type type, void (*func)(int, enum ev_type, void *), void *param); +struct mevent *mevent_create(int fd, enum ev_type type, int flags, unsigned int fflags, + void (*func)(int, enum ev_type, void *), void *param); int mevent_enable(struct mevent *evp); int mevent_disable(struct mevent *evp); int mevent_delete(struct mevent *evp); Index: usr.sbin/bhyve/mevent.c =================================================================== --- usr.sbin/bhyve/mevent.c +++ usr.sbin/bhyve/mevent.c @@ -78,7 +78,8 @@ enum ev_type me_type; void *me_param; int me_cq; - int me_state; /* Desired kevent flags. */ + int me_state; /* Desired kevent flags. */ + unsigned int me_fflags; /* Filter-specific flags. */ int me_closefd; LIST_ENTRY(mevent) me_list; }; @@ -145,20 +146,24 @@ if (mevp->me_type == EVF_SIGNAL) retval = EVFILT_SIGNAL; + if (mevp->me_type == EVF_VNODE) + retval = EVFILT_VNODE; + return (retval); } static int mevent_kq_flags(struct mevent *mevp) { + return (mevp->me_state); } -static int +static unsigned int mevent_kq_fflags(struct mevent *mevp) { - /* XXX nothing yet, perhaps EV_EOF for reads ? */ - return (0); + + return (mevp->me_fflags); } static int @@ -234,7 +239,7 @@ static struct mevent * mevent_add_state(int tfd, enum ev_type type, void (*func)(int, enum ev_type, void *), void *param, - int state) + int state, unsigned int fflags) { struct mevent *lp, *mevp; @@ -283,6 +288,7 @@ LIST_INSERT_HEAD(&change_head, mevp, me_list); mevp->me_cq = 1; mevp->me_state = state; + mevp->me_fflags = fflags; mevent_notify(); exit: @@ -291,12 +297,20 @@ return (mevp); } +struct mevent * +mevent_create(int tfd, enum ev_type type, int flags, unsigned int fflags, + void (*func)(int, enum ev_type, void *), void *param) +{ + + return (mevent_add_state(tfd, type, func, param, flags, fflags)); +} + struct mevent * mevent_add(int tfd, enum ev_type type, void (*func)(int, enum ev_type, void *), void *param) { - return (mevent_add_state(tfd, type, func, param, EV_ADD)); + return (mevent_add_state(tfd, type, func, param, EV_ADD, 0)); } struct mevent * @@ -304,7 +318,7 @@ void (*func)(int, enum ev_type, void *), void *param) { - return (mevent_add_state(tfd, type, func, param, EV_ADD | EV_DISABLE)); + return (mevent_add_state(tfd, type, func, param, EV_ADD | EV_DISABLE, 0)); } static int