summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config/spl-build.m484
-rw-r--r--include/linux/Makefile.am1
-rw-r--r--include/linux/time_compat.h45
-rw-r--r--include/sys/time.h79
-rw-r--r--include/sys/types.h1
-rw-r--r--module/spl/Makefile.in1
-rw-r--r--module/spl/spl-time.c94
7 files changed, 31 insertions, 274 deletions
diff --git a/config/spl-build.m4 b/config/spl-build.m4
index fbe880836..109c653c1 100644
--- a/config/spl-build.m4
+++ b/config/spl-build.m4
@@ -30,12 +30,8 @@ AC_DEFUN([SPL_AC_CONFIG_KERNEL], [
SPL_AC_CTL_NAME
SPL_AC_VMALLOC_INFO
SPL_AC_PDE_DATA
- SPL_AC_SET_NORMALIZED_TIMESPEC_EXPORT
- SPL_AC_SET_NORMALIZED_TIMESPEC_INLINE
- SPL_AC_TIMESPEC_SUB
SPL_AC_UACCESS_HEADER
SPL_AC_KMALLOC_NODE
- SPL_AC_MONOTONIC_CLOCK
SPL_AC_INODE_I_MUTEX
SPL_AC_MUTEX_OWNER
SPL_AC_MUTEX_OWNER_TASK_STRUCT
@@ -993,66 +989,6 @@ AC_DEFUN([SPL_AC_CTL_NAME], [
])
dnl #
-dnl # 2.6.26 API change, set_normalized_timespec() is exported.
-dnl #
-AC_DEFUN([SPL_AC_SET_NORMALIZED_TIMESPEC_EXPORT],
- [AC_MSG_CHECKING([whether set_normalized_timespec() is available as export])
- SPL_LINUX_TRY_COMPILE_SYMBOL([
- #include <linux/time.h>
- ], [
- set_normalized_timespec(NULL, 0, 0);
- ], [set_normalized_timespec], [kernel/time.c], [
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_SET_NORMALIZED_TIMESPEC_EXPORT, 1,
- [set_normalized_timespec() is available as export])
- ], [
- AC_MSG_RESULT(no)
- ])
-])
-
-dnl #
-dnl # 2.6.16 API change, set_normalize_timespec() moved to time.c
-dnl # previously it was available in time.h as an inline.
-dnl #
-AC_DEFUN([SPL_AC_SET_NORMALIZED_TIMESPEC_INLINE], [
- AC_MSG_CHECKING([whether set_normalized_timespec() is an inline])
- SPL_LINUX_TRY_COMPILE([
- #include <linux/time.h>
- void set_normalized_timespec(struct timespec *ts,
- time_t sec, long nsec) { }
- ],
- [],
- [
- AC_MSG_RESULT(no)
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_SET_NORMALIZED_TIMESPEC_INLINE, 1,
- [set_normalized_timespec() is available as inline])
- ])
-])
-
-dnl #
-dnl # 2.6.18 API change,
-dnl # timespec_sub() inline function available in linux/time.h
-dnl #
-AC_DEFUN([SPL_AC_TIMESPEC_SUB], [
- AC_MSG_CHECKING([whether timespec_sub() is available])
- SPL_LINUX_TRY_COMPILE([
- #include <linux/time.h>
- ],[
- struct timespec a = { 0 };
- struct timespec b = { 0 };
- struct timespec c __attribute__ ((unused));
- c = timespec_sub(a, b);
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_TIMESPEC_SUB, 1, [timespec_sub() is available])
- ],[
- AC_MSG_RESULT(no)
- ])
-])
-
-dnl #
dnl # 2.6.18 API change,
dnl # added linux/uaccess.h
dnl #
@@ -1080,26 +1016,6 @@ AC_DEFUN([SPL_AC_KMALLOC_NODE], [
])
dnl #
-dnl # 2.6.9 API change,
-dnl # check whether 'monotonic_clock()' is available it may
-dnl # be available for some archs but not others.
-dnl #
-AC_DEFUN([SPL_AC_MONOTONIC_CLOCK],
- [AC_MSG_CHECKING([whether monotonic_clock() is available])
- SPL_LINUX_TRY_COMPILE_SYMBOL([
- #include <linux/timex.h>
- ], [
- monotonic_clock();
- ], [monotonic_clock], [], [
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_MONOTONIC_CLOCK, 1,
- [monotonic_clock() is available])
- ], [
- AC_MSG_RESULT(no)
- ])
-])
-
-dnl #
dnl # 2.6.16 API change,
dnl # check whether 'struct inode' has i_mutex
dnl #
diff --git a/include/linux/Makefile.am b/include/linux/Makefile.am
index ec7023d15..c921cc576 100644
--- a/include/linux/Makefile.am
+++ b/include/linux/Makefile.am
@@ -15,7 +15,6 @@ KERNEL_H = \
$(top_srcdir)/include/linux/rwsem_compat.h \
$(top_srcdir)/include/linux/smp_compat.h \
$(top_srcdir)/include/linux/sysctl_compat.h \
- $(top_srcdir)/include/linux/time_compat.h \
$(top_srcdir)/include/linux/uaccess_compat.h \
$(top_srcdir)/include/linux/wait_compat.h \
$(top_srcdir)/include/linux/zlib_compat.h
diff --git a/include/linux/time_compat.h b/include/linux/time_compat.h
deleted file mode 100644
index efa023299..000000000
--- a/include/linux/time_compat.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*****************************************************************************\
- * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- * Copyright (C) 2007 The Regents of the University of California.
- * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- * Written by Brian Behlendorf <[email protected]>.
- * UCRL-CODE-235197
- *
- * This file is part of the SPL, Solaris Porting Layer.
- * For details, see <http://zfsonlinux.org/>.
- *
- * The SPL is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * The SPL is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with the SPL. If not, see <http://www.gnu.org/licenses/>.
-\*****************************************************************************/
-
-#ifndef _SPL_TIME_COMPAT_H
-#define _SPL_TIME_COMPAT_H
-
-#include <linux/time.h>
-
-/* timespec_sub() API changes
- * 2.6.18 - 2.6.x: Inline function provided by linux/time.h
- */
-#ifndef HAVE_TIMESPEC_SUB
-static inline struct timespec
-timespec_sub(struct timespec lhs, struct timespec rhs)
-{
- struct timespec ts_delta;
- set_normalized_timespec(&ts_delta, lhs.tv_sec - rhs.tv_sec,
- lhs.tv_nsec - rhs.tv_nsec);
- return ts_delta;
-}
-#endif /* HAVE_TIMESPEC_SUB */
-
-#endif /* _SPL_TIME_COMPAT_H */
-
diff --git a/include/sys/time.h b/include/sys/time.h
index d8e81c9a7..b9826d2b7 100644
--- a/include/sys/time.h
+++ b/include/sys/time.h
@@ -23,74 +23,57 @@
\*****************************************************************************/
#ifndef _SPL_TIME_H
-#define _SPL_TIME_H
+#define _SPL_TIME_H
-/*
- * Structure returned by gettimeofday(2) system call,
- * and used in other calls.
- */
#include <linux/module.h>
#include <linux/time.h>
#include <sys/types.h>
#include <sys/timer.h>
#if defined(CONFIG_64BIT)
-#define TIME_MAX INT64_MAX
-#define TIME_MIN INT64_MIN
+#define TIME_MAX INT64_MAX
+#define TIME_MIN INT64_MIN
#else
-#define TIME_MAX INT32_MAX
-#define TIME_MIN INT32_MIN
+#define TIME_MAX INT32_MAX
+#define TIME_MIN INT32_MIN
#endif
-#define SEC 1
-#define MILLISEC 1000
-#define MICROSEC 1000000
-#define NANOSEC 1000000000
+#define SEC 1
+#define MILLISEC 1000
+#define MICROSEC 1000000
+#define NANOSEC 1000000000
#define MSEC2NSEC(m) ((hrtime_t)(m) * (NANOSEC / MILLISEC))
#define NSEC2MSEC(n) ((n) / (NANOSEC / MILLISEC))
-/* Already defined in include/linux/time.h */
-#undef CLOCK_THREAD_CPUTIME_ID
-#undef CLOCK_REALTIME
-#undef CLOCK_MONOTONIC
-#undef CLOCK_PROCESS_CPUTIME_ID
+#define hz HZ
-typedef enum clock_type {
- __CLOCK_REALTIME0 = 0, /* obsolete; same as CLOCK_REALTIME */
- CLOCK_VIRTUAL = 1, /* thread's user-level CPU clock */
- CLOCK_THREAD_CPUTIME_ID = 2, /* thread's user+system CPU clock */
- CLOCK_REALTIME = 3, /* wall clock */
- CLOCK_MONOTONIC = 4, /* high resolution monotonic clock */
- CLOCK_PROCESS_CPUTIME_ID = 5, /* process's user+system CPU clock */
- CLOCK_HIGHRES = CLOCK_MONOTONIC, /* alternate name */
- CLOCK_PROF = CLOCK_THREAD_CPUTIME_ID,/* alternate name */
-} clock_type_t;
-
-#define hz \
-({ \
- ASSERT(HZ >= 100 && HZ <= MICROSEC); \
- HZ; \
-})
-
-extern void __gethrestime(timestruc_t *);
-extern int __clock_gettime(clock_type_t, timespec_t *);
-extern hrtime_t __gethrtime(void);
+#define TIMESPEC_OVERFLOW(ts) \
+ ((ts)->tv_sec < TIME_MIN || (ts)->tv_sec > TIME_MAX)
-#define gethrestime(ts) __gethrestime(ts)
-#define clock_gettime(fl, tp) __clock_gettime(fl, tp)
-#define gethrtime() __gethrtime()
+static inline void
+gethrestime(timestruc_t *now)
+{
+ struct timespec ts;
+ getnstimeofday(&ts);
+ now->tv_sec = ts.tv_sec;
+ now->tv_nsec = ts.tv_nsec;
+}
-static __inline__ time_t
+static inline time_t
gethrestime_sec(void)
{
- timestruc_t now;
-
- __gethrestime(&now);
- return now.tv_sec;
+ struct timespec ts;
+ getnstimeofday(&ts);
+ return (ts.tv_sec);
}
-#define TIMESPEC_OVERFLOW(ts) \
- ((ts)->tv_sec < TIME_MIN || (ts)->tv_sec > TIME_MAX)
+static inline hrtime_t
+gethrtime(void)
+{
+ struct timespec now;
+ getrawmonotonic(&now);
+ return (((hrtime_t)now.tv_sec * NSEC_PER_SEC) + now.tv_nsec);
+}
#endif /* _SPL_TIME_H */
diff --git a/include/sys/types.h b/include/sys/types.h
index fcec0fa31..11a325494 100644
--- a/include/sys/types.h
+++ b/include/sys/types.h
@@ -31,7 +31,6 @@
#include <linux/uaccess_compat.h>
#include <linux/file_compat.h>
#include <linux/list_compat.h>
-#include <linux/time_compat.h>
#include <linux/bitops_compat.h>
#include <linux/smp_compat.h>
#include <linux/kallsyms_compat.h>
diff --git a/module/spl/Makefile.in b/module/spl/Makefile.in
index 34b480127..30620349f 100644
--- a/module/spl/Makefile.in
+++ b/module/spl/Makefile.in
@@ -14,7 +14,6 @@ $(MODULE)-objs += @top_srcdir@/module/spl/spl-taskq.o
$(MODULE)-objs += @top_srcdir@/module/spl/spl-rwlock.o
$(MODULE)-objs += @top_srcdir@/module/spl/spl-vnode.o
$(MODULE)-objs += @top_srcdir@/module/spl/spl-err.o
-$(MODULE)-objs += @top_srcdir@/module/spl/spl-time.o
$(MODULE)-objs += @top_srcdir@/module/spl/spl-kobj.o
$(MODULE)-objs += @top_srcdir@/module/spl/spl-generic.o
$(MODULE)-objs += @top_srcdir@/module/spl/spl-atomic.o
diff --git a/module/spl/spl-time.c b/module/spl/spl-time.c
deleted file mode 100644
index 0ed49cc26..000000000
--- a/module/spl/spl-time.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/*****************************************************************************\
- * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
- * Copyright (C) 2007 The Regents of the University of California.
- * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- * Written by Brian Behlendorf <[email protected]>.
- * UCRL-CODE-235197
- *
- * This file is part of the SPL, Solaris Porting Layer.
- * For details, see <http://zfsonlinux.org/>.
- *
- * The SPL is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * The SPL is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with the SPL. If not, see <http://www.gnu.org/licenses/>.
- *****************************************************************************
- * Solaris Porting Layer (SPL) Time Implementation.
-\*****************************************************************************/
-
-#include <sys/sysmacros.h>
-#include <sys/time.h>
-
-#ifdef HAVE_MONOTONIC_CLOCK
-extern unsigned long long monotonic_clock(void);
-#endif
-
-#ifdef DEBUG_SUBSYSTEM
-#undef DEBUG_SUBSYSTEM
-#endif
-
-#define DEBUG_SUBSYSTEM S_TIME
-
-void
-__gethrestime(timestruc_t *ts)
-{
- struct timespec tspec;
-
- getnstimeofday(&tspec);
-
- ts->tv_sec = tspec.tv_sec;
- ts->tv_nsec = tspec.tv_nsec;
-}
-EXPORT_SYMBOL(__gethrestime);
-
-/* Use monotonic_clock() by default. It's faster and is available on older
- * kernels, but few architectures have them, so we must fallback to
- * do_posix_clock_monotonic_gettime().
- */
-hrtime_t
-__gethrtime(void) {
-#ifdef HAVE_MONOTONIC_CLOCK
- unsigned long long res = monotonic_clock();
-
- /* Deal with signed/unsigned mismatch */
- return (hrtime_t)(res & ~(1ULL << 63));
-#else
- struct timespec ts;
-
- do_posix_clock_monotonic_gettime(&ts);
- return (((hrtime_t)ts.tv_sec * NSEC_PER_SEC) + ts.tv_nsec);
-#endif
-}
-EXPORT_SYMBOL(__gethrtime);
-
-/* set_normalized_timespec() API changes
- * 2.6.0 - 2.6.15: Inline function provided by linux/time.h
- * 2.6.16 - 2.6.25: Function prototype defined but not exported
- * 2.6.26 - 2.6.x: Function defined and exported
- */
-#if !defined(HAVE_SET_NORMALIZED_TIMESPEC_INLINE) && \
- !defined(HAVE_SET_NORMALIZED_TIMESPEC_EXPORT)
-void
-set_normalized_timespec(struct timespec *ts, time_t sec, long nsec)
-{
- while (nsec >= NSEC_PER_SEC) {
- nsec -= NSEC_PER_SEC;
- ++sec;
- }
- while (nsec < 0) {
- nsec += NSEC_PER_SEC;
- --sec;
- }
- ts->tv_sec = sec;
- ts->tv_nsec = nsec;
-}
-EXPORT_SYMBOL(set_normalized_timespec);
-#endif