All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: Luiz Capitulino <lcapitulino@redhat.com>,
	Peter Maydell <peter.maydell@linaro.org>
Cc: QEMU Developers <qemu-devel@nongnu.org>,
	Anthony Liguori <anthony@codemonkey.ws>,
	wenchaoqemu@gmail.com
Subject: Re: [Qemu-devel] [PULL for-2.1 00/40] QMP queue
Date: Fri, 20 Jun 2014 21:49:39 +0200	[thread overview]
Message-ID: <53A49053.5080606@redhat.com> (raw)
In-Reply-To: <20140620144422.423ea957@redhat.com>

Il 20/06/2014 20:44, Luiz Capitulino ha scritto:
> On Fri, 20 Jun 2014 19:24:48 +0100
> Peter Maydell <peter.maydell@linaro.org> wrote:
> 
>> On 19 June 2014 20:39, Luiz Capitulino <lcapitulino@redhat.com> wrote:
>>> The following changes since commit 6baa963f4dcc211801608ebe1e0482b51653350c:
>>>
>>>   Merge remote-tracking branch 'remotes/bonzini/scsi-next' into staging (2014-06-19 16:18:04 +0100)
>>>
>>> are available in the git repository at:
>>>
>>>
>>>   git://repo.or.cz/qemu/qmp-unstable.git queue/qmp
>>>
>>> for you to fetch changes up to b98ff90e9459e0113da8502c03670a9539f90aa1:
>>>
>>>   monitor: protect event emission (2014-06-19 15:34:33 -0400)
>>
>> CONFLICT (content): Merge conflict in vl.c
>> CONFLICT (content): Merge conflict in qemu-char.c
>> CONFLICT (content): Merge conflict in qapi-schema.json
>> CONFLICT (content): Merge conflict in monitor.c
>> CONFLICT (content): Merge conflict in include/monitor/monitor.h
>> CONFLICT (content): Merge conflict in hw/core/qdev.c
>> CONFLICT (modify/delete): docs/qmp/qmp-events.txt deleted in
>> remotes/qmp-unstable/queue/qmp and modified in HEAD. Version HEAD of
>> docs/qmp/qmp-events.txt left in tree.

Ugh.

The conflicts are messy because there's many of them, but they're not hard
to fix.  The problem is basically that another event (ACPI_DEVICE_OST)
was added in mst's merge.  All other conflicts are just new include
files or similar.

I pushed to qapi-event the merge commit with the resolution of the 
merge, which is also included below.

I included the two INLINE fixes in the branch because that's what I
compiled.

> Paolo, Wenchao, it's the QAPI event series that doesn't apply anymore. Can
> you please rebase it and post a new version? Could you also:
> 
>  1. Add/keep Reviewed-bys of patches that did not change
>  2. Drop Reviewed-bys of patches that changed
>  3. Add Eric's review suggestions
>  4. Test build all targets

As I explained on IRC, many patches when rebased would have conflicts 
with Igor's new event.  I think this is much more complex than having 
an "extraordinary" merge commit.

I include the conflict resolution:

- hw/acpi/memory-hotplug.c is only present in mst's branch, so I'm
including the diff from there (changing to the QAPI event style)

- qapi-event.json is only present in luiz's branch, so I'm
including the diff from there (adding the ACPI_DEVICE_OST event)

- 
Paolo

a76d72f692ed5f4f30f116cc9c3ac5fefe221cb7
Merge: 0a99aae b98ff90
Author: Paolo Bonzini <pbonzini@redhat.com>
Date:   Fri Jun 20 21:18:08 2014 +0200

    Merge commit b98ff90e9459e0113da8502c03670a9539f90aa1 of git://repo.or.cz/qemu/qmp-unstable into HEAD
    
    Conflicts:
    	docs/qmp/qmp-events.txt [removed with QAPI event conversion]
    	hw/core/qdev.c [trivial header file conflict]
    	include/monitor/monitor.h [QMP event enum removed by QAPI conversion]
    	monitor.c [QMP event enum removed by QAPI conversion]
    	qapi-schema.json [trivial, code added by both sides in the same place]
    	qemu-char.c [trivial, code added by both sides in the same place]
    	vl.c [trivial header file conflict]
    
    Other files changed:
            qapi-event.json [include ACPI_DEVICE_OST event]
            hw/acpi/memory-hotplug.c [use QAPI event]
    
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>

diff --git a/hw/acpi/memory_hotplug.c b/hw/acpi/memory_hotplug.c
index de4ddc2..98d900e 100644
--- a/hw/acpi/memory_hotplug.c
+++ b/hw/acpi/memory_hotplug.c
@@ -4,6 +4,7 @@
 #include "hw/boards.h"
 #include "trace.h"
 #include "qapi-visit.h"
+#include "qapi-event.h"
 #include "monitor/monitor.h"
 #include "qapi/dealloc-visitor.h"
 #include "qapi/qmp-output-visitor.h"
@@ -41,25 +42,18 @@ void acpi_memory_ospm_status(MemHotplugState *mem_st, ACPIOSTInfoList ***list)
 
 static void acpi_memory_ost_mon_event(const MemHotplugState *mem_st)
 {
-    Visitor *v;
-    QObject *out_info;
-    QapiDeallocVisitor *md;
-    QmpOutputVisitor *mo = qmp_output_visitor_new();
     MemStatus *mdev = &mem_st->devs[mem_st->selector];
     ACPIOSTInfo *info = acpi_memory_device_status(mem_st->selector, mdev);
 
-    v = qmp_output_get_visitor(mo);
-    visit_type_ACPIOSTInfo(v, &info, "unused", NULL);
+    /* QAPI event declarations support struct names in the 'data',
+     * field, but we have to list all the fields of ACPIOSTInfo.
+     */
+    qapi_event_send_acpi_device_ost(info->has_device, info->device,
+                                    info->slot, info->slot_type,
+                                    info->source, info->status,
+                                    NULL);
 
-    out_info = qmp_output_get_qobject(mo);
-    monitor_protocol_event(QEVENT_ACPI_OST, out_info);
-    qobject_decref(out_info);
-
-    qmp_output_visitor_cleanup(mo);
-    md = qapi_dealloc_visitor_new();
-    v = qapi_dealloc_get_visitor(md);
-    visit_type_ACPIOSTInfo(v, &info, "unused", NULL);
-    qapi_dealloc_visitor_cleanup(md);
+    qapi_free_ACPIOSTInfo(info);
 }
 
 static uint64_t acpi_memory_hotplug_read(void *opaque, hwaddr addr,




diff --git a/qapi-event.json b/qapi-event.json
index fbdda48..cb63d85 100644
--- a/qapi-event.json
+++ b/qapi-event.json
@@ -304,3 +304,13 @@
 { 'event': 'QUORUM_REPORT_BAD',
   'data': { '*error': 'str', 'node-name': 'str',
             'sector-num': 'int', 'sector-count': 'int' } }
+
+## @ACPI_DEVICE_OST
+#
+# Emitted when the guest executes the ACPI _OST method.
+# For the description of data, see @ACPIOSTInfo.
+#
+# Since: 2.1
+##
+{ 'event': 'ACPI_DEVICE_OST',
+  'data'  : 'ACPIOSTInfo' }



diff --cc monitor.c
index c7f8797,38a64a3..224b32e
--- a/monitor.c
+++ b/monitor.c


diff --cc include/monitor/monitor.h
index 97696ea,3d6929d..3d6929d
--- a/include/monitor/monitor.h
+++ b/include/monitor/monitor.h


diff --cc hw/core/qdev.c
index b9cd4fc,cbe8bdd..d1eba3c
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@@ -32,9 -32,8 +32,9 @@@
  #include "qapi/qmp/qerror.h"
  #include "qapi/visitor.h"
  #include "qapi/qmp/qjson.h"
- #include "monitor/monitor.h"
  #include "hw/hotplug.h"
 +#include "hw/boards.h"
+ #include "qapi-event.h"
  
  int qdev_hotplug = 0;
  static bool qdev_hot_added = false;
diff --cc qapi-schema.json
index 9835004,d62bb7d..cf3e21a
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@@ -3099,190 -3142,53 +3159,242 @@@
                'abs'     : 'InputMoveEvent' } }
  
  ##
 +# @NumaOptions
 +#
 +# A discriminated record of NUMA options. (for OptsVisitor)
 +#
 +# Since 2.1
 +##
 +{ 'union': 'NumaOptions',
 +  'data': {
 +    'node': 'NumaNodeOptions' }}
 +
 +##
 +# @NumaNodeOptions
 +#
 +# Create a guest NUMA node. (for OptsVisitor)
 +#
 +# @nodeid: #optional NUMA node ID (increase by 1 from 0 if omitted)
 +#
 +# @cpus: #optional VCPUs belonging to this node (assign VCPUS round-robin
 +#         if omitted)
 +#
 +# @mem: #optional memory size of this node; mutually exclusive with @memdev.
 +#       Equally divide total memory among nodes if both @mem and @memdev are
 +#       omitted.
 +#
 +# @memdev: #optional memory backend object.  If specified for one node,
 +#          it must be specified for all nodes.
 +#
 +# Since: 2.1
 +##
 +{ 'type': 'NumaNodeOptions',
 +  'data': {
 +   '*nodeid': 'uint16',
 +   '*cpus':   ['uint16'],
 +   '*mem':    'size',
 +   '*memdev': 'str' }}
 +
 +##
 +# @HostMemPolicy
 +#
 +# Host memory policy types
 +#
 +# @default: restore default policy, remove any nondefault policy
 +#
 +# @preferred: set the preferred host nodes for allocation
 +#
 +# @bind: a strict policy that restricts memory allocation to the
 +#        host nodes specified
 +#
 +# @interleave: memory allocations are interleaved across the set
 +#              of host nodes specified
 +#
 +# Since 2.1
 +##
 +{ 'enum': 'HostMemPolicy',
 +  'data': [ 'default', 'preferred', 'bind', 'interleave' ] }
 +
 +##
 +# @Memdev:
 +#
 +# Information of memory device
 +#
 +# @size: memory device size
 +#
 +# @merge: enables or disables memory merge support
 +#
 +# @dump: includes memory device's memory in a core dump or not
 +#
 +# @prealloc: enables or disables memory preallocation
 +#
 +# @host-nodes: host nodes for its memory policy
 +#
 +# @policy: memory policy of memory device
 +#
 +# Since: 2.1
 +##
 +
 +{ 'type': 'Memdev',
 +  'data': {
 +    'size':       'size',
 +    'merge':      'bool',
 +    'dump':       'bool',
 +    'prealloc':   'bool',
 +    'host-nodes': ['uint16'],
 +    'policy':     'HostMemPolicy' }}
 +
 +##
 +# @query-memdev:
 +#
 +# Returns information for all memory devices.
 +#
 +# Returns: a list of @Memdev.
 +#
 +# Since: 2.1
 +##
 +{ 'command': 'query-memdev', 'returns': ['Memdev'] }
 +# @PCDIMMDeviceInfo:
 +#
 +# PCDIMMDevice state information
 +#
 +# @id: #optional device's ID
 +#
 +# @addr: physical address, where device is mapped
 +#
 +# @size: size of memory that the device provides
 +#
 +# @slot: slot number at which device is plugged in
 +#
 +# @node: NUMA node number where device is plugged in
 +#
 +# @memdev: memory backend linked with device
 +#
 +# @hotplugged: true if device was hotplugged
 +#
 +# @hotpluggable: true if device if could be added/removed while machine is running
 +#
 +# Since: 2.1
 +##
 +{ 'type': 'PCDIMMDeviceInfo',
 +  'data': { '*id': 'str',
 +            'addr': 'int',
 +            'size': 'int',
 +            'slot': 'int',
 +            'node': 'int',
 +            'memdev': 'str',
 +            'hotplugged': 'bool',
 +            'hotpluggable': 'bool'
 +          }
 +}
 +
 +##
 +# @MemoryDeviceInfo:
 +#
 +# Union containing information about a memory device
 +#
 +# Since: 2.1
 +##
 +{ 'union': 'MemoryDeviceInfo', 'data': {'dimm': 'PCDIMMDeviceInfo'} }
 +
 +##
 +# @query-memory-devices
 +#
 +# Lists available memory devices and their state
 +#
 +# Since: 2.1
 +##
 +{ 'command': 'query-memory-devices', 'returns': ['MemoryDeviceInfo'] }
 +
 +## @ACPISlotType
 +#
 +# @DIMM: memory slot
 +#
 +{ 'enum': 'ACPISlotType', 'data': [ 'DIMM' ] }
 +
 +## @ACPIOSTInfo
 +#
 +# OSPM Status Indication for a device
 +# For description of possible values of @source and @status fields
 +# see "_OST (OSPM Status Indication)" chapter of ACPI5.0 spec.
 +#
 +# @device: #optional device ID associated with slot
 +#
 +# @slot: slot ID, unique per slot of a given @slot-type
 +#
 +# @slot-type: type of the slot
 +#
 +# @source: an integer containing the source event
 +#
 +# @status: an integer containing the status code
 +#
 +# Since: 2.1
 +##
 +{ 'type': 'ACPIOSTInfo',
 +  'data'  : { '*device': 'str',
 +              'slot': 'str',
 +              'slot-type': 'ACPISlotType',
 +              'source': 'int',
 +              'status': 'int' } }
 +
 +##
 +# @query-acpi-ospm-status
 +#
 +# Lists ACPI OSPM status of ACPI device objects,
 +# which might be reported via _OST method
 +#
 +# Since: 2.1
 +##
 +{ 'command': 'query-acpi-ospm-status', 'returns': ['ACPIOSTInfo'] }
