aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-generic
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2012-02-08 00:09:05 -0500
committerH. Peter Anvin <hpa@zytor.com>2012-02-14 15:47:21 -0500
commit8b3d1cda4f5ff0d7c2ae910ea8fd03493996912f (patch)
treec03be096f3e8b3205e749277d7274ec5ea95fae7 /include/asm-generic
parent2759e6512e0bd9f9a84e10f59fb71195e7ff9775 (diff)
posix_types: Remove fd_set macros
<asm/posix_types.h> includes a set of macros that operate on file descriptors. Way long ago those were exported to user space, but nowadays they are #ifdef __KERNEL__. However, they are nothing but standard (nonatomic) bit operations, and we already have optimized versions of bit operations in the kernel. We can't include <linux/bitops.h> in <asm/posix_types.h> but we can move the definitions to <linux/time.h> and define them there in terms of standard kernel bitops. [ v2: folds the following fixes in: a) Stray space in __FD_SET(), reported by Andrew Morton b) #include <linux/string.h> needed for memset(), reported by Tony Luck ] Signed-off-by: H. Peter Anvin <hpa@zytor.com> Link: http://lkml.kernel.org/r/1328677745-20121-22-git-send-email-hpa@zytor.com Cc: Arnd Bergmann <arnd@arndb.de> Cc: Tony Luck <tony.luck@intel.com> Cc: Andrew Morton <akpm@linux-foundation.org>
Diffstat (limited to 'include/asm-generic')
-rw-r--r--include/asm-generic/posix_types.h72
1 files changed, 0 insertions, 72 deletions
diff --git a/include/asm-generic/posix_types.h b/include/asm-generic/posix_types.h
index ac217600a9c7..e294fe66125b 100644
--- a/include/asm-generic/posix_types.h
+++ b/include/asm-generic/posix_types.h
@@ -92,76 +92,4 @@ typedef char * __kernel_caddr_t;
92typedef unsigned short __kernel_uid16_t; 92typedef unsigned short __kernel_uid16_t;
93typedef unsigned short __kernel_gid16_t; 93typedef unsigned short __kernel_gid16_t;
94 94
95#ifdef __KERNEL__
96
97#undef __FD_SET
98static inline void __FD_SET(unsigned long __fd, __kernel_fd_set *__fdsetp)
99{
100 unsigned long __tmp = __fd / __NFDBITS;
101 unsigned long __rem = __fd % __NFDBITS;
102 __fdsetp->fds_bits[__tmp] |= (1UL<<__rem);
103}
104
105#undef __FD_CLR
106static inline void __FD_CLR(unsigned long __fd, __kernel_fd_set *__fdsetp)
107{
108 unsigned long __tmp = __fd / __NFDBITS;
109 unsigned long __rem = __fd % __NFDBITS;
110 __fdsetp->fds_bits[__tmp] &= ~(1UL<<__rem);
111}
112
113#undef __FD_ISSET
114static inline int __FD_ISSET(unsigned long __fd, const __kernel_fd_set *__p)
115{
116 unsigned long __tmp = __fd / __NFDBITS;
117 unsigned long __rem = __fd % __NFDBITS;
118 return (__p->fds_bits[__tmp] & (1UL<<__rem)) != 0;
119}
120
121/*
122 * This will unroll the loop for the normal constant case (8 ints,
123 * for a 256-bit fd_set)
124 */
125#undef __FD_ZERO
126static inline void __FD_ZERO(__kernel_fd_set *__p)
127{
128 unsigned long *__tmp = __p->fds_bits;
129 int __i;
130
131 if (__builtin_constant_p(__FDSET_LONGS)) {
132 switch (__FDSET_LONGS) {
133 case 16:
134 __tmp[ 0] = 0; __tmp[ 1] = 0;
135 __tmp[ 2] = 0; __tmp[ 3] = 0;
136 __tmp[ 4] = 0; __tmp[ 5] = 0;
137 __tmp[ 6] = 0; __tmp[ 7] = 0;
138 __tmp[ 8] = 0; __tmp[ 9] = 0;
139 __tmp[10] = 0; __tmp[11] = 0;
140 __tmp[12] = 0; __tmp[13] = 0;
141 __tmp[14] = 0; __tmp[15] = 0;
142 return;
143
144 case 8:
145 __tmp[ 0] = 0; __tmp[ 1] = 0;
146 __tmp[ 2] = 0; __tmp[ 3] = 0;
147 __tmp[ 4] = 0; __tmp[ 5] = 0;
148 __tmp[ 6] = 0; __tmp[ 7] = 0;
149 return;
150
151 case 4:
152 __tmp[ 0] = 0; __tmp[ 1] = 0;
153 __tmp[ 2] = 0; __tmp[ 3] = 0;
154 return;
155 }
156 }
157 __i = __FDSET_LONGS;
158 while (__i) {
159 __i--;
160 *__tmp = 0;
161 __tmp++;
162 }
163}
164
165#endif /* __KERNEL__ */
166
167#endif /* __ASM_GENERIC_POSIX_TYPES_H */ 95#endif /* __ASM_GENERIC_POSIX_TYPES_H */