1*1767006bSBryan Cantrill.\" 2*1767006bSBryan Cantrill.\" This file and its contents are supplied under the terms of the 3*1767006bSBryan Cantrill.\" Common Development and Distribution License ("CDDL"), version 1.0. 4*1767006bSBryan Cantrill.\" You may only use this file in accordance with the terms of version 5*1767006bSBryan Cantrill.\" 1.0 of the CDDL. 6*1767006bSBryan Cantrill.\" 7*1767006bSBryan Cantrill.\" A full copy of the text of the CDDL should have accompanied this 8*1767006bSBryan Cantrill.\" source. A copy of the CDDL is also available via the Internet at 9*1767006bSBryan Cantrill.\" http://www.illumos.org/license/CDDL. 10*1767006bSBryan Cantrill.\" 11*1767006bSBryan Cantrill.\" 12*1767006bSBryan Cantrill.\" Copyright (c) 2014, Joyent, Inc. All Rights Reserved. 13*1767006bSBryan Cantrill.\" 14*1767006bSBryan Cantrill.Dd Dec 3, 2014 15*1767006bSBryan Cantrill.Dt EVENTFD 3C 16*1767006bSBryan Cantrill.Os 17*1767006bSBryan Cantrill.Sh NAME 18*1767006bSBryan Cantrill.Nm eventfd 19*1767006bSBryan Cantrill.Nd create a file descriptor for event notification 20*1767006bSBryan Cantrill.Sh SYNOPSIS 21*1767006bSBryan Cantrill.In sys/eventfd.h 22*1767006bSBryan Cantrill.Ft int 23*1767006bSBryan Cantrill.Fo eventfd 24*1767006bSBryan Cantrill.Fa "unsigned int initval" 25*1767006bSBryan Cantrill.Fa "int flags" 26*1767006bSBryan Cantrill.Fc 27*1767006bSBryan Cantrill.Sh DESCRIPTION 28*1767006bSBryan CantrillThe 29*1767006bSBryan Cantrill.Fn eventfd 30*1767006bSBryan Cantrillfunction creates an 31*1767006bSBryan Cantrill.Xr eventfd 5 32*1767006bSBryan Cantrillinstance that has an associated 64-bit unsigned counter. It returns a file 33*1767006bSBryan Cantrilldescriptor that can be operated upon via 34*1767006bSBryan Cantrill.Xr read 2 , 35*1767006bSBryan Cantrill.Xr write 2 36*1767006bSBryan Cantrilland the facilities that notify of file descriptor activity (e.g., 37*1767006bSBryan Cantrill.Xr poll 2 , 38*1767006bSBryan Cantrill.Xr port_get 3C , 39*1767006bSBryan Cantrill.Xr epoll_wait 3C Ns ). 40*1767006bSBryan CantrillTo dispose of the instance, 41*1767006bSBryan Cantrill.Xr close 2 42*1767006bSBryan Cantrillshould be called on the file descriptor. 43*1767006bSBryan Cantrill.Pp 44*1767006bSBryan CantrillThe 45*1767006bSBryan Cantrill.Fa initval 46*1767006bSBryan Cantrillargument specifies the initial value of the 64-bit counter associated with the 47*1767006bSBryan Cantrillinstance. (Note that this limits the initial value to be a 32-bit quantity 48*1767006bSBryan Cantrilldespite the fact that the underlying counter is 64-bit.) 49*1767006bSBryan Cantrill.Pp 50*1767006bSBryan CantrillThe \fIflags\fR argument specifies additional parameters for the 51*1767006bSBryan Cantrillinstance, and can have any of the following values: 52*1767006bSBryan Cantrill.Bl -hang -width Ds 53*1767006bSBryan Cantrill.It Sy EFD_CLOEXEC 54*1767006bSBryan Cantrill.Bd -filled -compact 55*1767006bSBryan CantrillInstance will be closed upon an 56*1767006bSBryan Cantrill.Xr exec 2 ; 57*1767006bSBryan Cantrillsee 58*1767006bSBryan Cantrill.Xr open 2 Ns 's 59*1767006bSBryan Cantrilldescription of 60*1767006bSBryan Cantrill.Sy O_CLOEXEC . 61*1767006bSBryan Cantrill.Ed 62*1767006bSBryan Cantrill.It Sy EFD_NONBLOCK 63*1767006bSBryan Cantrill.Bd -filled -compact 64*1767006bSBryan CantrillInstance will be set to be non-blocking. A 65*1767006bSBryan Cantrill.Xr read 2 66*1767006bSBryan Cantrillon an 67*1767006bSBryan Cantrill.Sy eventfd 68*1767006bSBryan Cantrillinstance that has been initialized with 69*1767006bSBryan Cantrill.Sy EFD_NONBLOCK 70*1767006bSBryan Cantrillwill return 71*1767006bSBryan Cantrill.Sy EAGAIN 72*1767006bSBryan Cantrillin lieu of blocking if the count associated with the instance is zero. 73*1767006bSBryan Cantrill.Ed 74*1767006bSBryan Cantrill.It EFD_SEMAPHORE 75*1767006bSBryan Cantrill.Bd -filled -compact 76*1767006bSBryan CantrillProvide counting semaphore semantics whereby a 77*1767006bSBryan Cantrill.Xr read 2 78*1767006bSBryan Cantrillwill atomically decrement rather than atomically clear the count when it 79*1767006bSBryan Cantrillbecomes non-zero. See below for details on 80*1767006bSBryan Cantrill.Xr read 2 81*1767006bSBryan Cantrillsemantics. 82*1767006bSBryan Cantrill.Ed 83*1767006bSBryan Cantrill.El 84*1767006bSBryan Cantrill.Pp 85*1767006bSBryan CantrillThe following operations can be performed upon an 86*1767006bSBryan Cantrill.Sy eventfd 87*1767006bSBryan Cantrillinstance: 88*1767006bSBryan Cantrill.Bl -hang -width Ds 89*1767006bSBryan Cantrill.It Sy read(2) 90*1767006bSBryan Cantrill.Bd -filled -compact 91*1767006bSBryan CantrillAtomically reads and modifies the value of the 64-bit counter associated 92*1767006bSBryan Cantrillwith the instance. The precise semantics 93*1767006bSBryan Cantrillof 94*1767006bSBryan Cantrill.Xr read 2 95*1767006bSBryan Cantrilldepend on the disposition of 96*1767006bSBryan Cantrill.Sy EFD_SEMAPHORE 97*1767006bSBryan Cantrillwith 98*1767006bSBryan Cantrillrespect to the instance: if 99*1767006bSBryan Cantrill.Sy EFD_SEMAPTHORE 100*1767006bSBryan Cantrillwas set when the instance was created, 101*1767006bSBryan Cantrill.Xr read 2 102*1767006bSBryan Cantrillwill 103*1767006bSBryan Cantrill.Em atomically decrement 104*1767006bSBryan Cantrillthe counter if (and when) it is non-zero, copying the value 1 to the eight 105*1767006bSBryan Cantrillbyte buffer passed to the system call; if 106*1767006bSBryan Cantrill.Sy EFD_SEMAPHORE 107*1767006bSBryan Cantrillwas not set, 108*1767006bSBryan Cantrill.Xr read 2 109*1767006bSBryan Cantrillwill 110*1767006bSBryan Cantrill.Em atomically clear 111*1767006bSBryan Cantrillthe counter if (and when) it is non-zero, copying the former value of the 112*1767006bSBryan Cantrillcounter to the eight byte buffer passed to the 113*1767006bSBryan Cantrillsystem call. In either case, 114*1767006bSBryan Cantrill.Xr read 2 115*1767006bSBryan Cantrillwill block if the counter is 116*1767006bSBryan Cantrillzero (or return 117*1767006bSBryan Cantrill.Sy EAGAIN 118*1767006bSBryan Cantrillif the instance was created with 119*1767006bSBryan Cantrill.Sy EFD_NONBLOCK Ns ). 120*1767006bSBryan CantrillIf the buffer specified to 121*1767006bSBryan Cantrill.Xr read 2 122*1767006bSBryan Cantrillis less than 123*1767006bSBryan Cantrilleight bytes in length, 124*1767006bSBryan Cantrill.Sy EINVAL 125*1767006bSBryan Cantrillwill be returned. 126*1767006bSBryan Cantrill.Ed 127*1767006bSBryan Cantrill.It Sy write(2) 128*1767006bSBryan Cantrill.Bd -filled -compact 129*1767006bSBryan CantrillAtomically adds the 64-bit value pointed to by the buffer to the 64-bit 130*1767006bSBryan Cantrillcounter associated with the instance. If the resulting value would overflow, 131*1767006bSBryan Cantrillthe 132*1767006bSBryan Cantrill.Xr write 2 133*1767006bSBryan Cantrillwill block until the value would not overflow 134*1767006bSBryan Cantrill(or return 135*1767006bSBryan Cantrill.Sy EAGAIN 136*1767006bSBryan CantrillEAGAIN if the instance was created with 137*1767006bSBryan Cantrill.Sy EFD_NONBLOCK Ns ). 138*1767006bSBryan CantrillIf the buffer specified to 139*1767006bSBryan Cantrill.Xr write 2 140*1767006bSBryan Cantrillis less than eight bytes in length, 141*1767006bSBryan Cantrill.Sy EINVAL 142*1767006bSBryan Cantrillwill be returned. 143*1767006bSBryan Cantrill.Ed 144*1767006bSBryan Cantrill.It Sy poll(2), port_get(3C), epoll_wait(3C) 145*1767006bSBryan Cantrill.Bd -filled -compact 146*1767006bSBryan CantrillProvide notification when the 64-bit counter associated 147*1767006bSBryan Cantrillwith the instance is ready for reading or writing, as specified. 148*1767006bSBryan CantrillIf the 64-bit value associated with the instance is non-zero, 149*1767006bSBryan Cantrill.Sy POLLIN 150*1767006bSBryan Cantrilland 151*1767006bSBryan Cantrill.Sy POLLRDNORM 152*1767006bSBryan Cantrillwill be set; if the value 1 can be added the value 153*1767006bSBryan Cantrillwithout blocking, 154*1767006bSBryan Cantrill.Sy POLLOUT 155*1767006bSBryan Cantrilland 156*1767006bSBryan Cantrill.Sy POLLWRNORM 157*1767006bSBryan Cantrillwill be set. 158*1767006bSBryan Cantrill.Ed 159*1767006bSBryan Cantrill.El 160*1767006bSBryan Cantrill.Sh RETURN VALUES 161*1767006bSBryan CantrillUpon succesful completion, a file descriptor associated with the instance 162*1767006bSBryan Cantrillis returned. Otherwise, 163*1767006bSBryan Cantrill.Sy -1 is returned and 164*1767006bSBryan Cantrill.Sy errno 165*1767006bSBryan Cantrillis set to indicate the error. 166*1767006bSBryan Cantrill.Sh ERRORS 167*1767006bSBryan CantrillThe 168*1767006bSBryan Cantrill.Fn eventfd 169*1767006bSBryan Cantrillfunction will fail if: 170*1767006bSBryan Cantrill.Bl -tag -width Er 171*1767006bSBryan Cantrill.It Er EINVAL 172*1767006bSBryan CantrillThe 173*1767006bSBryan Cantrill.Fa flags 174*1767006bSBryan Cantrillare invalid. 175*1767006bSBryan Cantrill.It Er EMFILE 176*1767006bSBryan CantrillThere are currently 177*1767006bSBryan Cantrill.Pf { Sy OPEN_MAX Ns } 178*1767006bSBryan Cantrillfile descriptors open in the calling process. 179*1767006bSBryan Cantrill.El 180*1767006bSBryan Cantrill.Sh SEE ALSO 181*1767006bSBryan Cantrill.Xr poll 2 , 182*1767006bSBryan Cantrill.Xr port_get 3C , 183*1767006bSBryan Cantrill.Xr epoll_wait 3C , 184*1767006bSBryan Cantrill.Xr eventfd 5 185