qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Wenchao Xia <wenchaoqemu@gmail.com>
To: Eric Blake <eblake@redhat.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: Sun, 15 Jun 2014 08:38:28 +0800	[thread overview]
Message-ID: <539CEB04.9030307@gmail.com> (raw)
In-Reply-To: <539B6CD3.90905@redhat.com>

于 2014/6/14 5:27, Eric Blake 写道:
> 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.
>

   Fixing it.

>> +++ 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,...
>

   Oops, good catch, will fix it.

>> +    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
>

  reply	other threads:[~2014-06-15  0:38 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
2014-06-15  0:38     ` Wenchao Xia [this message]
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=539CEB04.9030307@gmail.com \
    --to=wenchaoqemu@gmail.com \
    --cc=armbru@redhat.com \
    --cc=eblake@redhat.com \
    --cc=lcapitulino@redhat.com \
    --cc=mdroth@linux.vnet.ibm.com \
    --cc=qemu-devel@nongnu.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).