145 lines
4.8 KiB
Diff
145 lines
4.8 KiB
Diff
From 8dadc3183e8e75e47b5f5e39823b9eaf950cf4fe Mon Sep 17 00:00:00 2001
|
|
From: Laurent Vivier <lvivier@redhat.com>
|
|
Date: Thu, 25 Feb 2021 23:14:34 -0500
|
|
Subject: [PATCH 37/54] failover: should_be_hidden() should take a bool
|
|
|
|
RH-Author: Laurent Vivier <lvivier@redhat.com>
|
|
Message-id: <20210225231447.2187738-15-lvivier@redhat.com>
|
|
Patchwork-id: 101241
|
|
O-Subject: [RHEL-AV-8.4.0 qemu-kvm PATCH v2 14/27] failover: should_be_hidden() should take a bool
|
|
Bugzilla: 1819991
|
|
RH-Acked-by: Juan Quintela <quintela@redhat.com>
|
|
RH-Acked-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
|
|
RH-Acked-by: Jens Freimann <jfreimann@redhat.com>
|
|
RH-Acked-by: Michael S. Tsirkin <mst@redhat.com>
|
|
|
|
From: Juan Quintela <quintela@redhat.com>
|
|
|
|
BZ: https://bugzilla.redhat.com/1819991
|
|
BRANCH: rhel-av-8.4.0
|
|
UPSTREAM: Merged
|
|
|
|
We didn't use at all the -1 value, and we don't really care. It was
|
|
only used for the cases when this is not the device that we are
|
|
searching for. And in that case we should not hide the device.
|
|
|
|
Once there, simplify virtio-Snet_primary_should_be_hidden.
|
|
|
|
Signed-off-by: Juan Quintela <quintela@redhat.com>
|
|
Message-Id: <20201118083748.1328-16-quintela@redhat.com>
|
|
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
|
|
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
|
|
(cherry picked from commit 89631fed27bd76b0292d8b2a78291ea96185c87d)
|
|
Signed-off-by: Laurent Vivier <lvivier@redhat.com>
|
|
Signed-off-by: Danilo C. L. de Paula <ddepaula@redhat.com>
|
|
---
|
|
hw/core/qdev.c | 19 +++++--------------
|
|
hw/net/virtio-net.c | 27 +++++++--------------------
|
|
include/hw/qdev-core.h | 2 +-
|
|
3 files changed, 13 insertions(+), 35 deletions(-)
|
|
|
|
diff --git a/hw/core/qdev.c b/hw/core/qdev.c
|
|
index 262bca716f..8f4b8f3cc1 100644
|
|
--- a/hw/core/qdev.c
|
|
+++ b/hw/core/qdev.c
|
|
@@ -214,26 +214,17 @@ void device_listener_unregister(DeviceListener *listener)
|
|
|
|
bool qdev_should_hide_device(QemuOpts *opts)
|
|
{
|
|
- int rc = -1;
|
|
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;
|
|
+ if (listener->should_be_hidden) {
|
|
+ if (listener->should_be_hidden(listener, opts)) {
|
|
+ return true;
|
|
+ }
|
|
}
|
|
}
|
|
|
|
- return rc > 0;
|
|
+ return false;
|
|
}
|
|
|
|
void qdev_set_legacy_instance_id(DeviceState *dev, int alias_id,
|
|
diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c
|
|
index 881907d1bd..9f12d33da0 100644
|
|
--- a/hw/net/virtio-net.c
|
|
+++ b/hw/net/virtio-net.c
|
|
@@ -3161,24 +3161,19 @@ static void virtio_net_migration_state_notifier(Notifier *notifier, void *data)
|
|
virtio_net_handle_migration_primary(n, s);
|
|
}
|
|
|
|
-static int virtio_net_primary_should_be_hidden(DeviceListener *listener,
|
|
- QemuOpts *device_opts)
|
|
+static bool virtio_net_primary_should_be_hidden(DeviceListener *listener,
|
|
+ QemuOpts *device_opts)
|
|
{
|
|
VirtIONet *n = container_of(listener, VirtIONet, primary_listener);
|
|
- bool match_found = false;
|
|
- bool hide = false;
|
|
+ bool hide;
|
|
const char *standby_id;
|
|
|
|
if (!device_opts) {
|
|
- return -1;
|
|
+ return false;
|
|
}
|
|
standby_id = qemu_opt_get(device_opts, "failover_pair_id");
|
|
- if (g_strcmp0(standby_id, n->netclient_name) == 0) {
|
|
- match_found = true;
|
|
- } else {
|
|
- match_found = false;
|
|
- hide = false;
|
|
- goto out;
|
|
+ if (g_strcmp0(standby_id, n->netclient_name) != 0) {
|
|
+ return false;
|
|
}
|
|
|
|
/* failover_primary_hidden is set during feature negotiation */
|
|
@@ -3188,15 +3183,7 @@ static int virtio_net_primary_should_be_hidden(DeviceListener *listener,
|
|
if (!n->primary_device_id) {
|
|
warn_report("primary_device_id not set");
|
|
}
|
|
-
|
|
-out:
|
|
- if (match_found && hide) {
|
|
- return 1;
|
|
- } else if (match_found && !hide) {
|
|
- return 0;
|
|
- } else {
|
|
- return -1;
|
|
- }
|
|
+ return hide;
|
|
}
|
|
|
|
static void virtio_net_device_realize(DeviceState *dev, Error **errp)
|
|
diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
|
|
index 5e737195b5..250f4edef6 100644
|
|
--- a/include/hw/qdev-core.h
|
|
+++ b/include/hw/qdev-core.h
|
|
@@ -200,7 +200,7 @@ struct DeviceListener {
|
|
* 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);
|
|
+ bool (*should_be_hidden)(DeviceListener *listener, QemuOpts *device_opts);
|
|
QTAILQ_ENTRY(DeviceListener) link;
|
|
};
|
|
|
|
--
|
|
2.27.0
|
|
|