Hello, These patches rework the way ports are announced to the guests. A control message is used to let the guest know a new port is added. Initial port discovery and port hot-plug work via this way now.
This was done to have the host and guest port numbering in sync to avoid surprises after several hotplug/unplug operations and migrations. The ability to assign a particular port number to ports is also added so that management software can control the placement of ports. Differences from v3: - Add iov.[ch] and move memcpy_to_iovec from virtio-balloon.c and two fill_iov implementations from virtio-net.c and virtio-serial-bus.c there. - New fix for not sending data to port if host connection is not open - Rearranged patches: migration fixes first, some trivial ones next, followed by fixes and scatter/gather handling last. - Plug a console port at id 0 only if an id is not supplied by user - Let user know if a port or device failed to initialise on the guest - Add QMP events to let mgmt know port or device addition in the guest failed. Overall: - Users can set the port id they wish to instantiate ports at by using the ,nr= parameter to 'virtserialport' and 'virtconsole' devices - Migration fixes: refuse migration when: - number of active ports is different between the src and destination - max_nr_ports a device can support on the src is more - If a qemu chardev connection to a port is closed on the dest while it was open on the src, inform the guest about this. (Also do the same for port closed on src but open on dest.) - Use control messages for relaying new port information instead of config space (changes abi) - Propagate error message from guest in instantiating a port or a device to the user as well as mgmt via QMP messages. - Handle scatter/gather for control output and data output from the guest Amit Shah (15): virtio-serial: save/load: Ensure target has enough ports virtio-serial: save/load: Ensure nr_ports on src and dest are same. virtio-serial: save/load: Ensure we have hot-plugged ports instantiated virtio-serial: save/load: Send target host connection status if different virtio-serial: Use control messages to notify guest of new ports virtio-serial: whitespace: match surrounding code virtio-serial: Remove redundant check for 0-sized write request virtio-serial: Update copyright year to 2010 virtio-serial: Propagate errors in initialising ports / devices in guest virtio-serial: Add QMP events for failed port/device add virtio-serial: Send out guest data to ports only if port is opened iov: Introduce a new file for helpers around iovs, add iov_from_buf() iov: Add iov_to_buf and iov_size helpers virtio-serial: Handle scatter-gather buffers for control messages virtio-serial: Handle scatter/gather input from the guest Makefile.objs | 1 + QMP/qmp-events.txt | 48 +++++++++ hw/iov.c | 70 ++++++++++++ hw/iov.h | 19 ++++ hw/virtio-balloon.c | 35 +------ hw/virtio-console.c | 4 +- hw/virtio-net.c | 20 +--- hw/virtio-serial-bus.c | 277 +++++++++++++++++++++++++++++++++++++----------- hw/virtio-serial.h | 19 ++-- monitor.c | 3 + monitor.h | 1 + 11 files changed, 380 insertions(+), 117 deletions(-) create mode 100644 hw/iov.c create mode 100644 hw/iov.h