mevent.c (261090) | mevent.c (268953) |
---|---|
1/*- 2 * Copyright (c) 2011 NetApp, Inc. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 9 unchanged lines hidden (view full) --- 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 * | 1/*- 2 * Copyright (c) 2011 NetApp, Inc. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 9 unchanged lines hidden (view full) --- 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 * |
26 * $FreeBSD: stable/10/usr.sbin/bhyve/mevent.c 261090 2014-01-23 20:35:32Z jhb $ | 26 * $FreeBSD: stable/10/usr.sbin/bhyve/mevent.c 268953 2014-07-21 19:08:02Z jhb $ |
27 */ 28 29/* 30 * Micro event library for FreeBSD, designed for a single i/o thread 31 * using kqueue, and having events be persistent by default. 32 */ 33 34#include <sys/cdefs.h> | 27 */ 28 29/* 30 * Micro event library for FreeBSD, designed for a single i/o thread 31 * using kqueue, and having events be persistent by default. 32 */ 33 34#include <sys/cdefs.h> |
35__FBSDID("$FreeBSD: stable/10/usr.sbin/bhyve/mevent.c 261090 2014-01-23 20:35:32Z jhb $"); | 35__FBSDID("$FreeBSD: stable/10/usr.sbin/bhyve/mevent.c 268953 2014-07-21 19:08:02Z jhb $"); |
36 37#include <assert.h> 38#include <errno.h> 39#include <stdlib.h> 40#include <stdio.h> 41#include <string.h> 42#include <unistd.h> 43 44#include <sys/types.h> 45#include <sys/event.h> 46#include <sys/time.h> 47 48#include <pthread.h> 49#include <pthread_np.h> 50 51#include "mevent.h" 52 53#define MEVENT_MAX 64 54 | 36 37#include <assert.h> 38#include <errno.h> 39#include <stdlib.h> 40#include <stdio.h> 41#include <string.h> 42#include <unistd.h> 43 44#include <sys/types.h> 45#include <sys/event.h> 46#include <sys/time.h> 47 48#include <pthread.h> 49#include <pthread_np.h> 50 51#include "mevent.h" 52 53#define MEVENT_MAX 64 54 |
55#define MEV_ENABLE 1 56#define MEV_DISABLE 2 57#define MEV_DEL_PENDING 3 | 55#define MEV_ADD 1 56#define MEV_ENABLE 2 57#define MEV_DISABLE 3 58#define MEV_DEL_PENDING 4 |
58 59extern char *vmname; 60 61static pthread_t mevent_tid; 62static int mevent_timid = 43; 63static int mevent_pipefd[2]; 64static pthread_mutex_t mevent_lmutex = PTHREAD_MUTEX_INITIALIZER; 65 --- 76 unchanged lines hidden (view full) --- 142} 143 144static int 145mevent_kq_flags(struct mevent *mevp) 146{ 147 int ret; 148 149 switch (mevp->me_state) { | 59 60extern char *vmname; 61 62static pthread_t mevent_tid; 63static int mevent_timid = 43; 64static int mevent_pipefd[2]; 65static pthread_mutex_t mevent_lmutex = PTHREAD_MUTEX_INITIALIZER; 66 --- 76 unchanged lines hidden (view full) --- 143} 144 145static int 146mevent_kq_flags(struct mevent *mevp) 147{ 148 int ret; 149 150 switch (mevp->me_state) { |
151 case MEV_ADD: 152 ret = EV_ADD; /* implicitly enabled */ 153 break; |
|
150 case MEV_ENABLE: | 154 case MEV_ENABLE: |
151 ret = EV_ADD; 152 if (mevp->me_type == EVF_TIMER) 153 ret |= EV_ENABLE; | 155 ret = EV_ENABLE; |
154 break; 155 case MEV_DISABLE: 156 ret = EV_DISABLE; 157 break; 158 case MEV_DEL_PENDING: 159 ret = EV_DELETE; 160 break; | 156 break; 157 case MEV_DISABLE: 158 ret = EV_DISABLE; 159 break; 160 case MEV_DEL_PENDING: 161 ret = EV_DELETE; 162 break; |
163 default: 164 assert(0); 165 break; |
|
161 } 162 163 return (ret); 164} 165 166static int 167mevent_kq_fflags(struct mevent *mevp) 168{ --- 94 unchanged lines hidden (view full) --- 263 lp->me_type == type) { 264 goto exit; 265 } 266 } 267 268 /* 269 * Allocate an entry, populate it, and add it to the change list. 270 */ | 166 } 167 168 return (ret); 169} 170 171static int 172mevent_kq_fflags(struct mevent *mevp) 173{ --- 94 unchanged lines hidden (view full) --- 268 lp->me_type == type) { 269 goto exit; 270 } 271 } 272 273 /* 274 * Allocate an entry, populate it, and add it to the change list. 275 */ |
271 mevp = malloc(sizeof(struct mevent)); | 276 mevp = calloc(1, sizeof(struct mevent)); |
272 if (mevp == NULL) { 273 goto exit; 274 } 275 | 277 if (mevp == NULL) { 278 goto exit; 279 } 280 |
276 memset(mevp, 0, sizeof(struct mevent)); | |
277 if (type == EVF_TIMER) { 278 mevp->me_msecs = tfd; 279 mevp->me_timid = mevent_timid++; 280 } else 281 mevp->me_fd = tfd; 282 mevp->me_type = type; 283 mevp->me_func = func; 284 mevp->me_param = param; 285 286 LIST_INSERT_HEAD(&change_head, mevp, me_list); 287 mevp->me_cq = 1; | 281 if (type == EVF_TIMER) { 282 mevp->me_msecs = tfd; 283 mevp->me_timid = mevent_timid++; 284 } else 285 mevp->me_fd = tfd; 286 mevp->me_type = type; 287 mevp->me_func = func; 288 mevp->me_param = param; 289 290 LIST_INSERT_HEAD(&change_head, mevp, me_list); 291 mevp->me_cq = 1; |
288 mevp->me_state = MEV_ENABLE; | 292 mevp->me_state = MEV_ADD; |
289 mevent_notify(); 290 291exit: 292 mevent_qunlock(); 293 294 return (mevp); 295} 296 --- 156 unchanged lines hidden --- | 293 mevent_notify(); 294 295exit: 296 mevent_qunlock(); 297 298 return (mevp); 299} 300 --- 156 unchanged lines hidden --- |