From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44840) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WsWh5-0005HM-At for qemu-devel@nongnu.org; Thu, 05 Jun 2014 08:23:01 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WsWgz-0000Pz-Ef for qemu-devel@nongnu.org; Thu, 05 Jun 2014 08:22:55 -0400 Received: from mail-pd0-x233.google.com ([2607:f8b0:400e:c02::233]:42549) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WsWgz-0000Pi-4p for qemu-devel@nongnu.org; Thu, 05 Jun 2014 08:22:49 -0400 Received: by mail-pd0-f179.google.com with SMTP id fp1so1023248pdb.10 for ; Thu, 05 Jun 2014 05:22:48 -0700 (PDT) From: Wenchao Xia Date: Thu, 5 Jun 2014 05:21:55 -0700 Message-Id: <1401970944-18735-1-git-send-email-wenchaoqemu@gmail.com> Subject: [Qemu-devel] [PATCH V6 00/29] add direct support of event in qapi schema List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: mdroth@linux.vnet.ibm.com, armbru@redhat.com, Wenchao Xia , lcapitulino@redhat.com This series add support for tag/keyword 'event' in qapi-schema. A new file was created to store some helper functions in patch 2, patch 4 is the test case, patch 5 is a convert example. The implemention is done by generate API and a batch of parameters for each event define, it doesn't generate a struture and visit function in the background for every event, so it doesn't support nested structure in the define to avoid trouble. A callback layer is added to control the behavior. More detail can be found in patch 3's message and incode comments. v2: Address Luiz's comments: patch 3: rename *err to *local_err, do not initialize *qmp = NULL, create a new function qmp_build_evet_dict(). Other change: reorgnized script in patch 3, it have a clear three steps, see patch 3's incode comments. v3: Address Luiz's comments: 2/5: use -1 when fail to get host timestamp. 3/5: typo fix and better incode comments. all unchanged functions are moved into qmp-event.c, from generated file. To do so without include issue, 'int' was used intead of 'enum' in function prototype declaration, since the 'enum' define is a generated type. Address Eric's comments: 2/5: use -1 when fail to get host timestamp. 3/5: typo fix, add docs/qapi-code-gen.txt. 4/5: typo fix, verify no other fields in member 'timestamp'. 5/5: add doc in qapi-schema.json. fix license, all script using GPL2, all C code use LGPL, just as other similar files in upstream. v4: Address Eric's comments: 2/5: typo fix, add copyright declaration, use a static function pointer instead of a struct in C file, assign -1 in two line of codes to avoid issue when tv_sec and tv_usec are not in same data width, fix indention. 3/5: typo fix, add copyright declaration. 4/5: add copyright declaration, simplify string compare with "d->result = g_strcmp0(...) == 0;", add check for tv_usec's range and value. Other: 3/5: all error check code was moved from qapi-event.py to qapi.py, and it reports better message with line number info. Added related test case. Note: Benoit's series which track input file better seems not the final version, so I didn't rebase this series ontop for now, will do it once Benoit's ones get ACKed. v5: Address Eric and Markus's comments: 2/28: use uint64_t for both sec and usec, to avoid type cast issue in printf. Other: Remove RFC, add full coversion by patch 5-28. 3/28: add prefix for event enum type name, to avoid double define of QAPIEvent in test code. v6: Address Eric's comments: 3/29: employ modularization mechnism of schema file of Lluís series, remove error_is_set() usage. 4/29: Makefile change for Lluís series. 5/29: separate patch for refactoring the existing schema defines, improve doc for @service in VncBasicInfo. 7/29-28/29: define and convert event caller one by one. Other change: 6/29: new way to add event emit implemention. In v5 it breaks old event mechnism, in v6 it touch nothing of old event mechnism but add a new set of functions for new event mechnism. 7/29: Add new file qapi-event.json to store event defines, and all type defines goes into qapi-schema.json. 29/29: related clean up change. Note: I have no way to verify target-s390x/kvm.c touched by patch 27/29, and block/quorum.c touched by patch 28/29, need a confirm from whom has the test env. Wenchao Xia (29): 1 os-posix: include sys/time.h 2 qapi: add event helper functions 3 qapi script: add event support 4 test: add test cases for qapi event 5 qapi: adjust existing defines 6 monitor: add an implemention as qapi event emit method 7 qapi: add new schema file qapi-event.json 8 qapi event: convert SHUTDOWN 9 qapi event: convert POWERDOWN 10 qapi event: convert RESET 11 qapi event: convert STOP 12 qapi event: convert RESUME 13 qapi event: convert SUSPEND 14 qapi event: convert SUSPEND_DISK 15 qapi event: convert WAKEUP 16 qapi event: convert RTC_CHANGE 17 qapi event: convert WATCHDOG 18 qapi event: convert DEVICE_DELETED 19 qapi event: convert DEVICE_TRAY_MOVED 20 qapi event: convert BLOCK_IO_ERROR and BLOCK_JOB_ERROR 21 qapi event: convert BLOCK_IMAGE_CORRUPTED 22 qapi event: convert other BLOCK_JOB events 23 qapi event: convert NIC_RX_FILTER_CHANGED 24 qapi event: convert VNC events 25 qapi event: convert SPICE events 26 qapi event: convert BALLOON_CHANGE 27 qapi event: convert GUEST_PANICKED 28 qapi event: convert QUORUM events 29 qapi event: clean up Makefile | 21 +- Makefile.objs | 2 +- balloon.c | 13 - block.c | 68 +--- block/backup.c | 2 +- block/mirror.c | 9 +- block/qcow2-refcount.c | 14 +- block/quorum.c | 25 +- block/stream.c | 4 +- blockdev.c | 12 +- blockjob.c | 53 ++-- cpus.c | 5 +- docs/qapi-code-gen.txt | 18 + docs/qmp/qmp-events.txt | 541 ------------------------------ hmp.c | 5 +- hw/acpi/core.c | 4 +- hw/block/virtio-blk.c | 6 +- hw/core/qdev.c | 12 +- hw/ide/core.c | 6 +- hw/misc/pvpanic.c | 13 +- hw/net/virtio-net.c | 13 +- hw/ppc/spapr_rtas.c | 3 +- hw/scsi/scsi-disk.c | 6 +- hw/timer/mc146818rtc.c | 3 +- hw/virtio/virtio-balloon.c | 6 +- hw/watchdog/watchdog.c | 23 +- include/block/block.h | 4 - include/block/block_int.h | 3 - include/block/blockjob.h | 17 +- include/monitor/monitor.h | 40 --- include/qapi/qmp-event.h | 27 ++ include/qemu/sockets.h | 3 +- include/sysemu/balloon.h | 2 - include/sysemu/os-posix.h | 2 + include/sysemu/sysemu.h | 2 - monitor.c | 185 +++-------- qapi-event.json | 452 +++++++++++++++++++++++++ qapi-schema.json | 178 +++++++++-- qapi/Makefile.objs | 1 + qapi/qmp-event.c | 74 ++++ scripts/qapi-event.py | 369 ++++++++++++++++++++ scripts/qapi.py | 12 + stubs/Makefile.objs | 1 - stubs/mon-protocol-event.c | 6 - target-s390x/kvm.c | 8 +- tests/Makefile | 18 +- tests/qapi-schema/event-nest-struct.err | 1 + tests/qapi-schema/event-nest-struct.exit | 1 + tests/qapi-schema/event-nest-struct.json | 2 + tests/qapi-schema/qapi-schema-test.json | 12 + tests/qapi-schema/qapi-schema-test.out | 10 +- tests/test-qmp-event.c | 265 +++++++++++++++ trace-events | 4 + ui/spice-core.c | 77 +++-- ui/vnc.c | 120 ++++---- ui/vnc.h | 4 +- util/qemu-sockets.c | 10 +- vl.c | 22 +- 58 files changed, 1732 insertions(+), 1087 deletions(-) delete mode 100644 docs/qmp/qmp-events.txt create mode 100644 include/qapi/qmp-event.h create mode 100644 qapi-event.json create mode 100644 qapi/qmp-event.c create mode 100644 scripts/qapi-event.py delete mode 100644 stubs/mon-protocol-event.c create mode 100644 tests/qapi-schema/event-nest-struct.err create mode 100644 tests/qapi-schema/event-nest-struct.exit create mode 100644 tests/qapi-schema/event-nest-struct.json create mode 100644 tests/qapi-schema/event-nest-struct.out create mode 100644 tests/test-qmp-event.c