(adding lkml and linux-pm and I probably should have done from the start). On Mon, 07 Jul 2014 08:46:28 +0200 "Michael Kerrisk (man-pages)" <mtk.manpages@xxxxxxxxx> wrote: > Hi Neil, > > On 07/06/2014 11:03 AM, NeilBrown wrote: > > > > > > Signed-off-by: NeilBrown <neilb@xxxxxxx> > > -- > > > > I noticed that this was missing so had a go at writing something. > > Thanks. I applied this, and also added the additional piece shown > at the end of this mail. > > > Is there / Should there be a section 7 man page describing suspend and > > autosuspend and wakelocks etc?? > > Sounds like it might be useful, but I don't know for sure. On the > assumption that it might be possible to convince you to write one, > could you briefly list what you think should be covered in the page? I was particularly thinking of "/sys/power/autosleep" because my change to epoll.7 mentioned autosleep, but there was no man page to reference. The interaction of /sys/power/wakeup_count" with suspend/resume is also worth documenting as is the use of wake_locks via /sys/power/wake_{,un}lock (which could also usefully be referenced by epoll(7)). Given the number of filenames here, maybe this belongs in section 5 rather than section 7. Similar to proc(5) we could have power(5) which documents /sys/power ??? (OK, I can see this might be opening a can of worms - we'll be having class(5) and bus(5) and devices(5) next... but maybe this is a good thing. And seeing these are all part of the kernel API, maybe they should be in section 2 with the systemcalls. Or do with need a new section of API virtual files ....) So I guess "ls /sys/power" is a brief list of what should be included in the page :-) And thanks for your improvements to my submission! NeilBrown > > > Comments (of course) welcome. > > > > NeilBrown > > > > > > diff --git a/man2/epoll_ctl.2 b/man2/epoll_ctl.2 > > index 1fbe74eeea4e..6388f19195f1 100644 > > --- a/man2/epoll_ctl.2 > > +++ b/man2/epoll_ctl.2 > > @@ -154,6 +154,26 @@ The user must call > > with > > .B EPOLL_CTL_MOD > > to rearm the file descriptor with a new event mask. > > +.TP > > +.BR EPOLLWAKEUP " (since Linux 3.5)" > > +If > > +.B EPOLLONESHOT > > +and > > +.B EPOLLET > > +are clear and the process has the > > +.B CAP_BLOCK_SUSPEND > > +.BR capability (7), > > +ensure that the system does not enter "suspend" or > > +"hibernate" while this event is pending or being processed. > > +The event is considered as being "processed" from when it returned by > > +a call to > > +.BR epoll_wait (2) > > +until the next call to > > +.BR epoll_wait (2) > > +on the same > > +.BR epoll (7) > > +file descriptor. > > +.\" commit 4d7e30d98939a0340022ccd49325a3d70f7e0238 > > .SH RETURN VALUE > > When successful, > > .BR epoll_ctl () > > diff --git a/man7/epoll.7 b/man7/epoll.7 > > index a372d9727978..31b1a8c8c9ba 100644 > > --- a/man7/epoll.7 > > +++ b/man7/epoll.7 > > @@ -173,6 +173,35 @@ it is the caller's responsibility to rearm the file > > descriptor using .BR epoll_ctl (2) > > with > > .BR EPOLL_CTL_MOD . > > +.SS Interaction with autosleep > > +If the system is in > > +.B autosleep > > +mode via > > +.I /sys/power/autosleep > > +and an event happens which wakes the device from sleep, the device > > +driver will only keep the device awake until that event is queued. To > > +keep the device awake until the event has been processed it is > > +necessary to use > > +.B epoll > > +and the > > +.B EPOLLWAKEUP > > +flag. > > + > > +When this flag is set in the > > +.B events > > +field for a > > +.I struct epoll_event > > +then system will be kept awake from the moment the event is queued, > > +through the > > +.IR epoll_wait (2) > > +call which returns the event until the subsequent > > +.IR epoll_wait (2) > > +call. If the event should keep the system awake beyond that time, > > +the a separate > > +.I wake_lock > > +should be taken before the second > > +.IR epoll_wait (2) > > +call. > > .SS /proc interfaces > > The following interfaces can be used to limit the amount of > > kernel memory consumed by epoll: > > All of the above looks good. I also added the piece sad little > detail shown below. > > Cheers, > > Michael > > --- a/man2/epoll_ctl.2 > +++ b/man2/epoll_ctl.2 > @@ -174,6 +174,7 @@ until the next call to > on the same > .BR epoll (7) > file descriptor. > +See also BUGS. > .SH RETURN VALUE > When successful, > .BR epoll_ctl () > @@ -270,6 +271,33 @@ when using > Applications that need to be portable to kernels before 2.6.9 > should specify a non-null pointer in > .IR event . > + > +If > +.B EPOLLWAKEUP > +is specified in > +.IR flags , > +but the caller does not have the > +.BR CAP_BLOCK_SUSPEND > +capability, then the > +.B EPOLLWAKEUP > +flag is > +.IR "silently ignored" . > +This unfortunate behavior is necessary because no validity > +checks were performed on the > +.IR flags > +argument in the original implementation, and the addition of the > +.B EPOLLWAKEUP > +with a check that caused the call to fail if the caller did not have the > +.B CAP_BLOCK_SUSPEND > +capability caused a breakage in at least one existing user-space > +application that happened to randomly (and uselessly) specify this bit. > +.\" commit a8159414d7e3af7233e7a5a82d1c5d85379bd75c (behavior change) > +.\" https://lwn.net/Articles/520198/ > +A robust application should therefore double check that it has the > +.B CAP_BLOCK_SUSPEND > +capability if attempting to use the > +.B EPOLLWAKEUP > +flag. > .SH SEE ALSO > .BR epoll_create (2), > .BR epoll_wait (2), > > > >
Attachment:
signature.asc
Description: PGP signature