Deleted Added
full compact
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 ---