unify {de,}mangle_poll(), get rid of kernel-side POLL...

except, again, POLLFREE and POLL_BUSY_LOOP.

With this, we finally get to the promised end result:

 - POLL{IN,OUT,...} are plain integers and *not* in __poll_t, so any
   stray instances of ->poll() still using those will be caught by
   sparse.

 - eventpoll.c and select.c warning-free wrt __poll_t

 - no more kernel-side definitions of POLL... - userland ones are
   visible through the entire kernel (and used pretty much only for
   mangle/demangle)

 - same behavior as after the first series (i.e. sparc et.al. epoll(2)
   working correctly).

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Al Viro
2018-02-01 15:13:18 -05:00
committed by Linus Torvalds
parent a9a08845e9
commit 7a163b2195
8 changed files with 47 additions and 142 deletions

View File

@@ -3,50 +3,36 @@
#define __ASM_GENERIC_POLL_H
/* These are specified by iBCS2 */
#define POLLIN (__force __poll_t)0x0001
#define POLLPRI (__force __poll_t)0x0002
#define POLLOUT (__force __poll_t)0x0004
#define POLLERR (__force __poll_t)0x0008
#define POLLHUP (__force __poll_t)0x0010
#define POLLNVAL (__force __poll_t)0x0020
#define POLLIN 0x0001
#define POLLPRI 0x0002
#define POLLOUT 0x0004
#define POLLERR 0x0008
#define POLLHUP 0x0010
#define POLLNVAL 0x0020
/* The rest seem to be more-or-less nonstandard. Check them! */
#define POLLRDNORM (__force __poll_t)0x0040
#define POLLRDBAND (__force __poll_t)0x0080
#define POLLRDNORM 0x0040
#define POLLRDBAND 0x0080
#ifndef POLLWRNORM
#define POLLWRNORM (__force __poll_t)0x0100
#define POLLWRNORM 0x0100
#endif
#ifndef POLLWRBAND
#define POLLWRBAND (__force __poll_t)0x0200
#define POLLWRBAND 0x0200
#endif
#ifndef POLLMSG
#define POLLMSG (__force __poll_t)0x0400
#define POLLMSG 0x0400
#endif
#ifndef POLLREMOVE
#define POLLREMOVE (__force __poll_t)0x1000
#define POLLREMOVE 0x1000
#endif
#ifndef POLLRDHUP
#define POLLRDHUP (__force __poll_t)0x2000
#define POLLRDHUP 0x2000
#endif
#define POLLFREE (__force __poll_t)0x4000 /* currently only for epoll */
#define POLL_BUSY_LOOP (__force __poll_t)0x8000
#ifdef __KERNEL__
#ifndef __ARCH_HAS_MANGLED_POLL
static inline __u16 mangle_poll(__poll_t val)
{
return (__force __u16)val;
}
static inline __poll_t demangle_poll(__u16 v)
{
return (__force __poll_t)v;
}
#endif
#endif
struct pollfd {
int fd;
short events;