Message ID | 20191128054527.25450-2-andrew@aj.id.au (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Expose GT CNTFRQ as a CPU property to support AST2600 | expand |
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 <andrew@aj.id.au> Reviewed-by: Cédric Le Goater <clg@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 */ >
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 */
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 <andrew@aj.id.au> --- target/arm/helper.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)