On 2014/4/9 1:32, Tony Luck wrote: > The "uptime" tracer added in: > commit 8aacf017b065a805d27467843490c976835eb4a5 > tracing: Add "uptime" trace clock that uses jiffies > has wraparound problems when the system has been up more > than 1 hour 11 minutes and 34 seconds. It converts jiffies > to nanoseconds using: > (u64)jiffies_to_usecs(jiffy) * 1000ULL > but since jiffies_to_usecs() only returns a 32-bit value, it > truncates at 2^32 microseconds. An additional problem on 32-bit > systems is that the argument is "unsigned long", so fixing the > return value only helps until 2^32 jiffies (49.7 days on a HZ=1000 > system). > > So we provide a full featured jiffies_to_nsec() function that > takes a "u64" argument and provides a "u64" result. To avoid > cries of rage from the other user of this: scheduler_tick_max_deferment() > we check whether the argument is small enough that we can do > the calculations in 32-bit operations. > > Signed-off-by: Tony Luck <tony.l...@intel.com> > --- > include/linux/jiffies.h | 6 +----- > kernel/time.c | 24 ++++++++++++++++++++++++ > kernel/timeconst.bc | 12 ++++++++++++ > kernel/trace/trace_clock.c | 2 +- > 4 files changed, 38 insertions(+), 6 deletions(-) >
[...] > diff --git a/kernel/trace/trace_clock.c b/kernel/trace/trace_clock.c > index 26dc348332b7..52470fba1d26 100644 > --- a/kernel/trace/trace_clock.c > +++ b/kernel/trace/trace_clock.c > @@ -65,7 +65,7 @@ u64 notrace trace_clock_jiffies(void) > u64 jiffy = jiffies - INITIAL_JIFFIES; Hi Tony and Steven, Another problem, maybe we should use get_jiffies_64() instead of jiffies directly here OR we'll meet wraparound problems on 32bit system. But a same problem is that the jiffies_lock is not safe in NMI context... > > /* Return nsecs */ > - return (u64)jiffies_to_usecs(jiffy) * 1000ULL; > + return jiffies_to_nsecs(jiffy); > } > > /* > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/