@ -290,10 +290,65 @@ static void change_clocksource(void)
clock - > name ) ;
*/
}
# else
# else /* GENERIC_TIME */
static inline void clocksource_forward_now ( void ) { }
static inline void change_clocksource ( void ) { }
# endif
/**
* ktime_get - get the monotonic time in ktime_t format
*
* returns the time in ktime_t format
*/
ktime_t ktime_get ( void )
{
struct timespec now ;
ktime_get_ts ( & now ) ;
return timespec_to_ktime ( now ) ;
}
EXPORT_SYMBOL_GPL ( ktime_get ) ;
/**
* ktime_get_ts - get the monotonic clock in timespec format
* @ ts : pointer to timespec variable
*
* The function calculates the monotonic clock from the realtime
* clock and the wall_to_monotonic offset and stores the result
* in normalized timespec format in the variable pointed to by @ ts .
*/
void ktime_get_ts ( struct timespec * ts )
{
struct timespec tomono ;
unsigned long seq ;
do {
seq = read_seqbegin ( & xtime_lock ) ;
getnstimeofday ( ts ) ;
tomono = wall_to_monotonic ;
} while ( read_seqretry ( & xtime_lock , seq ) ) ;
set_normalized_timespec ( ts , ts - > tv_sec + tomono . tv_sec ,
ts - > tv_nsec + tomono . tv_nsec ) ;
}
EXPORT_SYMBOL_GPL ( ktime_get_ts ) ;
# endif /* !GENERIC_TIME */
/**
* ktime_get_real - get the real ( wall - ) time in ktime_t format
*
* returns the time in ktime_t format
*/
ktime_t ktime_get_real ( void )
{
struct timespec now ;
getnstimeofday ( & now ) ;
return timespec_to_ktime ( now ) ;
}
EXPORT_SYMBOL_GPL ( ktime_get_real ) ;
/**
* getrawmonotonic - Returns the raw monotonic time in a timespec