]>
Commit | Line | Data |
---|---|---|
716154c5 BB |
1 | /*****************************************************************************\ |
2 | * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. | |
3 | * Copyright (C) 2007 The Regents of the University of California. | |
4 | * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). | |
5 | * Written by Brian Behlendorf <behlendorf1@llnl.gov>. | |
715f6251 | 6 | * UCRL-CODE-235197 |
7 | * | |
716154c5 | 8 | * This file is part of the SPL, Solaris Porting Layer. |
3d6af2dd | 9 | * For details, see <http://zfsonlinux.org/>. |
715f6251 | 10 | * |
716154c5 BB |
11 | * The SPL is free software; you can redistribute it and/or modify it |
12 | * under the terms of the GNU General Public License as published by the | |
13 | * Free Software Foundation; either version 2 of the License, or (at your | |
14 | * option) any later version. | |
15 | * | |
16 | * The SPL is distributed in the hope that it will be useful, but WITHOUT | |
715f6251 | 17 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
18 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
19 | * for more details. | |
20 | * | |
21 | * You should have received a copy of the GNU General Public License along | |
716154c5 BB |
22 | * with the SPL. If not, see <http://www.gnu.org/licenses/>. |
23 | \*****************************************************************************/ | |
715f6251 | 24 | |
09b414e8 | 25 | #ifndef _SPL_TIME_H |
10946b02 | 26 | #define _SPL_TIME_H |
f1ca4da6 | 27 | |
f1b59d26 | 28 | #include <linux/module.h> |
f1ca4da6 | 29 | #include <linux/time.h> |
f4b37741 | 30 | #include <sys/types.h> |
2b88beb7 | 31 | #include <sys/timer.h> |
f1ca4da6 | 32 | |
791dc876 | 33 | #if defined(CONFIG_64BIT) |
10946b02 AX |
34 | #define TIME_MAX INT64_MAX |
35 | #define TIME_MIN INT64_MIN | |
791dc876 | 36 | #else |
10946b02 AX |
37 | #define TIME_MAX INT32_MAX |
38 | #define TIME_MIN INT32_MIN | |
791dc876 | 39 | #endif |
ee476682 | 40 | |
10946b02 AX |
41 | #define SEC 1 |
42 | #define MILLISEC 1000 | |
43 | #define MICROSEC 1000000 | |
44 | #define NANOSEC 1000000000 | |
f1ca4da6 | 45 | |
33a20369 LG |
46 | #define MSEC2NSEC(m) ((hrtime_t)(m) * (NANOSEC / MILLISEC)) |
47 | #define NSEC2MSEC(n) ((n) / (NANOSEC / MILLISEC)) | |
48 | ||
ec06701b AX |
49 | #define USEC2NSEC(m) ((hrtime_t)(m) * (NANOSEC / MICROSEC)) |
50 | #define NSEC2USEC(n) ((n) / (NANOSEC / MICROSEC)) | |
51 | ||
52 | #define NSEC2SEC(n) ((n) / (NANOSEC / SEC)) | |
53 | #define SEC2NSEC(m) ((hrtime_t)(m) * (NANOSEC / SEC)) | |
54 | ||
b97c7791 MZ |
55 | typedef longlong_t hrtime_t; |
56 | typedef struct timespec timespec_t; | |
57 | ||
879bbbc7 | 58 | static const int hz = HZ; |
79b31f36 | 59 | |
10946b02 AX |
60 | #define TIMESPEC_OVERFLOW(ts) \ |
61 | ((ts)->tv_sec < TIME_MIN || (ts)->tv_sec > TIME_MAX) | |
79b31f36 | 62 | |
b97c7791 MZ |
63 | #if defined(HAVE_INODE_TIMESPEC64_TIMES) |
64 | typedef struct timespec64 inode_timespec_t; | |
65 | #else | |
66 | typedef struct timespec inode_timespec_t; | |
67 | #endif | |
68 | ||
10946b02 | 69 | static inline void |
b97c7791 MZ |
70 | gethrestime(inode_timespec_t *ts) |
71 | { | |
72 | #if defined(HAVE_INODE_TIMESPEC64_TIMES) | |
73 | *ts = current_kernel_time64(); | |
74 | #else | |
75 | *ts = current_kernel_time(); | |
76 | #endif | |
10946b02 | 77 | } |
79b31f36 | 78 | |
10946b02 | 79 | static inline time_t |
ee476682 | 80 | gethrestime_sec(void) |
81 | { | |
10946b02 AX |
82 | struct timespec ts; |
83 | ts = current_kernel_time(); | |
84 | return (ts.tv_sec); | |
ee476682 | 85 | } |
f1ca4da6 | 86 | |
10946b02 AX |
87 | static inline hrtime_t |
88 | gethrtime(void) | |
89 | { | |
b97c7791 MZ |
90 | struct timespec ts; |
91 | getrawmonotonic(&ts); | |
92 | return (((hrtime_t)ts.tv_sec * NSEC_PER_SEC) + ts.tv_nsec); | |
10946b02 | 93 | } |
a4a1e1ec | 94 | |
09b414e8 | 95 | #endif /* _SPL_TIME_H */ |