target/arm: Remove redundant scaling of nexttick
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: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Cédric Le Goater <clg@kaod.org> Message-id: f8c680720e3abe55476e6d9cb604ad27fdbeb2e0.1576215453.git-series.andrew@aj.id.au Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
8e5943260a
commit
4a0245b625
@ -2486,9 +2486,10 @@ static void gt_recalc_timer(ARMCPU *cpu, int timeridx)
|
|||||||
* timer expires we will reset the timer for any remaining period.
|
* timer expires we will reset the timer for any remaining period.
|
||||||
*/
|
*/
|
||||||
if (nexttick > INT64_MAX / GTIMER_SCALE) {
|
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);
|
trace_arm_gt_recalc(timeridx, irqstate, nexttick);
|
||||||
} else {
|
} else {
|
||||||
/* Timer disabled: ISTATUS and timer output always clear */
|
/* Timer disabled: ISTATUS and timer output always clear */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user