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. This iteration fixes a few things Juan pointed out. Juan and Gerd have already acked v4 of the patch series, from which it remains largely unchanged. Differences from v4: - Juan: qemu_free() handles NULL fine - Juan: Send ports_map as an array of u32s instead of as a buffer (big/little endian issues) - Juan: iov should be compiled only once (nothing target-specific) - A few fixes from the other submission: discard piled up buffers in the vq after port close or hot-unplug. 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. - Handle scatter/gather for control output and data output from the guest - Fix abuse of virtio api in the virtqueue_push() function - Add an API for the ports for flow control: ports can signal when they're ready to accept data / stop sending data. Amit Shah (17): 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: 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 virtio-serial: Apps should consume all data that guest sends out / Fix virtio api abuse virtio-serial: Discard data that guest sends us when ports aren't connected virtio-serial: Implement flow control for individual ports Makefile | 2 + Makefile.objs | 1 + hw/iov.c | 70 ++++++++++ hw/iov.h | 19 +++ hw/virtio-balloon.c | 35 +----- hw/virtio-console.c | 11 +- hw/virtio-net.c | 20 +--- hw/virtio-serial-bus.c | 333 ++++++++++++++++++++++++++++++++++++------------ hw/virtio-serial.h | 34 ++++-- 9 files changed, 377 insertions(+), 148 deletions(-) create mode 100644 hw/iov.c create mode 100644 hw/iov.h