Signed-off-by: liguang <lig.f...@cn.fujitsu.com> --- include/migration/vmstate.h | 4 ++++ savevm.c | 31 +++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 0 deletions(-)
diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h index 9d09e60..977cf52 100644 --- a/include/migration/vmstate.h +++ b/include/migration/vmstate.h @@ -165,6 +165,7 @@ extern const VMStateInfo vmstate_info_timer; extern const VMStateInfo vmstate_info_buffer; extern const VMStateInfo vmstate_info_unused_buffer; extern const VMStateInfo vmstate_info_bitmap; +extern const VMStateInfo vmstate_info_ptimer; #define type_check_2darray(t1,t2,n,m) ((t1(*)[n][m])0 - (t2*)0) #define type_check_array(t1,t2,n) ((t1(*)[n])0 - (t2*)0) @@ -613,6 +614,9 @@ extern const VMStateInfo vmstate_info_bitmap; #define VMSTATE_TIMER_ARRAY(_f, _s, _n) \ VMSTATE_ARRAY_OF_POINTER(_f, _s, _n, 0, vmstate_info_timer, QEMUTimer *) +#define VMSTATE_PTIMER_ARRAY(_f, _s, _n) \ + VMSTATE_ARRAY_OF_POINTER(_f, _s, _n, 0, vmstate_info_ptimer, ptimer_state *) + #define VMSTATE_BOOL_ARRAY_V(_f, _s, _n, _v) \ VMSTATE_ARRAY(_f, _s, _n, _v, vmstate_info_bool, bool) diff --git a/savevm.c b/savevm.c index 2f631d4..54dbb33 100644 --- a/savevm.c +++ b/savevm.c @@ -30,6 +30,7 @@ #include "monitor/monitor.h" #include "sysemu/sysemu.h" #include "qemu/timer.h" +#include "hw/ptimer.h" #include "audio/audio.h" #include "migration/migration.h" #include "qemu/sockets.h" @@ -1362,6 +1363,36 @@ const VMStateInfo vmstate_info_timer = { .put = put_timer, }; +static int get_ptimer(QEMUFile *f, void *pv, size_t size) +{ + ptimer_state *v = pv; + uint64_t count; + + count = qemu_get_be64(f); + if (count != -1) { + ptimer_set_count(v, count); + } else { + ptimer_stop(v); + } + + return 0; +} + +static void put_ptimer(QEMUFile *f, void *pv, size_t size) +{ + ptimer_state *v = pv; + uint64_t count; + + count = ptimer_get_count(v); + qemu_put_be64(f, count); +} + +const VMStateInfo vmstate_info_ptimer = { + .name = "ptimer", + .get = get_ptimer, + .put = put_ptimer, +}; + /* uint8_t buffers */ static int get_buffer(QEMUFile *f, void *pv, size_t size) -- 1.7.2.5