qemu/hw/ppc
Nicholas Piggin 73d6ac24c8 hw/ppc: Fix clock update drift
The clock update logic reads the clock twice to compute the new clock
value, with a value derived from the later time subtracted from a value
derived from the earlier time. The delta causes time to be lost.

This can ultimately result in time becoming unsynchronized between CPUs
and that can cause OS lockups, timeouts, watchdogs, etc. This can be
seen running a KVM guest (that causes lots of TB updates) on a powernv
SMP machine.

Fix this by reading the clock once.

Cc: qemu-stable@nongnu.org
Fixes: dbdd25065e ("Implement time-base start/stop helpers.")
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Reviewed-by: Cédric Le Goater <clg@kaod.org>
Reviewed-by: Frederic Barrat <fbarrat@linux.ibm.com>
Message-ID: <20230629020713.327745-1-npiggin@gmail.com>
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
(cherry picked from commit 2ad2e113de)
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
2023-07-17 14:23:05 +03:00
..
e500-ccsr.h Use OBJECT_DECLARE_SIMPLE_TYPE when possible 2020-09-18 14:12:32 -04:00
e500.c hw/ppc/e500.c: Attach eSDHC unimplemented region to ccsr_addr_space 2023-02-05 06:40:28 -03:00
e500.h hw/ppc/e500: Add Freescale eSDHC to e500plat 2022-12-21 14:17:55 -03:00
e500plat.c hw/ppc/e500{, plat}: Drop redundant checks for presence of platform bus 2023-02-05 06:40:28 -03:00
fdt.c target/ppc: Split page size information into a separate allocation 2018-04-27 18:05:22 +10:00
fw_cfg.c hw/ppc: Implement fw_cfg_arch_key_name() 2019-05-23 14:10:31 +02:00
Kconfig hw/ppc/Kconfig: Remove unused dependencies from PEGASOS2 2023-01-08 01:54:22 -05:00
mac_newworld.c mac_{old,new}world: Use local variable instead of qdev_get_machine() 2023-02-06 11:41:39 +00:00
mac_oldworld.c mac_oldworld: Allow specifying nvram backing store 2023-02-06 11:41:39 +00:00
meson.build ppc440_uc.c: Move DDR2 SDRAM controller model to ppc4xx_sdram.c 2022-10-28 13:15:22 -03:00
mpc8544_guts.c ppc/ppc4xx: Convert printfs() 2022-01-04 07:55:34 +01:00
mpc8544ds.c hw/ppc/e500: Remove if statement which is now always true 2022-10-17 16:15:09 -03:00
pef.c ppc/pef.c: initialize cgs->ready in kvmppc_svm_init() 2021-06-03 18:10:31 +10:00
pegasos2.c hw/ppc/pegasos2: Fix PCI interrupt routing 2023-03-08 00:37:48 +01:00
pnv.c pnv_phb4_pec: Simplify/align code to parent user-created PHBs 2023-03-03 16:50:17 -03:00
pnv_bmc.c Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
pnv_core.c include/hw/ppc: Split pnv_chip.h off pnv.h 2023-01-20 07:25:10 +01:00
pnv_homer.c include/hw/ppc: Split pnv_chip.h off pnv.h 2023-01-20 07:25:10 +01:00
pnv_lpc.c hw/isa: Rename isa_bus_irqs() -> isa_bus_register_input_irqs() 2023-02-27 22:29:02 +01:00
pnv_occ.c ppc/pnv: Remove PnvOCC::psi link 2022-04-20 18:00:30 -03:00
pnv_pnor.c block: Change blk_{pread,pwrite}() param order 2022-07-12 12:14:56 +02:00
pnv_psi.c include/hw/ppc: Don't include hw/pci-host/pnv_phb.h from pnv.h 2023-01-20 07:25:18 +01:00
pnv_sbe.c ppc/pnv: Add initial P9/10 SBE model 2022-08-31 14:08:05 -03:00
pnv_xscom.c include/hw/ppc: Split pnv_chip.h off pnv.h 2023-01-20 07:25:10 +01:00
ppc.c hw/ppc: Fix clock update drift 2023-07-17 14:23:05 +03:00
ppc4xx_devs.c ppc4xx_sdram: Move ppc4xx_sdram_banks() to ppc4xx_sdram.c 2022-10-28 13:15:23 -03:00
ppc4xx_pci.c include/hw/pci: Split pci_device.h off pci.h 2023-01-08 01:54:22 -05:00
ppc4xx_sdram.c *: Add missing includes of qemu/error-report.h 2023-03-22 15:06:57 +00:00
ppc405.h ppc4xx_sdram: QOM'ify 2022-10-17 16:15:09 -03:00
ppc405_boards.c ppc4xx_sdram: Rename functions to prevent name clashes 2022-10-17 16:15:09 -03:00
ppc405_uc.c Drop duplicate #include 2023-02-08 07:28:05 +01:00
ppc440.h ppc440_sdram: QOM'ify 2022-10-17 16:15:09 -03:00
ppc440_bamboo.c Drop duplicate #include 2023-02-08 07:28:05 +01:00
ppc440_pcix.c include/hw/pci: Split pci_device.h off pci.h 2023-01-08 01:54:22 -05:00
ppc440_uc.c ppc440_uc.c: Move DDR2 SDRAM controller model to ppc4xx_sdram.c 2022-10-28 13:15:22 -03:00
ppc_booke.c Use g_new() & friends where that makes obvious sense 2022-03-21 15:44:44 +01:00
ppce500_spin.c powerpc tcg: Fix Lesser GPL version number 2020-11-15 16:38:50 +01:00
prep.c hw/ppc/prep: Fix wiring of PIC -> CPU interrupt 2023-05-31 09:42:36 +03:00
prep_systemio.c ppc/6xx: Allocate IRQ lines with qdev_init_gpio_in() 2022-07-18 13:59:43 -03:00
rs6000_mc.c Do not include hw/boards.h if it's not really necessary 2021-05-02 17:24:51 +02:00
sam460ex.c hw/ppc/sam460ex: Correctly set MAL properties 2023-02-27 22:29:02 +01:00
spapr.c ppc patch queue for 2022-12-21: 2022-12-21 18:08:09 +00:00
spapr_caps.c Trivial: 3 char repeat typos 2022-06-28 11:06:02 +02:00
spapr_cpu_core.c hw/ppc: free env->tb_env in spapr_unrealize_vcpu() 2022-04-04 08:49:06 +02:00
spapr_drc.c Drop duplicate #include 2023-02-08 07:28:05 +01:00
spapr_events.c Use g_new() & friends where that makes obvious sense 2022-03-21 15:44:44 +01:00
spapr_hcall.c includes: move tb_flush into its own header 2023-03-07 17:06:33 +00:00
spapr_iommu.c spapr/ddw: Reset DMA when the last non-default window is removed 2022-07-06 10:22:37 -03:00
spapr_irq.c spapr/xics: Drop unused argument to xics_kvm_has_broken_disconnect() 2020-12-14 15:50:55 +11:00
spapr_numa.c Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
spapr_nvdimm.c hw/ppc: check if spapr_drc_index() returns NULL in spapr_nvdimm.c 2022-07-28 10:31:54 -03:00
spapr_ovec.c spapr: Improve handling of memory unplug with old guests 2021-01-19 10:20:29 +11:00
spapr_pci.c pci: drop redundant PCIDeviceClass::is_bridge field 2022-12-21 07:32:24 -05:00
spapr_pci_nvlink2.c hw/ppc/pnv: Avoid dynamic stack allocation 2022-09-22 16:38:28 +01:00
spapr_pci_vfio.c include/hw/pci: Split pci_device.h off pci.h 2023-01-08 01:54:22 -05:00
spapr_rng.c Do not include cpu.h if it's not really necessary 2021-05-02 17:24:51 +02:00
spapr_rtas.c target/ppc: introduce ppc_maybe_interrupt 2022-10-28 13:15:22 -03:00
spapr_rtas_ddw.c spapr/ddw: Implement 64bit query extension 2022-07-06 10:22:37 -03:00
spapr_rtc.c rtc: Have event RTC_CHANGE identify the RTC by QOM path 2022-02-28 11:39:35 +01:00
spapr_softmmu.c *: Add missing includes of qemu/error-report.h 2023-03-22 15:06:57 +00:00
spapr_tpm_proxy.c Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
spapr_vio.c hw/ppc/spapr_vio.c: use g_autofree in spapr_dt_vdevice() 2022-03-02 06:51:40 +01:00
spapr_vof.c Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
trace-events ppc4xx_sdram: Generalise bank setup 2022-10-28 13:15:23 -03:00
trace.h trace: switch position of headers to what Meson requires 2020-08-21 06:18:24 -04:00
virtex_ml507.c hw/ppc/virtex_ml507: Prefer local over global variable 2022-12-21 14:17:55 -03:00
vof.c ppc/vof: Fix uninitialized string tracing 2022-04-20 18:00:30 -03:00