2013-01-15 16:25:07 +04:00
/*
* Definitions for measuring cputime in nsecs resolution .
*
* Based on < arch / ia64 / include / asm / cputime . h >
*
* Copyright ( C ) 2007 FUJITSU LIMITED
* Copyright ( C ) 2007 Hidetoshi Seto < seto . hidetoshi @ jp . fujitsu . com >
*
* This program 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 .
*
*/
# ifndef _ASM_GENERIC_CPUTIME_NSECS_H
# define _ASM_GENERIC_CPUTIME_NSECS_H
2013-03-21 03:34:25 +04:00
# include <linux/math64.h>
2013-01-15 16:25:07 +04:00
typedef u64 __nocast cputime_t ;
typedef u64 __nocast cputime64_t ;
# define cputime_one_jiffy jiffies_to_cputime(1)
2013-03-21 03:34:25 +04:00
# define cputime_div(__ct, divisor) div_u64((__force u64)__ct, divisor)
# define cputime_div_rem(__ct, divisor, remainder) \
div_u64_rem ( ( __force u64 ) __ct , divisor , remainder ) ;
2013-01-15 16:25:07 +04:00
/*
* Convert cputime < - > jiffies ( HZ )
*/
# define cputime_to_jiffies(__ct) \
2013-03-21 03:34:25 +04:00
cputime_div ( __ct , NSEC_PER_SEC / HZ )
2012-07-25 09:56:04 +04:00
# define cputime_to_scaled(__ct) (__ct)
2013-01-15 16:25:07 +04:00
# define jiffies_to_cputime(__jif) \
( __force cputime_t ) ( ( __jif ) * ( NSEC_PER_SEC / HZ ) )
# define cputime64_to_jiffies64(__ct) \
2013-03-21 03:34:25 +04:00
cputime_div ( __ct , NSEC_PER_SEC / HZ )
2013-01-15 16:25:07 +04:00
# define jiffies64_to_cputime64(__jif) \
( __force cputime64_t ) ( ( __jif ) * ( NSEC_PER_SEC / HZ ) )
2012-07-25 09:56:04 +04:00
/*
* Convert cputime < - > nanoseconds
*/
# define nsecs_to_cputime(__nsecs) ((__force u64)(__nsecs))
2013-01-15 16:25:07 +04:00
/*
* Convert cputime < - > microseconds
*/
# define cputime_to_usecs(__ct) \
2013-03-21 03:34:25 +04:00
cputime_div ( __ct , NSEC_PER_USEC )
2013-01-15 16:25:07 +04:00
# define usecs_to_cputime(__usecs) \
( __force cputime_t ) ( ( __usecs ) * NSEC_PER_USEC )
# define usecs_to_cputime64(__usecs) \
( __force cputime64_t ) ( ( __usecs ) * NSEC_PER_USEC )
/*
* Convert cputime < - > seconds
*/
# define cputime_to_secs(__ct) \
2013-03-21 03:34:25 +04:00
cputime_div ( __ct , NSEC_PER_SEC )
2013-01-15 16:25:07 +04:00
# define secs_to_cputime(__secs) \
( __force cputime_t ) ( ( __secs ) * NSEC_PER_SEC )
/*
* Convert cputime < - > timespec ( nsec )
*/
static inline cputime_t timespec_to_cputime ( const struct timespec * val )
{
u64 ret = val - > tv_sec * NSEC_PER_SEC + val - > tv_nsec ;
return ( __force cputime_t ) ret ;
}
static inline void cputime_to_timespec ( const cputime_t ct , struct timespec * val )
{
2013-03-21 03:34:25 +04:00
u32 rem ;
val - > tv_sec = cputime_div_rem ( ct , NSEC_PER_SEC , & rem ) ;
val - > tv_nsec = rem ;
2013-01-15 16:25:07 +04:00
}
/*
* Convert cputime < - > timeval ( msec )
*/
2013-02-23 20:28:44 +04:00
static inline cputime_t timeval_to_cputime ( const struct timeval * val )
2013-01-15 16:25:07 +04:00
{
u64 ret = val - > tv_sec * NSEC_PER_SEC + val - > tv_usec * NSEC_PER_USEC ;
return ( __force cputime_t ) ret ;
}
static inline void cputime_to_timeval ( const cputime_t ct , struct timeval * val )
{
2013-03-21 03:34:25 +04:00
u32 rem ;
val - > tv_sec = cputime_div_rem ( ct , NSEC_PER_SEC , & rem ) ;
val - > tv_usec = rem / NSEC_PER_USEC ;
2013-01-15 16:25:07 +04:00
}
/*
* Convert cputime < - > clock ( USER_HZ )
*/
# define cputime_to_clock_t(__ct) \
2013-03-21 03:34:25 +04:00
cputime_div ( __ct , ( NSEC_PER_SEC / USER_HZ ) )
2013-01-15 16:25:07 +04:00
# define clock_t_to_cputime(__x) \
( __force cputime_t ) ( ( __x ) * ( NSEC_PER_SEC / USER_HZ ) )
/*
* Convert cputime64 to clock .
*/
# define cputime64_to_clock_t(__ct) \
cputime_to_clock_t ( ( __force cputime_t ) __ct )
# endif