~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/linux/poll.h

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /include/linux/poll.h (Version linux-6.12-rc7) and /include/linux/poll.h (Version linux-4.16.18)


  1 /* SPDX-License-Identifier: GPL-2.0 */              1 /* SPDX-License-Identifier: GPL-2.0 */
  2 #ifndef _LINUX_POLL_H                               2 #ifndef _LINUX_POLL_H
  3 #define _LINUX_POLL_H                               3 #define _LINUX_POLL_H
  4                                                     4 
  5                                                     5 
  6 #include <linux/compiler.h>                         6 #include <linux/compiler.h>
  7 #include <linux/ktime.h>                            7 #include <linux/ktime.h>
  8 #include <linux/wait.h>                             8 #include <linux/wait.h>
  9 #include <linux/string.h>                           9 #include <linux/string.h>
 10 #include <linux/fs.h>                              10 #include <linux/fs.h>
                                                   >>  11 #include <linux/sysctl.h>
 11 #include <linux/uaccess.h>                         12 #include <linux/uaccess.h>
 12 #include <uapi/linux/poll.h>                       13 #include <uapi/linux/poll.h>
 13 #include <uapi/linux/eventpoll.h>                  14 #include <uapi/linux/eventpoll.h>
 14                                                    15 
                                                   >>  16 extern struct ctl_table epoll_table[]; /* for sysctl */
 15 /* ~832 bytes of stack space used max in sys_s     17 /* ~832 bytes of stack space used max in sys_select/sys_poll before allocating
 16    additional memory. */                           18    additional memory. */
 17 #define MAX_STACK_ALLOC 832                        19 #define MAX_STACK_ALLOC 832
 18 #define FRONTEND_STACK_ALLOC    256                20 #define FRONTEND_STACK_ALLOC    256
 19 #define SELECT_STACK_ALLOC      FRONTEND_STACK     21 #define SELECT_STACK_ALLOC      FRONTEND_STACK_ALLOC
 20 #define POLL_STACK_ALLOC        FRONTEND_STACK     22 #define POLL_STACK_ALLOC        FRONTEND_STACK_ALLOC
 21 #define WQUEUES_STACK_ALLOC     (MAX_STACK_ALL     23 #define WQUEUES_STACK_ALLOC     (MAX_STACK_ALLOC - FRONTEND_STACK_ALLOC)
 22 #define N_INLINE_POLL_ENTRIES   (WQUEUES_STACK     24 #define N_INLINE_POLL_ENTRIES   (WQUEUES_STACK_ALLOC / sizeof(struct poll_table_entry))
 23                                                    25 
 24 #define DEFAULT_POLLMASK (EPOLLIN | EPOLLOUT |     26 #define DEFAULT_POLLMASK (EPOLLIN | EPOLLOUT | EPOLLRDNORM | EPOLLWRNORM)
 25                                                    27 
 26 struct poll_table_struct;                          28 struct poll_table_struct;
 27                                                    29 
 28 /*                                                 30 /* 
 29  * structures and helpers for f_op->poll imple     31  * structures and helpers for f_op->poll implementations
 30  */                                                32  */
 31 typedef void (*poll_queue_proc)(struct file *,     33 typedef void (*poll_queue_proc)(struct file *, wait_queue_head_t *, struct poll_table_struct *);
 32                                                    34 
 33 /*                                                 35 /*
 34  * Do not touch the structure directly, use th     36  * Do not touch the structure directly, use the access functions
 35  * poll_does_not_wait() and poll_requested_eve     37  * poll_does_not_wait() and poll_requested_events() instead.
 36  */                                                38  */
 37 typedef struct poll_table_struct {                 39 typedef struct poll_table_struct {
 38         poll_queue_proc _qproc;                    40         poll_queue_proc _qproc;
 39         __poll_t _key;                             41         __poll_t _key;
 40 } poll_table;                                      42 } poll_table;
 41                                                    43 
 42 static inline void poll_wait(struct file * fil     44 static inline void poll_wait(struct file * filp, wait_queue_head_t * wait_address, poll_table *p)
 43 {                                                  45 {
 44         if (p && p->_qproc && wait_address)        46         if (p && p->_qproc && wait_address)
 45                 p->_qproc(filp, wait_address,      47                 p->_qproc(filp, wait_address, p);
 46 }                                                  48 }
 47                                                    49 
 48 /*                                                 50 /*
 49  * Return true if it is guaranteed that poll w     51  * Return true if it is guaranteed that poll will not wait. This is the case
 50  * if the poll() of another file descriptor in     52  * if the poll() of another file descriptor in the set got an event, so there
 51  * is no need for waiting.                         53  * is no need for waiting.
 52  */                                                54  */
 53 static inline bool poll_does_not_wait(const po     55 static inline bool poll_does_not_wait(const poll_table *p)
 54 {                                                  56 {
 55         return p == NULL || p->_qproc == NULL;     57         return p == NULL || p->_qproc == NULL;
 56 }                                                  58 }
 57                                                    59 
 58 /*                                                 60 /*
 59  * Return the set of events that the applicati     61  * Return the set of events that the application wants to poll for.
 60  * This is useful for drivers that need to kno     62  * This is useful for drivers that need to know whether a DMA transfer has
 61  * to be started implicitly on poll(). You typ     63  * to be started implicitly on poll(). You typically only want to do that
 62  * if the application is actually polling for      64  * if the application is actually polling for POLLIN and/or POLLOUT.
 63  */                                                65  */
 64 static inline __poll_t poll_requested_events(c     66 static inline __poll_t poll_requested_events(const poll_table *p)
 65 {                                                  67 {
 66         return p ? p->_key : ~(__poll_t)0;         68         return p ? p->_key : ~(__poll_t)0;
 67 }                                                  69 }
 68                                                    70 
 69 static inline void init_poll_funcptr(poll_tabl     71 static inline void init_poll_funcptr(poll_table *pt, poll_queue_proc qproc)
 70 {                                                  72 {
 71         pt->_qproc = qproc;                        73         pt->_qproc = qproc;
 72         pt->_key   = ~(__poll_t)0; /* all even     74         pt->_key   = ~(__poll_t)0; /* all events enabled */
 73 }                                                  75 }
 74                                                    76 
 75 static inline bool file_can_poll(struct file * << 
 76 {                                              << 
 77         return file->f_op->poll;               << 
 78 }                                              << 
 79                                                << 
 80 static inline __poll_t vfs_poll(struct file *f << 
 81 {                                              << 
 82         if (unlikely(!file->f_op->poll))       << 
 83                 return DEFAULT_POLLMASK;       << 
 84         return file->f_op->poll(file, pt);     << 
 85 }                                              << 
 86                                                << 
 87 struct poll_table_entry {                          77 struct poll_table_entry {
 88         struct file *filp;                         78         struct file *filp;
 89         __poll_t key;                              79         __poll_t key;
 90         wait_queue_entry_t wait;                   80         wait_queue_entry_t wait;
 91         wait_queue_head_t *wait_address;           81         wait_queue_head_t *wait_address;
 92 };                                                 82 };
 93                                                    83 
 94 /*                                                 84 /*
 95  * Structures and helpers for select/poll sysc     85  * Structures and helpers for select/poll syscall
 96  */                                                86  */
 97 struct poll_wqueues {                              87 struct poll_wqueues {
 98         poll_table pt;                             88         poll_table pt;
 99         struct poll_table_page *table;             89         struct poll_table_page *table;
100         struct task_struct *polling_task;          90         struct task_struct *polling_task;
101         int triggered;                             91         int triggered;
102         int error;                                 92         int error;
103         int inline_index;                          93         int inline_index;
104         struct poll_table_entry inline_entries     94         struct poll_table_entry inline_entries[N_INLINE_POLL_ENTRIES];
105 };                                                 95 };
106                                                    96 
107 extern void poll_initwait(struct poll_wqueues      97 extern void poll_initwait(struct poll_wqueues *pwq);
108 extern void poll_freewait(struct poll_wqueues      98 extern void poll_freewait(struct poll_wqueues *pwq);
                                                   >>  99 extern int poll_schedule_timeout(struct poll_wqueues *pwq, int state,
                                                   >> 100                                  ktime_t *expires, unsigned long slack);
109 extern u64 select_estimate_accuracy(struct tim    101 extern u64 select_estimate_accuracy(struct timespec64 *tv);
110                                                   102 
111 #define MAX_INT64_SECONDS (((s64)(~((u64)0)>>1    103 #define MAX_INT64_SECONDS (((s64)(~((u64)0)>>1)/HZ)-1)
112                                                   104 
113 extern int core_sys_select(int n, fd_set __use    105 extern int core_sys_select(int n, fd_set __user *inp, fd_set __user *outp,
114                            fd_set __user *exp,    106                            fd_set __user *exp, struct timespec64 *end_time);
115                                                   107 
116 extern int poll_select_set_timeout(struct time    108 extern int poll_select_set_timeout(struct timespec64 *to, time64_t sec,
117                                    long nsec);    109                                    long nsec);
118                                                   110 
119 #define __MAP(v, from, to) \                      111 #define __MAP(v, from, to) \
120         (from < to ? (v & from) * (to/from) :     112         (from < to ? (v & from) * (to/from) : (v & from) / (from/to))
121                                                   113 
122 static inline __u16 mangle_poll(__poll_t val)     114 static inline __u16 mangle_poll(__poll_t val)
123 {                                                 115 {
124         __u16 v = (__force __u16)val;             116         __u16 v = (__force __u16)val;
125 #define M(X) __MAP(v, (__force __u16)EPOLL##X,    117 #define M(X) __MAP(v, (__force __u16)EPOLL##X, POLL##X)
126         return M(IN) | M(OUT) | M(PRI) | M(ERR    118         return M(IN) | M(OUT) | M(PRI) | M(ERR) | M(NVAL) |
127                 M(RDNORM) | M(RDBAND) | M(WRNO    119                 M(RDNORM) | M(RDBAND) | M(WRNORM) | M(WRBAND) |
128                 M(HUP) | M(RDHUP) | M(MSG);       120                 M(HUP) | M(RDHUP) | M(MSG);
129 #undef M                                          121 #undef M
130 }                                                 122 }
131                                                   123 
132 static inline __poll_t demangle_poll(u16 val)     124 static inline __poll_t demangle_poll(u16 val)
133 {                                                 125 {
134 #define M(X) (__force __poll_t)__MAP(val, POLL    126 #define M(X) (__force __poll_t)__MAP(val, POLL##X, (__force __u16)EPOLL##X)
135         return M(IN) | M(OUT) | M(PRI) | M(ERR    127         return M(IN) | M(OUT) | M(PRI) | M(ERR) | M(NVAL) |
136                 M(RDNORM) | M(RDBAND) | M(WRNO    128                 M(RDNORM) | M(RDBAND) | M(WRNORM) | M(WRBAND) |
137                 M(HUP) | M(RDHUP) | M(MSG);       129                 M(HUP) | M(RDHUP) | M(MSG);
138 #undef M                                          130 #undef M
139 }                                                 131 }
140 #undef __MAP                                      132 #undef __MAP
141                                                   133 
142                                                   134 
143 #endif /* _LINUX_POLL_H */                        135 #endif /* _LINUX_POLL_H */
144                                                   136 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php