On 28/11/2019 06:45, Andrew Jeffery wrote: > The corner-case codepath was adjusting nexttick such that overflow > wouldn't occur when timer_mod() scaled the value back up. Remove a use > of GTIMER_SCALE and avoid unnecessary operations by calling > timer_mod_ns() directly. > > Signed-off-by: Andrew Jeffery <and...@aj.id.au>
Reviewed-by: Cédric Le Goater <c...@kaod.org> > --- > target/arm/helper.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/target/arm/helper.c b/target/arm/helper.c > index a089fb5a6909..65c4441a3896 100644 > --- a/target/arm/helper.c > +++ b/target/arm/helper.c > @@ -2446,9 +2446,10 @@ static void gt_recalc_timer(ARMCPU *cpu, int timeridx) > * timer expires we will reset the timer for any remaining period. > */ > if (nexttick > INT64_MAX / GTIMER_SCALE) { > - nexttick = INT64_MAX / GTIMER_SCALE; > + timer_mod_ns(cpu->gt_timer[timeridx], INT64_MAX); > + } else { > + timer_mod(cpu->gt_timer[timeridx], nexttick); > } > - timer_mod(cpu->gt_timer[timeridx], nexttick); > trace_arm_gt_recalc(timeridx, irqstate, nexttick); > } else { > /* Timer disabled: ISTATUS and timer output always clear */ >