++
++##
+ # @WatchdogExpirationAction
+ #
+ # An enumeration of the actions taken when the watchdog device's timer is
+ # expired
+ #
+ # @reset: system resets
+ #
+ # @shutdown: system shutdown, note that it is similar to @powerdown, which
+ #            tries to set to system status and notify guest
+ #
+ # @poweroff: system poweroff, the emulator program exits
+ #
+ # @pause: system pauses, similar to @stop
+ #
+ # @debug: system enters debug state
+ #
+ # @none: nothing is done
+ #
+ # Since: 2.1
+ ##
+ { 'enum': 'WatchdogExpirationAction',
+   'data': [ 'reset', 'shutdown', 'poweroff', 'pause', 'debug', 'none' ] }
+ 
+ ##
+ # @IoOperationType
+ #
+ # An enumeration of the I/O operation types
+ #
+ # @read: read operation
+ #
+ # @write: write operation
+ #
+ # Since: 2.1
+ ##
+ { 'enum': 'IoOperationType',
+   'data': [ 'read', 'write' ] }
+ 
+ ##
+ # @GuestPanicAction
+ #
+ # An enumeration of the actions taken when guest OS panic is detected
+ #
+ # @pause: system pauses
+ #
+ # Since: 2.1
+ ##
+ { 'enum': 'GuestPanicAction',
+   'data': [ 'pause' ] }
+ 
+ { 'include': 'qapi-event.json' }
diff --cc qemu-char.c
index b3bd3b5,b0f3ff4..16e0a4c
--- a/qemu-char.c
+++ b/qemu-char.c
@@@ -2351,53 -2337,7 +2387,54 @@@ typedef struct 
  
  static gboolean tcp_chr_accept(GIOChannel *chan, GIOCondition cond, void *opaque);
  
 +#ifndef _WIN32
 +static int unix_send_msgfds(CharDriverState *chr, const uint8_t *buf, int len)
 +{
 +    TCPCharDriver *s = chr->opaque;
 +    struct msghdr msgh;
 +    struct iovec iov;
 +    int r;
 +
 +    size_t fd_size = s->write_msgfds_num * sizeof(int);
 +    char control[CMSG_SPACE(fd_size)];
 +    struct cmsghdr *cmsg;
 +
 +    memset(&msgh, 0, sizeof(msgh));
 +    memset(control, 0, sizeof(control));
 +
 +    /* set the payload */
 +    iov.iov_base = (uint8_t *) buf;
 +    iov.iov_len = len;
 +
 +    msgh.msg_iov = &iov;
 +    msgh.msg_iovlen = 1;
 +
 +    msgh.msg_control = control;
 +    msgh.msg_controllen = sizeof(control);
 +
 +    cmsg = CMSG_FIRSTHDR(&msgh);
 +
 +    cmsg->cmsg_len = CMSG_LEN(fd_size);
 +    cmsg->cmsg_level = SOL_SOCKET;
 +    cmsg->cmsg_type = SCM_RIGHTS;
 +    memcpy(CMSG_DATA(cmsg), s->write_msgfds, fd_size);
 +
 +    do {
 +        r = sendmsg(s->fd, &msgh, 0);
 +    } while (r < 0 && errno == EINTR);
 +
 +    /* free the written msgfds, no matter what */
 +    if (s->write_msgfds_num) {
 +        g_free(s->write_msgfds);
 +        s->write_msgfds = 0;
 +        s->write_msgfds_num = 0;
 +    }
 +
 +    return r;
 +}
 +#endif
 +
+ /* Called with chr_write_lock held.  */
  static int tcp_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
  {
      TCPCharDriver *s = chr->opaque;
diff --cc stubs/Makefile.objs
index 997d68d,60de407..3032ec1
--- a/stubs/Makefile.objs
+++ b/stubs/Makefile.objs
@@@ -19,10 -14,7 +19,9 @@@ stub-obj-y += machine-init-done.
  stub-obj-y += migr-blocker.o
  stub-obj-y += mon-is-qmp.o
  stub-obj-y += mon-printf.o
- stub-obj-y += mon-protocol-event.o
  stub-obj-y += mon-set-error.o
 +stub-obj-y += monitor-init.o
 +stub-obj-y += notify-event.o
  stub-obj-y += pci-drive-hot-add.o
  stub-obj-y += qtest.o
  stub-obj-y += reset.o
diff --cc vl.c
index 54b4627,198c77a..c339156
--- a/vl.c
+++ b/vl.c
@@@ -116,7 -116,8 +116,9 @@@ int main(int argc, char **argv
  
  #include "ui/qemu-spice.h"
  #include "qapi/string-input-visitor.h"
 +#include "qapi/opts-visitor.h"
+ #include "qom/object_interfaces.h"
+ #include "qapi-event.h"
  
  #define DEFAULT_RAM_SIZE 128
  

  parent reply	other threads:[~2014-06-20 19:49 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-19 19:39 [Qemu-devel] [PULL for-2.1 00/40] QMP queue Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 01/40] qapi: fix coding style in parameters list Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 02/40] qapi: add const prefix to 'char *' insider c_type() Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 03/40] qapi: Suppress unwanted space between type and identifier Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 04/40] json-lexer: fix escaped backslash in single-quoted string Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 05/40] os-posix: include sys/time.h Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 06/40] qapi: Add includes from qapi/ as dependencies Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 07/40] qapi: add event helper functions Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 08/40] qapi script: add event support Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 09/40] test: add test cases for qapi event Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 10/40] qapi: adjust existing defines Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 11/40] monitor: add an implemention of qapi event emit method Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 12/40] qapi: add new schema file qapi-event.json Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 13/40] qapi event: convert SHUTDOWN Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 14/40] qapi event: convert POWERDOWN Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 15/40] qapi event: convert RESET Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 16/40] qapi event: convert STOP Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 17/40] qapi event: convert RESUME Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 18/40] qapi event: convert SUSPEND Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 19/40] qapi event: convert SUSPEND_DISK Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 20/40] qapi event: convert WAKEUP Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 21/40] qapi event: convert RTC_CHANGE Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 22/40] qapi event: convert WATCHDOG Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 23/40] qapi event: convert DEVICE_DELETED Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 24/40] qapi event: convert DEVICE_TRAY_MOVED Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 25/40] qapi event: convert BLOCK_IO_ERROR and BLOCK_JOB_ERROR Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 26/40] qapi event: convert BLOCK_IMAGE_CORRUPTED Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 27/40] qapi event: convert other BLOCK_JOB events Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 28/40] qapi event: convert NIC_RX_FILTER_CHANGED Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 29/40] qapi event: convert VNC events Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 30/40] qapi event: convert SPICE events Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 31/40] qapi event: convert BALLOON_CHANGE Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 32/40] qapi event: convert GUEST_PANICKED Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 33/40] qapi event: convert QUORUM events Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 34/40] qapi event: clean up Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 35/40] qemu-char: introduce qemu_chr_alloc Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 36/40] qemu-char: do not call chr_write directly Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 37/40] qemu-char: move pty_chr_update_read_handler around Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 38/40] qemu-char: make writes thread-safe Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 39/40] monitor: protect outbuf and mux_out with mutex Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 40/40] monitor: protect event emission Luiz Capitulino
2014-06-20 18:24 ` [Qemu-devel] [PULL for-2.1 00/40] QMP queue Peter Maydell
2014-06-20 18:44   ` Luiz Capitulino
2014-06-20 19:17     ` Paolo Bonzini
2014-06-20 19:49     ` Paolo Bonzini [this message]
2014-06-20 20:02       ` Eric Blake
2014-06-24 13:08         ` Wenchao Xia
2014-06-24 13:20           ` Eric Blake
2014-06-24 13:24             ` Peter Maydell
2014-06-24 14:52               ` Wenchao Xia

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=53A49053.5080606@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=anthony@codemonkey.ws \
    --cc=lcapitulino@redhat.com \
    --cc=peter.maydell@linaro.org \
    --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.