-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
+/*
+ * GPL HEADER START
*
- * Copyright (C) 2004 Cluster File Systems, Inc.
- * Author: Nikita Danilov <nikita@clusterfs.com>
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
- * This file is part of Lustre, http://www.lustre.org.
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 only,
+ * as published by the Free Software Foundation.
*
- * Lustre is free software; you can redistribute it and/or modify it under the
- * terms of version 2 of the GNU General Public License as published by the
- * Free Software Foundation.
+ * This program 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 version 2 for more details (a copy is included
+ * in the LICENSE file that accompanied this code).
*
- * Lustre 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
+ * version 2 along with this program; If not, see
+ * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
*
- * You should have received a copy of the GNU General Public License along
- * with Lustre; if not, write to the Free Software Foundation, Inc., 675 Mass
- * Ave, Cambridge, MA 02139, USA.
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ *
+ * GPL HEADER END
+ */
+/*
+ * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Use is subject to license terms.
+ */
+/*
+ * This file is part of Lustre, http://www.lustre.org/
+ * Lustre is a trademark of Sun Microsystems, Inc.
+ *
+ * libcfs/include/libcfs/linux/linux-time.h
*
* Implementation of portable time API for Linux (kernel and user-level).
*
+ * Author: Nikita Danilov <nikita@clusterfs.com>
*/
#ifndef __LIBCFS_LINUX_LINUX_TIME_H__
#error Do not #include this file directly. #include <libcfs/libcfs.h> instead
#endif
+#ifndef __KERNEL__
+#error This include is only for kernel use.
+#endif
+
/* Portable time API */
/*
* cfs_time_t cfs_time_current(void);
* cfs_time_t cfs_time_add (cfs_time_t, cfs_duration_t);
* cfs_duration_t cfs_time_sub (cfs_time_t, cfs_time_t);
- * int cfs_time_before (cfs_time_t, cfs_time_t);
- * int cfs_time_beforeq(cfs_time_t, cfs_time_t);
+ * int cfs_impl_time_before (cfs_time_t, cfs_time_t);
+ * int cfs_impl_time_before_eq(cfs_time_t, cfs_time_t);
*
* cfs_duration_t cfs_duration_build(int64_t);
*
#define ONE_BILLION ((u_int64_t)1000000000)
#define ONE_MILLION 1000000
-#ifdef __KERNEL__
-#ifndef AUTOCONF_INCLUDED
-#include <linux/config.h>
+#ifndef __KERNEL__
+#error This include is only for kernel use.
#endif
+
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/version.h>
#include <libcfs/linux/portals_compat25.h>
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
-
-/*
- * old kernels---CURRENT_TIME is struct timeval
- */
-typedef struct timeval cfs_fs_time_t;
-
-static inline void cfs_fs_time_usec(cfs_fs_time_t *t, struct timeval *v)
-{
- *v = *t;
-}
-
-static inline void cfs_fs_time_nsec(cfs_fs_time_t *t, struct timespec *s)
-{
- s->tv_sec = t->tv_sec;
- s->tv_nsec = t->tv_usec * 1000;
-}
-
-/*
- * internal helper function used by cfs_fs_time_before*()
- */
-static inline unsigned long long __cfs_fs_time_flat(cfs_fs_time_t *t)
-{
- return (unsigned long long)t->tv_sec * ONE_MILLION + t->tv_usec;
-}
-
-#define CURRENT_KERN_TIME xtime
-
-#else
-/* (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)) */
-
/*
* post 2.5 kernels.
*/
return (unsigned long long)t->tv_sec * ONE_BILLION + t->tv_nsec;
}
-#define CURRENT_KERN_TIME CURRENT_TIME
-
-/* (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)) */
-#endif
/*
* Generic kernel stuff
typedef unsigned long cfs_time_t; /* jiffies */
typedef long cfs_duration_t;
+typedef cycles_t cfs_cycles_t;
-
-static inline cfs_time_t cfs_time_current(void)
-{
- return jiffies;
-}
-
-static inline time_t cfs_time_current_sec(void)
-{
- return CURRENT_SECONDS;
-}
-
-static inline cfs_time_t cfs_time_add(cfs_time_t t, cfs_duration_t d)
+static inline int cfs_time_before(cfs_time_t t1, cfs_time_t t2)
{
- return t + d;
+ return time_before(t1, t2);
}
-static inline cfs_duration_t cfs_time_sub(cfs_time_t t1, cfs_time_t t2)
+static inline int cfs_time_beforeq(cfs_time_t t1, cfs_time_t t2)
{
- return t1 - t2;
+ return time_before_eq(t1, t2);
}
-static inline int cfs_time_before(cfs_time_t t1, cfs_time_t t2)
+static inline cfs_time_t cfs_time_current(void)
{
- return time_before(t1, t2);
+ return jiffies;
}
-static inline int cfs_time_beforeq(cfs_time_t t1, cfs_time_t t2)
+static inline time_t cfs_time_current_sec(void)
{
- return time_before_eq(t1, t2);
+ return get_seconds();
}
static inline void cfs_fs_time_current(cfs_fs_time_t *t)
{
- *t = CURRENT_KERN_TIME;
+ *t = CURRENT_TIME;
}
static inline time_t cfs_fs_time_sec(cfs_fs_time_t *t)
s->tv_usec = t;
#else
s->tv_sec = d / HZ;
- s->tv_usec = ((d - (cfs_duration_t)s->tv_sec * HZ) * ONE_MILLION) / HZ;
+ s->tv_usec = ((d - (cfs_duration_t)s->tv_sec * HZ) * \
+ ONE_MILLION) / HZ;
#endif
}
#endif
}
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-
#define cfs_time_current_64 get_jiffies_64
static inline __u64 cfs_time_add_64(__u64 t, __u64 d)
return (__s64)t2 - (__s64)t1 >= 0;
}
-#else
-#define cfs_time_current_64 cfs_time_current
-#define cfs_time_add_64 cfs_time_add
-#define cfs_time_shift_64 cfs_time_shift
-#define cfs_time_before_64 cfs_time_before
-#define cfs_time_beforeq_64 cfs_time_beforeq
-#endif
/*
* One jiffy
#define CFS_TIME_T "%lu"
#define CFS_DURATION_T "%ld"
-#else /* !__KERNEL__ */
-/*
- * Liblustre. time(2) based implementation.
- */
-
-#define CFS_TIME_T "%lu"
-
-#include <libcfs/user-time.h>
-
-#endif /* __KERNEL__ */
-
-/* __LIBCFS_LINUX_LINUX_TIME_H__ */
-#endif
+#endif /* __LIBCFS_LINUX_LINUX_TIME_H__ */
/*
* Local variables:
* c-indentation-style: "K&R"