From: Eric Blake <eblake@redhat.com>
To: Wenchao Xia <wenchaoqemu@gmail.com>, qemu-devel@nongnu.org
Cc: mdroth@linux.vnet.ibm.com, armbru@redhat.com, lcapitulino@redhat.com
Subject: Re: [Qemu-devel] [PATCH V6 16/29] qapi event: convert RTC_CHANGE
Date: Fri, 13 Jun 2014 15:27:47 -0600 [thread overview]
Message-ID: <539B6CD3.90905@redhat.com> (raw)
In-Reply-To: <1401970944-18735-17-git-send-email-wenchaoqemu@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 5038 bytes --]
On 06/05/2014 06:22 AM, Wenchao Xia wrote:
> This patch also eliminates build time warning caused by no caller
> of monitor_qapi_event_throttle().
Again, my suggestion on 6/29 could avoid that warning; if you use that
workaround, don't clean it until 29/29, but you can drop this paragraph
of this commit.
>
> Signed-off-by: Wenchao Xia <wenchaoqemu@gmail.com>
> ---
> docs/qmp/qmp-events.txt | 16 ----------------
> hw/ppc/spapr_rtas.c | 3 ++-
> hw/timer/mc146818rtc.c | 3 ++-
> include/sysemu/sysemu.h | 2 --
> monitor.c | 4 +++-
> qapi-event.json | 13 +++++++++++++
> vl.c | 9 ---------
> 7 files changed, 20 insertions(+), 30 deletions(-)
>
Yay - the first event with data, so I get to see what the generator does.
The .h file shows this signature:
>> void qapi_event_send_rtc_change(int64_t offset,
>> Error **errp);
and the .c has this code:
>> void qapi_event_send_rtc_change(int64_t offset,
>> Error **errp)
>> {
>> QDict *qmp;
>> Error *local_err = NULL;
>> QMPEventFuncEmit emit;
>> QmpOutputVisitor *qov;
>> Visitor *v;
>> QObject *obj;
>>
>> emit = qmp_event_get_func_emit();
>> if (!emit) {
>> return;
>> }
>>
>> qmp = qmp_event_build_dict("RTC_CHANGE");
>>
>> qov = qmp_output_visitor_new();
>> g_assert(qov);
>>
>> v = qmp_output_get_visitor(qov);
>> g_assert(v);
>>
>> /* Fake visit, as if all member are under a structure */
Grammar error; guess I have more comments on 3/29.
>> visit_start_struct(v, NULL, "", "RTC_CHANGE", 0, &local_err);
>> if (local_err) {
>> goto clean;
>> }
Hmm, qmp_output_start_struct() never sets errp.
>>
>> visit_type_int(v, &offset, "offset", &local_err);
>> if (local_err) {
>> goto clean;
>> }
Likewise, qmp_output_type_int never sets errp.
>>
>> visit_end_struct(v, &local_err);
>> if (local_err) {
>> goto clean;
>> }
And neither does qmp_end_struct.
>>
>> obj = qmp_output_get_qobject(qov);
>> g_assert(obj != NULL);
>>
>> qdict_put_obj(qmp, "data", obj);
>> emit(QAPI_EVENT_RTC_CHANGE, qmp, &local_err);
And I already mentioned earlier that the only implementation of the
emit() callback never sets local_err (and probably doesn't even need it
as a parameter).
>>
>> clean:
>> qmp_output_visitor_cleanup(qov);
>> error_propagate(errp, local_err);
>> QDECREF(qmp);
>> }
If you change the earlier 3 instances to just use visit_...(,
&error_abort), you can completely ditch the local_err variable, drop the
clean: label, and overall have a much shorter generated function.
> @@ -93,7 +94,7 @@ static void rtas_set_time_of_day(PowerPCCPU *cpu, sPAPREnvironment *spapr,
> tm.tm_sec = rtas_ld(args, 5);
>
> /* Just generate a monitor event for the change */
> - rtc_change_mon_event(&tm);
> + qapi_event_send_rtc_change(qemu_timedate_diff(&tm), NULL);
> spapr->rtc_offset = qemu_timedate_diff(&tm);
Eww. This makes me worry whether grabbing qemu_timedate_diff() two times
in a row may cause a different value to be reported than what is stored
locally. Please grab it only once into a local variable, then copy that
value into both locations.
Once again, all callers of qapi_event_send_rtc_change() are passing a
NULL errp to silently ignore errors; and I just audited that no errors
happen anyways.
> +++ b/monitor.c
> @@ -612,6 +612,9 @@ static void monitor_qapi_event_throttle(QAPIEvent event, int64_t rate)
>
> static void monitor_qapi_event_init(void)
> {
> + /* Limit RTC & BALLOON events to 1 per second */
Comment is a bit misleading until a later patch converts balloon events,...
> + monitor_qapi_event_throttle(QAPI_EVENT_RTC_CHANGE, 1000);
> +
> qmp_event_set_func_emit(monitor_qapi_event_queue);
> }
>
> @@ -737,7 +740,6 @@ monitor_protocol_event_throttle(MonitorEvent event,
> static void monitor_protocol_event_init(void)
> {
> /* Limit RTC & BALLOON events to 1 per second */
> - monitor_protocol_event_throttle(QEVENT_RTC_CHANGE, 1000);
> monitor_protocol_event_throttle(QEVENT_BALLOON_CHANGE, 1000);
> monitor_protocol_event_throttle(QEVENT_WATCHDOG, 1000);
...furthermore, the OLD comment was wrong (it forgot about the watchdog
event). You could get around that by rewording the comment to just say
'limit guest-triggerable events to 1 per second' without calling out
what those events are.
> +# @RTC_CHANGE
> +#
> +# Emitted when the guest changes the RTC time.
> +#
> +# @offset: offset between base RTC clock (as specified by -rtc base), and
> +# new RTC clock value
> +#
> +# Since: 2.1
0.14.0
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]
next prev parent reply other threads:[~2014-06-13 21:28 UTC|newest]
Thread overview: 77+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-05 12:21 [Qemu-devel] [PATCH V6 00/29] add direct support of event in qapi schema Wenchao Xia
2014-06-05 12:21 ` [Qemu-devel] [PATCH V6 01/29] os-posix: include sys/time.h Wenchao Xia
2014-06-05 12:21 ` [Qemu-devel] [PATCH V6 02/29] qapi: add event helper functions Wenchao Xia
2014-06-05 12:21 ` [Qemu-devel] [PATCH V6 03/29] qapi script: add event support Wenchao Xia
2014-06-13 16:47 ` Eric Blake
2014-06-13 21:28 ` Eric Blake
2014-06-18 3:33 ` Eric Blake
2014-06-18 6:06 ` Paolo Bonzini
2014-06-18 22:45 ` Wenchao Xia
2014-06-18 3:50 ` Eric Blake
2014-06-05 12:21 ` [Qemu-devel] [PATCH V6 04/29] test: add test cases for qapi event Wenchao Xia
2014-06-13 17:05 ` Eric Blake
2014-06-05 12:22 ` [Qemu-devel] [PATCH V6 05/29] qapi: adjust existing defines Wenchao Xia
2014-06-13 17:32 ` Eric Blake
2014-06-05 12:22 ` [Qemu-devel] [PATCH V6 06/29] monitor: add an implemention as qapi event emit method Wenchao Xia
2014-06-13 19:04 ` Eric Blake
2014-06-15 0:27 ` Wenchao Xia
2014-06-05 12:22 ` [Qemu-devel] [PATCH V6 07/29] qapi: add new schema file qapi-event.json Wenchao Xia
2014-06-13 19:25 ` Eric Blake
2014-06-13 19:45 ` Eric Blake
2014-06-05 12:22 ` [Qemu-devel] [PATCH V6 08/29] qapi event: convert SHUTDOWN Wenchao Xia
2014-06-13 19:57 ` Eric Blake
2014-06-15 0:32 ` Wenchao Xia
2014-06-05 12:22 ` [Qemu-devel] [PATCH V6 09/29] qapi event: convert POWERDOWN Wenchao Xia
2014-06-13 20:02 ` Eric Blake
2014-06-05 12:22 ` [Qemu-devel] [PATCH V6 10/29] qapi event: convert RESET Wenchao Xia
2014-06-05 12:22 ` [Qemu-devel] [PATCH V6 11/29] qapi event: convert STOP Wenchao Xia
2014-06-13 20:29 ` Eric Blake
2014-06-17 9:17 ` Paolo Bonzini
2014-06-17 13:18 ` Eric Blake
2014-06-05 12:22 ` [Qemu-devel] [PATCH V6 12/29] qapi event: convert RESUME Wenchao Xia
2014-06-13 20:33 ` Eric Blake
2014-06-05 12:22 ` [Qemu-devel] [PATCH V6 13/29] qapi event: convert SUSPEND Wenchao Xia
2014-06-13 20:40 ` Eric Blake
2014-06-05 12:22 ` [Qemu-devel] [PATCH V6 14/29] qapi event: convert SUSPEND_DISK Wenchao Xia
2014-06-13 20:42 ` Eric Blake
2014-06-05 12:22 ` [Qemu-devel] [PATCH V6 15/29] qapi event: convert WAKEUP Wenchao Xia
2014-06-13 20:57 ` Eric Blake
2014-06-05 12:22 ` [Qemu-devel] [PATCH V6 16/29] qapi event: convert RTC_CHANGE Wenchao Xia
2014-06-13 21:27 ` Eric Blake [this message]
2014-06-15 0:38 ` Wenchao Xia
2014-06-15 14:01 ` Paolo Bonzini
2014-06-15 14:00 ` Paolo Bonzini
2014-06-17 9:21 ` Paolo Bonzini
2014-06-17 13:19 ` Eric Blake
2014-06-05 12:22 ` [Qemu-devel] [PATCH V6 17/29] qapi event: convert WATCHDOG Wenchao Xia
2014-06-13 21:47 ` Eric Blake
2014-06-13 22:05 ` Eric Blake
2014-06-15 0:45 ` Wenchao Xia
2014-06-17 9:23 ` Paolo Bonzini
2014-06-17 13:21 ` Eric Blake
2014-06-05 12:22 ` [Qemu-devel] [PATCH V6 18/29] qapi event: convert DEVICE_DELETED Wenchao Xia
2014-06-05 12:22 ` [Qemu-devel] [PATCH V6 19/29] qapi event: convert DEVICE_TRAY_MOVED Wenchao Xia
2014-06-05 12:22 ` [Qemu-devel] [PATCH V6 20/29] qapi event: convert BLOCK_IO_ERROR and BLOCK_JOB_ERROR Wenchao Xia
2014-06-05 12:22 ` [Qemu-devel] [PATCH V6 21/29] qapi event: convert BLOCK_IMAGE_CORRUPTED Wenchao Xia
2014-06-16 22:53 ` Eric Blake
2014-06-05 12:22 ` [Qemu-devel] [PATCH V6 22/29] qapi event: convert other BLOCK_JOB events Wenchao Xia
2014-06-16 22:57 ` Eric Blake
2014-06-05 12:22 ` [Qemu-devel] [PATCH V6 23/29] qapi event: convert NIC_RX_FILTER_CHANGED Wenchao Xia
2014-06-05 12:22 ` [Qemu-devel] [PATCH V6 24/29] qapi event: convert VNC events Wenchao Xia
2014-06-16 23:01 ` Eric Blake
2014-06-05 12:22 ` [Qemu-devel] [PATCH V6 25/29] qapi event: convert SPICE events Wenchao Xia
2014-06-16 23:05 ` Eric Blake
2014-06-05 12:22 ` [Qemu-devel] [PATCH V6 26/29] qapi event: convert BALLOON_CHANGE Wenchao Xia
2014-06-05 12:22 ` [Qemu-devel] [PATCH V6 27/29] qapi event: convert GUEST_PANICKED Wenchao Xia
2014-06-16 14:08 ` Eric Blake
2014-06-05 12:22 ` [Qemu-devel] [PATCH V6 28/29] qapi event: convert QUORUM events Wenchao Xia
2014-06-05 12:22 ` [Qemu-devel] [PATCH V6 29/29] qapi event: clean up Wenchao Xia
2014-06-16 14:09 ` Eric Blake
2014-06-10 5:48 ` [Qemu-devel] [PATCH V6 00/29] add direct support of event in qapi schema Paolo Bonzini
2014-06-15 0:52 ` Wenchao Xia
2014-06-17 10:57 ` Paolo Bonzini
2014-06-17 16:05 ` Eric Blake
2014-06-17 16:30 ` Paolo Bonzini
2014-06-17 22:10 ` Wenchao Xia
2014-06-18 4:00 ` Eric Blake
2014-06-18 6:07 ` Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=539B6CD3.90905@redhat.com \
--to=eblake@redhat.com \
--cc=armbru@redhat.com \
--cc=lcapitulino@redhat.com \
--cc=mdroth@linux.vnet.ibm.com \
--cc=qemu-devel@nongnu.org \
--cc=wenchaoqemu@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.