powerpc/mpic_timer: fix convert ticks to time subtraction overflow
authorWang Dongsheng <dongsheng.wang@freescale.com>
Mon, 6 Jan 2014 05:23:31 +0000 (13:23 +0800)
committerScott Wood <scottwood@freescale.com>
Thu, 9 Jan 2014 23:52:14 +0000 (17:52 -0600)
In some cases tmp_sec may be greater than ticks, because in the process
of calculation ticks and tmp_sec will be rounded.

Signed-off-by: Wang Dongsheng <dongsheng.wang@freescale.com>
Signed-off-by: Scott Wood <scottwood@freescale.com>
arch/powerpc/sysdev/mpic_timer.c

index 70dcf9c..9d9b062 100644 (file)
@@ -97,8 +97,11 @@ static void convert_ticks_to_time(struct timer_group_priv *priv,
        time->tv_sec = (__kernel_time_t)div_u64(ticks, priv->timerfreq);
        tmp_sec = (u64)time->tv_sec * (u64)priv->timerfreq;
 
-       time->tv_usec = (__kernel_suseconds_t)
-               div_u64((ticks - tmp_sec) * 1000000, priv->timerfreq);
+       time->tv_usec = 0;
+
+       if (tmp_sec <= ticks)
+               time->tv_usec = (__kernel_suseconds_t)
+                       div_u64((ticks - tmp_sec) * 1000000, priv->timerfreq);
 
        return;
 }