thebeanogamer / rpms / qemu-kvm

Forked from rpms/qemu-kvm 5 months ago
Clone
0727d3
From 097f72427f4f5da4fdcdbeee52aea0c1f67d54dc Mon Sep 17 00:00:00 2001
0727d3
From: Leonardo Bras <leobras@redhat.com>
0727d3
Date: Tue, 19 Jul 2022 09:23:45 -0300
0727d3
Subject: [PATCH 6/9] migration: Avoid false-positive on non-supported
0727d3
 scenarios for zero-copy-send
0727d3
MIME-Version: 1.0
0727d3
Content-Type: text/plain; charset=UTF-8
0727d3
Content-Transfer-Encoding: 8bit
0727d3
0727d3
RH-Author: Leonardo BrĂ¡s <leobras@redhat.com>
0727d3
RH-MergeRequest: 201: Zero-copy-send fixes + improvements
0727d3
RH-Commit: [6/8] f23195f3ab4f6eba0463f38e5971ccaccdac2cfd
0727d3
RH-Bugzilla: 2110203
0727d3
RH-Acked-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
0727d3
RH-Acked-by: Peter Xu <peterx@redhat.com>
0727d3
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
0727d3
0727d3
Migration with zero-copy-send currently has it's limitations, as it can't
0727d3
be used with TLS nor any kind of compression. In such scenarios, it should
0727d3
output errors during parameter / capability setting.
0727d3
0727d3
But currently there are some ways of setting this not-supported scenarios
0727d3
without printing the error message:
0727d3
0727d3
!) For 'compression' capability, it works by enabling it together with
0727d3
zero-copy-send. This happens because the validity test for zero-copy uses
0727d3
the helper unction migrate_use_compression(), which check for compression
0727d3
presence in s->enabled_capabilities[MIGRATION_CAPABILITY_COMPRESS].
0727d3
0727d3
The point here is: the validity test happens before the capability gets
0727d3
enabled. If all of them get enabled together, this test will not return
0727d3
error.
0727d3
0727d3
In order to fix that, replace migrate_use_compression() by directly testing
0727d3
the cap_list parameter migrate_caps_check().
0727d3
0727d3
2) For features enabled by parameters such as TLS & 'multifd_compression',
0727d3
there was also a possibility of setting non-supported scenarios: setting
0727d3
zero-copy-send first, then setting the unsupported parameter.
0727d3
0727d3
In order to fix that, also add a check for parameters conflicting with
0727d3
zero-copy-send on migrate_params_check().
0727d3
0727d3
3) XBZRLE is also a compression capability, so it makes sense to also add
0727d3
it to the list of capabilities which are not supported with zero-copy-send.
0727d3
0727d3
Fixes: 1abaec9a1b2c ("migration: Change zero_copy_send from migration parameter to migration capability")
0727d3
Signed-off-by: Leonardo Bras <leobras@redhat.com>
0727d3
Message-Id: <20220719122345.253713-1-leobras@redhat.com>
0727d3
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
0727d3
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
0727d3
(cherry picked from commit 90eb69e4f1a16b388d0483543bf6bfc69a9966e4)
0727d3
Signed-off-by: Leonardo Bras <leobras@redhat.com>
0727d3
---
0727d3
 migration/migration.c | 15 ++++++++++++++-
0727d3
 1 file changed, 14 insertions(+), 1 deletion(-)
0727d3
0727d3
diff --git a/migration/migration.c b/migration/migration.c
0727d3
index 952a26c5c2..35b3197eff 100644
0727d3
--- a/migration/migration.c
0727d3
+++ b/migration/migration.c
0727d3
@@ -1260,7 +1260,9 @@ static bool migrate_caps_check(bool *cap_list,
0727d3
 #ifdef CONFIG_LINUX
0727d3
     if (cap_list[MIGRATION_CAPABILITY_ZERO_COPY_SEND] &&
0727d3
         (!cap_list[MIGRATION_CAPABILITY_MULTIFD] ||
0727d3
-         migrate_use_compression() ||
0727d3
+         cap_list[MIGRATION_CAPABILITY_COMPRESS] ||
0727d3
+         cap_list[MIGRATION_CAPABILITY_XBZRLE] ||
0727d3
+         migrate_multifd_compression() ||
0727d3
          migrate_use_tls())) {
0727d3
         error_setg(errp,
0727d3
                    "Zero copy only available for non-compressed non-TLS multifd migration");
0727d3
@@ -1497,6 +1499,17 @@ static bool migrate_params_check(MigrationParameters *params, Error **errp)
0727d3
         error_prepend(errp, "Invalid mapping given for block-bitmap-mapping: ");
0727d3
         return false;
0727d3
     }
0727d3
+
0727d3
+#ifdef CONFIG_LINUX
0727d3
+    if (migrate_use_zero_copy_send() &&
0727d3
+        ((params->has_multifd_compression && params->multifd_compression) ||
0727d3
+         (params->has_tls_creds && params->tls_creds && *params->tls_creds))) {
0727d3
+        error_setg(errp,
0727d3
+                   "Zero copy only available for non-compressed non-TLS multifd migration");
0727d3
+        return false;
0727d3
+    }
0727d3
+#endif
0727d3
+
0727d3
     return true;
0727d3
 }
0727d3
 
0727d3
-- 
0727d3
2.31.1
0727d3