Changeset View
Changeset View
Standalone View
Standalone View
usr.sbin/bhyve/mevent.c
Show First 20 Lines • Show All 56 Lines • ▼ Show 20 Lines | |||||
#include <pthread.h> | #include <pthread.h> | ||||
#include <pthread_np.h> | #include <pthread_np.h> | ||||
#include "mevent.h" | #include "mevent.h" | ||||
#define MEVENT_MAX 64 | #define MEVENT_MAX 64 | ||||
#define MEV_ADD 1 | #define MEV_ADD 1 | ||||
#define MEV_ENABLE 2 | #define MEV_ENABLE 2 | ||||
#define MEV_DISABLE 3 | #define MEV_DISABLE 3 | ||||
#define MEV_DEL_PENDING 4 | #define MEV_DEL_PENDING 4 | ||||
#define MEV_ADD_DISABLED 5 | |||||
extern char *vmname; | extern char *vmname; | ||||
static pthread_t mevent_tid; | static pthread_t mevent_tid; | ||||
static int mevent_timid = 43; | static int mevent_timid = 43; | ||||
static int mevent_pipefd[2]; | static int mevent_pipefd[2]; | ||||
static pthread_mutex_t mevent_lmutex = PTHREAD_MUTEX_INITIALIZER; | static pthread_mutex_t mevent_lmutex = PTHREAD_MUTEX_INITIALIZER; | ||||
▲ Show 20 Lines • Show All 79 Lines • ▼ Show 20 Lines | |||||
mevent_kq_flags(struct mevent *mevp) | mevent_kq_flags(struct mevent *mevp) | ||||
{ | { | ||||
int ret; | int ret; | ||||
switch (mevp->me_state) { | switch (mevp->me_state) { | ||||
case MEV_ADD: | case MEV_ADD: | ||||
ret = EV_ADD; /* implicitly enabled */ | ret = EV_ADD; /* implicitly enabled */ | ||||
break; | break; | ||||
case MEV_ADD_DISABLED: | |||||
ret = EV_ADD | EV_DISABLE; | |||||
break; | |||||
case MEV_ENABLE: | case MEV_ENABLE: | ||||
ret = EV_ENABLE; | ret = EV_ENABLE; | ||||
break; | break; | ||||
case MEV_DISABLE: | case MEV_DISABLE: | ||||
ret = EV_DISABLE; | ret = EV_DISABLE; | ||||
break; | break; | ||||
case MEV_DEL_PENDING: | case MEV_DEL_PENDING: | ||||
ret = EV_DELETE; | ret = EV_DELETE; | ||||
▲ Show 20 Lines • Show All 72 Lines • ▼ Show 20 Lines | for (i = 0; i < numev; i++) { | ||||
mevp = kev[i].udata; | mevp = kev[i].udata; | ||||
/* XXX check for EV_ERROR ? */ | /* XXX check for EV_ERROR ? */ | ||||
(*mevp->me_func)(mevp->me_fd, mevp->me_type, mevp->me_param); | (*mevp->me_func)(mevp->me_fd, mevp->me_type, mevp->me_param); | ||||
} | } | ||||
} | } | ||||
struct mevent * | static struct mevent * | ||||
mevent_add(int tfd, enum ev_type type, | mevent_add_state(int tfd, enum ev_type type, | ||||
jhb: Maybe 'mevent_add_state' and make 'int enabled' be 'int state' that you assign to me_state… | |||||
Done Inline ActionsGood idea, thanks. vmaffione: Good idea, thanks. | |||||
void (*func)(int, enum ev_type, void *), void *param) | void (*func)(int, enum ev_type, void *), void *param, | ||||
int state) | |||||
{ | { | ||||
struct mevent *lp, *mevp; | struct mevent *lp, *mevp; | ||||
if (tfd < 0 || func == NULL) { | if (tfd < 0 || func == NULL) { | ||||
return (NULL); | return (NULL); | ||||
} | } | ||||
mevp = NULL; | mevp = NULL; | ||||
Show All 31 Lines | mevent_add_state(int tfd, enum ev_type type, | ||||
} else | } else | ||||
mevp->me_fd = tfd; | mevp->me_fd = tfd; | ||||
mevp->me_type = type; | mevp->me_type = type; | ||||
mevp->me_func = func; | mevp->me_func = func; | ||||
mevp->me_param = param; | mevp->me_param = param; | ||||
LIST_INSERT_HEAD(&change_head, mevp, me_list); | LIST_INSERT_HEAD(&change_head, mevp, me_list); | ||||
mevp->me_cq = 1; | mevp->me_cq = 1; | ||||
mevp->me_state = MEV_ADD; | mevp->me_state = state; | ||||
mevent_notify(); | mevent_notify(); | ||||
exit: | exit: | ||||
mevent_qunlock(); | mevent_qunlock(); | ||||
return (mevp); | return (mevp); | ||||
} | |||||
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, MEV_ADD); | |||||
} | } | ||||
static int | static int | ||||
mevent_update(struct mevent *evp, int newstate) | mevent_update(struct mevent *evp, int newstate) | ||||
{ | { | ||||
/* | /* | ||||
* It's not possible to enable/disable a deleted event | * It's not possible to enable/disable a deleted event | ||||
*/ | */ | ||||
▲ Show 20 Lines • Show All 167 Lines • Show Last 20 Lines |
Maybe 'mevent_add_state' and make 'int enabled' be 'int state' that you assign to me_state directly. This removes the need for the comments as you then have: