[meta-virtualization] [PATCH] libvirt: uprev from 4.7.0 to 4.9.0
Bruce Ashfield
bruce.ashfield at windriver.com
Thu Nov 29 09:07:52 PST 2018
merged.
Bruce
On 11/28/18 11:17 AM, Mark Asselstine wrote:
> Minor update bringing in new features such as better support for
> cgroup v2, vfio AP support, support for XEN suspend/wakeup.
>
> Basic usecases pass and the ptest return similar results we have been
> achieving with the last few uprevs:
>
> ====================================
> Testsuite summary for libvirt 4.9.0
> ====================================
> # TOTAL: 120
> # PASS: 117
> # SKIP: 0
> # XFAIL: 0
> # FAIL: 3
> # XPASS: 0
> # ERROR: 0
>
> Signed-off-by: Mark Asselstine <mark.asselstine at windriver.com>
> ---
> recipes-extended/libvirt/libvirt-python.inc | 4 +-
> .../lxc_monitor-Avoid-AB-BA-lock-race.patch | 106 ---------------------
> .../libvirt/{libvirt_4.7.0.bb => libvirt_4.9.0.bb} | 5 +-
> 3 files changed, 4 insertions(+), 111 deletions(-)
> delete mode 100644 recipes-extended/libvirt/libvirt/lxc_monitor-Avoid-AB-BA-lock-race.patch
> rename recipes-extended/libvirt/{libvirt_4.7.0.bb => libvirt_4.9.0.bb} (98%)
>
> diff --git a/recipes-extended/libvirt/libvirt-python.inc b/recipes-extended/libvirt/libvirt-python.inc
> index be9079d..ae43ba8 100644
> --- a/recipes-extended/libvirt/libvirt-python.inc
> +++ b/recipes-extended/libvirt/libvirt-python.inc
> @@ -18,8 +18,8 @@ FILES_${PN}-python = "${bindir}/* ${libdir}/* ${libdir}/${PYTHON_DIR}/*"
> SRC_URI += "http://libvirt.org/sources/python/libvirt-python-${PV}.tar.gz;name=libvirt_python"
> SRC_URI += "file://libvirt_api_xml_path.patch;patchdir=../libvirt-python-${PV}"
>
> -SRC_URI[libvirt_python.md5sum] = "32cf281199367aec2881c96d1bd80dc6"
> -SRC_URI[libvirt_python.sha256sum] = "e36fee5898de3550ed7e63d5d0a8447f9d78f06574634855dee59eae27930908"
> +SRC_URI[libvirt_python.md5sum] = "cba7dc90d564aa8c267c38d452b83f80"
> +SRC_URI[libvirt_python.sha256sum] = "01c4becf50b521a9e3d1b48a3a79d83cb389d86d760b895d911d78f5b6ae7b60"
>
> export LIBVIRT_API_PATH = "${S}/docs/libvirt-api.xml"
> export LIBVIRT_CFLAGS = "-I${S}/include"
> diff --git a/recipes-extended/libvirt/libvirt/lxc_monitor-Avoid-AB-BA-lock-race.patch b/recipes-extended/libvirt/libvirt/lxc_monitor-Avoid-AB-BA-lock-race.patch
> deleted file mode 100644
> index fc3880f..0000000
> --- a/recipes-extended/libvirt/libvirt/lxc_monitor-Avoid-AB-BA-lock-race.patch
> +++ /dev/null
> @@ -1,106 +0,0 @@
> -From 7882c6eca53fe9abe253497a50f6c5ae062176d3 Mon Sep 17 00:00:00 2001
> -From: Mark Asselstine <mark.asselstine at windriver.com>
> -Date: Mon, 24 Sep 2018 11:11:35 -0400
> -Subject: [PATCH] lxc_monitor: Avoid AB / BA lock race
> -
> -A deadlock situation can occur when autostarting a LXC domain 'guest'
> -due to two threads attempting to take opposing locks while holding
> -opposing locks (AB BA problem). Thread A takes and holds the 'vm' lock
> -while attempting to take the 'client' lock, meanwhile, thread B takes
> -and holds the 'client' lock while attempting to take the 'vm' lock.
> -
> -The potential for this can be seen as follows:
> -
> -Thread A:
> -virLXCProcessAutostartDomain (takes vm lock)
> - --> virLXCProcessStart
> - --> virLXCProcessConnectMonitor
> - --> virLXCMonitorNew
> - --> virNetClientSetCloseCallback (wants client lock)
> -
> -Thread B:
> -virNetClientIncomingEvent (takes client lock)
> - --> virNetClientIOHandleInput
> - --> virNetClientCallDispatch
> - --> virNetClientCallDispatchMessage
> - --> virNetClientProgramDispatch
> - --> virLXCMonitorHandleEventInit
> - --> virLXCProcessMonitorInitNotify (wants vm lock)
> -
> -Since these threads are scheduled independently and are preemptible it
> -is possible for the deadlock scenario to occur where each thread locks
> -their first lock but both will fail to get their second lock and just
> -spin forever. You get something like:
> -
> -virLXCProcessAutostartDomain (takes vm lock)
> - --> virLXCProcessStart
> - --> virLXCProcessConnectMonitor
> - --> virLXCMonitorNew
> -<...>
> -virNetClientIncomingEvent (takes client lock)
> - --> virNetClientIOHandleInput
> - --> virNetClientCallDispatch
> - --> virNetClientCallDispatchMessage
> - --> virNetClientProgramDispatch
> - --> virLXCMonitorHandleEventInit
> - --> virLXCProcessMonitorInitNotify (wants vm lock but spins)
> -<...>
> - --> virNetClientSetCloseCallback (wants client lock but spins)
> -
> -Neither thread ever gets the lock it needs to be able to continue
> -while holding the lock that the other thread needs.
> -
> -The actual window for preemption which can cause this deadlock is
> -rather small, between the calls to virNetClientProgramNew() and
> -execution of virNetClientSetCloseCallback(), both in
> -virLXCMonitorNew(). But it can be seen in real world use that this
> -small window is enough.
> -
> -By moving the call to virNetClientSetCloseCallback() ahead of
> -virNetClientProgramNew() we can close any possible chance of the
> -deadlock taking place. There should be no other implications to the
> -move since the close callback (in the unlikely event was called) will
> -spin on the vm lock. The remaining work that takes place between the
> -old call location of virNetClientSetCloseCallback() and the new
> -location is unaffected by the move.
> -
> -Upstream-Status: Backport commit 7882c6eca53f
> -
> -Signed-off-by: Mark Asselstine <mark.asselstine at windriver.com>
> -Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> ----
> - src/lxc/lxc_monitor.c | 11 +++++++----
> - 1 file changed, 7 insertions(+), 4 deletions(-)
> -
> -diff --git a/src/lxc/lxc_monitor.c b/src/lxc/lxc_monitor.c
> -index e765c16..0b18a14 100644
> ---- a/src/lxc/lxc_monitor.c
> -+++ b/src/lxc/lxc_monitor.c
> -@@ -161,6 +161,13 @@ virLXCMonitorPtr virLXCMonitorNew(virDomainObjPtr vm,
> - if (virNetClientRegisterAsyncIO(mon->client) < 0)
> - goto error;
> -
> -+ /* avoid deadlock by making this call before assigning virLXCMonitorEvents */
> -+ virNetClientSetCloseCallback(mon->client, virLXCMonitorEOFNotify, mon,
> -+ virLXCMonitorCloseFreeCallback);
> -+
> -+ /* close callback now has its own reference */
> -+ virObjectRef(mon);
> -+
> - if (!(mon->program = virNetClientProgramNew(VIR_LXC_MONITOR_PROGRAM,
> - VIR_LXC_MONITOR_PROGRAM_VERSION,
> - virLXCMonitorEvents,
> -@@ -175,10 +182,6 @@ virLXCMonitorPtr virLXCMonitorNew(virDomainObjPtr vm,
> - mon->vm = virObjectRef(vm);
> - memcpy(&mon->cb, cb, sizeof(mon->cb));
> -
> -- virObjectRef(mon);
> -- virNetClientSetCloseCallback(mon->client, virLXCMonitorEOFNotify, mon,
> -- virLXCMonitorCloseFreeCallback);
> --
> - cleanup:
> - VIR_FREE(sockpath);
> - return mon;
> ---
> -2.7.4
> -
> diff --git a/recipes-extended/libvirt/libvirt_4.7.0.bb b/recipes-extended/libvirt/libvirt_4.9.0.bb
> similarity index 98%
> rename from recipes-extended/libvirt/libvirt_4.7.0.bb
> rename to recipes-extended/libvirt/libvirt_4.9.0.bb
> index 5136798..768cf0e 100644
> --- a/recipes-extended/libvirt/libvirt_4.7.0.bb
> +++ b/recipes-extended/libvirt/libvirt_4.9.0.bb
> @@ -35,11 +35,10 @@ SRC_URI = "http://libvirt.org/sources/libvirt-${PV}.tar.xz;name=libvirt \
> file://install-missing-file.patch \
> file://0001-ptest-Remove-Windows-1252-check-from-esxutilstest.patch \
> file://configure.ac-search-for-rpc-rpc.h-in-the-sysroot.patch \
> - file://lxc_monitor-Avoid-AB-BA-lock-race.patch \
> "
>
> -SRC_URI[libvirt.md5sum] = "38da6c33250dcbc0a6d68de5c758262b"
> -SRC_URI[libvirt.sha256sum] = "92c279f7321624ac5a37a81f8bbe8c8d2a16781da04c63c99c92d3de035767e4"
> +SRC_URI[libvirt.md5sum] = "aaf7b265ac2013d6eb184a86b5f7eeb9"
> +SRC_URI[libvirt.sha256sum] = "4fd4bfe7312b7996a817c7919cf0062de0d5b3c400c93bd30855a46c40dd455a"
>
> inherit autotools gettext update-rc.d pkgconfig ptest systemd
>
>
More information about the meta-virtualization
mailing list