@ -907,7 +907,7 @@ static void update_wall_time(void)
* getboottime - Return the real time of system boot .
* @ ts : pointer to the timespec to be set
*
* Returns the time of day in a timespec .
* Returns the wall - time of boot in a timespec .
*
* This is based on the wall_to_monotonic offset and the total suspend
* time . Calls to settimeofday will affect the value returned ( which
@ -925,6 +925,55 @@ void getboottime(struct timespec *ts)
}
EXPORT_SYMBOL_GPL ( getboottime ) ;
/**
* get_monotonic_boottime - Returns monotonic time since boot
* @ ts : pointer to the timespec to be set
*
* Returns the monotonic time since boot in a timespec .
*
* This is similar to CLOCK_MONTONIC / ktime_get_ts , but also
* includes the time spent in suspend .
*/
void get_monotonic_boottime ( struct timespec * ts )
{
struct timespec tomono , sleep ;
unsigned int seq ;
s64 nsecs ;
WARN_ON ( timekeeping_suspended ) ;
do {
seq = read_seqbegin ( & xtime_lock ) ;
* ts = xtime ;
tomono = wall_to_monotonic ;
sleep = total_sleep_time ;
nsecs = timekeeping_get_ns ( ) ;
} while ( read_seqretry ( & xtime_lock , seq ) ) ;
set_normalized_timespec ( ts , ts - > tv_sec + tomono . tv_sec + sleep . tv_sec ,
ts - > tv_nsec + tomono . tv_nsec + sleep . tv_nsec + nsecs ) ;
}
EXPORT_SYMBOL_GPL ( get_monotonic_boottime ) ;
/**
* ktime_get_boottime - Returns monotonic time since boot in a ktime
*
* Returns the monotonic time since boot in a ktime
*
* This is similar to CLOCK_MONTONIC / ktime_get , but also
* includes the time spent in suspend .
*/
ktime_t ktime_get_boottime ( void )
{
struct timespec ts ;
get_monotonic_boottime ( & ts ) ;
return timespec_to_ktime ( ts ) ;
}
EXPORT_SYMBOL_GPL ( ktime_get_boottime ) ;
/**
* monotonic_to_bootbased - Convert the monotonic time to boot based .
* @ ts : pointer to the timespec to be converted