diff options
Diffstat (limited to 'hw')
-rw-r--r-- | hw/ppc/ppc.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/hw/ppc/ppc.c b/hw/ppc/ppc.c index dfa3945454..b17804fc17 100644 --- a/hw/ppc/ppc.c +++ b/hw/ppc/ppc.c @@ -843,6 +843,16 @@ static void __cpu_ppc_store_decr(PowerPCCPU *cpu, uint64_t *nextp, } /* + * Calculate the next decrementer event and set a timer. + * decr_next is in timebase units to keep rounding simple. Note it is + * not adjusted by tb_offset because if TB changes via tb_offset changing, + * decrementer does not change, so not directly comparable with TB. + */ + now = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL); + next = ns_to_tb(tb_env->decr_freq, now) + value; + *nextp = next; /* nextp is in timebase units */ + + /* * Going from 1 -> 0 or 0 -> -1 is the event to generate a DEC interrupt. * * On MSB level based DEC implementations the MSB always means the interrupt @@ -863,16 +873,6 @@ static void __cpu_ppc_store_decr(PowerPCCPU *cpu, uint64_t *nextp, (*lower_excp)(cpu); } - /* - * Calculate the next decrementer event and set a timer. - * decr_next is in timebase units to keep rounding simple. Note it is - * not adjusted by tb_offset because if TB changes via tb_offset changing, - * decrementer does not change, so not directly comparable with TB. - */ - now = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL); - next = ns_to_tb(tb_env->decr_freq, now) + value; - *nextp = next; - /* Adjust timer */ timer_mod(timer, tb_to_ns_round_up(tb_env->decr_freq, next)); } |