![Greg KH](/assets/img/avatar_default.png)
[resend due to me forgetting to cc: linux-api the first time around I posted these back on Feb 23] From: Greg Kroah-Hartman <gregkh@linuxfoundation.org> For some reason these values are not in the uapi header file, so any libc has to define it themselves. To prevent them from needing to do this, just have the kernel provide the correct values. Reported-by: Elliott Hughes <enh@google.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
93 lines
2.4 KiB
C
93 lines
2.4 KiB
C
/*
|
|
* include/linux/eventpoll.h ( Efficient event polling implementation )
|
|
* Copyright (C) 2001,...,2006 Davide Libenzi
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* Davide Libenzi <davidel@xmailserver.org>
|
|
*
|
|
*/
|
|
|
|
#ifndef _UAPI_LINUX_EVENTPOLL_H
|
|
#define _UAPI_LINUX_EVENTPOLL_H
|
|
|
|
/* For O_CLOEXEC */
|
|
#include <linux/fcntl.h>
|
|
#include <linux/types.h>
|
|
|
|
/* Flags for epoll_create1. */
|
|
#define EPOLL_CLOEXEC O_CLOEXEC
|
|
|
|
/* Valid opcodes to issue to sys_epoll_ctl() */
|
|
#define EPOLL_CTL_ADD 1
|
|
#define EPOLL_CTL_DEL 2
|
|
#define EPOLL_CTL_MOD 3
|
|
|
|
/* Epoll event masks */
|
|
#define EPOLLIN 0x00000001
|
|
#define EPOLLPRI 0x00000002
|
|
#define EPOLLOUT 0x00000004
|
|
#define EPOLLERR 0x00000008
|
|
#define EPOLLHUP 0x00000010
|
|
#define EPOLLRDNORM 0x00000040
|
|
#define EPOLLRDBAND 0x00000080
|
|
#define EPOLLWRNORM 0x00000100
|
|
#define EPOLLWRBAND 0x00000200
|
|
#define EPOLLMSG 0x00000400
|
|
#define EPOLLRDHUP 0x00002000
|
|
|
|
/* Set exclusive wakeup mode for the target file descriptor */
|
|
#define EPOLLEXCLUSIVE (1U << 28)
|
|
|
|
/*
|
|
* Request the handling of system wakeup events so as to prevent system suspends
|
|
* from happening while those events are being processed.
|
|
*
|
|
* Assuming neither EPOLLET nor EPOLLONESHOT is set, system suspends will not be
|
|
* re-allowed until epoll_wait is called again after consuming the wakeup
|
|
* event(s).
|
|
*
|
|
* Requires CAP_BLOCK_SUSPEND
|
|
*/
|
|
#define EPOLLWAKEUP (1U << 29)
|
|
|
|
/* Set the One Shot behaviour for the target file descriptor */
|
|
#define EPOLLONESHOT (1U << 30)
|
|
|
|
/* Set the Edge Triggered behaviour for the target file descriptor */
|
|
#define EPOLLET (1U << 31)
|
|
|
|
/*
|
|
* On x86-64 make the 64bit structure have the same alignment as the
|
|
* 32bit structure. This makes 32bit emulation easier.
|
|
*
|
|
* UML/x86_64 needs the same packing as x86_64
|
|
*/
|
|
#ifdef __x86_64__
|
|
#define EPOLL_PACKED __attribute__((packed))
|
|
#else
|
|
#define EPOLL_PACKED
|
|
#endif
|
|
|
|
struct epoll_event {
|
|
__u32 events;
|
|
__u64 data;
|
|
} EPOLL_PACKED;
|
|
|
|
#ifdef CONFIG_PM_SLEEP
|
|
static inline void ep_take_care_of_epollwakeup(struct epoll_event *epev)
|
|
{
|
|
if ((epev->events & EPOLLWAKEUP) && !capable(CAP_BLOCK_SUSPEND))
|
|
epev->events &= ~EPOLLWAKEUP;
|
|
}
|
|
#else
|
|
static inline void ep_take_care_of_epollwakeup(struct epoll_event *epev)
|
|
{
|
|
epev->events &= ~EPOLLWAKEUP;
|
|
}
|
|
#endif
|
|
#endif /* _UAPI_LINUX_EVENTPOLL_H */
|