static int timer_load(QEMUFile *f, void *opaque, int version_id) { TimersState *s = opaque; if (version_id != 1 && version_id != 2) return -EINVAL; if (s->cpu_ticks_enabled) { return -EINVAL; } s->cpu_ticks_prev = qemu_get_sbe64(f); s->cpu_ticks_offset = qemu_get_sbe64(f); if (version_id == 2) { s->cpu_clock_offset = qemu_get_sbe64(f); } return 0; }
static int goldfish_timer_load(QEMUFile* f, void* opaque, int version_id) { struct timer_state* s = opaque; if (version_id != GOLDFISH_TIMER_SAVE_VERSION) return -1; s->now_ns = qemu_get_sbe64(f); /* using qemu_get_be64 (without 's') causes faulty code generation in the compiler, dropping the 32 most significant bits */ s->armed = qemu_get_byte(f); if (s->armed) { int64_t now_tks = qemu_get_clock(vm_clock); int64_t diff_tks = qemu_get_be64(f); int64_t alarm_tks = now_tks + diff_tks; if (alarm_tks <= now_tks) { goldfish_device_set_irq(&s->dev, 0, 1); s->armed = 0; } else { qemu_mod_timer(s->timer, alarm_tks); } } return 0; }