linux/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h
<<
>>
Prefs
   1/*
   2 * GPL HEADER START
   3 *
   4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License version 2 only,
   8 * as published by the Free Software Foundation.
   9 *
  10 * This program is distributed in the hope that it will be useful, but
  11 * WITHOUT ANY WARRANTY; without even the implied warranty of
  12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13 * General Public License version 2 for more details (a copy is included
  14 * in the LICENSE file that accompanied this code).
  15 *
  16 * You should have received a copy of the GNU General Public License
  17 * version 2 along with this program; If not, see
  18 * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
  19 *
  20 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  21 * CA 95054 USA or visit www.sun.com if you need additional information or
  22 * have any questions.
  23 *
  24 * GPL HEADER END
  25 */
  26/*
  27 * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
  28 * Use is subject to license terms.
  29 */
  30/*
  31 * This file is part of Lustre, http://www.lustre.org/
  32 * Lustre is a trademark of Sun Microsystems, Inc.
  33 *
  34 * libcfs/include/libcfs/linux/linux-time.h
  35 *
  36 * Implementation of portable time API for Linux (kernel and user-level).
  37 *
  38 * Author: Nikita Danilov <nikita@clusterfs.com>
  39 */
  40
  41#ifndef __LIBCFS_LINUX_LINUX_TIME_H__
  42#define __LIBCFS_LINUX_LINUX_TIME_H__
  43
  44#ifndef __LIBCFS_LIBCFS_H__
  45#error Do not #include this file directly. #include <linux/libcfs/libcfs.h> instead
  46#endif
  47
  48#define ONE_BILLION ((u_int64_t)1000000000)
  49#define ONE_MILLION 1000000
  50
  51#include <linux/module.h>
  52#include <linux/kernel.h>
  53#include <linux/time.h>
  54#include <asm/div64.h>
  55
  56/*
  57 * post 2.5 kernels.
  58 */
  59
  60#include <linux/jiffies.h>
  61
  62
  63static inline void cfs_fs_time_usec(struct timespec *t, struct timeval *v)
  64{
  65        v->tv_sec  = t->tv_sec;
  66        v->tv_usec = t->tv_nsec / 1000;
  67}
  68
  69/*
  70 * Generic kernel stuff
  71 */
  72
  73static inline unsigned long cfs_time_current(void)
  74{
  75        return jiffies;
  76}
  77
  78static inline void cfs_fs_time_current(struct timespec *t)
  79{
  80        *t = CURRENT_TIME;
  81}
  82
  83static inline time_t cfs_fs_time_sec(struct timespec *t)
  84{
  85        return t->tv_sec;
  86}
  87
  88static inline long cfs_time_seconds(int seconds)
  89{
  90        return ((long)seconds) * HZ;
  91}
  92
  93static inline time_t cfs_duration_sec(long d)
  94{
  95        return d / HZ;
  96}
  97
  98static inline void cfs_duration_usec(long d, struct timeval *s)
  99{
 100#if (BITS_PER_LONG == 32) && (HZ > 4096)
 101        __u64 t;
 102
 103        s->tv_sec = d / HZ;
 104        t = (d - (long)s->tv_sec * HZ) * ONE_MILLION;
 105        do_div(t, HZ);
 106        s->tv_usec = t;
 107#else
 108        s->tv_sec = d / HZ;
 109        s->tv_usec = ((d - (long)s->tv_sec * HZ) * ONE_MILLION) / HZ;
 110#endif
 111}
 112
 113#define cfs_time_current_64 get_jiffies_64
 114
 115static inline __u64 cfs_time_add_64(__u64 t, __u64 d)
 116{
 117        return t + d;
 118}
 119
 120static inline __u64 cfs_time_shift_64(int seconds)
 121{
 122        return cfs_time_add_64(cfs_time_current_64(),
 123                               cfs_time_seconds(seconds));
 124}
 125
 126static inline int cfs_time_before_64(__u64 t1, __u64 t2)
 127{
 128        return (__s64)t2 - (__s64)t1 > 0;
 129}
 130
 131static inline int cfs_time_beforeq_64(__u64 t1, __u64 t2)
 132{
 133        return (__s64)t2 - (__s64)t1 >= 0;
 134}
 135
 136/*
 137 * One jiffy
 138 */
 139#define CFS_TICK                (1)
 140
 141#define CFS_TIME_T            "%lu"
 142#define CFS_DURATION_T    "%ld"
 143
 144#endif /* __LIBCFS_LINUX_LINUX_TIME_H__ */
 145