Root/
1 | /* |
2 | * include/linux/eventpoll.h ( Efficent event polling implementation ) |
3 | * Copyright (C) 2001,...,2006 Davide Libenzi |
4 | * |
5 | * This program is free software; you can redistribute it and/or modify |
6 | * it under the terms of the GNU General Public License as published by |
7 | * the Free Software Foundation; either version 2 of the License, or |
8 | * (at your option) any later version. |
9 | * |
10 | * Davide Libenzi <davidel@xmailserver.org> |
11 | * |
12 | */ |
13 | |
14 | #ifndef _LINUX_EVENTPOLL_H |
15 | #define _LINUX_EVENTPOLL_H |
16 | |
17 | /* For O_CLOEXEC */ |
18 | #include <linux/fcntl.h> |
19 | #include <linux/types.h> |
20 | |
21 | /* Flags for epoll_create1. */ |
22 | #define EPOLL_CLOEXEC O_CLOEXEC |
23 | |
24 | /* Valid opcodes to issue to sys_epoll_ctl() */ |
25 | #define EPOLL_CTL_ADD 1 |
26 | #define EPOLL_CTL_DEL 2 |
27 | #define EPOLL_CTL_MOD 3 |
28 | |
29 | /* Set the One Shot behaviour for the target file descriptor */ |
30 | #define EPOLLONESHOT (1 << 30) |
31 | |
32 | /* Set the Edge Triggered behaviour for the target file descriptor */ |
33 | #define EPOLLET (1 << 31) |
34 | |
35 | /* |
36 | * On x86-64 make the 64bit structure have the same alignment as the |
37 | * 32bit structure. This makes 32bit emulation easier. |
38 | * |
39 | * UML/x86_64 needs the same packing as x86_64 |
40 | */ |
41 | #ifdef __x86_64__ |
42 | #define EPOLL_PACKED __attribute__((packed)) |
43 | #else |
44 | #define EPOLL_PACKED |
45 | #endif |
46 | |
47 | struct epoll_event { |
48 | __u32 events; |
49 | __u64 data; |
50 | } EPOLL_PACKED; |
51 | |
52 | #ifdef __KERNEL__ |
53 | |
54 | /* Forward declarations to avoid compiler errors */ |
55 | struct file; |
56 | |
57 | |
58 | #ifdef CONFIG_EPOLL |
59 | |
60 | /* Used to initialize the epoll bits inside the "struct file" */ |
61 | static inline void eventpoll_init_file(struct file *file) |
62 | { |
63 | INIT_LIST_HEAD(&file->f_ep_links); |
64 | } |
65 | |
66 | |
67 | /* Used to release the epoll bits inside the "struct file" */ |
68 | void eventpoll_release_file(struct file *file); |
69 | |
70 | /* |
71 | * This is called from inside fs/file_table.c:__fput() to unlink files |
72 | * from the eventpoll interface. We need to have this facility to cleanup |
73 | * correctly files that are closed without being removed from the eventpoll |
74 | * interface. |
75 | */ |
76 | static inline void eventpoll_release(struct file *file) |
77 | { |
78 | |
79 | /* |
80 | * Fast check to avoid the get/release of the semaphore. Since |
81 | * we're doing this outside the semaphore lock, it might return |
82 | * false negatives, but we don't care. It'll help in 99.99% of cases |
83 | * to avoid the semaphore lock. False positives simply cannot happen |
84 | * because the file in on the way to be removed and nobody ( but |
85 | * eventpoll ) has still a reference to this file. |
86 | */ |
87 | if (likely(list_empty(&file->f_ep_links))) |
88 | return; |
89 | |
90 | /* |
91 | * The file is being closed while it is still linked to an epoll |
92 | * descriptor. We need to handle this by correctly unlinking it |
93 | * from its containers. |
94 | */ |
95 | eventpoll_release_file(file); |
96 | } |
97 | |
98 | #else |
99 | |
100 | static inline void eventpoll_init_file(struct file *file) {} |
101 | static inline void eventpoll_release(struct file *file) {} |
102 | |
103 | #endif |
104 | |
105 | #endif /* #ifdef __KERNEL__ */ |
106 | |
107 | #endif /* #ifndef _LINUX_EVENTPOLL_H */ |
108 | |
109 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9