Hello community,

here is the log from the commit of package libvirt for openSUSE:Factory checked 
in at 2020-03-25 23:43:29
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libvirt (Old)
 and      /work/SRC/openSUSE:Factory/.libvirt.new.3160 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libvirt"

Wed Mar 25 23:43:29 2020 rev:302 rq:787956 version:6.1.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/libvirt/libvirt.changes  2020-03-12 
22:58:42.307000272 +0100
+++ /work/SRC/openSUSE:Factory/.libvirt.new.3160/libvirt.changes        
2020-03-25 23:43:41.612001396 +0100
@@ -1,0 +2,21 @@
+Thu Mar 19 22:59:45 UTC 2020 - James Fehlig <[email protected]>
+
+- libxl: Bump minimum supported Xen version to 4.9, allowing use
+  of newer libxl APIs for retrieving memory statistics
+  suse-bump-xen-version.patch
+  bsc#1157490, bsc#1167007
+
+-------------------------------------------------------------------
+Tue Mar 17 19:50:01 UTC 2020 - James Fehlig <[email protected]>
+
+- qemu: Create multipath targets for PRs
+  a30078cb-qemu-create-mp-target.patch,
+  aeb909bf-qemu-multipath-fix.patch
+  bsc#1161883
+
+-------------------------------------------------------------------
+Mon Mar 16 08:42:10 UTC 2020 - Guillaume GARDET <[email protected]>
+
+- Xen is not built for armv7 anymore, so do not use it for armv7
+
+-------------------------------------------------------------------

New:
----
  a30078cb-qemu-create-mp-target.patch
  aeb909bf-qemu-multipath-fix.patch
  suse-bump-xen-version.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libvirt.spec ++++++
--- /var/tmp/diff_new_pack.QJQKWT/_old  2020-03-25 23:43:42.756001770 +0100
+++ /var/tmp/diff_new_pack.QJQKWT/_new  2020-03-25 23:43:42.756001770 +0100
@@ -59,8 +59,8 @@
 
 # Set the OS / architecture specific special cases
 
-# Xen is available only on x86_64, armv7 and aarch64
-%ifnarch x86_64 armv7hl aarch64
+# Xen is available only on x86_64 and aarch64
+%ifnarch x86_64 aarch64
     %define with_libxl     0
 %endif
 
@@ -338,6 +338,8 @@
 Source99:       baselibs.conf
 Source100:      %{name}-rpmlintrc
 # Upstream patches
+Patch0:         a30078cb-qemu-create-mp-target.patch
+Patch1:         aeb909bf-qemu-multipath-fix.patch
 # Patches pending upstream review
 Patch100:       libxl-dom-reset.patch
 Patch101:       network-don-t-use-dhcp-authoritative-on-static-netwo.patch
@@ -365,6 +367,7 @@
 Patch212:       lxc-wait-after-eth-del.patch
 Patch213:       suse-libxl-disable-autoballoon.patch
 Patch214:       suse-xen-ovmf-loaders.patch
+Patch215:       suse-bump-xen-version.patch
 # SLES-Only patches
 %if ! 0%{?is_opensuse}
 Patch400:       virt-create-rootfs.patch
@@ -871,6 +874,8 @@
 
 %prep
 %setup -q
+%patch0 -p1
+%patch1 -p1
 %patch100 -p1
 %patch101 -p1
 %patch150 -p1
@@ -895,6 +900,7 @@
 %patch212 -p1
 %patch213 -p1
 %patch214 -p1
+%patch215 -p1
 %if ! 0%{?is_opensuse}
 %patch400 -p1
 %endif

++++++ a30078cb-qemu-create-mp-target.patch ++++++
commit a30078cb832646177defd256e77c632905f1e6d0
Author: Michal Prívozník <[email protected]>
Date:   Wed Nov 13 15:34:50 2019 +0100

    qemu: Create multipath targets for PRs
    
    If a disk has persistent reservations enabled, qemu-pr-helper
    might open not only /dev/mapper/control but also individual
    targets of the multipath device. We are already querying for them
    in CGroups, but now we have to create them in the namespace too.
    This was brought up in [1].
    
    1: https://bugzilla.redhat.com/show_bug.cgi?id=1711045#c61
    
    Signed-off-by: Michal Privoznik <[email protected]>
    Tested-by: Lin Ma <[email protected]>
    Reviewed-by: Jim Fehlig <[email protected]>

Index: libvirt-6.1.0/src/qemu/qemu_domain.c
===================================================================
--- libvirt-6.1.0.orig/src/qemu/qemu_domain.c
+++ libvirt-6.1.0/src/qemu/qemu_domain.c
@@ -62,6 +62,7 @@
 #include "virdomaincheckpointobjlist.h"
 #include "backup_conf.h"
 #include "virutil.h"
+#include "virdevmapper.h"
 
 #ifdef __linux__
 # include <sys/sysmacros.h>
@@ -14495,6 +14496,9 @@ qemuDomainSetupDisk(virQEMUDriverConfigP
     bool hasNVMe = false;
 
     for (next = disk->src; virStorageSourceIsBacking(next); next = 
next->backingStore) {
+        VIR_AUTOSTRINGLIST targetPaths = NULL;
+        size_t i;
+
         if (next->type == VIR_STORAGE_TYPE_NVME) {
             g_autofree char *nvmePath = NULL;
 
@@ -14513,6 +14517,19 @@ qemuDomainSetupDisk(virQEMUDriverConfigP
 
             if (qemuDomainCreateDevice(next->path, data, false) < 0)
                 return -1;
+
+            if (virDevMapperGetTargets(next->path, &targetPaths) < 0 &&
+                errno != ENOSYS && errno != EBADF) {
+                virReportSystemError(errno,
+                                     _("Unable to get devmapper targets for 
%s"),
+                                     next->path);
+                return -1;
+            }
+
+            for (i = 0; targetPaths && targetPaths[i]; i++) {
+                if (qemuDomainCreateDevice(targetPaths[i], data, false) < 0)
+                    return -1;
+            }
         }
     }
 
@@ -15528,21 +15545,19 @@ qemuDomainNamespaceSetupDisk(virDomainOb
                              virStorageSourcePtr src)
 {
     virStorageSourcePtr next;
-    char **paths = NULL;
+    VIR_AUTOSTRINGLIST paths = NULL;
     size_t npaths = 0;
     bool hasNVMe = false;
-    g_autofree char *dmPath = NULL;
-    g_autofree char *vfioPath = NULL;
-    int ret = -1;
 
     for (next = src; virStorageSourceIsBacking(next); next = 
next->backingStore) {
+        VIR_AUTOSTRINGLIST targetPaths = NULL;
         g_autofree char *tmpPath = NULL;
 
         if (next->type == VIR_STORAGE_TYPE_NVME) {
             hasNVMe = true;
 
             if (!(tmpPath = 
virPCIDeviceAddressGetIOMMUGroupDev(&next->nvme->pciAddr)))
-                goto cleanup;
+                return -1;
         } else {
             if (virStorageSourceIsEmpty(next) ||
                 !virStorageSourceIsLocalStorage(next)) {
@@ -15553,30 +15568,35 @@ qemuDomainNamespaceSetupDisk(virDomainOb
             tmpPath = g_strdup(next->path);
         }
 
-        if (VIR_APPEND_ELEMENT(paths, npaths, tmpPath) < 0)
-            goto cleanup;
+        if (virStringListAdd(&paths, tmpPath) < 0)
+            return -1;
+
+        if (virDevMapperGetTargets(next->path, &targetPaths) < 0 &&
+            errno != ENOSYS && errno != EBADF) {
+            virReportSystemError(errno,
+                                 _("Unable to get devmapper targets for %s"),
+                                 next->path);
+            return -1;
+        }
+
+        if (virStringListMerge(&paths, &targetPaths) < 0)
+            return -1;
     }
 
     /* qemu-pr-helper might require access to /dev/mapper/control. */
-    if (src->pr) {
-        dmPath = g_strdup(QEMU_DEVICE_MAPPER_CONTROL_PATH);
-        if (VIR_APPEND_ELEMENT_COPY(paths, npaths, dmPath) < 0)
-            goto cleanup;
-    }
+    if (src->pr &&
+        virStringListAdd(&paths, QEMU_DEVICE_MAPPER_CONTROL_PATH) < 0)
+        return -1;
 
-    if (hasNVMe) {
-        vfioPath = g_strdup(QEMU_DEV_VFIO);
-        if (VIR_APPEND_ELEMENT(paths, npaths, vfioPath) < 0)
-            goto cleanup;
-    }
+    if (hasNVMe &&
+        virStringListAdd(&paths, QEMU_DEV_VFIO) < 0)
+        return -1;
 
+    npaths = virStringListLength((const char **) paths);
     if (qemuDomainNamespaceMknodPaths(vm, (const char **) paths, npaths) < 0)
-        goto cleanup;
+        return -1;
 
-    ret = 0;
- cleanup:
-    virStringListFreeCount(paths, npaths);
-    return ret;
+    return 0;
 }
 
 
Index: libvirt-6.1.0/src/util/virdevmapper.h
===================================================================
--- libvirt-6.1.0.orig/src/util/virdevmapper.h
+++ libvirt-6.1.0/src/util/virdevmapper.h
@@ -20,6 +20,8 @@
 
 #pragma once
 
+#include "internal.h"
+
 int
 virDevMapperGetTargets(const char *path,
-                       char ***devPaths);
+                       char ***devPaths) G_GNUC_NO_INLINE;
Index: libvirt-6.1.0/src/util/virutil.h
===================================================================
--- libvirt-6.1.0.orig/src/util/virutil.h
+++ libvirt-6.1.0/src/util/virutil.h
@@ -120,7 +120,7 @@ bool virValidateWWN(const char *wwn);
 
 int virGetDeviceID(const char *path,
                    int *maj,
-                   int *min);
+                   int *min) G_GNUC_NO_INLINE;
 int virSetDeviceUnprivSGIO(const char *path,
                            const char *sysfs_dir,
                            int unpriv_sgio);
Index: libvirt-6.1.0/tests/qemuhotplugmock.c
===================================================================
--- libvirt-6.1.0.orig/tests/qemuhotplugmock.c
+++ libvirt-6.1.0/tests/qemuhotplugmock.c
@@ -19,7 +19,24 @@
 #include <config.h>
 
 #include "qemu/qemu_hotplug.h"
+#include "qemu/qemu_process.h"
 #include "conf/domain_conf.h"
+#include "virdevmapper.h"
+#include "virutil.h"
+#include "virmock.h"
+
+static int (*real_virGetDeviceID)(const char *path, int *maj, int *min);
+static bool (*real_virFileExists)(const char *path);
+
+static void
+init_syms(void)
+{
+    if (real_virFileExists)
+        return;
+
+    VIR_MOCK_REAL_INIT(virGetDeviceID);
+    VIR_MOCK_REAL_INIT(virFileExists);
+}
 
 unsigned long long
 qemuDomainGetUnplugTimeout(virDomainObjPtr vm G_GNUC_UNUSED)
@@ -31,3 +48,61 @@ qemuDomainGetUnplugTimeout(virDomainObjP
         return 200;
     return 100;
 }
+
+
+int
+virDevMapperGetTargets(const char *path,
+                       char ***devPaths)
+{
+    *devPaths = NULL;
+
+    if (STREQ(path, "/dev/mapper/virt")) {
+        *devPaths = g_new(char *, 4);
+        (*devPaths)[0] = g_strdup("/dev/block/8:0");  /* /dev/sda */
+        (*devPaths)[1] = g_strdup("/dev/block/8:16"); /* /dev/sdb */
+        (*devPaths)[2] = g_strdup("/dev/block/8:32"); /* /dev/sdc */
+        (*devPaths)[3] = NULL;
+    }
+
+    return 0;
+}
+
+
+int
+virGetDeviceID(const char *path, int *maj, int *min)
+{
+    init_syms();
+
+    if (STREQ(path, "/dev/mapper/virt")) {
+        *maj = 254;
+        *min = 0;
+        return 0;
+    }
+
+    return real_virGetDeviceID(path, maj, min);
+}
+
+
+bool
+virFileExists(const char *path)
+{
+    init_syms();
+
+    if (STREQ(path, "/dev/mapper/virt"))
+        return true;
+
+    return real_virFileExists(path);
+}
+
+
+int
+qemuProcessStartManagedPRDaemon(virDomainObjPtr vm G_GNUC_UNUSED)
+{
+    return 0;
+}
+
+
+void
+qemuProcessKillManagedPRDaemon(virDomainObjPtr vm G_GNUC_UNUSED)
+{
+}
Index: 
libvirt-6.1.0/tests/qemuhotplugtestdevices/qemuhotplug-disk-scsi-multipath.xml
===================================================================
--- /dev/null
+++ 
libvirt-6.1.0/tests/qemuhotplugtestdevices/qemuhotplug-disk-scsi-multipath.xml
@@ -0,0 +1,8 @@
+<disk type='block' device='lun'>
+    <driver name='qemu' type='raw'/>
+    <source dev='/dev/mapper/virt'>
+        <reservations managed='yes'/>
+    </source>
+    <target dev='sda' bus='scsi'/>
+  <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+</disk>
Index: 
libvirt-6.1.0/tests/qemuhotplugtestdomains/qemuhotplug-base-live+disk-scsi-multipath.xml
===================================================================
--- /dev/null
+++ 
libvirt-6.1.0/tests/qemuhotplugtestdomains/qemuhotplug-base-live+disk-scsi-multipath.xml
@@ -0,0 +1,62 @@
+<domain type='kvm' id='7'>
+  <name>hotplug</name>
+  <uuid>d091ea82-29e6-2e34-3005-f02617b36e87</uuid>
+  <memory unit='KiB'>4194304</memory>
+  <currentMemory unit='KiB'>4194304</currentMemory>
+  <vcpu placement='static'>4</vcpu>
+  <os>
+    <type arch='x86_64' machine='pc'>hvm</type>
+    <boot dev='hd'/>
+  </os>
+  <features>
+    <acpi/>
+    <apic/>
+    <pae/>
+  </features>
+  <clock offset='utc'/>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>restart</on_reboot>
+  <on_crash>restart</on_crash>
+  <devices>
+    <emulator>/usr/bin/qemu-system-x86_64</emulator>
+    <disk type='block' device='lun'>
+      <driver name='qemu' type='raw'/>
+      <source dev='/dev/mapper/virt'>
+        <reservations managed='yes'>
+          <source type='unix' path='/tmp/lib/domain-7-hotplug/pr-helper0.sock' 
mode='client'/>
+        </reservations>
+      </source>
+      <backingStore/>
+      <target dev='sda' bus='scsi'/>
+      <alias name='scsi0-0-0-0'/>
+      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+    </disk>
+    <controller type='usb' index='0'>
+      <alias name='usb'/>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' 
function='0x2'/>
+    </controller>
+    <controller type='ide' index='0'>
+      <alias name='ide'/>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' 
function='0x1'/>
+    </controller>
+    <controller type='scsi' index='0' model='virtio-scsi'>
+      <alias name='scsi0'/>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' 
function='0x0'/>
+    </controller>
+    <controller type='pci' index='0' model='pci-root'>
+      <alias name='pci'/>
+    </controller>
+    <controller type='virtio-serial' index='0'>
+      <alias name='virtio-serial0'/>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' 
function='0x0'/>
+    </controller>
+    <input type='mouse' bus='ps2'>
+      <alias name='input0'/>
+    </input>
+    <input type='keyboard' bus='ps2'>
+      <alias name='input1'/>
+    </input>
+    <memballoon model='none'/>
+  </devices>
+  <seclabel type='none' model='none'/>
+</domain>
++++++ aeb909bf-qemu-multipath-fix.patch ++++++
commit aeb909bf9b4c3fa48d017475545df94f7c5d3b3a
Author: Michal Prívozník <[email protected]>
Date:   Thu Mar 19 12:51:55 2020 +0100

    qemu: Don't crash when getting targets for a multipath
    
    In one of my previous commits I've introduced code that creates
    all devices for given (possible) multipath target. But I've made
    a mistake there - the code accesses 'next->path' without checking
    if the disk source is local. Note that the 'next->path' is
    NULL/doesn't make sense for VIR_STORAGE_TYPE_NVME.
    
    Fixes: a30078cb832646177defd256e77c632905f1e6d0
    Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1814947
    
    Signed-off-by: Michal Privoznik <[email protected]>
    Reviewed-by: Peter Krempa <[email protected]>
    Reviewed-by: Ján Tomko <[email protected]>

Index: libvirt-6.1.0/src/qemu/qemu_domain.c
===================================================================
--- libvirt-6.1.0.orig/src/qemu/qemu_domain.c
+++ libvirt-6.1.0/src/qemu/qemu_domain.c
@@ -15550,7 +15550,6 @@ qemuDomainNamespaceSetupDisk(virDomainOb
     bool hasNVMe = false;
 
     for (next = src; virStorageSourceIsBacking(next); next = 
next->backingStore) {
-        VIR_AUTOSTRINGLIST targetPaths = NULL;
         g_autofree char *tmpPath = NULL;
 
         if (next->type == VIR_STORAGE_TYPE_NVME) {
@@ -15559,6 +15558,8 @@ qemuDomainNamespaceSetupDisk(virDomainOb
             if (!(tmpPath = 
virPCIDeviceAddressGetIOMMUGroupDev(&next->nvme->pciAddr)))
                 return -1;
         } else {
+            VIR_AUTOSTRINGLIST targetPaths = NULL;
+
             if (virStorageSourceIsEmpty(next) ||
                 !virStorageSourceIsLocalStorage(next)) {
                 /* Not creating device. Just continue. */
@@ -15566,20 +15567,20 @@ qemuDomainNamespaceSetupDisk(virDomainOb
             }
 
             tmpPath = g_strdup(next->path);
-        }
 
-        if (virStringListAdd(&paths, tmpPath) < 0)
-            return -1;
+            if (virDevMapperGetTargets(next->path, &targetPaths) < 0 &&
+                errno != ENOSYS && errno != EBADF) {
+                virReportSystemError(errno,
+                                     _("Unable to get devmapper targets for 
%s"),
+                                     next->path);
+                return -1;
+            }
 
-        if (virDevMapperGetTargets(next->path, &targetPaths) < 0 &&
-            errno != ENOSYS && errno != EBADF) {
-            virReportSystemError(errno,
-                                 _("Unable to get devmapper targets for %s"),
-                                 next->path);
-            return -1;
+            if (virStringListMerge(&paths, &targetPaths) < 0)
+                return -1;
         }
 
-        if (virStringListMerge(&paths, &targetPaths) < 0)
+        if (virStringListAdd(&paths, tmpPath) < 0)
             return -1;
     }
 

++++++ suse-bump-xen-version.patch ++++++
Bump minimum supported Xen version to 4.9

There were no changes to the libxl API between 4.8 and 4.9, so
the LIBXL_API_VERSION is set to 0x040800.

Note: xen.git commit c3999835df is needed in any Xen package where
this patch is expected to work. It is included in Xen 4.13, but would
need backporting to anything older. The dependency on xen.git commit
c3999835df makes it hard to upstream this patch.

See bsc#1157490 and bsc#1167007 for more details
Index: libvirt-6.1.0/m4/virt-driver-libxl.m4
===================================================================
--- libvirt-6.1.0.orig/m4/virt-driver-libxl.m4
+++ libvirt-6.1.0/m4/virt-driver-libxl.m4
@@ -26,11 +26,11 @@ AC_DEFUN([LIBVIRT_DRIVER_CHECK_LIBXL], [
   LIBXL_CFLAGS=""
   LIBXL_FIRMWARE_DIR=""
   LIBXL_EXECBIN_DIR=""
-  LIBXL_API_VERSION="-DLIBXL_API_VERSION=0x040500"
+  LIBXL_API_VERSION="-DLIBXL_API_VERSION=0x040800"
 
   dnl search for libxl, aka libxenlight
   old_with_libxl="$with_libxl"
-  LIBVIRT_CHECK_PKG([LIBXL], [xenlight], [4.6.0])
+  LIBVIRT_CHECK_PKG([LIBXL], [xenlight], [4.9.0])
   if test "x$with_libxl" = "xyes" ; then
     LIBXL_FIRMWARE_DIR=$($PKG_CONFIG --variable xenfirmwaredir xenlight)
     LIBXL_EXECBIN_DIR=$($PKG_CONFIG --variable libexec_bin xenlight)
Index: libvirt-6.1.0/src/libxl/libxl_conf.c
===================================================================
--- libvirt-6.1.0.orig/src/libxl/libxl_conf.c
+++ libvirt-6.1.0/src/libxl/libxl_conf.c
@@ -1785,7 +1785,7 @@ int
 libxlDriverConfigInit(libxlDriverConfigPtr cfg)
 {
     char ebuf[1024];
-    unsigned int free_mem;
+    uint64_t free_mem;
 
     if (virFileMakePath(cfg->logDir) < 0) {
         virReportError(VIR_ERR_INTERNAL_ERROR,
Index: libvirt-6.1.0/src/libxl/libxl_domain.c
===================================================================
--- libvirt-6.1.0.orig/src/libxl/libxl_domain.c
+++ libvirt-6.1.0/src/libxl/libxl_domain.c
@@ -1006,8 +1006,8 @@ libxlDomainSetVcpuAffinities(libxlDriver
 static int
 libxlDomainFreeMem(libxl_ctx *ctx, libxl_domain_config *d_config)
 {
-    uint32_t needed_mem;
-    uint32_t free_mem;
+    uint64_t needed_mem;
+    uint64_t free_mem;
     int32_t target_mem;
     int tries = 3;
     int wait_secs = 10;
@@ -1401,7 +1401,7 @@ libxlDomainStart(libxlDriverPrivatePtr d
         params.stream_version = restore_ver;
 #endif
         ret = libxl_domain_create_restore(cfg->ctx, &d_config, &domid,
-                                          restore_fd, &params, NULL,
+                                          restore_fd, -1, &params, NULL,
                                           &aop_console_how);
         libxl_domain_restore_params_dispose(&params);
     }
Index: libvirt-6.1.0/tests/libxlmock.c
===================================================================
--- libvirt-6.1.0.orig/tests/libxlmock.c
+++ libvirt-6.1.0/tests/libxlmock.c
@@ -67,7 +67,7 @@ VIR_MOCK_IMPL_RET_ARGS(libxl_get_version
 VIR_MOCK_STUB_RET_ARGS(libxl_get_free_memory,
                        int, 0,
                        libxl_ctx *, ctx,
-                       uint32_t *, memkb);
+                       uint64_t *, memkb);
 
 VIR_MOCK_STUB_RET_ARGS(xc_interface_close,
                        int, 0,

Reply via email to