Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
linux
poll.h
Go to the documentation of this file.
1
#ifndef _LINUX_POLL_H
2
#define _LINUX_POLL_H
3
4
5
#include <linux/compiler.h>
6
#include <
linux/ktime.h
>
7
#include <linux/wait.h>
8
#include <linux/string.h>
9
#include <linux/fs.h>
10
#include <linux/sysctl.h>
11
#include <asm/uaccess.h>
12
#include <
uapi/linux/poll.h
>
13
14
extern
struct
ctl_table
epoll_table
[];
/* for sysctl */
15
/* ~832 bytes of stack space used max in sys_select/sys_poll before allocating
16
additional memory. */
17
#define MAX_STACK_ALLOC 832
18
#define FRONTEND_STACK_ALLOC 256
19
#define SELECT_STACK_ALLOC FRONTEND_STACK_ALLOC
20
#define POLL_STACK_ALLOC FRONTEND_STACK_ALLOC
21
#define WQUEUES_STACK_ALLOC (MAX_STACK_ALLOC - FRONTEND_STACK_ALLOC)
22
#define N_INLINE_POLL_ENTRIES (WQUEUES_STACK_ALLOC / sizeof(struct poll_table_entry))
23
24
#define DEFAULT_POLLMASK (POLLIN | POLLOUT | POLLRDNORM | POLLWRNORM)
25
26
struct
poll_table_struct
;
27
28
/*
29
* structures and helpers for f_op->poll implementations
30
*/
31
typedef
void
(*
poll_queue_proc
)(
struct
file
*,
wait_queue_head_t
*,
struct
poll_table_struct
*);
32
33
/*
34
* Do not touch the structure directly, use the access functions
35
* poll_does_not_wait() and poll_requested_events() instead.
36
*/
37
typedef
struct
poll_table_struct
{
38
poll_queue_proc
_qproc
;
39
unsigned
long
_key
;
40
}
poll_table
;
41
42
static
inline
void
poll_wait(
struct
file
* filp, wait_queue_head_t * wait_address,
poll_table
*
p
)
43
{
44
if
(p && p->
_qproc
&& wait_address)
45
p->
_qproc
(filp, wait_address, p);
46
}
47
48
/*
49
* Return true if it is guaranteed that poll will not wait. This is the case
50
* if the poll() of another file descriptor in the set got an event, so there
51
* is no need for waiting.
52
*/
53
static
inline
bool
poll_does_not_wait(
const
poll_table
*
p
)
54
{
55
return
p ==
NULL
|| p->
_qproc
==
NULL
;
56
}
57
58
/*
59
* Return the set of events that the application wants to poll for.
60
* This is useful for drivers that need to know whether a DMA transfer has
61
* to be started implicitly on poll(). You typically only want to do that
62
* if the application is actually polling for POLLIN and/or POLLOUT.
63
*/
64
static
inline
unsigned
long
poll_requested_events(
const
poll_table
*
p
)
65
{
66
return
p ? p->
_key
: ~0
UL
;
67
}
68
69
static
inline
void
init_poll_funcptr(
poll_table
*pt,
poll_queue_proc
qproc)
70
{
71
pt->
_qproc
= qproc;
72
pt->
_key
= ~0
UL
;
/* all events enabled */
73
}
74
75
struct
poll_table_entry
{
76
struct
file
*
filp
;
77
unsigned
long
key
;
78
wait_queue_t
wait
;
79
wait_queue_head_t *
wait_address
;
80
};
81
82
/*
83
* Structures and helpers for select/poll syscall
84
*/
85
struct
poll_wqueues
{
86
poll_table
pt
;
87
struct
poll_table_page
*
table
;
88
struct
task_struct
*
polling_task
;
89
int
triggered
;
90
int
error
;
91
int
inline_index
;
92
struct
poll_table_entry
inline_entries
[
N_INLINE_POLL_ENTRIES
];
93
};
94
95
extern
void
poll_initwait
(
struct
poll_wqueues
*pwq);
96
extern
void
poll_freewait
(
struct
poll_wqueues
*pwq);
97
extern
int
poll_schedule_timeout
(
struct
poll_wqueues
*pwq,
int
state
,
98
ktime_t
*expires,
unsigned
long
slack);
99
extern
long
select_estimate_accuracy
(
struct
timespec
*tv);
100
101
102
static
inline
int
poll_schedule(
struct
poll_wqueues
*pwq,
int
state
)
103
{
104
return
poll_schedule_timeout
(pwq, state,
NULL
, 0);
105
}
106
107
/*
108
* Scalable version of the fd_set.
109
*/
110
111
typedef
struct
{
112
unsigned
long
*
in
, *
out
, *ex;
113
unsigned
long
*res_in, *
res_out
, *res_ex;
114
}
fd_set_bits
;
115
116
/*
117
* How many longwords for "nr" bits?
118
*/
119
#define FDS_BITPERLONG (8*sizeof(long))
120
#define FDS_LONGS(nr) (((nr)+FDS_BITPERLONG-1)/FDS_BITPERLONG)
121
#define FDS_BYTES(nr) (FDS_LONGS(nr)*sizeof(long))
122
123
/*
124
* We do a VERIFY_WRITE here even though we are only reading this time:
125
* we'll write to it eventually..
126
*
127
* Use "unsigned long" accesses to let user-mode fd_set's be long-aligned.
128
*/
129
static
inline
130
int
get_fd_set(
unsigned
long
nr
,
void
__user *ufdset,
unsigned
long
*fdset)
131
{
132
nr =
FDS_BYTES
(nr);
133
if
(ufdset)
134
return
copy_from_user
(fdset, ufdset, nr) ? -
EFAULT
: 0;
135
136
memset
(fdset, 0, nr);
137
return
0;
138
}
139
140
static
inline
unsigned
long
__must_check
141
set_fd_set(
unsigned
long
nr
,
void
__user *ufdset,
unsigned
long
*fdset)
142
{
143
if
(ufdset)
144
return
__copy_to_user
(ufdset, fdset,
FDS_BYTES
(nr));
145
return
0;
146
}
147
148
static
inline
149
void
zero_fd_set(
unsigned
long
nr,
unsigned
long
*fdset)
150
{
151
memset
(fdset, 0,
FDS_BYTES
(nr));
152
}
153
154
#define MAX_INT64_SECONDS (((s64)(~((u64)0)>>1)/HZ)-1)
155
156
extern
int
do_select
(
int
n
,
fd_set_bits
*fds,
struct
timespec
*end_time);
157
extern
int
do_sys_poll
(
struct
pollfd
__user * ufds,
unsigned
int
nfds,
158
struct
timespec
*end_time);
159
extern
int
core_sys_select
(
int
n
,
fd_set
__user *
inp
,
fd_set
__user *
outp
,
160
fd_set
__user *
exp
,
struct
timespec
*end_time);
161
162
extern
int
poll_select_set_timeout
(
struct
timespec
*to,
long
sec
,
long
nsec
);
163
164
#endif
/* _LINUX_POLL_H */
Generated on Thu Jan 10 2013 12:50:16 for Linux Kernel by
1.8.2