This is implementing the host side of the net_failover concept
(https://www.kernel.org/doc/html/latest/networking/net_failover.html)
Changes since v3:
* Patch 1, make return values of qdev_should_hide_device() more clear
* Patch 1, clarify comment about new should_be_hidden DeviceListener
* Patch 2 new patch, add net_failover_option_id to PCIDevice, only
allow PCIExpress devices for now
* Patch 8, only go into wait_unplug state when failover devices are present
* Patch 8, add new state to migration_is_setup_or_active, tested cancelling
while migration is in this state
* Patch 8, simplify handling of wait_unplug state, don't cancel migration after
timeout, let upper layer do this, get rid of retry counter (dgilbert)
* Patch 11, move net_failover_pair_id to PCIDev, move check for pci class
to PCI code, only allow PCIe devices for now as we only support
hotplugging these devices (aw)
* verified qemu make check tests ran, checked that docker-test-quick@centos7 runs
successful, tested migration with/without failover, without vfio-pci
* this now allows only PCIe devices because that's the only hotplug
controller that supports the partial unplug as of now. I'll work on
making it discoverable for libvirt or on support for the
other hotplug controllers in a follow-on patch set
The general idea is that we have a pair of devices, a vfio-pci and a
virtio-net device. Before migration the vfio device is unplugged and data
flows to the virtio-net device, on the target side another vfio-pci device
is plugged in to take over the data-path. In the guest the net_failover
module will pair net devices with the same MAC address.
* Patch 1 adds the infrastructure to hide the device for the qbus and qdev APIs
* Patch 2 adds checks to PCIDevice for only allowing ethernet devices as
failover primary and only PCIExpress capable devices
* Patch 3 sets a new flag for PCIDevice 'partially_hotplugged' which we
use to skip the unrealize code path when doing a unplug of the primary
device
* Patch 4 sets the pending_deleted_event before triggering the guest
unplug request
* Patch 5 and 6 add new qmp events, one sends the device id of a device
that was just requested to be unplugged from the guest and another one
to let libvirt know if VIRTIO_NET_F_STANDBY was negotiated
* Patch 7 make sure that we can unplug the vfio-device before
migration starts
* Patch 8 adds a new migration state that is entered while we wait for
devices to be unplugged by guest OS
* Patch 9 just adds the new migration state to a check in libqos code
* Patch 10 In the second patch the virtio-net uses the API to defer adding the vfio
device until the VIRTIO_NET_F_STANDBY feature is acked. It also
implements the migration handler to unplug the device from the guest and
re-plug in case of migration failure
* Patch 11 allows migration for failover vfio-pci devices
Previous discussion:
RFC v1 https://patchwork.ozlabs.org/cover/989098/
RFC v2 https://www.mail-archive.com/qemu-devel@nongnu.org/msg606906.html
v1: https://lists.gnu.org/archive/html/qemu-devel/2019-05/msg03968.html
v2: https://www.mail-archive.com/qemu-devel@nongnu.org/msg635214.html
v3: https://patchew.org/QEMU/20191011112015.11785-1-jfreimann@redhat.com/
To summarize concerns/feedback from previous discussion:
1.- guest OS can reject or worse _delay_ unplug by any amount of time.
Migration might get stuck for unpredictable time with unclear reason.
This approach combines two tricky things, hot/unplug and migration.
-> We need to let libvirt know what's happening. Add new qmp events
and a new migration state. When a primary device is (partially)
unplugged (only from guest) we send a qmp event with the device id. When
it is unplugged from the guest the DEVICE_DELETED event is sent.
Migration will enter the wait-unplug state while waiting for the guest
os to unplug all primary devices and then move on with migration.
2. PCI devices are a precious ressource. The primary device should never
be added to QEMU if it won't be used by guest instead of hiding it in
QEMU.
-> We only hotplug the device when the standby feature bit was
negotiated. We save the device cmdline options until we need it for
qdev_device_add()
Hiding a device can be a useful concept to model. For example a
pci device in a powered-off slot could be marked as hidden until the slot is
powered on (mst).
3. Management layer software should handle this. Open Stack already has
components/code to handle unplug/replug VFIO devices and metadata to
provide to the guest for detecting which devices should be paired.
-> An approach that includes all software from firmware to
higher-level management software wasn't tried in the last years. This is
an attempt to keep it simple and contained in QEMU as much as possible.
One of the problems that stopped management software and libvirt from
implementing this idea is that it can't be sure that it's possible to
re-plug the primary device. By not freeing the devices resources in QEMU
and only asking the guest OS to unplug it is possible to re-plug the
device in case of a migration failure.
4. Hotplugging a device and then making it part of a failover setup is
not possible
-> addressed by extending qdev hotplug functions to check for hidden
attribute, so e.g. device_add can be used to plug a device.
I have tested this with a mlx5 and igb NIC and was able to migrate the VM.
Command line example:
qemu-system-x86_64 -enable-kvm -m 3072 -smp 3 \
-machine q35,kernel-irqchip=split -cpu host \
-serial stdio \
-net none \
-qmp unix:/tmp/qmp.socket,server,nowait \
-monitor telnet:127.0.0.1:5555,server,nowait \
-device pcie-root-port,id=root0,multifunction=on,chassis=0,addr=0xa \
-device pcie-root-port,id=root1,bus=pcie.0,chassis=1 \
-device pcie-root-port,id=root2,bus=pcie.0,chassis=2 \
-netdev tap,script=/root/bin/bridge.sh,downscript=no,id=hostnet1,vhost=on \
-device virtio-net-pci,netdev=hostnet1,id=net1,mac=52:54:00:6f:55:cc,bus=root2,failover=on \
-device vfio-pci,host=5e:00.2,id=hostdev0,bus=root1,net_failover_pair_id =net1 \
/root/rhel-guest-image-8.0-1781.x86_64.qcow2
I'm grateful for any remarks or ideas!
Thanks!
regards,
Jens
Jens Freimann (10):
qdev/qbus: add hidden device support
pci: mark devices partially unplugged
pci: mark device having guest unplug request pending
qapi: add unplug primary event
qapi: add failover negotiated event
migration: allow unplug during migration for failover devices
migration: add new migration state wait-unplug
libqos: tolerate wait-unplug migration state
net/virtio: add failover support
vfio: unplug failover primary device before migration
hw/core/qdev.c | 20 +++
hw/net/virtio-net.c | 267 +++++++++++++++++++++++++++++++++
hw/pci/pci.c | 2 +
hw/pci/pcie.c | 6 +
hw/vfio/pci.c | 35 ++++-
hw/vfio/pci.h | 2 +
include/hw/pci/pci.h | 1 +
include/hw/qdev-core.h | 10 ++
include/hw/virtio/virtio-net.h | 12 ++
include/hw/virtio/virtio.h | 1 +
include/migration/vmstate.h | 2 +
migration/migration.c | 34 +++++
migration/migration.h | 3 +
migration/savevm.c | 36 +++++
migration/savevm.h | 1 +
qapi/migration.json | 24 ++-
qapi/net.json | 16 ++
qdev-monitor.c | 43 +++++-
tests/libqos/libqos.c | 3 +-
vl.c | 6 +-
20 files changed, 515 insertions(+), 9 deletions(-)
--
2.21.0
*** BLURB HERE ***
Jens Freimann (11):
qdev/qbus: add hidden device support
pci: add option for net failover
pci: mark devices partially unplugged
pci: mark device having guest unplug request pending
qapi: add unplug primary event
qapi: add failover negotiated event
migration: allow unplug during migration for failover devices
migration: add new migration state wait-unplug
libqos: tolerate wait-unplug migration state
net/virtio: add failover support
vfio: unplug failover primary device before migration
hw/core/qdev.c | 24 +++
hw/net/virtio-net.c | 282 +++++++++++++++++++++++++++++++++
hw/pci/pci.c | 17 ++
hw/pci/pcie.c | 6 +
hw/vfio/pci.c | 26 ++-
hw/vfio/pci.h | 1 +
include/hw/pci/pci.h | 4 +
include/hw/qdev-core.h | 9 ++
include/hw/virtio/virtio-net.h | 12 ++
include/hw/virtio/virtio.h | 1 +
include/migration/vmstate.h | 2 +
migration/migration.c | 22 +++
migration/migration.h | 3 +
migration/savevm.c | 36 +++++
migration/savevm.h | 1 +
qapi/migration.json | 24 ++-
qapi/net.json | 16 ++
qdev-monitor.c | 38 ++++-
tests/libqos/libqos.c | 3 +-
vl.c | 6 +-
20 files changed, 519 insertions(+), 14 deletions(-)
--
2.21.0
Jens Freimann (11):
qdev/qbus: add hidden device support
pci: add option for net failover
pci: mark devices partially unplugged
pci: mark device having guest unplug request pending
qapi: add unplug primary event
qapi: add failover negotiated event
migration: allow unplug during migration for failover devices
migration: add new migration state wait-unplug
libqos: tolerate wait-unplug migration state
net/virtio: add failover support
vfio: unplug failover primary device before migration
hw/core/qdev.c | 24 +++
hw/net/virtio-net.c | 282 +++++++++++++++++++++++++++++++++
hw/pci/pci.c | 17 ++
hw/pci/pcie.c | 6 +
hw/vfio/pci.c | 26 ++-
hw/vfio/pci.h | 1 +
include/hw/pci/pci.h | 4 +
include/hw/qdev-core.h | 9 ++
include/hw/virtio/virtio-net.h | 12 ++
include/hw/virtio/virtio.h | 1 +
include/migration/vmstate.h | 2 +
migration/migration.c | 21 +++
migration/migration.h | 3 +
migration/savevm.c | 36 +++++
migration/savevm.h | 2 +
qapi/migration.json | 24 ++-
qapi/net.json | 16 ++
qdev-monitor.c | 38 ++++-
tests/libqos/libqos.c | 3 +-
vl.c | 6 +-
20 files changed, 519 insertions(+), 14 deletions(-)
--
2.21.0
Jens Freimann (11):
qdev/qbus: add hidden device support
pci: add option for net failover
pci: mark devices partially unplugged
pci: mark device having guest unplug request pending
qapi: add unplug primary event
qapi: add failover negotiated event
migration: allow unplug during migration for failover devices
migration: add new migration state wait-unplug
libqos: tolerate wait-unplug migration state
net/virtio: add failover support
vfio: unplug failover primary device before migration
hw/core/qdev.c | 24 +++
hw/net/virtio-net.c | 282 +++++++++++++++++++++++++++++++++
hw/pci/pci.c | 17 ++
hw/pci/pcie.c | 6 +
hw/vfio/pci.c | 31 +++-
hw/vfio/pci.h | 1 +
include/hw/pci/pci.h | 4 +
include/hw/qdev-core.h | 9 ++
include/hw/virtio/virtio-net.h | 12 ++
include/hw/virtio/virtio.h | 1 +
include/migration/vmstate.h | 2 +
migration/migration.c | 21 +++
migration/migration.h | 3 +
migration/savevm.c | 36 +++++
migration/savevm.h | 2 +
qapi/migration.json | 24 ++-
qapi/net.json | 16 ++
qdev-monitor.c | 38 ++++-
tests/libqos/libqos.c | 3 +-
vl.c | 6 +-
20 files changed, 524 insertions(+), 14 deletions(-)
--
2.21.0
This adds support for hiding a device to the qbus and qdev APIs. The
first user of this will be the virtio-net failover feature but the API
introduced with this patch could be used to implement other features as
well, for example hiding pci devices when a pci bus is powered off.
qdev_device_add() is modified to check for a net_failover_pair_id
argument in the option string. A DeviceListener callback
should_be_hidden() is added. It can be used by a standby device to
inform qdev that this device should not be added now. The standby device
handler can store the device options to plug the device in at a later
point in time.
One reason for hiding the device is that we don't want to expose both
devices to the guest kernel until the respective virtio feature bit
VIRTIO_NET_F_STANDBY was negotiated and we know that the devices will be
handled correctly by the guest.
More information on the kernel feature this is using:
https://www.kernel.org/doc/html/latest/networking/net_failover.html
An example where the primary device is a vfio-pci device and the standby
device is a virtio-net device:
A device is hidden when it has an "net_failover_pair_id" option, e.g.
-device virtio-net-pci,...,failover=on,...
-device vfio-pci,...,net_failover_pair_id=net1,...
Signed-off-by: Jens Freimann <jfreimann@redhat.com>
---
hw/core/qdev.c | 23 +++++++++++++++++++++++include/hw/qdev-core.h | 8 ++++++++qdev-monitor.c | 36 +++++++++++++++++++++++++++++++++---vl.c | 6 ++++--
4 files changed, 68 insertions(+), 5 deletions(-)
diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index cbad6c1d55..89c134ec53 100644
--- a/hw/core/qdev.c+++ b/hw/core/qdev.c
@@ -212,6 +212,29 @@ void device_listener_unregister(DeviceListener *listener)
QTAILQ_REMOVE(&device_listeners, listener, link);
}
+bool qdev_should_hide_device(QemuOpts *opts)+{+ int rc;+ DeviceListener *listener;++ QTAILQ_FOREACH(listener, &device_listeners, link) {+ if (listener->should_be_hidden) {+ /* should_be_hidden_will return+ * 1 if device matches opts and it should be hidden+ * 0 if device matches opts and should not be hidden+ * -1 if device doesn't match ops+ */+ rc = listener->should_be_hidden(listener, opts);+ }++ if (rc > 0) {+ break;+ }+ }++ return rc > 0;+}+void qdev_set_legacy_instance_id(DeviceState *dev, int alias_id,
int required_for_version)
{
diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
index aa123f88cb..28f594a47d 100644
--- a/include/hw/qdev-core.h+++ b/include/hw/qdev-core.h
@@ -154,6 +154,12 @@ struct DeviceState {
struct DeviceListener {
void (*realize)(DeviceListener *listener, DeviceState *dev);
void (*unrealize)(DeviceListener *listener, DeviceState *dev);
+ /*+ * This callback is called upon init of the DeviceState and allows to+ * inform qdev that a device should be hidden, depending on the device+ * opts, for example, to hide a standby device.+ */+ int (*should_be_hidden)(DeviceListener *listener, QemuOpts *device_opts); QTAILQ_ENTRY(DeviceListener) link;
};
@@ -451,4 +457,6 @@ static inline bool qbus_is_hotpluggable(BusState *bus)
void device_listener_register(DeviceListener *listener);
void device_listener_unregister(DeviceListener *listener);
+bool qdev_should_hide_device(QemuOpts *opts);+#endif
diff --git a/qdev-monitor.c b/qdev-monitor.c
index 148df9cacf..508d85df87 100644
--- a/qdev-monitor.c+++ b/qdev-monitor.c
@@ -32,9 +32,11 @@
#include "qemu/help_option.h"
#include "qemu/option.h"
#include "qemu/qemu-print.h"
+#include "qemu/option_int.h"#include "sysemu/block-backend.h"
#include "sysemu/sysemu.h"
#include "migration/misc.h"
+#include "migration/migration.h"/*
* Aliases were a bad idea from the start. Let's keep them
@@ -562,14 +564,40 @@ void qdev_set_id(DeviceState *dev, const char *id)
}
}
+static int is_failover_device(void *opaque, const char *name, const char *value,+ Error **errp)+{+ if (strcmp(name, "net_failover_pair_id") == 0) {+ QemuOpts *opts = (QemuOpts *)opaque;++ if (qdev_should_hide_device(opts)) {+ return 1;+ }+ }++ return 0;+}++static bool should_hide_device(QemuOpts *opts)+{+ if (qemu_opt_foreach(opts, is_failover_device, opts, NULL) == 0) {+ return false;+ }+ return true;+}+DeviceState *qdev_device_add(QemuOpts *opts, Error **errp)
{
DeviceClass *dc;
const char *driver, *path;
- DeviceState *dev;+ DeviceState *dev = NULL; BusState *bus = NULL;
Error *err = NULL;
+ if (opts && should_hide_device(opts)) {+ return NULL;+ }+ driver = qemu_opt_get(opts, "driver");
if (!driver) {
error_setg(errp, QERR_MISSING_PARAMETER, "driver");
@@ -648,8 +676,10 @@ DeviceState *qdev_device_add(QemuOpts *opts, Error **errp)
err_del_dev:
error_propagate(errp, err);
- object_unparent(OBJECT(dev));- object_unref(OBJECT(dev));+ if (dev) {+ object_unparent(OBJECT(dev));+ object_unref(OBJECT(dev));+ } return NULL;
}
diff --git a/vl.c b/vl.c
index 4489cfb2bb..62c388cb49 100644
--- a/vl.c+++ b/vl.c
@@ -2204,10 +2204,12 @@ static int device_init_func(void *opaque, QemuOpts *opts, Error **errp)
DeviceState *dev;
dev = qdev_device_add(opts, errp);
- if (!dev) {+ if (!dev && *errp) {+ error_report_err(*errp); return -1;
+ } else if (dev) {+ object_unref(OBJECT(dev)); }
- object_unref(OBJECT(dev)); return 0;
}
--
2.21.0
[PATCH 08/11] migration: add new migration state wait-unplug
This event is emitted when we sent a request to unplug a
failover primary device from the Guest OS and it includes the
device id of the primary device.
Signed-off-by: Jens Freimann <jfreimann@redhat.com>
---
qapi/migration.json | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/qapi/migration.json b/qapi/migration.json
index 82feb5bd39..52e69e2868 100644
--- a/qapi/migration.json+++ b/qapi/migration.json
@@ -1448,3 +1448,22 @@
# Since: 3.0
##
{ 'command': 'migrate-pause', 'allow-oob': true }
++##+# @UNPLUG_PRIMARY:+#+# Emitted from source side of a migration when migration state is+# WAIT_UNPLUG. Device was unplugged by guest operating system.+# Device resources in QEMU are kept on standby to be able to re-plug it in case+# of migration failure.+#+# @device_id: QEMU device id of the unplugged device+#+# Since: 4.2+#+# Example:+# {"event": "UNPLUG_PRIMARY", "data": {"device_id": "hostdev0"} }+#+##+{ 'event': 'UNPLUG_PRIMARY',+ 'data': { 'device_id': 'str' } }
--
2.21.0
[PATCH 03/11] pci: mark devices partially unplugged
This event is sent to let libvirt know that VIRTIO_NET_F_STANDBY
feature was not negotiated during virtio feature negotiation. If this
event is received it means any primary devices hotplugged before
this were were never really added to QEMU devices.
Signed-off-by: Jens Freimann <jfreimann@redhat.com>
---
qapi/net.json | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/qapi/net.json b/qapi/net.json
index 728990f4fb..8c5f3f1fb2 100644
--- a/qapi/net.json+++ b/qapi/net.json
@@ -737,3 +737,19 @@
##
{ 'command': 'announce-self', 'boxed': true,
'data' : 'AnnounceParameters'}
++##+# @FAILOVER_NEGOTIATED:+#+# Emitted when VIRTIO_NET_F_STANDBY was negotiated during feature negotiation+#+# Since: 4.2+#+# Example:+#+# <- { "event": "FAILOVER_NEGOTIATED",+# "data": {} }+#+##+{ 'event': 'FAILOVER_NEGOTIATED',+ 'data': {} }
--
2.21.0
[PATCH 04/11] pci: mark device having guest unplug request pending
In "b06424de62 migration: Disable hotplug/unplug during migration" we
added a check to disable unplug for all devices until we have figured
out what works. For failover primary devices qdev_unplug() is called
from the migration handler, i.e. during migration.
This patch adds a flag to DeviceState which is set to false for all
devices and makes an exception for vfio-pci devices that are also
primary devices in a failover pair.
Signed-off-by: Jens Freimann <jfreimann@redhat.com>
---
hw/core/qdev.c | 1 +include/hw/qdev-core.h | 1 +qdev-monitor.c | 2 +-
3 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index 89c134ec53..b1be568af3 100644
--- a/hw/core/qdev.c+++ b/hw/core/qdev.c
@@ -995,6 +995,7 @@ static void device_initfn(Object *obj)
dev->instance_id_alias = -1;
dev->realized = false;
+ dev->allow_unplug_during_migration = false; object_property_add_bool(obj, "realized",
device_get_realized, device_set_realized, NULL);
diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
index 28f594a47d..6b690e85b1 100644
--- a/include/hw/qdev-core.h+++ b/include/hw/qdev-core.h
@@ -143,6 +143,7 @@ struct DeviceState {
bool pending_deleted_event;
QemuOpts *opts;
int hotplugged;
+ bool allow_unplug_during_migration; BusState *parent_bus;
QLIST_HEAD(, NamedGPIOList) gpios;
QLIST_HEAD(, BusState) child_bus;
diff --git a/qdev-monitor.c b/qdev-monitor.c
index 508d85df87..265ab4f0d5 100644
--- a/qdev-monitor.c+++ b/qdev-monitor.c
@@ -848,7 +848,7 @@ void qdev_unplug(DeviceState *dev, Error **errp)
return;
}
- if (!migration_is_idle()) {+ if (!migration_is_idle() && !dev->allow_unplug_during_migration) { error_setg(errp, "device_del not allowed while migrating");
return;
}
--
2.21.0
On 10/18/19 3:20 PM, Jens Freimann wrote:
> This event is emitted when we sent a request to unplug a> failover primary device from the Guest OS and it includes the> device id of the primary device.> > Signed-off-by: Jens Freimann <jfreimann@redhat.com>> ---> qapi/migration.json | 19 +++++++++++++++++++> 1 file changed, 19 insertions(+)> > diff --git a/qapi/migration.json b/qapi/migration.json> index 82feb5bd39..52e69e2868 100644> --- a/qapi/migration.json> +++ b/qapi/migration.json> @@ -1448,3 +1448,22 @@> # Since: 3.0> ##> { 'command': 'migrate-pause', 'allow-oob': true }> +> +##> +# @UNPLUG_PRIMARY:> +#> +# Emitted from source side of a migration when migration state is> +# WAIT_UNPLUG. Device was unplugged by guest operating system.> +# Device resources in QEMU are kept on standby to be able to re-plug it in case> +# of migration failure.> +#> +# @device_id: QEMU device id of the unplugged device> +#> +# Since: 4.2> +#> +# Example:> +# {"event": "UNPLUG_PRIMARY", "data": {"device_id": "hostdev0"} }
Unless there is a strong reason in favor of 'device_id' (such as
consistency with a similar event), our naming convention prefers this to
be 'device-id'.
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org
Patchew URL: https://patchew.org/QEMU/20191018202040.30349-1-jfreimann@redhat.com/
Hi,
This series failed the docker-quick@centos7 build test. Please find the testing commands and
their output below. If you have Docker installed, you can probably reproduce it
locally.
=== TEST SCRIPT BEGIN ===
#!/bin/bash
make docker-image-centos7 V=1 NETWORK=1
time make docker-test-quick@centos7 SHOW_ENV=1 J=14 NETWORK=1
=== TEST SCRIPT END ===
CC hw/core/or-irq.o
CC hw/core/split-irq.o
/tmp/qemu-test/src/hw/core/qdev.c: In function 'qdev_should_hide_device':
/tmp/qemu-test/src/hw/core/qdev.c:235:5: error: 'rc' may be used uninitialized in this function [-Werror=maybe-uninitialized]
return rc > 0;
^
cc1: all warnings being treated as errors
make: *** [hw/core/qdev.o] Error 1
make: *** Waiting for unfinished jobs....
Traceback (most recent call last):
File "./tests/docker/docker.py", line 662, in <module>
---
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['sudo', '-n', 'docker', 'run', '--label', 'com.qemu.instance.uuid=45df366e5eaf45f6ac429142fe2cc309', '-u', '1001', '--security-opt', 'seccomp=unconfined', '--rm', '-e', 'TARGET_LIST=', '-e', 'EXTRA_CONFIGURE_OPTS=', '-e', 'V=', '-e', 'J=14', '-e', 'DEBUG=', '-e', 'SHOW_ENV=1', '-e', 'CCACHE_DIR=/var/tmp/ccache', '-v', '/home/patchew/.cache/qemu-docker-ccache:/var/tmp/ccache:z', '-v', '/var/tmp/patchew-tester-tmp-ozx9dk_0/src/docker-src.2019-10-19-11.10.07.7972:/var/tmp/qemu:z,ro', 'qemu:centos7', '/var/tmp/qemu/run', 'test-quick']' returned non-zero exit status 2.
filter=--filter=label=com.qemu.instance.uuid=45df366e5eaf45f6ac429142fe2cc309
make[1]: *** [docker-run] Error 1
make[1]: Leaving directory `/var/tmp/patchew-tester-tmp-ozx9dk_0/src'
make: *** [docker-run-test-quick@centos7] Error 2
real 2m19.619s
user 0m8.409s
The full log is available at
http://patchew.org/logs/20191018202040.30349-1-jfreimann@redhat.com/testing.docker-quick@centos7/?type=message.
---
Email generated automatically by Patchew [https://patchew.org/].
Please send your feedback to patchew-devel@redhat.com
Patchew URL: https://patchew.org/QEMU/20191018202040.30349-1-jfreimann@redhat.com/
Hi,
This series failed the docker-mingw@fedora build test. Please find the testing commands and
their output below. If you have Docker installed, you can probably reproduce it
locally.
=== TEST SCRIPT BEGIN ===
#! /bin/bash
export ARCH=x86_64
make docker-image-fedora V=1 NETWORK=1
time make docker-test-mingw@fedora J=14 NETWORK=1
=== TEST SCRIPT END ===
CC hw/core/platform-bus.o
CC hw/core/generic-loader.o
/tmp/qemu-test/src/hw/core/qdev.c: In function 'qdev_should_hide_device':
/tmp/qemu-test/src/hw/core/qdev.c:235:15: error: 'rc' may be used uninitialized in this function [-Werror=maybe-uninitialized]
return rc > 0;
~~~^~~
cc1: all warnings being treated as errors
make: *** [/tmp/qemu-test/src/rules.mak:69: hw/core/qdev.o] Error 1
make: *** Waiting for unfinished jobs....
Traceback (most recent call last):
File "./tests/docker/docker.py", line 662, in <module>
---
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['sudo', '-n', 'docker', 'run', '--label', 'com.qemu.instance.uuid=1d57bd92e38c4da3a26a7b0d378b562e', '-u', '1001', '--security-opt', 'seccomp=unconfined', '--rm', '-e', 'TARGET_LIST=', '-e', 'EXTRA_CONFIGURE_OPTS=', '-e', 'V=', '-e', 'J=14', '-e', 'DEBUG=', '-e', 'SHOW_ENV=', '-e', 'CCACHE_DIR=/var/tmp/ccache', '-v', '/home/patchew/.cache/qemu-docker-ccache:/var/tmp/ccache:z', '-v', '/var/tmp/patchew-tester-tmp-ggapjx1d/src/docker-src.2019-10-19-11.13.01.17849:/var/tmp/qemu:z,ro', 'qemu:fedora', '/var/tmp/qemu/run', 'test-mingw']' returned non-zero exit status 2.
filter=--filter=label=com.qemu.instance.uuid=1d57bd92e38c4da3a26a7b0d378b562e
make[1]: *** [docker-run] Error 1
make[1]: Leaving directory `/var/tmp/patchew-tester-tmp-ggapjx1d/src'
make: *** [docker-run-test-mingw@fedora] Error 2
real 2m33.496s
user 0m8.171s
The full log is available at
http://patchew.org/logs/20191018202040.30349-1-jfreimann@redhat.com/testing.docker-mingw@fedora/?type=message.
---
Email generated automatically by Patchew [https://patchew.org/].
Please send your feedback to patchew-devel@redhat.com