Am 10.06.2013 09:55, schrieb Bharat Bhushan: > 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.bhus...@freescale.com> > --- > v1->v2 > - Added "booke: timer:" in patch subject > > hw/ppc/ppc_booke.c | 8 +++++++- > 1 files changed, 7 insertions(+), 1 deletions(-) > > 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;
Braces missing and trailing whitespace after return. So IIUC we can only allow 63 bits due to signedness, thus a maximum of (1 << 62), thus target_bit <= 61. Any chance at least the comment can be worded to explain that any better? Maybe also use (target-bit + 1 >= 63) or period > INT64_MAX as condition? Best regards, Andreas > + > + period = 1ULL << (target_bit + 1); > + > now = qemu_get_clock_ns(vm_clock); > tb = cpu_ppc_get_tb(tb_env, now, tb_env->tb_offset); > > -- SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg