[meta-virtualization] [PATCH] libvirt: uprev from 4.7.0 to 4.9.0

Mark Asselstine mark.asselstine at windriver.com
Wed Nov 28 08:17:32 PST 2018


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
 
-- 
2.7.4



More information about the meta-virtualization mailing list