[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v3 5/5] hpet 'driftfix': add code in hpet_timer(
From: |
Ulrich Obergfell |
Subject: |
Re: [Qemu-devel] [PATCH v3 5/5] hpet 'driftfix': add code in hpet_timer() to compensate delayed callbacks and coalesced interrupts |
Date: |
Thu, 5 May 2011 04:07:19 -0400 (EDT) |
Hi Marcelo,
> Other than that, shouldnt reset accounting variables to init state on
> write to GLOBAL_ENABLE_CFG / writes to main counter?
I'd suggest to initialize/reset the driftfix-related fields in the
'HPETTimer' structure (including the backlog of unaccounted ticks)
in the following situations.
- When the guest o/s sets the 'CFG_ENABLE' bit (overall enable) in
the General Configuration Register.
This is the place in hpet_ram_writel():
case HPET_CFG:
...
if (activating_bit(old_val, new_val, HPET_CFG_ENABLE)) {
...
for (i = 0; i < s->num_timers; i++) {
if ((&s->timer[i])->cmp != ~0ULL) {
// initialize / reset fields here
hpet_set_timer(&s->timer[i]);
- When the guest o/s sets the 'TN_ENABLE' bit (timer N interrupt
enable) in the Timer N Configuration and Capabilities Register.
This is the place in hpet_ram_writel():
case HPET_TN_CFG:
...
if (activating_bit(old_val, new_val, HPET_TN_ENABLE)) {
// initialize / reset fields here
hpet_set_timer(timer);
This should cover cases such as ...
- first time initialization of HPET & timers during guest o/s boot.
(includes kexec and reboot)
- if a guest o/s stops and restarts the timer.
(for example, to change the comparator register value or
to switch a timer between periodic mode and non-periodic mode)
Regards,
Uli
Re: [Qemu-devel] [PATCH v3 5/5] hpet 'driftfix': add code in hpet_timer() to compensate delayed callbacks and coalesced interrupts,
Ulrich Obergfell <=