From: George Anzinger - In case of a negative nsec value the result of the division must be normalized. - Remove inline from an exported function. Signed-off-by: George Anzinger Signed-off-by: Thomas Gleixner Signed-off-by: Andrew Morton --- kernel/time.c | 13 +++++++------ 1 files changed, 7 insertions(+), 6 deletions(-) diff -puN kernel/time.c~normalize-timespec-for-negative-values-in-ns_to_timespec kernel/time.c --- devel/kernel/time.c~normalize-timespec-for-negative-values-in-ns_to_timespec 2006-01-23 16:41:41.000000000 -0800 +++ devel-akpm/kernel/time.c 2006-01-23 16:41:41.000000000 -0800 @@ -636,15 +636,16 @@ void set_normalized_timespec(struct time * * Returns the timespec representation of the nsec parameter. */ -inline struct timespec ns_to_timespec(const nsec_t nsec) +struct timespec ns_to_timespec(const nsec_t nsec) { struct timespec ts; - if (nsec) - ts.tv_sec = div_long_long_rem_signed(nsec, NSEC_PER_SEC, - &ts.tv_nsec); - else - ts.tv_sec = ts.tv_nsec = 0; + if (!nsec) + return (struct timespec) {0, 0}; + + ts.tv_sec = div_long_long_rem_signed(nsec, NSEC_PER_SEC, &ts.tv_nsec); + if (unlikely(nsec < 0)) + set_normalized_timespec(&ts, ts.tv_sec, ts.tv_nsec); return ts; } _