qemu/hw/timer
Tai Yunfang 369b41359a mc146818rtc: precisely count the clock for periodic timer
There are two issues in current code:
1) If the period is changed by re-configuring RegA, the coalesced
   irq will be scaled to reflect the new period, however, it
   calculates the new interrupt number like this:
    s->irq_coalesced = (s->irq_coalesced * s->period) / period;

   There are some clocks will be lost if they are not enough to
   be squeezed to a single new period that will cause the VM clock
   slower

   In order to fix the issue, we calculate the interrupt window
   based on the precise clock rather than period, then the clocks
   lost during period is scaled can be compensated properly

2) If periodic_timer_update() is called due to RegA reconfiguration,
   i.e, the period is updated, current time is not the start point
   for the next periodic timer, instead, which should start from the
   last interrupt, otherwise, the clock in VM will become slow

   This patch takes the clocks from last interrupt to current clock
   into account and compensates the clocks for the next interrupt,
   especially if a complete interrupt was lost in this window, the
   time can be caught up by LOST_TICK_POLICY_SLEW

Signed-off-by: Tai Yunfang <yunfangtai@tencent.com>
Signed-off-by: Xiao Guangrong <xiaoguangrong@tencent.com>
Message-Id: <20170510083259.3900-3-xiaoguangrong@tencent.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2017-06-06 20:18:35 +02:00
..
a9gtimer.c timer: a9gtimer: remove loop to auto-increment comparator 2016-10-24 16:26:54 +01:00
allwinner-a10-pit.c hw/ptimer: Introduce timer policy feature 2016-09-22 18:13:06 +01:00
altera_timer.c altera_timer: fix incorrect memset 2017-06-04 18:42:55 +03:00
arm_mptimer.c arm_mptimer: Convert to use ptimer 2016-10-24 16:26:53 +01:00
arm_timer.c hw/ptimer: Introduce timer policy feature 2016-09-22 18:13:06 +01:00
armv7m_systick.c armv7m: Split systick out from NVIC 2017-02-28 16:18:49 +00:00
aspeed_timer.c hw/timer: Add value matching support to aspeed_timer 2016-06-17 15:23:51 +01:00
cadence_ttc.c arm: Clean up includes 2016-01-29 15:07:23 +00:00
digic-timer.c hw/ptimer: Introduce timer policy feature 2016-09-22 18:13:06 +01:00
ds1338.c i2c: Allow I2C devices to NAK start events 2017-01-09 11:40:20 +00:00
etraxfs_timer.c shutdown: Add source information to SHUTDOWN and RESET 2017-05-23 13:28:17 +02:00
exynos4210_mct.c hw/arm/exynos: Convert fprintf to qemu_log_mask/error_report 2017-04-20 17:39:17 +01:00
exynos4210_pwm.c hw/arm/exynos: Convert fprintf to qemu_log_mask/error_report 2017-04-20 17:39:17 +01:00
exynos4210_rtc.c hw/arm/exynos: Convert fprintf to qemu_log_mask/error_report 2017-04-20 17:39:17 +01:00
grlib_gptimer.c clean-up: removed duplicate #includes 2016-10-28 18:17:24 +03:00
hpet.c hpet: Remove user_creatable flag 2017-05-17 10:37:01 -03:00
i8254_common.c qdev: Replace cannot_instantiate_with_device_add_yet with !user_creatable 2017-05-17 10:37:00 -03:00
i8254.c Replaced get_tick_per_sec() by NANOSECONDS_PER_SECOND 2016-03-22 22:20:17 +01:00
imx_epit.c imx: Use 'const char', not 'char const' 2016-09-22 18:13:09 +01:00
imx_gpt.c ARM i.MX timers: fix reset handling 2017-02-28 12:08:16 +00:00
lm32_timer.c hw/ptimer: Introduce timer policy feature 2016-09-22 18:13:06 +01:00
m48t59-internal.h Split ISA and sysbus versions of m48t59 device 2017-02-06 12:33:21 +11:00
m48t59-isa.c Split ISA and sysbus versions of m48t59 device 2017-02-06 12:33:21 +11:00
m48t59.c hw/timer: QOM'ify m48txx_sysbus 2017-06-02 05:54:43 +01:00
Makefile.objs armv7m: Split systick out from NVIC 2017-02-28 16:18:49 +00:00
mc146818rtc.c mc146818rtc: precisely count the clock for periodic timer 2017-06-06 20:18:35 +02:00
milkymist-sysctl.c shutdown: Add source information to SHUTDOWN and RESET 2017-05-23 13:28:17 +02:00
mips_gictimer.c hw/mips_gictimer: provide API for retrieving frequency 2017-02-21 22:24:58 +00:00
omap_gptimer.c The only 64bit parameter of muldiv64() is the first one. 2016-06-07 18:02:49 +03:00
omap_synctimer.c Replaced get_tick_per_sec() by NANOSECONDS_PER_SECOND 2016-03-22 22:20:17 +01:00
pl031.c hw: explicitly include qemu/log.h 2016-05-19 16:42:29 +02:00
puv3_ost.c hw/ptimer: Introduce timer policy feature 2016-09-22 18:13:06 +01:00
pxa2xx_timer.c shutdown: Add source information to SHUTDOWN and RESET 2017-05-23 13:28:17 +02:00
sh_timer.c hw/ptimer: Introduce timer policy feature 2016-09-22 18:13:06 +01:00
slavio_timer.c hw/timer: QOM'ify slavio_timer 2017-06-02 05:54:43 +01:00
stm32f2xx_timer.c timer: stm32f2xx_timer: add check for prescaler value 2016-10-24 16:26:55 +01:00
sun4v-rtc.c target-sparc: move common cpu initialisation routines to sparc64.c 2017-01-18 22:03:44 +01:00
trace-events armv7m: Split systick out from NVIC 2017-02-28 16:18:49 +00:00
twl92230.c migration: extend VMStateInfo 2017-01-24 17:54:47 +00:00
xilinx_timer.c hw/ptimer: Introduce timer policy feature 2016-09-22 18:13:06 +01:00