mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-11-05 20:35:44 +00:00
target-alpha: Move alarm to vm_clock
Basing the alarm off the rtc_clock was silly. It leads to horrible spinning in the guest after being suspended and resumed, as it tries to catch up with lost ticks. This requires adding an accessor for reading the vm_clock too. Signed-off-by: Richard Henderson <rth@twiddle.net>
This commit is contained in:
parent
6453a3a694
commit
19e0cbb82f
4 changed files with 17 additions and 7 deletions
|
@ -693,7 +693,7 @@ PCIBus *typhoon_init(ram_addr_t ram_size, ISABus **isa_bus,
|
|||
AlphaCPU *cpu = cpus[i];
|
||||
s->cchip.cpu[i] = cpu;
|
||||
if (cpu != NULL) {
|
||||
cpu->alarm_timer = qemu_new_timer_ns(rtc_clock,
|
||||
cpu->alarm_timer = qemu_new_timer_ns(vm_clock,
|
||||
typhoon_alarm_timer,
|
||||
(void *)((uintptr_t)s + i));
|
||||
}
|
||||
|
|
|
@ -114,7 +114,8 @@ DEF_HELPER_FLAGS_2(tbis, TCG_CALL_NO_RWG, void, env, i64)
|
|||
|
||||
DEF_HELPER_1(halt, void, i64);
|
||||
|
||||
DEF_HELPER_FLAGS_0(get_time, TCG_CALL_NO_RWG, i64)
|
||||
DEF_HELPER_FLAGS_0(get_vmtime, TCG_CALL_NO_RWG, i64)
|
||||
DEF_HELPER_FLAGS_0(get_walltime, TCG_CALL_NO_RWG, i64)
|
||||
DEF_HELPER_FLAGS_2(set_alarm, TCG_CALL_NO_RWG, void, env, i64)
|
||||
#endif
|
||||
|
||||
|
|
|
@ -70,7 +70,12 @@ void helper_halt(uint64_t restart)
|
|||
}
|
||||
}
|
||||
|
||||
uint64_t helper_get_time(void)
|
||||
uint64_t helper_get_vmtime(void)
|
||||
{
|
||||
return qemu_get_clock_ns(vm_clock);
|
||||
}
|
||||
|
||||
uint64_t helper_get_walltime(void)
|
||||
{
|
||||
return qemu_get_clock_ns(rtc_clock);
|
||||
}
|
||||
|
|
|
@ -1634,15 +1634,19 @@ static ExitStatus gen_mfpr(int ra, int regno)
|
|||
return NO_EXIT;
|
||||
}
|
||||
|
||||
if (regno == 250) {
|
||||
/* WALL_TIME */
|
||||
/* Special help for VMTIME and WALLTIME. */
|
||||
if (regno == 250 || regno == 249) {
|
||||
void (*helper)(TCGv) = gen_helper_get_walltime;
|
||||
if (regno == 249) {
|
||||
helper = gen_helper_get_vmtime;
|
||||
}
|
||||
if (use_icount) {
|
||||
gen_io_start();
|
||||
gen_helper_get_time(cpu_ir[ra]);
|
||||
helper(cpu_ir[ra]);
|
||||
gen_io_end();
|
||||
return EXIT_PC_STALE;
|
||||
} else {
|
||||
gen_helper_get_time(cpu_ir[ra]);
|
||||
helper(cpu_ir[ra]);
|
||||
return NO_EXIT;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue