Message ID | 1370850751-18650-1-git-send-email-Bharat.Bhushan@freescale.com |
---|---|
State | New |
Headers | show |
diff --git a/hw/ppc/ppc_booke.c b/hw/ppc/ppc_booke.c index e41b036..f4eda15 100644 --- a/hw/ppc/ppc_booke.c +++ b/hw/ppc/ppc_booke.c @@ -133,9 +133,15 @@ static void booke_update_fixed_timer(CPUPPCState *env, ppc_tb_t *tb_env = env->tb_env; uint64_t lapse; uint64_t tb; - uint64_t period = 1 << (target_bit + 1); + uint64_t period; uint64_t now; + /* Deactivate timer for target_bit > 61 */ + if (target_bit > 61) + return; + + period = 1ULL << (target_bit + 1); + now = qemu_get_clock_ns(vm_clock); tb = cpu_ppc_get_tb(tb_env, now, tb_env->tb_offset);
QEMU timer supports a maximum timer of INT64_MAX. So starting timer only for time which is calculated using target_bit < 62 and deactivate/stop timer if the target bit is above 61. This patch also fix the time calculation from target_bit. The code was doing (1 << (target_bit + 1)) while this should be (1ULL << (target_bit + 1)). Signed-off-by: Bharat Bhushan <bharat.bhushan@freescale.com> --- hw/ppc/ppc_booke.c | 8 +++++++- 1 files changed, 7 insertions(+), 1 deletions(-)