Signed-off-by: Michael Roth <mdr...@linux.vnet.ibm.com> --- Makefile | 3 ++- qemu-timer.c | 25 +++++++++++++++++++++++++ qemu-timer.h | 4 ++++ 3 files changed, 31 insertions(+), 1 deletion(-)
diff --git a/Makefile b/Makefile index 0711f14..c545ebd 100644 --- a/Makefile +++ b/Makefile @@ -157,7 +157,8 @@ qemu-img.o: qemu-img-cmds.h tools-obj-y = $(oslib-obj-y) $(trace-obj-y) qemu-tool.o qemu-timer.o \ qemu-timer-common.o main-loop.o notify.o \ - iohandler.o cutils.o iov.o async.o + iohandler.o cutils.o iov.o async.o \ + $(qapi-obj-y) $(qobject-obj-y) tools-obj-$(CONFIG_POSIX) += compatfd.o qemu-img$(EXESUF): qemu-img.o $(tools-obj-y) $(block-obj-y) diff --git a/qemu-timer.c b/qemu-timer.c index de98977..8a67620 100644 --- a/qemu-timer.c +++ b/qemu-timer.c @@ -30,6 +30,7 @@ #include "hw/hw.h" #include "qemu-timer.h" +#include "qapi/qapi-visit-core.h" #ifdef _WIN32 #include <mmsystem.h> @@ -61,6 +62,30 @@ struct QEMUTimer { int scale; }; +void visit_type_QEMUTimer(Visitor *v, QEMUTimer **obj, const char *name, + Error **errp) +{ + int64_t expire_time, expire_time_cpy; + if (!obj || !*obj) { + error_set(errp, QERR_INVALID_PARAMETER_VALUE, name ? name : NULL, + "non-NULL QEMUTimer"); + return; + } + expire_time = expire_time_cpy = qemu_timer_expire_time_ns(*obj); + visit_start_struct(v, NULL, "QEMUTimer", name, 0, errp); + visit_type_int64(v, &expire_time, "expire_time", errp); + visit_end_struct(v, errp); + + /* if we're modifying a QEMUTimer, re-arm/delete accordingly */ + if (expire_time != expire_time_cpy) { + if (expire_time != -1) { + qemu_mod_timer_ns(*obj, expire_time); + } else { + qemu_del_timer(*obj); + } + } +} + struct qemu_alarm_timer { char const *name; int (*start)(struct qemu_alarm_timer *t); diff --git a/qemu-timer.h b/qemu-timer.h index f8af595..1feabd7 100644 --- a/qemu-timer.h +++ b/qemu-timer.h @@ -4,6 +4,7 @@ #include "qemu-common.h" #include "main-loop.h" #include "notify.h" +#include "qapi/qapi-visit-core.h" #ifdef __FreeBSD__ #include <sys/param.h> @@ -67,6 +68,9 @@ int64_t cpu_get_ticks(void); void cpu_enable_ticks(void); void cpu_disable_ticks(void); +void visit_type_QEMUTimer(Visitor *v, QEMUTimer **obj, const char *name, + Error **errp); + static inline QEMUTimer *qemu_new_timer_ns(QEMUClock *clock, QEMUTimerCB *cb, void *opaque) { -- 1.7.9.5