Patch series available in this git branch:
https://xenbits.xen.org/git-http/people/aperard/xen-unstable.git br.fix-ev_qmp-multi-connect-v3
v3:
Two patches left to review:
- libxl: Introduce libxl__ev_immediate (new)
- libxl_qmp: Have a lock for QMP socket access
And Jürgen already gave his ack on 8th of November:
Release-acked-by: Juergen Gross <jgross@suse.com>
Hi,
QEMU's QMP socket doesn't allow multiple concurrent connection. Also, it
listen() on the socket with a `backlog' of only 1. On Linux at least, once that
backlog is filled connect() will return EAGAIN if the socket fd is
non-blocking. libxl may attempt many concurrent connect() attempt if for
example a guest is started with several PCI passthrough devices, and a
connect() failure lead to a failure to start the guest.
Since we can't change the listen()'s `backlog' that QEMU use, we need other
ways to workaround the issue. This patch series introduce a lock to acquire
before attempting to connect() to the QMP socket. Since the lock might be held
for to long, the series also introduce a way to cancel the acquisition of the
lock, this means killing the process that tries to get the lock.
See thread[1] for discussed alternative.
[1] https://lists.xenproject.org/archives/html/xen-devel/2019-10/msg01815.html
Cheers,
Anthony PERARD (7):
libxl: Introduce libxl__ev_child_kill_deregister
libxl: Move libxl__ev_devlock declaration
libxl: Rename ev_devlock to ev_slowlock
libxl: Introduce libxl__ev_slowlock_dispose
libxl: libxl__ev_qmp_send now takes an egc
libxl: Introduce libxl__ev_immediate
libxl_qmp: Have a lock for QMP socket access
tools/libxl/libxl_disk.c | 16 ++--
tools/libxl/libxl_dm.c | 8 +-
tools/libxl/libxl_dom_save.c | 2 +-
tools/libxl/libxl_dom_suspend.c | 2 +-
tools/libxl/libxl_domain.c | 18 ++--
tools/libxl/libxl_event.c | 25 +++++-
tools/libxl/libxl_fork.c | 48 +++++++++++
tools/libxl/libxl_internal.c | 41 ++++++---
tools/libxl/libxl_internal.h | 147 ++++++++++++++++++++------------
tools/libxl/libxl_pci.c | 8 +-
tools/libxl/libxl_qmp.c | 128 ++++++++++++++++++++-------
tools/libxl/libxl_usb.c | 28 +++---
12 files changed, 336 insertions(+), 135 deletions(-)
--
Anthony PERARD
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel