From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42862) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1W0MPa-0008Fl-Ak for qemu-devel@nongnu.org; Mon, 06 Jan 2014 21:29:07 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1W0MPR-0006Fs-C0 for qemu-devel@nongnu.org; Mon, 06 Jan 2014 21:28:58 -0500 Received: from e28smtp07.in.ibm.com ([122.248.162.7]:54403) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1W0MPQ-0006FT-Ng for qemu-devel@nongnu.org; Mon, 06 Jan 2014 21:28:49 -0500 Received: from /spool/local by e28smtp07.in.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 7 Jan 2014 07:58:44 +0530 Received: from d28relay01.in.ibm.com (d28relay01.in.ibm.com [9.184.220.58]) by d28dlp03.in.ibm.com (Postfix) with ESMTP id 56C0C1258055 for ; Tue, 7 Jan 2014 08:00:09 +0530 (IST) Received: from d28av05.in.ibm.com (d28av05.in.ibm.com [9.184.220.67]) by d28relay01.in.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id s072SYUZ50724950 for ; Tue, 7 Jan 2014 07:58:35 +0530 Received: from d28av05.in.ibm.com (localhost [127.0.0.1]) by d28av05.in.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id s072SeaR008685 for ; Tue, 7 Jan 2014 07:58:40 +0530 Message-ID: <52CB6657.5080109@linux.vnet.ibm.com> Date: Tue, 07 Jan 2014 10:28:39 +0800 From: Wenchao Xia MIME-Version: 1.0 References: <1388704234-22498-1-git-send-email-xiawenc@linux.vnet.ibm.com> <1388704234-22498-3-git-send-email-xiawenc@linux.vnet.ibm.com> <20140106172315.62a68140@redhat.com> In-Reply-To: <20140106172315.62a68140@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Subject: Re: [Qemu-devel] [RFC PATCH V2 2/5] qapi: add event helper functions List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Luiz Capitulino Cc: mreitz@redhat.com, qemu-devel@nongnu.org, armbru@redhat.com 于 2014/1/7 6:23, Luiz Capitulino 写道: > On Fri, 3 Jan 2014 07:10:31 +0800 > Wenchao Xia wrote: > >> This file hold some functions that do not need to be generated. >> >> Signed-off-by: Wenchao Xia >> --- >> include/qapi/qmp-event.h | 22 ++++++++++++++++++ >> qapi/Makefile.objs | 1 + >> qapi/qmp-event.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++ >> 3 files changed, 79 insertions(+), 0 deletions(-) >> create mode 100644 include/qapi/qmp-event.h >> create mode 100644 qapi/qmp-event.c >> >> diff --git a/include/qapi/qmp-event.h b/include/qapi/qmp-event.h >> new file mode 100644 >> index 0000000..2baf093 >> --- /dev/null >> +++ b/include/qapi/qmp-event.h >> @@ -0,0 +1,22 @@ >> +/* >> + * QMP Event related >> + * >> + * Copyright IBM, Corp. 2014 >> + * >> + * Authors: >> + * Wenchao Xia >> + * >> + * This work is licensed under the terms of the GNU GPLv2+ or later. >> + * See the COPYING.LIB file in the top-level directory. >> + * >> + */ >> + >> +#ifndef QMP_EVENT_H >> +#define QMP_EVENT_H >> + >> +#include "qapi/error.h" >> +#include "qapi/qmp/qdict.h" >> + >> +QDict *qmp_event_build_dict(const char *event_name); >> + >> +#endif >> diff --git a/qapi/Makefile.objs b/qapi/Makefile.objs >> index 1f9c973..d14b769 100644 >> --- a/qapi/Makefile.objs >> +++ b/qapi/Makefile.objs >> @@ -3,3 +3,4 @@ util-obj-y += qmp-output-visitor.o qmp-registry.o qmp-dispatch.o >> util-obj-y += string-input-visitor.o string-output-visitor.o >> >> util-obj-y += opts-visitor.o >> +util-obj-y += qmp-event.o >> diff --git a/qapi/qmp-event.c b/qapi/qmp-event.c >> new file mode 100644 >> index 0000000..dc81ec2 >> --- /dev/null >> +++ b/qapi/qmp-event.c >> @@ -0,0 +1,56 @@ >> +/* >> + * QMP Event related >> + * >> + * Copyright IBM, Corp. 2014 >> + * >> + * Authors: >> + * Wenchao Xia >> + * >> + * This work is licensed under the terms of the GNU GPLv2+ or later. >> + * See the COPYING.LIB file in the top-level directory. >> + * >> + */ >> + >> +#include >> + >> +#include "qemu-common.h" >> +#include "qapi/qmp-event.h" >> +#include "qapi/qmp/qstring.h" >> +#include "qapi/qmp/qjson.h" >> + >> +#ifdef _WIN32 >> +#include "sysemu/os-win32.h" >> +#endif >> + >> +#ifdef CONFIG_POSIX >> +#include "sysemu/os-posix.h" >> +#endif >> + >> +static void timestamp_put(QDict *qdict) >> +{ >> + int err; >> + QObject *obj; >> + qemu_timeval tv; >> + >> + err = qemu_gettimeofday(&tv); >> + if (err < 0) { >> + return; >> + } > > Hmm, I see this has always existed (and I guess I did it myself), but it's > not quite right. Sending an event w/o time info wouldn't be complaint to > the protocol spec. It's a good idea to fix this now. We have three options: > > 1. abort() > > 2. Skip sending the event altogether > > 3. Add a bogus time value (say seconds=0 and microseconds=0) > > I don't know what's best, but I guess I'd do item 3. Although I wonder > if zero is any better then no info at all (it's certainly complaint, but > not a valid info). Maybe skip the event then? > I think user want a way, to know error happens. If it is skepted, then we should report it in stderr or a special message in monitor. In my opinion, sending an event would be the easist way. We can set time to zero and doc "timestamp == 0 means failure in getting host time", and this avoid impacting existing user who always seeking key "timestamp". > >> + >> + obj = qobject_from_jsonf("{ 'seconds': %" PRId64 ", " >> + "'microseconds': %" PRId64 " }", >> + (int64_t) tv.tv_sec, (int64_t) tv.tv_usec); >> + qdict_put_obj(qdict, "timestamp", obj); >> +} >> + >> +/* >> + * Build a QDict, then fill event name and time stamp, caller should free the >> + * QDict after usage. >> + */ >> +QDict *qmp_event_build_dict(const char *event_name) >> +{ >> + QDict *dict = qdict_new(); >> + qdict_put(dict, "event", qstring_from_str(event_name)); >> + timestamp_put(dict); >> + return dict; >> +} >