X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=libcfs%2Finclude%2Flibcfs%2Flinux%2Flinux-time.h;h=6a391e28a15b55a2078374888c0ead56398db2af;hb=800ffd4711863e1067a693f1283bccf4edddf2a2;hp=e7b295689bd487148a29b91d45b5e66cab5b55b2;hpb=72057a3af19ee02d9a686bd7e7d074917e381310;p=fs%2Flustre-release.git diff --git a/libcfs/include/libcfs/linux/linux-time.h b/libcfs/include/libcfs/linux/linux-time.h index e7b2956..6a391e2 100644 --- a/libcfs/include/libcfs/linux/linux-time.h +++ b/libcfs/include/libcfs/linux/linux-time.h @@ -97,7 +97,6 @@ typedef unsigned long cfs_time_t; /* jiffies */ typedef long cfs_duration_t; -typedef cycles_t cfs_cycles_t; #ifndef HAVE_TIMESPEC64 @@ -112,6 +111,11 @@ static inline struct timespec64 timespec_to_timespec64(const struct timespec ts) return ts; } +static inline struct timespec timespec64_to_timespec(const struct timespec64 ts) +{ + return ts; +} + #else struct timespec64 { time64_t tv_sec; /* seconds */ @@ -126,14 +130,88 @@ static inline struct timespec64 timespec_to_timespec64(const struct timespec ts) ret.tv_nsec = ts.tv_nsec; return ret; } + +static inline struct timespec timespec64_to_timespec(const struct timespec64 ts64) +{ + struct timespec ret; + + ret.tv_sec = (time_t)ts64.tv_sec; + ret.tv_nsec = ts64.tv_nsec; + return ret; +} #endif /* __BITS_PER_LONG != 64 */ #endif /* HAVE_TIMESPEC64 */ +#ifndef HAVE_KTIME_ADD +# define ktime_add(lhs, rhs) ({ (ktime_t){ .tv64 = (lhs).tv64 + (rhs).tv64 }; }) +#endif /* !HAVE_KTIME_ADD */ + +#ifndef HAVE_KTIME_AFTER +static inline bool ktime_after(const ktime_t cmp1, const ktime_t cmp2) +{ + return cmp1.tv64 > cmp2.tv64; +} +#endif /* !HAVE_KTIME_AFTER */ + +#ifndef HAVE_KTIME_BEFORE +static inline bool ktime_before(const ktime_t cmp1, const ktime_t cmp2) +{ + return cmp1.tv64 < cmp2.tv64; +} +#endif /* !HAVE_KTIME_BEFORE */ + +#ifndef HAVE_KTIME_GET_TS64 +void ktime_get_ts64(struct timespec64 *ts); +#endif /* HAVE_KTIME_GET_TS */ + #ifndef HAVE_KTIME_GET_REAL_TS64 void ktime_get_real_ts64(struct timespec64 *ts); #endif /* HAVE_KTIME_GET_REAL_TS */ +#ifndef HAVE_KTIME_GET_REAL_SECONDS +time64_t ktime_get_real_seconds(void); +#endif /* HAVE_KTIME_GET_REAL_SECONDS */ + +#ifndef HAVE_KTIME_GET_SECONDS +time64_t ktime_get_seconds(void); +#endif /* HAVE_KTIME_GET_SECONDS */ + +#ifdef NEED_KTIME_GET_REAL_NS +static inline u64 ktime_get_real_ns(void) +{ + return ktime_to_ns(ktime_get_real()); +} +#endif /* NEED_KTIME_GET_REAL_NS */ + +#ifndef HAVE_KTIME_TO_TIMESPEC64 +static inline struct timespec64 ktime_to_timespec64(ktime_t kt) +{ + struct timespec ts = ns_to_timespec((kt).tv64); + + return timespec_to_timespec64(ts); +} +#endif /* HAVE_KTIME_TO_TIMESPEC64 */ + +#ifndef HAVE_TIMESPEC64_SUB +static inline struct timespec64 +timespec64_sub(struct timespec64 later, struct timespec64 earlier) +{ + struct timespec diff; + + diff = timespec_sub(timespec64_to_timespec(later), + timespec64_to_timespec(earlier)); + return timespec_to_timespec64(diff); +} +#endif + +#ifndef HAVE_TIMESPEC64_TO_KTIME +static inline ktime_t timespec64_to_ktime(struct timespec64 ts) +{ + return ktime_set(ts.tv_sec, ts.tv_nsec); +} +#endif + static inline int cfs_time_before(cfs_time_t t1, cfs_time_t t2) { return time_before(t1, t2); @@ -156,57 +234,14 @@ static inline time_t cfs_time_current_sec(void) static inline cfs_duration_t cfs_time_seconds(int seconds) { - return ((cfs_duration_t)seconds) * msecs_to_jiffies(MSEC_PER_SEC); } static inline time_t cfs_duration_sec(cfs_duration_t d) { - return d / msecs_to_jiffies(MSEC_PER_SEC); } -static inline void cfs_duration_usec(cfs_duration_t d, struct timeval *s) -{ -#if (BITS_PER_LONG == 32) - if (msecs_to_jiffies(MSEC_PER_SEC) > 4096) { - __u64 t; - - s->tv_sec = d / msecs_to_jiffies(MSEC_PER_SEC); - t = (d - (cfs_duration_t)s->tv_sec * - msecs_to_jiffies(MSEC_PER_SEC)) * USEC_PER_SEC; - do_div(t, msecs_to_jiffies(MSEC_PER_SEC)); - s->tv_usec = t; - } else { - s->tv_sec = d / msecs_to_jiffies(MSEC_PER_SEC); - s->tv_usec = ((d - (cfs_duration_t)s->tv_sec * - msecs_to_jiffies(MSEC_PER_SEC)) * - USEC_PER_SEC) / msecs_to_jiffies(MSEC_PER_SEC); - } -#else - s->tv_sec = d / msecs_to_jiffies(MSEC_PER_SEC); - s->tv_usec = ((d - (cfs_duration_t)s->tv_sec * - msecs_to_jiffies(MSEC_PER_SEC)) * - USEC_PER_SEC) / msecs_to_jiffies(MSEC_PER_SEC); -#endif -} - -static inline void cfs_duration_nsec(cfs_duration_t d, struct timespec *s) -{ -#if (BITS_PER_LONG == 32) - __u64 t; - - s->tv_sec = d / msecs_to_jiffies(MSEC_PER_SEC); - t = (d - s->tv_sec * msecs_to_jiffies(MSEC_PER_SEC)) * NSEC_PER_SEC; - do_div(t, msecs_to_jiffies(MSEC_PER_SEC)); - s->tv_nsec = t; -#else - s->tv_sec = d / msecs_to_jiffies(MSEC_PER_SEC); - s->tv_nsec = ((d - s->tv_sec * msecs_to_jiffies(MSEC_PER_SEC)) * - NSEC_PER_SEC) / msecs_to_jiffies(MSEC_PER_SEC); -#endif -} - #define cfs_time_current_64 get_jiffies_64 static inline __u64 cfs_time_add_64(__u64 t, __u64 d) @@ -233,17 +268,6 @@ static inline int cfs_time_beforeq_64(__u64 t1, __u64 t2) /* * One jiffy */ -#define CFS_TIME_T "%lu" #define CFS_DURATION_T "%ld" - #endif /* __LIBCFS_LINUX_LINUX_TIME_H__ */ -/* - * Local variables: - * c-indentation-style: "K&R" - * c-basic-offset: 8 - * tab-width: 8 - * fill-column: 80 - * scroll-step: 1 - * End: - */