aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/time.h
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/linux/time.h
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/linux/time.h')
-rw-r--r--include/linux/time.h24
1 files changed, 24 insertions, 0 deletions
diff --git a/include/linux/time.h b/include/linux/time.h
index b3061782dec..93277a0b229 100644
--- a/include/linux/time.h
+++ b/include/linux/time.h
@@ -4,8 +4,11 @@
4#include <linux/types.h> 4#include <linux/types.h>
5 5
6#ifdef __KERNEL__ 6#ifdef __KERNEL__
7# include <linux/bitops.h>
7# include <linux/cache.h> 8# include <linux/cache.h>
9# include <linux/posix_types.h>
8# include <linux/seqlock.h> 10# include <linux/seqlock.h>
11# include <linux/string.h>
9# include <linux/math64.h> 12# include <linux/math64.h>
10#endif 13#endif
11 14
@@ -256,6 +259,27 @@ static __always_inline void timespec_add_ns(struct timespec *a, u64 ns)
256 a->tv_sec += __iter_div_u64_rem(a->tv_nsec + ns, NSEC_PER_SEC, &ns); 259 a->tv_sec += __iter_div_u64_rem(a->tv_nsec + ns, NSEC_PER_SEC, &ns);
257 a->tv_nsec = ns; 260 a->tv_nsec = ns;
258} 261}
262
263static inline void __FD_SET(unsigned long __fd, __kernel_fd_set *__fdsetp)
264{
265 __set_bit(__fd, __fdsetp->fds_bits);
266}
267
268static inline void __FD_CLR(unsigned long __fd, __kernel_fd_set *__fdsetp)
269{
270 __clear_bit(__fd, __fdsetp->fds_bits);
271}
272
273static inline int __FD_ISSET(unsigned long __fd, const __kernel_fd_set *__fdsetp)
274{
275 return test_bit(__fd, __fdsetp->fds_bits);
276}
277
278static inline void __FD_ZERO(__kernel_fd_set *__fdsetp)
279{
280 memset(__fdsetp->fds_bits, 0, sizeof __fdsetp->fds_bits);
281}
282
259#endif /* __KERNEL__ */ 283#endif /* __KERNEL__ */
260 284
261#define NFDBITS __NFDBITS 285#define NFDBITS __NFDBITS