powerpc/mpic_timer: fix convert ticks to time subtraction overflow
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>
This commit is contained in:
parent
0fd79588f9
commit
d2dc13b533
@ -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);
|
time->tv_sec = (__kernel_time_t)div_u64(ticks, priv->timerfreq);
|
||||||
tmp_sec = (u64)time->tv_sec * (u64)priv->timerfreq;
|
tmp_sec = (u64)time->tv_sec * (u64)priv->timerfreq;
|
||||||
|
|
||||||
time->tv_usec = (__kernel_suseconds_t)
|
time->tv_usec = 0;
|
||||||
div_u64((ticks - tmp_sec) * 1000000, priv->timerfreq);
|
|
||||||
|
if (tmp_sec <= ticks)
|
||||||
|
time->tv_usec = (__kernel_suseconds_t)
|
||||||
|
div_u64((ticks - tmp_sec) * 1000000, priv->timerfreq);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user