diff options
Diffstat (limited to 'kernel/time.c')
| -rw-r--r-- | kernel/time.c | 18 | 
1 files changed, 18 insertions, 0 deletions
diff --git a/kernel/time.c b/kernel/time.c index 6a08660b4fa..d63a4336fad 100644 --- a/kernel/time.c +++ b/kernel/time.c @@ -669,3 +669,21 @@ EXPORT_SYMBOL(get_jiffies_64);  #endif  EXPORT_SYMBOL(jiffies); + +/* + * Add two timespec values and do a safety check for overflow. + * It's assumed that both values are valid (>= 0) + */ +struct timespec timespec_add_safe(const struct timespec lhs, +				  const struct timespec rhs) +{ +	struct timespec res; + +	set_normalized_timespec(&res, lhs.tv_sec + rhs.tv_sec, +				lhs.tv_nsec + rhs.tv_nsec); + +	if (res.tv_sec < lhs.tv_sec || res.tv_sec < rhs.tv_sec) +		res.tv_sec = TIME_T_MAX; + +	return res; +}  |