Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
b95a7658
Commit
b95a7658
authored
Nov 16, 2002
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
parents
42877042
1f688548
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
38 additions
and
39 deletions
+38
-39
arch/sparc64/solaris/timod.c
arch/sparc64/solaris/timod.c
+3
-2
fs/eventpoll.c
fs/eventpoll.c
+1
-3
fs/select.c
fs/select.c
+18
-8
include/linux/poll.h
include/linux/poll.h
+14
-24
kernel/ksyms.c
kernel/ksyms.c
+2
-2
No files found.
arch/sparc64/solaris/timod.c
View file @
b95a7658
...
...
@@ -651,10 +651,11 @@ int timod_getmsg(unsigned int fd, char *ctl_buf, int ctl_maxlen, s32 *ctl_len,
SOLD
(
"LISTEN done"
);
}
if
(
!
(
filp
->
f_flags
&
O_NONBLOCK
))
{
poll_table
wait_table
,
*
wait
;
struct
poll_wqueues
wait_table
;
poll_table
*
wait
;
poll_initwait
(
&
wait_table
);
wait
=
&
wait_table
;
wait
=
&
wait_table
.
pt
;
for
(;;)
{
SOLD
(
"loop"
);
set_current_state
(
TASK_INTERRUPTIBLE
);
...
...
fs/eventpoll.c
View file @
b95a7658
...
...
@@ -883,7 +883,7 @@ static int ep_insert(struct eventpoll *ep, struct pollfd *pfd, struct file *tfil
/* Initialize the poll table using the queue callback */
epq
.
dpi
=
dpi
;
poll_initwait_ex
(
&
epq
.
pt
,
ep_ptable_queue_proc
,
NULL
);
init_poll_funcptr
(
&
epq
.
pt
,
ep_ptable_queue_proc
);
/*
* Attach the item to the poll hooks and get current event bits.
...
...
@@ -892,8 +892,6 @@ static int ep_insert(struct eventpoll *ep, struct pollfd *pfd, struct file *tfil
*/
revents
=
tfile
->
f_op
->
poll
(
tfile
,
&
epq
.
pt
);
poll_freewait
(
&
epq
.
pt
);
/*
* We have to check if something went wrong during the poll wait queue
* install process. Namely an allocation for a wait queue failed due
...
...
fs/select.c
View file @
b95a7658
...
...
@@ -53,10 +53,18 @@ struct poll_table_page {
* as all select/poll functions have to call it to add an entry to the
* poll table.
*/
void
__pollwait
(
struct
file
*
filp
,
wait_queue_head_t
*
wait_address
,
poll_table
*
p
);
void
__pollfreewait
(
poll_table
*
pt
)
void
poll_initwait
(
struct
poll_wqueues
*
pwq
)
{
struct
poll_table_page
*
p
=
pt
->
table
;
init_poll_funcptr
(
&
pwq
->
pt
,
__pollwait
);
pwq
->
error
=
0
;
pwq
->
table
=
NULL
;
}
void
poll_freewait
(
struct
poll_wqueues
*
pwq
)
{
struct
poll_table_page
*
p
=
pwq
->
table
;
while
(
p
)
{
struct
poll_table_entry
*
entry
;
struct
poll_table_page
*
old
;
...
...
@@ -73,8 +81,9 @@ void __pollfreewait(poll_table* pt)
}
}
void
__pollwait
(
struct
file
*
filp
,
wait_queue_head_t
*
wait_address
,
poll_table
*
p
)
void
__pollwait
(
struct
file
*
filp
,
wait_queue_head_t
*
wait_address
,
poll_table
*
_
p
)
{
struct
poll_wqueues
*
p
=
container_of
(
_p
,
struct
poll_wqueues
,
pt
);
struct
poll_table_page
*
table
=
p
->
table
;
if
(
!
table
||
POLL_TABLE_FULL
(
table
))
{
...
...
@@ -165,7 +174,8 @@ static int max_select_fd(unsigned long n, fd_set_bits *fds)
int
do_select
(
int
n
,
fd_set_bits
*
fds
,
long
*
timeout
)
{
poll_table
table
,
*
wait
;
struct
poll_wqueues
table
;
poll_table
*
wait
;
int
retval
,
i
,
off
;
long
__timeout
=
*
timeout
;
...
...
@@ -178,7 +188,7 @@ int do_select(int n, fd_set_bits *fds, long *timeout)
n
=
retval
;
poll_initwait
(
&
table
);
wait
=
&
table
;
wait
=
&
table
.
pt
;
if
(
!
__timeout
)
wait
=
NULL
;
retval
=
0
;
...
...
@@ -385,10 +395,10 @@ static void do_pollfd(unsigned int num, struct pollfd * fdpage,
}
static
int
do_poll
(
unsigned
int
nfds
,
unsigned
int
nchunks
,
unsigned
int
nleft
,
struct
pollfd
*
fds
[],
poll_table
*
wait
,
long
timeout
)
struct
pollfd
*
fds
[],
struct
poll_wqueues
*
wait
,
long
timeout
)
{
int
count
;
poll_table
*
pt
=
wai
t
;
poll_table
*
pt
=
&
wait
->
p
t
;
for
(;;)
{
unsigned
int
i
;
...
...
@@ -415,7 +425,7 @@ asmlinkage long sys_poll(struct pollfd * ufds, unsigned int nfds, long timeout)
{
int
i
,
j
,
fdcount
,
err
;
struct
pollfd
**
fds
;
poll_table
table
,
*
wait
;
struct
poll_wqueues
table
,
*
wait
;
int
nchunks
,
nleft
;
/* Do a sanity check on nfds ... */
...
...
include/linux/poll.h
View file @
b95a7658
...
...
@@ -10,49 +10,39 @@
#include <linux/mm.h>
#include <asm/uaccess.h>
struct
poll_table_page
;
struct
poll_table_struct
;
/*
* structures and helpers for f_op->poll implementations
*/
typedef
void
(
*
poll_queue_proc
)(
struct
file
*
,
wait_queue_head_t
*
,
struct
poll_table_struct
*
);
typedef
void
(
*
poll_free_proc
)(
struct
poll_table_struct
*
);
typedef
struct
poll_table_struct
{
poll_queue_proc
qproc
;
poll_free_proc
fproc
;
int
error
;
struct
poll_table_page
*
table
;
}
poll_table
;
extern
void
__pollwait
(
struct
file
*
filp
,
wait_queue_head_t
*
wait_address
,
poll_table
*
p
);
extern
void
__pollfreewait
(
poll_table
*
pt
);
static
inline
void
poll_wait
(
struct
file
*
filp
,
wait_queue_head_t
*
wait_address
,
poll_table
*
p
)
{
if
(
p
&&
wait_address
)
p
->
qproc
(
filp
,
wait_address
,
p
);
}
static
inline
void
poll_initwait_ex
(
poll_table
*
pt
,
poll_queue_proc
qproc
,
poll_free_proc
f
proc
)
static
inline
void
init_poll_funcptr
(
poll_table
*
pt
,
poll_queue_proc
q
proc
)
{
pt
->
qproc
=
qproc
;
pt
->
fproc
=
fproc
;
pt
->
error
=
0
;
pt
->
table
=
NULL
;
}
static
inline
void
poll_initwait
(
poll_table
*
pt
)
{
poll_initwait_ex
(
pt
,
__pollwait
,
__pollfreewait
);
}
static
inline
void
poll_freewait
(
poll_table
*
pt
)
{
if
(
pt
&&
pt
->
fproc
)
pt
->
fproc
(
pt
);
}
/*
* Structures and helpers for sys_poll/sys_poll
*/
struct
poll_wqueues
{
poll_table
pt
;
struct
poll_table_page
*
table
;
int
error
;
};
extern
void
poll_initwait
(
struct
poll_wqueues
*
pwq
);
extern
void
poll_freewait
(
struct
poll_wqueues
*
pwq
);
/*
* Scaleable version of the fd_set.
...
...
kernel/ksyms.c
View file @
b95a7658
...
...
@@ -269,8 +269,8 @@ EXPORT_SYMBOL(generic_fillattr);
EXPORT_SYMBOL
(
generic_file_llseek
);
EXPORT_SYMBOL
(
remote_llseek
);
EXPORT_SYMBOL
(
no_llseek
);
EXPORT_SYMBOL
(
__poll
wait
);
EXPORT_SYMBOL
(
__poll
freewait
);
EXPORT_SYMBOL
(
poll_init
wait
);
EXPORT_SYMBOL
(
poll_
freewait
);
EXPORT_SYMBOL
(
ROOT_DEV
);
EXPORT_SYMBOL
(
find_get_page
);
EXPORT_SYMBOL
(
find_lock_page
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment