qemu-e2k/hw
James Hogan 4b69c7e265 target-mips: Reset CPU timer consistently
The MIPS CPU timer (CP0 Count/Compare registers & QEMU timer) is
reset at machine initialisation, including starting the timeout. Both
registers however are placed before mvp in CPUMIPSState so they will
both be zeroed on reset by the memset in mips_cpu_reset() including soon
after init. This doesn't take into account that the timer may be
running, in which case env->CP0_Count will represent the delta against
the VM clock and the timeout will need updating.

At init time (cpu_mips_clock_init()), lets only create the timer.
Setting Count = 1 and starting the timer (cpu_mips_store_count()) can be
done at reset time from cpu_state_reset(), which is after the memset.
There is also no need to set CP0_Compare = 0 as that is already handled
by the memset.

Note that a reset occurs from mips_cpu_realizefn() which is before the
machine init callback has had a chance to set up the CPU interrupts and
the CPU timer, so env->timer will be NULL. This case is handled
explicitly in cpu_mips_store_count(), treating the timer as disabled
(which will also be the right thing to do when KVM support is added).

Reported-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: James Hogan <james.hogan@imgtec.com>
Cc: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2014-06-18 16:54:30 +02:00
..
9pfs hw: use ld_p/st_p instead of ld_raw/st_raw 2014-06-05 16:04:17 +02:00
acpi savevm: Remove all the unneeded version_minimum_id_old (x86) 2014-06-16 04:55:26 +02:00
alpha machine: Conversion of QEMUMachineInitArgs to MachineState 2014-05-28 17:35:01 +02:00
arm vexpress: Add support for the -bios flag to provide firmware 2014-06-09 15:43:22 +01:00
audio savevm: Remove all the unneeded version_minimum_id_old (x86) 2014-06-16 04:55:26 +02:00
block Block pull request 2014-06-16 12:27:47 +01:00
bt
char savevm: Remove all the unneeded version_minimum_id_old (x86) 2014-06-16 04:55:26 +02:00
core pc,pci,virtio,qdev fixes, tests 2014-06-05 21:52:37 +01:00
cpu
cris machine: Conversion of QEMUMachineInitArgs to MachineState 2014-05-28 17:35:01 +02:00
display savevm: Remove all the unneeded version_minimum_id_old (x86) 2014-06-16 04:55:26 +02:00
dma savevm: Remove all the unneeded version_minimum_id_old (x86) 2014-06-16 04:55:26 +02:00
gpio savevm: Remove all the unneeded version_minimum_id_old (arm) 2014-05-13 16:09:35 +01:00
i2c savevm: Remove all the unneeded version_minimum_id_old (rest) 2014-05-14 15:24:51 +02:00
i386 savevm: Remove all the unneeded version_minimum_id_old (x86) 2014-06-16 04:55:26 +02:00
ide Patch queue for ppc - 2014-06-16 2014-06-16 18:26:21 +01:00
input savevm: Remove all the unneeded version_minimum_id_old (x86) 2014-06-16 04:55:26 +02:00
intc PPC: openpic_kvm: Implement reset 2014-06-16 13:24:36 +02:00
ipack savevm: Remove all the unneeded version_minimum_id_old (rest) 2014-05-14 15:24:51 +02:00
isa savevm: Remove all the unneeded version_minimum_id_old (x86) 2014-06-16 04:55:26 +02:00
lm32 machine: Conversion of QEMUMachineInitArgs to MachineState 2014-05-28 17:35:01 +02:00
m68k machine: Conversion of QEMUMachineInitArgs to MachineState 2014-05-28 17:35:01 +02:00
microblaze ssi: Name the CS GPIO 2014-05-28 17:36:21 +02:00
mips target-mips: Reset CPU timer consistently 2014-06-18 16:54:30 +02:00
misc macio: Fix timer endianness 2014-06-16 13:24:38 +02:00
moxie machine: Conversion of QEMUMachineInitArgs to MachineState 2014-05-28 17:35:01 +02:00
net Fix typo in eTSEC Ethernet controller 2014-06-16 13:24:26 +02:00
nvram spapr_nvram: Correct max nvram size 2014-06-16 13:24:26 +02:00
openrisc machine: Conversion of QEMUMachineInitArgs to MachineState 2014-05-28 17:35:01 +02:00
pci savevm: Remove all the unneeded version_minimum_id_old (x86) 2014-06-16 04:55:26 +02:00
pci-bridge savevm: Remove all the unneeded version_minimum_id_old (x86) 2014-06-16 04:55:26 +02:00
pci-host hw/pci-host/ppce500: Fix typo in vmstate definition 2014-06-16 13:24:41 +02:00
pcmcia
ppc spapr_pci: Advertise MSI quota 2014-06-16 13:24:46 +02:00
s390x s390x: cleanup interrupt injection 2014-06-10 09:50:27 +02:00
scsi savevm: Remove all the unneeded version_minimum_id_old (x86) 2014-06-16 04:55:26 +02:00
sd hw/sd/sd.c: Drop unused sd_acmd_type[] array 2014-06-10 19:39:34 +04:00
sh4 machine: Conversion of QEMUMachineInitArgs to MachineState 2014-05-28 17:35:01 +02:00
sparc tcx: move initialisation from realizefn to initfn 2014-06-05 20:51:57 +01:00
sparc64 machine: Conversion of QEMUMachineInitArgs to MachineState 2014-05-28 17:35:01 +02:00
ssi ssi: Name the CS GPIO 2014-05-28 17:36:21 +02:00
timer savevm: Remove all the unneeded version_minimum_id_old (x86) 2014-06-16 04:55:26 +02:00
tpm
unicore32 machine: Conversion of QEMUMachineInitArgs to MachineState 2014-05-28 17:35:01 +02:00
usb blockdev: Rename drive_init(), drive_uninit() to drive_new(), drive_del() 2014-06-16 17:23:19 +08:00
virtio vhost: replace ffsl with ctzl 2014-06-11 00:25:06 +01:00
watchdog savevm: Remove all the unneeded version_minimum_id_old (x86) 2014-06-16 04:55:26 +02:00
xen trivial patches for 2014-05-07 2014-05-07 18:38:39 +01:00
xenpv machine: Conversion of QEMUMachineInitArgs to MachineState 2014-05-28 17:35:01 +02:00
xtensa machine: Conversion of QEMUMachineInitArgs to MachineState 2014-05-28 17:35:01 +02:00
Makefile.objs