From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457759845730.6512304977693; Wed, 11 Apr 2018 07:42:39 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 459DA81DE9; Wed, 11 Apr 2018 14:42:37 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 1B6FC67E4A; Wed, 11 Apr 2018 14:42:37 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id CF5FB4CAA4; Wed, 11 Apr 2018 14:42:36 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgDq5008633 for ; Wed, 11 Apr 2018 10:42:13 -0400 Received: by smtp.corp.redhat.com (Postfix) id 47CD910B00A5; Wed, 11 Apr 2018 14:42:13 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 2716E10B00A4 for ; Wed, 11 Apr 2018 14:42:10 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id EB74C100144; Wed, 11 Apr 2018 16:42:09 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:40:51 +0200 Message-Id: <3ea5fc9e9bcc7d85727f196337c3ed35ec0d443f.1523456479.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: MIME-Version: 1.0 Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 01/73] qemu: Rename qemuMigrationAnyCapsGet as qemuMigrationCapsGet X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Wed, 11 Apr 2018 14:42:38 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Signed-off-by: Jiri Denemark Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_driver.c | 4 ++-- src/qemu/qemu_migration.c | 10 +++++----- src/qemu/qemu_migration.h | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 5c31dfdd58..cc431ae045 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -13615,7 +13615,7 @@ qemuDomainMigrateGetCompressionCache(virDomainPtr d= om, =20 priv =3D vm->privateData; =20 - if (!qemuMigrationAnyCapsGet(vm, QEMU_MONITOR_MIGRATION_CAPS_XBZRLE)) { + if (!qemuMigrationCapsGet(vm, QEMU_MONITOR_MIGRATION_CAPS_XBZRLE)) { virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", _("Compressed migration is not supported by " "QEMU binary")); @@ -13666,7 +13666,7 @@ qemuDomainMigrateSetCompressionCache(virDomainPtr d= om, =20 priv =3D vm->privateData; =20 - if (!qemuMigrationAnyCapsGet(vm, QEMU_MONITOR_MIGRATION_CAPS_XBZRLE)) { + if (!qemuMigrationCapsGet(vm, QEMU_MONITOR_MIGRATION_CAPS_XBZRLE)) { virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", _("Compressed migration is not supported by " "QEMU binary")); diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 256b994bd9..3890a29d7e 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -1335,7 +1335,7 @@ qemuMigrationOptionSet(virQEMUDriverPtr driver, qemuDomainObjPrivatePtr priv =3D vm->privateData; int ret; =20 - if (!qemuMigrationAnyCapsGet(vm, capability)) { + if (!qemuMigrationCapsGet(vm, capability)) { if (!state) { /* Unsupported but we want it off anyway */ return 0; @@ -3869,7 +3869,7 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, QEMU_ASYNC_JOB_MIGRATION_OUT) < 0) goto error; =20 - if (qemuMigrationAnyCapsGet(vm, QEMU_MONITOR_MIGRATION_CAPS_PAUSE_BEFO= RE_SWITCHOVER) && + if (qemuMigrationCapsGet(vm, QEMU_MONITOR_MIGRATION_CAPS_PAUSE_BEFORE_= SWITCHOVER) && qemuMigrationOptionSet(driver, vm, QEMU_MONITOR_MIGRATION_CAPS_PAUSE_BEFORE_SW= ITCHOVER, true, QEMU_ASYNC_JOB_MIGRATION_OUT) < 0) @@ -6095,7 +6095,7 @@ qemuMigrationParamsReset(virQEMUDriverPtr driver, goto cleanup; =20 for (cap =3D 0; cap < QEMU_MONITOR_MIGRATION_CAPS_LAST; cap++) { - if (qemuMigrationAnyCapsGet(vm, cap) && + if (qemuMigrationCapsGet(vm, cap) && qemuMigrationOptionSet(driver, vm, cap, false, job) < 0) goto cleanup; } @@ -6160,8 +6160,8 @@ qemuMigrationSrcFetchMirrorStats(virQEMUDriverPtr dri= ver, =20 =20 bool -qemuMigrationAnyCapsGet(virDomainObjPtr vm, - qemuMonitorMigrationCaps cap) +qemuMigrationCapsGet(virDomainObjPtr vm, + qemuMonitorMigrationCaps cap) { qemuDomainObjPrivatePtr priv =3D vm->privateData; bool enabled =3D false; diff --git a/src/qemu/qemu_migration.h b/src/qemu/qemu_migration.h index a075aec124..af96854a73 100644 --- a/src/qemu/qemu_migration.h +++ b/src/qemu/qemu_migration.h @@ -309,7 +309,7 @@ qemuMigrationSrcFetchMirrorStats(virQEMUDriverPtr drive= r, qemuDomainJobInfoPtr jobInfo); =20 bool -qemuMigrationAnyCapsGet(virDomainObjPtr vm, - qemuMonitorMigrationCaps cap); +qemuMigrationCapsGet(virDomainObjPtr vm, + qemuMonitorMigrationCaps cap); =20 #endif /* __QEMU_MIGRATION_H__ */ --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457749348801.4480698115693; Wed, 11 Apr 2018 07:42:29 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 4F416ECF9F; Wed, 11 Apr 2018 14:42:27 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 276B565928; Wed, 11 Apr 2018 14:42:27 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id E626C4CA9E; Wed, 11 Apr 2018 14:42:26 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgD45008631 for ; Wed, 11 Apr 2018 10:42:13 -0400 Received: by smtp.corp.redhat.com (Postfix) id 3B1B3AB3E5; Wed, 11 Apr 2018 14:42:13 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 1ABD2AB3E4 for ; Wed, 11 Apr 2018 14:42:10 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id EDB9F10038F; Wed, 11 Apr 2018 16:42:09 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:40:52 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: MIME-Version: 1.0 Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 02/73] qemu: Rename qemuMigrationParams X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Wed, 11 Apr 2018 14:42:28 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 The function is now called qemuMigrationParamsFromFlags to better reflect what it is doing: taking migration flags and params and producing a struct with QEMU migration parameters. Signed-off-by: Jiri Denemark Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_driver.c | 2 +- src/qemu/qemu_migration.c | 6 +++--- src/qemu/qemu_migration.h | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index cc431ae045..f7ad211077 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -12758,7 +12758,7 @@ qemuDomainMigratePerform3Params(virDomainPtr dom, if (nmigrate_disks < 0) goto cleanup; =20 - if (!(migParams =3D qemuMigrationParams(params, nparams, flags))) + if (!(migParams =3D qemuMigrationParamsFromFlags(params, nparams, flag= s))) goto cleanup; =20 if (!(compression =3D qemuMigrationAnyCompressionParse(params, nparams= , flags))) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 3890a29d7e..a0071cc089 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -2471,9 +2471,9 @@ qemuMigrationParamsSetEmptyTLS(virQEMUDriverPtr drive= r, =20 =20 qemuMonitorMigrationParamsPtr -qemuMigrationParams(virTypedParameterPtr params, - int nparams, - unsigned long flags) +qemuMigrationParamsFromFlags(virTypedParameterPtr params, + int nparams, + unsigned long flags) { qemuMonitorMigrationParamsPtr migParams; =20 diff --git a/src/qemu/qemu_migration.h b/src/qemu/qemu_migration.h index af96854a73..3424404dc4 100644 --- a/src/qemu/qemu_migration.h +++ b/src/qemu/qemu_migration.h @@ -143,9 +143,9 @@ void qemuMigrationParamsFree(qemuMonitorMigrationParamsPtr *migParams); =20 qemuMonitorMigrationParamsPtr -qemuMigrationParams(virTypedParameterPtr params, - int nparams, - unsigned long flags); +qemuMigrationParamsFromFlags(virTypedParameterPtr params, + int nparams, + unsigned long flags); =20 int qemuMigrationSrcSetOffline(virQEMUDriverPtr driver, --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457749129855.3776358684543; Wed, 11 Apr 2018 07:42:29 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 9B758319E1CA; Wed, 11 Apr 2018 14:42:27 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 5BD6C5C542; Wed, 11 Apr 2018 14:42:27 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 206E94CA9D; Wed, 11 Apr 2018 14:42:27 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgBdh008589 for ; Wed, 11 Apr 2018 10:42:11 -0400 Received: by smtp.corp.redhat.com (Postfix) id 677EE215CDC8; Wed, 11 Apr 2018 14:42:11 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id E6585215CDAF for ; Wed, 11 Apr 2018 14:42:10 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id F09531003EE; Wed, 11 Apr 2018 16:42:09 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:40:53 +0200 Message-Id: <87f6fe099f42bd54ef874dd807cb3eed08254f2c.1523456479.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 03/73] qemu: New file for all APIs related to migration parameters X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.49]); Wed, 11 Apr 2018 14:42:28 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" In the end, this will allow us to have most of the logic around migration parameters and capabilities done in one place. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- po/POTFILES.in | 1 + src/qemu/Makefile.inc.am | 2 + src/qemu/qemu_driver.c | 1 + src/qemu/qemu_migration.c | 421 +--------------------------- src/qemu/qemu_migration.h | 24 +- src/qemu/qemu_migration_params.c | 454 +++++++++++++++++++++++++++++++ src/qemu/qemu_migration_params.h | 82 ++++++ src/qemu/qemu_process.c | 1 + 8 files changed, 550 insertions(+), 436 deletions(-) create mode 100644 src/qemu/qemu_migration_params.c create mode 100644 src/qemu/qemu_migration_params.h diff --git a/po/POTFILES.in b/po/POTFILES.in index 0dcd1cab28..be2874487c 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -136,6 +136,7 @@ src/qemu/qemu_hotplug.c src/qemu/qemu_interface.c src/qemu/qemu_migration.c src/qemu/qemu_migration_cookie.c +src/qemu/qemu_migration_params.c src/qemu/qemu_monitor.c src/qemu/qemu_monitor_json.c src/qemu/qemu_monitor_text.c diff --git a/src/qemu/Makefile.inc.am b/src/qemu/Makefile.inc.am index 8ef290a6c1..25706ba4bc 100644 --- a/src/qemu/Makefile.inc.am +++ b/src/qemu/Makefile.inc.am @@ -33,6 +33,8 @@ QEMU_DRIVER_SOURCES =3D \ qemu/qemu_migration.h \ qemu/qemu_migration_cookie.c \ qemu/qemu_migration_cookie.h \ + qemu/qemu_migration_params.c \ + qemu/qemu_migration_params.h \ qemu/qemu_monitor.c \ qemu/qemu_monitor.h \ qemu/qemu_monitor_text.c \ diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index f7ad211077..519bd767c1 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -57,6 +57,7 @@ #include "qemu_monitor.h" #include "qemu_process.h" #include "qemu_migration.h" +#include "qemu_migration_params.h" #include "qemu_blockjob.h" #include "qemu_security.h" =20 diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index a0071cc089..34eb3eb9e5 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -29,6 +29,7 @@ =20 #include "qemu_migration.h" #include "qemu_migration_cookie.h" +#include "qemu_migration_params.h" #include "qemu_monitor.h" #include "qemu_domain.h" #include "qemu_process.h" @@ -81,8 +82,6 @@ VIR_ENUM_IMPL(qemuMigrationCompressMethod, QEMU_MIGRATION= _COMPRESS_LAST, "mt", ); =20 -#define QEMU_MIGRATION_TLS_ALIAS_BASE "libvirt_migrate" - static int qemuMigrationJobStart(virQEMUDriverPtr driver, virDomainObjPtr vm, @@ -115,156 +114,6 @@ qemuMigrationJobFinish(virQEMUDriverPtr driver, virDomainObjPtr obj) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); =20 -/* qemuMigrationParamsCheckTLSCreds - * @driver: pointer to qemu driver - * @vm: domain object - * @asyncJob: migration job to join - * - * Query the migration parameters looking for the 'tls-creds' parameter. - * If found, then we can support setting or clearing the parameters and th= us - * can support TLS for migration. - * - * Returns 0 if we were able to successfully fetch the params and - * additionally if the tls-creds parameter exists, saves it in the - * private domain structure. Returns -1 on failure. - */ -static int -qemuMigrationParamsCheckTLSCreds(virQEMUDriverPtr driver, - virDomainObjPtr vm, - qemuDomainAsyncJob asyncJob) -{ - int ret =3D -1; - qemuDomainObjPrivatePtr priv =3D vm->privateData; - qemuMonitorMigrationParams migParams =3D { 0 }; - - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) - return -1; - - if (qemuMonitorGetMigrationParams(priv->mon, &migParams) < 0) - goto cleanup; - - /* NB: Could steal NULL pointer too! Let caller decide what to do. */ - VIR_STEAL_PTR(priv->migTLSAlias, migParams.tlsCreds); - - ret =3D 0; - - cleanup: - if (qemuDomainObjExitMonitor(driver, vm) < 0) - ret =3D -1; - - qemuMigrationParamsClear(&migParams); - - return ret; -} - - -/* qemuMigrationParamsCheckSetupTLS - * @driver: pointer to qemu driver - * @vm: domain object - * @cfg: configuration pointer - * @asyncJob: migration job to join - * - * Check if TLS is possible and set up the environment. Assumes the caller - * desires to use TLS (e.g. caller found VIR_MIGRATE_TLS flag). - * - * Ensure the qemu.conf has been properly configured to add an entry for - * "migrate_tls_x509_cert_dir". Also check if the "tls-creds" parameter - * was present from a query of migration parameters - * - * Returns 0 on success, -1 on error/failure - */ -static int -qemuMigrationParamsCheckSetupTLS(virQEMUDriverPtr driver, - virQEMUDriverConfigPtr cfg, - virDomainObjPtr vm, - qemuDomainAsyncJob asyncJob) -{ - qemuDomainObjPrivatePtr priv =3D vm->privateData; - - if (!cfg->migrateTLSx509certdir) { - virReportError(VIR_ERR_OPERATION_INVALID, "%s", - _("host migration TLS directory not configured")); - return -1; - } - - if (qemuMigrationParamsCheckTLSCreds(driver, vm, asyncJob) < 0) - return -1; - - if (!priv->migTLSAlias) { - virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", - _("TLS migration is not supported with this " - "QEMU binary")); - return -1; - } - - /* If there's a secret, then grab/store it now using the connection */ - if (cfg->migrateTLSx509secretUUID && - !(priv->migSecinfo =3D - qemuDomainSecretInfoTLSNew(priv, QEMU_MIGRATION_TLS_ALIAS_BASE, - cfg->migrateTLSx509secretUUID))) - return -1; - - return 0; -} - - -/* qemuMigrationParamsAddTLSObjects - * @driver: pointer to qemu driver - * @vm: domain object - * @cfg: configuration pointer - * @tlsListen: server or client - * @asyncJob: Migration job to join - * @tlsAlias: alias to be generated for TLS object - * @secAlias: alias to be generated for a secinfo object - * @migParams: migration parameters to set - * - * Create the TLS objects for the migration and set the migParams value - * - * Returns 0 on success, -1 on failure - */ -static int -qemuMigrationParamsAddTLSObjects(virQEMUDriverPtr driver, - virDomainObjPtr vm, - virQEMUDriverConfigPtr cfg, - bool tlsListen, - qemuDomainAsyncJob asyncJob, - char **tlsAlias, - char **secAlias, - qemuMonitorMigrationParamsPtr migParams) -{ - qemuDomainObjPrivatePtr priv =3D vm->privateData; - virJSONValuePtr tlsProps =3D NULL; - virJSONValuePtr secProps =3D NULL; - - if (qemuDomainGetTLSObjects(priv->qemuCaps, priv->migSecinfo, - cfg->migrateTLSx509certdir, tlsListen, - cfg->migrateTLSx509verify, - QEMU_MIGRATION_TLS_ALIAS_BASE, - &tlsProps, tlsAlias, &secProps, secAlias) = < 0) - goto error; - - /* Ensure the domain doesn't already have the TLS objects defined... - * This should prevent any issues just in case some cleanup wasn't - * properly completed (both src and dst use the same alias) or - * some other error path between now and perform . */ - qemuDomainDelTLSObjects(driver, vm, asyncJob, *secAlias, *tlsAlias); - - if (qemuDomainAddTLSObjects(driver, vm, asyncJob, *secAlias, &secProps, - *tlsAlias, &tlsProps) < 0) - goto error; - - if (VIR_STRDUP(migParams->tlsCreds, *tlsAlias) < 0) - goto error; - - return 0; - - error: - virJSONValueFree(tlsProps); - virJSONValueFree(secProps); - return -1; -} - - static void qemuMigrationSrcStoreDomainState(virDomainObjPtr vm) { @@ -1325,7 +1174,7 @@ qemuMigrationAnyPostcopyFailed(virQEMUDriverPtr drive= r, } =20 =20 -static int +int qemuMigrationOptionSet(virQEMUDriverPtr driver, virDomainObjPtr vm, qemuMonitorMigrationCaps capability, @@ -2363,238 +2212,6 @@ qemuMigrationDstPrepare(virDomainObjPtr vm, return inc; } =20 -static int -qemuMigrationParamsSetCompression(virQEMUDriverPtr driver, - virDomainObjPtr vm, - qemuDomainAsyncJob job, - qemuMigrationCompressionPtr compression, - qemuMonitorMigrationParamsPtr migParams) -{ - int ret =3D -1; - qemuDomainObjPrivatePtr priv =3D vm->privateData; - - if (qemuMigrationOptionSet(driver, vm, - QEMU_MONITOR_MIGRATION_CAPS_XBZRLE, - compression->methods & - (1ULL << QEMU_MIGRATION_COMPRESS_XBZRLE), - job) < 0) - return -1; - - if (qemuMigrationOptionSet(driver, vm, - QEMU_MONITOR_MIGRATION_CAPS_COMPRESS, - compression->methods & - (1ULL << QEMU_MIGRATION_COMPRESS_MT), - job) < 0) - return -1; - - if (qemuDomainObjEnterMonitorAsync(driver, vm, job) < 0) - return -1; - - migParams->compressLevel_set =3D compression->level_set; - migParams->compressLevel =3D compression->level; - - migParams->compressThreads_set =3D compression->threads_set; - migParams->compressThreads =3D compression->threads; - - migParams->decompressThreads_set =3D compression->dthreads_set; - migParams->decompressThreads =3D compression->dthreads; - - if (compression->xbzrle_cache_set && - qemuMonitorSetMigrationCacheSize(priv->mon, - compression->xbzrle_cache) < 0) - goto cleanup; - - ret =3D 0; - - cleanup: - if (qemuDomainObjExitMonitor(driver, vm) < 0) - ret =3D -1; - - return ret; -} - - -void -qemuMigrationParamsClear(qemuMonitorMigrationParamsPtr migParams) -{ - if (!migParams) - return; - - VIR_FREE(migParams->tlsCreds); - VIR_FREE(migParams->tlsHostname); -} - - -void -qemuMigrationParamsFree(qemuMonitorMigrationParamsPtr *migParams) -{ - if (!*migParams) - return; - - qemuMigrationParamsClear(*migParams); - VIR_FREE(*migParams); -} - - -/* qemuMigrationParamsSetEmptyTLS - * @driver: pointer to qemu driver - * @vm: domain object - * @asyncJob: migration job to join - * @migParams: Pointer to a migration parameters block - * - * If we support setting the tls-creds, then set both tls-creds and - * tls-hostname to the empty string ("") which indicates to not use - * TLS on this migration. - * - * Returns 0 on success, -1 on failure - */ -static int -qemuMigrationParamsSetEmptyTLS(virQEMUDriverPtr driver, - virDomainObjPtr vm, - qemuDomainAsyncJob asyncJob, - qemuMonitorMigrationParamsPtr migParams) -{ - qemuDomainObjPrivatePtr priv =3D vm->privateData; - - if (qemuMigrationParamsCheckTLSCreds(driver, vm, asyncJob) < 0) - return -1; - - if (!priv->migTLSAlias) - return 0; - - if (VIR_STRDUP(migParams->tlsCreds, "") < 0 || - VIR_STRDUP(migParams->tlsHostname, "") < 0) - return -1; - - return 0; -} - - -qemuMonitorMigrationParamsPtr -qemuMigrationParamsFromFlags(virTypedParameterPtr params, - int nparams, - unsigned long flags) -{ - qemuMonitorMigrationParamsPtr migParams; - - if (VIR_ALLOC(migParams) < 0) - return NULL; - - if (!params) - return migParams; - -#define GET(PARAM, VAR) \ - do { \ - int rc; \ - if ((rc =3D virTypedParamsGetInt(params, nparams, \ - VIR_MIGRATE_PARAM_ ## PARAM, \ - &migParams->VAR)) < 0) \ - goto error; \ - \ - if (rc =3D=3D 1) \ - migParams->VAR ## _set =3D true; \ - } while (0) - - GET(AUTO_CONVERGE_INITIAL, cpuThrottleInitial); - GET(AUTO_CONVERGE_INCREMENT, cpuThrottleIncrement); - -#undef GET - - if ((migParams->cpuThrottleInitial_set || - migParams->cpuThrottleIncrement_set) && - !(flags & VIR_MIGRATE_AUTO_CONVERGE)) { - virReportError(VIR_ERR_INVALID_ARG, "%s", - _("Turn auto convergence on to tune it")); - goto error; - } - - return migParams; - - error: - qemuMigrationParamsFree(&migParams); - return NULL; -} - - -static int -qemuMigrationParamsSet(virQEMUDriverPtr driver, - virDomainObjPtr vm, - qemuDomainAsyncJob job, - qemuMonitorMigrationParamsPtr migParams) -{ - qemuDomainObjPrivatePtr priv =3D vm->privateData; - int ret =3D -1; - - if (qemuDomainObjEnterMonitorAsync(driver, vm, job) < 0) - return -1; - - if (qemuMonitorSetMigrationParams(priv->mon, migParams) < 0) - goto cleanup; - - ret =3D 0; - - cleanup: - if (qemuDomainObjExitMonitor(driver, vm) < 0) - ret =3D -1; - - return ret; -} - - -/* qemuMigrationParamsResetTLS - * @driver: pointer to qemu driver - * @vm: domain object - * @asyncJob: migration job to join - * - * Deconstruct all the setup possibly done for TLS - delete the TLS and - * security objects, free the secinfo, and reset the migration params to "= ". - * - * Returns 0 on success, -1 on failure - */ -static int -qemuMigrationParamsResetTLS(virQEMUDriverPtr driver, - virDomainObjPtr vm, - qemuDomainAsyncJob asyncJob) -{ - qemuDomainObjPrivatePtr priv =3D vm->privateData; - char *tlsAlias =3D NULL; - char *secAlias =3D NULL; - qemuMonitorMigrationParams migParams =3D { 0 }; - int ret =3D -1; - - if (qemuMigrationParamsCheckTLSCreds(driver, vm, asyncJob) < 0) - return -1; - - /* If the tls-creds doesn't exist or if they're set to "" then there's - * nothing to do since we never set anything up */ - if (!priv->migTLSAlias || !*priv->migTLSAlias) - return 0; - - /* NB: If either or both fail to allocate memory we can still proceed - * since the next time we migrate another deletion attempt will be - * made after successfully generating the aliases. */ - tlsAlias =3D qemuAliasTLSObjFromSrcAlias(QEMU_MIGRATION_TLS_ALIAS_BASE= ); - secAlias =3D qemuDomainGetSecretAESAlias(QEMU_MIGRATION_TLS_ALIAS_BASE= , false); - - qemuDomainDelTLSObjects(driver, vm, asyncJob, secAlias, tlsAlias); - qemuDomainSecretInfoFree(&priv->migSecinfo); - - if (VIR_STRDUP(migParams.tlsCreds, "") < 0 || - VIR_STRDUP(migParams.tlsHostname, "") < 0 || - qemuMigrationParamsSet(driver, vm, asyncJob, &migParams) < 0) - goto cleanup; - - ret =3D 0; - - cleanup: - VIR_FREE(tlsAlias); - VIR_FREE(secAlias); - qemuMigrationParamsClear(&migParams); - - return ret; -} - - static int qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, virConnectPtr dconn, @@ -6074,40 +5691,6 @@ qemuMigrationAnyCompressionDump(qemuMigrationCompres= sionPtr compression, } =20 =20 -/* - * qemuMigrationParamsReset: - * - * Reset all migration parameters so that the next job which internally us= es - * migration (save, managedsave, snapshots, dump) will not try to use them. - */ -void -qemuMigrationParamsReset(virQEMUDriverPtr driver, - virDomainObjPtr vm, - qemuDomainAsyncJob job) -{ - qemuMonitorMigrationCaps cap; - virErrorPtr err =3D virSaveLastError(); - - if (!virDomainObjIsActive(vm)) - goto cleanup; - - if (qemuMigrationParamsResetTLS(driver, vm, job) < 0) - goto cleanup; - - for (cap =3D 0; cap < QEMU_MONITOR_MIGRATION_CAPS_LAST; cap++) { - if (qemuMigrationCapsGet(vm, cap) && - qemuMigrationOptionSet(driver, vm, cap, false, job) < 0) - goto cleanup; - } - - cleanup: - if (err) { - virSetError(err); - virFreeError(err); - } -} - - int qemuMigrationSrcFetchMirrorStats(virQEMUDriverPtr driver, virDomainObjPtr vm, diff --git a/src/qemu/qemu_migration.h b/src/qemu/qemu_migration.h index 3424404dc4..adf788c909 100644 --- a/src/qemu/qemu_migration.h +++ b/src/qemu/qemu_migration.h @@ -34,7 +34,6 @@ * * Exceptions: * - * - qemuMigrationParamsXXX - runs on source or dest host * - qemuMigrationOptionXXX - runs on source or dest host * - qemuMigrationJobXXX - runs on source or dest host */ @@ -136,17 +135,6 @@ qemuMigrationAnyCompressionDump(qemuMigrationCompressi= onPtr compression, int *maxparams, unsigned long *flags); =20 -void -qemuMigrationParamsClear(qemuMonitorMigrationParamsPtr migParams); - -void -qemuMigrationParamsFree(qemuMonitorMigrationParamsPtr *migParams); - -qemuMonitorMigrationParamsPtr -qemuMigrationParamsFromFlags(virTypedParameterPtr params, - int nparams, - unsigned long flags); - int qemuMigrationSrcSetOffline(virQEMUDriverPtr driver, virDomainObjPtr vm); @@ -297,11 +285,6 @@ void qemuMigrationAnyPostcopyFailed(virQEMUDriverPtr driver, virDomainObjPtr vm); =20 -void -qemuMigrationParamsReset(virQEMUDriverPtr driver, - virDomainObjPtr vm, - qemuDomainAsyncJob job); - int qemuMigrationSrcFetchMirrorStats(virQEMUDriverPtr driver, virDomainObjPtr vm, @@ -312,4 +295,11 @@ bool qemuMigrationCapsGet(virDomainObjPtr vm, qemuMonitorMigrationCaps cap); =20 +int +qemuMigrationOptionSet(virQEMUDriverPtr driver, + virDomainObjPtr vm, + qemuMonitorMigrationCaps capability, + bool state, + qemuDomainAsyncJob job); + #endif /* __QEMU_MIGRATION_H__ */ diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c new file mode 100644 index 0000000000..72ecafd057 --- /dev/null +++ b/src/qemu/qemu_migration_params.c @@ -0,0 +1,454 @@ +/* + * qemu_migration_params.c: QEMU migration parameters handling + * + * Copyright (C) 2006-2018 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * . + * + */ + +#include + +#include "virlog.h" +#include "virerror.h" +#include "viralloc.h" +#include "virstring.h" + +#include "qemu_alias.h" +#include "qemu_hotplug.h" +#include "qemu_migration.h" +#include "qemu_migration_params.h" + +#define VIR_FROM_THIS VIR_FROM_QEMU + +VIR_LOG_INIT("qemu.qemu_migration_params"); + +#define QEMU_MIGRATION_TLS_ALIAS_BASE "libvirt_migrate" + + +void +qemuMigrationParamsClear(qemuMonitorMigrationParamsPtr migParams) +{ + if (!migParams) + return; + + VIR_FREE(migParams->tlsCreds); + VIR_FREE(migParams->tlsHostname); +} + + +void +qemuMigrationParamsFree(qemuMonitorMigrationParamsPtr *migParams) +{ + if (!*migParams) + return; + + qemuMigrationParamsClear(*migParams); + VIR_FREE(*migParams); +} + + +qemuMonitorMigrationParamsPtr +qemuMigrationParamsFromFlags(virTypedParameterPtr params, + int nparams, + unsigned long flags) +{ + qemuMonitorMigrationParamsPtr migParams; + + if (VIR_ALLOC(migParams) < 0) + return NULL; + + if (!params) + return migParams; + +#define GET(PARAM, VAR) \ + do { \ + int rc; \ + if ((rc =3D virTypedParamsGetInt(params, nparams, \ + VIR_MIGRATE_PARAM_ ## PARAM, \ + &migParams->VAR)) < 0) \ + goto error; \ + \ + if (rc =3D=3D 1) \ + migParams->VAR ## _set =3D true; \ + } while (0) + + GET(AUTO_CONVERGE_INITIAL, cpuThrottleInitial); + GET(AUTO_CONVERGE_INCREMENT, cpuThrottleIncrement); + +#undef GET + + if ((migParams->cpuThrottleInitial_set || + migParams->cpuThrottleIncrement_set) && + !(flags & VIR_MIGRATE_AUTO_CONVERGE)) { + virReportError(VIR_ERR_INVALID_ARG, "%s", + _("Turn auto convergence on to tune it")); + goto error; + } + + return migParams; + + error: + qemuMigrationParamsFree(&migParams); + return NULL; +} + + +int +qemuMigrationParamsSet(virQEMUDriverPtr driver, + virDomainObjPtr vm, + int asyncJob, + qemuMonitorMigrationParamsPtr migParams) +{ + qemuDomainObjPrivatePtr priv =3D vm->privateData; + int ret =3D -1; + + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + return -1; + + if (qemuMonitorSetMigrationParams(priv->mon, migParams) < 0) + goto cleanup; + + ret =3D 0; + + cleanup: + if (qemuDomainObjExitMonitor(driver, vm) < 0) + ret =3D -1; + + return ret; +} + + +/* qemuMigrationParamsCheckTLSCreds + * @driver: pointer to qemu driver + * @vm: domain object + * @asyncJob: migration job to join + * + * Query the migration parameters looking for the 'tls-creds' parameter. + * If found, then we can support setting or clearing the parameters and th= us + * can support TLS for migration. + * + * Returns 0 if we were able to successfully fetch the params and + * additionally if the tls-creds parameter exists, saves it in the + * private domain structure. Returns -1 on failure. + */ +static int +qemuMigrationParamsCheckTLSCreds(virQEMUDriverPtr driver, + virDomainObjPtr vm, + int asyncJob) +{ + int ret =3D -1; + qemuDomainObjPrivatePtr priv =3D vm->privateData; + qemuMonitorMigrationParams migParams =3D { 0 }; + + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + return -1; + + if (qemuMonitorGetMigrationParams(priv->mon, &migParams) < 0) + goto cleanup; + + /* NB: Could steal NULL pointer too! Let caller decide what to do. */ + VIR_STEAL_PTR(priv->migTLSAlias, migParams.tlsCreds); + + ret =3D 0; + + cleanup: + if (qemuDomainObjExitMonitor(driver, vm) < 0) + ret =3D -1; + + qemuMigrationParamsClear(&migParams); + + return ret; +} + + +/* qemuMigrationParamsCheckSetupTLS + * @driver: pointer to qemu driver + * @vm: domain object + * @cfg: configuration pointer + * @asyncJob: migration job to join + * + * Check if TLS is possible and set up the environment. Assumes the caller + * desires to use TLS (e.g. caller found VIR_MIGRATE_TLS flag). + * + * Ensure the qemu.conf has been properly configured to add an entry for + * "migrate_tls_x509_cert_dir". Also check if the "tls-creds" parameter + * was present from a query of migration parameters + * + * Returns 0 on success, -1 on error/failure + */ +int +qemuMigrationParamsCheckSetupTLS(virQEMUDriverPtr driver, + virQEMUDriverConfigPtr cfg, + virDomainObjPtr vm, + int asyncJob) +{ + qemuDomainObjPrivatePtr priv =3D vm->privateData; + + if (!cfg->migrateTLSx509certdir) { + virReportError(VIR_ERR_OPERATION_INVALID, "%s", + _("host migration TLS directory not configured")); + return -1; + } + + if (qemuMigrationParamsCheckTLSCreds(driver, vm, asyncJob) < 0) + return -1; + + if (!priv->migTLSAlias) { + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", + _("TLS migration is not supported with this " + "QEMU binary")); + return -1; + } + + /* If there's a secret, then grab/store it now using the connection */ + if (cfg->migrateTLSx509secretUUID && + !(priv->migSecinfo =3D + qemuDomainSecretInfoTLSNew(priv, QEMU_MIGRATION_TLS_ALIAS_BASE, + cfg->migrateTLSx509secretUUID))) + return -1; + + return 0; +} + + +/* qemuMigrationParamsAddTLSObjects + * @driver: pointer to qemu driver + * @vm: domain object + * @cfg: configuration pointer + * @tlsListen: server or client + * @asyncJob: Migration job to join + * @tlsAlias: alias to be generated for TLS object + * @secAlias: alias to be generated for a secinfo object + * @migParams: migration parameters to set + * + * Create the TLS objects for the migration and set the migParams value + * + * Returns 0 on success, -1 on failure + */ +int +qemuMigrationParamsAddTLSObjects(virQEMUDriverPtr driver, + virDomainObjPtr vm, + virQEMUDriverConfigPtr cfg, + bool tlsListen, + int asyncJob, + char **tlsAlias, + char **secAlias, + qemuMonitorMigrationParamsPtr migParams) +{ + qemuDomainObjPrivatePtr priv =3D vm->privateData; + virJSONValuePtr tlsProps =3D NULL; + virJSONValuePtr secProps =3D NULL; + + if (qemuDomainGetTLSObjects(priv->qemuCaps, priv->migSecinfo, + cfg->migrateTLSx509certdir, tlsListen, + cfg->migrateTLSx509verify, + QEMU_MIGRATION_TLS_ALIAS_BASE, + &tlsProps, tlsAlias, &secProps, secAlias) = < 0) + goto error; + + /* Ensure the domain doesn't already have the TLS objects defined... + * This should prevent any issues just in case some cleanup wasn't + * properly completed (both src and dst use the same alias) or + * some other error path between now and perform . */ + qemuDomainDelTLSObjects(driver, vm, asyncJob, *secAlias, *tlsAlias); + + if (qemuDomainAddTLSObjects(driver, vm, asyncJob, *secAlias, &secProps, + *tlsAlias, &tlsProps) < 0) + goto error; + + if (VIR_STRDUP(migParams->tlsCreds, *tlsAlias) < 0) + goto error; + + return 0; + + error: + virJSONValueFree(tlsProps); + virJSONValueFree(secProps); + return -1; +} + + +/* qemuMigrationParamsSetEmptyTLS + * @driver: pointer to qemu driver + * @vm: domain object + * @asyncJob: migration job to join + * @migParams: Pointer to a migration parameters block + * + * If we support setting the tls-creds, then set both tls-creds and + * tls-hostname to the empty string ("") which indicates to not use + * TLS on this migration. + * + * Returns 0 on success, -1 on failure + */ +int +qemuMigrationParamsSetEmptyTLS(virQEMUDriverPtr driver, + virDomainObjPtr vm, + int asyncJob, + qemuMonitorMigrationParamsPtr migParams) +{ + qemuDomainObjPrivatePtr priv =3D vm->privateData; + + if (qemuMigrationParamsCheckTLSCreds(driver, vm, asyncJob) < 0) + return -1; + + if (!priv->migTLSAlias) + return 0; + + if (VIR_STRDUP(migParams->tlsCreds, "") < 0 || + VIR_STRDUP(migParams->tlsHostname, "") < 0) + return -1; + + return 0; +} + + +int +qemuMigrationParamsSetCompression(virQEMUDriverPtr driver, + virDomainObjPtr vm, + int asyncJob, + qemuMigrationCompressionPtr compression, + qemuMonitorMigrationParamsPtr migParams) +{ + int ret =3D -1; + qemuDomainObjPrivatePtr priv =3D vm->privateData; + + if (qemuMigrationOptionSet(driver, vm, + QEMU_MONITOR_MIGRATION_CAPS_XBZRLE, + compression->methods & + (1ULL << QEMU_MIGRATION_COMPRESS_XBZRLE), + asyncJob) < 0) + return -1; + + if (qemuMigrationOptionSet(driver, vm, + QEMU_MONITOR_MIGRATION_CAPS_COMPRESS, + compression->methods & + (1ULL << QEMU_MIGRATION_COMPRESS_MT), + asyncJob) < 0) + return -1; + + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + return -1; + + migParams->compressLevel_set =3D compression->level_set; + migParams->compressLevel =3D compression->level; + + migParams->compressThreads_set =3D compression->threads_set; + migParams->compressThreads =3D compression->threads; + + migParams->decompressThreads_set =3D compression->dthreads_set; + migParams->decompressThreads =3D compression->dthreads; + + if (compression->xbzrle_cache_set && + qemuMonitorSetMigrationCacheSize(priv->mon, + compression->xbzrle_cache) < 0) + goto cleanup; + + ret =3D 0; + + cleanup: + if (qemuDomainObjExitMonitor(driver, vm) < 0) + ret =3D -1; + + return ret; +} + + +/* qemuMigrationParamsResetTLS + * @driver: pointer to qemu driver + * @vm: domain object + * @asyncJob: migration job to join + * + * Deconstruct all the setup possibly done for TLS - delete the TLS and + * security objects, free the secinfo, and reset the migration params to "= ". + * + * Returns 0 on success, -1 on failure + */ +static int +qemuMigrationParamsResetTLS(virQEMUDriverPtr driver, + virDomainObjPtr vm, + int asyncJob) +{ + qemuDomainObjPrivatePtr priv =3D vm->privateData; + char *tlsAlias =3D NULL; + char *secAlias =3D NULL; + qemuMonitorMigrationParams migParams =3D { 0 }; + int ret =3D -1; + + if (qemuMigrationParamsCheckTLSCreds(driver, vm, asyncJob) < 0) + return -1; + + /* If the tls-creds doesn't exist or if they're set to "" then there's + * nothing to do since we never set anything up */ + if (!priv->migTLSAlias || !*priv->migTLSAlias) + return 0; + + /* NB: If either or both fail to allocate memory we can still proceed + * since the next time we migrate another deletion attempt will be + * made after successfully generating the aliases. */ + tlsAlias =3D qemuAliasTLSObjFromSrcAlias(QEMU_MIGRATION_TLS_ALIAS_BASE= ); + secAlias =3D qemuDomainGetSecretAESAlias(QEMU_MIGRATION_TLS_ALIAS_BASE= , false); + + qemuDomainDelTLSObjects(driver, vm, asyncJob, secAlias, tlsAlias); + qemuDomainSecretInfoFree(&priv->migSecinfo); + + if (VIR_STRDUP(migParams.tlsCreds, "") < 0 || + VIR_STRDUP(migParams.tlsHostname, "") < 0 || + qemuMigrationParamsSet(driver, vm, asyncJob, &migParams) < 0) + goto cleanup; + + ret =3D 0; + + cleanup: + VIR_FREE(tlsAlias); + VIR_FREE(secAlias); + qemuMigrationParamsClear(&migParams); + + return ret; +} + + +/* + * qemuMigrationParamsReset: + * + * Reset all migration parameters so that the next job which internally us= es + * migration (save, managedsave, snapshots, dump) will not try to use them. + */ +void +qemuMigrationParamsReset(virQEMUDriverPtr driver, + virDomainObjPtr vm, + int asyncJob) +{ + qemuMonitorMigrationCaps cap; + virErrorPtr err =3D virSaveLastError(); + + if (!virDomainObjIsActive(vm)) + goto cleanup; + + if (qemuMigrationParamsResetTLS(driver, vm, asyncJob) < 0) + goto cleanup; + + for (cap =3D 0; cap < QEMU_MONITOR_MIGRATION_CAPS_LAST; cap++) { + if (qemuMigrationCapsGet(vm, cap) && + qemuMigrationOptionSet(driver, vm, cap, false, asyncJob) < 0) + goto cleanup; + } + + cleanup: + if (err) { + virSetError(err); + virFreeError(err); + } +} diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h new file mode 100644 index 0000000000..33b3c27e51 --- /dev/null +++ b/src/qemu/qemu_migration_params.h @@ -0,0 +1,82 @@ +/* + * qemu_migration_params.h: QEMU migration parameters handling + * + * Copyright (C) 2006-2018 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * . + * + */ + +#ifndef __QEMU_MIGRATION_PARAMS_H__ +# define __QEMU_MIGRATION_PARAMS_H__ + +# include "internal.h" + +# include "qemu_monitor.h" +# include "qemu_conf.h" + + +qemuMonitorMigrationParamsPtr +qemuMigrationParamsFromFlags(virTypedParameterPtr params, + int nparams, + unsigned long flags); + +void +qemuMigrationParamsClear(qemuMonitorMigrationParamsPtr migParams); + +void +qemuMigrationParamsFree(qemuMonitorMigrationParamsPtr *migParams); + +int +qemuMigrationParamsSet(virQEMUDriverPtr driver, + virDomainObjPtr vm, + int asyncJob, + qemuMonitorMigrationParamsPtr migParams); + +int +qemuMigrationParamsCheckSetupTLS(virQEMUDriverPtr driver, + virQEMUDriverConfigPtr cfg, + virDomainObjPtr vm, + int asyncJob); + +int +qemuMigrationParamsAddTLSObjects(virQEMUDriverPtr driver, + virDomainObjPtr vm, + virQEMUDriverConfigPtr cfg, + bool tlsListen, + int asyncJob, + char **tlsAlias, + char **secAlias, + qemuMonitorMigrationParamsPtr migParams); + +int +qemuMigrationParamsSetEmptyTLS(virQEMUDriverPtr driver, + virDomainObjPtr vm, + int asyncJob, + qemuMonitorMigrationParamsPtr migParams); + +int +qemuMigrationParamsSetCompression(virQEMUDriverPtr driver, + virDomainObjPtr vm, + int asyncJob, + qemuMigrationCompressionPtr compression, + qemuMonitorMigrationParamsPtr migParams); + +void +qemuMigrationParamsReset(virQEMUDriverPtr driver, + virDomainObjPtr vm, + int asyncJob); + +#endif /* __QEMU_MIGRATION_PARAMS_H__ */ diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index f02114c693..7d678046c8 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -45,6 +45,7 @@ #include "qemu_hostdev.h" #include "qemu_hotplug.h" #include "qemu_migration.h" +#include "qemu_migration_params.h" #include "qemu_interface.h" #include "qemu_security.h" =20 --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523780505218668.4983382846175; Sun, 15 Apr 2018 01:21:45 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id E0E8B23E6C5; Sun, 15 Apr 2018 08:21:43 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 9E30417A9B; Sun, 15 Apr 2018 08:21:43 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 553805BBE8; Sun, 15 Apr 2018 08:21:43 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgD9W008640 for ; Wed, 11 Apr 2018 10:42:13 -0400 Received: by smtp.corp.redhat.com (Postfix) id 63FD810B0F39; Wed, 11 Apr 2018 14:42:13 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 2711510B00A3 for ; Wed, 11 Apr 2018 14:42:10 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id F3CF8100491; Wed, 11 Apr 2018 16:42:09 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:40:54 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 04/73] qemu: Move qemuDomainCheckMigrationCapabilities X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Sun, 15 Apr 2018 08:21:44 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Since the function is tightly connected to migration, it was renamed as qemuMigrationCapsCheck and moved to qemu_migration_params.c. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_domain.c | 72 -------------------------------- src/qemu/qemu_domain.h | 4 -- src/qemu/qemu_migration_params.c | 72 ++++++++++++++++++++++++++++++++ src/qemu/qemu_migration_params.h | 5 +++ src/qemu/qemu_process.c | 2 +- 5 files changed, 78 insertions(+), 77 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 100304fd05..84476de11b 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -11798,78 +11798,6 @@ qemuDomainCheckCCWS390AddressSupport(const virDoma= inDef *def, } =20 =20 -int -qemuDomainCheckMigrationCapabilities(virQEMUDriverPtr driver, - virDomainObjPtr vm, - qemuDomainAsyncJob asyncJob) -{ - qemuDomainObjPrivatePtr priv =3D vm->privateData; - char **caps =3D NULL; - char **capStr; - int ret =3D -1; - int rc; - - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) - return -1; - - rc =3D qemuMonitorGetMigrationCapabilities(priv->mon, &caps); - - if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0) - goto cleanup; - - if (!caps) { - ret =3D 0; - goto cleanup; - } - - priv->migrationCaps =3D virBitmapNew(QEMU_MONITOR_MIGRATION_CAPS_LAST); - if (!priv->migrationCaps) - goto cleanup; - - for (capStr =3D caps; *capStr; capStr++) { - int cap =3D qemuMonitorMigrationCapsTypeFromString(*capStr); - - if (cap < 0) { - VIR_DEBUG("Unknown migration capability: '%s'", *capStr); - } else { - ignore_value(virBitmapSetBit(priv->migrationCaps, cap)); - VIR_DEBUG("Found migration capability: '%s'", *capStr); - } - } - - if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_EVENT)) { - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) - goto cleanup; - - rc =3D qemuMonitorSetMigrationCapability(priv->mon, - QEMU_MONITOR_MIGRATION_CAPS= _EVENTS, - true); - - if (qemuDomainObjExitMonitor(driver, vm) < 0) - goto cleanup; - - if (rc < 0) { - virResetLastError(); - VIR_DEBUG("Cannot enable migration events; clearing capability= "); - virQEMUCapsClear(priv->qemuCaps, QEMU_CAPS_MIGRATION_EVENT); - } - } - - /* Migration events capability must always be enabled, clearing it from - * migration capabilities bitmap makes sure it won't be touched anywhe= re - * else. - */ - ignore_value(virBitmapClearBit(priv->migrationCaps, - QEMU_MONITOR_MIGRATION_CAPS_EVENTS)); - - ret =3D 0; - - cleanup: - virStringListFree(caps); - return ret; -} - - /** * qemuDomainPrepareDiskSourceChain: * diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index 21e12f6594..415b2ca093 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -988,10 +988,6 @@ bool qemuDomainCheckCCWS390AddressSupport(const virDom= ainDef *def, const char *devicename); =20 int -qemuDomainCheckMigrationCapabilities(virQEMUDriverPtr driver, - virDomainObjPtr vm, - qemuDomainAsyncJob asyncJob); -int qemuDomainPrepareDiskSourceChain(virDomainDiskDefPtr disk, virStorageSourcePtr src, virQEMUDriverConfigPtr cfg, diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 72ecafd057..461df876db 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -452,3 +452,75 @@ qemuMigrationParamsReset(virQEMUDriverPtr driver, virFreeError(err); } } + + +int +qemuMigrationCapsCheck(virQEMUDriverPtr driver, + virDomainObjPtr vm, + int asyncJob) +{ + qemuDomainObjPrivatePtr priv =3D vm->privateData; + char **caps =3D NULL; + char **capStr; + int ret =3D -1; + int rc; + + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + return -1; + + rc =3D qemuMonitorGetMigrationCapabilities(priv->mon, &caps); + + if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0) + goto cleanup; + + if (!caps) { + ret =3D 0; + goto cleanup; + } + + priv->migrationCaps =3D virBitmapNew(QEMU_MONITOR_MIGRATION_CAPS_LAST); + if (!priv->migrationCaps) + goto cleanup; + + for (capStr =3D caps; *capStr; capStr++) { + int cap =3D qemuMonitorMigrationCapsTypeFromString(*capStr); + + if (cap < 0) { + VIR_DEBUG("Unknown migration capability: '%s'", *capStr); + } else { + ignore_value(virBitmapSetBit(priv->migrationCaps, cap)); + VIR_DEBUG("Found migration capability: '%s'", *capStr); + } + } + + if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_EVENT)) { + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + goto cleanup; + + rc =3D qemuMonitorSetMigrationCapability(priv->mon, + QEMU_MONITOR_MIGRATION_CAPS= _EVENTS, + true); + + if (qemuDomainObjExitMonitor(driver, vm) < 0) + goto cleanup; + + if (rc < 0) { + virResetLastError(); + VIR_DEBUG("Cannot enable migration events; clearing capability= "); + virQEMUCapsClear(priv->qemuCaps, QEMU_CAPS_MIGRATION_EVENT); + } + } + + /* Migration events capability must always be enabled, clearing it from + * migration capabilities bitmap makes sure it won't be touched anywhe= re + * else. + */ + ignore_value(virBitmapClearBit(priv->migrationCaps, + QEMU_MONITOR_MIGRATION_CAPS_EVENTS)); + + ret =3D 0; + + cleanup: + virStringListFree(caps); + return ret; +} diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index 33b3c27e51..a006357825 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -79,4 +79,9 @@ qemuMigrationParamsReset(virQEMUDriverPtr driver, virDomainObjPtr vm, int asyncJob); =20 +int +qemuMigrationCapsCheck(virQEMUDriverPtr driver, + virDomainObjPtr vm, + int asyncJob); + #endif /* __QEMU_MIGRATION_PARAMS_H__ */ diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 7d678046c8..11276dace9 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -1840,7 +1840,7 @@ qemuConnectMonitor(virQEMUDriverPtr driver, virDomain= ObjPtr vm, int asyncJob, if (qemuProcessInitMonitor(driver, vm, asyncJob) < 0) return -1; =20 - if (qemuDomainCheckMigrationCapabilities(driver, vm, asyncJob) < 0) + if (qemuMigrationCapsCheck(driver, vm, asyncJob) < 0) return -1; =20 return 0; --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457737990237.49823686708066; Wed, 11 Apr 2018 07:42:17 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 4BEEF3004858; Wed, 11 Apr 2018 14:42:16 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id CC99D78BBA; Wed, 11 Apr 2018 14:42:15 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 093701800CA2; Wed, 11 Apr 2018 14:42:15 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgCAJ008618 for ; Wed, 11 Apr 2018 10:42:12 -0400 Received: by smtp.corp.redhat.com (Postfix) id BBF1D2026609; Wed, 11 Apr 2018 14:42:12 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 2DC4B2026E03 for ; Wed, 11 Apr 2018 14:42:12 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 027F210037F; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:40:55 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 05/73] qemu: Move qemuMigrationCapsGet X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.40]); Wed, 11 Apr 2018 14:42:17 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" The function is connected with the code which handles migration parameters and capabilities, let's move it to qemu_migration_params.c. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_migration.c | 14 -------------- src/qemu/qemu_migration.h | 4 ---- src/qemu/qemu_migration_params.c | 14 ++++++++++++++ src/qemu/qemu_migration_params.h | 4 ++++ 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 34eb3eb9e5..57903c7b17 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -5740,17 +5740,3 @@ qemuMigrationSrcFetchMirrorStats(virQEMUDriverPtr dr= iver, virHashFree(blockinfo); return 0; } - - -bool -qemuMigrationCapsGet(virDomainObjPtr vm, - qemuMonitorMigrationCaps cap) -{ - qemuDomainObjPrivatePtr priv =3D vm->privateData; - bool enabled =3D false; - - if (priv->migrationCaps) - ignore_value(virBitmapGetBit(priv->migrationCaps, cap, &enabled)); - - return enabled; -} diff --git a/src/qemu/qemu_migration.h b/src/qemu/qemu_migration.h index adf788c909..3f33d3013d 100644 --- a/src/qemu/qemu_migration.h +++ b/src/qemu/qemu_migration.h @@ -291,10 +291,6 @@ qemuMigrationSrcFetchMirrorStats(virQEMUDriverPtr driv= er, qemuDomainAsyncJob asyncJob, qemuDomainJobInfoPtr jobInfo); =20 -bool -qemuMigrationCapsGet(virDomainObjPtr vm, - qemuMonitorMigrationCaps cap); - int qemuMigrationOptionSet(virQEMUDriverPtr driver, virDomainObjPtr vm, diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 461df876db..f78e9ad875 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -524,3 +524,17 @@ qemuMigrationCapsCheck(virQEMUDriverPtr driver, virStringListFree(caps); return ret; } + + +bool +qemuMigrationCapsGet(virDomainObjPtr vm, + qemuMonitorMigrationCaps cap) +{ + qemuDomainObjPrivatePtr priv =3D vm->privateData; + bool enabled =3D false; + + if (priv->migrationCaps) + ignore_value(virBitmapGetBit(priv->migrationCaps, cap, &enabled)); + + return enabled; +} diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index a006357825..0a68bc0e39 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -84,4 +84,8 @@ qemuMigrationCapsCheck(virQEMUDriverPtr driver, virDomainObjPtr vm, int asyncJob); =20 +bool +qemuMigrationCapsGet(virDomainObjPtr vm, + qemuMonitorMigrationCaps cap); + #endif /* __QEMU_MIGRATION_PARAMS_H__ */ --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 152345775311791.88350124702856; Wed, 11 Apr 2018 07:42:33 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id BDFA73133E86; Wed, 11 Apr 2018 14:42:30 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 8C7125C545; Wed, 11 Apr 2018 14:42:30 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 4C7764CAA4; Wed, 11 Apr 2018 14:42:30 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgCFt008608 for ; Wed, 11 Apr 2018 10:42:12 -0400 Received: by smtp.corp.redhat.com (Postfix) id 500EE215CDC8; Wed, 11 Apr 2018 14:42:12 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 2F4A5215CDAF for ; Wed, 11 Apr 2018 14:42:12 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 06B1A100494; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:40:56 +0200 Message-Id: <4e25b8921e16ffc77a64b232348b70d6b73e82f6.1523456479.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 06/73] qemu: Reindent qemuMigrationParamsSetEmptyTLS X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.46]); Wed, 11 Apr 2018 14:42:31 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_migration_params.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index f78e9ad875..36a9fd3509 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -299,17 +299,17 @@ qemuMigrationParamsSetEmptyTLS(virQEMUDriverPtr drive= r, int asyncJob, qemuMonitorMigrationParamsPtr migParams) { - qemuDomainObjPrivatePtr priv =3D vm->privateData; + qemuDomainObjPrivatePtr priv =3D vm->privateData; =20 - if (qemuMigrationParamsCheckTLSCreds(driver, vm, asyncJob) < 0) - return -1; + if (qemuMigrationParamsCheckTLSCreds(driver, vm, asyncJob) < 0) + return -1; =20 - if (!priv->migTLSAlias) - return 0; + if (!priv->migTLSAlias) + return 0; =20 - if (VIR_STRDUP(migParams->tlsCreds, "") < 0 || - VIR_STRDUP(migParams->tlsHostname, "") < 0) - return -1; + if (VIR_STRDUP(migParams->tlsCreds, "") < 0 || + VIR_STRDUP(migParams->tlsHostname, "") < 0) + return -1; =20 return 0; } --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523780500102122.72242953371142; Sun, 15 Apr 2018 01:21:40 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 9FA5080467; Sun, 15 Apr 2018 08:21:38 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 6230A611A5; Sun, 15 Apr 2018 08:21:38 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 018EF1805972; Sun, 15 Apr 2018 08:21:37 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgDFm008630 for ; Wed, 11 Apr 2018 10:42:13 -0400 Received: by smtp.corp.redhat.com (Postfix) id 3B396AB3E6; Wed, 11 Apr 2018 14:42:13 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 1AB7DAB3E2 for ; Wed, 11 Apr 2018 14:42:12 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 0BE6C100496; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:40:57 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 07/73] qemu: Make qemuMigrationParamsFree follow common pattern X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Sun, 15 Apr 2018 08:21:39 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Our *Free functions usually do not take a double pointer and the caller has to make sure it doesn't use the stale pointer after the *Free function returns. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_driver.c | 2 +- src/qemu/qemu_migration_params.c | 10 +++++----- src/qemu/qemu_migration_params.h | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 519bd767c1..bf6c0d0826 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -12781,7 +12781,7 @@ qemuDomainMigratePerform3Params(virDomainPtr dom, flags, dname, bandwidth, true); cleanup: VIR_FREE(compression); - qemuMigrationParamsFree(&migParams); + qemuMigrationParamsFree(migParams); VIR_FREE(migrate_disks); return ret; } diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 36a9fd3509..784b1b9254 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -50,13 +50,13 @@ qemuMigrationParamsClear(qemuMonitorMigrationParamsPtr = migParams) =20 =20 void -qemuMigrationParamsFree(qemuMonitorMigrationParamsPtr *migParams) +qemuMigrationParamsFree(qemuMonitorMigrationParamsPtr migParams) { - if (!*migParams) + if (!migParams) return; =20 - qemuMigrationParamsClear(*migParams); - VIR_FREE(*migParams); + qemuMigrationParamsClear(migParams); + VIR_FREE(migParams); } =20 =20 @@ -101,7 +101,7 @@ qemuMigrationParamsFromFlags(virTypedParameterPtr param= s, return migParams; =20 error: - qemuMigrationParamsFree(&migParams); + qemuMigrationParamsFree(migParams); return NULL; } =20 diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index 0a68bc0e39..1f28d8d606 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -37,7 +37,7 @@ void qemuMigrationParamsClear(qemuMonitorMigrationParamsPtr migParams); =20 void -qemuMigrationParamsFree(qemuMonitorMigrationParamsPtr *migParams); +qemuMigrationParamsFree(qemuMonitorMigrationParamsPtr migParams); =20 int qemuMigrationParamsSet(virQEMUDriverPtr driver, --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457755999160.86338068154953; Wed, 11 Apr 2018 07:42:35 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5B1C93137724; Wed, 11 Apr 2018 14:42:34 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 2677688467; Wed, 11 Apr 2018 14:42:34 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id ABF30180215F; Wed, 11 Apr 2018 14:42:33 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgCVM008615 for ; Wed, 11 Apr 2018 10:42:12 -0400 Received: by smtp.corp.redhat.com (Postfix) id A744C202698A; Wed, 11 Apr 2018 14:42:12 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 6A7E82026E0E for ; Wed, 11 Apr 2018 14:42:12 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 10154100498; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:40:58 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 08/73] qemu: Allocate struct for migration parameters X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.44]); Wed, 11 Apr 2018 14:42:35 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" It will get a bit more complicated soon and storing it on a stack with {0} initializer will no longer work. We need a proper constructor. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_driver.c | 20 +++++++++++------ src/qemu/qemu_migration.c | 28 ++++++++++++++--------- src/qemu/qemu_migration_params.c | 38 +++++++++++++++++++++++--------- src/qemu/qemu_migration_params.h | 3 +++ 4 files changed, 61 insertions(+), 28 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index bf6c0d0826..c157ff9bb0 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -12241,7 +12241,7 @@ qemuDomainMigratePerform(virDomainPtr dom, int ret =3D -1; const char *dconnuri =3D NULL; qemuMigrationCompressionPtr compression =3D NULL; - qemuMonitorMigrationParams migParams =3D { 0 }; + qemuMonitorMigrationParamsPtr migParams =3D NULL; =20 virCheckFlags(QEMU_MIGRATION_FLAGS, -1); =20 @@ -12252,6 +12252,9 @@ qemuDomainMigratePerform(virDomainPtr dom, goto cleanup; } =20 + if (!(migParams =3D qemuMigrationParamsNew())) + goto cleanup; + if (!(compression =3D qemuMigrationAnyCompressionParse(NULL, 0, flags)= )) goto cleanup; =20 @@ -12276,12 +12279,12 @@ qemuDomainMigratePerform(virDomainPtr dom, */ ret =3D qemuMigrationSrcPerform(driver, dom->conn, vm, NULL, NULL, dconnuri, uri, NULL, NULL, 0, NULL= , 0, - compression, &migParams, cookie, cookiel= en, + compression, migParams, cookie, cookiele= n, NULL, NULL, /* No output cookies in v2 */ flags, dname, resource, false); =20 cleanup: - qemuMigrationParamsClear(&migParams); + qemuMigrationParamsFree(migParams); VIR_FREE(compression); return ret; } @@ -12666,13 +12669,16 @@ qemuDomainMigratePerform3(virDomainPtr dom, virQEMUDriverPtr driver =3D dom->conn->privateData; virDomainObjPtr vm; qemuMigrationCompressionPtr compression =3D NULL; - qemuMonitorMigrationParams migParams =3D { 0 }; + qemuMonitorMigrationParamsPtr migParams =3D NULL; int ret =3D -1; =20 virCheckFlags(QEMU_MIGRATION_FLAGS, -1); =20 + if (!(migParams =3D qemuMigrationParamsNew())) + goto cleanup; + if (!(compression =3D qemuMigrationAnyCompressionParse(NULL, 0, flags)= )) - return -1; + goto cleanup; =20 if (!(vm =3D qemuDomObjFromDomain(dom))) goto cleanup; @@ -12684,13 +12690,13 @@ qemuDomainMigratePerform3(virDomainPtr dom, =20 ret =3D qemuMigrationSrcPerform(driver, dom->conn, vm, xmlin, NULL, dconnuri, uri, NULL, NULL, 0, NULL, 0, - compression, &migParams, + compression, migParams, cookiein, cookieinlen, cookieout, cookieoutlen, flags, dname, resource, true); =20 cleanup: - qemuMigrationParamsClear(&migParams); + qemuMigrationParamsFree(migParams); VIR_FREE(compression); return ret; } diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 57903c7b17..a0061c8c83 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -2251,7 +2251,7 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, int rv; char *tlsAlias =3D NULL; char *secAlias =3D NULL; - qemuMonitorMigrationParams migParams =3D { 0 }; + qemuMonitorMigrationParamsPtr migParams =3D NULL; =20 virNWFilterReadLockFilterUpdates(); =20 @@ -2301,6 +2301,9 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, if (!qemuMigrationSrcIsAllowedHostdev(*def)) goto cleanup; =20 + if (!(migParams =3D qemuMigrationParamsNew())) + goto cleanup; + /* Let migration hook filter domain XML */ if (virHookPresent(VIR_HOOK_DRIVER_QEMU)) { char *xml; @@ -2445,7 +2448,7 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, } =20 if (qemuMigrationParamsSetCompression(driver, vm, QEMU_ASYNC_JOB_MIGRA= TION_IN, - compression, &migParams) < 0) + compression, migParams) < 0) goto stopjob; =20 /* Migrations using TLS need to add the "tls-creds-x509" object and @@ -2458,17 +2461,17 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, =20 if (qemuMigrationParamsAddTLSObjects(driver, vm, cfg, true, QEMU_ASYNC_JOB_MIGRATION_IN, - &tlsAlias, &secAlias, &migPar= ams) < 0) + &tlsAlias, &secAlias, migPara= ms) < 0) goto stopjob; =20 /* Force reset of 'tls-hostname', it's a source only parameter */ - if (VIR_STRDUP(migParams.tlsHostname, "") < 0) + if (VIR_STRDUP(migParams->tlsHostname, "") < 0) goto stopjob; =20 } else { if (qemuMigrationParamsSetEmptyTLS(driver, vm, QEMU_ASYNC_JOB_MIGRATION_IN, - &migParams) < 0) + migParams) < 0) goto stopjob; } =20 @@ -2489,7 +2492,7 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, goto stopjob; =20 if (qemuMigrationParamsSet(driver, vm, QEMU_ASYNC_JOB_MIGRATION_IN, - &migParams) < 0) + migParams) < 0) goto stopjob; =20 if (mig->nbd && @@ -2577,7 +2580,7 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, virDomainObjRemoveTransientDef(vm); qemuDomainRemoveInactiveJob(driver, vm); } - qemuMigrationParamsClear(&migParams); + qemuMigrationParamsFree(migParams); virDomainObjEndAPI(&vm); qemuDomainEventQueue(driver, event); qemuMigrationCookieFree(mig); @@ -3881,7 +3884,7 @@ qemuMigrationSrcPerformPeer2Peer2(virQEMUDriverPtr dr= iver, virStreamPtr st =3D NULL; unsigned long destflags; qemuMigrationCompressionPtr compression =3D NULL; - qemuMonitorMigrationParams migParams =3D { 0 }; + qemuMonitorMigrationParamsPtr migParams =3D NULL; =20 VIR_DEBUG("driver=3D%p, sconn=3D%p, dconn=3D%p, vm=3D%p, dconnuri=3D%s= , " "flags=3D0x%lx, dname=3D%s, resource=3D%lu", @@ -3903,6 +3906,9 @@ qemuMigrationSrcPerformPeer2Peer2(virQEMUDriverPtr dr= iver, destflags =3D flags & ~(VIR_MIGRATE_ABORT_ON_ERROR | VIR_MIGRATE_AUTO_CONVERGE); =20 + if (!(migParams =3D qemuMigrationParamsNew())) + goto cleanup; + if (!(compression =3D qemuMigrationAnyCompressionParse(NULL, 0, flags)= )) goto cleanup; =20 @@ -3958,13 +3964,13 @@ qemuMigrationSrcPerformPeer2Peer2(virQEMUDriverPtr = driver, ret =3D qemuMigrationSrcPerformTunnel(driver, vm, st, NULL, NULL, 0, NULL, NULL, flags, resource, dconn, - NULL, 0, NULL, compression, &m= igParams); + NULL, 0, NULL, compression, mi= gParams); else ret =3D qemuMigrationSrcPerformNative(driver, vm, NULL, uri_out, cookie, cookielen, NULL, NULL, /* No out cookie w= ith v2 migration */ flags, resource, dconn, NULL, = 0, NULL, - compression, &migParams); + compression, migParams); =20 /* Perform failed. Make sure Finish doesn't overwrite the error */ if (ret < 0) @@ -4004,7 +4010,7 @@ qemuMigrationSrcPerformPeer2Peer2(virQEMUDriverPtr dr= iver, virSetError(orig_err); virFreeError(orig_err); } - qemuMigrationParamsClear(&migParams); + qemuMigrationParamsFree(migParams); VIR_FREE(uri_out); VIR_FREE(cookie); VIR_FREE(compression); diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 784b1b9254..95ceed4e14 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -38,6 +38,18 @@ VIR_LOG_INIT("qemu.qemu_migration_params"); #define QEMU_MIGRATION_TLS_ALIAS_BASE "libvirt_migrate" =20 =20 +qemuMonitorMigrationParamsPtr +qemuMigrationParamsNew(void) +{ + qemuMonitorMigrationParamsPtr params; + + if (VIR_ALLOC(params) < 0) + return NULL; + + return params; +} + + void qemuMigrationParamsClear(qemuMonitorMigrationParamsPtr migParams) { @@ -67,7 +79,7 @@ qemuMigrationParamsFromFlags(virTypedParameterPtr params, { qemuMonitorMigrationParamsPtr migParams; =20 - if (VIR_ALLOC(migParams) < 0) + if (!(migParams =3D qemuMigrationParamsNew())) return NULL; =20 if (!params) @@ -151,16 +163,19 @@ qemuMigrationParamsCheckTLSCreds(virQEMUDriverPtr dri= ver, { int ret =3D -1; qemuDomainObjPrivatePtr priv =3D vm->privateData; - qemuMonitorMigrationParams migParams =3D { 0 }; + qemuMonitorMigrationParamsPtr migParams =3D NULL; =20 if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) return -1; =20 - if (qemuMonitorGetMigrationParams(priv->mon, &migParams) < 0) + if (!(migParams =3D qemuMigrationParamsNew())) + goto cleanup; + + if (qemuMonitorGetMigrationParams(priv->mon, migParams) < 0) goto cleanup; =20 /* NB: Could steal NULL pointer too! Let caller decide what to do. */ - VIR_STEAL_PTR(priv->migTLSAlias, migParams.tlsCreds); + VIR_STEAL_PTR(priv->migTLSAlias, migParams->tlsCreds); =20 ret =3D 0; =20 @@ -168,7 +183,7 @@ qemuMigrationParamsCheckTLSCreds(virQEMUDriverPtr drive= r, if (qemuDomainObjExitMonitor(driver, vm) < 0) ret =3D -1; =20 - qemuMigrationParamsClear(&migParams); + qemuMigrationParamsFree(migParams); =20 return ret; } @@ -384,7 +399,7 @@ qemuMigrationParamsResetTLS(virQEMUDriverPtr driver, qemuDomainObjPrivatePtr priv =3D vm->privateData; char *tlsAlias =3D NULL; char *secAlias =3D NULL; - qemuMonitorMigrationParams migParams =3D { 0 }; + qemuMonitorMigrationParamsPtr migParams =3D NULL; int ret =3D -1; =20 if (qemuMigrationParamsCheckTLSCreds(driver, vm, asyncJob) < 0) @@ -395,6 +410,9 @@ qemuMigrationParamsResetTLS(virQEMUDriverPtr driver, if (!priv->migTLSAlias || !*priv->migTLSAlias) return 0; =20 + if (!(migParams =3D qemuMigrationParamsNew())) + goto cleanup; + /* NB: If either or both fail to allocate memory we can still proceed * since the next time we migrate another deletion attempt will be * made after successfully generating the aliases. */ @@ -404,9 +422,9 @@ qemuMigrationParamsResetTLS(virQEMUDriverPtr driver, qemuDomainDelTLSObjects(driver, vm, asyncJob, secAlias, tlsAlias); qemuDomainSecretInfoFree(&priv->migSecinfo); =20 - if (VIR_STRDUP(migParams.tlsCreds, "") < 0 || - VIR_STRDUP(migParams.tlsHostname, "") < 0 || - qemuMigrationParamsSet(driver, vm, asyncJob, &migParams) < 0) + if (VIR_STRDUP(migParams->tlsCreds, "") < 0 || + VIR_STRDUP(migParams->tlsHostname, "") < 0 || + qemuMigrationParamsSet(driver, vm, asyncJob, migParams) < 0) goto cleanup; =20 ret =3D 0; @@ -414,7 +432,7 @@ qemuMigrationParamsResetTLS(virQEMUDriverPtr driver, cleanup: VIR_FREE(tlsAlias); VIR_FREE(secAlias); - qemuMigrationParamsClear(&migParams); + qemuMigrationParamsFree(migParams); =20 return ret; } diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index 1f28d8d606..cbc63b9cbf 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -28,6 +28,9 @@ # include "qemu_conf.h" =20 =20 +qemuMonitorMigrationParamsPtr +qemuMigrationParamsNew(void); + qemuMonitorMigrationParamsPtr qemuMigrationParamsFromFlags(virTypedParameterPtr params, int nparams, --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457765276919.1994985590712; Wed, 11 Apr 2018 07:42:45 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id E18CB883A5; Wed, 11 Apr 2018 14:42:43 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 84FE078BA2; Wed, 11 Apr 2018 14:42:43 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 3EDFC1805971; Wed, 11 Apr 2018 14:42:43 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgDrk008646 for ; Wed, 11 Apr 2018 10:42:13 -0400 Received: by smtp.corp.redhat.com (Postfix) id 7184E215CDC8; Wed, 11 Apr 2018 14:42:13 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 510FB215CDAF for ; Wed, 11 Apr 2018 14:42:13 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 13BDC10049A; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:40:59 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 09/73] qemu: Drop qemuMigrationParamsClear X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Wed, 11 Apr 2018 14:42:44 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" It's no longer used since we do not store the struct on a stack anymore. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_migration_params.c | 12 +----------- src/qemu/qemu_migration_params.h | 3 --- 2 files changed, 1 insertion(+), 14 deletions(-) diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 95ceed4e14..c315810728 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -51,23 +51,13 @@ qemuMigrationParamsNew(void) =20 =20 void -qemuMigrationParamsClear(qemuMonitorMigrationParamsPtr migParams) +qemuMigrationParamsFree(qemuMonitorMigrationParamsPtr migParams) { if (!migParams) return; =20 VIR_FREE(migParams->tlsCreds); VIR_FREE(migParams->tlsHostname); -} - - -void -qemuMigrationParamsFree(qemuMonitorMigrationParamsPtr migParams) -{ - if (!migParams) - return; - - qemuMigrationParamsClear(migParams); VIR_FREE(migParams); } =20 diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index cbc63b9cbf..f11315cb9d 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -36,9 +36,6 @@ qemuMigrationParamsFromFlags(virTypedParameterPtr params, int nparams, unsigned long flags); =20 -void -qemuMigrationParamsClear(qemuMonitorMigrationParamsPtr migParams); - void qemuMigrationParamsFree(qemuMonitorMigrationParamsPtr migParams); =20 --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457761796688.9486744571068; Wed, 11 Apr 2018 07:42:41 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 942DD3133C12; Wed, 11 Apr 2018 14:42:40 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 6B11978BB8; Wed, 11 Apr 2018 14:42:40 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id DDE0D4CAAD; Wed, 11 Apr 2018 14:42:39 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgDU8008645 for ; Wed, 11 Apr 2018 10:42:13 -0400 Received: by smtp.corp.redhat.com (Postfix) id 7305A10B0F3A; Wed, 11 Apr 2018 14:42:13 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 52EE610B0F38 for ; Wed, 11 Apr 2018 14:42:13 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 16F4D10049C; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:00 +0200 Message-Id: <4c88562e3ee6d22bdfbfd9bd995c460509035646.1523456479.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 10/73] qemu: Move qemuMigrationCompression struct X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.42]); Wed, 11 Apr 2018 14:42:41 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" It provides just another view on some migration parameters so let's move it close to them. The end goal is to merge compression parameters with the rest of migration parameters since it doesn't make any sense to handle them differently. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_migration.h | 20 +------------------- src/qemu/qemu_migration_params.h | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/src/qemu/qemu_migration.h b/src/qemu/qemu_migration.h index 3f33d3013d..4e7b33445b 100644 --- a/src/qemu/qemu_migration.h +++ b/src/qemu/qemu_migration.h @@ -24,6 +24,7 @@ =20 # include "qemu_conf.h" # include "qemu_domain.h" +# include "qemu_migration_params.h" =20 /* * General function naming conventions: @@ -38,9 +39,6 @@ * - qemuMigrationJobXXX - runs on source or dest host */ =20 -typedef struct _qemuMigrationCompression qemuMigrationCompression; -typedef qemuMigrationCompression *qemuMigrationCompressionPtr; - /* All supported qemu migration flags. */ # define QEMU_MIGRATION_FLAGS \ (VIR_MIGRATE_LIVE | \ @@ -108,22 +106,6 @@ typedef enum { } qemuMigrationCompressMethod; VIR_ENUM_DECL(qemuMigrationCompressMethod) =20 -struct _qemuMigrationCompression { - unsigned long long methods; - - bool level_set; - int level; - - bool threads_set; - int threads; - - bool dthreads_set; - int dthreads; - - bool xbzrle_cache_set; - unsigned long long xbzrle_cache; -}; - qemuMigrationCompressionPtr qemuMigrationAnyCompressionParse(virTypedParameterPtr params, int nparams, diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index f11315cb9d..bb38d34cd6 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -28,6 +28,25 @@ # include "qemu_conf.h" =20 =20 +typedef struct _qemuMigrationCompression qemuMigrationCompression; +typedef qemuMigrationCompression *qemuMigrationCompressionPtr; +struct _qemuMigrationCompression { + unsigned long long methods; + + bool level_set; + int level; + + bool threads_set; + int threads; + + bool dthreads_set; + int dthreads; + + bool xbzrle_cache_set; + unsigned long long xbzrle_cache; +}; + + qemuMonitorMigrationParamsPtr qemuMigrationParamsNew(void); =20 --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457752911712.5516600754612; Wed, 11 Apr 2018 07:42:32 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 4807191FF6; Wed, 11 Apr 2018 14:42:31 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 0FC94A098D; Wed, 11 Apr 2018 14:42:31 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id C6A6F1800CAB; Wed, 11 Apr 2018 14:42:30 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgEOX008672 for ; Wed, 11 Apr 2018 10:42:14 -0400 Received: by smtp.corp.redhat.com (Postfix) id 0CE5F215CDC8; Wed, 11 Apr 2018 14:42:14 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id A8578215CDAF for ; Wed, 11 Apr 2018 14:42:13 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 1A52210049D; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:01 +0200 Message-Id: <67c96baab4870b8bf497b71c1d69d84af7970879.1523456479.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 11/73] qemu: Introduce qemuMigrationParams struct X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Wed, 11 Apr 2018 14:42:31 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Currently migration parameters are stored in a structure which mimics the QEMU migration parameters handled by query-migrate-parameters and migrate-set-parameters. The new structure will become a libvirt's abstraction on top of QEMU migration parameters, capabilities, and related stuff. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_driver.c | 6 ++-- src/qemu/qemu_migration.c | 26 +++++++------- src/qemu/qemu_migration.h | 2 +- src/qemu/qemu_migration_params.c | 62 ++++++++++++++++---------------- src/qemu/qemu_migration_params.h | 21 +++++++---- 5 files changed, 62 insertions(+), 55 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index c157ff9bb0..6e6fc130c5 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -12241,7 +12241,7 @@ qemuDomainMigratePerform(virDomainPtr dom, int ret =3D -1; const char *dconnuri =3D NULL; qemuMigrationCompressionPtr compression =3D NULL; - qemuMonitorMigrationParamsPtr migParams =3D NULL; + qemuMigrationParamsPtr migParams =3D NULL; =20 virCheckFlags(QEMU_MIGRATION_FLAGS, -1); =20 @@ -12669,7 +12669,7 @@ qemuDomainMigratePerform3(virDomainPtr dom, virQEMUDriverPtr driver =3D dom->conn->privateData; virDomainObjPtr vm; qemuMigrationCompressionPtr compression =3D NULL; - qemuMonitorMigrationParamsPtr migParams =3D NULL; + qemuMigrationParamsPtr migParams =3D NULL; int ret =3D -1; =20 virCheckFlags(QEMU_MIGRATION_FLAGS, -1); @@ -12725,7 +12725,7 @@ qemuDomainMigratePerform3Params(virDomainPtr dom, unsigned long long bandwidth =3D 0; int nbdPort =3D 0; qemuMigrationCompressionPtr compression =3D NULL; - qemuMonitorMigrationParamsPtr migParams =3D NULL; + qemuMigrationParamsPtr migParams =3D NULL; int ret =3D -1; =20 virCheckFlags(QEMU_MIGRATION_FLAGS, -1); diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index a0061c8c83..055d8a674a 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -2251,7 +2251,7 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, int rv; char *tlsAlias =3D NULL; char *secAlias =3D NULL; - qemuMonitorMigrationParamsPtr migParams =3D NULL; + qemuMigrationParamsPtr migParams =3D NULL; =20 virNWFilterReadLockFilterUpdates(); =20 @@ -2465,7 +2465,7 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, goto stopjob; =20 /* Force reset of 'tls-hostname', it's a source only parameter */ - if (VIR_STRDUP(migParams->tlsHostname, "") < 0) + if (VIR_STRDUP(migParams->params.tlsHostname, "") < 0) goto stopjob; =20 } else { @@ -3337,7 +3337,7 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, size_t nmigrate_disks, const char **migrate_disks, qemuMigrationCompressionPtr compression, - qemuMonitorMigrationParamsPtr migParams) + qemuMigrationParamsPtr migParams) { int ret =3D -1; unsigned int migrate_flags =3D QEMU_MONITOR_MIGRATE_BACKGROUND; @@ -3426,11 +3426,11 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, * connect directly to the destination. */ if (spec->destType =3D=3D MIGRATION_DEST_CONNECT_HOST || spec->destType =3D=3D MIGRATION_DEST_FD) { - if (VIR_STRDUP(migParams->tlsHostname, spec->dest.host.name) <= 0) + if (VIR_STRDUP(migParams->params.tlsHostname, spec->dest.host.= name) < 0) goto error; } else { /* Be sure there's nothing from a previous migration */ - if (VIR_STRDUP(migParams->tlsHostname, "") < 0) + if (VIR_STRDUP(migParams->params.tlsHostname, "") < 0) goto error; } } else { @@ -3733,7 +3733,7 @@ qemuMigrationSrcPerformNative(virQEMUDriverPtr driver, size_t nmigrate_disks, const char **migrate_disks, qemuMigrationCompressionPtr compression, - qemuMonitorMigrationParamsPtr migParams) + qemuMigrationParamsPtr migParams) { qemuDomainObjPrivatePtr priv =3D vm->privateData; virURIPtr uribits =3D NULL; @@ -3812,7 +3812,7 @@ qemuMigrationSrcPerformTunnel(virQEMUDriverPtr driver, size_t nmigrate_disks, const char **migrate_disks, qemuMigrationCompressionPtr compression, - qemuMonitorMigrationParamsPtr migParams) + qemuMigrationParamsPtr migParams) { int ret =3D -1; qemuMigrationSpec spec; @@ -3884,7 +3884,7 @@ qemuMigrationSrcPerformPeer2Peer2(virQEMUDriverPtr dr= iver, virStreamPtr st =3D NULL; unsigned long destflags; qemuMigrationCompressionPtr compression =3D NULL; - qemuMonitorMigrationParamsPtr migParams =3D NULL; + qemuMigrationParamsPtr migParams =3D NULL; =20 VIR_DEBUG("driver=3D%p, sconn=3D%p, dconn=3D%p, vm=3D%p, dconnuri=3D%s= , " "flags=3D0x%lx, dname=3D%s, resource=3D%lu", @@ -4039,7 +4039,7 @@ qemuMigrationSrcPerformPeer2Peer3(virQEMUDriverPtr dr= iver, const char **migrate_disks, int nbdPort, qemuMigrationCompressionPtr compression, - qemuMonitorMigrationParamsPtr migParams, + qemuMigrationParamsPtr migParams, unsigned long long bandwidth, bool useParams, unsigned long flags) @@ -4398,7 +4398,7 @@ qemuMigrationSrcPerformPeer2Peer(virQEMUDriverPtr dri= ver, const char **migrate_disks, int nbdPort, qemuMigrationCompressionPtr compression, - qemuMonitorMigrationParamsPtr migParams, + qemuMigrationParamsPtr migParams, unsigned long flags, const char *dname, unsigned long resource, @@ -4563,7 +4563,7 @@ qemuMigrationSrcPerformJob(virQEMUDriverPtr driver, const char **migrate_disks, int nbdPort, qemuMigrationCompressionPtr compression, - qemuMonitorMigrationParamsPtr migParams, + qemuMigrationParamsPtr migParams, const char *cookiein, int cookieinlen, char **cookieout, @@ -4676,7 +4676,7 @@ qemuMigrationSrcPerformPhase(virQEMUDriverPtr driver, size_t nmigrate_disks, const char **migrate_disks, qemuMigrationCompressionPtr compression, - qemuMonitorMigrationParamsPtr migParams, + qemuMigrationParamsPtr migParams, const char *cookiein, int cookieinlen, char **cookieout, @@ -4750,7 +4750,7 @@ qemuMigrationSrcPerform(virQEMUDriverPtr driver, const char **migrate_disks, int nbdPort, qemuMigrationCompressionPtr compression, - qemuMonitorMigrationParamsPtr migParams, + qemuMigrationParamsPtr migParams, const char *cookiein, int cookieinlen, char **cookieout, diff --git a/src/qemu/qemu_migration.h b/src/qemu/qemu_migration.h index 4e7b33445b..e59296fd63 100644 --- a/src/qemu/qemu_migration.h +++ b/src/qemu/qemu_migration.h @@ -182,7 +182,7 @@ qemuMigrationSrcPerform(virQEMUDriverPtr driver, const char **migrate_disks, int nbdPort, qemuMigrationCompressionPtr compression, - qemuMonitorMigrationParamsPtr migParams, + qemuMigrationParamsPtr migParams, const char *cookiein, int cookieinlen, char **cookieout, diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index c315810728..3a1816c2b9 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -38,10 +38,10 @@ VIR_LOG_INIT("qemu.qemu_migration_params"); #define QEMU_MIGRATION_TLS_ALIAS_BASE "libvirt_migrate" =20 =20 -qemuMonitorMigrationParamsPtr +qemuMigrationParamsPtr qemuMigrationParamsNew(void) { - qemuMonitorMigrationParamsPtr params; + qemuMigrationParamsPtr params; =20 if (VIR_ALLOC(params) < 0) return NULL; @@ -51,23 +51,23 @@ qemuMigrationParamsNew(void) =20 =20 void -qemuMigrationParamsFree(qemuMonitorMigrationParamsPtr migParams) +qemuMigrationParamsFree(qemuMigrationParamsPtr migParams) { if (!migParams) return; =20 - VIR_FREE(migParams->tlsCreds); - VIR_FREE(migParams->tlsHostname); + VIR_FREE(migParams->params.tlsCreds); + VIR_FREE(migParams->params.tlsHostname); VIR_FREE(migParams); } =20 =20 -qemuMonitorMigrationParamsPtr +qemuMigrationParamsPtr qemuMigrationParamsFromFlags(virTypedParameterPtr params, int nparams, unsigned long flags) { - qemuMonitorMigrationParamsPtr migParams; + qemuMigrationParamsPtr migParams; =20 if (!(migParams =3D qemuMigrationParamsNew())) return NULL; @@ -80,11 +80,11 @@ qemuMigrationParamsFromFlags(virTypedParameterPtr param= s, int rc; \ if ((rc =3D virTypedParamsGetInt(params, nparams, \ VIR_MIGRATE_PARAM_ ## PARAM, \ - &migParams->VAR)) < 0) \ + &migParams->params.VAR)) < 0) \ goto error; \ \ if (rc =3D=3D 1) \ - migParams->VAR ## _set =3D true; \ + migParams->params.VAR ## _set =3D true; \ } while (0) =20 GET(AUTO_CONVERGE_INITIAL, cpuThrottleInitial); @@ -92,8 +92,8 @@ qemuMigrationParamsFromFlags(virTypedParameterPtr params, =20 #undef GET =20 - if ((migParams->cpuThrottleInitial_set || - migParams->cpuThrottleIncrement_set) && + if ((migParams->params.cpuThrottleInitial_set || + migParams->params.cpuThrottleIncrement_set) && !(flags & VIR_MIGRATE_AUTO_CONVERGE)) { virReportError(VIR_ERR_INVALID_ARG, "%s", _("Turn auto convergence on to tune it")); @@ -112,7 +112,7 @@ int qemuMigrationParamsSet(virQEMUDriverPtr driver, virDomainObjPtr vm, int asyncJob, - qemuMonitorMigrationParamsPtr migParams) + qemuMigrationParamsPtr migParams) { qemuDomainObjPrivatePtr priv =3D vm->privateData; int ret =3D -1; @@ -120,7 +120,7 @@ qemuMigrationParamsSet(virQEMUDriverPtr driver, if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) return -1; =20 - if (qemuMonitorSetMigrationParams(priv->mon, migParams) < 0) + if (qemuMonitorSetMigrationParams(priv->mon, &migParams->params) < 0) goto cleanup; =20 ret =3D 0; @@ -153,7 +153,7 @@ qemuMigrationParamsCheckTLSCreds(virQEMUDriverPtr drive= r, { int ret =3D -1; qemuDomainObjPrivatePtr priv =3D vm->privateData; - qemuMonitorMigrationParamsPtr migParams =3D NULL; + qemuMigrationParamsPtr migParams =3D NULL; =20 if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) return -1; @@ -161,11 +161,11 @@ qemuMigrationParamsCheckTLSCreds(virQEMUDriverPtr dri= ver, if (!(migParams =3D qemuMigrationParamsNew())) goto cleanup; =20 - if (qemuMonitorGetMigrationParams(priv->mon, migParams) < 0) + if (qemuMonitorGetMigrationParams(priv->mon, &migParams->params) < 0) goto cleanup; =20 /* NB: Could steal NULL pointer too! Let caller decide what to do. */ - VIR_STEAL_PTR(priv->migTLSAlias, migParams->tlsCreds); + VIR_STEAL_PTR(priv->migTLSAlias, migParams->params.tlsCreds); =20 ret =3D 0; =20 @@ -251,7 +251,7 @@ qemuMigrationParamsAddTLSObjects(virQEMUDriverPtr drive= r, int asyncJob, char **tlsAlias, char **secAlias, - qemuMonitorMigrationParamsPtr migParams) + qemuMigrationParamsPtr migParams) { qemuDomainObjPrivatePtr priv =3D vm->privateData; virJSONValuePtr tlsProps =3D NULL; @@ -274,7 +274,7 @@ qemuMigrationParamsAddTLSObjects(virQEMUDriverPtr drive= r, *tlsAlias, &tlsProps) < 0) goto error; =20 - if (VIR_STRDUP(migParams->tlsCreds, *tlsAlias) < 0) + if (VIR_STRDUP(migParams->params.tlsCreds, *tlsAlias) < 0) goto error; =20 return 0; @@ -302,7 +302,7 @@ int qemuMigrationParamsSetEmptyTLS(virQEMUDriverPtr driver, virDomainObjPtr vm, int asyncJob, - qemuMonitorMigrationParamsPtr migParams) + qemuMigrationParamsPtr migParams) { qemuDomainObjPrivatePtr priv =3D vm->privateData; =20 @@ -312,8 +312,8 @@ qemuMigrationParamsSetEmptyTLS(virQEMUDriverPtr driver, if (!priv->migTLSAlias) return 0; =20 - if (VIR_STRDUP(migParams->tlsCreds, "") < 0 || - VIR_STRDUP(migParams->tlsHostname, "") < 0) + if (VIR_STRDUP(migParams->params.tlsCreds, "") < 0 || + VIR_STRDUP(migParams->params.tlsHostname, "") < 0) return -1; =20 return 0; @@ -325,7 +325,7 @@ qemuMigrationParamsSetCompression(virQEMUDriverPtr driv= er, virDomainObjPtr vm, int asyncJob, qemuMigrationCompressionPtr compression, - qemuMonitorMigrationParamsPtr migParams) + qemuMigrationParamsPtr migParams) { int ret =3D -1; qemuDomainObjPrivatePtr priv =3D vm->privateData; @@ -347,14 +347,14 @@ qemuMigrationParamsSetCompression(virQEMUDriverPtr dr= iver, if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) return -1; =20 - migParams->compressLevel_set =3D compression->level_set; - migParams->compressLevel =3D compression->level; + migParams->params.compressLevel_set =3D compression->level_set; + migParams->params.compressLevel =3D compression->level; =20 - migParams->compressThreads_set =3D compression->threads_set; - migParams->compressThreads =3D compression->threads; + migParams->params.compressThreads_set =3D compression->threads_set; + migParams->params.compressThreads =3D compression->threads; =20 - migParams->decompressThreads_set =3D compression->dthreads_set; - migParams->decompressThreads =3D compression->dthreads; + migParams->params.decompressThreads_set =3D compression->dthreads_set; + migParams->params.decompressThreads =3D compression->dthreads; =20 if (compression->xbzrle_cache_set && qemuMonitorSetMigrationCacheSize(priv->mon, @@ -389,7 +389,7 @@ qemuMigrationParamsResetTLS(virQEMUDriverPtr driver, qemuDomainObjPrivatePtr priv =3D vm->privateData; char *tlsAlias =3D NULL; char *secAlias =3D NULL; - qemuMonitorMigrationParamsPtr migParams =3D NULL; + qemuMigrationParamsPtr migParams =3D NULL; int ret =3D -1; =20 if (qemuMigrationParamsCheckTLSCreds(driver, vm, asyncJob) < 0) @@ -412,8 +412,8 @@ qemuMigrationParamsResetTLS(virQEMUDriverPtr driver, qemuDomainDelTLSObjects(driver, vm, asyncJob, secAlias, tlsAlias); qemuDomainSecretInfoFree(&priv->migSecinfo); =20 - if (VIR_STRDUP(migParams->tlsCreds, "") < 0 || - VIR_STRDUP(migParams->tlsHostname, "") < 0 || + if (VIR_STRDUP(migParams->params.tlsCreds, "") < 0 || + VIR_STRDUP(migParams->params.tlsHostname, "") < 0 || qemuMigrationParamsSet(driver, vm, asyncJob, migParams) < 0) goto cleanup; =20 diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index bb38d34cd6..57b7dd6666 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -47,22 +47,29 @@ struct _qemuMigrationCompression { }; =20 =20 -qemuMonitorMigrationParamsPtr +typedef struct _qemuMigrationParams qemuMigrationParams; +typedef qemuMigrationParams *qemuMigrationParamsPtr; +struct _qemuMigrationParams { + qemuMonitorMigrationParams params; +}; + + +qemuMigrationParamsPtr qemuMigrationParamsNew(void); =20 -qemuMonitorMigrationParamsPtr +qemuMigrationParamsPtr qemuMigrationParamsFromFlags(virTypedParameterPtr params, int nparams, unsigned long flags); =20 void -qemuMigrationParamsFree(qemuMonitorMigrationParamsPtr migParams); +qemuMigrationParamsFree(qemuMigrationParamsPtr migParams); =20 int qemuMigrationParamsSet(virQEMUDriverPtr driver, virDomainObjPtr vm, int asyncJob, - qemuMonitorMigrationParamsPtr migParams); + qemuMigrationParamsPtr migParams); =20 int qemuMigrationParamsCheckSetupTLS(virQEMUDriverPtr driver, @@ -78,20 +85,20 @@ qemuMigrationParamsAddTLSObjects(virQEMUDriverPtr drive= r, int asyncJob, char **tlsAlias, char **secAlias, - qemuMonitorMigrationParamsPtr migParams); + qemuMigrationParamsPtr migParams); =20 int qemuMigrationParamsSetEmptyTLS(virQEMUDriverPtr driver, virDomainObjPtr vm, int asyncJob, - qemuMonitorMigrationParamsPtr migParams); + qemuMigrationParamsPtr migParams); =20 int qemuMigrationParamsSetCompression(virQEMUDriverPtr driver, virDomainObjPtr vm, int asyncJob, qemuMigrationCompressionPtr compression, - qemuMonitorMigrationParamsPtr migParams); + qemuMigrationParamsPtr migParams); =20 void qemuMigrationParamsReset(virQEMUDriverPtr driver, --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523780509972327.38612867461904; Sun, 15 Apr 2018 01:21:49 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 43FBF87625; Sun, 15 Apr 2018 08:21:48 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id D2CE075520; Sun, 15 Apr 2018 08:21:47 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 73A081805972; Sun, 15 Apr 2018 08:21:47 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgDIl008663 for ; Wed, 11 Apr 2018 10:42:13 -0400 Received: by smtp.corp.redhat.com (Postfix) id C82442026E0E; Wed, 11 Apr 2018 14:42:13 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id A83FF2026609 for ; Wed, 11 Apr 2018 14:42:13 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 1D70610049F; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:02 +0200 Message-Id: <7ede36bb2a682adcbccf4913e77d799537b85683.1523456479.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 12/73] qemu: Reset migration parameters in qemuMigrationSrcCleanup X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Sun, 15 Apr 2018 08:21:48 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" When connection to the client which controls a non-p2p migration gets closed between Perform and Confirm phase, we don't know whether the domain was successfully migrated or not. Thus, we have to leave the domain paused and just cleanup the migration job and reset migration parameters. Previously we didn't reset the parameters and future save or snapshot operations would see wrong environment (and could fail because of it) in case the domain stayed running on the source host. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_migration.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 055d8a674a..b7ef535b5d 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -1834,6 +1834,7 @@ qemuMigrationSrcCleanup(virDomainObjPtr vm, VIR_WARN("Migration of domain %s finished but we don't know if the" " domain was successfully started on destination or not", vm->def->name); + qemuMigrationParamsReset(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT); /* clear the job and let higher levels decide what to do */ qemuDomainObjDiscardAsyncJob(driver, vm); break; --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457771831240.9491648170008; Wed, 11 Apr 2018 07:42:51 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5111931AC717; Wed, 11 Apr 2018 14:42:50 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 2403078BA6; Wed, 11 Apr 2018 14:42:50 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id C1108180BAE8; Wed, 11 Apr 2018 14:42:49 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgEHp008671 for ; Wed, 11 Apr 2018 10:42:14 -0400 Received: by smtp.corp.redhat.com (Postfix) id 0625B202698A; Wed, 11 Apr 2018 14:42:14 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id BDDB72026E03 for ; Wed, 11 Apr 2018 14:42:13 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 20ADB1004A0; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:03 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 13/73] qemu: Store original migration params in job X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.42]); Wed, 11 Apr 2018 14:42:50 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Any job which touches migration parameters will first store their original values (i.e., QEMU defaults) to qemuDomainJobObj to make it easier to reset them back once the job finishes. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_domain.c | 3 +++ src/qemu/qemu_domain.h | 3 +++ src/qemu/qemu_migration.c | 9 ++++++++ src/qemu/qemu_migration_params.c | 38 ++++++++++++++++++++++++++++++++ src/qemu/qemu_migration_params.h | 5 +++++ 5 files changed, 58 insertions(+) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 84476de11b..78f5dc360c 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -336,6 +336,8 @@ qemuDomainObjResetAsyncJob(qemuDomainObjPrivatePtr priv) job->dumpCompleted =3D false; VIR_FREE(job->error); VIR_FREE(job->current); + qemuMigrationParamsFree(job->migParams); + job->migParams =3D NULL; } =20 void @@ -350,6 +352,7 @@ qemuDomainObjRestoreJob(virDomainObjPtr obj, job->asyncJob =3D priv->job.asyncJob; job->asyncOwner =3D priv->job.asyncOwner; job->phase =3D priv->job.phase; + VIR_STEAL_PTR(job->migParams, priv->job.migParams); =20 qemuDomainObjResetJob(priv); qemuDomainObjResetAsyncJob(priv); diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index 415b2ca093..1828b64284 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -34,6 +34,7 @@ # include "qemu_agent.h" # include "qemu_conf.h" # include "qemu_capabilities.h" +# include "qemu_migration_params.h" # include "virmdev.h" # include "virchrdev.h" # include "virobject.h" @@ -177,6 +178,8 @@ struct qemuDomainJobObj { bool postcopyEnabled; /* post-copy migration was enabled= */ char *error; /* job event completion error */ bool dumpCompleted; /* dump completed */ + + qemuMigrationParamsPtr migParams; }; =20 typedef void (*qemuDomainCleanupCallback)(virQEMUDriverPtr driver, diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index b7ef535b5d..96ca5593cf 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -2448,6 +2448,9 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, dataFD[1] =3D -1; /* 'st' owns the FD now & will close it */ } =20 + if (qemuMigrationParamsCheck(driver, vm, QEMU_ASYNC_JOB_MIGRATION_IN) = < 0) + goto stopjob; + if (qemuMigrationParamsSetCompression(driver, vm, QEMU_ASYNC_JOB_MIGRA= TION_IN, compression, migParams) < 0) goto stopjob; @@ -4597,6 +4600,9 @@ qemuMigrationSrcPerformJob(virQEMUDriverPtr driver, =20 qemuMigrationSrcStoreDomainState(vm); =20 + if (qemuMigrationParamsCheck(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT)= < 0) + goto endjob; + if ((flags & (VIR_MIGRATE_TUNNELLED | VIR_MIGRATE_PEER2PEER))) { ret =3D qemuMigrationSrcPerformPeer2Peer(driver, conn, vm, xmlin, = persist_xml, dconnuri, uri, graphicsuri,= listenAddress, @@ -4700,6 +4706,9 @@ qemuMigrationSrcPerformPhase(virQEMUDriverPtr driver, virCloseCallbacksUnset(driver->closeCallbacks, vm, qemuMigrationSrcCleanup); =20 + if (qemuMigrationParamsCheck(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT)= < 0) + goto endjob; + ret =3D qemuMigrationSrcPerformNative(driver, vm, persist_xml, uri, co= okiein, cookieinlen, cookieout, cookieoutlen, flags, resource, NULL, graphicsuri, diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 3a1816c2b9..465132fd9c 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -428,6 +428,44 @@ qemuMigrationParamsResetTLS(virQEMUDriverPtr driver, } =20 =20 +/** + * qemuMigrationParamsCheck: + * + * Check supported migration parameters and keep their original values in + * qemuDomainJobObj so that we can properly reset them at the end of migra= tion. + */ +int +qemuMigrationParamsCheck(virQEMUDriverPtr driver, + virDomainObjPtr vm, + int asyncJob) +{ + qemuDomainObjPrivatePtr priv =3D vm->privateData; + qemuMigrationParamsPtr origParams =3D NULL; + int ret =3D -1; + + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + return -1; + + if (!(origParams =3D qemuMigrationParamsNew())) + goto cleanup; + + if (qemuMonitorGetMigrationParams(priv->mon, &origParams->params) < 0) + goto cleanup; + + ret =3D 0; + + cleanup: + if (qemuDomainObjExitMonitor(driver, vm) < 0) + ret =3D -1; + + if (ret =3D=3D 0) + VIR_STEAL_PTR(priv->job.migParams, origParams); + qemuMigrationParamsFree(origParams); + + return ret; +} + + /* * qemuMigrationParamsReset: * diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index 57b7dd6666..c283a81b51 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -100,6 +100,11 @@ qemuMigrationParamsSetCompression(virQEMUDriverPtr dri= ver, qemuMigrationCompressionPtr compression, qemuMigrationParamsPtr migParams); =20 +int +qemuMigrationParamsCheck(virQEMUDriverPtr driver, + virDomainObjPtr vm, + int asyncJob); + void qemuMigrationParamsReset(virQEMUDriverPtr driver, virDomainObjPtr vm, --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457768456597.499845951444; Wed, 11 Apr 2018 07:42:48 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 2B4753133E9F; Wed, 11 Apr 2018 14:42:47 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 04998A0983; Wed, 11 Apr 2018 14:42:47 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id C21524CA97; Wed, 11 Apr 2018 14:42:46 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgEPP008666 for ; Wed, 11 Apr 2018 10:42:14 -0400 Received: by smtp.corp.redhat.com (Postfix) id E00C3AB3E2; Wed, 11 Apr 2018 14:42:13 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id BEF1AAB3E6 for ; Wed, 11 Apr 2018 14:42:13 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 23D4B1004A1; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:04 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 14/73] qemu: Typedef struct qemuDomainJobObj X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.46]); Wed, 11 Apr 2018 14:42:47 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_domain.c | 6 +++--- src/qemu/qemu_domain.h | 8 +++++--- src/qemu/qemu_process.c | 4 ++-- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 78f5dc360c..e997c14aad 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -309,7 +309,7 @@ qemuDomainObjInitJob(qemuDomainObjPrivatePtr priv) static void qemuDomainObjResetJob(qemuDomainObjPrivatePtr priv) { - struct qemuDomainJobObj *job =3D &priv->job; + qemuDomainJobObjPtr job =3D &priv->job; =20 job->active =3D QEMU_JOB_NONE; job->owner =3D 0; @@ -320,7 +320,7 @@ qemuDomainObjResetJob(qemuDomainObjPrivatePtr priv) static void qemuDomainObjResetAsyncJob(qemuDomainObjPrivatePtr priv) { - struct qemuDomainJobObj *job =3D &priv->job; + qemuDomainJobObjPtr job =3D &priv->job; =20 job->asyncJob =3D QEMU_ASYNC_JOB_NONE; job->asyncOwner =3D 0; @@ -342,7 +342,7 @@ qemuDomainObjResetAsyncJob(qemuDomainObjPrivatePtr priv) =20 void qemuDomainObjRestoreJob(virDomainObjPtr obj, - struct qemuDomainJobObj *job) + qemuDomainJobObjPtr job) { qemuDomainObjPrivatePtr priv =3D obj->privateData; =20 diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index 1828b64284..2c474ae4a4 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -154,7 +154,9 @@ struct _qemuDomainJobInfo { qemuDomainMirrorStats mirrorStats; }; =20 -struct qemuDomainJobObj { +typedef struct _qemuDomainJobObj qemuDomainJobObj; +typedef qemuDomainJobObj *qemuDomainJobObjPtr; +struct _qemuDomainJobObj { virCond cond; /* Use to coordinate jobs */ qemuDomainJob active; /* Currently running job */ unsigned long long owner; /* Thread id which set current job= */ @@ -254,7 +256,7 @@ typedef qemuDomainObjPrivate *qemuDomainObjPrivatePtr; struct _qemuDomainObjPrivate { virQEMUDriverPtr driver; =20 - struct qemuDomainJobObj job; + qemuDomainJobObj job; =20 virBitmapPtr namespaces; =20 @@ -513,7 +515,7 @@ void qemuDomainObjSetJobPhase(virQEMUDriverPtr driver, void qemuDomainObjSetAsyncJobMask(virDomainObjPtr obj, unsigned long long allowedJobs); void qemuDomainObjRestoreJob(virDomainObjPtr obj, - struct qemuDomainJobObj *job); + qemuDomainJobObjPtr job); void qemuDomainObjDiscardAsyncJob(virQEMUDriverPtr driver, virDomainObjPtr obj); void qemuDomainObjReleaseAsyncJob(virDomainObjPtr obj); diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 11276dace9..dd97cd7e7d 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -3186,7 +3186,7 @@ qemuProcessRecoverMigrationOut(virQEMUDriverPtr drive= r, static int qemuProcessRecoverJob(virQEMUDriverPtr driver, virDomainObjPtr vm, - const struct qemuDomainJobObj *job, + const qemuDomainJobObj *job, unsigned int *stopFlags) { qemuDomainObjPrivatePtr priv =3D vm->privateData; @@ -7262,7 +7262,7 @@ qemuProcessReconnect(void *opaque) virQEMUDriverPtr driver =3D data->driver; virDomainObjPtr obj =3D data->obj; qemuDomainObjPrivatePtr priv; - struct qemuDomainJobObj oldjob; + qemuDomainJobObj oldjob; int state; int reason; virQEMUDriverConfigPtr cfg; --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 15234577561791012.329548372971; Wed, 11 Apr 2018 07:42:36 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id D3636883B6; Wed, 11 Apr 2018 14:42:34 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 896EE5FC1E; Wed, 11 Apr 2018 14:42:34 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 44E10180BAD9; Wed, 11 Apr 2018 14:42:34 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgEoS008686 for ; Wed, 11 Apr 2018 10:42:14 -0400 Received: by smtp.corp.redhat.com (Postfix) id 5BEF3AB3E4; Wed, 11 Apr 2018 14:42:14 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 3B96A946D5 for ; Wed, 11 Apr 2018 14:42:14 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 272A91004CC; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:05 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 15/73] qemu: Pass job object to qemuProcessRecoverMigration{In, Out} X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Wed, 11 Apr 2018 14:42:35 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Currently, only job->phase is passed and both APIs will need to look at more details about the job. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_process.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index dd97cd7e7d..fd81933f2e 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -3034,7 +3034,7 @@ qemuProcessUpdateState(virQEMUDriverPtr driver, virDo= mainObjPtr vm) static int qemuProcessRecoverMigrationIn(virQEMUDriverPtr driver, virDomainObjPtr vm, - qemuMigrationJobPhase phase, + const qemuDomainJobObj *job, virDomainState state, int reason) { @@ -3043,7 +3043,7 @@ qemuProcessRecoverMigrationIn(virQEMUDriverPtr driver, (state =3D=3D VIR_DOMAIN_RUNNING && reason =3D=3D VIR_DOMAIN_RUNNING_POSTCOPY); =20 - switch (phase) { + switch ((qemuMigrationJobPhase) job->phase) { case QEMU_MIGRATION_PHASE_NONE: case QEMU_MIGRATION_PHASE_PERFORM2: case QEMU_MIGRATION_PHASE_BEGIN3: @@ -3092,7 +3092,7 @@ qemuProcessRecoverMigrationIn(virQEMUDriverPtr driver, static int qemuProcessRecoverMigrationOut(virQEMUDriverPtr driver, virDomainObjPtr vm, - qemuMigrationJobPhase phase, + const qemuDomainJobObj *job, virDomainState state, int reason, unsigned int *stopFlags) @@ -3102,7 +3102,7 @@ qemuProcessRecoverMigrationOut(virQEMUDriverPtr drive= r, reason =3D=3D VIR_DOMAIN_PAUSED_POSTCOPY_FAILED); bool resume =3D false; =20 - switch (phase) { + switch ((qemuMigrationJobPhase) job->phase) { case QEMU_MIGRATION_PHASE_NONE: case QEMU_MIGRATION_PHASE_PREPARE: case QEMU_MIGRATION_PHASE_FINISH2: @@ -3197,13 +3197,13 @@ qemuProcessRecoverJob(virQEMUDriverPtr driver, =20 switch (job->asyncJob) { case QEMU_ASYNC_JOB_MIGRATION_OUT: - if (qemuProcessRecoverMigrationOut(driver, vm, job->phase, + if (qemuProcessRecoverMigrationOut(driver, vm, job, state, reason, stopFlags) < 0) return -1; break; =20 case QEMU_ASYNC_JOB_MIGRATION_IN: - if (qemuProcessRecoverMigrationIn(driver, vm, job->phase, + if (qemuProcessRecoverMigrationIn(driver, vm, job, state, reason) < 0) return -1; break; --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 152345775907173.25021593207339; Wed, 11 Apr 2018 07:42:39 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id C83F93137720; Wed, 11 Apr 2018 14:42:37 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 9C4918779A; Wed, 11 Apr 2018 14:42:37 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 5EE044CAA8; Wed, 11 Apr 2018 14:42:37 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgECN008688 for ; Wed, 11 Apr 2018 10:42:14 -0400 Received: by smtp.corp.redhat.com (Postfix) id 781AA10B0F3B; Wed, 11 Apr 2018 14:42:14 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 3B1B310B0F38 for ; Wed, 11 Apr 2018 14:42:14 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 2A7211004CE; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:06 +0200 Message-Id: <4bfe1f90247546be48c67e00a89eb88cb3f5980b.1523456479.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 16/73] qemu: Reset all migration parameters X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.44]); Wed, 11 Apr 2018 14:42:38 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Restore the original values of all migration parameters we store in qemuDomainJobObj instead of explicitly resting only a limited set of them. The result is not strictly equivalent to the previous code wrt reseting TLS state because the previous code would only reset it if we changed it before while the new code will reset it always if QEMU supports TLS migration. This is not a problem for the parameters themselves, but it can cause spurious errors about missing TLS objects being logged at the end of non-TLS migration. This issue will be fixed ~50 patches later. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_migration.c | 20 +++++++++---- src/qemu/qemu_migration_params.c | 48 +++++++++++--------------------- src/qemu/qemu_migration_params.h | 3 +- src/qemu/qemu_process.c | 4 +-- 4 files changed, 34 insertions(+), 41 deletions(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 96ca5593cf..72fcae77f4 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -1834,7 +1834,8 @@ qemuMigrationSrcCleanup(virDomainObjPtr vm, VIR_WARN("Migration of domain %s finished but we don't know if the" " domain was successfully started on destination or not", vm->def->name); - qemuMigrationParamsReset(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT); + qemuMigrationParamsReset(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT, + priv->job.migParams); /* clear the job and let higher levels decide what to do */ qemuDomainObjDiscardAsyncJob(driver, vm); break; @@ -2593,7 +2594,8 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, return ret; =20 stopjob: - qemuMigrationParamsReset(driver, vm, QEMU_ASYNC_JOB_MIGRATION_IN); + qemuMigrationParamsReset(driver, vm, QEMU_ASYNC_JOB_MIGRATION_IN, + priv->job.migParams); =20 if (stopProcess) { unsigned int stopFlags =3D VIR_QEMU_PROCESS_STOP_MIGRATED; @@ -2969,7 +2971,8 @@ qemuMigrationSrcConfirmPhase(virQEMUDriverPtr driver, qemuDomainEventQueue(driver, event); } =20 - qemuMigrationParamsReset(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT); + qemuMigrationParamsReset(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT, + priv->job.migParams); =20 if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver-= >caps) < 0) VIR_WARN("Failed to save status on vm %s", vm->def->name); @@ -4581,6 +4584,7 @@ qemuMigrationSrcPerformJob(virQEMUDriverPtr driver, int ret =3D -1; virErrorPtr orig_err =3D NULL; virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); + qemuDomainObjPrivatePtr priv =3D vm->privateData; =20 if (qemuMigrationJobStart(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT) < = 0) goto cleanup; @@ -4641,7 +4645,8 @@ qemuMigrationSrcPerformJob(virQEMUDriverPtr driver, * here */ if (!v3proto && ret < 0) - qemuMigrationParamsReset(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT); + qemuMigrationParamsReset(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT, + priv->job.migParams); =20 if (qemuMigrationSrcRestoreDomainState(driver, vm)) { event =3D virDomainEventLifecycleNewFromObj(vm, @@ -4691,6 +4696,7 @@ qemuMigrationSrcPerformPhase(virQEMUDriverPtr driver, unsigned long flags, unsigned long resource) { + qemuDomainObjPrivatePtr priv =3D vm->privateData; virObjectEventPtr event =3D NULL; int ret =3D -1; =20 @@ -4731,7 +4737,8 @@ qemuMigrationSrcPerformPhase(virQEMUDriverPtr driver, =20 endjob: if (ret < 0) { - qemuMigrationParamsReset(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT); + qemuMigrationParamsReset(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT, + priv->job.migParams); qemuMigrationJobFinish(driver, vm); } else { qemuMigrationJobContinue(vm); @@ -5187,7 +5194,8 @@ qemuMigrationDstFinish(virQEMUDriverPtr driver, VIR_FREE(priv->job.completed); } =20 - qemuMigrationParamsReset(driver, vm, QEMU_ASYNC_JOB_MIGRATION_IN); + qemuMigrationParamsReset(driver, vm, QEMU_ASYNC_JOB_MIGRATION_IN, + priv->job.migParams); =20 qemuMigrationJobFinish(driver, vm); if (!virDomainObjIsActive(vm)) diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 465132fd9c..72836ba9fa 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -378,30 +378,19 @@ qemuMigrationParamsSetCompression(virQEMUDriverPtr dr= iver, * * Deconstruct all the setup possibly done for TLS - delete the TLS and * security objects, free the secinfo, and reset the migration params to "= ". - * - * Returns 0 on success, -1 on failure */ -static int +static void qemuMigrationParamsResetTLS(virQEMUDriverPtr driver, virDomainObjPtr vm, - int asyncJob) + int asyncJob, + qemuMigrationParamsPtr origParams) { - qemuDomainObjPrivatePtr priv =3D vm->privateData; char *tlsAlias =3D NULL; char *secAlias =3D NULL; - qemuMigrationParamsPtr migParams =3D NULL; - int ret =3D -1; =20 - if (qemuMigrationParamsCheckTLSCreds(driver, vm, asyncJob) < 0) - return -1; - - /* If the tls-creds doesn't exist or if they're set to "" then there's - * nothing to do since we never set anything up */ - if (!priv->migTLSAlias || !*priv->migTLSAlias) - return 0; - - if (!(migParams =3D qemuMigrationParamsNew())) - goto cleanup; + /* If QEMU does not support TLS migration we didn't set the aliases. */ + if (!origParams->params.tlsCreds) + return; =20 /* NB: If either or both fail to allocate memory we can still proceed * since the next time we migrate another deletion attempt will be @@ -410,21 +399,10 @@ qemuMigrationParamsResetTLS(virQEMUDriverPtr driver, secAlias =3D qemuDomainGetSecretAESAlias(QEMU_MIGRATION_TLS_ALIAS_BASE= , false); =20 qemuDomainDelTLSObjects(driver, vm, asyncJob, secAlias, tlsAlias); - qemuDomainSecretInfoFree(&priv->migSecinfo); + qemuDomainSecretInfoFree(&QEMU_DOMAIN_PRIVATE(vm)->migSecinfo); =20 - if (VIR_STRDUP(migParams->params.tlsCreds, "") < 0 || - VIR_STRDUP(migParams->params.tlsHostname, "") < 0 || - qemuMigrationParamsSet(driver, vm, asyncJob, migParams) < 0) - goto cleanup; - - ret =3D 0; - - cleanup: VIR_FREE(tlsAlias); VIR_FREE(secAlias); - qemuMigrationParamsFree(migParams); - - return ret; } =20 =20 @@ -475,16 +453,22 @@ qemuMigrationParamsCheck(virQEMUDriverPtr driver, void qemuMigrationParamsReset(virQEMUDriverPtr driver, virDomainObjPtr vm, - int asyncJob) + int asyncJob, + qemuMigrationParamsPtr origParams) { qemuMonitorMigrationCaps cap; virErrorPtr err =3D virSaveLastError(); =20 + VIR_DEBUG("Resetting migration parameters %p", origParams); + if (!virDomainObjIsActive(vm)) goto cleanup; =20 - if (qemuMigrationParamsResetTLS(driver, vm, asyncJob) < 0) - goto cleanup; + if (origParams) { + if (qemuMigrationParamsSet(driver, vm, asyncJob, origParams) < 0) + goto cleanup; + qemuMigrationParamsResetTLS(driver, vm, asyncJob, origParams); + } =20 for (cap =3D 0; cap < QEMU_MONITOR_MIGRATION_CAPS_LAST; cap++) { if (qemuMigrationCapsGet(vm, cap) && diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index c283a81b51..b7649128f8 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -108,7 +108,8 @@ qemuMigrationParamsCheck(virQEMUDriverPtr driver, void qemuMigrationParamsReset(virQEMUDriverPtr driver, virDomainObjPtr vm, - int asyncJob); + int asyncJob, + qemuMigrationParamsPtr origParams); =20 int qemuMigrationCapsCheck(virQEMUDriverPtr driver, diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index fd81933f2e..6aa4f4ed71 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -3085,7 +3085,7 @@ qemuProcessRecoverMigrationIn(virQEMUDriverPtr driver, break; } =20 - qemuMigrationParamsReset(driver, vm, QEMU_ASYNC_JOB_NONE); + qemuMigrationParamsReset(driver, vm, QEMU_ASYNC_JOB_NONE, job->migPara= ms); return 0; } =20 @@ -3179,7 +3179,7 @@ qemuProcessRecoverMigrationOut(virQEMUDriverPtr drive= r, } } =20 - qemuMigrationParamsReset(driver, vm, QEMU_ASYNC_JOB_NONE); + qemuMigrationParamsReset(driver, vm, QEMU_ASYNC_JOB_NONE, job->migPara= ms); return 0; } =20 --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523780522523529.5995277311889; Sun, 15 Apr 2018 01:22:02 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 1071A81DEA; Sun, 15 Apr 2018 08:22:01 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id CD76763F96; Sun, 15 Apr 2018 08:22:00 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 747E4180215E; Sun, 15 Apr 2018 08:22:00 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgEKu008690 for ; Wed, 11 Apr 2018 10:42:14 -0400 Received: by smtp.corp.redhat.com (Postfix) id 82A47215CDC8; Wed, 11 Apr 2018 14:42:14 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 46446215CDAF for ; Wed, 11 Apr 2018 14:42:14 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 2D8D41004CF; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:07 +0200 Message-Id: <0e672dfebb1abc8fa7d57fcdaf9b1ba436b50125.1523456479.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 17/73] qemu: Drop qemuMigrationParamsCheckSetupTLS X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Sun, 15 Apr 2018 08:22:01 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" The code can be merged directly in qemuMigrationParamsAddTLSObjects. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_migration.c | 15 ------- src/qemu/qemu_migration_params.c | 73 ++++++++++---------------------- src/qemu/qemu_migration_params.h | 6 --- 3 files changed, 23 insertions(+), 71 deletions(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 72fcae77f4..633f0120bb 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -2042,7 +2042,6 @@ qemuMigrationSrcBegin(virConnectPtr conn, unsigned long flags) { virQEMUDriverPtr driver =3D conn->privateData; - virQEMUDriverConfigPtr cfg =3D NULL; char *xml =3D NULL; qemuDomainAsyncJob asyncJob; =20 @@ -2076,12 +2075,6 @@ qemuMigrationSrcBegin(virConnectPtr conn, nmigrate_disks, migrate_disks, = flags))) goto endjob; =20 - if (flags & VIR_MIGRATE_TLS) { - cfg =3D virQEMUDriverGetConfig(driver); - if (qemuMigrationParamsCheckSetupTLS(driver, cfg, vm, asyncJob) < = 0) - goto endjob; - } - if ((flags & VIR_MIGRATE_CHANGE_PROTECTION)) { /* We keep the job active across API calls until the confirm() cal= l. * This prevents any other APIs being invoked while migration is t= aking @@ -2098,7 +2091,6 @@ qemuMigrationSrcBegin(virConnectPtr conn, } =20 cleanup: - virObjectUnref(cfg); virDomainObjEndAPI(&vm); return xml; =20 @@ -2460,10 +2452,6 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, * set the migration TLS parameters */ if (flags & VIR_MIGRATE_TLS) { cfg =3D virQEMUDriverGetConfig(driver); - if (qemuMigrationParamsCheckSetupTLS(driver, cfg, vm, - QEMU_ASYNC_JOB_MIGRATION_IN) = < 0) - goto stopjob; - if (qemuMigrationParamsAddTLSObjects(driver, vm, cfg, true, QEMU_ASYNC_JOB_MIGRATION_IN, &tlsAlias, &secAlias, migPara= ms) < 0) @@ -3421,9 +3409,6 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, =20 if (flags & VIR_MIGRATE_TLS) { cfg =3D virQEMUDriverGetConfig(driver); - - /* Begin/CheckSetupTLS already set up migTLSAlias, the following - * assumes that and adds the TLS objects to the domain. */ if (qemuMigrationParamsAddTLSObjects(driver, vm, cfg, false, QEMU_ASYNC_JOB_MIGRATION_OUT, &tlsAlias, &secAlias, migPara= ms) < 0) diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 72836ba9fa..d3a4a6d896 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -179,56 +179,6 @@ qemuMigrationParamsCheckTLSCreds(virQEMUDriverPtr driv= er, } =20 =20 -/* qemuMigrationParamsCheckSetupTLS - * @driver: pointer to qemu driver - * @vm: domain object - * @cfg: configuration pointer - * @asyncJob: migration job to join - * - * Check if TLS is possible and set up the environment. Assumes the caller - * desires to use TLS (e.g. caller found VIR_MIGRATE_TLS flag). - * - * Ensure the qemu.conf has been properly configured to add an entry for - * "migrate_tls_x509_cert_dir". Also check if the "tls-creds" parameter - * was present from a query of migration parameters - * - * Returns 0 on success, -1 on error/failure - */ -int -qemuMigrationParamsCheckSetupTLS(virQEMUDriverPtr driver, - virQEMUDriverConfigPtr cfg, - virDomainObjPtr vm, - int asyncJob) -{ - qemuDomainObjPrivatePtr priv =3D vm->privateData; - - if (!cfg->migrateTLSx509certdir) { - virReportError(VIR_ERR_OPERATION_INVALID, "%s", - _("host migration TLS directory not configured")); - return -1; - } - - if (qemuMigrationParamsCheckTLSCreds(driver, vm, asyncJob) < 0) - return -1; - - if (!priv->migTLSAlias) { - virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", - _("TLS migration is not supported with this " - "QEMU binary")); - return -1; - } - - /* If there's a secret, then grab/store it now using the connection */ - if (cfg->migrateTLSx509secretUUID && - !(priv->migSecinfo =3D - qemuDomainSecretInfoTLSNew(priv, QEMU_MIGRATION_TLS_ALIAS_BASE, - cfg->migrateTLSx509secretUUID))) - return -1; - - return 0; -} - - /* qemuMigrationParamsAddTLSObjects * @driver: pointer to qemu driver * @vm: domain object @@ -257,6 +207,29 @@ qemuMigrationParamsAddTLSObjects(virQEMUDriverPtr driv= er, virJSONValuePtr tlsProps =3D NULL; virJSONValuePtr secProps =3D NULL; =20 + if (!cfg->migrateTLSx509certdir) { + virReportError(VIR_ERR_OPERATION_INVALID, "%s", + _("host migration TLS directory not configured")); + goto error; + } + + if (qemuMigrationParamsCheckTLSCreds(driver, vm, asyncJob) < 0) + goto error; + + if (!priv->migTLSAlias) { + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", + _("TLS migration is not supported with this " + "QEMU binary")); + goto error; + } + + /* If there's a secret, then grab/store it now using the connection */ + if (cfg->migrateTLSx509secretUUID && + !(priv->migSecinfo =3D + qemuDomainSecretInfoTLSNew(priv, QEMU_MIGRATION_TLS_ALIAS_BASE, + cfg->migrateTLSx509secretUUID))) + goto error; + if (qemuDomainGetTLSObjects(priv->qemuCaps, priv->migSecinfo, cfg->migrateTLSx509certdir, tlsListen, cfg->migrateTLSx509verify, diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index b7649128f8..a65a2fde2a 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -71,12 +71,6 @@ qemuMigrationParamsSet(virQEMUDriverPtr driver, int asyncJob, qemuMigrationParamsPtr migParams); =20 -int -qemuMigrationParamsCheckSetupTLS(virQEMUDriverPtr driver, - virQEMUDriverConfigPtr cfg, - virDomainObjPtr vm, - int asyncJob); - int qemuMigrationParamsAddTLSObjects(virQEMUDriverPtr driver, virDomainObjPtr vm, --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523780514327628.7195799372215; Sun, 15 Apr 2018 01:21:54 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 01A5F87629; Sun, 15 Apr 2018 08:21:53 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 96FA917A9B; Sun, 15 Apr 2018 08:21:52 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 1CA495BBE6; Sun, 15 Apr 2018 08:21:52 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgEWT008687 for ; Wed, 11 Apr 2018 10:42:14 -0400 Received: by smtp.corp.redhat.com (Postfix) id 7AA2F2024CA7; Wed, 11 Apr 2018 14:42:14 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 3E2D02026609 for ; Wed, 11 Apr 2018 14:42:14 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 331881004D2; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:08 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 18/73] qemu: Drop qemuMigrationParamsCheckTLSCreds X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Sun, 15 Apr 2018 08:21:53 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" The function checks whether QEMU supports TLS migration and stores the original value of tls-creds parameter to priv->migTLSAlias. This is no longer needed because we already have the original value stored in priv->migParams. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_domain.c | 2 -- src/qemu/qemu_domain.h | 4 --- src/qemu/qemu_migration.c | 8 ++--- src/qemu/qemu_migration_params.c | 62 ++------------------------------ src/qemu/qemu_migration_params.h | 4 +-- 5 files changed, 6 insertions(+), 74 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index e997c14aad..03ad8d35c0 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -1905,8 +1905,6 @@ qemuDomainObjPrivateDataClear(qemuDomainObjPrivatePtr= priv) virDomainUSBAddressSetFree(priv->usbaddrs); priv->usbaddrs =3D NULL; =20 - /* clean up migration data */ - VIR_FREE(priv->migTLSAlias); virCPUDefFree(priv->origCPU); priv->origCPU =3D NULL; =20 diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index 2c474ae4a4..2bb3e0a788 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -330,10 +330,6 @@ struct _qemuDomainObjPrivate { /* private XML). */ qemuDomainSecretInfoPtr migSecinfo; =20 - /* Used when fetching/storing the current 'tls-creds' migration settin= g */ - /* (not to be saved in our private XML). */ - char *migTLSAlias; - /* CPU def used to start the domain when it differs from the one actua= lly * provided by QEMU. */ virCPUDefPtr origCPU; diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 633f0120bb..e6239576ef 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -2462,9 +2462,7 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, goto stopjob; =20 } else { - if (qemuMigrationParamsSetEmptyTLS(driver, vm, - QEMU_ASYNC_JOB_MIGRATION_IN, - migParams) < 0) + if (qemuMigrationParamsSetEmptyTLS(vm, migParams) < 0) goto stopjob; } =20 @@ -3426,9 +3424,7 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, goto error; } } else { - if (qemuMigrationParamsSetEmptyTLS(driver, vm, - QEMU_ASYNC_JOB_MIGRATION_OUT, - migParams) < 0) + if (qemuMigrationParamsSetEmptyTLS(vm, migParams) < 0) goto error; } =20 diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index d3a4a6d896..451d799efb 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -133,52 +133,6 @@ qemuMigrationParamsSet(virQEMUDriverPtr driver, } =20 =20 -/* qemuMigrationParamsCheckTLSCreds - * @driver: pointer to qemu driver - * @vm: domain object - * @asyncJob: migration job to join - * - * Query the migration parameters looking for the 'tls-creds' parameter. - * If found, then we can support setting or clearing the parameters and th= us - * can support TLS for migration. - * - * Returns 0 if we were able to successfully fetch the params and - * additionally if the tls-creds parameter exists, saves it in the - * private domain structure. Returns -1 on failure. - */ -static int -qemuMigrationParamsCheckTLSCreds(virQEMUDriverPtr driver, - virDomainObjPtr vm, - int asyncJob) -{ - int ret =3D -1; - qemuDomainObjPrivatePtr priv =3D vm->privateData; - qemuMigrationParamsPtr migParams =3D NULL; - - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) - return -1; - - if (!(migParams =3D qemuMigrationParamsNew())) - goto cleanup; - - if (qemuMonitorGetMigrationParams(priv->mon, &migParams->params) < 0) - goto cleanup; - - /* NB: Could steal NULL pointer too! Let caller decide what to do. */ - VIR_STEAL_PTR(priv->migTLSAlias, migParams->params.tlsCreds); - - ret =3D 0; - - cleanup: - if (qemuDomainObjExitMonitor(driver, vm) < 0) - ret =3D -1; - - qemuMigrationParamsFree(migParams); - - return ret; -} - - /* qemuMigrationParamsAddTLSObjects * @driver: pointer to qemu driver * @vm: domain object @@ -213,10 +167,7 @@ qemuMigrationParamsAddTLSObjects(virQEMUDriverPtr driv= er, goto error; } =20 - if (qemuMigrationParamsCheckTLSCreds(driver, vm, asyncJob) < 0) - goto error; - - if (!priv->migTLSAlias) { + if ((!priv->job.migParams->params.tlsCreds)) { virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", _("TLS migration is not supported with this " "QEMU binary")); @@ -260,9 +211,7 @@ qemuMigrationParamsAddTLSObjects(virQEMUDriverPtr drive= r, =20 =20 /* qemuMigrationParamsSetEmptyTLS - * @driver: pointer to qemu driver * @vm: domain object - * @asyncJob: migration job to join * @migParams: Pointer to a migration parameters block * * If we support setting the tls-creds, then set both tls-creds and @@ -272,17 +221,12 @@ qemuMigrationParamsAddTLSObjects(virQEMUDriverPtr dri= ver, * Returns 0 on success, -1 on failure */ int -qemuMigrationParamsSetEmptyTLS(virQEMUDriverPtr driver, - virDomainObjPtr vm, - int asyncJob, +qemuMigrationParamsSetEmptyTLS(virDomainObjPtr vm, qemuMigrationParamsPtr migParams) { qemuDomainObjPrivatePtr priv =3D vm->privateData; =20 - if (qemuMigrationParamsCheckTLSCreds(driver, vm, asyncJob) < 0) - return -1; - - if (!priv->migTLSAlias) + if (!priv->job.migParams->params.tlsCreds) return 0; =20 if (VIR_STRDUP(migParams->params.tlsCreds, "") < 0 || diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index a65a2fde2a..c6cc2aaff6 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -82,9 +82,7 @@ qemuMigrationParamsAddTLSObjects(virQEMUDriverPtr driver, qemuMigrationParamsPtr migParams); =20 int -qemuMigrationParamsSetEmptyTLS(virQEMUDriverPtr driver, - virDomainObjPtr vm, - int asyncJob, +qemuMigrationParamsSetEmptyTLS(virDomainObjPtr vm, qemuMigrationParamsPtr migParams); =20 int --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457777801283.82679394019203; Wed, 11 Apr 2018 07:42:57 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 7EE7A4E90C; Wed, 11 Apr 2018 14:42:56 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 52F2F67E4C; Wed, 11 Apr 2018 14:42:56 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 14D6C4CAA6; Wed, 11 Apr 2018 14:42:56 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgEqC008701 for ; Wed, 11 Apr 2018 10:42:14 -0400 Received: by smtp.corp.redhat.com (Postfix) id B9781215CDCC; Wed, 11 Apr 2018 14:42:14 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 98DC5215CDAF for ; Wed, 11 Apr 2018 14:42:14 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 3859F1004D3; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:09 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 19/73] qemu: Rename qemuMigrationParamsSetEmptyTLS X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Wed, 11 Apr 2018 14:42:57 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" The new name is qemuMigrationParamsDisableTLS. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_migration.c | 4 ++-- src/qemu/qemu_migration_params.c | 6 +++--- src/qemu/qemu_migration_params.h | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index e6239576ef..efc5734b1a 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -2462,7 +2462,7 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, goto stopjob; =20 } else { - if (qemuMigrationParamsSetEmptyTLS(vm, migParams) < 0) + if (qemuMigrationParamsDisableTLS(vm, migParams) < 0) goto stopjob; } =20 @@ -3424,7 +3424,7 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, goto error; } } else { - if (qemuMigrationParamsSetEmptyTLS(vm, migParams) < 0) + if (qemuMigrationParamsDisableTLS(vm, migParams) < 0) goto error; } =20 diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 451d799efb..1f3549a7b4 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -210,7 +210,7 @@ qemuMigrationParamsAddTLSObjects(virQEMUDriverPtr drive= r, } =20 =20 -/* qemuMigrationParamsSetEmptyTLS +/* qemuMigrationParamsDisableTLS * @vm: domain object * @migParams: Pointer to a migration parameters block * @@ -221,8 +221,8 @@ qemuMigrationParamsAddTLSObjects(virQEMUDriverPtr drive= r, * Returns 0 on success, -1 on failure */ int -qemuMigrationParamsSetEmptyTLS(virDomainObjPtr vm, - qemuMigrationParamsPtr migParams) +qemuMigrationParamsDisableTLS(virDomainObjPtr vm, + qemuMigrationParamsPtr migParams) { qemuDomainObjPrivatePtr priv =3D vm->privateData; =20 diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index c6cc2aaff6..4eefe409df 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -82,8 +82,8 @@ qemuMigrationParamsAddTLSObjects(virQEMUDriverPtr driver, qemuMigrationParamsPtr migParams); =20 int -qemuMigrationParamsSetEmptyTLS(virDomainObjPtr vm, - qemuMigrationParamsPtr migParams); +qemuMigrationParamsDisableTLS(virDomainObjPtr vm, + qemuMigrationParamsPtr migParams); =20 int qemuMigrationParamsSetCompression(virQEMUDriverPtr driver, --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523780518300305.511066780991; Sun, 15 Apr 2018 01:21:58 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id EAE79313633D; Sun, 15 Apr 2018 08:21:56 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 920E617D55; Sun, 15 Apr 2018 08:21:56 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 327CE5BBEC; Sun, 15 Apr 2018 08:21:56 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgEev008691 for ; Wed, 11 Apr 2018 10:42:14 -0400 Received: by smtp.corp.redhat.com (Postfix) id 8B5742024CA9; Wed, 11 Apr 2018 14:42:14 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 4EFB92024CA4 for ; Wed, 11 Apr 2018 14:42:14 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 3DA8410050A; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:10 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 20/73] qemu: Rename qemuMigrationParamsAddTLSObjects X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.45]); Sun, 15 Apr 2018 08:21:57 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" The new name is qemuMigrationParamsEnableTLS. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_migration.c | 12 ++++++------ src/qemu/qemu_migration_params.c | 18 +++++++++--------- src/qemu/qemu_migration_params.h | 16 ++++++++-------- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index efc5734b1a..9a9a881f9b 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -2452,9 +2452,9 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, * set the migration TLS parameters */ if (flags & VIR_MIGRATE_TLS) { cfg =3D virQEMUDriverGetConfig(driver); - if (qemuMigrationParamsAddTLSObjects(driver, vm, cfg, true, - QEMU_ASYNC_JOB_MIGRATION_IN, - &tlsAlias, &secAlias, migPara= ms) < 0) + if (qemuMigrationParamsEnableTLS(driver, vm, cfg, true, + QEMU_ASYNC_JOB_MIGRATION_IN, + &tlsAlias, &secAlias, migParams) = < 0) goto stopjob; =20 /* Force reset of 'tls-hostname', it's a source only parameter */ @@ -3407,9 +3407,9 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, =20 if (flags & VIR_MIGRATE_TLS) { cfg =3D virQEMUDriverGetConfig(driver); - if (qemuMigrationParamsAddTLSObjects(driver, vm, cfg, false, - QEMU_ASYNC_JOB_MIGRATION_OUT, - &tlsAlias, &secAlias, migPara= ms) < 0) + if (qemuMigrationParamsEnableTLS(driver, vm, cfg, false, + QEMU_ASYNC_JOB_MIGRATION_OUT, + &tlsAlias, &secAlias, migParams) = < 0) goto error; =20 /* We need to add tls-hostname whenever QEMU itself does not diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 1f3549a7b4..bb3bbc30f3 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -133,7 +133,7 @@ qemuMigrationParamsSet(virQEMUDriverPtr driver, } =20 =20 -/* qemuMigrationParamsAddTLSObjects +/* qemuMigrationParamsEnableTLS * @driver: pointer to qemu driver * @vm: domain object * @cfg: configuration pointer @@ -148,14 +148,14 @@ qemuMigrationParamsSet(virQEMUDriverPtr driver, * Returns 0 on success, -1 on failure */ int -qemuMigrationParamsAddTLSObjects(virQEMUDriverPtr driver, - virDomainObjPtr vm, - virQEMUDriverConfigPtr cfg, - bool tlsListen, - int asyncJob, - char **tlsAlias, - char **secAlias, - qemuMigrationParamsPtr migParams) +qemuMigrationParamsEnableTLS(virQEMUDriverPtr driver, + virDomainObjPtr vm, + virQEMUDriverConfigPtr cfg, + bool tlsListen, + int asyncJob, + char **tlsAlias, + char **secAlias, + qemuMigrationParamsPtr migParams) { qemuDomainObjPrivatePtr priv =3D vm->privateData; virJSONValuePtr tlsProps =3D NULL; diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index 4eefe409df..6f3fb67949 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -72,14 +72,14 @@ qemuMigrationParamsSet(virQEMUDriverPtr driver, qemuMigrationParamsPtr migParams); =20 int -qemuMigrationParamsAddTLSObjects(virQEMUDriverPtr driver, - virDomainObjPtr vm, - virQEMUDriverConfigPtr cfg, - bool tlsListen, - int asyncJob, - char **tlsAlias, - char **secAlias, - qemuMigrationParamsPtr migParams); +qemuMigrationParamsEnableTLS(virQEMUDriverPtr driver, + virDomainObjPtr vm, + virQEMUDriverConfigPtr cfg, + bool tlsListen, + int asyncJob, + char **tlsAlias, + char **secAlias, + qemuMigrationParamsPtr migParams); =20 int qemuMigrationParamsDisableTLS(virDomainObjPtr vm, --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 152345776604048.55907767060921; Wed, 11 Apr 2018 07:42:46 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 9973730001D7; Wed, 11 Apr 2018 14:42:44 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 6A4DB5E1CD; Wed, 11 Apr 2018 14:42:44 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 2EADE4CAAE; Wed, 11 Apr 2018 14:42:44 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgEPk008698 for ; Wed, 11 Apr 2018 10:42:14 -0400 Received: by smtp.corp.redhat.com (Postfix) id A009610B0F38; Wed, 11 Apr 2018 14:42:14 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 63C2A10B0F39 for ; Wed, 11 Apr 2018 14:42:14 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 4333C100510; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:11 +0200 Message-Id: <2aa776c1e40b38bb199311d1c2f0e50ee217f49b.1523456479.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 21/73] qemu: Set tlsHostname inside qemuMigrationParamsEnableTLS X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.45]); Wed, 11 Apr 2018 14:42:45 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_migration.c | 31 ++++++++++++------------------- src/qemu/qemu_migration_params.c | 9 +++++++-- src/qemu/qemu_migration_params.h | 1 + 3 files changed, 20 insertions(+), 21 deletions(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 9a9a881f9b..c2cd937743 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -2454,13 +2454,9 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, cfg =3D virQEMUDriverGetConfig(driver); if (qemuMigrationParamsEnableTLS(driver, vm, cfg, true, QEMU_ASYNC_JOB_MIGRATION_IN, - &tlsAlias, &secAlias, migParams) = < 0) + &tlsAlias, &secAlias, NULL, + migParams) < 0) goto stopjob; - - /* Force reset of 'tls-hostname', it's a source only parameter */ - if (VIR_STRDUP(migParams->params.tlsHostname, "") < 0) - goto stopjob; - } else { if (qemuMigrationParamsDisableTLS(vm, migParams) < 0) goto stopjob; @@ -3406,23 +3402,20 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, VIR_WARN("unable to provide data for graphics client relocation"); =20 if (flags & VIR_MIGRATE_TLS) { - cfg =3D virQEMUDriverGetConfig(driver); - if (qemuMigrationParamsEnableTLS(driver, vm, cfg, false, - QEMU_ASYNC_JOB_MIGRATION_OUT, - &tlsAlias, &secAlias, migParams) = < 0) - goto error; + const char *hostname =3D NULL; =20 /* We need to add tls-hostname whenever QEMU itself does not * connect directly to the destination. */ if (spec->destType =3D=3D MIGRATION_DEST_CONNECT_HOST || - spec->destType =3D=3D MIGRATION_DEST_FD) { - if (VIR_STRDUP(migParams->params.tlsHostname, spec->dest.host.= name) < 0) - goto error; - } else { - /* Be sure there's nothing from a previous migration */ - if (VIR_STRDUP(migParams->params.tlsHostname, "") < 0) - goto error; - } + spec->destType =3D=3D MIGRATION_DEST_FD) + hostname =3D spec->dest.host.name; + + cfg =3D virQEMUDriverGetConfig(driver); + if (qemuMigrationParamsEnableTLS(driver, vm, cfg, false, + QEMU_ASYNC_JOB_MIGRATION_OUT, + &tlsAlias, &secAlias, hostname, + migParams) < 0) + goto error; } else { if (qemuMigrationParamsDisableTLS(vm, migParams) < 0) goto error; diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index bb3bbc30f3..476687aae2 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -141,9 +141,12 @@ qemuMigrationParamsSet(virQEMUDriverPtr driver, * @asyncJob: Migration job to join * @tlsAlias: alias to be generated for TLS object * @secAlias: alias to be generated for a secinfo object + * @hostname: hostname of the migration destination * @migParams: migration parameters to set * - * Create the TLS objects for the migration and set the migParams value + * Create the TLS objects for the migration and set the migParams value. + * If QEMU itself does not connect to the destination @hostname must be + * provided for certificate verification. * * Returns 0 on success, -1 on failure */ @@ -155,6 +158,7 @@ qemuMigrationParamsEnableTLS(virQEMUDriverPtr driver, int asyncJob, char **tlsAlias, char **secAlias, + const char *hostname, qemuMigrationParamsPtr migParams) { qemuDomainObjPrivatePtr priv =3D vm->privateData; @@ -198,7 +202,8 @@ qemuMigrationParamsEnableTLS(virQEMUDriverPtr driver, *tlsAlias, &tlsProps) < 0) goto error; =20 - if (VIR_STRDUP(migParams->params.tlsCreds, *tlsAlias) < 0) + if (VIR_STRDUP(migParams->params.tlsCreds, *tlsAlias) < 0 || + VIR_STRDUP(migParams->params.tlsHostname, hostname ? hostname : ""= ) < 0) goto error; =20 return 0; diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index 6f3fb67949..6535c3af47 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -79,6 +79,7 @@ qemuMigrationParamsEnableTLS(virQEMUDriverPtr driver, int asyncJob, char **tlsAlias, char **secAlias, + const char *hostname, qemuMigrationParamsPtr migParams); =20 int --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457763296301.57699375563936; Wed, 11 Apr 2018 07:42:43 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id DF716312FF6A; Wed, 11 Apr 2018 14:42:40 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id B30C0A0998; Wed, 11 Apr 2018 14:42:40 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 6E3941800CA2; Wed, 11 Apr 2018 14:42:40 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgETY008697 for ; Wed, 11 Apr 2018 10:42:14 -0400 Received: by smtp.corp.redhat.com (Postfix) id A00D3AB3E5; Wed, 11 Apr 2018 14:42:14 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 63D2A946D5 for ; Wed, 11 Apr 2018 14:42:14 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 4887D100528; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:12 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 22/73] qemu: Hide cfg inside qemuMigrationParamsEnableTLS X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.43]); Wed, 11 Apr 2018 14:42:41 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" There's no real reason for qemuMigrationParamsEnableTLS to require the callers to pass a valid virQEMUDriverConfigPtr, it can just call virQEMUDriverGetConfig. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_migration.c | 10 ++-------- src/qemu/qemu_migration_params.c | 12 ++++++++---- src/qemu/qemu_migration_params.h | 1 - 3 files changed, 10 insertions(+), 13 deletions(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index c2cd937743..54d9dfa025 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -2228,7 +2228,6 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, { virDomainObjPtr vm =3D NULL; virObjectEventPtr event =3D NULL; - virQEMUDriverConfigPtr cfg =3D NULL; int ret =3D -1; int dataFD[2] =3D { -1, -1 }; qemuDomainObjPrivatePtr priv =3D NULL; @@ -2451,8 +2450,7 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, /* Migrations using TLS need to add the "tls-creds-x509" object and * set the migration TLS parameters */ if (flags & VIR_MIGRATE_TLS) { - cfg =3D virQEMUDriverGetConfig(driver); - if (qemuMigrationParamsEnableTLS(driver, vm, cfg, true, + if (qemuMigrationParamsEnableTLS(driver, vm, true, QEMU_ASYNC_JOB_MIGRATION_IN, &tlsAlias, &secAlias, NULL, migParams) < 0) @@ -2549,7 +2547,6 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, cleanup: VIR_FREE(tlsAlias); VIR_FREE(secAlias); - virObjectUnref(cfg); qemuProcessIncomingDefFree(incoming); VIR_FREE(xmlout); VIR_FORCE_CLOSE(dataFD[0]); @@ -3330,7 +3327,6 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, { int ret =3D -1; unsigned int migrate_flags =3D QEMU_MONITOR_MIGRATE_BACKGROUND; - virQEMUDriverConfigPtr cfg =3D NULL; qemuDomainObjPrivatePtr priv =3D vm->privateData; qemuMigrationCookiePtr mig =3D NULL; char *tlsAlias =3D NULL; @@ -3410,8 +3406,7 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, spec->destType =3D=3D MIGRATION_DEST_FD) hostname =3D spec->dest.host.name; =20 - cfg =3D virQEMUDriverGetConfig(driver); - if (qemuMigrationParamsEnableTLS(driver, vm, cfg, false, + if (qemuMigrationParamsEnableTLS(driver, vm, false, QEMU_ASYNC_JOB_MIGRATION_OUT, &tlsAlias, &secAlias, hostname, migParams) < 0) @@ -3649,7 +3644,6 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, cleanup: VIR_FREE(tlsAlias); VIR_FREE(secAlias); - virObjectUnref(cfg); VIR_FORCE_CLOSE(fd); virDomainDefFree(persistDef); qemuMigrationCookieFree(mig); diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 476687aae2..dd8cf68842 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -136,7 +136,6 @@ qemuMigrationParamsSet(virQEMUDriverPtr driver, /* qemuMigrationParamsEnableTLS * @driver: pointer to qemu driver * @vm: domain object - * @cfg: configuration pointer * @tlsListen: server or client * @asyncJob: Migration job to join * @tlsAlias: alias to be generated for TLS object @@ -153,7 +152,6 @@ qemuMigrationParamsSet(virQEMUDriverPtr driver, int qemuMigrationParamsEnableTLS(virQEMUDriverPtr driver, virDomainObjPtr vm, - virQEMUDriverConfigPtr cfg, bool tlsListen, int asyncJob, char **tlsAlias, @@ -164,6 +162,8 @@ qemuMigrationParamsEnableTLS(virQEMUDriverPtr driver, qemuDomainObjPrivatePtr priv =3D vm->privateData; virJSONValuePtr tlsProps =3D NULL; virJSONValuePtr secProps =3D NULL; + virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); + int ret =3D -1; =20 if (!cfg->migrateTLSx509certdir) { virReportError(VIR_ERR_OPERATION_INVALID, "%s", @@ -206,12 +206,16 @@ qemuMigrationParamsEnableTLS(virQEMUDriverPtr driver, VIR_STRDUP(migParams->params.tlsHostname, hostname ? hostname : ""= ) < 0) goto error; =20 - return 0; + ret =3D 0; + + cleanup: + virObjectUnref(cfg); + return ret; =20 error: virJSONValueFree(tlsProps); virJSONValueFree(secProps); - return -1; + goto cleanup; } =20 =20 diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index 6535c3af47..e8323dc9bb 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -74,7 +74,6 @@ qemuMigrationParamsSet(virQEMUDriverPtr driver, int qemuMigrationParamsEnableTLS(virQEMUDriverPtr driver, virDomainObjPtr vm, - virQEMUDriverConfigPtr cfg, bool tlsListen, int asyncJob, char **tlsAlias, --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457777028989.2758338469945; Wed, 11 Apr 2018 07:42:57 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id B1A757FEAF; Wed, 11 Apr 2018 14:42:54 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 7E1C97E6D7; Wed, 11 Apr 2018 14:42:53 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 27834180BAEF; Wed, 11 Apr 2018 14:42:53 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgEPq008696 for ; Wed, 11 Apr 2018 10:42:14 -0400 Received: by smtp.corp.redhat.com (Postfix) id 936EDAB3E2; Wed, 11 Apr 2018 14:42:14 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 72B2FAB3E5 for ; Wed, 11 Apr 2018 14:42:14 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 4C926100549; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:13 +0200 Message-Id: <289f3a205faac40968e4fcad7a2870fecb29ad48.1523456479.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 23/73] qemu: Rename qemuMigrationParamsSet X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Wed, 11 Apr 2018 14:42:56 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" The new name is qemuMigrationParamsApply and it will soon become the only API which will send all requested migration parameters and capabilities to QEMU. All other qemuMigrationParams* APIs will just operate on the qemuMigrationParams structure. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_migration.c | 8 ++++---- src/qemu/qemu_migration_params.c | 21 ++++++++++++++++----- src/qemu/qemu_migration_params.h | 8 ++++---- 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 54d9dfa025..602ccdfdd5 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -2476,8 +2476,8 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, QEMU_ASYNC_JOB_MIGRATION_IN) < 0) goto stopjob; =20 - if (qemuMigrationParamsSet(driver, vm, QEMU_ASYNC_JOB_MIGRATION_IN, - migParams) < 0) + if (qemuMigrationParamsApply(driver, vm, QEMU_ASYNC_JOB_MIGRATION_IN, + migParams) < 0) goto stopjob; =20 if (mig->nbd && @@ -3471,8 +3471,8 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, true, QEMU_ASYNC_JOB_MIGRATION_OUT) < 0) goto error; =20 - if (qemuMigrationParamsSet(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT, - migParams) < 0) + if (qemuMigrationParamsApply(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT, + migParams) < 0) goto error; =20 if (qemuDomainObjEnterMonitorAsync(driver, vm, diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index dd8cf68842..92fe84d324 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -108,11 +108,22 @@ qemuMigrationParamsFromFlags(virTypedParameterPtr par= ams, } =20 =20 +/** + * qemuMigrationParamsApply + * @driver: qemu driver + * @vm: domain object + * @asyncJob: migration job + * @migParams: migration parameters to send to QEMU + * + * Send all parameters stored in @migParams to QEMU. + * + * Returns 0 on success, -1 on failure. + */ int -qemuMigrationParamsSet(virQEMUDriverPtr driver, - virDomainObjPtr vm, - int asyncJob, - qemuMigrationParamsPtr migParams) +qemuMigrationParamsApply(virQEMUDriverPtr driver, + virDomainObjPtr vm, + int asyncJob, + qemuMigrationParamsPtr migParams) { qemuDomainObjPrivatePtr priv =3D vm->privateData; int ret =3D -1; @@ -391,7 +402,7 @@ qemuMigrationParamsReset(virQEMUDriverPtr driver, goto cleanup; =20 if (origParams) { - if (qemuMigrationParamsSet(driver, vm, asyncJob, origParams) < 0) + if (qemuMigrationParamsApply(driver, vm, asyncJob, origParams) < 0) goto cleanup; qemuMigrationParamsResetTLS(driver, vm, asyncJob, origParams); } diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index e8323dc9bb..ce7f84fd66 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -66,10 +66,10 @@ void qemuMigrationParamsFree(qemuMigrationParamsPtr migParams); =20 int -qemuMigrationParamsSet(virQEMUDriverPtr driver, - virDomainObjPtr vm, - int asyncJob, - qemuMigrationParamsPtr migParams); +qemuMigrationParamsApply(virQEMUDriverPtr driver, + virDomainObjPtr vm, + int asyncJob, + qemuMigrationParamsPtr migParams); =20 int qemuMigrationParamsEnableTLS(virQEMUDriverPtr driver, --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523780528949818.0294203516328; Sun, 15 Apr 2018 01:22:08 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 884583133E67; Sun, 15 Apr 2018 08:22:07 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 56609611A4; Sun, 15 Apr 2018 08:22:07 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id E06AC1805972; Sun, 15 Apr 2018 08:22:06 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgEeA008702 for ; Wed, 11 Apr 2018 10:42:14 -0400 Received: by smtp.corp.redhat.com (Postfix) id BC6BC215CDAF; Wed, 11 Apr 2018 14:42:14 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 9C38D215CDCB for ; Wed, 11 Apr 2018 14:42:14 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 505B8100567; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:14 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 24/73] qemu: Hide internals of qemuMigrationParams struct X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.46]); Sun, 15 Apr 2018 08:22:08 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" All users of migration parameters are supposed to use APIs provided by qemu_migration_params.c without having to worry about the internals. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_migration_params.c | 5 +++++ src/qemu/qemu_migration_params.h | 3 --- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 92fe84d324..4ca49d942e 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -30,6 +30,7 @@ #include "qemu_hotplug.h" #include "qemu_migration.h" #include "qemu_migration_params.h" +#include "qemu_monitor.h" =20 #define VIR_FROM_THIS VIR_FROM_QEMU =20 @@ -37,6 +38,10 @@ VIR_LOG_INIT("qemu.qemu_migration_params"); =20 #define QEMU_MIGRATION_TLS_ALIAS_BASE "libvirt_migrate" =20 +struct _qemuMigrationParams { + qemuMonitorMigrationParams params; +}; + =20 qemuMigrationParamsPtr qemuMigrationParamsNew(void) diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index ce7f84fd66..37e528f36c 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -49,9 +49,6 @@ struct _qemuMigrationCompression { =20 typedef struct _qemuMigrationParams qemuMigrationParams; typedef qemuMigrationParams *qemuMigrationParamsPtr; -struct _qemuMigrationParams { - qemuMonitorMigrationParams params; -}; =20 =20 qemuMigrationParamsPtr --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 152345778091557.07249319412426; Wed, 11 Apr 2018 07:43:00 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id A11C77E9D4; Wed, 11 Apr 2018 14:42:59 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 7BC4F78BBC; Wed, 11 Apr 2018 14:42:59 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 41D89180BAF1; Wed, 11 Apr 2018 14:42:59 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgEGe008699 for ; Wed, 11 Apr 2018 10:42:14 -0400 Received: by smtp.corp.redhat.com (Postfix) id AE9B510B0F39; Wed, 11 Apr 2018 14:42:14 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 7235410B0F3A for ; Wed, 11 Apr 2018 14:42:14 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 543F2100574; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:15 +0200 Message-Id: <56159951618c0adede5e7e13a2bbec08c2a3ee79.1523456479.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 25/73] qemu: Introduce qemuMonitorSetMigrationCapabilities X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Wed, 11 Apr 2018 14:43:00 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Our current monitor API forces the caller to call migrate-set-capabilities QMP command for each capability separately, which is quite suboptimal. Let's add a new API for setting all capabilities at once. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_monitor.c | 19 +++++++++++ src/qemu/qemu_monitor.h | 3 ++ src/qemu/qemu_monitor_json.c | 63 ++++++++++++++++++++++++++++++++++++ src/qemu/qemu_monitor_json.h | 3 ++ 4 files changed, 88 insertions(+) diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 7b647525b3..7ea72af788 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -3991,6 +3991,25 @@ qemuMonitorSetMigrationCapability(qemuMonitorPtr mon, } =20 =20 +int +qemuMonitorSetMigrationCapabilities(qemuMonitorPtr mon, + virBitmapPtr caps, + virBitmapPtr states) +{ + char *capsStr =3D virBitmapFormat(caps); + char *statesStr =3D virBitmapFormat(states); + + VIR_DEBUG("caps=3D%s, states=3D%s", NULLSTR(capsStr), NULLSTR(statesSt= r)); + + VIR_FREE(capsStr); + VIR_FREE(statesStr); + + QEMU_CHECK_MONITOR_JSON(mon); + + return qemuMonitorJSONSetMigrationCapabilities(mon, caps, states); +} + + /** * qemuMonitorGetGICCapabilities: * @mon: QEMU monitor diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index d04148e568..870aae5cbd 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -763,6 +763,9 @@ int qemuMonitorGetMigrationCapabilities(qemuMonitorPtr = mon, int qemuMonitorSetMigrationCapability(qemuMonitorPtr mon, qemuMonitorMigrationCaps capability, bool state); +int qemuMonitorSetMigrationCapabilities(qemuMonitorPtr mon, + virBitmapPtr caps, + virBitmapPtr states); =20 int qemuMonitorGetGICCapabilities(qemuMonitorPtr mon, virGICCapability **capabilities); diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 57c2c4de0f..7ab73657a0 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -6251,6 +6251,69 @@ qemuMonitorJSONSetMigrationCapability(qemuMonitorPtr= mon, } =20 =20 +int +qemuMonitorJSONSetMigrationCapabilities(qemuMonitorPtr mon, + virBitmapPtr caps, + virBitmapPtr states) +{ + int ret =3D -1; + qemuMonitorMigrationCaps bit; + virJSONValuePtr cmd =3D NULL; + virJSONValuePtr reply =3D NULL; + virJSONValuePtr cap =3D NULL; + virJSONValuePtr array; + + if (!(array =3D virJSONValueNewArray())) + goto cleanup; + + for (bit =3D 0; bit < QEMU_MONITOR_MIGRATION_CAPS_LAST; bit++) { + bool supported =3D false; + bool state =3D false; + + ignore_value(virBitmapGetBit(caps, bit, &supported)); + if (!supported) + continue; + + ignore_value(virBitmapGetBit(states, bit, &state)); + + if (!(cap =3D virJSONValueNewObject())) + goto cleanup; + + if (virJSONValueObjectAppendString(cap, "capability", + qemuMonitorMigrationCapsTypeToS= tring(bit)) < 0) + goto cleanup; + + if (virJSONValueObjectAppendBoolean(cap, "state", state) < 0) + goto cleanup; + + if (virJSONValueArrayAppend(array, cap) < 0) + goto cleanup; + + cap =3D NULL; + } + + cmd =3D qemuMonitorJSONMakeCommand("migrate-set-capabilities", + "a:capabilities", &array, + NULL); + if (!cmd) + goto cleanup; + + if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0) + goto cleanup; + + if (qemuMonitorJSONCheckError(cmd, reply) < 0) + goto cleanup; + + ret =3D 0; + cleanup: + virJSONValueFree(array); + virJSONValueFree(cap); + virJSONValueFree(cmd); + virJSONValueFree(reply); + return ret; +} + + /** * qemuMonitorJSONGetGICCapabilities: * @mon: QEMU JSON monitor diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h index 045df4919f..76e6738f44 100644 --- a/src/qemu/qemu_monitor_json.h +++ b/src/qemu/qemu_monitor_json.h @@ -148,6 +148,9 @@ int qemuMonitorJSONGetMigrationCapabilities(qemuMonitor= Ptr mon, int qemuMonitorJSONSetMigrationCapability(qemuMonitorPtr mon, qemuMonitorMigrationCaps capabil= ity, bool state); +int qemuMonitorJSONSetMigrationCapabilities(qemuMonitorPtr mon, + virBitmapPtr caps, + virBitmapPtr states); =20 int qemuMonitorJSONGetGICCapabilities(qemuMonitorPtr mon, virGICCapability **capabilities); --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457790009350.3996191431073; Wed, 11 Apr 2018 07:43:10 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 4BE35313772F; Wed, 11 Apr 2018 14:43:06 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 1D0BFA099C; Wed, 11 Apr 2018 14:43:06 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id DAE3D181B9FF; Wed, 11 Apr 2018 14:43:05 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgFsu008744 for ; Wed, 11 Apr 2018 10:42:15 -0400 Received: by smtp.corp.redhat.com (Postfix) id 261F110B0F39; Wed, 11 Apr 2018 14:42:15 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id C259310B0F3A for ; Wed, 11 Apr 2018 14:42:14 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 584B91005EF; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:16 +0200 Message-Id: <5d0d3b2e876b3c97463daa77d7bfa622119ad776.1523456479.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 26/73] qemu: Set migration caps via migration params APIs X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.44]); Wed, 11 Apr 2018 14:43:07 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Migration capabilities are closely related to migration parameters and it makes sense to keep them in a single data structure. Similarly to migration parameters the capabilities are all send to QEMU at once in qemuMigrationParamsApply, all other APIs operate on the qemuMigrationParams structure. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_migration.c | 100 ++++++------------------------- src/qemu/qemu_migration.h | 7 --- src/qemu/qemu_migration_params.c | 99 +++++++++++++++++++++++------- src/qemu/qemu_migration_params.h | 11 ++++ 4 files changed, 107 insertions(+), 110 deletions(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 602ccdfdd5..e01c2a209d 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -1174,66 +1174,6 @@ qemuMigrationAnyPostcopyFailed(virQEMUDriverPtr driv= er, } =20 =20 -int -qemuMigrationOptionSet(virQEMUDriverPtr driver, - virDomainObjPtr vm, - qemuMonitorMigrationCaps capability, - bool state, - qemuDomainAsyncJob job) -{ - qemuDomainObjPrivatePtr priv =3D vm->privateData; - int ret; - - if (!qemuMigrationCapsGet(vm, capability)) { - if (!state) { - /* Unsupported but we want it off anyway */ - return 0; - } - - if (job =3D=3D QEMU_ASYNC_JOB_MIGRATION_IN) { - virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, - _("Migration option '%s' is not supported by " - "target QEMU binary"), - qemuMonitorMigrationCapsTypeToString(capability= )); - } else { - virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, - _("Migration option '%s' is not supported by " - "source QEMU binary"), - qemuMonitorMigrationCapsTypeToString(capability= )); - } - return -1; - } - - if (qemuDomainObjEnterMonitorAsync(driver, vm, job) < 0) - return -1; - - ret =3D qemuMonitorSetMigrationCapability(priv->mon, capability, state= ); - - if (qemuDomainObjExitMonitor(driver, vm) < 0) - ret =3D -1; - - return ret; -} - - -static int -qemuMigrationOptionSetPostCopy(virQEMUDriverPtr driver, - virDomainObjPtr vm, - bool state, - qemuDomainAsyncJob job) -{ - qemuDomainObjPrivatePtr priv =3D vm->privateData; - - if (qemuMigrationOptionSet(driver, vm, - QEMU_MONITOR_MIGRATION_CAPS_POSTCOPY, - state, job) < 0) - return -1; - - priv->job.postcopyEnabled =3D state; - return 0; -} - - static int qemuMigrationSrcWaitForSpice(virDomainObjPtr vm) { @@ -2465,15 +2405,14 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, goto stopjob; } =20 - if (qemuMigrationOptionSet(driver, vm, - QEMU_MONITOR_MIGRATION_CAPS_RDMA_PIN_ALL, - flags & VIR_MIGRATE_RDMA_PIN_ALL, - QEMU_ASYNC_JOB_MIGRATION_IN) < 0) + if (qemuMigrationParamsSetCapability(vm, + QEMU_MONITOR_MIGRATION_CAPS_RDMA_= PIN_ALL, + flags & VIR_MIGRATE_RDMA_PIN_ALL, + migParams) < 0) goto stopjob; =20 - if (qemuMigrationOptionSetPostCopy(driver, vm, - flags & VIR_MIGRATE_POSTCOPY, - QEMU_ASYNC_JOB_MIGRATION_IN) < 0) + if (qemuMigrationParamsSetPostCopy(vm, flags & VIR_MIGRATE_POSTCOPY, + migParams) < 0) goto stopjob; =20 if (qemuMigrationParamsApply(driver, vm, QEMU_ASYNC_JOB_MIGRATION_IN, @@ -3448,27 +3387,26 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, compression, migParams) < 0) goto error; =20 - if (qemuMigrationOptionSet(driver, vm, - QEMU_MONITOR_MIGRATION_CAPS_AUTO_CONVERGE, - flags & VIR_MIGRATE_AUTO_CONVERGE, - QEMU_ASYNC_JOB_MIGRATION_OUT) < 0) + if (qemuMigrationParamsSetCapability(vm, + QEMU_MONITOR_MIGRATION_CAPS_AUTO_= CONVERGE, + flags & VIR_MIGRATE_AUTO_CONVERGE, + migParams) < 0) goto error; =20 - if (qemuMigrationOptionSet(driver, vm, - QEMU_MONITOR_MIGRATION_CAPS_RDMA_PIN_ALL, - flags & VIR_MIGRATE_RDMA_PIN_ALL, - QEMU_ASYNC_JOB_MIGRATION_OUT) < 0) + if (qemuMigrationParamsSetCapability(vm, + QEMU_MONITOR_MIGRATION_CAPS_RDMA_= PIN_ALL, + flags & VIR_MIGRATE_RDMA_PIN_ALL, + migParams) < 0) goto error; =20 - if (qemuMigrationOptionSetPostCopy(driver, vm, - flags & VIR_MIGRATE_POSTCOPY, - QEMU_ASYNC_JOB_MIGRATION_OUT) < 0) + if (qemuMigrationParamsSetPostCopy(vm, flags & VIR_MIGRATE_POSTCOPY, + migParams) < 0) goto error; =20 if (qemuMigrationCapsGet(vm, QEMU_MONITOR_MIGRATION_CAPS_PAUSE_BEFORE_= SWITCHOVER) && - qemuMigrationOptionSet(driver, vm, - QEMU_MONITOR_MIGRATION_CAPS_PAUSE_BEFORE_SW= ITCHOVER, - true, QEMU_ASYNC_JOB_MIGRATION_OUT) < 0) + qemuMigrationParamsSetCapability(vm, + QEMU_MONITOR_MIGRATION_CAPS_PAUSE= _BEFORE_SWITCHOVER, + true, migParams) < 0) goto error; =20 if (qemuMigrationParamsApply(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT, diff --git a/src/qemu/qemu_migration.h b/src/qemu/qemu_migration.h index e59296fd63..fc81eb5016 100644 --- a/src/qemu/qemu_migration.h +++ b/src/qemu/qemu_migration.h @@ -273,11 +273,4 @@ qemuMigrationSrcFetchMirrorStats(virQEMUDriverPtr driv= er, qemuDomainAsyncJob asyncJob, qemuDomainJobInfoPtr jobInfo); =20 -int -qemuMigrationOptionSet(virQEMUDriverPtr driver, - virDomainObjPtr vm, - qemuMonitorMigrationCaps capability, - bool state, - qemuDomainAsyncJob job); - #endif /* __QEMU_MIGRATION_H__ */ diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 4ca49d942e..d934a93086 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -39,6 +39,7 @@ VIR_LOG_INIT("qemu.qemu_migration_params"); #define QEMU_MIGRATION_TLS_ALIAS_BASE "libvirt_migrate" =20 struct _qemuMigrationParams { + virBitmapPtr caps; qemuMonitorMigrationParams params; }; =20 @@ -51,7 +52,15 @@ qemuMigrationParamsNew(void) if (VIR_ALLOC(params) < 0) return NULL; =20 + params->caps =3D virBitmapNew(QEMU_MONITOR_MIGRATION_CAPS_LAST); + if (!params->caps) + goto error; + return params; + + error: + qemuMigrationParamsFree(params); + return NULL; } =20 =20 @@ -61,6 +70,7 @@ qemuMigrationParamsFree(qemuMigrationParamsPtr migParams) if (!migParams) return; =20 + virBitmapFree(migParams->caps); VIR_FREE(migParams->params.tlsCreds); VIR_FREE(migParams->params.tlsHostname); VIR_FREE(migParams); @@ -136,6 +146,10 @@ qemuMigrationParamsApply(virQEMUDriverPtr driver, if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) return -1; =20 + if (qemuMonitorSetMigrationCapabilities(priv->mon, priv->migrationCaps, + migParams->caps) < 0) + goto cleanup; + if (qemuMonitorSetMigrationParams(priv->mon, &migParams->params) < 0) goto cleanup; =20 @@ -149,6 +163,50 @@ qemuMigrationParamsApply(virQEMUDriverPtr driver, } =20 =20 +int +qemuMigrationParamsSetCapability(virDomainObjPtr vm, + qemuMonitorMigrationCaps capability, + bool state, + qemuMigrationParamsPtr migParams) +{ + if (!qemuMigrationCapsGet(vm, capability)) { + if (!state) { + /* Unsupported but we want it off anyway */ + return 0; + } + + virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, + _("Migration option '%s' is not supported by QEMU b= inary"), + qemuMonitorMigrationCapsTypeToString(capability)); + return -1; + } + + if (state) + ignore_value(virBitmapSetBit(migParams->caps, capability)); + else + ignore_value(virBitmapClearBit(migParams->caps, capability)); + + return 0; +} + + +int +qemuMigrationParamsSetPostCopy(virDomainObjPtr vm, + bool state, + qemuMigrationParamsPtr migParams) +{ + qemuDomainObjPrivatePtr priv =3D vm->privateData; + + if (qemuMigrationParamsSetCapability(vm, + QEMU_MONITOR_MIGRATION_CAPS_POSTC= OPY, + state, migParams) < 0) + return -1; + + priv->job.postcopyEnabled =3D state; + return 0; +} + + /* qemuMigrationParamsEnableTLS * @driver: pointer to qemu driver * @vm: domain object @@ -272,18 +330,18 @@ qemuMigrationParamsSetCompression(virQEMUDriverPtr dr= iver, int ret =3D -1; qemuDomainObjPrivatePtr priv =3D vm->privateData; =20 - if (qemuMigrationOptionSet(driver, vm, - QEMU_MONITOR_MIGRATION_CAPS_XBZRLE, - compression->methods & - (1ULL << QEMU_MIGRATION_COMPRESS_XBZRLE), - asyncJob) < 0) + if (qemuMigrationParamsSetCapability(vm, + QEMU_MONITOR_MIGRATION_CAPS_XBZRL= E, + compression->methods & + (1ULL << QEMU_MIGRATION_COMPRESS_= XBZRLE), + migParams) < 0) return -1; =20 - if (qemuMigrationOptionSet(driver, vm, - QEMU_MONITOR_MIGRATION_CAPS_COMPRESS, - compression->methods & - (1ULL << QEMU_MIGRATION_COMPRESS_MT), - asyncJob) < 0) + if (qemuMigrationParamsSetCapability(vm, + QEMU_MONITOR_MIGRATION_CAPS_COMPR= ESS, + compression->methods & + (1ULL << QEMU_MIGRATION_COMPRESS_= MT), + migParams) < 0) return -1; =20 if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) @@ -369,6 +427,11 @@ qemuMigrationParamsCheck(virQEMUDriverPtr driver, if (!(origParams =3D qemuMigrationParamsNew())) goto cleanup; =20 + /* + * We want to disable all migration capabilities after migration, no n= eed + * to ask QEMU for their current settings. + */ + if (qemuMonitorGetMigrationParams(priv->mon, &origParams->params) < 0) goto cleanup; =20 @@ -398,25 +461,17 @@ qemuMigrationParamsReset(virQEMUDriverPtr driver, int asyncJob, qemuMigrationParamsPtr origParams) { - qemuMonitorMigrationCaps cap; virErrorPtr err =3D virSaveLastError(); =20 VIR_DEBUG("Resetting migration parameters %p", origParams); =20 - if (!virDomainObjIsActive(vm)) + if (!virDomainObjIsActive(vm) || !origParams) goto cleanup; =20 - if (origParams) { - if (qemuMigrationParamsApply(driver, vm, asyncJob, origParams) < 0) - goto cleanup; - qemuMigrationParamsResetTLS(driver, vm, asyncJob, origParams); - } + if (qemuMigrationParamsApply(driver, vm, asyncJob, origParams) < 0) + goto cleanup; =20 - for (cap =3D 0; cap < QEMU_MONITOR_MIGRATION_CAPS_LAST; cap++) { - if (qemuMigrationCapsGet(vm, cap) && - qemuMigrationOptionSet(driver, vm, cap, false, asyncJob) < 0) - goto cleanup; - } + qemuMigrationParamsResetTLS(driver, vm, asyncJob, origParams); =20 cleanup: if (err) { diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index 37e528f36c..e341f73900 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -68,6 +68,17 @@ qemuMigrationParamsApply(virQEMUDriverPtr driver, int asyncJob, qemuMigrationParamsPtr migParams); =20 +int +qemuMigrationParamsSetCapability(virDomainObjPtr vm, + qemuMonitorMigrationCaps capability, + bool state, + qemuMigrationParamsPtr migParams); + +int +qemuMigrationParamsSetPostCopy(virDomainObjPtr vm, + bool state, + qemuMigrationParamsPtr migParams); + int qemuMigrationParamsEnableTLS(virQEMUDriverPtr driver, virDomainObjPtr vm, --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523780534290213.9421745233775; Sun, 15 Apr 2018 01:22:14 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 08E73C04B320; Sun, 15 Apr 2018 08:22:13 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id CBD1565B48; Sun, 15 Apr 2018 08:22:12 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 6C242180BAD6; Sun, 15 Apr 2018 08:22:12 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgFpf008731 for ; Wed, 11 Apr 2018 10:42:15 -0400 Received: by smtp.corp.redhat.com (Postfix) id E998A2024CA9; Wed, 11 Apr 2018 14:42:14 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id C909A2024CA4 for ; Wed, 11 Apr 2018 14:42:14 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 5BF581006BC; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:17 +0200 Message-Id: <2b679fdf404696fcc61484951e7da173c1226bb3.1523456479.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 27/73] qemu: Do not use qemuMonitorSetMigrationCapability X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Sun, 15 Apr 2018 08:22:13 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Rework all remaining callers of qemuMonitorSetMigrationCapability to use the new qemuMonitorSetMigrationCapabilities API. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_migration_params.c | 11 ++++++++--- tests/qemumonitorjsontest.c | 16 +++++++++++----- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index d934a93086..53e105bec8 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -487,6 +487,7 @@ qemuMigrationCapsCheck(virQEMUDriverPtr driver, int asyncJob) { qemuDomainObjPrivatePtr priv =3D vm->privateData; + virBitmapPtr migEvent =3D NULL; char **caps =3D NULL; char **capStr; int ret =3D -1; @@ -521,12 +522,16 @@ qemuMigrationCapsCheck(virQEMUDriverPtr driver, } =20 if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_EVENT)) { + migEvent =3D virBitmapNew(QEMU_MONITOR_MIGRATION_CAPS_LAST); + if (!migEvent) + goto cleanup; + + ignore_value(virBitmapSetBit(migEvent, QEMU_MONITOR_MIGRATION_CAPS= _EVENTS)); + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) goto cleanup; =20 - rc =3D qemuMonitorSetMigrationCapability(priv->mon, - QEMU_MONITOR_MIGRATION_CAPS= _EVENTS, - true); + rc =3D qemuMonitorSetMigrationCapabilities(priv->mon, migEvent, mi= gEvent); =20 if (qemuDomainObjExitMonitor(driver, vm) < 0) goto cleanup; diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c index 0afdc80038..1cad383596 100644 --- a/tests/qemumonitorjsontest.c +++ b/tests/qemumonitorjsontest.c @@ -2229,13 +2229,14 @@ testQemuMonitorJSONqemuMonitorJSONGetTargetArch(con= st void *data) } =20 static int -testQemuMonitorJSONqemuMonitorJSONGetMigrationCapability(const void *data) +testQemuMonitorJSONqemuMonitorJSONGetMigrationCapabilities(const void *dat= a) { virDomainXMLOptionPtr xmlopt =3D (virDomainXMLOptionPtr)data; qemuMonitorTestPtr test =3D qemuMonitorTestNewSimple(true, xmlopt); int ret =3D -1; const char *cap; char **caps =3D NULL; + virBitmapPtr bitmap =3D NULL; const char *reply =3D "{" " \"return\": [" @@ -2266,15 +2267,20 @@ testQemuMonitorJSONqemuMonitorJSONGetMigrationCapab= ility(const void *data) goto cleanup; } =20 - if (qemuMonitorJSONSetMigrationCapability(qemuMonitorTestGetMonitor(te= st), - QEMU_MONITOR_MIGRATION_CAPS_= XBZRLE, - true) < 0) + bitmap =3D virBitmapNew(QEMU_MONITOR_MIGRATION_CAPS_LAST); + if (!bitmap) + goto cleanup; + + ignore_value(virBitmapSetBit(bitmap, QEMU_MONITOR_MIGRATION_CAPS_XBZRL= E)); + if (qemuMonitorJSONSetMigrationCapabilities(qemuMonitorTestGetMonitor(= test), + bitmap, bitmap) < 0) goto cleanup; =20 ret =3D 0; cleanup: qemuMonitorTestFree(test); virStringListFree(caps); + virBitmapFree(bitmap); return ret; } =20 @@ -2999,7 +3005,7 @@ mymain(void) DO_TEST(qemuMonitorJSONGetChardevInfo); DO_TEST(qemuMonitorJSONSetBlockIoThrottle); DO_TEST(qemuMonitorJSONGetTargetArch); - DO_TEST(qemuMonitorJSONGetMigrationCapability); + DO_TEST(qemuMonitorJSONGetMigrationCapabilities); DO_TEST(qemuMonitorJSONQueryCPUs); DO_TEST(qemuMonitorJSONGetVirtType); DO_TEST(qemuMonitorJSONSendKey); --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 152345778766616.53888236578041; Wed, 11 Apr 2018 07:43:07 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 59C6A28203; Wed, 11 Apr 2018 14:43:06 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id BF32B5FC16; Wed, 11 Apr 2018 14:43:02 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 800A1181A8C8; Wed, 11 Apr 2018 14:43:02 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgF6B008743 for ; Wed, 11 Apr 2018 10:42:15 -0400 Received: by smtp.corp.redhat.com (Postfix) id 171D6215CDC8; Wed, 11 Apr 2018 14:42:15 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id CEBB3215CDCB for ; Wed, 11 Apr 2018 14:42:14 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 5FCAF100776; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:18 +0200 Message-Id: <3637822e31a5595988d0557e1d9d4568775ebd1c.1523456480.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 28/73] qemu: Drop unused qemuMonitorSetMigrationCapability X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Wed, 11 Apr 2018 14:43:06 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_monitor.c | 14 ---------- src/qemu/qemu_monitor.h | 3 -- src/qemu/qemu_monitor_json.c | 53 ------------------------------------ src/qemu/qemu_monitor_json.h | 3 -- 4 files changed, 73 deletions(-) diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 7ea72af788..09f21ba77d 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -3977,20 +3977,6 @@ qemuMonitorGetMigrationCapabilities(qemuMonitorPtr m= on, } =20 =20 -int -qemuMonitorSetMigrationCapability(qemuMonitorPtr mon, - qemuMonitorMigrationCaps capability, - bool state) -{ - VIR_DEBUG("capability=3D%s, state=3D%d", - qemuMonitorMigrationCapsTypeToString(capability), state); - - QEMU_CHECK_MONITOR_JSON(mon); - - return qemuMonitorJSONSetMigrationCapability(mon, capability, state); -} - - int qemuMonitorSetMigrationCapabilities(qemuMonitorPtr mon, virBitmapPtr caps, diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 870aae5cbd..c95b3a2ef4 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -760,9 +760,6 @@ VIR_ENUM_DECL(qemuMonitorMigrationCaps); =20 int qemuMonitorGetMigrationCapabilities(qemuMonitorPtr mon, char ***capabilities); -int qemuMonitorSetMigrationCapability(qemuMonitorPtr mon, - qemuMonitorMigrationCaps capability, - bool state); int qemuMonitorSetMigrationCapabilities(qemuMonitorPtr mon, virBitmapPtr caps, virBitmapPtr states); diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 7ab73657a0..c6cb71addf 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -6198,59 +6198,6 @@ qemuMonitorJSONGetMigrationCapabilities(qemuMonitorP= tr mon, } =20 =20 -int -qemuMonitorJSONSetMigrationCapability(qemuMonitorPtr mon, - qemuMonitorMigrationCaps capability, - bool state) -{ - int ret =3D -1; - - virJSONValuePtr cmd =3D NULL; - virJSONValuePtr reply =3D NULL; - virJSONValuePtr cap =3D NULL; - virJSONValuePtr caps; - - if (!(caps =3D virJSONValueNewArray())) - goto cleanup; - - if (!(cap =3D virJSONValueNewObject())) - goto cleanup; - - if (virJSONValueObjectAppendString( - cap, "capability", - qemuMonitorMigrationCapsTypeToString(capability)) < 0) - goto cleanup; - - if (virJSONValueObjectAppendBoolean(cap, "state", state) < 0) - goto cleanup; - - if (virJSONValueArrayAppend(caps, cap) < 0) - goto cleanup; - - cap =3D NULL; - - cmd =3D qemuMonitorJSONMakeCommand("migrate-set-capabilities", - "a:capabilities", &caps, - NULL); - if (!cmd) - goto cleanup; - - if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0) - goto cleanup; - - if (qemuMonitorJSONCheckError(cmd, reply) < 0) - goto cleanup; - - ret =3D 0; - cleanup: - virJSONValueFree(caps); - virJSONValueFree(cap); - virJSONValueFree(cmd); - virJSONValueFree(reply); - return ret; -} - - int qemuMonitorJSONSetMigrationCapabilities(qemuMonitorPtr mon, virBitmapPtr caps, diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h index 76e6738f44..a73e98815c 100644 --- a/src/qemu/qemu_monitor_json.h +++ b/src/qemu/qemu_monitor_json.h @@ -145,9 +145,6 @@ int qemuMonitorJSONGetMigrationStats(qemuMonitorPtr mon, =20 int qemuMonitorJSONGetMigrationCapabilities(qemuMonitorPtr mon, char ***capabilities); -int qemuMonitorJSONSetMigrationCapability(qemuMonitorPtr mon, - qemuMonitorMigrationCaps capabil= ity, - bool state); int qemuMonitorJSONSetMigrationCapabilities(qemuMonitorPtr mon, virBitmapPtr caps, virBitmapPtr states); --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523780539553249.58051585756766; Sun, 15 Apr 2018 01:22:19 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 3D8E123E6C8; Sun, 15 Apr 2018 08:22:18 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 0A54417B79; Sun, 15 Apr 2018 08:22:18 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id B9F295BBED; Sun, 15 Apr 2018 08:22:17 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgFW0008745 for ; Wed, 11 Apr 2018 10:42:15 -0400 Received: by smtp.corp.redhat.com (Postfix) id 29322AB3E2; Wed, 11 Apr 2018 14:42:15 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id E051EAB3E7 for ; Wed, 11 Apr 2018 14:42:14 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 6500A100817; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:19 +0200 Message-Id: <4d94b690028b6f3527620bf97082e0ee94a76f10.1523456480.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 29/73] qemu: Add support for xbzrle-cache-size migration parameter X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Sun, 15 Apr 2018 08:22:18 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Originally QEMU provided query-migrate-cache-size and migrate-set-cache-size QMP commands for querying/setting XBZRLE cache size. In version 2.11 QEMU added support for XBZRLE cache size to the general migration paramaters commands. This patch adds support for this parameter to libvirt to make sure it is properly restored to its original value after a failed or aborted migration. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_monitor.c | 5 +++-- src/qemu/qemu_monitor.h | 3 +++ src/qemu/qemu_monitor_json.c | 2 ++ tests/qemumonitorjsontest.c | 4 +++- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 09f21ba77d..18b54e2da8 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -2639,7 +2639,7 @@ qemuMonitorSetMigrationParams(qemuMonitorPtr mon, "decompressThreads=3D%d:%d cpuThrottleInitial=3D%d:%d " "cpuThrottleIncrement=3D%d:%d tlsCreds=3D%s tlsHostname=3D%s= " "maxBandwidth=3D%d:%llu downtimeLimit=3D%d:%llu " - "blockIncremental=3D%d:%d", + "blockIncremental=3D%d:%d xbzrleCacheSize=3D%d:%llu", params->compressLevel_set, params->compressLevel, params->compressThreads_set, params->compressThreads, params->decompressThreads_set, params->decompressThreads, @@ -2648,7 +2648,8 @@ qemuMonitorSetMigrationParams(qemuMonitorPtr mon, NULLSTR(params->tlsCreds), NULLSTR(params->tlsHostname), params->maxBandwidth_set, params->maxBandwidth, params->downtimeLimit_set, params->downtimeLimit, - params->blockIncremental_set, params->blockIncremental); + params->blockIncremental_set, params->blockIncremental, + params->xbzrleCacheSize_set, params->xbzrleCacheSize); =20 QEMU_CHECK_MONITOR_JSON(mon); =20 diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index c95b3a2ef4..2bb4dbc667 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -673,6 +673,9 @@ struct _qemuMonitorMigrationParams { =20 bool blockIncremental_set; bool blockIncremental; + + bool xbzrleCacheSize_set; + unsigned long long xbzrleCacheSize; }; =20 int qemuMonitorGetMigrationParams(qemuMonitorPtr mon, diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index c6cb71addf..acc126629e 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -2833,6 +2833,7 @@ qemuMonitorJSONGetMigrationParams(qemuMonitorPtr mon, PARSE_ULONG(maxBandwidth, "max-bandwidth"); PARSE_ULONG(downtimeLimit, "downtime-limit"); PARSE_BOOL(blockIncremental, "block-incremental"); + PARSE_ULONG(xbzrleCacheSize, "xbzrle-cache-size"); =20 #undef PARSE_SET #undef PARSE_INT @@ -2898,6 +2899,7 @@ qemuMonitorJSONSetMigrationParams(qemuMonitorPtr mon, APPEND_ULONG(maxBandwidth, "max-bandwidth"); APPEND_ULONG(downtimeLimit, "downtime-limit"); APPEND_BOOL(blockIncremental, "block-incremental"); + APPEND_ULONG(xbzrleCacheSize, "xbzrle-cache-size"); =20 #undef APPEND #undef APPEND_INT diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c index 1cad383596..8a5b0be64b 100644 --- a/tests/qemumonitorjsontest.c +++ b/tests/qemumonitorjsontest.c @@ -1810,7 +1810,8 @@ testQemuMonitorJSONqemuMonitorJSONGetMigrationParams(= const void *data) " \"tls-hostname\": \"\"," " \"max-bandwidth\": 1234567890," " \"downtime-limit\": 500," - " \"block-incremental\": true" + " \"block-incremental\": true," + " \"xbzrle-cache-size\": 67108864" " }" "}") < 0) { goto cleanup; @@ -1867,6 +1868,7 @@ testQemuMonitorJSONqemuMonitorJSONGetMigrationParams(= const void *data) CHECK_ULONG(maxBandwidth, "max-bandwidth", 1234567890ULL); CHECK_ULONG(downtimeLimit, "downtime-limit", 500ULL); CHECK_BOOL(blockIncremental, "block-incremental", true); + CHECK_ULONG(xbzrleCacheSize, "xbzrle-cache-size", 67108864ULL); =20 #undef CHECK_NUM #undef CHECK_INT --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457791311220.8298896969011; Wed, 11 Apr 2018 07:43:11 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 00C2328144; Wed, 11 Apr 2018 14:43:09 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 64BC07E6BC; Wed, 11 Apr 2018 14:43:09 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 2DD1A4CABE; Wed, 11 Apr 2018 14:43:09 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgFGP008746 for ; Wed, 11 Apr 2018 10:42:15 -0400 Received: by smtp.corp.redhat.com (Postfix) id 29D452024CA4; Wed, 11 Apr 2018 14:42:15 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id E13F82024CA7 for ; Wed, 11 Apr 2018 14:42:14 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 6AAD4100906; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:20 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 30/73] qemu: Set XBZRLE cache size via migration parameters X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Wed, 11 Apr 2018 14:43:10 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Prefer xbzrle-cache-size migration parameter over the special migrate-set-cache-size QMP command. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_migration.c | 6 ++--- src/qemu/qemu_migration_params.c | 42 +++++++++++++++++--------------- src/qemu/qemu_migration_params.h | 4 +-- 3 files changed, 25 insertions(+), 27 deletions(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index e01c2a209d..476417c15d 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -2383,8 +2383,7 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, if (qemuMigrationParamsCheck(driver, vm, QEMU_ASYNC_JOB_MIGRATION_IN) = < 0) goto stopjob; =20 - if (qemuMigrationParamsSetCompression(driver, vm, QEMU_ASYNC_JOB_MIGRA= TION_IN, - compression, migParams) < 0) + if (qemuMigrationParamsSetCompression(vm, compression, migParams) < 0) goto stopjob; =20 /* Migrations using TLS need to add the "tls-creds-x509" object and @@ -3383,8 +3382,7 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, goto error; } =20 - if (qemuMigrationParamsSetCompression(driver, vm, QEMU_ASYNC_JOB_MIGRA= TION_OUT, - compression, migParams) < 0) + if (qemuMigrationParamsSetCompression(vm, compression, migParams) < 0) goto error; =20 if (qemuMigrationParamsSetCapability(vm, diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 53e105bec8..faaaa29cc9 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -141,6 +141,7 @@ qemuMigrationParamsApply(virQEMUDriverPtr driver, qemuMigrationParamsPtr migParams) { qemuDomainObjPrivatePtr priv =3D vm->privateData; + bool xbzrleCacheSize_old =3D false; int ret =3D -1; =20 if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) @@ -150,6 +151,20 @@ qemuMigrationParamsApply(virQEMUDriverPtr driver, migParams->caps) < 0) goto cleanup; =20 + /* If QEMU is too old to support xbzrle-cache-size migration parameter, + * we need to set it via migrate-set-cache-size and tell + * qemuMonitorSetMigrationParams to ignore this parameter. + */ + if (migParams->params.xbzrleCacheSize_set && + (!priv->job.migParams || + !priv->job.migParams->params.xbzrleCacheSize_set)) { + if (qemuMonitorSetMigrationCacheSize(priv->mon, + migParams->params.xbzrleCache= Size) < 0) + goto cleanup; + xbzrleCacheSize_old =3D true; + migParams->params.xbzrleCacheSize_set =3D false; + } + if (qemuMonitorSetMigrationParams(priv->mon, &migParams->params) < 0) goto cleanup; =20 @@ -159,6 +174,9 @@ qemuMigrationParamsApply(virQEMUDriverPtr driver, if (qemuDomainObjExitMonitor(driver, vm) < 0) ret =3D -1; =20 + if (xbzrleCacheSize_old) + migParams->params.xbzrleCacheSize_set =3D true; + return ret; } =20 @@ -321,15 +339,10 @@ qemuMigrationParamsDisableTLS(virDomainObjPtr vm, =20 =20 int -qemuMigrationParamsSetCompression(virQEMUDriverPtr driver, - virDomainObjPtr vm, - int asyncJob, +qemuMigrationParamsSetCompression(virDomainObjPtr vm, qemuMigrationCompressionPtr compression, qemuMigrationParamsPtr migParams) { - int ret =3D -1; - qemuDomainObjPrivatePtr priv =3D vm->privateData; - if (qemuMigrationParamsSetCapability(vm, QEMU_MONITOR_MIGRATION_CAPS_XBZRL= E, compression->methods & @@ -344,9 +357,6 @@ qemuMigrationParamsSetCompression(virQEMUDriverPtr driv= er, migParams) < 0) return -1; =20 - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) - return -1; - migParams->params.compressLevel_set =3D compression->level_set; migParams->params.compressLevel =3D compression->level; =20 @@ -356,18 +366,10 @@ qemuMigrationParamsSetCompression(virQEMUDriverPtr dr= iver, migParams->params.decompressThreads_set =3D compression->dthreads_set; migParams->params.decompressThreads =3D compression->dthreads; =20 - if (compression->xbzrle_cache_set && - qemuMonitorSetMigrationCacheSize(priv->mon, - compression->xbzrle_cache) < 0) - goto cleanup; + migParams->params.xbzrleCacheSize_set =3D compression->xbzrle_cache_se= t; + migParams->params.xbzrleCacheSize =3D compression->xbzrle_cache; =20 - ret =3D 0; - - cleanup: - if (qemuDomainObjExitMonitor(driver, vm) < 0) - ret =3D -1; - - return ret; + return 0; } =20 =20 diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index e341f73900..4cb70f62a4 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -94,9 +94,7 @@ qemuMigrationParamsDisableTLS(virDomainObjPtr vm, qemuMigrationParamsPtr migParams); =20 int -qemuMigrationParamsSetCompression(virQEMUDriverPtr driver, - virDomainObjPtr vm, - int asyncJob, +qemuMigrationParamsSetCompression(virDomainObjPtr vm, qemuMigrationCompressionPtr compression, qemuMigrationParamsPtr migParams); =20 --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523780543953834.311712463124; Sun, 15 Apr 2018 01:22:23 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 37B0C80467; Sun, 15 Apr 2018 08:22:22 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id F180C7DEF8; Sun, 15 Apr 2018 08:22:21 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id A8CC05BBF2; Sun, 15 Apr 2018 08:22:21 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgFEF008754 for ; Wed, 11 Apr 2018 10:42:15 -0400 Received: by smtp.corp.redhat.com (Postfix) id 4FDD8AB3E5; Wed, 11 Apr 2018 14:42:15 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 2F5CB946D5 for ; Wed, 11 Apr 2018 14:42:15 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 70116100A73; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:21 +0200 Message-Id: <7c3f3204a22d428e5b95c4e5688ab0589ef6e97d.1523456480.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 31/73] qemu: Move ParamsCheck closer to ParamsApply on Dst side X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Sun, 15 Apr 2018 08:22:23 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" We reached the point when qemuMigrationParamsApply is the only API which sends migration parameters and capabilities to QEMU. Thus all but the TLS parameters can be set before we ask QEMU for the current values of all parameters in qemuMigrationParamsCheck. Supported migration capabilities are queried as soon as libvirt connects to QEMU monitor so we can check them anytime. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_migration.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 476417c15d..c97911039d 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -2380,25 +2380,9 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, dataFD[1] =3D -1; /* 'st' owns the FD now & will close it */ } =20 - if (qemuMigrationParamsCheck(driver, vm, QEMU_ASYNC_JOB_MIGRATION_IN) = < 0) - goto stopjob; - if (qemuMigrationParamsSetCompression(vm, compression, migParams) < 0) goto stopjob; =20 - /* Migrations using TLS need to add the "tls-creds-x509" object and - * set the migration TLS parameters */ - if (flags & VIR_MIGRATE_TLS) { - if (qemuMigrationParamsEnableTLS(driver, vm, true, - QEMU_ASYNC_JOB_MIGRATION_IN, - &tlsAlias, &secAlias, NULL, - migParams) < 0) - goto stopjob; - } else { - if (qemuMigrationParamsDisableTLS(vm, migParams) < 0) - goto stopjob; - } - if (STREQ_NULLABLE(protocol, "rdma") && virProcessSetMaxMemLock(vm->pid, vm->def->mem.hard_limit << 10) < = 0) { goto stopjob; @@ -2414,6 +2398,22 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, migParams) < 0) goto stopjob; =20 + if (qemuMigrationParamsCheck(driver, vm, QEMU_ASYNC_JOB_MIGRATION_IN) = < 0) + goto stopjob; + + /* Migrations using TLS need to add the "tls-creds-x509" object and + * set the migration TLS parameters */ + if (flags & VIR_MIGRATE_TLS) { + if (qemuMigrationParamsEnableTLS(driver, vm, true, + QEMU_ASYNC_JOB_MIGRATION_IN, + &tlsAlias, &secAlias, NULL, + migParams) < 0) + goto stopjob; + } else { + if (qemuMigrationParamsDisableTLS(vm, migParams) < 0) + goto stopjob; + } + if (qemuMigrationParamsApply(driver, vm, QEMU_ASYNC_JOB_MIGRATION_IN, migParams) < 0) goto stopjob; --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523780547581859.8442591253317; Sun, 15 Apr 2018 01:22:27 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 20B123135B14; Sun, 15 Apr 2018 08:22:26 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id CFB6880F90; Sun, 15 Apr 2018 08:22:25 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 603F55BBF3; Sun, 15 Apr 2018 08:22:25 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgFBh008752 for ; Wed, 11 Apr 2018 10:42:15 -0400 Received: by smtp.corp.redhat.com (Postfix) id 49C0B215CDCB; Wed, 11 Apr 2018 14:42:15 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 0CC38215CDAF for ; Wed, 11 Apr 2018 14:42:15 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 757FB100A75; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:22 +0200 Message-Id: <032c2abc17010bf2bb45da2b0d8ced695fc043d5.1523456480.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 32/73] qemu: Move ParamsCheck closer to ParamsApply on Src side X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.46]); Sun, 15 Apr 2018 08:22:26 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" We reached the point when qemuMigrationParamsApply is the only API which sends migration parameters and capabilities to QEMU. Thus all but the TLS parameters can be set before we ask QEMU for the current values of all parameters in qemuMigrationParamsCheck. Supported migration capabilities are queried as soon as libvirt connects to QEMU monitor so we can check them anytime. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_migration.c | 67 +++++++++++++++++++-------------------- 1 file changed, 32 insertions(+), 35 deletions(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index c97911039d..3f443a756b 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -3335,6 +3335,34 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, if (qemuMigrationSrcGraphicsRelocate(driver, vm, mig, graphicsuri) < 0) VIR_WARN("unable to provide data for graphics client relocation"); =20 + if (qemuMigrationParamsSetCompression(vm, compression, migParams) < 0) + goto error; + + if (qemuMigrationParamsSetCapability(vm, + QEMU_MONITOR_MIGRATION_CAPS_AUTO_= CONVERGE, + flags & VIR_MIGRATE_AUTO_CONVERGE, + migParams) < 0) + goto error; + + if (qemuMigrationParamsSetCapability(vm, + QEMU_MONITOR_MIGRATION_CAPS_RDMA_= PIN_ALL, + flags & VIR_MIGRATE_RDMA_PIN_ALL, + migParams) < 0) + goto error; + + if (qemuMigrationParamsSetPostCopy(vm, flags & VIR_MIGRATE_POSTCOPY, + migParams) < 0) + goto error; + + if (qemuMigrationCapsGet(vm, QEMU_MONITOR_MIGRATION_CAPS_PAUSE_BEFORE_= SWITCHOVER) && + qemuMigrationParamsSetCapability(vm, + QEMU_MONITOR_MIGRATION_CAPS_PAUSE= _BEFORE_SWITCHOVER, + true, migParams) < 0) + goto error; + + if (qemuMigrationParamsCheck(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT)= < 0) + goto error; + if (flags & VIR_MIGRATE_TLS) { const char *hostname =3D NULL; =20 @@ -3354,6 +3382,10 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, goto error; } =20 + if (qemuMigrationParamsApply(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT, + migParams) < 0) + goto error; + if (migrate_flags & (QEMU_MONITOR_MIGRATE_NON_SHARED_DISK | QEMU_MONITOR_MIGRATE_NON_SHARED_INC)) { if (mig->nbd) { @@ -3382,35 +3414,6 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, goto error; } =20 - if (qemuMigrationParamsSetCompression(vm, compression, migParams) < 0) - goto error; - - if (qemuMigrationParamsSetCapability(vm, - QEMU_MONITOR_MIGRATION_CAPS_AUTO_= CONVERGE, - flags & VIR_MIGRATE_AUTO_CONVERGE, - migParams) < 0) - goto error; - - if (qemuMigrationParamsSetCapability(vm, - QEMU_MONITOR_MIGRATION_CAPS_RDMA_= PIN_ALL, - flags & VIR_MIGRATE_RDMA_PIN_ALL, - migParams) < 0) - goto error; - - if (qemuMigrationParamsSetPostCopy(vm, flags & VIR_MIGRATE_POSTCOPY, - migParams) < 0) - goto error; - - if (qemuMigrationCapsGet(vm, QEMU_MONITOR_MIGRATION_CAPS_PAUSE_BEFORE_= SWITCHOVER) && - qemuMigrationParamsSetCapability(vm, - QEMU_MONITOR_MIGRATION_CAPS_PAUSE= _BEFORE_SWITCHOVER, - true, migParams) < 0) - goto error; - - if (qemuMigrationParamsApply(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT, - migParams) < 0) - goto error; - if (qemuDomainObjEnterMonitorAsync(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT) < 0) goto error; @@ -4508,9 +4511,6 @@ qemuMigrationSrcPerformJob(virQEMUDriverPtr driver, =20 qemuMigrationSrcStoreDomainState(vm); =20 - if (qemuMigrationParamsCheck(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT)= < 0) - goto endjob; - if ((flags & (VIR_MIGRATE_TUNNELLED | VIR_MIGRATE_PEER2PEER))) { ret =3D qemuMigrationSrcPerformPeer2Peer(driver, conn, vm, xmlin, = persist_xml, dconnuri, uri, graphicsuri,= listenAddress, @@ -4616,9 +4616,6 @@ qemuMigrationSrcPerformPhase(virQEMUDriverPtr driver, virCloseCallbacksUnset(driver->closeCallbacks, vm, qemuMigrationSrcCleanup); =20 - if (qemuMigrationParamsCheck(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT)= < 0) - goto endjob; - ret =3D qemuMigrationSrcPerformNative(driver, vm, persist_xml, uri, co= okiein, cookieinlen, cookieout, cookieoutlen, flags, resource, NULL, graphicsuri, --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 15234577692301000.330360925365; Wed, 11 Apr 2018 07:42:49 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id E541187633; Wed, 11 Apr 2018 14:42:47 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id BDABBA0994; Wed, 11 Apr 2018 14:42:47 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 83F051805972; Wed, 11 Apr 2018 14:42:47 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgFIC008753 for ; Wed, 11 Apr 2018 10:42:15 -0400 Received: by smtp.corp.redhat.com (Postfix) id 4463C10B0F3B; Wed, 11 Apr 2018 14:42:15 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 08B9210B0F38 for ; Wed, 11 Apr 2018 14:42:15 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 7AE52100AA9; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:23 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 33/73] qemu: Check supported caps in qemuMigrationParamsCheck X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Wed, 11 Apr 2018 14:42:48 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Instead of checking each capability at the time we want to set it in qemuMigrationParamsSetCapability we can check all of them at once in qemuMigrationParamsCheck. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_migration.c | 6 ++++-- src/qemu/qemu_migration_params.c | 33 ++++++++++++++++++-------------- src/qemu/qemu_migration_params.h | 3 ++- 3 files changed, 25 insertions(+), 17 deletions(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 3f443a756b..eb544bbb77 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -2398,7 +2398,8 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, migParams) < 0) goto stopjob; =20 - if (qemuMigrationParamsCheck(driver, vm, QEMU_ASYNC_JOB_MIGRATION_IN) = < 0) + if (qemuMigrationParamsCheck(driver, vm, QEMU_ASYNC_JOB_MIGRATION_IN, + migParams) < 0) goto stopjob; =20 /* Migrations using TLS need to add the "tls-creds-x509" object and @@ -3360,7 +3361,8 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, true, migParams) < 0) goto error; =20 - if (qemuMigrationParamsCheck(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT)= < 0) + if (qemuMigrationParamsCheck(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT, + migParams) < 0) goto error; =20 if (flags & VIR_MIGRATE_TLS) { diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index faaaa29cc9..a7b5ce385e 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -182,23 +182,11 @@ qemuMigrationParamsApply(virQEMUDriverPtr driver, =20 =20 int -qemuMigrationParamsSetCapability(virDomainObjPtr vm, +qemuMigrationParamsSetCapability(virDomainObjPtr vm ATTRIBUTE_UNUSED, qemuMonitorMigrationCaps capability, bool state, qemuMigrationParamsPtr migParams) { - if (!qemuMigrationCapsGet(vm, capability)) { - if (!state) { - /* Unsupported but we want it off anyway */ - return 0; - } - - virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, - _("Migration option '%s' is not supported by QEMU b= inary"), - qemuMonitorMigrationCapsTypeToString(capability)); - return -1; - } - if (state) ignore_value(virBitmapSetBit(migParams->caps, capability)); else @@ -413,16 +401,33 @@ qemuMigrationParamsResetTLS(virQEMUDriverPtr driver, * * Check supported migration parameters and keep their original values in * qemuDomainJobObj so that we can properly reset them at the end of migra= tion. + * Reports an error if any of the currently used capabilities in @migParams + * are unsupported by QEMU. */ int qemuMigrationParamsCheck(virQEMUDriverPtr driver, virDomainObjPtr vm, - int asyncJob) + int asyncJob, + qemuMigrationParamsPtr migParams) { qemuDomainObjPrivatePtr priv =3D vm->privateData; qemuMigrationParamsPtr origParams =3D NULL; + qemuMonitorMigrationCaps cap; int ret =3D -1; =20 + for (cap =3D 0; cap < QEMU_MONITOR_MIGRATION_CAPS_LAST; cap++) { + bool state =3D false; + + ignore_value(virBitmapGetBit(migParams->caps, cap, &state)); + + if (state && !qemuMigrationCapsGet(vm, cap)) { + virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, + _("Migration option '%s' is not supported by QE= MU binary"), + qemuMonitorMigrationCapsTypeToString(cap)); + return -1; + } + } + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) return -1; =20 diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index 4cb70f62a4..7ca667a507 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -101,7 +101,8 @@ qemuMigrationParamsSetCompression(virDomainObjPtr vm, int qemuMigrationParamsCheck(virQEMUDriverPtr driver, virDomainObjPtr vm, - int asyncJob); + int asyncJob, + qemuMigrationParamsPtr migParams); =20 void qemuMigrationParamsReset(virQEMUDriverPtr driver, --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457794317628.2756623091075; Wed, 11 Apr 2018 07:43:14 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id D7F2A85A04; Wed, 11 Apr 2018 14:43:12 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 73AE68779A; Wed, 11 Apr 2018 14:43:12 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 143AF4ED20; Wed, 11 Apr 2018 14:43:12 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgFv1008748 for ; Wed, 11 Apr 2018 10:42:15 -0400 Received: by smtp.corp.redhat.com (Postfix) id 2CFCB10B0F3A; Wed, 11 Apr 2018 14:42:15 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 0D6F410B0F3B for ; Wed, 11 Apr 2018 14:42:15 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 80577100AE6; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:24 +0200 Message-Id: <48a2a365a21f0b391d71b346cbbc97e5a5007c64.1523456480.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 34/73] qemu: Introduce qemuMigrationParty enum X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Wed, 11 Apr 2018 14:43:13 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Some migration parameters and capabilities are supposed to be set on both sides of migration while others should only be set on one side. For example, CPU throttling parameters make no sense on the destination and they can be used even if the destination is too old to support them. To make qemuMigrationParamsFromFlags more general and usable on both sides of migration, we need to tell it what side it's been called on. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_driver.c | 3 ++- src/qemu/qemu_migration_params.c | 9 ++++++--- src/qemu/qemu_migration_params.h | 8 +++++++- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 6e6fc130c5..d8a641f77d 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -12765,7 +12765,8 @@ qemuDomainMigratePerform3Params(virDomainPtr dom, if (nmigrate_disks < 0) goto cleanup; =20 - if (!(migParams =3D qemuMigrationParamsFromFlags(params, nparams, flag= s))) + if (!(migParams =3D qemuMigrationParamsFromFlags(params, nparams, flag= s, + QEMU_MIGRATION_SOURCE))) goto cleanup; =20 if (!(compression =3D qemuMigrationAnyCompressionParse(params, nparams= , flags))) diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index a7b5ce385e..b55abc2e36 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -80,7 +80,8 @@ qemuMigrationParamsFree(qemuMigrationParamsPtr migParams) qemuMigrationParamsPtr qemuMigrationParamsFromFlags(virTypedParameterPtr params, int nparams, - unsigned long flags) + unsigned long flags, + qemuMigrationParty party) { qemuMigrationParamsPtr migParams; =20 @@ -102,8 +103,10 @@ qemuMigrationParamsFromFlags(virTypedParameterPtr para= ms, migParams->params.VAR ## _set =3D true; \ } while (0) =20 - GET(AUTO_CONVERGE_INITIAL, cpuThrottleInitial); - GET(AUTO_CONVERGE_INCREMENT, cpuThrottleIncrement); + if (party =3D=3D QEMU_MIGRATION_SOURCE) { + GET(AUTO_CONVERGE_INITIAL, cpuThrottleInitial); + GET(AUTO_CONVERGE_INCREMENT, cpuThrottleIncrement); + } =20 #undef GET =20 diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index 7ca667a507..d66fdb7cde 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -50,6 +50,11 @@ struct _qemuMigrationCompression { typedef struct _qemuMigrationParams qemuMigrationParams; typedef qemuMigrationParams *qemuMigrationParamsPtr; =20 +typedef enum { + QEMU_MIGRATION_SOURCE =3D (1 << 0), + QEMU_MIGRATION_DESTINATION =3D (1 << 1), +} qemuMigrationParty; + =20 qemuMigrationParamsPtr qemuMigrationParamsNew(void); @@ -57,7 +62,8 @@ qemuMigrationParamsNew(void); qemuMigrationParamsPtr qemuMigrationParamsFromFlags(virTypedParameterPtr params, int nparams, - unsigned long flags); + unsigned long flags, + qemuMigrationParty party); =20 void qemuMigrationParamsFree(qemuMigrationParamsPtr migParams); --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457776744914.9674529988023; Wed, 11 Apr 2018 07:42:56 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 3A5213130398; Wed, 11 Apr 2018 14:42:54 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 0C3BE78BB3; Wed, 11 Apr 2018 14:42:54 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id C50344CAB5; Wed, 11 Apr 2018 14:42:53 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgF00008795 for ; Wed, 11 Apr 2018 10:42:15 -0400 Received: by smtp.corp.redhat.com (Postfix) id B5E2D215CDCB; Wed, 11 Apr 2018 14:42:15 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 5CD5C215CDAF for ; Wed, 11 Apr 2018 14:42:15 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 85980100B66; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:25 +0200 Message-Id: <0b40e0c0e5dc5f9d076480c7a4ad5ac7fbeff24f.1523456480.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 35/73] qemu: Use qemuMigrationParamsFromFlags everywhere X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.43]); Wed, 11 Apr 2018 14:42:54 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Every migration entry point in qemu_driver is supposed to call qemuMigrationParamsFromFlags to transform flags and parameters into qemuMigrationParams structure and pass the result to qemuMigration* APIs. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_driver.c | 64 +++++++++++++++++++++++++++++++-------- src/qemu/qemu_migration.c | 23 ++++++-------- src/qemu/qemu_migration.h | 2 ++ 3 files changed, 62 insertions(+), 27 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index d8a641f77d..5271e01d92 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -12126,6 +12126,7 @@ qemuDomainMigratePrepareTunnel(virConnectPtr dconn, virQEMUDriverPtr driver =3D dconn->privateData; virDomainDefPtr def =3D NULL; char *origname =3D NULL; + qemuMigrationParamsPtr migParams =3D NULL; int ret =3D -1; =20 virCheckFlags(QEMU_MIGRATION_FLAGS, -1); @@ -12136,6 +12137,10 @@ qemuDomainMigratePrepareTunnel(virConnectPtr dconn, goto cleanup; } =20 + if (!(migParams =3D qemuMigrationParamsFromFlags(NULL, 0, flags, + QEMU_MIGRATION_DESTINAT= ION))) + goto cleanup; + if (virLockManagerPluginUsesState(driver->lockManager)) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Cannot use migrate v2 protocol with lock manager= %s"), @@ -12151,9 +12156,10 @@ qemuDomainMigratePrepareTunnel(virConnectPtr dconn, =20 ret =3D qemuMigrationDstPrepareTunnel(driver, dconn, NULL, 0, NULL, NULL, /* No cookies= in v2 */ - st, &def, origname, flags); + st, &def, origname, migParams, fla= gs); =20 cleanup: + qemuMigrationParamsFree(migParams); VIR_FREE(origname); virDomainDefFree(def); return ret; @@ -12178,6 +12184,7 @@ qemuDomainMigratePrepare2(virConnectPtr dconn, virDomainDefPtr def =3D NULL; char *origname =3D NULL; qemuMigrationCompressionPtr compression =3D NULL; + qemuMigrationParamsPtr migParams =3D NULL; int ret =3D -1; =20 virCheckFlags(QEMU_MIGRATION_FLAGS, -1); @@ -12195,6 +12202,10 @@ qemuDomainMigratePrepare2(virConnectPtr dconn, if (!(compression =3D qemuMigrationAnyCompressionParse(NULL, 0, flags)= )) goto cleanup; =20 + if (!(migParams =3D qemuMigrationParamsFromFlags(NULL, 0, flags, + QEMU_MIGRATION_DESTINAT= ION))) + goto cleanup; + if (virLockManagerPluginUsesState(driver->lockManager)) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Cannot use migrate v2 protocol with lock manager= %s"), @@ -12216,9 +12227,10 @@ qemuDomainMigratePrepare2(virConnectPtr dconn, NULL, 0, NULL, NULL, /* No cookies= */ uri_in, uri_out, &def, origname, NULL, 0, NULL, 0, - compression, flags); + compression, migParams, flags); =20 cleanup: + qemuMigrationParamsFree(migParams); VIR_FREE(compression); VIR_FREE(origname); virDomainDefFree(def); @@ -12252,10 +12264,11 @@ qemuDomainMigratePerform(virDomainPtr dom, goto cleanup; } =20 - if (!(migParams =3D qemuMigrationParamsNew())) + if (!(compression =3D qemuMigrationAnyCompressionParse(NULL, 0, flags)= )) goto cleanup; =20 - if (!(compression =3D qemuMigrationAnyCompressionParse(NULL, 0, flags)= )) + if (!(migParams =3D qemuMigrationParamsFromFlags(NULL, 0, flags, + QEMU_MIGRATION_SOURCE))) goto cleanup; =20 if (!(vm =3D qemuDomObjFromDomain(dom))) @@ -12430,6 +12443,7 @@ qemuDomainMigratePrepare3(virConnectPtr dconn, virDomainDefPtr def =3D NULL; char *origname =3D NULL; qemuMigrationCompressionPtr compression =3D NULL; + qemuMigrationParamsPtr migParams =3D NULL; int ret =3D -1; =20 virCheckFlags(QEMU_MIGRATION_FLAGS, -1); @@ -12447,6 +12461,10 @@ qemuDomainMigratePrepare3(virConnectPtr dconn, if (!(compression =3D qemuMigrationAnyCompressionParse(NULL, 0, flags)= )) goto cleanup; =20 + if (!(migParams =3D qemuMigrationParamsFromFlags(NULL, 0, flags, + QEMU_MIGRATION_DESTINAT= ION))) + goto cleanup; + if (!(def =3D qemuMigrationAnyPrepareDef(driver, dom_xml, dname, &orig= name))) goto cleanup; =20 @@ -12458,9 +12476,10 @@ qemuDomainMigratePrepare3(virConnectPtr dconn, cookieout, cookieoutlen, uri_in, uri_out, &def, origname, NULL, 0, NULL, 0, - compression, flags); + compression, migParams, flags); =20 cleanup: + qemuMigrationParamsFree(migParams); VIR_FREE(compression); VIR_FREE(origname); virDomainDefFree(def); @@ -12490,6 +12509,7 @@ qemuDomainMigratePrepare3Params(virConnectPtr dconn, const char **migrate_disks =3D NULL; char *origname =3D NULL; qemuMigrationCompressionPtr compression =3D NULL; + qemuMigrationParamsPtr migParams =3D NULL; int ret =3D -1; =20 virCheckFlagsGoto(QEMU_MIGRATION_FLAGS, cleanup); @@ -12523,6 +12543,10 @@ qemuDomainMigratePrepare3Params(virConnectPtr dcon= n, if (!(compression =3D qemuMigrationAnyCompressionParse(params, nparams= , flags))) goto cleanup; =20 + if (!(migParams =3D qemuMigrationParamsFromFlags(params, nparams, flag= s, + QEMU_MIGRATION_DESTINAT= ION))) + goto cleanup; + if (flags & VIR_MIGRATE_TUNNELLED) { /* this is a logical error; we never should have gotten here with * VIR_MIGRATE_TUNNELLED set @@ -12545,9 +12569,10 @@ qemuDomainMigratePrepare3Params(virConnectPtr dcon= n, uri_in, uri_out, &def, origname, listenAddress, nmigrate_disks, migrate_disks, nbd= Port, - compression, flags); + compression, migParams, flags); =20 cleanup: + qemuMigrationParamsFree(migParams); VIR_FREE(compression); VIR_FREE(migrate_disks); VIR_FREE(origname); @@ -12572,6 +12597,7 @@ qemuDomainMigratePrepareTunnel3(virConnectPtr dconn, virQEMUDriverPtr driver =3D dconn->privateData; virDomainDefPtr def =3D NULL; char *origname =3D NULL; + qemuMigrationParamsPtr migParams =3D NULL; int ret =3D -1; =20 virCheckFlags(QEMU_MIGRATION_FLAGS, -1); @@ -12582,6 +12608,10 @@ qemuDomainMigratePrepareTunnel3(virConnectPtr dcon= n, goto cleanup; } =20 + if (!(migParams =3D qemuMigrationParamsFromFlags(NULL, 0, flags, + QEMU_MIGRATION_DESTINAT= ION))) + goto cleanup; + if (!(def =3D qemuMigrationAnyPrepareDef(driver, dom_xml, dname, &orig= name))) goto cleanup; =20 @@ -12591,9 +12621,10 @@ qemuDomainMigratePrepareTunnel3(virConnectPtr dcon= n, ret =3D qemuMigrationDstPrepareTunnel(driver, dconn, cookiein, cookieinlen, cookieout, cookieoutlen, - st, &def, origname, flags); + st, &def, origname, migParams, fla= gs); =20 cleanup: + qemuMigrationParamsFree(migParams); VIR_FREE(origname); virDomainDefFree(def); return ret; @@ -12615,6 +12646,7 @@ qemuDomainMigratePrepareTunnel3Params(virConnectPtr= dconn, const char *dom_xml =3D NULL; const char *dname =3D NULL; char *origname =3D NULL; + qemuMigrationParamsPtr migParams =3D NULL; int ret =3D -1; =20 virCheckFlags(QEMU_MIGRATION_FLAGS, -1); @@ -12635,6 +12667,10 @@ qemuDomainMigratePrepareTunnel3Params(virConnectPt= r dconn, goto cleanup; } =20 + if (!(migParams =3D qemuMigrationParamsFromFlags(params, nparams, flag= s, + QEMU_MIGRATION_DESTINAT= ION))) + goto cleanup; + if (!(def =3D qemuMigrationAnyPrepareDef(driver, dom_xml, dname, &orig= name))) goto cleanup; =20 @@ -12644,9 +12680,10 @@ qemuDomainMigratePrepareTunnel3Params(virConnectPt= r dconn, ret =3D qemuMigrationDstPrepareTunnel(driver, dconn, cookiein, cookieinlen, cookieout, cookieoutlen, - st, &def, origname, flags); + st, &def, origname, migParams, fla= gs); =20 cleanup: + qemuMigrationParamsFree(migParams); VIR_FREE(origname); virDomainDefFree(def); return ret; @@ -12674,10 +12711,11 @@ qemuDomainMigratePerform3(virDomainPtr dom, =20 virCheckFlags(QEMU_MIGRATION_FLAGS, -1); =20 - if (!(migParams =3D qemuMigrationParamsNew())) + if (!(compression =3D qemuMigrationAnyCompressionParse(NULL, 0, flags)= )) goto cleanup; =20 - if (!(compression =3D qemuMigrationAnyCompressionParse(NULL, 0, flags)= )) + if (!(migParams =3D qemuMigrationParamsFromFlags(NULL, 0, flags, + QEMU_MIGRATION_SOURCE))) goto cleanup; =20 if (!(vm =3D qemuDomObjFromDomain(dom))) @@ -12765,11 +12803,11 @@ qemuDomainMigratePerform3Params(virDomainPtr dom, if (nmigrate_disks < 0) goto cleanup; =20 - if (!(migParams =3D qemuMigrationParamsFromFlags(params, nparams, flag= s, - QEMU_MIGRATION_SOURCE))) + if (!(compression =3D qemuMigrationAnyCompressionParse(params, nparams= , flags))) goto cleanup; =20 - if (!(compression =3D qemuMigrationAnyCompressionParse(params, nparams= , flags))) + if (!(migParams =3D qemuMigrationParamsFromFlags(params, nparams, flag= s, + QEMU_MIGRATION_SOURCE))) goto cleanup; =20 if (!(vm =3D qemuDomObjFromDomain(dom))) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index eb544bbb77..5614f0d43e 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -2164,6 +2164,7 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, const char **migrate_disks, int nbdPort, qemuMigrationCompressionPtr compression, + qemuMigrationParamsPtr migParams, unsigned long flags) { virDomainObjPtr vm =3D NULL; @@ -2184,7 +2185,6 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, int rv; char *tlsAlias =3D NULL; char *secAlias =3D NULL; - qemuMigrationParamsPtr migParams =3D NULL; =20 virNWFilterReadLockFilterUpdates(); =20 @@ -2234,9 +2234,6 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, if (!qemuMigrationSrcIsAllowedHostdev(*def)) goto cleanup; =20 - if (!(migParams =3D qemuMigrationParamsNew())) - goto cleanup; - /* Let migration hook filter domain XML */ if (virHookPresent(VIR_HOOK_DRIVER_QEMU)) { char *xml; @@ -2503,7 +2500,6 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, virDomainObjRemoveTransientDef(vm); qemuDomainRemoveInactiveJob(driver, vm); } - qemuMigrationParamsFree(migParams); virDomainObjEndAPI(&vm); qemuDomainEventQueue(driver, event); qemuMigrationCookieFree(mig); @@ -2543,6 +2539,7 @@ qemuMigrationDstPrepareTunnel(virQEMUDriverPtr driver, virStreamPtr st, virDomainDefPtr *def, const char *origname, + qemuMigrationParamsPtr migParams, unsigned long flags) { qemuMigrationCompressionPtr compression =3D NULL; @@ -2566,7 +2563,7 @@ qemuMigrationDstPrepareTunnel(virQEMUDriverPtr driver, ret =3D qemuMigrationDstPrepareAny(driver, dconn, cookiein, cookieinle= n, cookieout, cookieoutlen, def, orignam= e, st, NULL, 0, false, NULL, 0, NULL, 0, - compression, flags); + compression, migParams, flags); VIR_FREE(compression); return ret; } @@ -2611,6 +2608,7 @@ qemuMigrationDstPrepareDirect(virQEMUDriverPtr driver, const char **migrate_disks, int nbdPort, qemuMigrationCompressionPtr compression, + qemuMigrationParamsPtr migParams, unsigned long flags) { unsigned short port =3D 0; @@ -2734,7 +2732,7 @@ qemuMigrationDstPrepareDirect(virQEMUDriverPtr driver, NULL, uri ? uri->scheme : "tcp", port, autoPort, listenAddress, nmigrate_disks, migrate_disks, nbdPor= t, - compression, flags); + compression, migParams, flags); cleanup: virURIFree(uri); VIR_FREE(hostname); @@ -3788,7 +3786,8 @@ qemuMigrationSrcPerformPeer2Peer2(virQEMUDriverPtr dr= iver, const char *dconnuri, unsigned long flags, const char *dname, - unsigned long resource) + unsigned long resource, + qemuMigrationParamsPtr migParams) { virDomainPtr ddomain =3D NULL; char *uri_out =3D NULL; @@ -3800,7 +3799,6 @@ qemuMigrationSrcPerformPeer2Peer2(virQEMUDriverPtr dr= iver, virStreamPtr st =3D NULL; unsigned long destflags; qemuMigrationCompressionPtr compression =3D NULL; - qemuMigrationParamsPtr migParams =3D NULL; =20 VIR_DEBUG("driver=3D%p, sconn=3D%p, dconn=3D%p, vm=3D%p, dconnuri=3D%s= , " "flags=3D0x%lx, dname=3D%s, resource=3D%lu", @@ -3822,9 +3820,6 @@ qemuMigrationSrcPerformPeer2Peer2(virQEMUDriverPtr dr= iver, destflags =3D flags & ~(VIR_MIGRATE_ABORT_ON_ERROR | VIR_MIGRATE_AUTO_CONVERGE); =20 - if (!(migParams =3D qemuMigrationParamsNew())) - goto cleanup; - if (!(compression =3D qemuMigrationAnyCompressionParse(NULL, 0, flags)= )) goto cleanup; =20 @@ -3926,7 +3921,6 @@ qemuMigrationSrcPerformPeer2Peer2(virQEMUDriverPtr dr= iver, virSetError(orig_err); virFreeError(orig_err); } - qemuMigrationParamsFree(migParams); VIR_FREE(uri_out); VIR_FREE(cookie); VIR_FREE(compression); @@ -4442,7 +4436,8 @@ qemuMigrationSrcPerformPeer2Peer(virQEMUDriverPtr dri= ver, useParams, flags); } else { ret =3D qemuMigrationSrcPerformPeer2Peer2(driver, sconn, dconn, vm, - dconnuri, flags, dname, re= source); + dconnuri, flags, dname, re= source, + migParams); } =20 cleanup: diff --git a/src/qemu/qemu_migration.h b/src/qemu/qemu_migration.h index fc81eb5016..2bf710a919 100644 --- a/src/qemu/qemu_migration.h +++ b/src/qemu/qemu_migration.h @@ -148,6 +148,7 @@ qemuMigrationDstPrepareTunnel(virQEMUDriverPtr driver, virStreamPtr st, virDomainDefPtr *def, const char *origname, + qemuMigrationParamsPtr migParams, unsigned long flags); =20 int @@ -166,6 +167,7 @@ qemuMigrationDstPrepareDirect(virQEMUDriverPtr driver, const char **migrate_disks, int nbdPort, qemuMigrationCompressionPtr compression, + qemuMigrationParamsPtr migParams, unsigned long flags); =20 int --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457798172434.245547274871; Wed, 11 Apr 2018 07:43:18 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id B78F180C2F; Wed, 11 Apr 2018 14:43:15 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 8681E832A0; Wed, 11 Apr 2018 14:43:15 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 4C096181BA0B; Wed, 11 Apr 2018 14:43:15 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgFY0008786 for ; Wed, 11 Apr 2018 10:42:15 -0400 Received: by smtp.corp.redhat.com (Postfix) id 9A9C0202698A; Wed, 11 Apr 2018 14:42:15 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 7A8602026E03 for ; Wed, 11 Apr 2018 14:42:15 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 8AE73100B69; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:26 +0200 Message-Id: <30fdd358d9060d673e4abff3473a11fa494593ba.1523456480.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 36/73] qemu: Hide qemuMigrationParamsNew X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Wed, 11 Apr 2018 14:43:17 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" It is no longer used outside qemu_migration_params.c. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_migration_params.c | 2 +- src/qemu/qemu_migration_params.h | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index b55abc2e36..a0a00d0fc7 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -44,7 +44,7 @@ struct _qemuMigrationParams { }; =20 =20 -qemuMigrationParamsPtr +static qemuMigrationParamsPtr qemuMigrationParamsNew(void) { qemuMigrationParamsPtr params; diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index d66fdb7cde..4350b14d6d 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -56,9 +56,6 @@ typedef enum { } qemuMigrationParty; =20 =20 -qemuMigrationParamsPtr -qemuMigrationParamsNew(void); - qemuMigrationParamsPtr qemuMigrationParamsFromFlags(virTypedParameterPtr params, int nparams, --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523780552441429.861511164024; Sun, 15 Apr 2018 01:22:32 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 1D3283004863; Sun, 15 Apr 2018 08:22:31 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id B630F76133; Sun, 15 Apr 2018 08:22:30 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id D40BA5BBF3; Sun, 15 Apr 2018 08:22:29 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgFhW008796 for ; Wed, 11 Apr 2018 10:42:15 -0400 Received: by smtp.corp.redhat.com (Postfix) id B6F702026609; Wed, 11 Apr 2018 14:42:15 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 7B2102026E0E for ; Wed, 11 Apr 2018 14:42:15 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 9030E100B6F; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:27 +0200 Message-Id: <3d53829b0a978299b5b2f4ac3631f5ed03520501.1523456480.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 37/73] qemu: Drop qemuMigrationParamsSetPostCopy X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.40]); Sun, 15 Apr 2018 08:22:31 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" It's just a tiny wrapper around qemuMigrationParamsSetCapability and setting priv->job.postcopyEnabled is not something qemuMigrationParams code should be doing anyway so let the callers do it. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_migration.c | 16 ++++++++++++---- src/qemu/qemu_migration_params.c | 17 ----------------- src/qemu/qemu_migration_params.h | 5 ----- 3 files changed, 12 insertions(+), 26 deletions(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 5614f0d43e..400eb0710c 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -2391,8 +2391,10 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, migParams) < 0) goto stopjob; =20 - if (qemuMigrationParamsSetPostCopy(vm, flags & VIR_MIGRATE_POSTCOPY, - migParams) < 0) + if (qemuMigrationParamsSetCapability(vm, + QEMU_MONITOR_MIGRATION_CAPS_POSTC= OPY, + flags & VIR_MIGRATE_POSTCOPY, + migParams) < 0) goto stopjob; =20 if (qemuMigrationParamsCheck(driver, vm, QEMU_ASYNC_JOB_MIGRATION_IN, @@ -2416,6 +2418,8 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, migParams) < 0) goto stopjob; =20 + priv->job.postcopyEnabled =3D flags & VIR_MIGRATE_POSTCOPY; + if (mig->nbd && flags & (VIR_MIGRATE_NON_SHARED_DISK | VIR_MIGRATE_NON_SHARED_INC)= && virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_NBD_SERVER)) { @@ -3349,8 +3353,10 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, migParams) < 0) goto error; =20 - if (qemuMigrationParamsSetPostCopy(vm, flags & VIR_MIGRATE_POSTCOPY, - migParams) < 0) + if (qemuMigrationParamsSetCapability(vm, + QEMU_MONITOR_MIGRATION_CAPS_POSTC= OPY, + flags & VIR_MIGRATE_POSTCOPY, + migParams) < 0) goto error; =20 if (qemuMigrationCapsGet(vm, QEMU_MONITOR_MIGRATION_CAPS_PAUSE_BEFORE_= SWITCHOVER) && @@ -3386,6 +3392,8 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, migParams) < 0) goto error; =20 + priv->job.postcopyEnabled =3D flags & VIR_MIGRATE_POSTCOPY; + if (migrate_flags & (QEMU_MONITOR_MIGRATE_NON_SHARED_DISK | QEMU_MONITOR_MIGRATE_NON_SHARED_INC)) { if (mig->nbd) { diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index a0a00d0fc7..bf95fb4f59 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -199,23 +199,6 @@ qemuMigrationParamsSetCapability(virDomainObjPtr vm AT= TRIBUTE_UNUSED, } =20 =20 -int -qemuMigrationParamsSetPostCopy(virDomainObjPtr vm, - bool state, - qemuMigrationParamsPtr migParams) -{ - qemuDomainObjPrivatePtr priv =3D vm->privateData; - - if (qemuMigrationParamsSetCapability(vm, - QEMU_MONITOR_MIGRATION_CAPS_POSTC= OPY, - state, migParams) < 0) - return -1; - - priv->job.postcopyEnabled =3D state; - return 0; -} - - /* qemuMigrationParamsEnableTLS * @driver: pointer to qemu driver * @vm: domain object diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index 4350b14d6d..fac901e35c 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -77,11 +77,6 @@ qemuMigrationParamsSetCapability(virDomainObjPtr vm, bool state, qemuMigrationParamsPtr migParams); =20 -int -qemuMigrationParamsSetPostCopy(virDomainObjPtr vm, - bool state, - qemuMigrationParamsPtr migParams); - int qemuMigrationParamsEnableTLS(virQEMUDriverPtr driver, virDomainObjPtr vm, --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457800387183.19888848107553; Wed, 11 Apr 2018 07:43:20 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 242DD13AAA; Wed, 11 Apr 2018 14:43:19 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id E8BD3877A8; Wed, 11 Apr 2018 14:43:18 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id ACF97181BA12; Wed, 11 Apr 2018 14:43:18 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgF4D008787 for ; Wed, 11 Apr 2018 10:42:15 -0400 Received: by smtp.corp.redhat.com (Postfix) id 9DB29AB3E5; Wed, 11 Apr 2018 14:42:15 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 7D0A8AB3E4 for ; Wed, 11 Apr 2018 14:42:15 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 95801100B70; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:28 +0200 Message-Id: <96d9279367a69e1647fde132c9016286c86ce233.1523456480.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 38/73] qemu: Set always-on migration caps in ParamsCheck X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Wed, 11 Apr 2018 14:43:19 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Some migration capabilities are always enabled if QEMU supports them. We can just drop the explicit code for them and let qemuMigrationParamsCheck automatically set such capabilities. QEMU_MONITOR_MIGRATION_CAPS_EVENTS would normally be one of the always on features, but it is the only feature we want to enable even for other jobs which internally use migration (such as save and snapshot). Hence this capability is set very early after libvirtd connects to QEMU monitor. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_migration.c | 6 ------ src/qemu/qemu_migration_params.c | 31 +++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 400eb0710c..0446003f47 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -3359,12 +3359,6 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, migParams) < 0) goto error; =20 - if (qemuMigrationCapsGet(vm, QEMU_MONITOR_MIGRATION_CAPS_PAUSE_BEFORE_= SWITCHOVER) && - qemuMigrationParamsSetCapability(vm, - QEMU_MONITOR_MIGRATION_CAPS_PAUSE= _BEFORE_SWITCHOVER, - true, migParams) < 0) - goto error; - if (qemuMigrationParamsCheck(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT, migParams) < 0) goto error; diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index bf95fb4f59..03056eed09 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -43,6 +43,19 @@ struct _qemuMigrationParams { qemuMonitorMigrationParams params; }; =20 +typedef struct _qemuMigrationParamsAlwaysOnItem qemuMigrationParamsAlwaysO= nItem; +struct _qemuMigrationParamsAlwaysOnItem { + qemuMonitorMigrationCaps cap; + int party; /* bit-wise OR of qemuMigrationParty */ +}; + +/* Migration capabilities which should always be enabled as long as they + * are supported by QEMU. */ +static const qemuMigrationParamsAlwaysOnItem qemuMigrationParamsAlwaysOn[]= =3D { + {QEMU_MONITOR_MIGRATION_CAPS_PAUSE_BEFORE_SWITCHOVER, + QEMU_MIGRATION_SOURCE}, +}; + =20 static qemuMigrationParamsPtr qemuMigrationParamsNew(void) @@ -399,8 +412,15 @@ qemuMigrationParamsCheck(virQEMUDriverPtr driver, qemuDomainObjPrivatePtr priv =3D vm->privateData; qemuMigrationParamsPtr origParams =3D NULL; qemuMonitorMigrationCaps cap; + qemuMigrationParty party; + size_t i; int ret =3D -1; =20 + if (asyncJob =3D=3D QEMU_ASYNC_JOB_MIGRATION_OUT) + party =3D QEMU_MIGRATION_SOURCE; + else + party =3D QEMU_MIGRATION_DESTINATION; + for (cap =3D 0; cap < QEMU_MONITOR_MIGRATION_CAPS_LAST; cap++) { bool state =3D false; =20 @@ -414,6 +434,17 @@ qemuMigrationParamsCheck(virQEMUDriverPtr driver, } } =20 + for (i =3D 0; i < ARRAY_CARDINALITY(qemuMigrationParamsAlwaysOn); i++)= { + cap =3D qemuMigrationParamsAlwaysOn[i].cap; + + if (qemuMigrationParamsAlwaysOn[i].party & party && + qemuMigrationCapsGet(vm, cap)) { + VIR_DEBUG("Enabling migration capability '%s'", + qemuMonitorMigrationCapsTypeToString(cap)); + ignore_value(virBitmapSetBit(migParams->caps, cap)); + } + } + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) return -1; =20 --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457804505239.6294152437464; Wed, 11 Apr 2018 07:43:24 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 4C2C03134BDC; Wed, 11 Apr 2018 14:43:23 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 0BF508846E; Wed, 11 Apr 2018 14:43:23 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id B3BA05BBEE; Wed, 11 Apr 2018 14:43:21 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgFvT008801 for ; Wed, 11 Apr 2018 10:42:16 -0400 Received: by smtp.corp.redhat.com (Postfix) id CD769AB3E2; Wed, 11 Apr 2018 14:42:15 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 8D4EB946D5 for ; Wed, 11 Apr 2018 14:42:15 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 9B14B100B72; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:29 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 39/73] qemu: Set migration capabilities automatically X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.45]); Wed, 11 Apr 2018 14:43:23 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Most migration capabilities are directly connected with virDomainMigrateFlags so qemuMigrationParamsFromFlags can automatically enable them. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_migration.c | 30 --------------------- src/qemu/qemu_migration_params.c | 45 +++++++++++++++++++++++++++----- src/qemu/qemu_migration_params.h | 6 ----- 3 files changed, 39 insertions(+), 42 deletions(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 0446003f47..e1a29d9569 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -2385,18 +2385,6 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, goto stopjob; } =20 - if (qemuMigrationParamsSetCapability(vm, - QEMU_MONITOR_MIGRATION_CAPS_RDMA_= PIN_ALL, - flags & VIR_MIGRATE_RDMA_PIN_ALL, - migParams) < 0) - goto stopjob; - - if (qemuMigrationParamsSetCapability(vm, - QEMU_MONITOR_MIGRATION_CAPS_POSTC= OPY, - flags & VIR_MIGRATE_POSTCOPY, - migParams) < 0) - goto stopjob; - if (qemuMigrationParamsCheck(driver, vm, QEMU_ASYNC_JOB_MIGRATION_IN, migParams) < 0) goto stopjob; @@ -3341,24 +3329,6 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, if (qemuMigrationParamsSetCompression(vm, compression, migParams) < 0) goto error; =20 - if (qemuMigrationParamsSetCapability(vm, - QEMU_MONITOR_MIGRATION_CAPS_AUTO_= CONVERGE, - flags & VIR_MIGRATE_AUTO_CONVERGE, - migParams) < 0) - goto error; - - if (qemuMigrationParamsSetCapability(vm, - QEMU_MONITOR_MIGRATION_CAPS_RDMA_= PIN_ALL, - flags & VIR_MIGRATE_RDMA_PIN_ALL, - migParams) < 0) - goto error; - - if (qemuMigrationParamsSetCapability(vm, - QEMU_MONITOR_MIGRATION_CAPS_POSTC= OPY, - flags & VIR_MIGRATE_POSTCOPY, - migParams) < 0) - goto error; - if (qemuMigrationParamsCheck(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT, migParams) < 0) goto error; diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 03056eed09..369e560990 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -49,6 +49,13 @@ struct _qemuMigrationParamsAlwaysOnItem { int party; /* bit-wise OR of qemuMigrationParty */ }; =20 +typedef struct _qemuMigrationParamsFlagMapItem qemuMigrationParamsFlagMapI= tem; +struct _qemuMigrationParamsFlagMapItem { + virDomainMigrateFlags flag; + qemuMonitorMigrationCaps cap; + int party; /* bit-wise OR of qemuMigrationParty */ +}; + /* Migration capabilities which should always be enabled as long as they * are supported by QEMU. */ static const qemuMigrationParamsAlwaysOnItem qemuMigrationParamsAlwaysOn[]= =3D { @@ -56,6 +63,21 @@ static const qemuMigrationParamsAlwaysOnItem qemuMigrati= onParamsAlwaysOn[] =3D { QEMU_MIGRATION_SOURCE}, }; =20 +/* Translation from virDomainMigrateFlags to qemuMonitorMigrationCaps. */ +static const qemuMigrationParamsFlagMapItem qemuMigrationParamsFlagMap[] = =3D { + {VIR_MIGRATE_RDMA_PIN_ALL, + QEMU_MONITOR_MIGRATION_CAPS_RDMA_PIN_ALL, + QEMU_MIGRATION_SOURCE | QEMU_MIGRATION_DESTINATION}, + + {VIR_MIGRATE_AUTO_CONVERGE, + QEMU_MONITOR_MIGRATION_CAPS_AUTO_CONVERGE, + QEMU_MIGRATION_SOURCE}, + + {VIR_MIGRATE_POSTCOPY, + QEMU_MONITOR_MIGRATION_CAPS_POSTCOPY, + QEMU_MIGRATION_SOURCE | QEMU_MIGRATION_DESTINATION}, +}; + =20 static qemuMigrationParamsPtr qemuMigrationParamsNew(void) @@ -97,12 +119,21 @@ qemuMigrationParamsFromFlags(virTypedParameterPtr para= ms, qemuMigrationParty party) { qemuMigrationParamsPtr migParams; + size_t i; =20 if (!(migParams =3D qemuMigrationParamsNew())) return NULL; =20 - if (!params) - return migParams; + for (i =3D 0; i < ARRAY_CARDINALITY(qemuMigrationParamsFlagMap); i++) { + qemuMonitorMigrationCaps cap =3D qemuMigrationParamsFlagMap[i].cap; + + if (qemuMigrationParamsFlagMap[i].party & party && + flags & qemuMigrationParamsFlagMap[i].flag) { + VIR_DEBUG("Enabling migration capability '%s'", + qemuMonitorMigrationCapsTypeToString(cap)); + ignore_value(virBitmapSetBit(migParams->caps, cap)); + } + } =20 #define GET(PARAM, VAR) \ do { \ @@ -116,9 +147,11 @@ qemuMigrationParamsFromFlags(virTypedParameterPtr para= ms, migParams->params.VAR ## _set =3D true; \ } while (0) =20 - if (party =3D=3D QEMU_MIGRATION_SOURCE) { - GET(AUTO_CONVERGE_INITIAL, cpuThrottleInitial); - GET(AUTO_CONVERGE_INCREMENT, cpuThrottleIncrement); + if (params) { + if (party =3D=3D QEMU_MIGRATION_SOURCE) { + GET(AUTO_CONVERGE_INITIAL, cpuThrottleInitial); + GET(AUTO_CONVERGE_INCREMENT, cpuThrottleIncrement); + } } =20 #undef GET @@ -197,7 +230,7 @@ qemuMigrationParamsApply(virQEMUDriverPtr driver, } =20 =20 -int +static int qemuMigrationParamsSetCapability(virDomainObjPtr vm ATTRIBUTE_UNUSED, qemuMonitorMigrationCaps capability, bool state, diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index fac901e35c..494ac104ad 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -71,12 +71,6 @@ qemuMigrationParamsApply(virQEMUDriverPtr driver, int asyncJob, qemuMigrationParamsPtr migParams); =20 -int -qemuMigrationParamsSetCapability(virDomainObjPtr vm, - qemuMonitorMigrationCaps capability, - bool state, - qemuMigrationParamsPtr migParams); - int qemuMigrationParamsEnableTLS(virQEMUDriverPtr driver, virDomainObjPtr vm, --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457779351880.1355148265332; Wed, 11 Apr 2018 07:42:59 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 6BCAF3130382; Wed, 11 Apr 2018 14:42:57 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 3CF2B88445; Wed, 11 Apr 2018 14:42:57 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id EDFCE4CAB9; Wed, 11 Apr 2018 14:42:56 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgFmB008799 for ; Wed, 11 Apr 2018 10:42:16 -0400 Received: by smtp.corp.redhat.com (Postfix) id C986810B0F39; Wed, 11 Apr 2018 14:42:15 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 8D8BE10B0F38 for ; Wed, 11 Apr 2018 14:42:15 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id A062E100B73; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:30 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 40/73] qemu: Call qemuMigrationAnyCompressionParse only from driver X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.43]); Wed, 11 Apr 2018 14:42:58 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Propagate the calls up the stack to the point where qemuMigrationParamsFromFlags is called. The end goal achieved in the following few patches is to merge compression parameters into the general migration parameters code. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_driver.c | 21 ++++++++++++++++++--- src/qemu/qemu_migration.c | 25 +++++++------------------ src/qemu/qemu_migration.h | 1 + 3 files changed, 26 insertions(+), 21 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 5271e01d92..85755257aa 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -12126,6 +12126,7 @@ qemuDomainMigratePrepareTunnel(virConnectPtr dconn, virQEMUDriverPtr driver =3D dconn->privateData; virDomainDefPtr def =3D NULL; char *origname =3D NULL; + qemuMigrationCompressionPtr compression =3D NULL; qemuMigrationParamsPtr migParams =3D NULL; int ret =3D -1; =20 @@ -12137,6 +12138,9 @@ qemuDomainMigratePrepareTunnel(virConnectPtr dconn, goto cleanup; } =20 + if (!(compression =3D qemuMigrationAnyCompressionParse(NULL, 0, flags)= )) + goto cleanup; + if (!(migParams =3D qemuMigrationParamsFromFlags(NULL, 0, flags, QEMU_MIGRATION_DESTINAT= ION))) goto cleanup; @@ -12156,9 +12160,10 @@ qemuDomainMigratePrepareTunnel(virConnectPtr dconn, =20 ret =3D qemuMigrationDstPrepareTunnel(driver, dconn, NULL, 0, NULL, NULL, /* No cookies= in v2 */ - st, &def, origname, migParams, fla= gs); + st, &def, origname, compression, m= igParams, flags); =20 cleanup: + VIR_FREE(compression); qemuMigrationParamsFree(migParams); VIR_FREE(origname); virDomainDefFree(def); @@ -12597,6 +12602,7 @@ qemuDomainMigratePrepareTunnel3(virConnectPtr dconn, virQEMUDriverPtr driver =3D dconn->privateData; virDomainDefPtr def =3D NULL; char *origname =3D NULL; + qemuMigrationCompressionPtr compression =3D NULL; qemuMigrationParamsPtr migParams =3D NULL; int ret =3D -1; =20 @@ -12608,6 +12614,9 @@ qemuDomainMigratePrepareTunnel3(virConnectPtr dconn, goto cleanup; } =20 + if (!(compression =3D qemuMigrationAnyCompressionParse(NULL, 0, flags)= )) + goto cleanup; + if (!(migParams =3D qemuMigrationParamsFromFlags(NULL, 0, flags, QEMU_MIGRATION_DESTINAT= ION))) goto cleanup; @@ -12621,9 +12630,10 @@ qemuDomainMigratePrepareTunnel3(virConnectPtr dcon= n, ret =3D qemuMigrationDstPrepareTunnel(driver, dconn, cookiein, cookieinlen, cookieout, cookieoutlen, - st, &def, origname, migParams, fla= gs); + st, &def, origname, compression, m= igParams, flags); =20 cleanup: + VIR_FREE(compression); qemuMigrationParamsFree(migParams); VIR_FREE(origname); virDomainDefFree(def); @@ -12646,6 +12656,7 @@ qemuDomainMigratePrepareTunnel3Params(virConnectPtr= dconn, const char *dom_xml =3D NULL; const char *dname =3D NULL; char *origname =3D NULL; + qemuMigrationCompressionPtr compression =3D NULL; qemuMigrationParamsPtr migParams =3D NULL; int ret =3D -1; =20 @@ -12667,6 +12678,9 @@ qemuDomainMigratePrepareTunnel3Params(virConnectPtr= dconn, goto cleanup; } =20 + if (!(compression =3D qemuMigrationAnyCompressionParse(NULL, 0, flags)= )) + goto cleanup; + if (!(migParams =3D qemuMigrationParamsFromFlags(params, nparams, flag= s, QEMU_MIGRATION_DESTINAT= ION))) goto cleanup; @@ -12680,9 +12694,10 @@ qemuDomainMigratePrepareTunnel3Params(virConnectPt= r dconn, ret =3D qemuMigrationDstPrepareTunnel(driver, dconn, cookiein, cookieinlen, cookieout, cookieoutlen, - st, &def, origname, migParams, fla= gs); + st, &def, origname, compression, m= igParams, flags); =20 cleanup: + VIR_FREE(compression); qemuMigrationParamsFree(migParams); VIR_FREE(origname); virDomainDefFree(def); diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index e1a29d9569..d4c5994f25 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -2531,12 +2531,10 @@ qemuMigrationDstPrepareTunnel(virQEMUDriverPtr driv= er, virStreamPtr st, virDomainDefPtr *def, const char *origname, + qemuMigrationCompressionPtr compression, qemuMigrationParamsPtr migParams, unsigned long flags) { - qemuMigrationCompressionPtr compression =3D NULL; - int ret; - VIR_DEBUG("driver=3D%p, dconn=3D%p, cookiein=3D%s, cookieinlen=3D%d, " "cookieout=3D%p, cookieoutlen=3D%p, st=3D%p, def=3D%p, " "origname=3D%s, flags=3D0x%lx", @@ -2549,15 +2547,10 @@ qemuMigrationDstPrepareTunnel(virQEMUDriverPtr driv= er, return -1; } =20 - if (!(compression =3D qemuMigrationAnyCompressionParse(NULL, 0, flags)= )) - return -1; - - ret =3D qemuMigrationDstPrepareAny(driver, dconn, cookiein, cookieinle= n, - cookieout, cookieoutlen, def, orignam= e, - st, NULL, 0, false, NULL, 0, NULL, 0, - compression, migParams, flags); - VIR_FREE(compression); - return ret; + return qemuMigrationDstPrepareAny(driver, dconn, cookiein, cookieinlen, + cookieout, cookieoutlen, def, origna= me, + st, NULL, 0, false, NULL, 0, NULL, 0, + compression, migParams, flags); } =20 =20 @@ -3759,6 +3752,7 @@ qemuMigrationSrcPerformPeer2Peer2(virQEMUDriverPtr dr= iver, unsigned long flags, const char *dname, unsigned long resource, + qemuMigrationCompressionPtr compression, qemuMigrationParamsPtr migParams) { virDomainPtr ddomain =3D NULL; @@ -3770,7 +3764,6 @@ qemuMigrationSrcPerformPeer2Peer2(virQEMUDriverPtr dr= iver, bool cancelled; virStreamPtr st =3D NULL; unsigned long destflags; - qemuMigrationCompressionPtr compression =3D NULL; =20 VIR_DEBUG("driver=3D%p, sconn=3D%p, dconn=3D%p, vm=3D%p, dconnuri=3D%s= , " "flags=3D0x%lx, dname=3D%s, resource=3D%lu", @@ -3792,9 +3785,6 @@ qemuMigrationSrcPerformPeer2Peer2(virQEMUDriverPtr dr= iver, destflags =3D flags & ~(VIR_MIGRATE_ABORT_ON_ERROR | VIR_MIGRATE_AUTO_CONVERGE); =20 - if (!(compression =3D qemuMigrationAnyCompressionParse(NULL, 0, flags)= )) - goto cleanup; - VIR_DEBUG("Prepare2 %p", dconn); if (flags & VIR_MIGRATE_TUNNELLED) { /* @@ -3895,7 +3885,6 @@ qemuMigrationSrcPerformPeer2Peer2(virQEMUDriverPtr dr= iver, } VIR_FREE(uri_out); VIR_FREE(cookie); - VIR_FREE(compression); =20 return ret; } @@ -4409,7 +4398,7 @@ qemuMigrationSrcPerformPeer2Peer(virQEMUDriverPtr dri= ver, } else { ret =3D qemuMigrationSrcPerformPeer2Peer2(driver, sconn, dconn, vm, dconnuri, flags, dname, re= source, - migParams); + compression, migParams); } =20 cleanup: diff --git a/src/qemu/qemu_migration.h b/src/qemu/qemu_migration.h index 2bf710a919..3cd456568a 100644 --- a/src/qemu/qemu_migration.h +++ b/src/qemu/qemu_migration.h @@ -148,6 +148,7 @@ qemuMigrationDstPrepareTunnel(virQEMUDriverPtr driver, virStreamPtr st, virDomainDefPtr *def, const char *origname, + qemuMigrationCompressionPtr compression, qemuMigrationParamsPtr migParams, unsigned long flags); =20 --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523780555322727.3546090643409; Sun, 15 Apr 2018 01:22:35 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 133F630001E1; Sun, 15 Apr 2018 08:22:34 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id D8D17611A5; Sun, 15 Apr 2018 08:22:33 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 83B87180BAD3; Sun, 15 Apr 2018 08:22:33 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgFrk008798 for ; Wed, 11 Apr 2018 10:42:16 -0400 Received: by smtp.corp.redhat.com (Postfix) id C01E510B0F3A; Wed, 11 Apr 2018 14:42:15 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 9FD1510B0F39 for ; Wed, 11 Apr 2018 14:42:15 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id A5AFF100B7B; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:31 +0200 Message-Id: <2c976a37c954a97921f33dfed3c0ae323f7d88e3.1523456480.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 41/73] qemu: Generalize macro for getting VIR_MIGRATE_* typed params X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.45]); Sun, 15 Apr 2018 08:22:34 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" So far it's used only for CPU throttling parameters which are all ints, but we'll soon want to use it for more parameters with different types. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_migration_params.c | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 369e560990..e0cbdb1a38 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -112,6 +112,17 @@ qemuMigrationParamsFree(qemuMigrationParamsPtr migPara= ms) } =20 =20 +#define GET(API, PARAM, VAR) \ + do { \ + int rc; \ + if ((rc =3D API(params, nparams, VIR_MIGRATE_PARAM_ ## PARAM, \ + &migParams->params.VAR)) < 0) \ + goto error; \ + \ + if (rc =3D=3D 1) \ + migParams->params.VAR ## _set =3D true; \ + } while (0) + qemuMigrationParamsPtr qemuMigrationParamsFromFlags(virTypedParameterPtr params, int nparams, @@ -135,27 +146,13 @@ qemuMigrationParamsFromFlags(virTypedParameterPtr par= ams, } } =20 -#define GET(PARAM, VAR) \ - do { \ - int rc; \ - if ((rc =3D virTypedParamsGetInt(params, nparams, \ - VIR_MIGRATE_PARAM_ ## PARAM, \ - &migParams->params.VAR)) < 0) \ - goto error; \ - \ - if (rc =3D=3D 1) \ - migParams->params.VAR ## _set =3D true; \ - } while (0) - if (params) { if (party =3D=3D QEMU_MIGRATION_SOURCE) { - GET(AUTO_CONVERGE_INITIAL, cpuThrottleInitial); - GET(AUTO_CONVERGE_INCREMENT, cpuThrottleIncrement); + GET(virTypedParamsGetInt, AUTO_CONVERGE_INITIAL, cpuThrottleIn= itial); + GET(virTypedParamsGetInt, AUTO_CONVERGE_INCREMENT, cpuThrottle= Increment); } } =20 -#undef GET - if ((migParams->params.cpuThrottleInitial_set || migParams->params.cpuThrottleIncrement_set) && !(flags & VIR_MIGRATE_AUTO_CONVERGE)) { @@ -171,6 +168,8 @@ qemuMigrationParamsFromFlags(virTypedParameterPtr param= s, return NULL; } =20 +#undef GET + =20 /** * qemuMigrationParamsApply --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457772575484.1976136019716; Wed, 11 Apr 2018 07:42:52 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 4EEBE31303B6; Wed, 11 Apr 2018 14:42:51 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 2267778BB4; Wed, 11 Apr 2018 14:42:51 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id CFC6B180BAEC; Wed, 11 Apr 2018 14:42:50 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgFYL008797 for ; Wed, 11 Apr 2018 10:42:15 -0400 Received: by smtp.corp.redhat.com (Postfix) id C2289215CDAF; Wed, 11 Apr 2018 14:42:15 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id A1EC8215CDC8 for ; Wed, 11 Apr 2018 14:42:15 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id AB098100B7D; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:32 +0200 Message-Id: <30c3ad7c45f00fb1cdd34fd28ee88da50820aa20.1523456480.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 42/73] qemu: Drop qemuMigrationParamsSetCapability X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.43]); Wed, 11 Apr 2018 14:42:51 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" It's become only a tiny wrapper around virBitmapSetBit, which can easily be called directly. We don't need to call virBitmapClearBit since migParams->caps bitmap is initialized with zeros. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_migration_params.c | 35 +++++++------------------------- 1 file changed, 7 insertions(+), 28 deletions(-) diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index e0cbdb1a38..262825972c 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -229,21 +229,6 @@ qemuMigrationParamsApply(virQEMUDriverPtr driver, } =20 =20 -static int -qemuMigrationParamsSetCapability(virDomainObjPtr vm ATTRIBUTE_UNUSED, - qemuMonitorMigrationCaps capability, - bool state, - qemuMigrationParamsPtr migParams) -{ - if (state) - ignore_value(virBitmapSetBit(migParams->caps, capability)); - else - ignore_value(virBitmapClearBit(migParams->caps, capability)); - - return 0; -} - - /* qemuMigrationParamsEnableTLS * @driver: pointer to qemu driver * @vm: domain object @@ -358,23 +343,17 @@ qemuMigrationParamsDisableTLS(virDomainObjPtr vm, =20 =20 int -qemuMigrationParamsSetCompression(virDomainObjPtr vm, +qemuMigrationParamsSetCompression(virDomainObjPtr vm ATTRIBUTE_UNUSED, qemuMigrationCompressionPtr compression, qemuMigrationParamsPtr migParams) { - if (qemuMigrationParamsSetCapability(vm, - QEMU_MONITOR_MIGRATION_CAPS_XBZRL= E, - compression->methods & - (1ULL << QEMU_MIGRATION_COMPRESS_= XBZRLE), - migParams) < 0) - return -1; + if (compression->methods & (1ULL << QEMU_MIGRATION_COMPRESS_XBZRLE)) + ignore_value(virBitmapSetBit(migParams->caps, + QEMU_MONITOR_MIGRATION_CAPS_XBZRLE)); =20 - if (qemuMigrationParamsSetCapability(vm, - QEMU_MONITOR_MIGRATION_CAPS_COMPR= ESS, - compression->methods & - (1ULL << QEMU_MIGRATION_COMPRESS_= MT), - migParams) < 0) - return -1; + if (compression->methods & (1ULL << QEMU_MIGRATION_COMPRESS_MT)) + ignore_value(virBitmapSetBit(migParams->caps, + QEMU_MONITOR_MIGRATION_CAPS_COMPRESS)= ); =20 migParams->params.compressLevel_set =3D compression->level_set; migParams->params.compressLevel =3D compression->level; --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523780560061852.1770843668118; Sun, 15 Apr 2018 01:22:40 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5661C23E6E3; Sun, 15 Apr 2018 08:22:38 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 1EEF280F9A; Sun, 15 Apr 2018 08:22:38 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id CC7EE5BBF5; Sun, 15 Apr 2018 08:22:37 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgFxk008800 for ; Wed, 11 Apr 2018 10:42:16 -0400 Received: by smtp.corp.redhat.com (Postfix) id CE8DE2026E0E; Wed, 11 Apr 2018 14:42:15 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id AEF612026E03 for ; Wed, 11 Apr 2018 14:42:15 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id B04E4100B7F; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:33 +0200 Message-Id: <98e9c38a55e6934e4ed6c5924a1675b0f63a8a30.1523456480.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 43/73] qemu: Move qemuMigrationParamsSetCompression X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Sun, 15 Apr 2018 08:22:38 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" The API will soon be called from qemuMigrationParamsFromFlags. Let's move it to avoid the need to add a forward declaration. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_migration_params.c | 59 ++++++++++++++++---------------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 262825972c..b532299a5f 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -123,6 +123,36 @@ qemuMigrationParamsFree(qemuMigrationParamsPtr migPara= ms) migParams->params.VAR ## _set =3D true; \ } while (0) =20 + +int +qemuMigrationParamsSetCompression(virDomainObjPtr vm ATTRIBUTE_UNUSED, + qemuMigrationCompressionPtr compression, + qemuMigrationParamsPtr migParams) +{ + if (compression->methods & (1ULL << QEMU_MIGRATION_COMPRESS_XBZRLE)) + ignore_value(virBitmapSetBit(migParams->caps, + QEMU_MONITOR_MIGRATION_CAPS_XBZRLE)); + + if (compression->methods & (1ULL << QEMU_MIGRATION_COMPRESS_MT)) + ignore_value(virBitmapSetBit(migParams->caps, + QEMU_MONITOR_MIGRATION_CAPS_COMPRESS)= ); + + migParams->params.compressLevel_set =3D compression->level_set; + migParams->params.compressLevel =3D compression->level; + + migParams->params.compressThreads_set =3D compression->threads_set; + migParams->params.compressThreads =3D compression->threads; + + migParams->params.decompressThreads_set =3D compression->dthreads_set; + migParams->params.decompressThreads =3D compression->dthreads; + + migParams->params.xbzrleCacheSize_set =3D compression->xbzrle_cache_se= t; + migParams->params.xbzrleCacheSize =3D compression->xbzrle_cache; + + return 0; +} + + qemuMigrationParamsPtr qemuMigrationParamsFromFlags(virTypedParameterPtr params, int nparams, @@ -342,35 +372,6 @@ qemuMigrationParamsDisableTLS(virDomainObjPtr vm, } =20 =20 -int -qemuMigrationParamsSetCompression(virDomainObjPtr vm ATTRIBUTE_UNUSED, - qemuMigrationCompressionPtr compression, - qemuMigrationParamsPtr migParams) -{ - if (compression->methods & (1ULL << QEMU_MIGRATION_COMPRESS_XBZRLE)) - ignore_value(virBitmapSetBit(migParams->caps, - QEMU_MONITOR_MIGRATION_CAPS_XBZRLE)); - - if (compression->methods & (1ULL << QEMU_MIGRATION_COMPRESS_MT)) - ignore_value(virBitmapSetBit(migParams->caps, - QEMU_MONITOR_MIGRATION_CAPS_COMPRESS)= ); - - migParams->params.compressLevel_set =3D compression->level_set; - migParams->params.compressLevel =3D compression->level; - - migParams->params.compressThreads_set =3D compression->threads_set; - migParams->params.compressThreads =3D compression->threads; - - migParams->params.decompressThreads_set =3D compression->dthreads_set; - migParams->params.decompressThreads =3D compression->dthreads; - - migParams->params.xbzrleCacheSize_set =3D compression->xbzrle_cache_se= t; - migParams->params.xbzrleCacheSize =3D compression->xbzrle_cache; - - return 0; -} - - /* qemuMigrationParamsResetTLS * @driver: pointer to qemu driver * @vm: domain object --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457785179295.11095497451765; Wed, 11 Apr 2018 07:43:05 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 546D07D4FE; Wed, 11 Apr 2018 14:43:03 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 36631832D7; Wed, 11 Apr 2018 14:43:00 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id ED56C181A72D; Wed, 11 Apr 2018 14:42:59 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgGwa008828 for ; Wed, 11 Apr 2018 10:42:16 -0400 Received: by smtp.corp.redhat.com (Postfix) id 194BCAB3E5; Wed, 11 Apr 2018 14:42:16 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id B41E3AB3E4 for ; Wed, 11 Apr 2018 14:42:15 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id B5AC2100B80; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:34 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 44/73] qemu: Move qemuMigrationAnyCompression* X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Wed, 11 Apr 2018 14:43:04 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" The code really belongs to qemu_migration_params.c. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_migration.c | 140 ----------------------------- src/qemu/qemu_migration.h | 19 ---- src/qemu/qemu_migration_params.c | 147 +++++++++++++++++++++++++++++++ src/qemu/qemu_migration_params.h | 11 +++ 4 files changed, 158 insertions(+), 159 deletions(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index d4c5994f25..d0d0d97be4 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -77,11 +77,6 @@ VIR_ENUM_IMPL(qemuMigrationJobPhase, QEMU_MIGRATION_PHAS= E_LAST, "finish3", ); =20 -VIR_ENUM_IMPL(qemuMigrationCompressMethod, QEMU_MIGRATION_COMPRESS_LAST, - "xbzrle", - "mt", -); - static int qemuMigrationJobStart(virQEMUDriverPtr driver, virDomainObjPtr vm, @@ -5439,141 +5434,6 @@ qemuMigrationDstErrorReport(virQEMUDriverPtr driver, } =20 =20 -/* don't ever pass NULL params with non zero nparams */ -qemuMigrationCompressionPtr -qemuMigrationAnyCompressionParse(virTypedParameterPtr params, - int nparams, - unsigned long flags) -{ - size_t i; - qemuMigrationCompressionPtr compression =3D NULL; - - if (VIR_ALLOC(compression) < 0) - return NULL; - - for (i =3D 0; i < nparams; i++) { - int method; - - if (STRNEQ(params[i].field, VIR_MIGRATE_PARAM_COMPRESSION)) - continue; - - method =3D qemuMigrationCompressMethodTypeFromString(params[i].val= ue.s); - if (method < 0) { - virReportError(VIR_ERR_INVALID_ARG, - _("Unsupported compression method '%s'"), - params[i].value.s); - goto error; - } - - if (compression->methods & (1ULL << method)) { - virReportError(VIR_ERR_INVALID_ARG, - _("Compression method '%s' is specified twice"), - params[i].value.s); - goto error; - } - - compression->methods |=3D 1ULL << method; - } - -#define GET_PARAM(PARAM, TYPE, VALUE) \ - do { \ - int rc; \ - const char *par =3D VIR_MIGRATE_PARAM_COMPRESSION_ ## PARAM; \ - \ - if ((rc =3D virTypedParamsGet ## TYPE(params, nparams, \ - par, &compression->VALUE)) < 0= ) \ - goto error; \ - \ - if (rc =3D=3D 1) \ - compression->VALUE ## _set =3D true; \ - } while (0) - - if (params) { - GET_PARAM(MT_LEVEL, Int, level); - GET_PARAM(MT_THREADS, Int, threads); - GET_PARAM(MT_DTHREADS, Int, dthreads); - GET_PARAM(XBZRLE_CACHE, ULLong, xbzrle_cache); - } - -#undef GET_PARAM - - if ((compression->level_set || - compression->threads_set || - compression->dthreads_set) && - !(compression->methods & (1ULL << QEMU_MIGRATION_COMPRESS_MT))) { - virReportError(VIR_ERR_INVALID_ARG, "%s", - _("Turn multithread compression on to tune it")); - goto error; - } - - if (compression->xbzrle_cache_set && - !(compression->methods & (1ULL << QEMU_MIGRATION_COMPRESS_XBZRLE))= ) { - virReportError(VIR_ERR_INVALID_ARG, "%s", - _("Turn xbzrle compression on to tune it")); - goto error; - } - - if (!compression->methods && (flags & VIR_MIGRATE_COMPRESSED)) - compression->methods =3D 1ULL << QEMU_MIGRATION_COMPRESS_XBZRLE; - - return compression; - - error: - VIR_FREE(compression); - return NULL; -} - -int -qemuMigrationAnyCompressionDump(qemuMigrationCompressionPtr compression, - virTypedParameterPtr *params, - int *nparams, - int *maxparams, - unsigned long *flags) -{ - size_t i; - - if (compression->methods =3D=3D 1ULL << QEMU_MIGRATION_COMPRESS_XBZRLE= && - !compression->xbzrle_cache_set) { - *flags |=3D VIR_MIGRATE_COMPRESSED; - return 0; - } - - for (i =3D 0; i < QEMU_MIGRATION_COMPRESS_LAST; ++i) { - if ((compression->methods & (1ULL << i)) && - virTypedParamsAddString(params, nparams, maxparams, - VIR_MIGRATE_PARAM_COMPRESSION, - qemuMigrationCompressMethodTypeToStrin= g(i)) < 0) - return -1; - } - - if (compression->level_set && - virTypedParamsAddInt(params, nparams, maxparams, - VIR_MIGRATE_PARAM_COMPRESSION_MT_LEVEL, - compression->level) < 0) - return -1; - - if (compression->threads_set && - virTypedParamsAddInt(params, nparams, maxparams, - VIR_MIGRATE_PARAM_COMPRESSION_MT_THREADS, - compression->threads) < 0) - return -1; - - if (compression->dthreads_set && - virTypedParamsAddInt(params, nparams, maxparams, - VIR_MIGRATE_PARAM_COMPRESSION_MT_DTHREADS, - compression->dthreads) < 0) - return -1; - - if (compression->xbzrle_cache_set && - virTypedParamsAddULLong(params, nparams, maxparams, - VIR_MIGRATE_PARAM_COMPRESSION_XBZRLE_CACHE, - compression->xbzrle_cache) < 0) - return -1; - - return 0; -} - - int qemuMigrationSrcFetchMirrorStats(virQEMUDriverPtr driver, virDomainObjPtr vm, diff --git a/src/qemu/qemu_migration.h b/src/qemu/qemu_migration.h index 3cd456568a..53d8c529fc 100644 --- a/src/qemu/qemu_migration.h +++ b/src/qemu/qemu_migration.h @@ -98,25 +98,6 @@ typedef enum { } qemuMigrationJobPhase; VIR_ENUM_DECL(qemuMigrationJobPhase) =20 -typedef enum { - QEMU_MIGRATION_COMPRESS_XBZRLE =3D 0, - QEMU_MIGRATION_COMPRESS_MT, - - QEMU_MIGRATION_COMPRESS_LAST -} qemuMigrationCompressMethod; -VIR_ENUM_DECL(qemuMigrationCompressMethod) - -qemuMigrationCompressionPtr -qemuMigrationAnyCompressionParse(virTypedParameterPtr params, - int nparams, - unsigned long flags); -int -qemuMigrationAnyCompressionDump(qemuMigrationCompressionPtr compression, - virTypedParameterPtr *params, - int *nparams, - int *maxparams, - unsigned long *flags); - int qemuMigrationSrcSetOffline(virQEMUDriverPtr driver, virDomainObjPtr vm); diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index b532299a5f..94eb08a6bb 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -43,6 +43,19 @@ struct _qemuMigrationParams { qemuMonitorMigrationParams params; }; =20 +typedef enum { + QEMU_MIGRATION_COMPRESS_XBZRLE =3D 0, + QEMU_MIGRATION_COMPRESS_MT, + + QEMU_MIGRATION_COMPRESS_LAST +} qemuMigrationCompressMethod; +VIR_ENUM_DECL(qemuMigrationCompressMethod) +VIR_ENUM_IMPL(qemuMigrationCompressMethod, QEMU_MIGRATION_COMPRESS_LAST, + "xbzrle", + "mt", +); + + typedef struct _qemuMigrationParamsAlwaysOnItem qemuMigrationParamsAlwaysO= nItem; struct _qemuMigrationParamsAlwaysOnItem { qemuMonitorMigrationCaps cap; @@ -201,6 +214,140 @@ qemuMigrationParamsFromFlags(virTypedParameterPtr par= ams, #undef GET =20 =20 +qemuMigrationCompressionPtr +qemuMigrationAnyCompressionParse(virTypedParameterPtr params, + int nparams, + unsigned long flags) +{ + size_t i; + qemuMigrationCompressionPtr compression =3D NULL; + + if (VIR_ALLOC(compression) < 0) + return NULL; + + for (i =3D 0; i < nparams; i++) { + int method; + + if (STRNEQ(params[i].field, VIR_MIGRATE_PARAM_COMPRESSION)) + continue; + + method =3D qemuMigrationCompressMethodTypeFromString(params[i].val= ue.s); + if (method < 0) { + virReportError(VIR_ERR_INVALID_ARG, + _("Unsupported compression method '%s'"), + params[i].value.s); + goto error; + } + + if (compression->methods & (1ULL << method)) { + virReportError(VIR_ERR_INVALID_ARG, + _("Compression method '%s' is specified twice"), + params[i].value.s); + goto error; + } + + compression->methods |=3D 1ULL << method; + } + +#define GET_PARAM(PARAM, TYPE, VALUE) \ + do { \ + int rc; \ + const char *par =3D VIR_MIGRATE_PARAM_COMPRESSION_ ## PARAM; \ + \ + if ((rc =3D virTypedParamsGet ## TYPE(params, nparams, \ + par, &compression->VALUE)) < 0= ) \ + goto error; \ + \ + if (rc =3D=3D 1) \ + compression->VALUE ## _set =3D true; \ + } while (0) + + if (params) { + GET_PARAM(MT_LEVEL, Int, level); + GET_PARAM(MT_THREADS, Int, threads); + GET_PARAM(MT_DTHREADS, Int, dthreads); + GET_PARAM(XBZRLE_CACHE, ULLong, xbzrle_cache); + } + +#undef GET_PARAM + + if ((compression->level_set || + compression->threads_set || + compression->dthreads_set) && + !(compression->methods & (1ULL << QEMU_MIGRATION_COMPRESS_MT))) { + virReportError(VIR_ERR_INVALID_ARG, "%s", + _("Turn multithread compression on to tune it")); + goto error; + } + + if (compression->xbzrle_cache_set && + !(compression->methods & (1ULL << QEMU_MIGRATION_COMPRESS_XBZRLE))= ) { + virReportError(VIR_ERR_INVALID_ARG, "%s", + _("Turn xbzrle compression on to tune it")); + goto error; + } + + if (!compression->methods && (flags & VIR_MIGRATE_COMPRESSED)) + compression->methods =3D 1ULL << QEMU_MIGRATION_COMPRESS_XBZRLE; + + return compression; + + error: + VIR_FREE(compression); + return NULL; +} + +int +qemuMigrationAnyCompressionDump(qemuMigrationCompressionPtr compression, + virTypedParameterPtr *params, + int *nparams, + int *maxparams, + unsigned long *flags) +{ + size_t i; + + if (compression->methods =3D=3D 1ULL << QEMU_MIGRATION_COMPRESS_XBZRLE= && + !compression->xbzrle_cache_set) { + *flags |=3D VIR_MIGRATE_COMPRESSED; + return 0; + } + + for (i =3D 0; i < QEMU_MIGRATION_COMPRESS_LAST; ++i) { + if ((compression->methods & (1ULL << i)) && + virTypedParamsAddString(params, nparams, maxparams, + VIR_MIGRATE_PARAM_COMPRESSION, + qemuMigrationCompressMethodTypeToStrin= g(i)) < 0) + return -1; + } + + if (compression->level_set && + virTypedParamsAddInt(params, nparams, maxparams, + VIR_MIGRATE_PARAM_COMPRESSION_MT_LEVEL, + compression->level) < 0) + return -1; + + if (compression->threads_set && + virTypedParamsAddInt(params, nparams, maxparams, + VIR_MIGRATE_PARAM_COMPRESSION_MT_THREADS, + compression->threads) < 0) + return -1; + + if (compression->dthreads_set && + virTypedParamsAddInt(params, nparams, maxparams, + VIR_MIGRATE_PARAM_COMPRESSION_MT_DTHREADS, + compression->dthreads) < 0) + return -1; + + if (compression->xbzrle_cache_set && + virTypedParamsAddULLong(params, nparams, maxparams, + VIR_MIGRATE_PARAM_COMPRESSION_XBZRLE_CACHE, + compression->xbzrle_cache) < 0) + return -1; + + return 0; +} + + /** * qemuMigrationParamsApply * @driver: qemu driver diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index 494ac104ad..165e1267ab 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -62,6 +62,17 @@ qemuMigrationParamsFromFlags(virTypedParameterPtr params, unsigned long flags, qemuMigrationParty party); =20 +qemuMigrationCompressionPtr +qemuMigrationAnyCompressionParse(virTypedParameterPtr params, + int nparams, + unsigned long flags); +int +qemuMigrationAnyCompressionDump(qemuMigrationCompressionPtr compression, + virTypedParameterPtr *params, + int *nparams, + int *maxparams, + unsigned long *flags); + void qemuMigrationParamsFree(qemuMigrationParamsPtr migParams); =20 --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 152378056476185.35908791013605; Sun, 15 Apr 2018 01:22:44 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 45AFE356DA; Sun, 15 Apr 2018 08:22:42 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 131DF80F9B; Sun, 15 Apr 2018 08:22:42 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id B3EEE5BBFA; Sun, 15 Apr 2018 08:22:41 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgGa7008832 for ; Wed, 11 Apr 2018 10:42:16 -0400 Received: by smtp.corp.redhat.com (Postfix) id 25A9E2026E03; Wed, 11 Apr 2018 14:42:16 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id C192B2024CA4 for ; Wed, 11 Apr 2018 14:42:15 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id BB2C0100B81; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:35 +0200 Message-Id: <07844d03c974c9f0e5e59644a5ce7b1273a38d48.1523456480.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 45/73] qemu: Hide qemuMigrationParamsSetCompression X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Sun, 15 Apr 2018 08:22:42 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" There's no need to call this API explicitly in the migration code. We can pass the compression parameters to qemuMigrationParamsFromFlags and it can internally call qemuMigrationParamsSetCompression to apply them to the qemuMigrationParams structure. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_driver.c | 30 ++++++++++++------------- src/qemu/qemu_migration.c | 38 ++++++++++---------------------- src/qemu/qemu_migration.h | 2 -- src/qemu/qemu_migration_params.c | 11 +++++---- src/qemu/qemu_migration_params.h | 8 ++----- 5 files changed, 36 insertions(+), 53 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 85755257aa..3b0c3a3ffb 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -12142,7 +12142,7 @@ qemuDomainMigratePrepareTunnel(virConnectPtr dconn, goto cleanup; =20 if (!(migParams =3D qemuMigrationParamsFromFlags(NULL, 0, flags, - QEMU_MIGRATION_DESTINAT= ION))) + QEMU_MIGRATION_DESTINAT= ION, compression))) goto cleanup; =20 if (virLockManagerPluginUsesState(driver->lockManager)) { @@ -12160,7 +12160,7 @@ qemuDomainMigratePrepareTunnel(virConnectPtr dconn, =20 ret =3D qemuMigrationDstPrepareTunnel(driver, dconn, NULL, 0, NULL, NULL, /* No cookies= in v2 */ - st, &def, origname, compression, m= igParams, flags); + st, &def, origname, migParams, fla= gs); =20 cleanup: VIR_FREE(compression); @@ -12208,7 +12208,7 @@ qemuDomainMigratePrepare2(virConnectPtr dconn, goto cleanup; =20 if (!(migParams =3D qemuMigrationParamsFromFlags(NULL, 0, flags, - QEMU_MIGRATION_DESTINAT= ION))) + QEMU_MIGRATION_DESTINAT= ION, compression))) goto cleanup; =20 if (virLockManagerPluginUsesState(driver->lockManager)) { @@ -12232,7 +12232,7 @@ qemuDomainMigratePrepare2(virConnectPtr dconn, NULL, 0, NULL, NULL, /* No cookies= */ uri_in, uri_out, &def, origname, NULL, 0, NULL, 0, - compression, migParams, flags); + migParams, flags); =20 cleanup: qemuMigrationParamsFree(migParams); @@ -12273,7 +12273,7 @@ qemuDomainMigratePerform(virDomainPtr dom, goto cleanup; =20 if (!(migParams =3D qemuMigrationParamsFromFlags(NULL, 0, flags, - QEMU_MIGRATION_SOURCE))) + QEMU_MIGRATION_SOURCE, = compression))) goto cleanup; =20 if (!(vm =3D qemuDomObjFromDomain(dom))) @@ -12467,7 +12467,7 @@ qemuDomainMigratePrepare3(virConnectPtr dconn, goto cleanup; =20 if (!(migParams =3D qemuMigrationParamsFromFlags(NULL, 0, flags, - QEMU_MIGRATION_DESTINAT= ION))) + QEMU_MIGRATION_DESTINAT= ION, compression))) goto cleanup; =20 if (!(def =3D qemuMigrationAnyPrepareDef(driver, dom_xml, dname, &orig= name))) @@ -12481,7 +12481,7 @@ qemuDomainMigratePrepare3(virConnectPtr dconn, cookieout, cookieoutlen, uri_in, uri_out, &def, origname, NULL, 0, NULL, 0, - compression, migParams, flags); + migParams, flags); =20 cleanup: qemuMigrationParamsFree(migParams); @@ -12549,7 +12549,7 @@ qemuDomainMigratePrepare3Params(virConnectPtr dconn, goto cleanup; =20 if (!(migParams =3D qemuMigrationParamsFromFlags(params, nparams, flag= s, - QEMU_MIGRATION_DESTINAT= ION))) + QEMU_MIGRATION_DESTINAT= ION, compression))) goto cleanup; =20 if (flags & VIR_MIGRATE_TUNNELLED) { @@ -12574,7 +12574,7 @@ qemuDomainMigratePrepare3Params(virConnectPtr dconn, uri_in, uri_out, &def, origname, listenAddress, nmigrate_disks, migrate_disks, nbd= Port, - compression, migParams, flags); + migParams, flags); =20 cleanup: qemuMigrationParamsFree(migParams); @@ -12618,7 +12618,7 @@ qemuDomainMigratePrepareTunnel3(virConnectPtr dconn, goto cleanup; =20 if (!(migParams =3D qemuMigrationParamsFromFlags(NULL, 0, flags, - QEMU_MIGRATION_DESTINAT= ION))) + QEMU_MIGRATION_DESTINAT= ION, compression))) goto cleanup; =20 if (!(def =3D qemuMigrationAnyPrepareDef(driver, dom_xml, dname, &orig= name))) @@ -12630,7 +12630,7 @@ qemuDomainMigratePrepareTunnel3(virConnectPtr dconn, ret =3D qemuMigrationDstPrepareTunnel(driver, dconn, cookiein, cookieinlen, cookieout, cookieoutlen, - st, &def, origname, compression, m= igParams, flags); + st, &def, origname, migParams, fla= gs); =20 cleanup: VIR_FREE(compression); @@ -12682,7 +12682,7 @@ qemuDomainMigratePrepareTunnel3Params(virConnectPtr= dconn, goto cleanup; =20 if (!(migParams =3D qemuMigrationParamsFromFlags(params, nparams, flag= s, - QEMU_MIGRATION_DESTINAT= ION))) + QEMU_MIGRATION_DESTINAT= ION, compression))) goto cleanup; =20 if (!(def =3D qemuMigrationAnyPrepareDef(driver, dom_xml, dname, &orig= name))) @@ -12694,7 +12694,7 @@ qemuDomainMigratePrepareTunnel3Params(virConnectPtr= dconn, ret =3D qemuMigrationDstPrepareTunnel(driver, dconn, cookiein, cookieinlen, cookieout, cookieoutlen, - st, &def, origname, compression, m= igParams, flags); + st, &def, origname, migParams, fla= gs); =20 cleanup: VIR_FREE(compression); @@ -12730,7 +12730,7 @@ qemuDomainMigratePerform3(virDomainPtr dom, goto cleanup; =20 if (!(migParams =3D qemuMigrationParamsFromFlags(NULL, 0, flags, - QEMU_MIGRATION_SOURCE))) + QEMU_MIGRATION_SOURCE, = compression))) goto cleanup; =20 if (!(vm =3D qemuDomObjFromDomain(dom))) @@ -12822,7 +12822,7 @@ qemuDomainMigratePerform3Params(virDomainPtr dom, goto cleanup; =20 if (!(migParams =3D qemuMigrationParamsFromFlags(params, nparams, flag= s, - QEMU_MIGRATION_SOURCE))) + QEMU_MIGRATION_SOURCE, = compression))) goto cleanup; =20 if (!(vm =3D qemuDomObjFromDomain(dom))) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index d0d0d97be4..1c5ee67929 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -2158,7 +2158,6 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, size_t nmigrate_disks, const char **migrate_disks, int nbdPort, - qemuMigrationCompressionPtr compression, qemuMigrationParamsPtr migParams, unsigned long flags) { @@ -2372,9 +2371,6 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, dataFD[1] =3D -1; /* 'st' owns the FD now & will close it */ } =20 - if (qemuMigrationParamsSetCompression(vm, compression, migParams) < 0) - goto stopjob; - if (STREQ_NULLABLE(protocol, "rdma") && virProcessSetMaxMemLock(vm->pid, vm->def->mem.hard_limit << 10) < = 0) { goto stopjob; @@ -2526,7 +2522,6 @@ qemuMigrationDstPrepareTunnel(virQEMUDriverPtr driver, virStreamPtr st, virDomainDefPtr *def, const char *origname, - qemuMigrationCompressionPtr compression, qemuMigrationParamsPtr migParams, unsigned long flags) { @@ -2545,7 +2540,7 @@ qemuMigrationDstPrepareTunnel(virQEMUDriverPtr driver, return qemuMigrationDstPrepareAny(driver, dconn, cookiein, cookieinlen, cookieout, cookieoutlen, def, origna= me, st, NULL, 0, false, NULL, 0, NULL, 0, - compression, migParams, flags); + migParams, flags); } =20 =20 @@ -2587,7 +2582,6 @@ qemuMigrationDstPrepareDirect(virQEMUDriverPtr driver, size_t nmigrate_disks, const char **migrate_disks, int nbdPort, - qemuMigrationCompressionPtr compression, qemuMigrationParamsPtr migParams, unsigned long flags) { @@ -2712,7 +2706,7 @@ qemuMigrationDstPrepareDirect(virQEMUDriverPtr driver, NULL, uri ? uri->scheme : "tcp", port, autoPort, listenAddress, nmigrate_disks, migrate_disks, nbdPor= t, - compression, migParams, flags); + migParams, flags); cleanup: virURIFree(uri); VIR_FREE(hostname); @@ -3239,7 +3233,6 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, const char *graphicsuri, size_t nmigrate_disks, const char **migrate_disks, - qemuMigrationCompressionPtr compression, qemuMigrationParamsPtr migParams) { int ret =3D -1; @@ -3314,9 +3307,6 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, if (qemuMigrationSrcGraphicsRelocate(driver, vm, mig, graphicsuri) < 0) VIR_WARN("unable to provide data for graphics client relocation"); =20 - if (qemuMigrationParamsSetCompression(vm, compression, migParams) < 0) - goto error; - if (qemuMigrationParamsCheck(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT, migParams) < 0) goto error; @@ -3606,7 +3596,6 @@ qemuMigrationSrcPerformNative(virQEMUDriverPtr driver, const char *graphicsuri, size_t nmigrate_disks, const char **migrate_disks, - qemuMigrationCompressionPtr compression, qemuMigrationParamsPtr migParams) { qemuDomainObjPrivatePtr priv =3D vm->privateData; @@ -3658,7 +3647,7 @@ qemuMigrationSrcPerformNative(virQEMUDriverPtr driver, ret =3D qemuMigrationSrcRun(driver, vm, persist_xml, cookiein, cookiei= nlen, cookieout, cookieoutlen, flags, resource, &spec, dconn, graphicsuri, nmigrate_disks, migrate_disks, - compression, migParams); + migParams); =20 if (spec.destType =3D=3D MIGRATION_DEST_FD) VIR_FORCE_CLOSE(spec.dest.fd.qemu); @@ -3685,7 +3674,6 @@ qemuMigrationSrcPerformTunnel(virQEMUDriverPtr driver, const char *graphicsuri, size_t nmigrate_disks, const char **migrate_disks, - qemuMigrationCompressionPtr compression, qemuMigrationParamsPtr migParams) { int ret =3D -1; @@ -3723,7 +3711,7 @@ qemuMigrationSrcPerformTunnel(virQEMUDriverPtr driver, ret =3D qemuMigrationSrcRun(driver, vm, persist_xml, cookiein, cookiei= nlen, cookieout, cookieoutlen, flags, resource, &s= pec, dconn, graphicsuri, nmigrate_disks, migrate_= disks, - compression, migParams); + migParams); =20 cleanup: VIR_FORCE_CLOSE(spec.dest.fd.qemu); @@ -3747,7 +3735,6 @@ qemuMigrationSrcPerformPeer2Peer2(virQEMUDriverPtr dr= iver, unsigned long flags, const char *dname, unsigned long resource, - qemuMigrationCompressionPtr compression, qemuMigrationParamsPtr migParams) { virDomainPtr ddomain =3D NULL; @@ -3832,13 +3819,13 @@ qemuMigrationSrcPerformPeer2Peer2(virQEMUDriverPtr = driver, ret =3D qemuMigrationSrcPerformTunnel(driver, vm, st, NULL, NULL, 0, NULL, NULL, flags, resource, dconn, - NULL, 0, NULL, compression, mi= gParams); + NULL, 0, NULL, migParams); else ret =3D qemuMigrationSrcPerformNative(driver, vm, NULL, uri_out, cookie, cookielen, NULL, NULL, /* No out cookie w= ith v2 migration */ flags, resource, dconn, NULL, = 0, NULL, - compression, migParams); + migParams); =20 /* Perform failed. Make sure Finish doesn't overwrite the error */ if (ret < 0) @@ -4077,14 +4064,14 @@ qemuMigrationSrcPerformPeer2Peer3(virQEMUDriverPtr = driver, cookiein, cookieinlen, &cookieout, &cookieoutlen, flags, bandwidth, dconn, graph= icsuri, - nmigrate_disks, migrate_disks,= compression, + nmigrate_disks, migrate_disks, migParams); } else { ret =3D qemuMigrationSrcPerformNative(driver, vm, persist_xml, uri, cookiein, cookieinlen, &cookieout, &cookieoutlen, flags, bandwidth, dconn, graph= icsuri, - nmigrate_disks, migrate_disks,= compression, + nmigrate_disks, migrate_disks, migParams); } =20 @@ -4393,7 +4380,7 @@ qemuMigrationSrcPerformPeer2Peer(virQEMUDriverPtr dri= ver, } else { ret =3D qemuMigrationSrcPerformPeer2Peer2(driver, sconn, dconn, vm, dconnuri, flags, dname, re= source, - compression, migParams); + migParams); } =20 cleanup: @@ -4475,7 +4462,7 @@ qemuMigrationSrcPerformJob(virQEMUDriverPtr driver, ret =3D qemuMigrationSrcPerformNative(driver, vm, persist_xml, uri= , cookiein, cookieinlen, cookieout, cookieoutlen, flags, resource, NULL, NULL, 0= , NULL, - compression, migParams); + migParams); } if (ret < 0) goto endjob; @@ -4544,7 +4531,6 @@ qemuMigrationSrcPerformPhase(virQEMUDriverPtr driver, const char *graphicsuri, size_t nmigrate_disks, const char **migrate_disks, - qemuMigrationCompressionPtr compression, qemuMigrationParamsPtr migParams, const char *cookiein, int cookieinlen, @@ -4572,7 +4558,7 @@ qemuMigrationSrcPerformPhase(virQEMUDriverPtr driver, ret =3D qemuMigrationSrcPerformNative(driver, vm, persist_xml, uri, co= okiein, cookieinlen, cookieout, cookieoutlen, flags, resource, NULL, graphicsuri, - nmigrate_disks, migrate_disks, com= pression, migParams); + nmigrate_disks, migrate_disks, mig= Params); =20 if (ret < 0) { if (qemuMigrationSrcRestoreDomainState(driver, vm)) { @@ -4667,7 +4653,7 @@ qemuMigrationSrcPerform(virQEMUDriverPtr driver, return qemuMigrationSrcPerformPhase(driver, conn, vm, persist_= xml, uri, graphicsuri, nmigrate_disks, migrate_di= sks, - compression, migParams, + migParams, cookiein, cookieinlen, cookieout, cookieoutlen, flags, resource); diff --git a/src/qemu/qemu_migration.h b/src/qemu/qemu_migration.h index 53d8c529fc..b135f740c1 100644 --- a/src/qemu/qemu_migration.h +++ b/src/qemu/qemu_migration.h @@ -129,7 +129,6 @@ qemuMigrationDstPrepareTunnel(virQEMUDriverPtr driver, virStreamPtr st, virDomainDefPtr *def, const char *origname, - qemuMigrationCompressionPtr compression, qemuMigrationParamsPtr migParams, unsigned long flags); =20 @@ -148,7 +147,6 @@ qemuMigrationDstPrepareDirect(virQEMUDriverPtr driver, size_t nmigrate_disks, const char **migrate_disks, int nbdPort, - qemuMigrationCompressionPtr compression, qemuMigrationParamsPtr migParams, unsigned long flags); =20 diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 94eb08a6bb..5808aa761d 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -137,9 +137,8 @@ qemuMigrationParamsFree(qemuMigrationParamsPtr migParam= s) } while (0) =20 =20 -int -qemuMigrationParamsSetCompression(virDomainObjPtr vm ATTRIBUTE_UNUSED, - qemuMigrationCompressionPtr compression, +static int +qemuMigrationParamsSetCompression(qemuMigrationCompressionPtr compression, qemuMigrationParamsPtr migParams) { if (compression->methods & (1ULL << QEMU_MIGRATION_COMPRESS_XBZRLE)) @@ -170,7 +169,8 @@ qemuMigrationParamsPtr qemuMigrationParamsFromFlags(virTypedParameterPtr params, int nparams, unsigned long flags, - qemuMigrationParty party) + qemuMigrationParty party, + qemuMigrationCompressionPtr compression) { qemuMigrationParamsPtr migParams; size_t i; @@ -204,6 +204,9 @@ qemuMigrationParamsFromFlags(virTypedParameterPtr param= s, goto error; } =20 + if (qemuMigrationParamsSetCompression(compression, migParams) < 0) + goto error; + return migParams; =20 error: diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index 165e1267ab..65bd3125dc 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -60,7 +60,8 @@ qemuMigrationParamsPtr qemuMigrationParamsFromFlags(virTypedParameterPtr params, int nparams, unsigned long flags, - qemuMigrationParty party); + qemuMigrationParty party, + qemuMigrationCompressionPtr compression); =20 qemuMigrationCompressionPtr qemuMigrationAnyCompressionParse(virTypedParameterPtr params, @@ -96,11 +97,6 @@ int qemuMigrationParamsDisableTLS(virDomainObjPtr vm, qemuMigrationParamsPtr migParams); =20 -int -qemuMigrationParamsSetCompression(virDomainObjPtr vm, - qemuMigrationCompressionPtr compression, - qemuMigrationParamsPtr migParams); - int qemuMigrationParamsCheck(virQEMUDriverPtr driver, virDomainObjPtr vm, --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457795266378.53917067441284; Wed, 11 Apr 2018 07:43:15 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 1C1B83137730; Wed, 11 Apr 2018 14:43:14 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id B46D85E1AC; Wed, 11 Apr 2018 14:43:13 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 5296F5BBE4; Wed, 11 Apr 2018 14:43:13 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgGum008843 for ; Wed, 11 Apr 2018 10:42:16 -0400 Received: by smtp.corp.redhat.com (Postfix) id 53947AB3EA; Wed, 11 Apr 2018 14:42:16 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id EEF0B946D5 for ; Wed, 11 Apr 2018 14:42:15 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id C07FD100B83; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:36 +0200 Message-Id: <50570c76ca449cf83facec0df86fb9433412a096.1523456480.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 46/73] qemu: Replace qemuMigrationAnyCompressionDump X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.44]); Wed, 11 Apr 2018 14:43:14 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Since every parameter or capability set in qemuMigrationCompression structure is now reflected in qemuMigrationParams structure, we can replace qemuMigrationAnyCompressionDump with a new API which will work on qemuMigrationParams. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_driver.c | 6 ++-- src/qemu/qemu_migration.c | 16 ++++------ src/qemu/qemu_migration.h | 1 - src/qemu/qemu_migration_params.c | 52 ++++++++++++++------------------ src/qemu/qemu_migration_params.h | 10 +++--- 5 files changed, 37 insertions(+), 48 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 3b0c3a3ffb..5e79e90609 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -12297,7 +12297,7 @@ qemuDomainMigratePerform(virDomainPtr dom, */ ret =3D qemuMigrationSrcPerform(driver, dom->conn, vm, NULL, NULL, dconnuri, uri, NULL, NULL, 0, NULL= , 0, - compression, migParams, cookie, cookiele= n, + migParams, cookie, cookielen, NULL, NULL, /* No output cookies in v2 */ flags, dname, resource, false); =20 @@ -12743,7 +12743,7 @@ qemuDomainMigratePerform3(virDomainPtr dom, =20 ret =3D qemuMigrationSrcPerform(driver, dom->conn, vm, xmlin, NULL, dconnuri, uri, NULL, NULL, 0, NULL, 0, - compression, migParams, + migParams, cookiein, cookieinlen, cookieout, cookieoutlen, flags, dname, resource, true); @@ -12836,7 +12836,7 @@ qemuDomainMigratePerform3Params(virDomainPtr dom, ret =3D qemuMigrationSrcPerform(driver, dom->conn, vm, dom_xml, persis= t_xml, dconnuri, uri, graphicsuri, listenAddres= s, nmigrate_disks, migrate_disks, nbdPort, - compression, migParams, + migParams, cookiein, cookieinlen, cookieout, cookie= outlen, flags, dname, bandwidth, true); cleanup: diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 1c5ee67929..319b4d000a 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -3891,7 +3891,6 @@ qemuMigrationSrcPerformPeer2Peer3(virQEMUDriverPtr dr= iver, size_t nmigrate_disks, const char **migrate_disks, int nbdPort, - qemuMigrationCompressionPtr compression, qemuMigrationParamsPtr migParams, unsigned long long bandwidth, bool useParams, @@ -3976,8 +3975,8 @@ qemuMigrationSrcPerformPeer2Peer3(virQEMUDriverPtr dr= iver, nbdPort) < 0) goto cleanup; =20 - if (qemuMigrationAnyCompressionDump(compression, ¶ms, &nparams, - &maxparams, &flags) < 0) + if (qemuMigrationParamsDump(migParams, ¶ms, &nparams, + &maxparams, &flags) < 0) goto cleanup; } =20 @@ -4250,7 +4249,6 @@ qemuMigrationSrcPerformPeer2Peer(virQEMUDriverPtr dri= ver, size_t nmigrate_disks, const char **migrate_disks, int nbdPort, - qemuMigrationCompressionPtr compression, qemuMigrationParamsPtr migParams, unsigned long flags, const char *dname, @@ -4375,7 +4373,7 @@ qemuMigrationSrcPerformPeer2Peer(virQEMUDriverPtr dri= ver, ret =3D qemuMigrationSrcPerformPeer2Peer3(driver, sconn, dconn, dc= onnuri, vm, xmlin, persist_xml, dname, uri, g= raphicsuri, listenAddress, nmigrate_di= sks, migrate_disks, - nbdPort, compression, migP= arams, resource, + nbdPort, migParams, resour= ce, useParams, flags); } else { ret =3D qemuMigrationSrcPerformPeer2Peer2(driver, sconn, dconn, vm, @@ -4416,7 +4414,6 @@ qemuMigrationSrcPerformJob(virQEMUDriverPtr driver, size_t nmigrate_disks, const char **migrate_disks, int nbdPort, - qemuMigrationCompressionPtr compression, qemuMigrationParamsPtr migParams, const char *cookiein, int cookieinlen, @@ -4455,7 +4452,7 @@ qemuMigrationSrcPerformJob(virQEMUDriverPtr driver, ret =3D qemuMigrationSrcPerformPeer2Peer(driver, conn, vm, xmlin, = persist_xml, dconnuri, uri, graphicsuri,= listenAddress, nmigrate_disks, migrate_dis= ks, nbdPort, - compression, migParams, fla= gs, dname, resource, + migParams, flags, dname, re= source, &v3proto); } else { qemuMigrationJobSetPhase(driver, vm, QEMU_MIGRATION_PHASE_PERFORM2= ); @@ -4606,7 +4603,6 @@ qemuMigrationSrcPerform(virQEMUDriverPtr driver, size_t nmigrate_disks, const char **migrate_disks, int nbdPort, - qemuMigrationCompressionPtr compression, qemuMigrationParamsPtr migParams, const char *cookiein, int cookieinlen, @@ -4638,7 +4634,7 @@ qemuMigrationSrcPerform(virQEMUDriverPtr driver, return qemuMigrationSrcPerformJob(driver, conn, vm, xmlin, persist= _xml, dconnuri, uri, graphicsuri, listenAddress, nmigrate_disks, migrate_disks, n= bdPort, - compression, migParams, + migParams, cookiein, cookieinlen, cookieout, cookieoutlen, flags, dname, resource, v3proto); @@ -4661,7 +4657,7 @@ qemuMigrationSrcPerform(virQEMUDriverPtr driver, return qemuMigrationSrcPerformJob(driver, conn, vm, xmlin, per= sist_xml, NULL, uri, graphicsuri, listenAddr= ess, nmigrate_disks, migrate_disk= s, nbdPort, - compression, migParams, + migParams, cookiein, cookieinlen, cookieout, cookieoutlen, fla= gs, dname, resource, v3proto); diff --git a/src/qemu/qemu_migration.h b/src/qemu/qemu_migration.h index b135f740c1..e12b6972db 100644 --- a/src/qemu/qemu_migration.h +++ b/src/qemu/qemu_migration.h @@ -163,7 +163,6 @@ qemuMigrationSrcPerform(virQEMUDriverPtr driver, size_t nmigrate_disks, const char **migrate_disks, int nbdPort, - qemuMigrationCompressionPtr compression, qemuMigrationParamsPtr migParams, const char *cookiein, int cookieinlen, diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 5808aa761d..33d91ccf38 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -39,6 +39,7 @@ VIR_LOG_INIT("qemu.qemu_migration_params"); #define QEMU_MIGRATION_TLS_ALIAS_BASE "libvirt_migrate" =20 struct _qemuMigrationParams { + unsigned long long compMethods; /* bit-wise OR of qemuMigrationCompres= sMethod */ virBitmapPtr caps; qemuMonitorMigrationParams params; }; @@ -149,6 +150,8 @@ qemuMigrationParamsSetCompression(qemuMigrationCompress= ionPtr compression, ignore_value(virBitmapSetBit(migParams->caps, QEMU_MONITOR_MIGRATION_CAPS_COMPRESS)= ); =20 + migParams->compMethods =3D compression->methods; + migParams->params.compressLevel_set =3D compression->level_set; migParams->params.compressLevel =3D compression->level; =20 @@ -301,51 +304,42 @@ qemuMigrationAnyCompressionParse(virTypedParameterPtr= params, } =20 int -qemuMigrationAnyCompressionDump(qemuMigrationCompressionPtr compression, - virTypedParameterPtr *params, - int *nparams, - int *maxparams, - unsigned long *flags) +qemuMigrationParamsDump(qemuMigrationParamsPtr migParams, + virTypedParameterPtr *params, + int *nparams, + int *maxparams, + unsigned long *flags) { size_t i; =20 - if (compression->methods =3D=3D 1ULL << QEMU_MIGRATION_COMPRESS_XBZRLE= && - !compression->xbzrle_cache_set) { + if (migParams->compMethods =3D=3D 1ULL << QEMU_MIGRATION_COMPRESS_XBZR= LE && + !migParams->params.xbzrleCacheSize_set) { *flags |=3D VIR_MIGRATE_COMPRESSED; return 0; } =20 for (i =3D 0; i < QEMU_MIGRATION_COMPRESS_LAST; ++i) { - if ((compression->methods & (1ULL << i)) && + if ((migParams->compMethods & (1ULL << i)) && virTypedParamsAddString(params, nparams, maxparams, VIR_MIGRATE_PARAM_COMPRESSION, qemuMigrationCompressMethodTypeToStrin= g(i)) < 0) return -1; } =20 - if (compression->level_set && - virTypedParamsAddInt(params, nparams, maxparams, - VIR_MIGRATE_PARAM_COMPRESSION_MT_LEVEL, - compression->level) < 0) - return -1; +#define SET(API, PARAM, VAR) \ + do { \ + if (migParams->params.VAR ## _set && \ + API(params, nparams, maxparams, VIR_MIGRATE_PARAM_ ## PARAM, \ + migParams->params.VAR) < 0) \ + return -1; \ + } while (0) =20 - if (compression->threads_set && - virTypedParamsAddInt(params, nparams, maxparams, - VIR_MIGRATE_PARAM_COMPRESSION_MT_THREADS, - compression->threads) < 0) - return -1; + SET(virTypedParamsAddInt, COMPRESSION_MT_LEVEL, compressLevel); + SET(virTypedParamsAddInt, COMPRESSION_MT_THREADS, compressThreads); + SET(virTypedParamsAddInt, COMPRESSION_MT_DTHREADS, decompressThreads); + SET(virTypedParamsAddULLong, COMPRESSION_XBZRLE_CACHE, xbzrleCacheSize= ); =20 - if (compression->dthreads_set && - virTypedParamsAddInt(params, nparams, maxparams, - VIR_MIGRATE_PARAM_COMPRESSION_MT_DTHREADS, - compression->dthreads) < 0) - return -1; - - if (compression->xbzrle_cache_set && - virTypedParamsAddULLong(params, nparams, maxparams, - VIR_MIGRATE_PARAM_COMPRESSION_XBZRLE_CACHE, - compression->xbzrle_cache) < 0) - return -1; +#undef SET =20 return 0; } diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index 65bd3125dc..d778a8e339 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -68,11 +68,11 @@ qemuMigrationAnyCompressionParse(virTypedParameterPtr p= arams, int nparams, unsigned long flags); int -qemuMigrationAnyCompressionDump(qemuMigrationCompressionPtr compression, - virTypedParameterPtr *params, - int *nparams, - int *maxparams, - unsigned long *flags); +qemuMigrationParamsDump(qemuMigrationParamsPtr migParams, + virTypedParameterPtr *params, + int *nparams, + int *maxparams, + unsigned long *flags); =20 void qemuMigrationParamsFree(qemuMigrationParamsPtr migParams); --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 152345781124882.5137610829969; Wed, 11 Apr 2018 07:43:31 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id E1C4C31303A5; Wed, 11 Apr 2018 14:43:29 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id A626474926; Wed, 11 Apr 2018 14:43:29 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 548955BBFD; Wed, 11 Apr 2018 14:43:29 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgGdO008888 for ; Wed, 11 Apr 2018 10:42:17 -0400 Received: by smtp.corp.redhat.com (Postfix) id C7864215CDCE; Wed, 11 Apr 2018 14:42:16 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 6EA15215CDAF for ; Wed, 11 Apr 2018 14:42:16 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id C5E5E100B84; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:37 +0200 Message-Id: <64bbbe58555803136e29c870e8b5501b7ee82cc0.1523456480.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 47/73] qemu: Drop qemuMigrationCompression structure X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.43]); Wed, 11 Apr 2018 14:43:30 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" By merging qemuMigrationAnyCompressionParse into qemuMigrationParamsSetCompression we can drop the useless intermediate qemuMigrationCompression structure and parse compression related typed parameters and flags directly into qemuMigrationParams. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_driver.c | 63 ++--------- src/qemu/qemu_migration_params.c | 181 +++++++++++++------------------ src/qemu/qemu_migration_params.h | 26 +---- 3 files changed, 85 insertions(+), 185 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 5e79e90609..8e880280ec 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -12126,7 +12126,6 @@ qemuDomainMigratePrepareTunnel(virConnectPtr dconn, virQEMUDriverPtr driver =3D dconn->privateData; virDomainDefPtr def =3D NULL; char *origname =3D NULL; - qemuMigrationCompressionPtr compression =3D NULL; qemuMigrationParamsPtr migParams =3D NULL; int ret =3D -1; =20 @@ -12138,11 +12137,8 @@ qemuDomainMigratePrepareTunnel(virConnectPtr dconn, goto cleanup; } =20 - if (!(compression =3D qemuMigrationAnyCompressionParse(NULL, 0, flags)= )) - goto cleanup; - if (!(migParams =3D qemuMigrationParamsFromFlags(NULL, 0, flags, - QEMU_MIGRATION_DESTINAT= ION, compression))) + QEMU_MIGRATION_DESTINAT= ION))) goto cleanup; =20 if (virLockManagerPluginUsesState(driver->lockManager)) { @@ -12163,7 +12159,6 @@ qemuDomainMigratePrepareTunnel(virConnectPtr dconn, st, &def, origname, migParams, fla= gs); =20 cleanup: - VIR_FREE(compression); qemuMigrationParamsFree(migParams); VIR_FREE(origname); virDomainDefFree(def); @@ -12188,7 +12183,6 @@ qemuDomainMigratePrepare2(virConnectPtr dconn, virQEMUDriverPtr driver =3D dconn->privateData; virDomainDefPtr def =3D NULL; char *origname =3D NULL; - qemuMigrationCompressionPtr compression =3D NULL; qemuMigrationParamsPtr migParams =3D NULL; int ret =3D -1; =20 @@ -12204,11 +12198,8 @@ qemuDomainMigratePrepare2(virConnectPtr dconn, goto cleanup; } =20 - if (!(compression =3D qemuMigrationAnyCompressionParse(NULL, 0, flags)= )) - goto cleanup; - if (!(migParams =3D qemuMigrationParamsFromFlags(NULL, 0, flags, - QEMU_MIGRATION_DESTINAT= ION, compression))) + QEMU_MIGRATION_DESTINAT= ION))) goto cleanup; =20 if (virLockManagerPluginUsesState(driver->lockManager)) { @@ -12236,7 +12227,6 @@ qemuDomainMigratePrepare2(virConnectPtr dconn, =20 cleanup: qemuMigrationParamsFree(migParams); - VIR_FREE(compression); VIR_FREE(origname); virDomainDefFree(def); return ret; @@ -12257,7 +12247,6 @@ qemuDomainMigratePerform(virDomainPtr dom, virDomainObjPtr vm; int ret =3D -1; const char *dconnuri =3D NULL; - qemuMigrationCompressionPtr compression =3D NULL; qemuMigrationParamsPtr migParams =3D NULL; =20 virCheckFlags(QEMU_MIGRATION_FLAGS, -1); @@ -12269,11 +12258,8 @@ qemuDomainMigratePerform(virDomainPtr dom, goto cleanup; } =20 - if (!(compression =3D qemuMigrationAnyCompressionParse(NULL, 0, flags)= )) - goto cleanup; - if (!(migParams =3D qemuMigrationParamsFromFlags(NULL, 0, flags, - QEMU_MIGRATION_SOURCE, = compression))) + QEMU_MIGRATION_SOURCE))) goto cleanup; =20 if (!(vm =3D qemuDomObjFromDomain(dom))) @@ -12303,7 +12289,6 @@ qemuDomainMigratePerform(virDomainPtr dom, =20 cleanup: qemuMigrationParamsFree(migParams); - VIR_FREE(compression); return ret; } =20 @@ -12447,7 +12432,6 @@ qemuDomainMigratePrepare3(virConnectPtr dconn, virQEMUDriverPtr driver =3D dconn->privateData; virDomainDefPtr def =3D NULL; char *origname =3D NULL; - qemuMigrationCompressionPtr compression =3D NULL; qemuMigrationParamsPtr migParams =3D NULL; int ret =3D -1; =20 @@ -12463,11 +12447,8 @@ qemuDomainMigratePrepare3(virConnectPtr dconn, goto cleanup; } =20 - if (!(compression =3D qemuMigrationAnyCompressionParse(NULL, 0, flags)= )) - goto cleanup; - if (!(migParams =3D qemuMigrationParamsFromFlags(NULL, 0, flags, - QEMU_MIGRATION_DESTINAT= ION, compression))) + QEMU_MIGRATION_DESTINAT= ION))) goto cleanup; =20 if (!(def =3D qemuMigrationAnyPrepareDef(driver, dom_xml, dname, &orig= name))) @@ -12485,7 +12466,6 @@ qemuDomainMigratePrepare3(virConnectPtr dconn, =20 cleanup: qemuMigrationParamsFree(migParams); - VIR_FREE(compression); VIR_FREE(origname); virDomainDefFree(def); return ret; @@ -12513,7 +12493,6 @@ qemuDomainMigratePrepare3Params(virConnectPtr dconn, int nmigrate_disks; const char **migrate_disks =3D NULL; char *origname =3D NULL; - qemuMigrationCompressionPtr compression =3D NULL; qemuMigrationParamsPtr migParams =3D NULL; int ret =3D -1; =20 @@ -12545,11 +12524,8 @@ qemuDomainMigratePrepare3Params(virConnectPtr dcon= n, if (nmigrate_disks < 0) goto cleanup; =20 - if (!(compression =3D qemuMigrationAnyCompressionParse(params, nparams= , flags))) - goto cleanup; - if (!(migParams =3D qemuMigrationParamsFromFlags(params, nparams, flag= s, - QEMU_MIGRATION_DESTINAT= ION, compression))) + QEMU_MIGRATION_DESTINAT= ION))) goto cleanup; =20 if (flags & VIR_MIGRATE_TUNNELLED) { @@ -12578,7 +12554,6 @@ qemuDomainMigratePrepare3Params(virConnectPtr dconn, =20 cleanup: qemuMigrationParamsFree(migParams); - VIR_FREE(compression); VIR_FREE(migrate_disks); VIR_FREE(origname); virDomainDefFree(def); @@ -12602,7 +12577,6 @@ qemuDomainMigratePrepareTunnel3(virConnectPtr dconn, virQEMUDriverPtr driver =3D dconn->privateData; virDomainDefPtr def =3D NULL; char *origname =3D NULL; - qemuMigrationCompressionPtr compression =3D NULL; qemuMigrationParamsPtr migParams =3D NULL; int ret =3D -1; =20 @@ -12614,11 +12588,8 @@ qemuDomainMigratePrepareTunnel3(virConnectPtr dcon= n, goto cleanup; } =20 - if (!(compression =3D qemuMigrationAnyCompressionParse(NULL, 0, flags)= )) - goto cleanup; - if (!(migParams =3D qemuMigrationParamsFromFlags(NULL, 0, flags, - QEMU_MIGRATION_DESTINAT= ION, compression))) + QEMU_MIGRATION_DESTINAT= ION))) goto cleanup; =20 if (!(def =3D qemuMigrationAnyPrepareDef(driver, dom_xml, dname, &orig= name))) @@ -12633,7 +12604,6 @@ qemuDomainMigratePrepareTunnel3(virConnectPtr dconn, st, &def, origname, migParams, fla= gs); =20 cleanup: - VIR_FREE(compression); qemuMigrationParamsFree(migParams); VIR_FREE(origname); virDomainDefFree(def); @@ -12656,7 +12626,6 @@ qemuDomainMigratePrepareTunnel3Params(virConnectPtr= dconn, const char *dom_xml =3D NULL; const char *dname =3D NULL; char *origname =3D NULL; - qemuMigrationCompressionPtr compression =3D NULL; qemuMigrationParamsPtr migParams =3D NULL; int ret =3D -1; =20 @@ -12678,11 +12647,8 @@ qemuDomainMigratePrepareTunnel3Params(virConnectPt= r dconn, goto cleanup; } =20 - if (!(compression =3D qemuMigrationAnyCompressionParse(NULL, 0, flags)= )) - goto cleanup; - if (!(migParams =3D qemuMigrationParamsFromFlags(params, nparams, flag= s, - QEMU_MIGRATION_DESTINAT= ION, compression))) + QEMU_MIGRATION_DESTINAT= ION))) goto cleanup; =20 if (!(def =3D qemuMigrationAnyPrepareDef(driver, dom_xml, dname, &orig= name))) @@ -12697,7 +12663,6 @@ qemuDomainMigratePrepareTunnel3Params(virConnectPtr= dconn, st, &def, origname, migParams, fla= gs); =20 cleanup: - VIR_FREE(compression); qemuMigrationParamsFree(migParams); VIR_FREE(origname); virDomainDefFree(def); @@ -12720,17 +12685,13 @@ qemuDomainMigratePerform3(virDomainPtr dom, { virQEMUDriverPtr driver =3D dom->conn->privateData; virDomainObjPtr vm; - qemuMigrationCompressionPtr compression =3D NULL; qemuMigrationParamsPtr migParams =3D NULL; int ret =3D -1; =20 virCheckFlags(QEMU_MIGRATION_FLAGS, -1); =20 - if (!(compression =3D qemuMigrationAnyCompressionParse(NULL, 0, flags)= )) - goto cleanup; - if (!(migParams =3D qemuMigrationParamsFromFlags(NULL, 0, flags, - QEMU_MIGRATION_SOURCE, = compression))) + QEMU_MIGRATION_SOURCE))) goto cleanup; =20 if (!(vm =3D qemuDomObjFromDomain(dom))) @@ -12750,7 +12711,6 @@ qemuDomainMigratePerform3(virDomainPtr dom, =20 cleanup: qemuMigrationParamsFree(migParams); - VIR_FREE(compression); return ret; } =20 @@ -12777,7 +12737,6 @@ qemuDomainMigratePerform3Params(virDomainPtr dom, const char **migrate_disks =3D NULL; unsigned long long bandwidth =3D 0; int nbdPort =3D 0; - qemuMigrationCompressionPtr compression =3D NULL; qemuMigrationParamsPtr migParams =3D NULL; int ret =3D -1; =20 @@ -12818,11 +12777,8 @@ qemuDomainMigratePerform3Params(virDomainPtr dom, if (nmigrate_disks < 0) goto cleanup; =20 - if (!(compression =3D qemuMigrationAnyCompressionParse(params, nparams= , flags))) - goto cleanup; - if (!(migParams =3D qemuMigrationParamsFromFlags(params, nparams, flag= s, - QEMU_MIGRATION_SOURCE, = compression))) + QEMU_MIGRATION_SOURCE))) goto cleanup; =20 if (!(vm =3D qemuDomObjFromDomain(dom))) @@ -12840,7 +12796,6 @@ qemuDomainMigratePerform3Params(virDomainPtr dom, cookiein, cookieinlen, cookieout, cookie= outlen, flags, dname, bandwidth, true); cleanup: - VIR_FREE(compression); qemuMigrationParamsFree(migParams); VIR_FREE(migrate_disks); return ret; diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 33d91ccf38..388a1f5804 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -139,32 +139,85 @@ qemuMigrationParamsFree(qemuMigrationParamsPtr migPar= ams) =20 =20 static int -qemuMigrationParamsSetCompression(qemuMigrationCompressionPtr compression, +qemuMigrationParamsSetCompression(virTypedParameterPtr params, + int nparams, + unsigned long flags, qemuMigrationParamsPtr migParams) { - if (compression->methods & (1ULL << QEMU_MIGRATION_COMPRESS_XBZRLE)) + size_t i; + int method; + qemuMonitorMigrationCaps cap; + + for (i =3D 0; i < nparams; i++) { + if (STRNEQ(params[i].field, VIR_MIGRATE_PARAM_COMPRESSION)) + continue; + + method =3D qemuMigrationCompressMethodTypeFromString(params[i].val= ue.s); + if (method < 0) { + virReportError(VIR_ERR_INVALID_ARG, + _("Unsupported compression method '%s'"), + params[i].value.s); + goto error; + } + + if (migParams->compMethods & (1ULL << method)) { + virReportError(VIR_ERR_INVALID_ARG, + _("Compression method '%s' is specified twice"), + params[i].value.s); + goto error; + } + + migParams->compMethods |=3D 1ULL << method; + + switch ((qemuMigrationCompressMethod) method) { + case QEMU_MIGRATION_COMPRESS_XBZRLE: + cap =3D QEMU_MONITOR_MIGRATION_CAPS_XBZRLE; + break; + + case QEMU_MIGRATION_COMPRESS_MT: + cap =3D QEMU_MONITOR_MIGRATION_CAPS_COMPRESS; + break; + + case QEMU_MIGRATION_COMPRESS_LAST: + default: + continue; + } + ignore_value(virBitmapSetBit(migParams->caps, cap)); + } + + if (params) { + GET(virTypedParamsGetInt, COMPRESSION_MT_LEVEL, compressLevel); + GET(virTypedParamsGetInt, COMPRESSION_MT_THREADS, compressThreads); + GET(virTypedParamsGetInt, COMPRESSION_MT_DTHREADS, decompressThrea= ds); + GET(virTypedParamsGetULLong, COMPRESSION_XBZRLE_CACHE, xbzrleCache= Size); + } + + if ((migParams->params.compressLevel_set || + migParams->params.compressThreads_set || + migParams->params.decompressThreads_set) && + !(migParams->compMethods & (1ULL << QEMU_MIGRATION_COMPRESS_MT))) { + virReportError(VIR_ERR_INVALID_ARG, "%s", + _("Turn multithread compression on to tune it")); + goto error; + } + + if (migParams->params.xbzrleCacheSize_set && + !(migParams->compMethods & (1ULL << QEMU_MIGRATION_COMPRESS_XBZRLE= ))) { + virReportError(VIR_ERR_INVALID_ARG, "%s", + _("Turn xbzrle compression on to tune it")); + goto error; + } + + if (!migParams->compMethods && (flags & VIR_MIGRATE_COMPRESSED)) { + migParams->compMethods =3D 1ULL << QEMU_MIGRATION_COMPRESS_XBZRLE; ignore_value(virBitmapSetBit(migParams->caps, QEMU_MONITOR_MIGRATION_CAPS_XBZRLE)); - - if (compression->methods & (1ULL << QEMU_MIGRATION_COMPRESS_MT)) - ignore_value(virBitmapSetBit(migParams->caps, - QEMU_MONITOR_MIGRATION_CAPS_COMPRESS)= ); - - migParams->compMethods =3D compression->methods; - - migParams->params.compressLevel_set =3D compression->level_set; - migParams->params.compressLevel =3D compression->level; - - migParams->params.compressThreads_set =3D compression->threads_set; - migParams->params.compressThreads =3D compression->threads; - - migParams->params.decompressThreads_set =3D compression->dthreads_set; - migParams->params.decompressThreads =3D compression->dthreads; - - migParams->params.xbzrleCacheSize_set =3D compression->xbzrle_cache_se= t; - migParams->params.xbzrleCacheSize =3D compression->xbzrle_cache; + } =20 return 0; + + error: + return -1; } =20 =20 @@ -172,8 +225,7 @@ qemuMigrationParamsPtr qemuMigrationParamsFromFlags(virTypedParameterPtr params, int nparams, unsigned long flags, - qemuMigrationParty party, - qemuMigrationCompressionPtr compression) + qemuMigrationParty party) { qemuMigrationParamsPtr migParams; size_t i; @@ -207,7 +259,7 @@ qemuMigrationParamsFromFlags(virTypedParameterPtr param= s, goto error; } =20 - if (qemuMigrationParamsSetCompression(compression, migParams) < 0) + if (qemuMigrationParamsSetCompression(params, nparams, flags, migParam= s) < 0) goto error; =20 return migParams; @@ -220,89 +272,6 @@ qemuMigrationParamsFromFlags(virTypedParameterPtr para= ms, #undef GET =20 =20 -qemuMigrationCompressionPtr -qemuMigrationAnyCompressionParse(virTypedParameterPtr params, - int nparams, - unsigned long flags) -{ - size_t i; - qemuMigrationCompressionPtr compression =3D NULL; - - if (VIR_ALLOC(compression) < 0) - return NULL; - - for (i =3D 0; i < nparams; i++) { - int method; - - if (STRNEQ(params[i].field, VIR_MIGRATE_PARAM_COMPRESSION)) - continue; - - method =3D qemuMigrationCompressMethodTypeFromString(params[i].val= ue.s); - if (method < 0) { - virReportError(VIR_ERR_INVALID_ARG, - _("Unsupported compression method '%s'"), - params[i].value.s); - goto error; - } - - if (compression->methods & (1ULL << method)) { - virReportError(VIR_ERR_INVALID_ARG, - _("Compression method '%s' is specified twice"), - params[i].value.s); - goto error; - } - - compression->methods |=3D 1ULL << method; - } - -#define GET_PARAM(PARAM, TYPE, VALUE) \ - do { \ - int rc; \ - const char *par =3D VIR_MIGRATE_PARAM_COMPRESSION_ ## PARAM; \ - \ - if ((rc =3D virTypedParamsGet ## TYPE(params, nparams, \ - par, &compression->VALUE)) < 0= ) \ - goto error; \ - \ - if (rc =3D=3D 1) \ - compression->VALUE ## _set =3D true; \ - } while (0) - - if (params) { - GET_PARAM(MT_LEVEL, Int, level); - GET_PARAM(MT_THREADS, Int, threads); - GET_PARAM(MT_DTHREADS, Int, dthreads); - GET_PARAM(XBZRLE_CACHE, ULLong, xbzrle_cache); - } - -#undef GET_PARAM - - if ((compression->level_set || - compression->threads_set || - compression->dthreads_set) && - !(compression->methods & (1ULL << QEMU_MIGRATION_COMPRESS_MT))) { - virReportError(VIR_ERR_INVALID_ARG, "%s", - _("Turn multithread compression on to tune it")); - goto error; - } - - if (compression->xbzrle_cache_set && - !(compression->methods & (1ULL << QEMU_MIGRATION_COMPRESS_XBZRLE))= ) { - virReportError(VIR_ERR_INVALID_ARG, "%s", - _("Turn xbzrle compression on to tune it")); - goto error; - } - - if (!compression->methods && (flags & VIR_MIGRATE_COMPRESSED)) - compression->methods =3D 1ULL << QEMU_MIGRATION_COMPRESS_XBZRLE; - - return compression; - - error: - VIR_FREE(compression); - return NULL; -} - int qemuMigrationParamsDump(qemuMigrationParamsPtr migParams, virTypedParameterPtr *params, diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index d778a8e339..3d1ada1a61 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -28,25 +28,6 @@ # include "qemu_conf.h" =20 =20 -typedef struct _qemuMigrationCompression qemuMigrationCompression; -typedef qemuMigrationCompression *qemuMigrationCompressionPtr; -struct _qemuMigrationCompression { - unsigned long long methods; - - bool level_set; - int level; - - bool threads_set; - int threads; - - bool dthreads_set; - int dthreads; - - bool xbzrle_cache_set; - unsigned long long xbzrle_cache; -}; - - typedef struct _qemuMigrationParams qemuMigrationParams; typedef qemuMigrationParams *qemuMigrationParamsPtr; =20 @@ -60,13 +41,8 @@ qemuMigrationParamsPtr qemuMigrationParamsFromFlags(virTypedParameterPtr params, int nparams, unsigned long flags, - qemuMigrationParty party, - qemuMigrationCompressionPtr compression); + qemuMigrationParty party); =20 -qemuMigrationCompressionPtr -qemuMigrationAnyCompressionParse(virTypedParameterPtr params, - int nparams, - unsigned long flags); int qemuMigrationParamsDump(qemuMigrationParamsPtr migParams, virTypedParameterPtr *params, --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457793061650.6744489016224; Wed, 11 Apr 2018 07:43:13 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id AA291267C4; Wed, 11 Apr 2018 14:43:10 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 810FD8846F; Wed, 11 Apr 2018 14:43:10 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 428A2181BA09; Wed, 11 Apr 2018 14:43:10 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgGTw008840 for ; Wed, 11 Apr 2018 10:42:16 -0400 Received: by smtp.corp.redhat.com (Postfix) id 4648010B0F39; Wed, 11 Apr 2018 14:42:16 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 2630610B0F38 for ; Wed, 11 Apr 2018 14:42:16 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id CB27A100B85; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:38 +0200 Message-Id: <61a9a12a61481d1e7ed93952788a5b47a21ce0c8.1523456480.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 48/73] qemu: Introduce qemuMigrationParamsFetch X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Wed, 11 Apr 2018 14:43:11 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Let's separate the code which queries QEMU for migration parameters from qemuMigrationParamsCheck into a dedicated function. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_migration_params.c | 56 +++++++++++++++++++------------- src/qemu/qemu_migration_params.h | 6 ++++ 2 files changed, 40 insertions(+), 22 deletions(-) diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 388a1f5804..94de0458f5 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -520,6 +520,39 @@ qemuMigrationParamsResetTLS(virQEMUDriverPtr driver, } =20 =20 +int +qemuMigrationParamsFetch(virQEMUDriverPtr driver, + virDomainObjPtr vm, + int asyncJob, + qemuMigrationParamsPtr *migParams) +{ + qemuDomainObjPrivatePtr priv =3D vm->privateData; + qemuMigrationParamsPtr params =3D NULL; + int ret =3D -1; + int rc; + + *migParams =3D NULL; + + if (!(params =3D qemuMigrationParamsNew())) + return -1; + + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + goto cleanup; + + rc =3D qemuMonitorGetMigrationParams(priv->mon, ¶ms->params); + + if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0) + goto cleanup; + + VIR_STEAL_PTR(*migParams, params); + ret =3D 0; + + cleanup: + qemuMigrationParamsFree(params); + return ret; +} + + /** * qemuMigrationParamsCheck: * @@ -535,11 +568,9 @@ qemuMigrationParamsCheck(virQEMUDriverPtr driver, qemuMigrationParamsPtr migParams) { qemuDomainObjPrivatePtr priv =3D vm->privateData; - qemuMigrationParamsPtr origParams =3D NULL; qemuMonitorMigrationCaps cap; qemuMigrationParty party; size_t i; - int ret =3D -1; =20 if (asyncJob =3D=3D QEMU_ASYNC_JOB_MIGRATION_OUT) party =3D QEMU_MIGRATION_SOURCE; @@ -570,31 +601,12 @@ qemuMigrationParamsCheck(virQEMUDriverPtr driver, } } =20 - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) - return -1; - - if (!(origParams =3D qemuMigrationParamsNew())) - goto cleanup; - /* * We want to disable all migration capabilities after migration, no n= eed * to ask QEMU for their current settings. */ =20 - if (qemuMonitorGetMigrationParams(priv->mon, &origParams->params) < 0) - goto cleanup; - - ret =3D 0; - - cleanup: - if (qemuDomainObjExitMonitor(driver, vm) < 0) - ret =3D -1; - - if (ret =3D=3D 0) - VIR_STEAL_PTR(priv->job.migParams, origParams); - qemuMigrationParamsFree(origParams); - - return ret; + return qemuMigrationParamsFetch(driver, vm, asyncJob, &priv->job.migPa= rams); } =20 =20 diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index 3d1ada1a61..0a30dcd623 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -73,6 +73,12 @@ int qemuMigrationParamsDisableTLS(virDomainObjPtr vm, qemuMigrationParamsPtr migParams); =20 +int +qemuMigrationParamsFetch(virQEMUDriverPtr driver, + virDomainObjPtr vm, + int asyncJob, + qemuMigrationParamsPtr *migParams); + int qemuMigrationParamsCheck(virQEMUDriverPtr driver, virDomainObjPtr vm, --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457788998349.9433048967792; Wed, 11 Apr 2018 07:43:08 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id A3631820E2; Wed, 11 Apr 2018 14:43:07 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 344845C542; Wed, 11 Apr 2018 14:43:07 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id E9851181BA05; Wed, 11 Apr 2018 14:43:06 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgGv3008842 for ; Wed, 11 Apr 2018 10:42:16 -0400 Received: by smtp.corp.redhat.com (Postfix) id 4A49A215CDCB; Wed, 11 Apr 2018 14:42:16 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 29807215CDAF for ; Wed, 11 Apr 2018 14:42:16 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id D07EC100B86; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:39 +0200 Message-Id: <1a7c99ceaa16f1f019dd8a60df5a17db6a56dee3.1523456480.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 49/73] qemu: Limit usage of qemuMonitorMigrationParams X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Wed, 11 Apr 2018 14:43:08 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Use this internal structure only in qemu_migration_params.c and change other non-test users to use the high level qemuMigrationParams struct. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_driver.c | 26 +++++++++++--------------- src/qemu/qemu_migration_params.c | 16 ++++++++++++++++ src/qemu/qemu_migration_params.h | 4 ++++ 3 files changed, 31 insertions(+), 15 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 8e880280ec..761f84ee7f 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -13555,8 +13555,7 @@ qemuDomainMigrateGetMaxDowntime(virDomainPtr dom, { virQEMUDriverPtr driver =3D dom->conn->privateData; virDomainObjPtr vm; - qemuDomainObjPrivatePtr priv; - qemuMonitorMigrationParams migparams =3D { 0 }; + qemuMigrationParamsPtr migParams =3D NULL; int ret =3D -1; =20 virCheckFlags(0, -1); @@ -13576,27 +13575,24 @@ qemuDomainMigrateGetMaxDowntime(virDomainPtr dom, goto endjob; } =20 - priv =3D vm->privateData; - qemuDomainObjEnterMonitor(driver, vm); + if (qemuMigrationParamsFetch(driver, vm, QEMU_ASYNC_JOB_NONE, + &migParams) < 0) + goto endjob; =20 - if (qemuMonitorGetMigrationParams(priv->mon, &migparams) =3D=3D 0) { - if (migparams.downtimeLimit_set) { - *downtime =3D migparams.downtimeLimit; - ret =3D 0; - } else { - virReportError(VIR_ERR_OPERATION_INVALID, "%s", - _("Querying migration downtime is not supported= by " - "QEMU binary")); - } + if (qemuMigrationParamsGetDowntimeLimit(migParams, downtime) =3D=3D 1)= { + virReportError(VIR_ERR_OPERATION_INVALID, "%s", + _("Querying migration downtime is not supported by " + "QEMU binary")); + goto endjob; } =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) - ret =3D -1; + ret =3D 0; =20 endjob: qemuDomainObjEndJob(driver, vm); =20 cleanup: + qemuMigrationParamsFree(migParams); virDomainObjEndAPI(&vm); return ret; } diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 94de0458f5..cadb402b0f 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -553,6 +553,22 @@ qemuMigrationParamsFetch(virQEMUDriverPtr driver, } =20 =20 +/** + * Returns 0 on success, + * 1 if the parameter is not supported by QEMU. + */ +int +qemuMigrationParamsGetDowntimeLimit(qemuMigrationParamsPtr migParams, + unsigned long long *value) +{ + if (!migParams->params.downtimeLimit_set) + return 1; + + *value =3D migParams->params.downtimeLimit; + return 0; +} + + /** * qemuMigrationParamsCheck: * diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index 0a30dcd623..cc9a14601b 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -79,6 +79,10 @@ qemuMigrationParamsFetch(virQEMUDriverPtr driver, int asyncJob, qemuMigrationParamsPtr *migParams); =20 +int +qemuMigrationParamsGetDowntimeLimit(qemuMigrationParamsPtr migParams, + unsigned long long *value); + int qemuMigrationParamsCheck(virQEMUDriverPtr driver, virDomainObjPtr vm, --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457798215678.9079307499824; Wed, 11 Apr 2018 07:43:18 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id D42FE3133E60; Wed, 11 Apr 2018 14:43:16 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id A15317E6A8; Wed, 11 Apr 2018 14:43:16 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 6B83E181BA0E; Wed, 11 Apr 2018 14:43:16 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgGMi008853 for ; Wed, 11 Apr 2018 10:42:16 -0400 Received: by smtp.corp.redhat.com (Postfix) id 67B6B2026E0E; Wed, 11 Apr 2018 14:42:16 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 2B7D7202698A for ; Wed, 11 Apr 2018 14:42:16 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id D5D75100B87; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:40 +0200 Message-Id: <64a9df48900f1b603fdba1c477b0a615fe2f629b.1523456480.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 50/73] qemumonitorjsontest: Drop migration params test X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.46]); Wed, 11 Apr 2018 14:43:17 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" The test is mostly useless and we want to refactor migration parameters even further. The refactoring will allow us to introduce enhanced tests for migration parameters. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- tests/qemumonitorjsontest.c | 99 ------------------------------------- 1 file changed, 99 deletions(-) diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c index 8a5b0be64b..dafcccebad 100644 --- a/tests/qemumonitorjsontest.c +++ b/tests/qemumonitorjsontest.c @@ -1787,104 +1787,6 @@ testQemuMonitorJSONqemuMonitorJSONGetBlockStatsInfo= (const void *data) return ret; } =20 -static int -testQemuMonitorJSONqemuMonitorJSONGetMigrationParams(const void *data) -{ - virDomainXMLOptionPtr xmlopt =3D (virDomainXMLOptionPtr)data; - qemuMonitorTestPtr test =3D qemuMonitorTestNewSimple(true, xmlopt); - qemuMonitorMigrationParams params; - int ret =3D -1; - - if (!test) - return -1; - - if (qemuMonitorTestAddItem(test, "query-migrate-parameters", - "{" - " \"return\": {" - " \"decompress-threads\": 2," - " \"cpu-throttle-increment\": 10," - " \"compress-threads\": 8," - " \"compress-level\": 1," - " \"cpu-throttle-initial\": 20," - " \"tls-creds\": \"tls0\"," - " \"tls-hostname\": \"\"," - " \"max-bandwidth\": 1234567890," - " \"downtime-limit\": 500," - " \"block-incremental\": true," - " \"xbzrle-cache-size\": 67108864" - " }" - "}") < 0) { - goto cleanup; - } - - if (qemuMonitorJSONGetMigrationParams(qemuMonitorTestGetMonitor(test), - ¶ms) < 0) - goto cleanup; - -#define CHECK_NUM(VAR, FIELD, VALUE, FMT) \ - do { \ - if (!params.VAR ## _set) { \ - virReportError(VIR_ERR_INTERNAL_ERROR, "%s is not set", FIELD)= ; \ - goto cleanup; \ - } \ - if (params.VAR !=3D VALUE) { \ - virReportError(VIR_ERR_INTERNAL_ERROR, \ - "Invalid %s: " FMT ", expected " FMT, \ - FIELD, params.VAR, VALUE); \ - goto cleanup; \ - } \ - } while (0) - -#define CHECK_INT(VAR, FIELD, VALUE) \ - CHECK_NUM(VAR, FIELD, VALUE, "%d") - -#define CHECK_ULONG(VAR, FIELD, VALUE) \ - CHECK_NUM(VAR, FIELD, VALUE, "%llu") - -#define CHECK_BOOL(VAR, FIELD, VALUE) \ - CHECK_NUM(VAR, FIELD, VALUE, "%d") - -#define CHECK_STR(VAR, FIELD, VALUE) \ - do { \ - if (!params.VAR) { \ - virReportError(VIR_ERR_INTERNAL_ERROR, "%s is not set", FIELD)= ; \ - goto cleanup; \ - } \ - if (STRNEQ(params.VAR, VALUE)) { \ - virReportError(VIR_ERR_INTERNAL_ERROR, \ - "Invalid %s:'%s', expected '%s'", \ - FIELD, params.VAR, VALUE); \ - goto cleanup; \ - } \ - } while (0) - - CHECK_INT(compressLevel, "compress-level", 1); - CHECK_INT(compressThreads, "compress-threads", 8); - CHECK_INT(decompressThreads, "decompress-threads", 2); - CHECK_INT(cpuThrottleInitial, "cpu-throttle-initial", 20); - CHECK_INT(cpuThrottleIncrement, "cpu-throttle-increment", 10); - CHECK_STR(tlsCreds, "tls-creds", "tls0"); - CHECK_STR(tlsHostname, "tls-hostname", ""); - CHECK_ULONG(maxBandwidth, "max-bandwidth", 1234567890ULL); - CHECK_ULONG(downtimeLimit, "downtime-limit", 500ULL); - CHECK_BOOL(blockIncremental, "block-incremental", true); - CHECK_ULONG(xbzrleCacheSize, "xbzrle-cache-size", 67108864ULL); - -#undef CHECK_NUM -#undef CHECK_INT -#undef CHECK_ULONG -#undef CHECK_BOOL -#undef CHECK_STR - - ret =3D 0; - - cleanup: - VIR_FREE(params.tlsCreds); - VIR_FREE(params.tlsHostname); - qemuMonitorTestFree(test); - return ret; -} - =20 static int testQemuMonitorJSONqemuMonitorJSONGetMigrationCacheSize(const void *data) @@ -3002,7 +2904,6 @@ mymain(void) DO_TEST(qemuMonitorJSONGetBlockInfo); DO_TEST(qemuMonitorJSONGetBlockStatsInfo); DO_TEST(qemuMonitorJSONGetMigrationCacheSize); - DO_TEST(qemuMonitorJSONGetMigrationParams); DO_TEST(qemuMonitorJSONGetMigrationStats); DO_TEST(qemuMonitorJSONGetChardevInfo); DO_TEST(qemuMonitorJSONSetBlockIoThrottle); --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457809960408.22726076807055; Wed, 11 Apr 2018 07:43:29 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id A676FC058EDD; Wed, 11 Apr 2018 14:43:28 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 30978A099D; Wed, 11 Apr 2018 14:43:28 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id D38F35BBFA; Wed, 11 Apr 2018 14:43:27 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgGuq008841 for ; Wed, 11 Apr 2018 10:42:16 -0400 Received: by smtp.corp.redhat.com (Postfix) id 464A910B0F3B; Wed, 11 Apr 2018 14:42:16 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 26DE710B0F3A for ; Wed, 11 Apr 2018 14:42:16 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id DB485100B88; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:41 +0200 Message-Id: <9d01b8f7524e6e8117c336a2aea30d4878d27bf5.1523456480.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 51/73] util: Introduce virJSONValueObjectStealObject X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Wed, 11 Apr 2018 14:43:29 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/libvirt_private.syms | 1 + src/util/virjson.c | 8 ++++++++ src/util/virjson.h | 2 ++ 3 files changed, 11 insertions(+) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index cab324c4d7..0918e69525 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -2098,6 +2098,7 @@ virJSONValueObjectIsNull; virJSONValueObjectKeysNumber; virJSONValueObjectRemoveKey; virJSONValueObjectStealArray; +virJSONValueObjectStealObject; virJSONValueToString; =20 =20 diff --git a/src/util/virjson.c b/src/util/virjson.c index 3ddefc34ca..dfe00d9280 100644 --- a/src/util/virjson.c +++ b/src/util/virjson.c @@ -1400,6 +1400,14 @@ virJSONValueObjectStealArray(virJSONValuePtr object,= const char *key) } =20 =20 +virJSONValuePtr +virJSONValueObjectStealObject(virJSONValuePtr object, + const char *key) +{ + return virJSONValueObjectStealByType(object, key, VIR_JSON_TYPE_OBJECT= ); +} + + int virJSONValueObjectIsNull(virJSONValuePtr object, const char *key) diff --git a/src/util/virjson.h b/src/util/virjson.h index f7283dcf97..0f098892b4 100644 --- a/src/util/virjson.h +++ b/src/util/virjson.h @@ -112,6 +112,8 @@ virJSONValuePtr virJSONValueObjectGetArray(virJSONValue= Ptr object, const char *key); virJSONValuePtr virJSONValueObjectStealArray(virJSONValuePtr object, const char *key); +virJSONValuePtr virJSONValueObjectStealObject(virJSONValuePtr object, + const char *key); =20 const char *virJSONValueObjectGetString(virJSONValuePtr object, const char= *key); const char *virJSONValueObjectGetStringOrNumber(virJSONValuePtr object, co= nst char *key); --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457802246528.4527097992454; Wed, 11 Apr 2018 07:43:22 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 6E7AF1B6F; Wed, 11 Apr 2018 14:43:20 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 3087A877B6; Wed, 11 Apr 2018 14:43:20 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id DA6915BBEB; Wed, 11 Apr 2018 14:43:19 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgGMY008861 for ; Wed, 11 Apr 2018 10:42:16 -0400 Received: by smtp.corp.redhat.com (Postfix) id 84202215CDCC; Wed, 11 Apr 2018 14:42:16 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 46E81215CDC8 for ; Wed, 11 Apr 2018 14:42:16 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id E2D52100B89; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:42 +0200 Message-Id: <2f610891526247c8baa7b36531f454e231b66cc1.1523456480.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 52/73] qemu: Move migration parameters JSON parsing X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Wed, 11 Apr 2018 14:43:21 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" We want to have all migration parameters parsing and formatting at once place, i.e., in qemu_migration_params.c. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_migration_params.c | 74 +++++++++++++++++++++++++++++--- src/qemu/qemu_monitor.c | 13 +++++- src/qemu/qemu_monitor.h | 2 +- src/qemu/qemu_monitor_json.c | 51 ++-------------------- src/qemu/qemu_monitor_json.h | 2 +- 5 files changed, 85 insertions(+), 57 deletions(-) diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index cadb402b0f..845234c34b 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -314,6 +314,67 @@ qemuMigrationParamsDump(qemuMigrationParamsPtr migPara= ms, } =20 =20 +static qemuMigrationParamsPtr +qemuMigrationParamsFromJSON(virJSONValuePtr params) +{ + qemuMigrationParamsPtr migParams =3D NULL; + + if (!(migParams =3D qemuMigrationParamsNew())) + return NULL; + + if (!params) + return migParams; + +#define PARSE_SET(API, VAR, FIELD) \ + do { \ + if (API(params, FIELD, &migParams->params.VAR) =3D=3D 0) \ + migParams->params.VAR ## _set =3D true; \ + } while (0) + +#define PARSE_INT(VAR, FIELD) \ + PARSE_SET(virJSONValueObjectGetNumberInt, VAR, FIELD) + +#define PARSE_ULONG(VAR, FIELD) \ + PARSE_SET(virJSONValueObjectGetNumberUlong, VAR, FIELD) + +#define PARSE_BOOL(VAR, FIELD) \ + PARSE_SET(virJSONValueObjectGetBoolean, VAR, FIELD) + +#define PARSE_STR(VAR, FIELD) \ + do { \ + const char *str; \ + if ((str =3D virJSONValueObjectGetString(params, FIELD))) { \ + if (VIR_STRDUP(migParams->params.VAR, str) < 0) \ + goto error; \ + } \ + } while (0) + + PARSE_INT(compressLevel, "compress-level"); + PARSE_INT(compressThreads, "compress-threads"); + PARSE_INT(decompressThreads, "decompress-threads"); + PARSE_INT(cpuThrottleInitial, "cpu-throttle-initial"); + PARSE_INT(cpuThrottleIncrement, "cpu-throttle-increment"); + PARSE_STR(tlsCreds, "tls-creds"); + PARSE_STR(tlsHostname, "tls-hostname"); + PARSE_ULONG(maxBandwidth, "max-bandwidth"); + PARSE_ULONG(downtimeLimit, "downtime-limit"); + PARSE_BOOL(blockIncremental, "block-incremental"); + PARSE_ULONG(xbzrleCacheSize, "xbzrle-cache-size"); + +#undef PARSE_SET +#undef PARSE_INT +#undef PARSE_ULONG +#undef PARSE_BOOL +#undef PARSE_STR + + return migParams; + + error: + qemuMigrationParamsFree(migParams); + return NULL; +} + + /** * qemuMigrationParamsApply * @driver: qemu driver @@ -527,28 +588,27 @@ qemuMigrationParamsFetch(virQEMUDriverPtr driver, qemuMigrationParamsPtr *migParams) { qemuDomainObjPrivatePtr priv =3D vm->privateData; - qemuMigrationParamsPtr params =3D NULL; + virJSONValuePtr jsonParams =3D NULL; int ret =3D -1; int rc; =20 *migParams =3D NULL; =20 - if (!(params =3D qemuMigrationParamsNew())) - return -1; - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) goto cleanup; =20 - rc =3D qemuMonitorGetMigrationParams(priv->mon, ¶ms->params); + rc =3D qemuMonitorGetMigrationParams(priv->mon, &jsonParams); =20 if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0) goto cleanup; =20 - VIR_STEAL_PTR(*migParams, params); + if (!(*migParams =3D qemuMigrationParamsFromJSON(jsonParams))) + goto cleanup; + ret =3D 0; =20 cleanup: - qemuMigrationParamsFree(params); + virJSONValueFree(jsonParams); return ret; } =20 diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 18b54e2da8..411ce28787 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -2622,9 +2622,20 @@ qemuMonitorSetMigrationCacheSize(qemuMonitorPtr mon, } =20 =20 +/** + * qemuMonitorGetMigrationParams: + * @mon: Pointer to the monitor object. + * @params: Where to store migration parameters. + * + * If QEMU does not support querying migration parameters, the function wi= ll + * set @params to NULL and return 0 (success). The caller is responsible f= or + * freeing @params. + * + * Returns 0 on success, -1 on error. + */ int qemuMonitorGetMigrationParams(qemuMonitorPtr mon, - qemuMonitorMigrationParamsPtr params) + virJSONValuePtr *params) { QEMU_CHECK_MONITOR_JSON(mon); =20 diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 2bb4dbc667..261f3192f5 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -679,7 +679,7 @@ struct _qemuMonitorMigrationParams { }; =20 int qemuMonitorGetMigrationParams(qemuMonitorPtr mon, - qemuMonitorMigrationParamsPtr params); + virJSONValuePtr *params); int qemuMonitorSetMigrationParams(qemuMonitorPtr mon, qemuMonitorMigrationParamsPtr params); =20 diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index acc126629e..7de1ade28e 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -2774,14 +2774,13 @@ qemuMonitorJSONSetMigrationCacheSize(qemuMonitorPtr= mon, =20 int qemuMonitorJSONGetMigrationParams(qemuMonitorPtr mon, - qemuMonitorMigrationParamsPtr params) + virJSONValuePtr *params) { int ret =3D -1; - virJSONValuePtr result; virJSONValuePtr cmd =3D NULL; virJSONValuePtr reply =3D NULL; =20 - memset(params, 0, sizeof(*params)); + *params =3D NULL; =20 if (!(cmd =3D qemuMonitorJSONMakeCommand("query-migrate-parameters", N= ULL))) return -1; @@ -2797,51 +2796,9 @@ qemuMonitorJSONGetMigrationParams(qemuMonitorPtr mon, if (qemuMonitorJSONCheckReply(cmd, reply, VIR_JSON_TYPE_OBJECT) < 0) goto cleanup; =20 - result =3D virJSONValueObjectGet(reply, "return"); - -#define PARSE_SET(API, VAR, FIELD) \ - do { \ - if (API(result, FIELD, ¶ms->VAR) =3D=3D 0) \ - params->VAR ## _set =3D true; \ - } while (0) - -#define PARSE_INT(VAR, FIELD) \ - PARSE_SET(virJSONValueObjectGetNumberInt, VAR, FIELD) - -#define PARSE_ULONG(VAR, FIELD) \ - PARSE_SET(virJSONValueObjectGetNumberUlong, VAR, FIELD) - -#define PARSE_BOOL(VAR, FIELD) \ - PARSE_SET(virJSONValueObjectGetBoolean, VAR, FIELD) - -#define PARSE_STR(VAR, FIELD) \ - do { \ - const char *str; \ - if ((str =3D virJSONValueObjectGetString(result, FIELD))) { \ - if (VIR_STRDUP(params->VAR, str) < 0) \ - goto cleanup; \ - } \ - } while (0) - - PARSE_INT(compressLevel, "compress-level"); - PARSE_INT(compressThreads, "compress-threads"); - PARSE_INT(decompressThreads, "decompress-threads"); - PARSE_INT(cpuThrottleInitial, "cpu-throttle-initial"); - PARSE_INT(cpuThrottleIncrement, "cpu-throttle-increment"); - PARSE_STR(tlsCreds, "tls-creds"); - PARSE_STR(tlsHostname, "tls-hostname"); - PARSE_ULONG(maxBandwidth, "max-bandwidth"); - PARSE_ULONG(downtimeLimit, "downtime-limit"); - PARSE_BOOL(blockIncremental, "block-incremental"); - PARSE_ULONG(xbzrleCacheSize, "xbzrle-cache-size"); - -#undef PARSE_SET -#undef PARSE_INT -#undef PARSE_ULONG -#undef PARSE_BOOL -#undef PARSE_STR - + *params =3D virJSONValueObjectStealObject(reply, "return"); ret =3D 0; + cleanup: virJSONValueFree(cmd); virJSONValueFree(reply); diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h index a73e98815c..a52f0a1955 100644 --- a/src/qemu/qemu_monitor_json.h +++ b/src/qemu/qemu_monitor_json.h @@ -135,7 +135,7 @@ int qemuMonitorJSONSetMigrationCacheSize(qemuMonitorPtr= mon, unsigned long long cacheSize); =20 int qemuMonitorJSONGetMigrationParams(qemuMonitorPtr mon, - qemuMonitorMigrationParamsPtr params= ); + virJSONValuePtr *params); int qemuMonitorJSONSetMigrationParams(qemuMonitorPtr mon, qemuMonitorMigrationParamsPtr params= ); =20 --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523780570038481.44790197188; Sun, 15 Apr 2018 01:22:50 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id C1A4381DF6; Sun, 15 Apr 2018 08:22:48 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 7ADF97DEFD; Sun, 15 Apr 2018 08:22:48 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 007465BBF3; Sun, 15 Apr 2018 08:22:47 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgGwc008828 for ; Wed, 11 Apr 2018 10:42:16 -0400 Received: by smtp.corp.redhat.com (Postfix) id 86532946D5; Wed, 11 Apr 2018 14:42:16 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 49558AB3E8 for ; Wed, 11 Apr 2018 14:42:16 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id E641F100B8A; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:43 +0200 Message-Id: <744136462eb87fbf1602414e5a6aff211dbf40a0.1523456480.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 53/73] qemu: Move migration parameters JSON formatting X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Sun, 15 Apr 2018 08:22:49 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" We want to have all migration parameters parsing and formatting at one place, i.e., in qemu_migration_params.c. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_migration_params.c | 68 +++++++++++++++++++++++++++++++- src/qemu/qemu_monitor.c | 35 ++++++++-------- src/qemu/qemu_monitor.h | 2 +- src/qemu/qemu_monitor_json.c | 56 ++------------------------ src/qemu/qemu_monitor_json.h | 2 +- 5 files changed, 90 insertions(+), 73 deletions(-) diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 845234c34b..560c2d3ea5 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -375,6 +375,61 @@ qemuMigrationParamsFromJSON(virJSONValuePtr params) } =20 =20 +static virJSONValuePtr +qemuMigrationParamsToJSON(qemuMigrationParamsPtr migParams) +{ + virJSONValuePtr params =3D NULL; + + if (!(params =3D virJSONValueNewObject())) + return NULL; + +#define APPEND(VALID, API, VAR, FIELD) \ + do { \ + if (VALID && API(params, FIELD, migParams->params.VAR) < 0) \ + goto error; \ + } while (0) + +#define APPEND_INT(VAR, FIELD) \ + APPEND(migParams->params.VAR ## _set, \ + virJSONValueObjectAppendNumberInt, VAR, FIELD) + +#define APPEND_STR(VAR, FIELD) \ + APPEND(migParams->params.VAR, \ + virJSONValueObjectAppendString, VAR, FIELD) + +#define APPEND_ULONG(VAR, FIELD) \ + APPEND(migParams->params.VAR ## _set, \ + virJSONValueObjectAppendNumberUlong, VAR, FIELD) + +#define APPEND_BOOL(VAR, FIELD) \ + APPEND(migParams->params.VAR ## _set, \ + virJSONValueObjectAppendBoolean, VAR, FIELD) + + APPEND_INT(compressLevel, "compress-level"); + APPEND_INT(compressThreads, "compress-threads"); + APPEND_INT(decompressThreads, "decompress-threads"); + APPEND_INT(cpuThrottleInitial, "cpu-throttle-initial"); + APPEND_INT(cpuThrottleIncrement, "cpu-throttle-increment"); + APPEND_STR(tlsCreds, "tls-creds"); + APPEND_STR(tlsHostname, "tls-hostname"); + APPEND_ULONG(maxBandwidth, "max-bandwidth"); + APPEND_ULONG(downtimeLimit, "downtime-limit"); + APPEND_BOOL(blockIncremental, "block-incremental"); + APPEND_ULONG(xbzrleCacheSize, "xbzrle-cache-size"); + +#undef APPEND +#undef APPEND_INT +#undef APPEND_STR +#undef APPEND_ULONG + + return params; + + error: + virJSONValueFree(params); + return NULL; +} + + /** * qemuMigrationParamsApply * @driver: qemu driver @@ -394,7 +449,9 @@ qemuMigrationParamsApply(virQEMUDriverPtr driver, { qemuDomainObjPrivatePtr priv =3D vm->privateData; bool xbzrleCacheSize_old =3D false; + virJSONValuePtr params =3D NULL; int ret =3D -1; + int rc; =20 if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) return -1; @@ -417,9 +474,16 @@ qemuMigrationParamsApply(virQEMUDriverPtr driver, migParams->params.xbzrleCacheSize_set =3D false; } =20 - if (qemuMonitorSetMigrationParams(priv->mon, &migParams->params) < 0) + if (!(params =3D qemuMigrationParamsToJSON(migParams))) goto cleanup; =20 + if (virJSONValueObjectKeysNumber(params) > 0) { + rc =3D qemuMonitorSetMigrationParams(priv->mon, params); + params =3D NULL; + if (rc < 0) + goto cleanup; + } + ret =3D 0; =20 cleanup: @@ -429,6 +493,8 @@ qemuMigrationParamsApply(virQEMUDriverPtr driver, if (xbzrleCacheSize_old) migParams->params.xbzrleCacheSize_set =3D true; =20 + virJSONValueFree(params); + return ret; } =20 diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 411ce28787..641465f227 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -2642,29 +2642,28 @@ qemuMonitorGetMigrationParams(qemuMonitorPtr mon, return qemuMonitorJSONGetMigrationParams(mon, params); } =20 + +/** + * qemuMonitorSetMigrationParams: + * @mon: Pointer to the monitor object. + * @params: Migration parameters. + * + * The @params object is consumed and should not be referenced by the call= er + * after this function returns. + * + * Returns 0 on success, -1 on error. + */ int qemuMonitorSetMigrationParams(qemuMonitorPtr mon, - qemuMonitorMigrationParamsPtr params) + virJSONValuePtr params) { - VIR_DEBUG("compressLevel=3D%d:%d compressThreads=3D%d:%d " - "decompressThreads=3D%d:%d cpuThrottleInitial=3D%d:%d " - "cpuThrottleIncrement=3D%d:%d tlsCreds=3D%s tlsHostname=3D%s= " - "maxBandwidth=3D%d:%llu downtimeLimit=3D%d:%llu " - "blockIncremental=3D%d:%d xbzrleCacheSize=3D%d:%llu", - params->compressLevel_set, params->compressLevel, - params->compressThreads_set, params->compressThreads, - params->decompressThreads_set, params->decompressThreads, - params->cpuThrottleInitial_set, params->cpuThrottleInitial, - params->cpuThrottleIncrement_set, params->cpuThrottleIncreme= nt, - NULLSTR(params->tlsCreds), NULLSTR(params->tlsHostname), - params->maxBandwidth_set, params->maxBandwidth, - params->downtimeLimit_set, params->downtimeLimit, - params->blockIncremental_set, params->blockIncremental, - params->xbzrleCacheSize_set, params->xbzrleCacheSize); - - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR_JSON_GOTO(mon, error); =20 return qemuMonitorJSONSetMigrationParams(mon, params); + + error: + virJSONValueFree(params); + return -1; } =20 =20 diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 261f3192f5..fd3c767dcf 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -681,7 +681,7 @@ struct _qemuMonitorMigrationParams { int qemuMonitorGetMigrationParams(qemuMonitorPtr mon, virJSONValuePtr *params); int qemuMonitorSetMigrationParams(qemuMonitorPtr mon, - qemuMonitorMigrationParamsPtr params); + virJSONValuePtr params); =20 typedef enum { QEMU_MONITOR_MIGRATION_STATUS_INACTIVE, diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 7de1ade28e..b00bca7d46 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -2807,11 +2807,10 @@ qemuMonitorJSONGetMigrationParams(qemuMonitorPtr mo= n, =20 int qemuMonitorJSONSetMigrationParams(qemuMonitorPtr mon, - qemuMonitorMigrationParamsPtr params) + virJSONValuePtr params) { int ret =3D -1; virJSONValuePtr cmd =3D NULL; - virJSONValuePtr args =3D NULL; virJSONValuePtr reply =3D NULL; =20 if (!(cmd =3D virJSONValueNewObject())) @@ -2821,56 +2820,9 @@ qemuMonitorJSONSetMigrationParams(qemuMonitorPtr mon, "migrate-set-parameters") < 0) goto cleanup; =20 - if (!(args =3D virJSONValueNewObject())) + if (virJSONValueObjectAppend(cmd, "arguments", params) < 0) goto cleanup; - -#define APPEND(VALID, API, VAR, FIELD) \ - do { \ - if (VALID && API(args, FIELD, params->VAR) < 0) \ - goto cleanup; \ - } while (0) - -#define APPEND_INT(VAR, FIELD) \ - APPEND(params->VAR ## _set, \ - virJSONValueObjectAppendNumberInt, VAR, FIELD) - -#define APPEND_STR(VAR, FIELD) \ - APPEND(params->VAR, \ - virJSONValueObjectAppendString, VAR, FIELD) - -#define APPEND_ULONG(VAR, FIELD) \ - APPEND(params->VAR ## _set, \ - virJSONValueObjectAppendNumberUlong, VAR, FIELD) - -#define APPEND_BOOL(VAR, FIELD) \ - APPEND(params->VAR ## _set, \ - virJSONValueObjectAppendBoolean, VAR, FIELD) - - APPEND_INT(compressLevel, "compress-level"); - APPEND_INT(compressThreads, "compress-threads"); - APPEND_INT(decompressThreads, "decompress-threads"); - APPEND_INT(cpuThrottleInitial, "cpu-throttle-initial"); - APPEND_INT(cpuThrottleIncrement, "cpu-throttle-increment"); - APPEND_STR(tlsCreds, "tls-creds"); - APPEND_STR(tlsHostname, "tls-hostname"); - APPEND_ULONG(maxBandwidth, "max-bandwidth"); - APPEND_ULONG(downtimeLimit, "downtime-limit"); - APPEND_BOOL(blockIncremental, "block-incremental"); - APPEND_ULONG(xbzrleCacheSize, "xbzrle-cache-size"); - -#undef APPEND -#undef APPEND_INT -#undef APPEND_STR -#undef APPEND_ULONG - - if (virJSONValueObjectKeysNumber(args) =3D=3D 0) { - ret =3D 0; - goto cleanup; - } - - if (virJSONValueObjectAppend(cmd, "arguments", args) < 0) - goto cleanup; - args =3D NULL; + params =3D NULL; =20 if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0) goto cleanup; @@ -2881,7 +2833,7 @@ qemuMonitorJSONSetMigrationParams(qemuMonitorPtr mon, ret =3D 0; cleanup: virJSONValueFree(cmd); - virJSONValueFree(args); + virJSONValueFree(params); virJSONValueFree(reply); return ret; } diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h index a52f0a1955..5ada38b9fa 100644 --- a/src/qemu/qemu_monitor_json.h +++ b/src/qemu/qemu_monitor_json.h @@ -137,7 +137,7 @@ int qemuMonitorJSONSetMigrationCacheSize(qemuMonitorPtr= mon, int qemuMonitorJSONGetMigrationParams(qemuMonitorPtr mon, virJSONValuePtr *params); int qemuMonitorJSONSetMigrationParams(qemuMonitorPtr mon, - qemuMonitorMigrationParamsPtr params= ); + virJSONValuePtr params); =20 int qemuMonitorJSONGetMigrationStats(qemuMonitorPtr mon, qemuMonitorMigrationStatsPtr stats, --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457812793965.4410442360952; Wed, 11 Apr 2018 07:43:32 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 758FA7D4F1; Wed, 11 Apr 2018 14:43:31 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 4A4F6832D8; Wed, 11 Apr 2018 14:43:31 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 0E0B81800CAB; Wed, 11 Apr 2018 14:43:31 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgGCT008854 for ; Wed, 11 Apr 2018 10:42:16 -0400 Received: by smtp.corp.redhat.com (Postfix) id 759F5202698A; Wed, 11 Apr 2018 14:42:16 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 5550C2026609 for ; Wed, 11 Apr 2018 14:42:16 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id EBA96100B8B; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:44 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 54/73] qemu: Export qemuMigrationParams{To, From}JSON for tests X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Wed, 11 Apr 2018 14:43:32 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/Makefile.inc.am | 1 + src/qemu/qemu_migration_params.c | 5 +++-- src/qemu/qemu_migration_paramspriv.h | 31 ++++++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 src/qemu/qemu_migration_paramspriv.h diff --git a/src/qemu/Makefile.inc.am b/src/qemu/Makefile.inc.am index 25706ba4bc..63e7c878d1 100644 --- a/src/qemu/Makefile.inc.am +++ b/src/qemu/Makefile.inc.am @@ -35,6 +35,7 @@ QEMU_DRIVER_SOURCES =3D \ qemu/qemu_migration_cookie.h \ qemu/qemu_migration_params.c \ qemu/qemu_migration_params.h \ + qemu/qemu_migration_paramspriv.h \ qemu/qemu_monitor.c \ qemu/qemu_monitor.h \ qemu/qemu_monitor_text.c \ diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 560c2d3ea5..e9908cf8d4 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -30,6 +30,7 @@ #include "qemu_hotplug.h" #include "qemu_migration.h" #include "qemu_migration_params.h" +#include "qemu_migration_paramspriv.h" #include "qemu_monitor.h" =20 #define VIR_FROM_THIS VIR_FROM_QEMU @@ -314,7 +315,7 @@ qemuMigrationParamsDump(qemuMigrationParamsPtr migParam= s, } =20 =20 -static qemuMigrationParamsPtr +qemuMigrationParamsPtr qemuMigrationParamsFromJSON(virJSONValuePtr params) { qemuMigrationParamsPtr migParams =3D NULL; @@ -375,7 +376,7 @@ qemuMigrationParamsFromJSON(virJSONValuePtr params) } =20 =20 -static virJSONValuePtr +virJSONValuePtr qemuMigrationParamsToJSON(qemuMigrationParamsPtr migParams) { virJSONValuePtr params =3D NULL; diff --git a/src/qemu/qemu_migration_paramspriv.h b/src/qemu/qemu_migration= _paramspriv.h new file mode 100644 index 0000000000..350973b6f9 --- /dev/null +++ b/src/qemu/qemu_migration_paramspriv.h @@ -0,0 +1,31 @@ +/* + * qemu_migration_paramspriv.h: private declarations for migration paramet= ers + * + * Copyright (C) 2006-2018 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * . + * + */ + +#ifndef __QEMU_MIGRATION_PARAMSPRIV_H__ +# define __QEMU_MIGRATION_PARAMSPRIV_H__ + +virJSONValuePtr +qemuMigrationParamsToJSON(qemuMigrationParamsPtr migParams); + +qemuMigrationParamsPtr +qemuMigrationParamsFromJSON(virJSONValuePtr params); + +#endif /* __QEMU_MIGRATION_PARAMSPRIV_H__ */ --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457804913124.13382497144164; Wed, 11 Apr 2018 07:43:24 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 9AEA47FD52; Wed, 11 Apr 2018 14:43:23 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 65EC85FC08; Wed, 11 Apr 2018 14:43:23 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 22DE05BBF2; Wed, 11 Apr 2018 14:43:23 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgGuo008843 for ; Wed, 11 Apr 2018 10:42:16 -0400 Received: by smtp.corp.redhat.com (Postfix) id BA7ADAB3E2; Wed, 11 Apr 2018 14:42:16 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 9A19DAB3E4 for ; Wed, 11 Apr 2018 14:42:16 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id F0F22100B8C; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:45 +0200 Message-Id: <18b6ffea324cecfc1e3bd49ca78b26fb5aca22eb.1523456480.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 55/73] qemu: Move qemuMonitorMigrationParams structure X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Wed, 11 Apr 2018 14:43:24 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" It's no longer used by the monitor code so we can hide it inside qemu_migration_params.c. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_migration_params.c | 36 ++++++++++++++++++++++++++++++++ src/qemu/qemu_monitor.h | 36 -------------------------------- 2 files changed, 36 insertions(+), 36 deletions(-) diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index e9908cf8d4..8027896c12 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -39,6 +39,42 @@ VIR_LOG_INIT("qemu.qemu_migration_params"); =20 #define QEMU_MIGRATION_TLS_ALIAS_BASE "libvirt_migrate" =20 +typedef struct _qemuMonitorMigrationParams qemuMonitorMigrationParams; +typedef qemuMonitorMigrationParams *qemuMonitorMigrationParamsPtr; +struct _qemuMonitorMigrationParams { + bool compressLevel_set; + int compressLevel; + + bool compressThreads_set; + int compressThreads; + + bool decompressThreads_set; + int decompressThreads; + + bool cpuThrottleInitial_set; + int cpuThrottleInitial; + + bool cpuThrottleIncrement_set; + int cpuThrottleIncrement; + + /* Value is either NULL, "", or some string. NULL indicates no support; + * whereas, some string value indicates we can support setting/clearin= g */ + char *tlsCreds; + char *tlsHostname; + + bool maxBandwidth_set; + unsigned long long maxBandwidth; + + bool downtimeLimit_set; + unsigned long long downtimeLimit; + + bool blockIncremental_set; + bool blockIncremental; + + bool xbzrleCacheSize_set; + unsigned long long xbzrleCacheSize; +}; + struct _qemuMigrationParams { unsigned long long compMethods; /* bit-wise OR of qemuMigrationCompres= sMethod */ virBitmapPtr caps; diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index fd3c767dcf..1c49cc2370 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -642,42 +642,6 @@ int qemuMonitorGetMigrationCacheSize(qemuMonitorPtr mo= n, int qemuMonitorSetMigrationCacheSize(qemuMonitorPtr mon, unsigned long long cacheSize); =20 -typedef struct _qemuMonitorMigrationParams qemuMonitorMigrationParams; -typedef qemuMonitorMigrationParams *qemuMonitorMigrationParamsPtr; -struct _qemuMonitorMigrationParams { - bool compressLevel_set; - int compressLevel; - - bool compressThreads_set; - int compressThreads; - - bool decompressThreads_set; - int decompressThreads; - - bool cpuThrottleInitial_set; - int cpuThrottleInitial; - - bool cpuThrottleIncrement_set; - int cpuThrottleIncrement; - - /* Value is either NULL, "", or some string. NULL indicates no support; - * whereas, some string value indicates we can support setting/clearin= g */ - char *tlsCreds; - char *tlsHostname; - - bool maxBandwidth_set; - unsigned long long maxBandwidth; - - bool downtimeLimit_set; - unsigned long long downtimeLimit; - - bool blockIncremental_set; - bool blockIncremental; - - bool xbzrleCacheSize_set; - unsigned long long xbzrleCacheSize; -}; - int qemuMonitorGetMigrationParams(qemuMonitorPtr mon, virJSONValuePtr *params); int qemuMonitorSetMigrationParams(qemuMonitorPtr mon, --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523780586017349.99273273279937; Sun, 15 Apr 2018 01:23:06 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 7040C80477; Sun, 15 Apr 2018 08:23:04 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 3D68017B6E; Sun, 15 Apr 2018 08:23:04 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id DA950180BAD5; Sun, 15 Apr 2018 08:23:03 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgHhX008910 for ; Wed, 11 Apr 2018 10:42:17 -0400 Received: by smtp.corp.redhat.com (Postfix) id 1D2E510B0F3B; Wed, 11 Apr 2018 14:42:17 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 9CCD210B0F38 for ; Wed, 11 Apr 2018 14:42:16 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 027E7100B8E; Wed, 11 Apr 2018 16:42:11 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:46 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 56/73] qemu: Refactor qemuMigrationParams X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Sun, 15 Apr 2018 08:23:05 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Adding support for new migration parameter requires a lot of places to be changed (most likely by copy&paste engineering): new variables to store the parameter value and the associated *_set bool, JSON formatter and parser, XML formatter and parser (to be added soon), and the actual code to set the parameter. It's pretty easy to forget about some of the places which need to be updated and end up with incorrect support. The goal of this patch is to let most of the places do their job without any modifications when new parameters are added. To achieve the goal, a new qemuMigrationParam enum is introduced and all parameters are stored in an array indexed by the items of this enum. This will also allow us to automatically set the migration parameters which directly correspond to libvirt's typed parameters accepted by virDomainMigrate* APIs. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_migration_params.c | 470 ++++++++++++++++++++----------- src/qemu/qemu_migration_params.h | 20 ++ 2 files changed, 328 insertions(+), 162 deletions(-) diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 8027896c12..77abc7191f 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -39,46 +39,29 @@ VIR_LOG_INIT("qemu.qemu_migration_params"); =20 #define QEMU_MIGRATION_TLS_ALIAS_BASE "libvirt_migrate" =20 -typedef struct _qemuMonitorMigrationParams qemuMonitorMigrationParams; -typedef qemuMonitorMigrationParams *qemuMonitorMigrationParamsPtr; -struct _qemuMonitorMigrationParams { - bool compressLevel_set; - int compressLevel; +typedef enum { + QEMU_MIGRATION_PARAM_TYPE_INT, + QEMU_MIGRATION_PARAM_TYPE_ULL, + QEMU_MIGRATION_PARAM_TYPE_BOOL, + QEMU_MIGRATION_PARAM_TYPE_STRING, +} qemuMigrationParamType; =20 - bool compressThreads_set; - int compressThreads; - - bool decompressThreads_set; - int decompressThreads; - - bool cpuThrottleInitial_set; - int cpuThrottleInitial; - - bool cpuThrottleIncrement_set; - int cpuThrottleIncrement; - - /* Value is either NULL, "", or some string. NULL indicates no support; - * whereas, some string value indicates we can support setting/clearin= g */ - char *tlsCreds; - char *tlsHostname; - - bool maxBandwidth_set; - unsigned long long maxBandwidth; - - bool downtimeLimit_set; - unsigned long long downtimeLimit; - - bool blockIncremental_set; - bool blockIncremental; - - bool xbzrleCacheSize_set; - unsigned long long xbzrleCacheSize; +typedef struct _qemuMigrationParamValue qemuMigrationParamValue; +typedef qemuMigrationParamValue *qemuMigrationParamValuePtr; +struct _qemuMigrationParamValue { + bool set; + union { + int i; /* exempt from syntax-check */ + unsigned long long ull; + bool b; + char *s; + } value; }; =20 struct _qemuMigrationParams { unsigned long long compMethods; /* bit-wise OR of qemuMigrationCompres= sMethod */ virBitmapPtr caps; - qemuMonitorMigrationParams params; + qemuMigrationParamValue params[QEMU_MIGRATION_PARAM_LAST]; }; =20 typedef enum { @@ -93,6 +76,20 @@ VIR_ENUM_IMPL(qemuMigrationCompressMethod, QEMU_MIGRATIO= N_COMPRESS_LAST, "mt", ); =20 +VIR_ENUM_DECL(qemuMigrationParam) +VIR_ENUM_IMPL(qemuMigrationParam, QEMU_MIGRATION_PARAM_LAST, + "compress-level", + "compress-threads", + "decompress-threads", + "cpu-throttle-initial", + "cpu-throttle-increment", + "tls-creds", + "tls-hostname", + "max-bandwidth", + "downtime-limit", + "block-incremental", + "xbzrle-cache-size", +); =20 typedef struct _qemuMigrationParamsAlwaysOnItem qemuMigrationParamsAlwaysO= nItem; struct _qemuMigrationParamsAlwaysOnItem { @@ -129,6 +126,21 @@ static const qemuMigrationParamsFlagMapItem qemuMigrat= ionParamsFlagMap[] =3D { QEMU_MIGRATION_SOURCE | QEMU_MIGRATION_DESTINATION}, }; =20 +static const qemuMigrationParamType qemuMigrationParamTypes[] =3D { + [QEMU_MIGRATION_PARAM_COMPRESS_LEVEL] =3D QEMU_MIGRATION_PARAM_TYPE_IN= T, + [QEMU_MIGRATION_PARAM_COMPRESS_THREADS] =3D QEMU_MIGRATION_PARAM_TYPE_= INT, + [QEMU_MIGRATION_PARAM_DECOMPRESS_THREADS] =3D QEMU_MIGRATION_PARAM_TYP= E_INT, + [QEMU_MIGRATION_PARAM_THROTTLE_INITIAL] =3D QEMU_MIGRATION_PARAM_TYPE_= INT, + [QEMU_MIGRATION_PARAM_THROTTLE_INCREMENT] =3D QEMU_MIGRATION_PARAM_TYP= E_INT, + [QEMU_MIGRATION_PARAM_TLS_CREDS] =3D QEMU_MIGRATION_PARAM_TYPE_STRING, + [QEMU_MIGRATION_PARAM_TLS_HOSTNAME] =3D QEMU_MIGRATION_PARAM_TYPE_STRI= NG, + [QEMU_MIGRATION_PARAM_MAX_BANDWIDTH] =3D QEMU_MIGRATION_PARAM_TYPE_ULL, + [QEMU_MIGRATION_PARAM_DOWNTIME_LIMIT] =3D QEMU_MIGRATION_PARAM_TYPE_UL= L, + [QEMU_MIGRATION_PARAM_BLOCK_INCREMENTAL] =3D QEMU_MIGRATION_PARAM_TYPE= _BOOL, + [QEMU_MIGRATION_PARAM_XBZRLE_CACHE_SIZE] =3D QEMU_MIGRATION_PARAM_TYPE= _ULL, +}; +verify(ARRAY_CARDINALITY(qemuMigrationParamTypes) =3D=3D QEMU_MIGRATION_PA= RAM_LAST); + =20 static qemuMigrationParamsPtr qemuMigrationParamsNew(void) @@ -153,26 +165,120 @@ qemuMigrationParamsNew(void) void qemuMigrationParamsFree(qemuMigrationParamsPtr migParams) { + size_t i; + if (!migParams) return; =20 + for (i =3D 0; i < QEMU_MIGRATION_PARAM_LAST; i++) { + if (qemuMigrationParamTypes[i] =3D=3D QEMU_MIGRATION_PARAM_TYPE_ST= RING) + VIR_FREE(migParams->params[i].value.s); + } + virBitmapFree(migParams->caps); - VIR_FREE(migParams->params.tlsCreds); - VIR_FREE(migParams->params.tlsHostname); VIR_FREE(migParams); } =20 =20 -#define GET(API, PARAM, VAR) \ - do { \ - int rc; \ - if ((rc =3D API(params, nparams, VIR_MIGRATE_PARAM_ ## PARAM, \ - &migParams->params.VAR)) < 0) \ - goto error; \ - \ - if (rc =3D=3D 1) \ - migParams->params.VAR ## _set =3D true; \ - } while (0) +static int +qemuMigrationParamsCheckType(qemuMigrationParam param, + qemuMigrationParamType type) +{ + if (qemuMigrationParamTypes[param] !=3D type) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Type mismatch for '%s' migration parameter"), + qemuMigrationParamTypeToString(param)); + return -1; + } + + return 0; +} + + +static int +qemuMigrationParamsGetTPInt(qemuMigrationParamsPtr migParams, + qemuMigrationParam param, + virTypedParameterPtr params, + int nparams, + const char *name) +{ + int rc; + + if (qemuMigrationParamsCheckType(param, QEMU_MIGRATION_PARAM_TYPE_INT)= < 0) + return -1; + + if (!params) + return 0; + + if ((rc =3D virTypedParamsGetInt(params, nparams, name, + &migParams->params[param].value.i)) < 0) + return -1; + + migParams->params[param].set =3D !!rc; + return 0; +} + + +static int +qemuMigrationParamsSetTPInt(qemuMigrationParamsPtr migParams, + qemuMigrationParam param, + virTypedParameterPtr *params, + int *nparams, + int *maxparams, + const char *name) +{ + if (qemuMigrationParamsCheckType(param, QEMU_MIGRATION_PARAM_TYPE_INT)= < 0) + return -1; + + if (!migParams->params[param].set) + return 0; + + return virTypedParamsAddInt(params, nparams, maxparams, name, + migParams->params[param].value.i); +} + + +static int +qemuMigrationParamsGetTPULL(qemuMigrationParamsPtr migParams, + qemuMigrationParam param, + virTypedParameterPtr params, + int nparams, + const char *name) +{ + int rc; + + if (qemuMigrationParamsCheckType(param, QEMU_MIGRATION_PARAM_TYPE_ULL)= < 0) + return -1; + + if (!params) + return 0; + + if ((rc =3D virTypedParamsGetULLong(params, nparams, name, + &migParams->params[param].value.ull)= ) < 0) + return -1; + + migParams->params[param].set =3D !!rc; + return 0; +} + + +static int +qemuMigrationParamsSetTPULL(qemuMigrationParamsPtr migParams, + qemuMigrationParam param, + virTypedParameterPtr *params, + int *nparams, + int *maxparams, + const char *name) +{ + if (qemuMigrationParamsCheckType(param, QEMU_MIGRATION_PARAM_TYPE_ULL)= < 0) + return -1; + + if (!migParams->params[param].set) + return 0; + + return virTypedParamsAddULLong(params, nparams, maxparams, name, + migParams->params[param].value.ull); +} =20 =20 static int @@ -222,23 +328,40 @@ qemuMigrationParamsSetCompression(virTypedParameterPt= r params, ignore_value(virBitmapSetBit(migParams->caps, cap)); } =20 - if (params) { - GET(virTypedParamsGetInt, COMPRESSION_MT_LEVEL, compressLevel); - GET(virTypedParamsGetInt, COMPRESSION_MT_THREADS, compressThreads); - GET(virTypedParamsGetInt, COMPRESSION_MT_DTHREADS, decompressThrea= ds); - GET(virTypedParamsGetULLong, COMPRESSION_XBZRLE_CACHE, xbzrleCache= Size); - } + if (qemuMigrationParamsGetTPInt(migParams, + QEMU_MIGRATION_PARAM_COMPRESS_LEVEL, + params, nparams, + VIR_MIGRATE_PARAM_COMPRESSION_MT_LEVEL= ) < 0) + goto error; =20 - if ((migParams->params.compressLevel_set || - migParams->params.compressThreads_set || - migParams->params.decompressThreads_set) && + if (qemuMigrationParamsGetTPInt(migParams, + QEMU_MIGRATION_PARAM_COMPRESS_THREADS, + params, nparams, + VIR_MIGRATE_PARAM_COMPRESSION_MT_THREA= DS) < 0) + goto error; + + if (qemuMigrationParamsGetTPInt(migParams, + QEMU_MIGRATION_PARAM_DECOMPRESS_THREAD= S, + params, nparams, + VIR_MIGRATE_PARAM_COMPRESSION_MT_DTHRE= ADS) < 0) + goto error; + + if (qemuMigrationParamsGetTPULL(migParams, + QEMU_MIGRATION_PARAM_XBZRLE_CACHE_SIZE, + params, nparams, + VIR_MIGRATE_PARAM_COMPRESSION_XBZRLE_C= ACHE) < 0) + goto error; + + if ((migParams->params[QEMU_MIGRATION_PARAM_COMPRESS_LEVEL].set || + migParams->params[QEMU_MIGRATION_PARAM_COMPRESS_THREADS].set || + migParams->params[QEMU_MIGRATION_PARAM_DECOMPRESS_THREADS].set) && !(migParams->compMethods & (1ULL << QEMU_MIGRATION_COMPRESS_MT))) { virReportError(VIR_ERR_INVALID_ARG, "%s", _("Turn multithread compression on to tune it")); goto error; } =20 - if (migParams->params.xbzrleCacheSize_set && + if (migParams->params[QEMU_MIGRATION_PARAM_XBZRLE_CACHE_SIZE].set && !(migParams->compMethods & (1ULL << QEMU_MIGRATION_COMPRESS_XBZRLE= ))) { virReportError(VIR_ERR_INVALID_ARG, "%s", _("Turn xbzrle compression on to tune it")); @@ -281,15 +404,22 @@ qemuMigrationParamsFromFlags(virTypedParameterPtr par= ams, } } =20 - if (params) { - if (party =3D=3D QEMU_MIGRATION_SOURCE) { - GET(virTypedParamsGetInt, AUTO_CONVERGE_INITIAL, cpuThrottleIn= itial); - GET(virTypedParamsGetInt, AUTO_CONVERGE_INCREMENT, cpuThrottle= Increment); - } + if (party =3D=3D QEMU_MIGRATION_SOURCE) { + if (qemuMigrationParamsGetTPInt(migParams, + QEMU_MIGRATION_PARAM_THROTTLE_INIT= IAL, + params, nparams, + VIR_MIGRATE_PARAM_AUTO_CONVERGE_IN= ITIAL) < 0) + goto error; + + if (qemuMigrationParamsGetTPInt(migParams, + QEMU_MIGRATION_PARAM_THROTTLE_INCR= EMENT, + params, nparams, + VIR_MIGRATE_PARAM_AUTO_CONVERGE_IN= CREMENT) < 0) + goto error; } =20 - if ((migParams->params.cpuThrottleInitial_set || - migParams->params.cpuThrottleIncrement_set) && + if ((migParams->params[QEMU_MIGRATION_PARAM_THROTTLE_INITIAL].set || + migParams->params[QEMU_MIGRATION_PARAM_THROTTLE_INCREMENT].set) && !(flags & VIR_MIGRATE_AUTO_CONVERGE)) { virReportError(VIR_ERR_INVALID_ARG, "%s", _("Turn auto convergence on to tune it")); @@ -306,8 +436,6 @@ qemuMigrationParamsFromFlags(virTypedParameterPtr param= s, return NULL; } =20 -#undef GET - =20 int qemuMigrationParamsDump(qemuMigrationParamsPtr migParams, @@ -319,7 +447,7 @@ qemuMigrationParamsDump(qemuMigrationParamsPtr migParam= s, size_t i; =20 if (migParams->compMethods =3D=3D 1ULL << QEMU_MIGRATION_COMPRESS_XBZR= LE && - !migParams->params.xbzrleCacheSize_set) { + !migParams->params[QEMU_MIGRATION_PARAM_XBZRLE_CACHE_SIZE].set) { *flags |=3D VIR_MIGRATE_COMPRESSED; return 0; } @@ -332,20 +460,29 @@ qemuMigrationParamsDump(qemuMigrationParamsPtr migPar= ams, return -1; } =20 -#define SET(API, PARAM, VAR) \ - do { \ - if (migParams->params.VAR ## _set && \ - API(params, nparams, maxparams, VIR_MIGRATE_PARAM_ ## PARAM, \ - migParams->params.VAR) < 0) \ - return -1; \ - } while (0) + if (qemuMigrationParamsSetTPInt(migParams, + QEMU_MIGRATION_PARAM_COMPRESS_LEVEL, + params, nparams, maxparams, + VIR_MIGRATE_PARAM_COMPRESSION_MT_LEVEL= ) < 0) + return -1; =20 - SET(virTypedParamsAddInt, COMPRESSION_MT_LEVEL, compressLevel); - SET(virTypedParamsAddInt, COMPRESSION_MT_THREADS, compressThreads); - SET(virTypedParamsAddInt, COMPRESSION_MT_DTHREADS, decompressThreads); - SET(virTypedParamsAddULLong, COMPRESSION_XBZRLE_CACHE, xbzrleCacheSize= ); + if (qemuMigrationParamsSetTPInt(migParams, + QEMU_MIGRATION_PARAM_COMPRESS_THREADS, + params, nparams, maxparams, + VIR_MIGRATE_PARAM_COMPRESSION_MT_THREA= DS) < 0) + return -1; =20 -#undef SET + if (qemuMigrationParamsSetTPInt(migParams, + QEMU_MIGRATION_PARAM_DECOMPRESS_THREAD= S, + params, nparams, maxparams, + VIR_MIGRATE_PARAM_COMPRESSION_MT_DTHRE= ADS) < 0) + return -1; + + if (qemuMigrationParamsSetTPULL(migParams, + QEMU_MIGRATION_PARAM_XBZRLE_CACHE_SIZE, + params, nparams, maxparams, + VIR_MIGRATE_PARAM_COMPRESSION_XBZRLE_C= ACHE) < 0) + return -1; =20 return 0; } @@ -354,7 +491,11 @@ qemuMigrationParamsDump(qemuMigrationParamsPtr migPara= ms, qemuMigrationParamsPtr qemuMigrationParamsFromJSON(virJSONValuePtr params) { - qemuMigrationParamsPtr migParams =3D NULL; + qemuMigrationParamsPtr migParams; + qemuMigrationParamValuePtr pv; + const char *name; + const char *str; + size_t i; =20 if (!(migParams =3D qemuMigrationParamsNew())) return NULL; @@ -362,47 +503,35 @@ qemuMigrationParamsFromJSON(virJSONValuePtr params) if (!params) return migParams; =20 -#define PARSE_SET(API, VAR, FIELD) \ - do { \ - if (API(params, FIELD, &migParams->params.VAR) =3D=3D 0) \ - migParams->params.VAR ## _set =3D true; \ - } while (0) + for (i =3D 0; i < QEMU_MIGRATION_PARAM_LAST; i++) { + name =3D qemuMigrationParamTypeToString(i); + pv =3D &migParams->params[i]; =20 -#define PARSE_INT(VAR, FIELD) \ - PARSE_SET(virJSONValueObjectGetNumberInt, VAR, FIELD) + switch (qemuMigrationParamTypes[i]) { + case QEMU_MIGRATION_PARAM_TYPE_INT: + if (virJSONValueObjectGetNumberInt(params, name, &pv->value.i)= =3D=3D 0) + pv->set =3D true; + break; =20 -#define PARSE_ULONG(VAR, FIELD) \ - PARSE_SET(virJSONValueObjectGetNumberUlong, VAR, FIELD) + case QEMU_MIGRATION_PARAM_TYPE_ULL: + if (virJSONValueObjectGetNumberUlong(params, name, &pv->value.= ull) =3D=3D 0) + pv->set =3D true; + break; =20 -#define PARSE_BOOL(VAR, FIELD) \ - PARSE_SET(virJSONValueObjectGetBoolean, VAR, FIELD) + case QEMU_MIGRATION_PARAM_TYPE_BOOL: + if (virJSONValueObjectGetBoolean(params, name, &pv->value.b) = =3D=3D 0) + pv->set =3D true; + break; =20 -#define PARSE_STR(VAR, FIELD) \ - do { \ - const char *str; \ - if ((str =3D virJSONValueObjectGetString(params, FIELD))) { \ - if (VIR_STRDUP(migParams->params.VAR, str) < 0) \ - goto error; \ - } \ - } while (0) - - PARSE_INT(compressLevel, "compress-level"); - PARSE_INT(compressThreads, "compress-threads"); - PARSE_INT(decompressThreads, "decompress-threads"); - PARSE_INT(cpuThrottleInitial, "cpu-throttle-initial"); - PARSE_INT(cpuThrottleIncrement, "cpu-throttle-increment"); - PARSE_STR(tlsCreds, "tls-creds"); - PARSE_STR(tlsHostname, "tls-hostname"); - PARSE_ULONG(maxBandwidth, "max-bandwidth"); - PARSE_ULONG(downtimeLimit, "downtime-limit"); - PARSE_BOOL(blockIncremental, "block-incremental"); - PARSE_ULONG(xbzrleCacheSize, "xbzrle-cache-size"); - -#undef PARSE_SET -#undef PARSE_INT -#undef PARSE_ULONG -#undef PARSE_BOOL -#undef PARSE_STR + case QEMU_MIGRATION_PARAM_TYPE_STRING: + if ((str =3D virJSONValueObjectGetString(params, name))) { + if (VIR_STRDUP(pv->value.s, str) < 0) + goto error; + pv->set =3D true; + } + break; + } + } =20 return migParams; =20 @@ -416,48 +545,43 @@ virJSONValuePtr qemuMigrationParamsToJSON(qemuMigrationParamsPtr migParams) { virJSONValuePtr params =3D NULL; + qemuMigrationParamValuePtr pv; + const char *name; + size_t i; + int rc; =20 if (!(params =3D virJSONValueNewObject())) return NULL; =20 -#define APPEND(VALID, API, VAR, FIELD) \ - do { \ - if (VALID && API(params, FIELD, migParams->params.VAR) < 0) \ - goto error; \ - } while (0) + for (i =3D 0; i < QEMU_MIGRATION_PARAM_LAST; i++) { + name =3D qemuMigrationParamTypeToString(i); + pv =3D &migParams->params[i]; =20 -#define APPEND_INT(VAR, FIELD) \ - APPEND(migParams->params.VAR ## _set, \ - virJSONValueObjectAppendNumberInt, VAR, FIELD) + if (!pv->set) + continue; =20 -#define APPEND_STR(VAR, FIELD) \ - APPEND(migParams->params.VAR, \ - virJSONValueObjectAppendString, VAR, FIELD) + rc =3D 0; + switch (qemuMigrationParamTypes[i]) { + case QEMU_MIGRATION_PARAM_TYPE_INT: + rc =3D virJSONValueObjectAppendNumberInt(params, name, pv->val= ue.i); + break; =20 -#define APPEND_ULONG(VAR, FIELD) \ - APPEND(migParams->params.VAR ## _set, \ - virJSONValueObjectAppendNumberUlong, VAR, FIELD) + case QEMU_MIGRATION_PARAM_TYPE_ULL: + rc =3D virJSONValueObjectAppendNumberUlong(params, name, pv->v= alue.ull); + break; =20 -#define APPEND_BOOL(VAR, FIELD) \ - APPEND(migParams->params.VAR ## _set, \ - virJSONValueObjectAppendBoolean, VAR, FIELD) + case QEMU_MIGRATION_PARAM_TYPE_BOOL: + rc =3D virJSONValueObjectAppendBoolean(params, name, pv->value= .b); + break; =20 - APPEND_INT(compressLevel, "compress-level"); - APPEND_INT(compressThreads, "compress-threads"); - APPEND_INT(decompressThreads, "decompress-threads"); - APPEND_INT(cpuThrottleInitial, "cpu-throttle-initial"); - APPEND_INT(cpuThrottleIncrement, "cpu-throttle-increment"); - APPEND_STR(tlsCreds, "tls-creds"); - APPEND_STR(tlsHostname, "tls-hostname"); - APPEND_ULONG(maxBandwidth, "max-bandwidth"); - APPEND_ULONG(downtimeLimit, "downtime-limit"); - APPEND_BOOL(blockIncremental, "block-incremental"); - APPEND_ULONG(xbzrleCacheSize, "xbzrle-cache-size"); + case QEMU_MIGRATION_PARAM_TYPE_STRING: + rc =3D virJSONValueObjectAppendString(params, name, pv->value.= s); + break; + } =20 -#undef APPEND -#undef APPEND_INT -#undef APPEND_STR -#undef APPEND_ULONG + if (rc < 0) + goto error; + } =20 return params; =20 @@ -487,6 +611,7 @@ qemuMigrationParamsApply(virQEMUDriverPtr driver, qemuDomainObjPrivatePtr priv =3D vm->privateData; bool xbzrleCacheSize_old =3D false; virJSONValuePtr params =3D NULL; + qemuMigrationParam xbzrle =3D QEMU_MIGRATION_PARAM_XBZRLE_CACHE_SIZE; int ret =3D -1; int rc; =20 @@ -501,14 +626,14 @@ qemuMigrationParamsApply(virQEMUDriverPtr driver, * we need to set it via migrate-set-cache-size and tell * qemuMonitorSetMigrationParams to ignore this parameter. */ - if (migParams->params.xbzrleCacheSize_set && + if (migParams->params[xbzrle].set && (!priv->job.migParams || - !priv->job.migParams->params.xbzrleCacheSize_set)) { + !priv->job.migParams->params[xbzrle].set)) { if (qemuMonitorSetMigrationCacheSize(priv->mon, - migParams->params.xbzrleCache= Size) < 0) + migParams->params[xbzrle].val= ue.ull) < 0) goto cleanup; xbzrleCacheSize_old =3D true; - migParams->params.xbzrleCacheSize_set =3D false; + migParams->params[xbzrle].set =3D false; } =20 if (!(params =3D qemuMigrationParamsToJSON(migParams))) @@ -528,7 +653,7 @@ qemuMigrationParamsApply(virQEMUDriverPtr driver, ret =3D -1; =20 if (xbzrleCacheSize_old) - migParams->params.xbzrleCacheSize_set =3D true; + migParams->params[xbzrle].set =3D true; =20 virJSONValueFree(params); =20 @@ -574,7 +699,7 @@ qemuMigrationParamsEnableTLS(virQEMUDriverPtr driver, goto error; } =20 - if ((!priv->job.migParams->params.tlsCreds)) { + if (!priv->job.migParams->params[QEMU_MIGRATION_PARAM_TLS_CREDS].set) { virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", _("TLS migration is not supported with this " "QEMU binary")); @@ -605,8 +730,12 @@ qemuMigrationParamsEnableTLS(virQEMUDriverPtr driver, *tlsAlias, &tlsProps) < 0) goto error; =20 - if (VIR_STRDUP(migParams->params.tlsCreds, *tlsAlias) < 0 || - VIR_STRDUP(migParams->params.tlsHostname, hostname ? hostname : ""= ) < 0) + if (qemuMigrationParamsSetString(migParams, + QEMU_MIGRATION_PARAM_TLS_CREDS, + *tlsAlias) < 0 || + qemuMigrationParamsSetString(migParams, + QEMU_MIGRATION_PARAM_TLS_HOSTNAME, + hostname ? hostname : "") < 0) goto error; =20 ret =3D 0; @@ -638,11 +767,13 @@ qemuMigrationParamsDisableTLS(virDomainObjPtr vm, { qemuDomainObjPrivatePtr priv =3D vm->privateData; =20 - if (!priv->job.migParams->params.tlsCreds) + if (!priv->job.migParams->params[QEMU_MIGRATION_PARAM_TLS_CREDS].set) return 0; =20 - if (VIR_STRDUP(migParams->params.tlsCreds, "") < 0 || - VIR_STRDUP(migParams->params.tlsHostname, "") < 0) + if (qemuMigrationParamsSetString(migParams, + QEMU_MIGRATION_PARAM_TLS_CREDS, "") <= 0 || + qemuMigrationParamsSetString(migParams, + QEMU_MIGRATION_PARAM_TLS_HOSTNAME, ""= ) < 0) return -1; =20 return 0; @@ -667,7 +798,7 @@ qemuMigrationParamsResetTLS(virQEMUDriverPtr driver, char *secAlias =3D NULL; =20 /* If QEMU does not support TLS migration we didn't set the aliases. */ - if (!origParams->params.tlsCreds) + if (!origParams->params[QEMU_MIGRATION_PARAM_TLS_CREDS].set) return; =20 /* NB: If either or both fail to allocate memory we can still proceed @@ -716,6 +847,21 @@ qemuMigrationParamsFetch(virQEMUDriverPtr driver, } =20 =20 +int +qemuMigrationParamsSetString(qemuMigrationParamsPtr migParams, + qemuMigrationParam param, + const char *value) +{ + if (qemuMigrationParamsCheckType(param, QEMU_MIGRATION_PARAM_TYPE_STRI= NG) < 0) + return -1; + + if (VIR_STRDUP(migParams->params[param].value.s, value) < 0) + return -1; + + return 0; +} + + /** * Returns 0 on success, * 1 if the parameter is not supported by QEMU. @@ -724,10 +870,10 @@ int qemuMigrationParamsGetDowntimeLimit(qemuMigrationParamsPtr migParams, unsigned long long *value) { - if (!migParams->params.downtimeLimit_set) + if (!migParams->params[QEMU_MIGRATION_PARAM_DOWNTIME_LIMIT].set) return 1; =20 - *value =3D migParams->params.downtimeLimit; + *value =3D migParams->params[QEMU_MIGRATION_PARAM_DOWNTIME_LIMIT].valu= e.ull; return 0; } =20 diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index cc9a14601b..76b26a50d4 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -27,6 +27,21 @@ # include "qemu_monitor.h" # include "qemu_conf.h" =20 +typedef enum { + QEMU_MIGRATION_PARAM_COMPRESS_LEVEL, + QEMU_MIGRATION_PARAM_COMPRESS_THREADS, + QEMU_MIGRATION_PARAM_DECOMPRESS_THREADS, + QEMU_MIGRATION_PARAM_THROTTLE_INITIAL, + QEMU_MIGRATION_PARAM_THROTTLE_INCREMENT, + QEMU_MIGRATION_PARAM_TLS_CREDS, + QEMU_MIGRATION_PARAM_TLS_HOSTNAME, + QEMU_MIGRATION_PARAM_MAX_BANDWIDTH, + QEMU_MIGRATION_PARAM_DOWNTIME_LIMIT, + QEMU_MIGRATION_PARAM_BLOCK_INCREMENTAL, + QEMU_MIGRATION_PARAM_XBZRLE_CACHE_SIZE, + + QEMU_MIGRATION_PARAM_LAST +} qemuMigrationParam; =20 typedef struct _qemuMigrationParams qemuMigrationParams; typedef qemuMigrationParams *qemuMigrationParamsPtr; @@ -79,6 +94,11 @@ qemuMigrationParamsFetch(virQEMUDriverPtr driver, int asyncJob, qemuMigrationParamsPtr *migParams); =20 +int +qemuMigrationParamsSetString(qemuMigrationParamsPtr migParams, + qemuMigrationParam param, + const char *value); + int qemuMigrationParamsGetDowntimeLimit(qemuMigrationParamsPtr migParams, unsigned long long *value); --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457815068787.1336378701524; Wed, 11 Apr 2018 07:43:35 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 07CDB319E1E8; Wed, 11 Apr 2018 14:43:33 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id C235688467; Wed, 11 Apr 2018 14:43:32 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 845D25BC02; Wed, 11 Apr 2018 14:43:32 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgH4g008895 for ; Wed, 11 Apr 2018 10:42:17 -0400 Received: by smtp.corp.redhat.com (Postfix) id F1B7510B0F3A; Wed, 11 Apr 2018 14:42:16 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id B549310B0F39 for ; Wed, 11 Apr 2018 14:42:16 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 07C34100B8F; Wed, 11 Apr 2018 16:42:11 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:47 +0200 Message-Id: <6b6685b75225d32615c3ff39a8c2ebd43850a601.1523456480.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 57/73] qemu: Move migration capabilities JSON formatting X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.49]); Wed, 11 Apr 2018 14:43:34 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" We want to have all migration capabilities parsing and formatting at one place, i.e., in qemu_migration_params.c. The parsing is already there in qemuMigrationCapsCheck. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_migration_params.c | 66 ++++++++++++++++++++++++++-- src/qemu/qemu_migration_paramspriv.h | 4 ++ src/qemu/qemu_monitor.c | 27 +++++++----- src/qemu/qemu_monitor.h | 3 +- src/qemu/qemu_monitor_json.c | 40 ++--------------- src/qemu/qemu_monitor_json.h | 3 +- tests/qemumonitorjsontest.c | 11 +++-- 7 files changed, 96 insertions(+), 58 deletions(-) diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 77abc7191f..548bb1c0dd 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -591,6 +591,53 @@ qemuMigrationParamsToJSON(qemuMigrationParamsPtr migPa= rams) } =20 =20 +virJSONValuePtr +qemuMigrationCapsToJSON(virBitmapPtr caps, + virBitmapPtr states) +{ + virJSONValuePtr json =3D NULL; + virJSONValuePtr cap =3D NULL; + qemuMonitorMigrationCaps bit; + const char *name; + + if (!(json =3D virJSONValueNewArray())) + return NULL; + + for (bit =3D 0; bit < QEMU_MONITOR_MIGRATION_CAPS_LAST; bit++) { + bool supported =3D false; + bool state =3D false; + + ignore_value(virBitmapGetBit(caps, bit, &supported)); + if (!supported) + continue; + + ignore_value(virBitmapGetBit(states, bit, &state)); + + if (!(cap =3D virJSONValueNewObject())) + goto error; + + name =3D qemuMonitorMigrationCapsTypeToString(bit); + if (virJSONValueObjectAppendString(cap, "capability", name) < 0) + goto error; + + if (virJSONValueObjectAppendBoolean(cap, "state", state) < 0) + goto error; + + if (virJSONValueArrayAppend(json, cap) < 0) + goto error; + + cap =3D NULL; + } + + return json; + + error: + virJSONValueFree(json); + virJSONValueFree(cap); + return NULL; +} + + /** * qemuMigrationParamsApply * @driver: qemu driver @@ -611,6 +658,7 @@ qemuMigrationParamsApply(virQEMUDriverPtr driver, qemuDomainObjPrivatePtr priv =3D vm->privateData; bool xbzrleCacheSize_old =3D false; virJSONValuePtr params =3D NULL; + virJSONValuePtr caps =3D NULL; qemuMigrationParam xbzrle =3D QEMU_MIGRATION_PARAM_XBZRLE_CACHE_SIZE; int ret =3D -1; int rc; @@ -618,10 +666,16 @@ qemuMigrationParamsApply(virQEMUDriverPtr driver, if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) return -1; =20 - if (qemuMonitorSetMigrationCapabilities(priv->mon, priv->migrationCaps, - migParams->caps) < 0) + if (!(caps =3D qemuMigrationCapsToJSON(priv->migrationCaps, migParams-= >caps))) goto cleanup; =20 + if (virJSONValueArraySize(caps) > 0) { + rc =3D qemuMonitorSetMigrationCapabilities(priv->mon, caps); + caps =3D NULL; + if (rc < 0) + goto cleanup; + } + /* If QEMU is too old to support xbzrle-cache-size migration parameter, * we need to set it via migrate-set-cache-size and tell * qemuMonitorSetMigrationParams to ignore this parameter. @@ -974,6 +1028,7 @@ qemuMigrationCapsCheck(virQEMUDriverPtr driver, { qemuDomainObjPrivatePtr priv =3D vm->privateData; virBitmapPtr migEvent =3D NULL; + virJSONValuePtr json =3D NULL; char **caps =3D NULL; char **capStr; int ret =3D -1; @@ -1014,10 +1069,14 @@ qemuMigrationCapsCheck(virQEMUDriverPtr driver, =20 ignore_value(virBitmapSetBit(migEvent, QEMU_MONITOR_MIGRATION_CAPS= _EVENTS)); =20 + if (!(json =3D qemuMigrationCapsToJSON(migEvent, migEvent))) + goto cleanup; + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) goto cleanup; =20 - rc =3D qemuMonitorSetMigrationCapabilities(priv->mon, migEvent, mi= gEvent); + rc =3D qemuMonitorSetMigrationCapabilities(priv->mon, json); + json =3D NULL; =20 if (qemuDomainObjExitMonitor(driver, vm) < 0) goto cleanup; @@ -1039,6 +1098,7 @@ qemuMigrationCapsCheck(virQEMUDriverPtr driver, ret =3D 0; =20 cleanup: + virJSONValueFree(json); virStringListFree(caps); return ret; } diff --git a/src/qemu/qemu_migration_paramspriv.h b/src/qemu/qemu_migration= _paramspriv.h index 350973b6f9..30773a679d 100644 --- a/src/qemu/qemu_migration_paramspriv.h +++ b/src/qemu/qemu_migration_paramspriv.h @@ -28,4 +28,8 @@ qemuMigrationParamsToJSON(qemuMigrationParamsPtr migParam= s); qemuMigrationParamsPtr qemuMigrationParamsFromJSON(virJSONValuePtr params); =20 +virJSONValuePtr +qemuMigrationCapsToJSON(virBitmapPtr caps, + virBitmapPtr states); + #endif /* __QEMU_MIGRATION_PARAMSPRIV_H__ */ diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 641465f227..13d885ffc5 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -3988,22 +3988,27 @@ qemuMonitorGetMigrationCapabilities(qemuMonitorPtr = mon, } =20 =20 +/** + * qemuMonitorSetMigrationCapabilities: + * @mon: Pointer to the monitor object. + * @caps: Migration capabilities. + * + * The @caps object is consumed and should not be referenced by the caller + * after this function returns. + * + * Returns 0 on success, -1 on error. + */ int qemuMonitorSetMigrationCapabilities(qemuMonitorPtr mon, - virBitmapPtr caps, - virBitmapPtr states) + virJSONValuePtr caps) { - char *capsStr =3D virBitmapFormat(caps); - char *statesStr =3D virBitmapFormat(states); + QEMU_CHECK_MONITOR_JSON_GOTO(mon, error); =20 - VIR_DEBUG("caps=3D%s, states=3D%s", NULLSTR(capsStr), NULLSTR(statesSt= r)); + return qemuMonitorJSONSetMigrationCapabilities(mon, caps); =20 - VIR_FREE(capsStr); - VIR_FREE(statesStr); - - QEMU_CHECK_MONITOR_JSON(mon); - - return qemuMonitorJSONSetMigrationCapabilities(mon, caps, states); + error: + virJSONValueFree(caps); + return -1; } =20 =20 diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 1c49cc2370..4ab0206713 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -728,8 +728,7 @@ VIR_ENUM_DECL(qemuMonitorMigrationCaps); int qemuMonitorGetMigrationCapabilities(qemuMonitorPtr mon, char ***capabilities); int qemuMonitorSetMigrationCapabilities(qemuMonitorPtr mon, - virBitmapPtr caps, - virBitmapPtr states); + virJSONValuePtr caps); =20 int qemuMonitorGetGICCapabilities(qemuMonitorPtr mon, virGICCapability **capabilities); diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index b00bca7d46..7fd8e756b3 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -6111,47 +6111,14 @@ qemuMonitorJSONGetMigrationCapabilities(qemuMonitor= Ptr mon, =20 int qemuMonitorJSONSetMigrationCapabilities(qemuMonitorPtr mon, - virBitmapPtr caps, - virBitmapPtr states) + virJSONValuePtr caps) { int ret =3D -1; - qemuMonitorMigrationCaps bit; virJSONValuePtr cmd =3D NULL; virJSONValuePtr reply =3D NULL; - virJSONValuePtr cap =3D NULL; - virJSONValuePtr array; - - if (!(array =3D virJSONValueNewArray())) - goto cleanup; - - for (bit =3D 0; bit < QEMU_MONITOR_MIGRATION_CAPS_LAST; bit++) { - bool supported =3D false; - bool state =3D false; - - ignore_value(virBitmapGetBit(caps, bit, &supported)); - if (!supported) - continue; - - ignore_value(virBitmapGetBit(states, bit, &state)); - - if (!(cap =3D virJSONValueNewObject())) - goto cleanup; - - if (virJSONValueObjectAppendString(cap, "capability", - qemuMonitorMigrationCapsTypeToS= tring(bit)) < 0) - goto cleanup; - - if (virJSONValueObjectAppendBoolean(cap, "state", state) < 0) - goto cleanup; - - if (virJSONValueArrayAppend(array, cap) < 0) - goto cleanup; - - cap =3D NULL; - } =20 cmd =3D qemuMonitorJSONMakeCommand("migrate-set-capabilities", - "a:capabilities", &array, + "a:capabilities", &caps, NULL); if (!cmd) goto cleanup; @@ -6164,8 +6131,7 @@ qemuMonitorJSONSetMigrationCapabilities(qemuMonitorPt= r mon, =20 ret =3D 0; cleanup: - virJSONValueFree(array); - virJSONValueFree(cap); + virJSONValueFree(caps); virJSONValueFree(cmd); virJSONValueFree(reply); return ret; diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h index 5ada38b9fa..c6ad83af4c 100644 --- a/src/qemu/qemu_monitor_json.h +++ b/src/qemu/qemu_monitor_json.h @@ -146,8 +146,7 @@ int qemuMonitorJSONGetMigrationStats(qemuMonitorPtr mon, int qemuMonitorJSONGetMigrationCapabilities(qemuMonitorPtr mon, char ***capabilities); int qemuMonitorJSONSetMigrationCapabilities(qemuMonitorPtr mon, - virBitmapPtr caps, - virBitmapPtr states); + virJSONValuePtr caps); =20 int qemuMonitorJSONGetGICCapabilities(qemuMonitorPtr mon, virGICCapability **capabilities); diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c index dafcccebad..697126f298 100644 --- a/tests/qemumonitorjsontest.c +++ b/tests/qemumonitorjsontest.c @@ -32,6 +32,7 @@ #include "virstring.h" #include "cpu/cpu.h" #include "qemu/qemu_monitor.h" +#include "qemu/qemu_migration_paramspriv.h" =20 #define VIR_FROM_THIS VIR_FROM_NONE =20 @@ -2141,6 +2142,7 @@ testQemuMonitorJSONqemuMonitorJSONGetMigrationCapabil= ities(const void *data) const char *cap; char **caps =3D NULL; virBitmapPtr bitmap =3D NULL; + virJSONValuePtr json =3D NULL; const char *reply =3D "{" " \"return\": [" @@ -2176,12 +2178,15 @@ testQemuMonitorJSONqemuMonitorJSONGetMigrationCapab= ilities(const void *data) goto cleanup; =20 ignore_value(virBitmapSetBit(bitmap, QEMU_MONITOR_MIGRATION_CAPS_XBZRL= E)); - if (qemuMonitorJSONSetMigrationCapabilities(qemuMonitorTestGetMonitor(= test), - bitmap, bitmap) < 0) + if (!(json =3D qemuMigrationCapsToJSON(bitmap, bitmap))) goto cleanup; =20 - ret =3D 0; + ret =3D qemuMonitorJSONSetMigrationCapabilities(qemuMonitorTestGetMoni= tor(test), + json); + json =3D NULL; + cleanup: + virJSONValueFree(json); qemuMonitorTestFree(test); virStringListFree(caps); virBitmapFree(bitmap); --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523780581430944.6581619651852; Sun, 15 Apr 2018 01:23:01 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 0C65A8762E; Sun, 15 Apr 2018 08:23:00 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id CF28C649C1; Sun, 15 Apr 2018 08:22:59 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 7887D180BAD7; Sun, 15 Apr 2018 08:22:59 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgHuj008908 for ; Wed, 11 Apr 2018 10:42:17 -0400 Received: by smtp.corp.redhat.com (Postfix) id 1C57E215CDCB; Wed, 11 Apr 2018 14:42:17 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id B7C81215CDC8 for ; Wed, 11 Apr 2018 14:42:16 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 0D1BE100B91; Wed, 11 Apr 2018 16:42:11 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:48 +0200 Message-Id: <2301db800aa4cc3911c9f3e2b73e7cd22b6753ab.1523456480.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 58/73] qemu: Move qemuMonitorMigrationCaps enum X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Sun, 15 Apr 2018 08:23:00 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Since the monitor code no longer needs to see this enum, we move it to the place where migration parameters are defined and drop the "monitor" reference from the name. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_driver.c | 4 +- src/qemu/qemu_migration_params.c | 65 +++++++++++++++++++------------- src/qemu/qemu_migration_params.h | 15 +++++++- src/qemu/qemu_monitor.c | 5 --- src/qemu/qemu_monitor.h | 14 ------- tests/qemumonitorjsontest.c | 7 ++-- 6 files changed, 58 insertions(+), 52 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 761f84ee7f..0cf08759c6 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -13627,7 +13627,7 @@ qemuDomainMigrateGetCompressionCache(virDomainPtr d= om, =20 priv =3D vm->privateData; =20 - if (!qemuMigrationCapsGet(vm, QEMU_MONITOR_MIGRATION_CAPS_XBZRLE)) { + if (!qemuMigrationCapsGet(vm, QEMU_MIGRATION_CAP_XBZRLE)) { virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", _("Compressed migration is not supported by " "QEMU binary")); @@ -13678,7 +13678,7 @@ qemuDomainMigrateSetCompressionCache(virDomainPtr d= om, =20 priv =3D vm->privateData; =20 - if (!qemuMigrationCapsGet(vm, QEMU_MONITOR_MIGRATION_CAPS_XBZRLE)) { + if (!qemuMigrationCapsGet(vm, QEMU_MIGRATION_CAP_XBZRLE)) { virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", _("Compressed migration is not supported by " "QEMU binary")); diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 548bb1c0dd..2723288dfc 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -76,6 +76,17 @@ VIR_ENUM_IMPL(qemuMigrationCompressMethod, QEMU_MIGRATIO= N_COMPRESS_LAST, "mt", ); =20 +VIR_ENUM_IMPL(qemuMigrationCapability, QEMU_MIGRATION_CAP_LAST, + "xbzrle", + "auto-converge", + "rdma-pin-all", + "events", + "postcopy-ram", + "compress", + "pause-before-switchover", +); + + VIR_ENUM_DECL(qemuMigrationParam) VIR_ENUM_IMPL(qemuMigrationParam, QEMU_MIGRATION_PARAM_LAST, "compress-level", @@ -93,36 +104,36 @@ VIR_ENUM_IMPL(qemuMigrationParam, QEMU_MIGRATION_PARAM= _LAST, =20 typedef struct _qemuMigrationParamsAlwaysOnItem qemuMigrationParamsAlwaysO= nItem; struct _qemuMigrationParamsAlwaysOnItem { - qemuMonitorMigrationCaps cap; + qemuMigrationCapability cap; int party; /* bit-wise OR of qemuMigrationParty */ }; =20 typedef struct _qemuMigrationParamsFlagMapItem qemuMigrationParamsFlagMapI= tem; struct _qemuMigrationParamsFlagMapItem { virDomainMigrateFlags flag; - qemuMonitorMigrationCaps cap; + qemuMigrationCapability cap; int party; /* bit-wise OR of qemuMigrationParty */ }; =20 /* Migration capabilities which should always be enabled as long as they * are supported by QEMU. */ static const qemuMigrationParamsAlwaysOnItem qemuMigrationParamsAlwaysOn[]= =3D { - {QEMU_MONITOR_MIGRATION_CAPS_PAUSE_BEFORE_SWITCHOVER, + {QEMU_MIGRATION_CAP_PAUSE_BEFORE_SWITCHOVER, QEMU_MIGRATION_SOURCE}, }; =20 -/* Translation from virDomainMigrateFlags to qemuMonitorMigrationCaps. */ +/* Translation from virDomainMigrateFlags to qemuMigrationCapability. */ static const qemuMigrationParamsFlagMapItem qemuMigrationParamsFlagMap[] = =3D { {VIR_MIGRATE_RDMA_PIN_ALL, - QEMU_MONITOR_MIGRATION_CAPS_RDMA_PIN_ALL, + QEMU_MIGRATION_CAP_RDMA_PIN_ALL, QEMU_MIGRATION_SOURCE | QEMU_MIGRATION_DESTINATION}, =20 {VIR_MIGRATE_AUTO_CONVERGE, - QEMU_MONITOR_MIGRATION_CAPS_AUTO_CONVERGE, + QEMU_MIGRATION_CAP_AUTO_CONVERGE, QEMU_MIGRATION_SOURCE}, =20 {VIR_MIGRATE_POSTCOPY, - QEMU_MONITOR_MIGRATION_CAPS_POSTCOPY, + QEMU_MIGRATION_CAP_POSTCOPY, QEMU_MIGRATION_SOURCE | QEMU_MIGRATION_DESTINATION}, }; =20 @@ -150,7 +161,7 @@ qemuMigrationParamsNew(void) if (VIR_ALLOC(params) < 0) return NULL; =20 - params->caps =3D virBitmapNew(QEMU_MONITOR_MIGRATION_CAPS_LAST); + params->caps =3D virBitmapNew(QEMU_MIGRATION_CAP_LAST); if (!params->caps) goto error; =20 @@ -289,7 +300,7 @@ qemuMigrationParamsSetCompression(virTypedParameterPtr = params, { size_t i; int method; - qemuMonitorMigrationCaps cap; + qemuMigrationCapability cap; =20 for (i =3D 0; i < nparams; i++) { if (STRNEQ(params[i].field, VIR_MIGRATE_PARAM_COMPRESSION)) @@ -314,11 +325,11 @@ qemuMigrationParamsSetCompression(virTypedParameterPt= r params, =20 switch ((qemuMigrationCompressMethod) method) { case QEMU_MIGRATION_COMPRESS_XBZRLE: - cap =3D QEMU_MONITOR_MIGRATION_CAPS_XBZRLE; + cap =3D QEMU_MIGRATION_CAP_XBZRLE; break; =20 case QEMU_MIGRATION_COMPRESS_MT: - cap =3D QEMU_MONITOR_MIGRATION_CAPS_COMPRESS; + cap =3D QEMU_MIGRATION_CAP_COMPRESS; break; =20 case QEMU_MIGRATION_COMPRESS_LAST: @@ -371,7 +382,7 @@ qemuMigrationParamsSetCompression(virTypedParameterPtr = params, if (!migParams->compMethods && (flags & VIR_MIGRATE_COMPRESSED)) { migParams->compMethods =3D 1ULL << QEMU_MIGRATION_COMPRESS_XBZRLE; ignore_value(virBitmapSetBit(migParams->caps, - QEMU_MONITOR_MIGRATION_CAPS_XBZRLE)); + QEMU_MIGRATION_CAP_XBZRLE)); } =20 return 0; @@ -394,12 +405,12 @@ qemuMigrationParamsFromFlags(virTypedParameterPtr par= ams, return NULL; =20 for (i =3D 0; i < ARRAY_CARDINALITY(qemuMigrationParamsFlagMap); i++) { - qemuMonitorMigrationCaps cap =3D qemuMigrationParamsFlagMap[i].cap; + qemuMigrationCapability cap =3D qemuMigrationParamsFlagMap[i].cap; =20 if (qemuMigrationParamsFlagMap[i].party & party && flags & qemuMigrationParamsFlagMap[i].flag) { VIR_DEBUG("Enabling migration capability '%s'", - qemuMonitorMigrationCapsTypeToString(cap)); + qemuMigrationCapabilityTypeToString(cap)); ignore_value(virBitmapSetBit(migParams->caps, cap)); } } @@ -597,13 +608,13 @@ qemuMigrationCapsToJSON(virBitmapPtr caps, { virJSONValuePtr json =3D NULL; virJSONValuePtr cap =3D NULL; - qemuMonitorMigrationCaps bit; + qemuMigrationCapability bit; const char *name; =20 if (!(json =3D virJSONValueNewArray())) return NULL; =20 - for (bit =3D 0; bit < QEMU_MONITOR_MIGRATION_CAPS_LAST; bit++) { + for (bit =3D 0; bit < QEMU_MIGRATION_CAP_LAST; bit++) { bool supported =3D false; bool state =3D false; =20 @@ -616,7 +627,7 @@ qemuMigrationCapsToJSON(virBitmapPtr caps, if (!(cap =3D virJSONValueNewObject())) goto error; =20 - name =3D qemuMonitorMigrationCapsTypeToString(bit); + name =3D qemuMigrationCapabilityTypeToString(bit); if (virJSONValueObjectAppendString(cap, "capability", name) < 0) goto error; =20 @@ -947,7 +958,7 @@ qemuMigrationParamsCheck(virQEMUDriverPtr driver, qemuMigrationParamsPtr migParams) { qemuDomainObjPrivatePtr priv =3D vm->privateData; - qemuMonitorMigrationCaps cap; + qemuMigrationCapability cap; qemuMigrationParty party; size_t i; =20 @@ -956,7 +967,7 @@ qemuMigrationParamsCheck(virQEMUDriverPtr driver, else party =3D QEMU_MIGRATION_DESTINATION; =20 - for (cap =3D 0; cap < QEMU_MONITOR_MIGRATION_CAPS_LAST; cap++) { + for (cap =3D 0; cap < QEMU_MIGRATION_CAP_LAST; cap++) { bool state =3D false; =20 ignore_value(virBitmapGetBit(migParams->caps, cap, &state)); @@ -964,7 +975,7 @@ qemuMigrationParamsCheck(virQEMUDriverPtr driver, if (state && !qemuMigrationCapsGet(vm, cap)) { virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, _("Migration option '%s' is not supported by QE= MU binary"), - qemuMonitorMigrationCapsTypeToString(cap)); + qemuMigrationCapabilityTypeToString(cap)); return -1; } } @@ -975,7 +986,7 @@ qemuMigrationParamsCheck(virQEMUDriverPtr driver, if (qemuMigrationParamsAlwaysOn[i].party & party && qemuMigrationCapsGet(vm, cap)) { VIR_DEBUG("Enabling migration capability '%s'", - qemuMonitorMigrationCapsTypeToString(cap)); + qemuMigrationCapabilityTypeToString(cap)); ignore_value(virBitmapSetBit(migParams->caps, cap)); } } @@ -1047,12 +1058,12 @@ qemuMigrationCapsCheck(virQEMUDriverPtr driver, goto cleanup; } =20 - priv->migrationCaps =3D virBitmapNew(QEMU_MONITOR_MIGRATION_CAPS_LAST); + priv->migrationCaps =3D virBitmapNew(QEMU_MIGRATION_CAP_LAST); if (!priv->migrationCaps) goto cleanup; =20 for (capStr =3D caps; *capStr; capStr++) { - int cap =3D qemuMonitorMigrationCapsTypeFromString(*capStr); + int cap =3D qemuMigrationCapabilityTypeFromString(*capStr); =20 if (cap < 0) { VIR_DEBUG("Unknown migration capability: '%s'", *capStr); @@ -1063,11 +1074,11 @@ qemuMigrationCapsCheck(virQEMUDriverPtr driver, } =20 if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_EVENT)) { - migEvent =3D virBitmapNew(QEMU_MONITOR_MIGRATION_CAPS_LAST); + migEvent =3D virBitmapNew(QEMU_MIGRATION_CAP_LAST); if (!migEvent) goto cleanup; =20 - ignore_value(virBitmapSetBit(migEvent, QEMU_MONITOR_MIGRATION_CAPS= _EVENTS)); + ignore_value(virBitmapSetBit(migEvent, QEMU_MIGRATION_CAP_EVENTS)); =20 if (!(json =3D qemuMigrationCapsToJSON(migEvent, migEvent))) goto cleanup; @@ -1093,7 +1104,7 @@ qemuMigrationCapsCheck(virQEMUDriverPtr driver, * else. */ ignore_value(virBitmapClearBit(priv->migrationCaps, - QEMU_MONITOR_MIGRATION_CAPS_EVENTS)); + QEMU_MIGRATION_CAP_EVENTS)); =20 ret =3D 0; =20 @@ -1106,7 +1117,7 @@ qemuMigrationCapsCheck(virQEMUDriverPtr driver, =20 bool qemuMigrationCapsGet(virDomainObjPtr vm, - qemuMonitorMigrationCaps cap) + qemuMigrationCapability cap) { qemuDomainObjPrivatePtr priv =3D vm->privateData; bool enabled =3D false; diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index 76b26a50d4..ceba0eb68a 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -27,6 +27,19 @@ # include "qemu_monitor.h" # include "qemu_conf.h" =20 +typedef enum { + QEMU_MIGRATION_CAP_XBZRLE, + QEMU_MIGRATION_CAP_AUTO_CONVERGE, + QEMU_MIGRATION_CAP_RDMA_PIN_ALL, + QEMU_MIGRATION_CAP_EVENTS, + QEMU_MIGRATION_CAP_POSTCOPY, + QEMU_MIGRATION_CAP_COMPRESS, + QEMU_MIGRATION_CAP_PAUSE_BEFORE_SWITCHOVER, + + QEMU_MIGRATION_CAP_LAST +} qemuMigrationCapability; +VIR_ENUM_DECL(qemuMigrationCapability) + typedef enum { QEMU_MIGRATION_PARAM_COMPRESS_LEVEL, QEMU_MIGRATION_PARAM_COMPRESS_THREADS, @@ -122,6 +135,6 @@ qemuMigrationCapsCheck(virQEMUDriverPtr driver, =20 bool qemuMigrationCapsGet(virDomainObjPtr vm, - qemuMonitorMigrationCaps cap); + qemuMigrationCapability cap); =20 #endif /* __QEMU_MIGRATION_PARAMS_H__ */ diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 13d885ffc5..fe0e0431d9 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -185,11 +185,6 @@ VIR_ENUM_IMPL(qemuMonitorMigrationStatus, "completed", "failed", "cancelling", "cancelled") =20 -VIR_ENUM_IMPL(qemuMonitorMigrationCaps, - QEMU_MONITOR_MIGRATION_CAPS_LAST, - "xbzrle", "auto-converge", "rdma-pin-all", "events", - "postcopy-ram", "compress", "pause-before-switchover") - VIR_ENUM_IMPL(qemuMonitorVMStatus, QEMU_MONITOR_VM_STATUS_LAST, "debug", "inmigrate", "internal-error", "io-error", "paused", diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 4ab0206713..c272f98121 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -711,20 +711,6 @@ int qemuMonitorGetMigrationStats(qemuMonitorPtr mon, qemuMonitorMigrationStatsPtr stats, char **error); =20 -typedef enum { - QEMU_MONITOR_MIGRATION_CAPS_XBZRLE, - QEMU_MONITOR_MIGRATION_CAPS_AUTO_CONVERGE, - QEMU_MONITOR_MIGRATION_CAPS_RDMA_PIN_ALL, - QEMU_MONITOR_MIGRATION_CAPS_EVENTS, - QEMU_MONITOR_MIGRATION_CAPS_POSTCOPY, - QEMU_MONITOR_MIGRATION_CAPS_COMPRESS, - QEMU_MONITOR_MIGRATION_CAPS_PAUSE_BEFORE_SWITCHOVER, - - QEMU_MONITOR_MIGRATION_CAPS_LAST -} qemuMonitorMigrationCaps; - -VIR_ENUM_DECL(qemuMonitorMigrationCaps); - int qemuMonitorGetMigrationCapabilities(qemuMonitorPtr mon, char ***capabilities); int qemuMonitorSetMigrationCapabilities(qemuMonitorPtr mon, diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c index 697126f298..44a7a2d444 100644 --- a/tests/qemumonitorjsontest.c +++ b/tests/qemumonitorjsontest.c @@ -32,6 +32,7 @@ #include "virstring.h" #include "cpu/cpu.h" #include "qemu/qemu_monitor.h" +#include "qemu/qemu_migration_params.h" #include "qemu/qemu_migration_paramspriv.h" =20 #define VIR_FROM_THIS VIR_FROM_NONE @@ -2166,18 +2167,18 @@ testQemuMonitorJSONqemuMonitorJSONGetMigrationCapab= ilities(const void *data) &caps) < 0) goto cleanup; =20 - cap =3D qemuMonitorMigrationCapsTypeToString(QEMU_MONITOR_MIGRATION_CA= PS_XBZRLE); + cap =3D qemuMigrationCapabilityTypeToString(QEMU_MIGRATION_CAP_XBZRLE); if (!virStringListHasString((const char **) caps, cap)) { virReportError(VIR_ERR_INTERNAL_ERROR, "Expected capability %s is missing", cap); goto cleanup; } =20 - bitmap =3D virBitmapNew(QEMU_MONITOR_MIGRATION_CAPS_LAST); + bitmap =3D virBitmapNew(QEMU_MIGRATION_CAP_LAST); if (!bitmap) goto cleanup; =20 - ignore_value(virBitmapSetBit(bitmap, QEMU_MONITOR_MIGRATION_CAPS_XBZRL= E)); + ignore_value(virBitmapSetBit(bitmap, QEMU_MIGRATION_CAP_XBZRLE)); if (!(json =3D qemuMigrationCapsToJSON(bitmap, bitmap))) goto cleanup; =20 --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457817580975.4813677245844; Wed, 11 Apr 2018 07:43:37 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 59F2F3150034; Wed, 11 Apr 2018 14:43:36 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 2847467E49; Wed, 11 Apr 2018 14:43:36 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id D53D3180215F; Wed, 11 Apr 2018 14:43:35 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgHYo008911 for ; Wed, 11 Apr 2018 10:42:17 -0400 Received: by smtp.corp.redhat.com (Postfix) id 1E5BC2024CA4; Wed, 11 Apr 2018 14:42:17 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id BA9582026609 for ; Wed, 11 Apr 2018 14:42:16 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 129CD100B93; Wed, 11 Apr 2018 16:42:11 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:49 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 59/73] qemu: Add support for sending capabilities in migration cookie X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.46]); Wed, 11 Apr 2018 14:43:36 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Some migration capabilities may be enabled automatically, but only if both sides of migration support them. Thus we need to be able transfer the list of supported migration capabilities in migration cookie. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_migration.c | 15 ++-- src/qemu/qemu_migration_cookie.c | 136 ++++++++++++++++++++++++++++++- src/qemu/qemu_migration_cookie.h | 15 ++++ src/qemu/qemu_migration_params.c | 20 +++++ src/qemu/qemu_migration_params.h | 3 + 5 files changed, 183 insertions(+), 6 deletions(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 319b4d000a..f573bd3eba 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -1917,6 +1917,7 @@ qemuMigrationSrcBeginPhase(virQEMUDriverPtr driver, goto cleanup; =20 if (qemuMigrationBakeCookie(mig, driver, vm, + QEMU_MIGRATION_SOURCE, cookieout, cookieoutlen, cookieFlags) < 0) goto cleanup; @@ -2429,8 +2430,9 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, goto stopjob; =20 done: - if (qemuMigrationBakeCookie(mig, driver, vm, cookieout, - cookieoutlen, cookieFlags) < 0) { + if (qemuMigrationBakeCookie(mig, driver, vm, + QEMU_MIGRATION_DESTINATION, + cookieout, cookieoutlen, cookieFlags) < 0)= { /* We could tear down the whole guest here, but * cookie data is (so far) non-critical, so that * seems a little harsh. We'll just warn for now. @@ -3523,8 +3525,9 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, QEMU_MIGRATION_COOKIE_STATS; =20 if (qemuMigrationCookieAddPersistent(mig, &persistDef) < 0 || - qemuMigrationBakeCookie(mig, driver, vm, cookieout, - cookieoutlen, cookieFlags) < 0) { + qemuMigrationBakeCookie(mig, driver, vm, + QEMU_MIGRATION_SOURCE, + cookieout, cookieoutlen, cookieFlags) < 0)= { VIR_WARN("Unable to encode migration cookie"); } =20 @@ -5019,7 +5022,9 @@ qemuMigrationDstFinish(virQEMUDriverPtr driver, priv->job.completed->status =3D QEMU_DOMAIN_JOB_STATUS_COMPLET= ED; } =20 - if (qemuMigrationBakeCookie(mig, driver, vm, cookieout, cookieoutl= en, + if (qemuMigrationBakeCookie(mig, driver, vm, + QEMU_MIGRATION_DESTINATION, + cookieout, cookieoutlen, QEMU_MIGRATION_COOKIE_STATS) < 0) VIR_WARN("Unable to encode migration cookie"); =20 diff --git a/src/qemu/qemu_migration_cookie.c b/src/qemu/qemu_migration_coo= kie.c index 5a1e299ca2..eca1b74d63 100644 --- a/src/qemu/qemu_migration_cookie.c +++ b/src/qemu/qemu_migration_cookie.c @@ -33,6 +33,7 @@ =20 #include "qemu_domain.h" #include "qemu_migration_cookie.h" +#include "qemu_migration_params.h" =20 =20 #define VIR_FROM_THIS VIR_FROM_QEMU @@ -50,7 +51,8 @@ VIR_ENUM_IMPL(qemuMigrationCookieFlag, "memory-hotplug", "cpu-hotplug", "cpu", - "allowReboot"); + "allowReboot", + "capabilities"); =20 =20 static void @@ -94,6 +96,18 @@ qemuMigrationCookieNBDFree(qemuMigrationCookieNBDPtr nbd) } =20 =20 +static void +qemuMigrationCookieCapsFree(qemuMigrationCookieCapsPtr caps) +{ + if (!caps) + return; + + virBitmapFree(caps->supported); + virBitmapFree(caps->automatic); + VIR_FREE(caps); +} + + void qemuMigrationCookieFree(qemuMigrationCookiePtr mig) { @@ -112,6 +126,7 @@ qemuMigrationCookieFree(qemuMigrationCookiePtr mig) VIR_FREE(mig->lockDriver); VIR_FREE(mig->jobInfo); virCPUDefFree(mig->cpu); + qemuMigrationCookieCapsFree(mig->caps); VIR_FREE(mig); } =20 @@ -550,6 +565,33 @@ qemuMigrationCookieAddAllowReboot(qemuMigrationCookieP= tr mig, } =20 =20 +static int +qemuMigrationCookieAddCaps(qemuMigrationCookiePtr mig, + virDomainObjPtr vm, + qemuMigrationParty party) +{ + qemuDomainObjPrivatePtr priv =3D vm->privateData; + + qemuMigrationCookieCapsFree(mig->caps); + if (VIR_ALLOC(mig->caps) < 0) + return -1; + + if (priv->migrationCaps) + mig->caps->supported =3D virBitmapNewCopy(priv->migrationCaps); + else + mig->caps->supported =3D virBitmapNew(0); + + mig->caps->automatic =3D qemuMigrationParamsGetAlwaysOnCaps(party); + + if (!mig->caps->supported || !mig->caps->automatic) + return -1; + + mig->flags |=3D QEMU_MIGRATION_COOKIE_CAPS; + + return 0; +} + + static void qemuMigrationCookieGraphicsXMLFormat(virBufferPtr buf, qemuMigrationCookieGraphicsPtr grap) @@ -710,6 +752,33 @@ qemuMigrationCookieStatisticsXMLFormat(virBufferPtr bu= f, } =20 =20 +static void +qemuMigrationCookieCapsXMLFormat(virBufferPtr buf, + qemuMigrationCookieCapsPtr caps) +{ + qemuMigrationCapability cap; + + virBufferAddLit(buf, "\n"); + virBufferAdjustIndent(buf, 2); + + for (cap =3D 0; cap < QEMU_MIGRATION_CAP_LAST; cap++) { + bool supported =3D false; + bool automatic =3D false; + + ignore_value(virBitmapGetBit(caps->supported, cap, &supported)); + ignore_value(virBitmapGetBit(caps->automatic, cap, &automatic)); + if (supported) { + virBufferAsprintf(buf, "\n", + qemuMigrationCapabilityTypeToString(cap), + automatic ? "yes" : "no"); + } + } + + virBufferAdjustIndent(buf, -2); + virBufferAddLit(buf, "\n"); +} + + static int qemuMigrationCookieXMLFormat(virQEMUDriverPtr driver, virBufferPtr buf, @@ -793,6 +862,9 @@ qemuMigrationCookieXMLFormat(virQEMUDriverPtr driver, if (mig->flags & QEMU_MIGRATION_COOKIE_ALLOW_REBOOT) qemuDomainObjPrivateXMLFormatAllowReboot(buf, mig->allowReboot); =20 + if (mig->flags & QEMU_MIGRATION_COOKIE_CAPS) + qemuMigrationCookieCapsXMLFormat(buf, mig->caps); + virBufferAdjustIndent(buf, -2); virBufferAddLit(buf, "\n"); return 0; @@ -1067,6 +1139,59 @@ qemuMigrationCookieStatisticsXMLParse(xmlXPathContex= tPtr ctxt) } =20 =20 +static qemuMigrationCookieCapsPtr +qemuMigrationCookieCapsXMLParse(xmlXPathContextPtr ctxt) +{ + qemuMigrationCookieCapsPtr caps =3D NULL; + xmlNodePtr *nodes =3D NULL; + qemuMigrationCookieCapsPtr ret =3D NULL; + char *name =3D NULL; + char *automatic =3D NULL; + int cap; + size_t i; + int n; + + if (VIR_ALLOC(caps) < 0) + return NULL; + + if (!(caps->supported =3D virBitmapNew(QEMU_MIGRATION_CAP_LAST)) || + !(caps->automatic =3D virBitmapNew(QEMU_MIGRATION_CAP_LAST))) + goto cleanup; + + if ((n =3D virXPathNodeSet("./capabilities[1]/cap", ctxt, &nodes)) < 0) + goto cleanup; + + for (i =3D 0; i < n; i++) { + if (!(name =3D virXMLPropString(nodes[i], "name"))) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("missing migration capability name")); + goto cleanup; + } + + if ((cap =3D qemuMigrationCapabilityTypeFromString(name)) < 0) + VIR_DEBUG("unknown migration capability '%s'", name); + else + ignore_value(virBitmapSetBit(caps->supported, cap)); + + if ((automatic =3D virXMLPropString(nodes[i], "auto")) && + STREQ(automatic, "yes")) + ignore_value(virBitmapSetBit(caps->automatic, cap)); + + VIR_FREE(name); + VIR_FREE(automatic); + } + + VIR_STEAL_PTR(ret, caps); + + cleanup: + qemuMigrationCookieCapsFree(caps); + VIR_FREE(nodes); + VIR_FREE(name); + VIR_FREE(automatic); + return ret; +} + + static int qemuMigrationCookieXMLParse(qemuMigrationCookiePtr mig, virQEMUDriverPtr driver, @@ -1246,6 +1371,10 @@ qemuMigrationCookieXMLParse(qemuMigrationCookiePtr m= ig, qemuDomainObjPrivateXMLParseAllowReboot(ctxt, &mig->allowReboot) <= 0) goto error; =20 + if (flags & QEMU_MIGRATION_COOKIE_CAPS && + !(mig->caps =3D qemuMigrationCookieCapsXMLParse(ctxt))) + goto error; + virObjectUnref(caps); return 0; =20 @@ -1286,6 +1415,7 @@ int qemuMigrationBakeCookie(qemuMigrationCookiePtr mig, virQEMUDriverPtr driver, virDomainObjPtr dom, + qemuMigrationParty party, char **cookieout, int *cookieoutlen, unsigned int flags) @@ -1329,6 +1459,10 @@ qemuMigrationBakeCookie(qemuMigrationCookiePtr mig, if (flags & QEMU_MIGRATION_COOKIE_ALLOW_REBOOT) qemuMigrationCookieAddAllowReboot(mig, dom); =20 + if (flags & QEMU_MIGRATION_COOKIE_CAPS && + qemuMigrationCookieAddCaps(mig, dom, party) < 0) + return -1; + if (!(*cookieout =3D qemuMigrationCookieXMLFormatStr(driver, mig))) return -1; =20 diff --git a/src/qemu/qemu_migration_cookie.h b/src/qemu/qemu_migration_coo= kie.h index 4a25511a9a..08c5de8f06 100644 --- a/src/qemu/qemu_migration_cookie.h +++ b/src/qemu/qemu_migration_cookie.h @@ -19,6 +19,8 @@ #ifndef __QEMU_MIGRATION_COOKIE_H__ # define __QEMU_MIGRATION_COOKIE_H__ =20 +# include "qemu_migration_params.h" + typedef enum { QEMU_MIGRATION_COOKIE_FLAG_GRAPHICS, QEMU_MIGRATION_COOKIE_FLAG_LOCKSTATE, @@ -30,6 +32,7 @@ typedef enum { QEMU_MIGRATION_COOKIE_FLAG_CPU_HOTPLUG, QEMU_MIGRATION_COOKIE_FLAG_CPU, QEMU_MIGRATION_COOKIE_FLAG_ALLOW_REBOOT, + QEMU_MIGRATION_COOKIE_FLAG_CAPS, =20 QEMU_MIGRATION_COOKIE_FLAG_LAST } qemuMigrationCookieFlags; @@ -47,6 +50,7 @@ typedef enum { QEMU_MIGRATION_COOKIE_CPU_HOTPLUG =3D (1 << QEMU_MIGRATION_COOKIE_FLAG= _CPU_HOTPLUG), QEMU_MIGRATION_COOKIE_CPU =3D (1 << QEMU_MIGRATION_COOKIE_FLAG_CPU), QEMU_MIGRATION_COOKIE_ALLOW_REBOOT =3D (1 << QEMU_MIGRATION_COOKIE_FLA= G_ALLOW_REBOOT), + QEMU_MIGRATION_COOKIE_CAPS =3D (1 << QEMU_MIGRATION_COOKIE_FLAG_CAPS), } qemuMigrationCookieFeatures; =20 typedef struct _qemuMigrationCookieGraphics qemuMigrationCookieGraphics; @@ -92,6 +96,13 @@ struct _qemuMigrationCookieNBD { } *disks; }; =20 +typedef struct _qemuMigrationCookieCaps qemuMigrationCookieCaps; +typedef qemuMigrationCookieCaps *qemuMigrationCookieCapsPtr; +struct _qemuMigrationCookieCaps { + virBitmapPtr supported; + virBitmapPtr automatic; +}; + typedef struct _qemuMigrationCookie qemuMigrationCookie; typedef qemuMigrationCookie *qemuMigrationCookiePtr; struct _qemuMigrationCookie { @@ -132,6 +143,9 @@ struct _qemuMigrationCookie { =20 /* If flags & QEMU_MIGRATION_COOKIE_ALLOW_REBOOT */ virTristateBool allowReboot; + + /* If flags & QEMU_MIGRATION_COOKIE_CAPS */ + qemuMigrationCookieCapsPtr caps; }; =20 =20 @@ -139,6 +153,7 @@ int qemuMigrationBakeCookie(qemuMigrationCookiePtr mig, virQEMUDriverPtr driver, virDomainObjPtr dom, + qemuMigrationParty party, char **cookieout, int *cookieoutlen, unsigned int flags); diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 2723288dfc..1b1e5829e8 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -153,6 +153,26 @@ static const qemuMigrationParamType qemuMigrationParam= Types[] =3D { verify(ARRAY_CARDINALITY(qemuMigrationParamTypes) =3D=3D QEMU_MIGRATION_PA= RAM_LAST); =20 =20 +virBitmapPtr +qemuMigrationParamsGetAlwaysOnCaps(qemuMigrationParty party) +{ + virBitmapPtr caps =3D NULL; + size_t i; + + if (!(caps =3D virBitmapNew(QEMU_MIGRATION_CAP_LAST))) + return NULL; + + for (i =3D 0; i < ARRAY_CARDINALITY(qemuMigrationParamsAlwaysOn); i++)= { + if (!(qemuMigrationParamsAlwaysOn[i].party & party)) + continue; + + ignore_value(virBitmapSetBit(caps, qemuMigrationParamsAlwaysOn[i].= cap)); + } + + return caps; +} + + static qemuMigrationParamsPtr qemuMigrationParamsNew(void) { diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index ceba0eb68a..75a441e1e1 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -65,6 +65,9 @@ typedef enum { } qemuMigrationParty; =20 =20 +virBitmapPtr +qemuMigrationParamsGetAlwaysOnCaps(qemuMigrationParty party); + qemuMigrationParamsPtr qemuMigrationParamsFromFlags(virTypedParameterPtr params, int nparams, --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457816369128.13030682481417; Wed, 11 Apr 2018 07:43:36 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id BE0EB21BB7; Wed, 11 Apr 2018 14:43:34 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 91BAC88445; Wed, 11 Apr 2018 14:43:34 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 448AB181BA1B; Wed, 11 Apr 2018 14:43:34 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgH2j008896 for ; Wed, 11 Apr 2018 10:42:17 -0400 Received: by smtp.corp.redhat.com (Postfix) id 0B2F2215CDAF; Wed, 11 Apr 2018 14:42:17 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id C2941215CDCB for ; Wed, 11 Apr 2018 14:42:16 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 17516100B94; Wed, 11 Apr 2018 16:42:11 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:50 +0200 Message-Id: <3747d958700b801781d0350bdbcf3f33f28a7285.1523456480.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 60/73] qemu: Check remote caps when enabling always-on capabilities X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Wed, 11 Apr 2018 14:43:35 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" When an always-on migration capability is supposed to be enabled on both sides of migration, each side can only enable the feature if it is enabled by the other side. Thus the source host sends a list of supported migration capabilities in the migration cookie generated in the Begin phase. The destination host consumes the list in the Prepare phase and decides what capabilities can be enabled when starting a QEMU process for incoming migration. Once done the destination sends the list of supported capabilities back to the source where it is used during the Perform phase to determine what capabilities can be automatically enabled. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_migration.c | 17 ++++++++++++----- src/qemu/qemu_migration_params.c | 22 ++++++++++++++++++++-- src/qemu/qemu_migration_params.h | 3 ++- 3 files changed, 34 insertions(+), 8 deletions(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index f573bd3eba..42194c0ea8 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -1913,6 +1913,9 @@ qemuMigrationSrcBeginPhase(virQEMUDriverPtr driver, =20 cookieFlags |=3D QEMU_MIGRATION_COOKIE_ALLOW_REBOOT; =20 + if (!(flags & VIR_MIGRATE_OFFLINE)) + cookieFlags |=3D QEMU_MIGRATION_COOKIE_CAPS; + if (!(mig =3D qemuMigrationEatCookie(driver, vm, NULL, 0, 0))) goto cleanup; =20 @@ -2205,7 +2208,8 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, } cookieFlags =3D 0; } else { - cookieFlags =3D QEMU_MIGRATION_COOKIE_GRAPHICS; + cookieFlags =3D QEMU_MIGRATION_COOKIE_GRAPHICS | + QEMU_MIGRATION_COOKIE_CAPS; } =20 if (flags & VIR_MIGRATE_POSTCOPY && @@ -2299,7 +2303,8 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, QEMU_MIGRATION_COOKIE_MEMORY_HOTPLU= G | QEMU_MIGRATION_COOKIE_CPU_HOTPLUG | QEMU_MIGRATION_COOKIE_CPU | - QEMU_MIGRATION_COOKIE_ALLOW_REBOOT)= )) + QEMU_MIGRATION_COOKIE_ALLOW_REBOOT | + QEMU_MIGRATION_COOKIE_CAPS))) goto cleanup; =20 if (STREQ_NULLABLE(protocol, "rdma") && @@ -2378,7 +2383,7 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, } =20 if (qemuMigrationParamsCheck(driver, vm, QEMU_ASYNC_JOB_MIGRATION_IN, - migParams) < 0) + migParams, mig->caps->automatic) < 0) goto stopjob; =20 /* Migrations using TLS need to add the "tls-creds-x509" object and @@ -3302,7 +3307,9 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, } =20 mig =3D qemuMigrationEatCookie(driver, vm, cookiein, cookieinlen, - cookieFlags | QEMU_MIGRATION_COOKIE_GRAPH= ICS); + cookieFlags | + QEMU_MIGRATION_COOKIE_GRAPHICS | + QEMU_MIGRATION_COOKIE_CAPS); if (!mig) goto error; =20 @@ -3310,7 +3317,7 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, VIR_WARN("unable to provide data for graphics client relocation"); =20 if (qemuMigrationParamsCheck(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT, - migParams) < 0) + migParams, mig->caps->automatic) < 0) goto error; =20 if (flags & VIR_MIGRATE_TLS) { diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 1b1e5829e8..979610c3a8 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -116,7 +116,9 @@ struct _qemuMigrationParamsFlagMapItem { }; =20 /* Migration capabilities which should always be enabled as long as they - * are supported by QEMU. */ + * are supported by QEMU. If the capability is supposed to be enabled on b= oth + * sides of migration, it won't be enabled unless both sides support it. + */ static const qemuMigrationParamsAlwaysOnItem qemuMigrationParamsAlwaysOn[]= =3D { {QEMU_MIGRATION_CAP_PAUSE_BEFORE_SWITCHOVER, QEMU_MIGRATION_SOURCE}, @@ -975,7 +977,8 @@ int qemuMigrationParamsCheck(virQEMUDriverPtr driver, virDomainObjPtr vm, int asyncJob, - qemuMigrationParamsPtr migParams) + qemuMigrationParamsPtr migParams, + virBitmapPtr remoteCaps) { qemuDomainObjPrivatePtr priv =3D vm->privateData; qemuMigrationCapability cap; @@ -1005,6 +1008,21 @@ qemuMigrationParamsCheck(virQEMUDriverPtr driver, =20 if (qemuMigrationParamsAlwaysOn[i].party & party && qemuMigrationCapsGet(vm, cap)) { + if (qemuMigrationParamsAlwaysOn[i].party !=3D party) { + bool remote =3D false; + + if (remoteCaps) + ignore_value(virBitmapGetBit(remoteCaps, cap, &remote)= ); + + if (!remote) { + VIR_DEBUG("Not enabling migration capability '%s'; it = is " + "not supported or automatically enabled by t= he " + "other side of migration", + qemuMigrationCapabilityTypeToString(cap)); + continue; + } + } + VIR_DEBUG("Enabling migration capability '%s'", qemuMigrationCapabilityTypeToString(cap)); ignore_value(virBitmapSetBit(migParams->caps, cap)); diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index 75a441e1e1..eb4016806d 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -123,7 +123,8 @@ int qemuMigrationParamsCheck(virQEMUDriverPtr driver, virDomainObjPtr vm, int asyncJob, - qemuMigrationParamsPtr migParams); + qemuMigrationParamsPtr migParams, + virBitmapPtr remoteCaps); =20 void qemuMigrationParamsReset(virQEMUDriverPtr driver, --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457808194348.71970189038916; Wed, 11 Apr 2018 07:43:28 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id B836984A8; Wed, 11 Apr 2018 14:43:26 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 8BEA47E6B3; Wed, 11 Apr 2018 14:43:26 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 5447B181BA17; Wed, 11 Apr 2018 14:43:26 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgGwe008828 for ; Wed, 11 Apr 2018 10:42:17 -0400 Received: by smtp.corp.redhat.com (Postfix) id E429DAB3E4; Wed, 11 Apr 2018 14:42:16 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id C3C3AAB3E7 for ; Wed, 11 Apr 2018 14:42:16 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 1B598100B95; Wed, 11 Apr 2018 16:42:11 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:51 +0200 Message-Id: <92a627254bcace0647a19c5bb79298aa17d0361b.1523456480.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 61/73] qemu: Generalize qemuMigrationParamsGetDowntimeLimit X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Wed, 11 Apr 2018 14:43:27 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" The API is renamed as qemuMigrationParamsGetULL and it can be used with any migration parameter stored as unsigned long long. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_driver.c | 9 ++++++++- src/qemu/qemu_migration_params.c | 15 ++++++++++----- src/qemu/qemu_migration_params.h | 5 +++-- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 0cf08759c6..8917beae35 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -13557,6 +13557,7 @@ qemuDomainMigrateGetMaxDowntime(virDomainPtr dom, virDomainObjPtr vm; qemuMigrationParamsPtr migParams =3D NULL; int ret =3D -1; + int rc; =20 virCheckFlags(0, -1); =20 @@ -13579,7 +13580,13 @@ qemuDomainMigrateGetMaxDowntime(virDomainPtr dom, &migParams) < 0) goto endjob; =20 - if (qemuMigrationParamsGetDowntimeLimit(migParams, downtime) =3D=3D 1)= { + if ((rc =3D qemuMigrationParamsGetULL(migParams, + QEMU_MIGRATION_PARAM_DOWNTIME_LIMI= T, + downtime)) < 0) { + goto endjob; + } + + if (rc =3D=3D 1) { virReportError(VIR_ERR_OPERATION_INVALID, "%s", _("Querying migration downtime is not supported by " "QEMU binary")); diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 979610c3a8..3e131207a8 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -950,17 +950,22 @@ qemuMigrationParamsSetString(qemuMigrationParamsPtr m= igParams, =20 =20 /** - * Returns 0 on success, + * Returns -1 on error, + * 0 on success, * 1 if the parameter is not supported by QEMU. */ int -qemuMigrationParamsGetDowntimeLimit(qemuMigrationParamsPtr migParams, - unsigned long long *value) +qemuMigrationParamsGetULL(qemuMigrationParamsPtr migParams, + qemuMigrationParam param, + unsigned long long *value) { - if (!migParams->params[QEMU_MIGRATION_PARAM_DOWNTIME_LIMIT].set) + if (qemuMigrationParamsCheckType(param, QEMU_MIGRATION_PARAM_TYPE_ULL)= < 0) + return -1; + + if (!migParams->params[param].set) return 1; =20 - *value =3D migParams->params[QEMU_MIGRATION_PARAM_DOWNTIME_LIMIT].valu= e.ull; + *value =3D migParams->params[param].value.ull; return 0; } =20 diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index eb4016806d..6950eca8ef 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -116,8 +116,9 @@ qemuMigrationParamsSetString(qemuMigrationParamsPtr mig= Params, const char *value); =20 int -qemuMigrationParamsGetDowntimeLimit(qemuMigrationParamsPtr migParams, - unsigned long long *value); +qemuMigrationParamsGetULL(qemuMigrationParamsPtr migParams, + qemuMigrationParam param, + unsigned long long *value); =20 int qemuMigrationParamsCheck(virQEMUDriverPtr driver, --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523780577688348.0391773483956; Sun, 15 Apr 2018 01:22:57 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 613FD23E6E6; Sun, 15 Apr 2018 08:22:56 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 2E64A611A4; Sun, 15 Apr 2018 08:22:56 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id DC5245BBFD; Sun, 15 Apr 2018 08:22:55 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgHGw008899 for ; Wed, 11 Apr 2018 10:42:17 -0400 Received: by smtp.corp.redhat.com (Postfix) id 0BFD92024CA7; Wed, 11 Apr 2018 14:42:17 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id C41622024CA4 for ; Wed, 11 Apr 2018 14:42:16 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 1E7DC100B96; Wed, 11 Apr 2018 16:42:11 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:52 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 62/73] qemu: Set migration parameters automatically X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Sun, 15 Apr 2018 08:22:56 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Most QEMU migration parameters directly correspond to VIR_MIGRATE_PARAM_* typed parameters and qemuMigrationParamsFromFlags can automatically set them according to a static mapping between libvirt and QEMU parameters. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_migration_params.c | 138 +++++++++++++++++++------------ 1 file changed, 83 insertions(+), 55 deletions(-) diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 3e131207a8..78ded83ee9 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -115,6 +115,13 @@ struct _qemuMigrationParamsFlagMapItem { int party; /* bit-wise OR of qemuMigrationParty */ }; =20 +typedef struct _qemuMigrationParamsTPMapItem qemuMigrationParamsTPMapItem; +struct _qemuMigrationParamsTPMapItem { + const char *typedParam; + qemuMigrationParam param; + int party; /* bit-wise OR of qemuMigrationParty */ +}; + /* Migration capabilities which should always be enabled as long as they * are supported by QEMU. If the capability is supposed to be enabled on b= oth * sides of migration, it won't be enabled unless both sides support it. @@ -139,6 +146,34 @@ static const qemuMigrationParamsFlagMapItem qemuMigrat= ionParamsFlagMap[] =3D { QEMU_MIGRATION_SOURCE | QEMU_MIGRATION_DESTINATION}, }; =20 +/* Translation from VIR_MIGRATE_PARAM_* typed parameters to + * qemuMigrationParams. */ +static const qemuMigrationParamsTPMapItem qemuMigrationParamsTPMap[] =3D { + {VIR_MIGRATE_PARAM_AUTO_CONVERGE_INITIAL, + QEMU_MIGRATION_PARAM_THROTTLE_INITIAL, + QEMU_MIGRATION_SOURCE}, + + {VIR_MIGRATE_PARAM_AUTO_CONVERGE_INCREMENT, + QEMU_MIGRATION_PARAM_THROTTLE_INCREMENT, + QEMU_MIGRATION_SOURCE}, + + {VIR_MIGRATE_PARAM_COMPRESSION_MT_LEVEL, + QEMU_MIGRATION_PARAM_COMPRESS_LEVEL, + QEMU_MIGRATION_SOURCE | QEMU_MIGRATION_DESTINATION}, + + {VIR_MIGRATE_PARAM_COMPRESSION_MT_THREADS, + QEMU_MIGRATION_PARAM_COMPRESS_THREADS, + QEMU_MIGRATION_SOURCE | QEMU_MIGRATION_DESTINATION}, + + {VIR_MIGRATE_PARAM_COMPRESSION_MT_DTHREADS, + QEMU_MIGRATION_PARAM_DECOMPRESS_THREADS, + QEMU_MIGRATION_SOURCE | QEMU_MIGRATION_DESTINATION}, + + {VIR_MIGRATE_PARAM_COMPRESSION_XBZRLE_CACHE, + QEMU_MIGRATION_PARAM_XBZRLE_CACHE_SIZE, + QEMU_MIGRATION_SOURCE | QEMU_MIGRATION_DESTINATION}, +}; + static const qemuMigrationParamType qemuMigrationParamTypes[] =3D { [QEMU_MIGRATION_PARAM_COMPRESS_LEVEL] =3D QEMU_MIGRATION_PARAM_TYPE_IN= T, [QEMU_MIGRATION_PARAM_COMPRESS_THREADS] =3D QEMU_MIGRATION_PARAM_TYPE_= INT, @@ -361,30 +396,6 @@ qemuMigrationParamsSetCompression(virTypedParameterPtr= params, ignore_value(virBitmapSetBit(migParams->caps, cap)); } =20 - if (qemuMigrationParamsGetTPInt(migParams, - QEMU_MIGRATION_PARAM_COMPRESS_LEVEL, - params, nparams, - VIR_MIGRATE_PARAM_COMPRESSION_MT_LEVEL= ) < 0) - goto error; - - if (qemuMigrationParamsGetTPInt(migParams, - QEMU_MIGRATION_PARAM_COMPRESS_THREADS, - params, nparams, - VIR_MIGRATE_PARAM_COMPRESSION_MT_THREA= DS) < 0) - goto error; - - if (qemuMigrationParamsGetTPInt(migParams, - QEMU_MIGRATION_PARAM_DECOMPRESS_THREAD= S, - params, nparams, - VIR_MIGRATE_PARAM_COMPRESSION_MT_DTHRE= ADS) < 0) - goto error; - - if (qemuMigrationParamsGetTPULL(migParams, - QEMU_MIGRATION_PARAM_XBZRLE_CACHE_SIZE, - params, nparams, - VIR_MIGRATE_PARAM_COMPRESSION_XBZRLE_C= ACHE) < 0) - goto error; - if ((migParams->params[QEMU_MIGRATION_PARAM_COMPRESS_LEVEL].set || migParams->params[QEMU_MIGRATION_PARAM_COMPRESS_THREADS].set || migParams->params[QEMU_MIGRATION_PARAM_DECOMPRESS_THREADS].set) && @@ -437,18 +448,32 @@ qemuMigrationParamsFromFlags(virTypedParameterPtr par= ams, } } =20 - if (party =3D=3D QEMU_MIGRATION_SOURCE) { - if (qemuMigrationParamsGetTPInt(migParams, - QEMU_MIGRATION_PARAM_THROTTLE_INIT= IAL, - params, nparams, - VIR_MIGRATE_PARAM_AUTO_CONVERGE_IN= ITIAL) < 0) - goto error; + for (i =3D 0; i < ARRAY_CARDINALITY(qemuMigrationParamsTPMap); i++) { + const qemuMigrationParamsTPMapItem *item =3D &qemuMigrationParamsT= PMap[i]; =20 - if (qemuMigrationParamsGetTPInt(migParams, - QEMU_MIGRATION_PARAM_THROTTLE_INCR= EMENT, - params, nparams, - VIR_MIGRATE_PARAM_AUTO_CONVERGE_IN= CREMENT) < 0) - goto error; + if (!(item->party & party)) + continue; + + VIR_DEBUG("Setting migration parameter '%s' from '%s'", + qemuMigrationParamTypeToString(item->param), item->typed= Param); + + switch (qemuMigrationParamTypes[item->param]) { + case QEMU_MIGRATION_PARAM_TYPE_INT: + if (qemuMigrationParamsGetTPInt(migParams, item->param, params, + nparams, item->typedParam) < 0) + goto error; + break; + + case QEMU_MIGRATION_PARAM_TYPE_ULL: + if (qemuMigrationParamsGetTPULL(migParams, item->param, params, + nparams, item->typedParam) < 0) + goto error; + break; + + case QEMU_MIGRATION_PARAM_TYPE_BOOL: + case QEMU_MIGRATION_PARAM_TYPE_STRING: + break; + } } =20 if ((migParams->params[QEMU_MIGRATION_PARAM_THROTTLE_INITIAL].set || @@ -493,29 +518,32 @@ qemuMigrationParamsDump(qemuMigrationParamsPtr migPar= ams, return -1; } =20 - if (qemuMigrationParamsSetTPInt(migParams, - QEMU_MIGRATION_PARAM_COMPRESS_LEVEL, - params, nparams, maxparams, - VIR_MIGRATE_PARAM_COMPRESSION_MT_LEVEL= ) < 0) - return -1; + for (i =3D 0; i < ARRAY_CARDINALITY(qemuMigrationParamsTPMap); i++) { + const qemuMigrationParamsTPMapItem *item =3D &qemuMigrationParamsT= PMap[i]; =20 - if (qemuMigrationParamsSetTPInt(migParams, - QEMU_MIGRATION_PARAM_COMPRESS_THREADS, - params, nparams, maxparams, - VIR_MIGRATE_PARAM_COMPRESSION_MT_THREA= DS) < 0) - return -1; + if (!(item->party & QEMU_MIGRATION_DESTINATION)) + continue; =20 - if (qemuMigrationParamsSetTPInt(migParams, - QEMU_MIGRATION_PARAM_DECOMPRESS_THREAD= S, - params, nparams, maxparams, - VIR_MIGRATE_PARAM_COMPRESSION_MT_DTHRE= ADS) < 0) - return -1; + switch (qemuMigrationParamTypes[item->param]) { + case QEMU_MIGRATION_PARAM_TYPE_INT: + if (qemuMigrationParamsSetTPInt(migParams, item->param, + params, nparams, maxparams, + item->typedParam) < 0) + return -1; + break; =20 - if (qemuMigrationParamsSetTPULL(migParams, - QEMU_MIGRATION_PARAM_XBZRLE_CACHE_SIZE, - params, nparams, maxparams, - VIR_MIGRATE_PARAM_COMPRESSION_XBZRLE_C= ACHE) < 0) - return -1; + case QEMU_MIGRATION_PARAM_TYPE_ULL: + if (qemuMigrationParamsSetTPULL(migParams, item->param, + params, nparams, maxparams, + item->typedParam) < 0) + return -1; + break; + + case QEMU_MIGRATION_PARAM_TYPE_BOOL: + case QEMU_MIGRATION_PARAM_TYPE_STRING: + break; + } + } =20 return 0; } --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523780574254180.94596935981542; Sun, 15 Apr 2018 01:22:54 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 9ED3E30BB8E1; Sun, 15 Apr 2018 08:22:52 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 70AC981863; Sun, 15 Apr 2018 08:22:52 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 22FD3180596F; Sun, 15 Apr 2018 08:22:52 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgGuq008843 for ; Wed, 11 Apr 2018 10:42:17 -0400 Received: by smtp.corp.redhat.com (Postfix) id 16850946D5; Wed, 11 Apr 2018 14:42:17 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id CE4DCAB3E8 for ; Wed, 11 Apr 2018 14:42:16 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 2166D100B97; Wed, 11 Apr 2018 16:42:11 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:53 +0200 Message-Id: <08695f33fa01b01e15b91a3b8ca10d39705d189d.1523456480.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 63/73] qemu: Properly reset migration params when libvirtd restarts X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.42]); Sun, 15 Apr 2018 08:22:53 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" To be able to restore all migration parameters when libvirtd is restarting during an active migration job, we need to store the original values of all parameters (stored in priv->job.migParams) in the status XML. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_domain.c | 7 ++ src/qemu/qemu_migration_params.c | 145 +++++++++++++++++++++++++++++++ src/qemu/qemu_migration_params.h | 10 +++ 3 files changed, 162 insertions(+) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 03ad8d35c0..e3f58e45cb 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -32,6 +32,7 @@ #include "qemu_parse_command.h" #include "qemu_capabilities.h" #include "qemu_migration.h" +#include "qemu_migration_params.h" #include "qemu_security.h" #include "viralloc.h" #include "virlog.h" @@ -2099,6 +2100,9 @@ qemuDomainObjPrivateXMLFormatJob(virBufferPtr buf, } } =20 + if (priv->job.migParams) + qemuMigrationParamsFormat(&childBuf, priv->job.migParams); + return virXMLFormatElement(buf, "job", &attrBuf, &childBuf); } =20 @@ -2398,6 +2402,9 @@ qemuDomainObjPrivateXMLParseJob(virDomainObjPtr vm, } VIR_FREE(nodes); =20 + if (qemuMigrationParamsParse(ctxt, &priv->job.migParams) < 0) + goto cleanup; + ret =3D 0; =20 cleanup: diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 78ded83ee9..8af6d8ad0e 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -1103,6 +1103,151 @@ qemuMigrationParamsReset(virQEMUDriverPtr driver, } =20 =20 +void +qemuMigrationParamsFormat(virBufferPtr buf, + qemuMigrationParamsPtr migParams) +{ + qemuMigrationParamValuePtr pv; + size_t i; + + virBufferAddLit(buf, "\n"); + virBufferAdjustIndent(buf, 2); + + for (i =3D 0; i < QEMU_MIGRATION_PARAM_LAST; i++) { + pv =3D &migParams->params[i]; + + if (!pv->set) + continue; + + virBufferAsprintf(buf, "value.i); + break; + + case QEMU_MIGRATION_PARAM_TYPE_ULL: + virBufferAsprintf(buf, "value=3D'%llu'", pv->value.ull); + break; + + case QEMU_MIGRATION_PARAM_TYPE_BOOL: + virBufferAsprintf(buf, "value=3D'%s'", pv->value.b ? "yes" : "= no"); + break; + + case QEMU_MIGRATION_PARAM_TYPE_STRING: + virBufferEscapeString(buf, "value=3D'%s'", pv->value.s); + break; + } + + virBufferAddLit(buf, "/>\n"); + } + + virBufferAdjustIndent(buf, -2); + virBufferAddLit(buf, "\n"); +} + + +int +qemuMigrationParamsParse(xmlXPathContextPtr ctxt, + qemuMigrationParamsPtr *migParams) +{ + qemuMigrationParamsPtr params =3D NULL; + qemuMigrationParamValuePtr pv; + xmlNodePtr *nodes =3D NULL; + char *name =3D NULL; + char *value =3D NULL; + int param; + size_t i; + int rc; + int n; + int ret =3D -1; + + *migParams =3D NULL; + + if ((rc =3D virXPathBoolean("boolean(./migParams)", ctxt)) < 0) + goto cleanup; + + if (rc =3D=3D 0) { + ret =3D 0; + goto cleanup; + } + + if ((n =3D virXPathNodeSet("./migParams[1]/param", ctxt, &nodes)) < 0) + return -1; + + if (!(params =3D qemuMigrationParamsNew())) + goto cleanup; + + for (i =3D 0; i < n; i++) { + if (!(name =3D virXMLPropString(nodes[i], "name"))) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("missing migration parameter name")); + goto cleanup; + } + + if ((param =3D qemuMigrationParamTypeFromString(name)) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("unknown migration parameter '%s'"), name); + goto cleanup; + } + pv =3D ¶ms->params[param]; + + if (!(value =3D virXMLPropString(nodes[i], "value"))) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("missing value for migration parameter '%s'"), + name); + goto cleanup; + } + + rc =3D 0; + switch (qemuMigrationParamTypes[param]) { + case QEMU_MIGRATION_PARAM_TYPE_INT: + rc =3D virStrToLong_i(value, NULL, 10, &pv->value.i); + break; + + case QEMU_MIGRATION_PARAM_TYPE_ULL: + rc =3D virStrToLong_ullp(value, NULL, 10, &pv->value.ull); + break; + + case QEMU_MIGRATION_PARAM_TYPE_BOOL: + if (STREQ(value, "yes")) + pv->value.b =3D true; + else if (STREQ(value, "no")) + pv->value.b =3D false; + else + rc =3D -1; + break; + + case QEMU_MIGRATION_PARAM_TYPE_STRING: + VIR_STEAL_PTR(pv->value.s, value); + break; + } + + if (rc < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("invalid value '%s' for migration parameter '= %s'"), + value, name); + goto cleanup; + } + + pv->set =3D true; + VIR_FREE(name); + VIR_FREE(value); + } + + VIR_STEAL_PTR(*migParams, params); + ret =3D 0; + + cleanup: + qemuMigrationParamsFree(params); + VIR_FREE(nodes); + VIR_FREE(name); + VIR_FREE(value); + return ret; +} + + int qemuMigrationCapsCheck(virQEMUDriverPtr driver, virDomainObjPtr vm, diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index 6950eca8ef..99dde0ad3c 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -24,6 +24,8 @@ =20 # include "internal.h" =20 +# include "virbuffer.h" +# include "virxml.h" # include "qemu_monitor.h" # include "qemu_conf.h" =20 @@ -133,6 +135,14 @@ qemuMigrationParamsReset(virQEMUDriverPtr driver, int asyncJob, qemuMigrationParamsPtr origParams); =20 +void +qemuMigrationParamsFormat(virBufferPtr buf, + qemuMigrationParamsPtr migParams); + +int +qemuMigrationParamsParse(xmlXPathContextPtr ctxt, + qemuMigrationParamsPtr *migParams); + int qemuMigrationCapsCheck(virQEMUDriverPtr driver, virDomainObjPtr vm, --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 15234578224681004.0737861474594; Wed, 11 Apr 2018 07:43:42 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 2C08C7D4EA; Wed, 11 Apr 2018 14:43:41 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id F185A78BB0; Wed, 11 Apr 2018 14:43:40 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id B7B13181BA1E; Wed, 11 Apr 2018 14:43:40 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgHeZ008925 for ; Wed, 11 Apr 2018 10:42:17 -0400 Received: by smtp.corp.redhat.com (Postfix) id 54C0D10B0F38; Wed, 11 Apr 2018 14:42:17 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 18C7710B0F39 for ; Wed, 11 Apr 2018 14:42:17 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 27030100B98; Wed, 11 Apr 2018 16:42:11 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:54 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 64/73] tests: Add tests for QEMU migration parameters X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Wed, 11 Apr 2018 14:43:41 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" This is an enhanced replacement for the original test from qemumonitorjsontest which was dropped earlier in this series. More data files with some real data will be added in the following patches. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- tests/Makefile.am | 12 ++ tests/qemumigparamsdata/unsupported.json | 3 + tests/qemumigparamsdata/unsupported.reply | 7 + tests/qemumigparamsdata/unsupported.xml | 4 + tests/qemumigparamstest.c | 237 ++++++++++++++++++++++ 5 files changed, 263 insertions(+) create mode 100644 tests/qemumigparamsdata/unsupported.json create mode 100644 tests/qemumigparamsdata/unsupported.reply create mode 100644 tests/qemumigparamsdata/unsupported.xml create mode 100644 tests/qemumigparamstest.c diff --git a/tests/Makefile.am b/tests/Makefile.am index a4f231d2a7..2c0d1311c2 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -124,6 +124,7 @@ EXTRA_DIST =3D \ qemuhotplugtestcpus \ qemuhotplugtestdevices \ qemuhotplugtestdomains \ + qemumigparamsdata \ qemumonitorjsondata \ qemuxml2argvdata \ qemuxml2startupxmloutdata \ @@ -284,6 +285,7 @@ test_programs +=3D qemuxml2argvtest qemuxml2xmltest \ qemumemlocktest \ qemucommandutiltest \ qemublocktest \ + qemumigparamstest \ $(NULL) test_helpers +=3D qemucapsprobe test_libraries +=3D libqemumonitortestutils.la \ @@ -670,6 +672,15 @@ qemumemlocktest_SOURCES =3D \ testutilsqemu.c testutilsqemu.h \ testutils.c testutils.h qemumemlocktest_LDADD =3D $(qemu_LDADDS) $(LDADDS) + +qemumigparamstest_SOURCES =3D \ + qemumigparamstest.c \ + testutils.c testutils.h \ + testutilsqemu.c testutilsqemu.h \ + $(NULL) +qemumigparamstest_LDADD =3D libqemumonitortestutils.la \ + $(qemu_LDADDS) $(LDADDS) + else ! WITH_QEMU EXTRA_DIST +=3D qemuxml2argvtest.c qemuxml2xmltest.c qemuargv2xmltest.c \ domainsnapshotxml2xmltest.c \ @@ -680,6 +691,7 @@ EXTRA_DIST +=3D qemuxml2argvtest.c qemuxml2xmltest.c qe= muargv2xmltest.c \ qemucaps2xmltest.c qemucommandutiltest.c \ qemumemlocktest.c qemucpumock.c testutilshostcpus.h \ qemublocktest.c \ + qemumigparamstest.c \ $(QEMUMONITORTESTUTILS_SOURCES) endif ! WITH_QEMU =20 diff --git a/tests/qemumigparamsdata/unsupported.json b/tests/qemumigparams= data/unsupported.json new file mode 100644 index 0000000000..0db3279e44 --- /dev/null +++ b/tests/qemumigparamsdata/unsupported.json @@ -0,0 +1,3 @@ +{ + +} diff --git a/tests/qemumigparamsdata/unsupported.reply b/tests/qemumigparam= sdata/unsupported.reply new file mode 100644 index 0000000000..2b88ba10c3 --- /dev/null +++ b/tests/qemumigparamsdata/unsupported.reply @@ -0,0 +1,7 @@ +{ + "id": "libvirt-1", + "error": { + "class": "CommandNotFound", + "desc": "The command query-migrate-parameters has not been found" + } +} diff --git a/tests/qemumigparamsdata/unsupported.xml b/tests/qemumigparamsd= ata/unsupported.xml new file mode 100644 index 0000000000..8aa3abefc0 --- /dev/null +++ b/tests/qemumigparamsdata/unsupported.xml @@ -0,0 +1,4 @@ + + + + diff --git a/tests/qemumigparamstest.c b/tests/qemumigparamstest.c new file mode 100644 index 0000000000..4cc27bcf52 --- /dev/null +++ b/tests/qemumigparamstest.c @@ -0,0 +1,237 @@ +/* + * Copyright (C) 2011-2013 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * . + * + */ + +#include + +#include "virjson.h" +#include "virbuffer.h" +#include "virxml.h" +#include "testutils.h" +#include "testutilsqemu.h" +#include "qemumonitortestutils.h" +#include "qemu/qemu_migration_params.h" +#include "qemu/qemu_migration_paramspriv.h" +#include "qemu/qemu_monitor.h" + +#define VIR_FROM_THIS VIR_FROM_NONE + +typedef struct _qemuMigParamsData qemuMigParamsData; +struct _qemuMigParamsData { + virDomainXMLOptionPtr xmlopt; + const char *name; +}; + + +static void +qemuMigParamsTestFormatXML(virBufferPtr buf, + qemuMigrationParamsPtr migParams) +{ + virBufferAddLit(buf, "\n"); + virBufferAdjustIndent(buf, 2); + + if (migParams) + qemuMigrationParamsFormat(buf, migParams); + + virBufferAdjustIndent(buf, -2); + virBufferAddLit(buf, "\n"); +} + + +static int +qemuMigParamsTestXML2XML(const void *opaque) +{ + const qemuMigParamsData *data =3D opaque; + virBuffer buf =3D VIR_BUFFER_INITIALIZER; + char *xmlFile =3D NULL; + xmlDocPtr doc =3D NULL; + xmlXPathContextPtr ctxt =3D NULL; + qemuMigrationParamsPtr migParams =3D NULL; + char *actualXML =3D NULL; + int ret =3D -1; + + if (virAsprintf(&xmlFile, "%s/qemumigparamsdata/%s.xml", + abs_srcdir, data->name) < 0) + goto cleanup; + + if (!(doc =3D virXMLParseFileCtxt(xmlFile, &ctxt))) + goto cleanup; + + if (qemuMigrationParamsParse(ctxt, &migParams) < 0) + goto cleanup; + + qemuMigParamsTestFormatXML(&buf, migParams); + + if (!(actualXML =3D virBufferContentAndReset(&buf))) + goto cleanup; + + if (virTestCompareToFile(actualXML, xmlFile) < 0) + goto cleanup; + + ret =3D 0; + + cleanup: + VIR_FREE(xmlFile); + VIR_FREE(actualXML); + qemuMigrationParamsFree(migParams); + virBufferFreeAndReset(&buf); + xmlXPathFreeContext(ctxt); + xmlFreeDoc(doc); + return ret; +} + + +static int +qemuMigParamsTestXML(const void *opaque) +{ + const qemuMigParamsData *data =3D opaque; + virBuffer buf =3D VIR_BUFFER_INITIALIZER; + char *replyFile =3D NULL; + char *xmlFile =3D NULL; + qemuMonitorTestPtr mon =3D NULL; + virJSONValuePtr params =3D NULL; + qemuMigrationParamsPtr migParams =3D NULL; + char *actualXML =3D NULL; + int ret =3D -1; + + if (virAsprintf(&replyFile, "%s/qemumigparamsdata/%s.reply", + abs_srcdir, data->name) < 0 || + virAsprintf(&xmlFile, "%s/qemumigparamsdata/%s.xml", + abs_srcdir, data->name) < 0) + goto cleanup; + + if (!(mon =3D qemuMonitorTestNewFromFile(replyFile, data->xmlopt, true= ))) + goto cleanup; + + if (qemuMonitorGetMigrationParams(qemuMonitorTestGetMonitor(mon), + ¶ms) < 0) + goto cleanup; + + if (!(migParams =3D qemuMigrationParamsFromJSON(params))) + goto cleanup; + + qemuMigParamsTestFormatXML(&buf, migParams); + + if (!(actualXML =3D virBufferContentAndReset(&buf))) + goto cleanup; + + if (virTestCompareToFile(actualXML, xmlFile) < 0) + goto cleanup; + + ret =3D 0; + + cleanup: + VIR_FREE(replyFile); + VIR_FREE(xmlFile); + VIR_FREE(actualXML); + virJSONValueFree(params); + qemuMigrationParamsFree(migParams); + virBufferFreeAndReset(&buf); + qemuMonitorTestFree(mon); + return ret; +} + + +static int +qemuMigParamsTestJSON(const void *opaque) +{ + const qemuMigParamsData *data =3D opaque; + char *replyFile =3D NULL; + char *jsonFile =3D NULL; + qemuMonitorTestPtr mon =3D NULL; + virJSONValuePtr paramsIn =3D NULL; + virJSONValuePtr paramsOut =3D NULL; + qemuMigrationParamsPtr migParams =3D NULL; + char *actualJSON =3D NULL; + int ret =3D -1; + + if (virAsprintf(&replyFile, "%s/qemumigparamsdata/%s.reply", + abs_srcdir, data->name) < 0 || + virAsprintf(&jsonFile, "%s/qemumigparamsdata/%s.json", + abs_srcdir, data->name) < 0) + goto cleanup; + + if (!(mon =3D qemuMonitorTestNewFromFile(replyFile, data->xmlopt, true= ))) + goto cleanup; + + if (qemuMonitorGetMigrationParams(qemuMonitorTestGetMonitor(mon), + ¶msIn) < 0) + goto cleanup; + + if (!(migParams =3D qemuMigrationParamsFromJSON(paramsIn))) + goto cleanup; + + if (!(paramsOut =3D qemuMigrationParamsToJSON(migParams)) || + !(actualJSON =3D virJSONValueToString(paramsOut, true))) + goto cleanup; + + if (virTestCompareToFile(actualJSON, jsonFile) < 0) + goto cleanup; + + ret =3D 0; + + cleanup: + VIR_FREE(replyFile); + VIR_FREE(jsonFile); + VIR_FREE(actualJSON); + virJSONValueFree(paramsIn); + virJSONValueFree(paramsOut); + qemuMigrationParamsFree(migParams); + qemuMonitorTestFree(mon); + return ret; +} + + +static int +mymain(void) +{ + virQEMUDriver driver; + int ret =3D 0; + +#if !WITH_YAJL + fputs("libvirt not compiled with yajl, skipping this test\n", stderr); + return EXIT_AM_SKIP; +#endif + + if (virThreadInitialize() < 0 || + qemuTestDriverInit(&driver) < 0) + return EXIT_FAILURE; + + virEventRegisterDefaultImpl(); + +#define DO_TEST(name) \ + do { \ + qemuMigParamsData data =3D { \ + driver.xmlopt, name \ + }; \ + if (virTestRun(name " (xml)", qemuMigParamsTestXML, &data) < 0) \ + ret =3D -1; \ + if (virTestRun(name " (json)", qemuMigParamsTestJSON, &data) < 0) \ + ret =3D -1; \ + if (virTestRun(name " (xml2xml)", qemuMigParamsTestXML2XML, &data)= < 0) \ + ret =3D -1; \ + } while (0) + + DO_TEST("unsupported"); + + qemuTestDriverFree(&driver); + + return (ret =3D=3D 0) ? EXIT_SUCCESS : EXIT_FAILURE; +} + +VIR_TEST_MAIN(mymain) --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523780590174286.42122460965527; Sun, 15 Apr 2018 01:23:10 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id E94DD3135B1E; Sun, 15 Apr 2018 08:23:08 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id C319F65B4F; Sun, 15 Apr 2018 08:23:08 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 53C945BBEC; Sun, 15 Apr 2018 08:23:08 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgHDA008922 for ; Wed, 11 Apr 2018 10:42:17 -0400 Received: by smtp.corp.redhat.com (Postfix) id 457F110B0F3C; Wed, 11 Apr 2018 14:42:17 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 2563010B0F38 for ; Wed, 11 Apr 2018 14:42:17 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 2C3F0100B99; Wed, 11 Apr 2018 16:42:11 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:55 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 65/73] qemumigparamstest: Add basic test data X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.46]); Sun, 15 Apr 2018 08:23:09 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- tests/qemumigparamsdata/basic.json | 9 +++++++++ tests/qemumigparamsdata/basic.reply | 12 ++++++++++++ tests/qemumigparamsdata/basic.xml | 11 +++++++++++ tests/qemumigparamsdata/empty.json | 3 +++ tests/qemumigparamsdata/empty.reply | 5 +++++ tests/qemumigparamsdata/empty.xml | 4 ++++ tests/qemumigparamstest.c | 2 ++ 7 files changed, 46 insertions(+) create mode 100644 tests/qemumigparamsdata/basic.json create mode 100644 tests/qemumigparamsdata/basic.reply create mode 100644 tests/qemumigparamsdata/basic.xml create mode 100644 tests/qemumigparamsdata/empty.json create mode 100644 tests/qemumigparamsdata/empty.reply create mode 100644 tests/qemumigparamsdata/empty.xml diff --git a/tests/qemumigparamsdata/basic.json b/tests/qemumigparamsdata/b= asic.json new file mode 100644 index 0000000000..b810d7cc87 --- /dev/null +++ b/tests/qemumigparamsdata/basic.json @@ -0,0 +1,9 @@ +{ + "compress-level": 1, + "compress-threads": 8, + "decompress-threads": 2, + "cpu-throttle-initial": 20, + "cpu-throttle-increment": 10, + "max-bandwidth": 33554432, + "downtime-limit": 300 +} diff --git a/tests/qemumigparamsdata/basic.reply b/tests/qemumigparamsdata/= basic.reply new file mode 100644 index 0000000000..dd8c5287a5 --- /dev/null +++ b/tests/qemumigparamsdata/basic.reply @@ -0,0 +1,12 @@ +{ + "id": "libvirt-1", + "return": { + "decompress-threads": 2, + "cpu-throttle-increment": 10, + "compress-threads": 8, + "compress-level": 1, + "cpu-throttle-initial": 20, + "max-bandwidth": 33554432, + "downtime-limit": 300 + } +} diff --git a/tests/qemumigparamsdata/basic.xml b/tests/qemumigparamsdata/ba= sic.xml new file mode 100644 index 0000000000..2ca532eff5 --- /dev/null +++ b/tests/qemumigparamsdata/basic.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/tests/qemumigparamsdata/empty.json b/tests/qemumigparamsdata/e= mpty.json new file mode 100644 index 0000000000..0db3279e44 --- /dev/null +++ b/tests/qemumigparamsdata/empty.json @@ -0,0 +1,3 @@ +{ + +} diff --git a/tests/qemumigparamsdata/empty.reply b/tests/qemumigparamsdata/= empty.reply new file mode 100644 index 0000000000..7aae399ede --- /dev/null +++ b/tests/qemumigparamsdata/empty.reply @@ -0,0 +1,5 @@ +{ + "id": "libvirt-1", + "return": { + } +} diff --git a/tests/qemumigparamsdata/empty.xml b/tests/qemumigparamsdata/em= pty.xml new file mode 100644 index 0000000000..8aa3abefc0 --- /dev/null +++ b/tests/qemumigparamsdata/empty.xml @@ -0,0 +1,4 @@ + + + + diff --git a/tests/qemumigparamstest.c b/tests/qemumigparamstest.c index 4cc27bcf52..6fb404c24d 100644 --- a/tests/qemumigparamstest.c +++ b/tests/qemumigparamstest.c @@ -228,6 +228,8 @@ mymain(void) } while (0) =20 DO_TEST("unsupported"); + DO_TEST("empty"); + DO_TEST("basic"); =20 qemuTestDriverFree(&driver); =20 --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457823122791.5120742188438; Wed, 11 Apr 2018 07:43:43 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 9D1EB3D96B; Wed, 11 Apr 2018 14:43:39 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 6DDDD78BA7; Wed, 11 Apr 2018 14:43:39 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 3342E5BC08; Wed, 11 Apr 2018 14:43:39 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgHHE008943 for ; Wed, 11 Apr 2018 10:42:17 -0400 Received: by smtp.corp.redhat.com (Postfix) id 84021215CDAF; Wed, 11 Apr 2018 14:42:17 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 46EAA215CDC8 for ; Wed, 11 Apr 2018 14:42:17 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 31866100D53; Wed, 11 Apr 2018 16:42:11 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:56 +0200 Message-Id: <16edece1c9cfc02a6ba9eaeb92c145142c0b985b.1523456480.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 66/73] qemumigparamstest: Add test data for TLS parameters X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Wed, 11 Apr 2018 14:43:41 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- tests/qemumigparamsdata/tls-enabled.json | 11 +++++++++++ tests/qemumigparamsdata/tls-enabled.reply | 14 ++++++++++++++ tests/qemumigparamsdata/tls-enabled.xml | 13 +++++++++++++ tests/qemumigparamsdata/tls-hostname.json | 11 +++++++++++ tests/qemumigparamsdata/tls-hostname.reply | 14 ++++++++++++++ tests/qemumigparamsdata/tls-hostname.xml | 13 +++++++++++++ tests/qemumigparamsdata/tls.json | 11 +++++++++++ tests/qemumigparamsdata/tls.reply | 14 ++++++++++++++ tests/qemumigparamsdata/tls.xml | 13 +++++++++++++ tests/qemumigparamstest.c | 3 +++ 10 files changed, 117 insertions(+) create mode 100644 tests/qemumigparamsdata/tls-enabled.json create mode 100644 tests/qemumigparamsdata/tls-enabled.reply create mode 100644 tests/qemumigparamsdata/tls-enabled.xml create mode 100644 tests/qemumigparamsdata/tls-hostname.json create mode 100644 tests/qemumigparamsdata/tls-hostname.reply create mode 100644 tests/qemumigparamsdata/tls-hostname.xml create mode 100644 tests/qemumigparamsdata/tls.json create mode 100644 tests/qemumigparamsdata/tls.reply create mode 100644 tests/qemumigparamsdata/tls.xml diff --git a/tests/qemumigparamsdata/tls-enabled.json b/tests/qemumigparams= data/tls-enabled.json new file mode 100644 index 0000000000..d42684a9de --- /dev/null +++ b/tests/qemumigparamsdata/tls-enabled.json @@ -0,0 +1,11 @@ +{ + "compress-level": 1, + "compress-threads": 8, + "decompress-threads": 2, + "cpu-throttle-initial": 20, + "cpu-throttle-increment": 10, + "tls-creds": "objlibvirt_migrate_tls0", + "tls-hostname": "", + "max-bandwidth": 33554432, + "downtime-limit": 300 +} diff --git a/tests/qemumigparamsdata/tls-enabled.reply b/tests/qemumigparam= sdata/tls-enabled.reply new file mode 100644 index 0000000000..001241b075 --- /dev/null +++ b/tests/qemumigparamsdata/tls-enabled.reply @@ -0,0 +1,14 @@ +{ + "id": "libvirt-1", + "return": { + "decompress-threads": 2, + "cpu-throttle-increment": 10, + "compress-threads": 8, + "tls-hostname": "", + "compress-level": 1, + "cpu-throttle-initial": 20, + "tls-creds": "objlibvirt_migrate_tls0", + "max-bandwidth": 33554432, + "downtime-limit": 300 + } +} diff --git a/tests/qemumigparamsdata/tls-enabled.xml b/tests/qemumigparamsd= ata/tls-enabled.xml new file mode 100644 index 0000000000..3e60c4dec3 --- /dev/null +++ b/tests/qemumigparamsdata/tls-enabled.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/tests/qemumigparamsdata/tls-hostname.json b/tests/qemumigparam= sdata/tls-hostname.json new file mode 100644 index 0000000000..abbd9f124b --- /dev/null +++ b/tests/qemumigparamsdata/tls-hostname.json @@ -0,0 +1,11 @@ +{ + "compress-level": 1, + "compress-threads": 8, + "decompress-threads": 2, + "cpu-throttle-initial": 20, + "cpu-throttle-increment": 10, + "tls-creds": "objlibvirt_migrate_tls0", + "tls-hostname": "f27-1.virt", + "max-bandwidth": 33554432, + "downtime-limit": 300 +} diff --git a/tests/qemumigparamsdata/tls-hostname.reply b/tests/qemumigpara= msdata/tls-hostname.reply new file mode 100644 index 0000000000..74f069f780 --- /dev/null +++ b/tests/qemumigparamsdata/tls-hostname.reply @@ -0,0 +1,14 @@ +{ + "id": "libvirt-1", + "return": { + "decompress-threads": 2, + "cpu-throttle-increment": 10, + "compress-threads": 8, + "tls-hostname": "f27-1.virt", + "compress-level": 1, + "cpu-throttle-initial": 20, + "tls-creds": "objlibvirt_migrate_tls0", + "max-bandwidth": 33554432, + "downtime-limit": 300 + } +} diff --git a/tests/qemumigparamsdata/tls-hostname.xml b/tests/qemumigparams= data/tls-hostname.xml new file mode 100644 index 0000000000..4310e789a0 --- /dev/null +++ b/tests/qemumigparamsdata/tls-hostname.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/tests/qemumigparamsdata/tls.json b/tests/qemumigparamsdata/tls= .json new file mode 100644 index 0000000000..02e90c60ea --- /dev/null +++ b/tests/qemumigparamsdata/tls.json @@ -0,0 +1,11 @@ +{ + "compress-level": 1, + "compress-threads": 8, + "decompress-threads": 2, + "cpu-throttle-initial": 20, + "cpu-throttle-increment": 10, + "tls-creds": "", + "tls-hostname": "", + "max-bandwidth": 33554432, + "downtime-limit": 300 +} diff --git a/tests/qemumigparamsdata/tls.reply b/tests/qemumigparamsdata/tl= s.reply new file mode 100644 index 0000000000..591eca6926 --- /dev/null +++ b/tests/qemumigparamsdata/tls.reply @@ -0,0 +1,14 @@ +{ + "id": "libvirt-1", + "return": { + "decompress-threads": 2, + "cpu-throttle-increment": 10, + "compress-threads": 8, + "tls-hostname": "", + "compress-level": 1, + "cpu-throttle-initial": 20, + "tls-creds": "", + "max-bandwidth": 33554432, + "downtime-limit": 300 + } +} diff --git a/tests/qemumigparamsdata/tls.xml b/tests/qemumigparamsdata/tls.= xml new file mode 100644 index 0000000000..71e5bbb7cb --- /dev/null +++ b/tests/qemumigparamsdata/tls.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/tests/qemumigparamstest.c b/tests/qemumigparamstest.c index 6fb404c24d..ba62aacc54 100644 --- a/tests/qemumigparamstest.c +++ b/tests/qemumigparamstest.c @@ -230,6 +230,9 @@ mymain(void) DO_TEST("unsupported"); DO_TEST("empty"); DO_TEST("basic"); + DO_TEST("tls"); + DO_TEST("tls-enabled"); + DO_TEST("tls-hostname"); =20 qemuTestDriverFree(&driver); =20 --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 152378059920513.691120041036243; Sun, 15 Apr 2018 01:23:19 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id D87EF13A9A; Sun, 15 Apr 2018 08:23:16 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 91E1D17D43; Sun, 15 Apr 2018 08:23:16 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 204F7180BADA; Sun, 15 Apr 2018 08:23:16 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgHeK008959 for ; Wed, 11 Apr 2018 10:42:17 -0400 Received: by smtp.corp.redhat.com (Postfix) id 9F9E32026E0E; Wed, 11 Apr 2018 14:42:17 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 474212026E03 for ; Wed, 11 Apr 2018 14:42:17 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 35EC1100D55; Wed, 11 Apr 2018 16:42:11 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:57 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 67/73] qemu: Store API flags for async jobs in qemuDomainJobObj X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Sun, 15 Apr 2018 08:23:17 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" When an async job is running, we sometimes need to know how it was started to distinguish between several types of the job, e.g., post-copy vs. normal migration. So far we added a specific bool item to qemuDomainJobObj for such cases, which doesn't scale very well and storing such bools in status XML would be painful so we didn't do it. A better approach is to store the flags passed to the API which started the async job, which can be easily stored in status XML. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_domain.c | 10 ++++++++-- src/qemu/qemu_domain.h | 4 +++- src/qemu/qemu_driver.c | 31 +++++++++++++++++++------------ src/qemu/qemu_migration.c | 20 +++++++++++++------- src/qemu/qemu_process.c | 5 +++-- src/qemu/qemu_process.h | 3 ++- 6 files changed, 48 insertions(+), 25 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index e3f58e45cb..bf04053607 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -339,6 +339,7 @@ qemuDomainObjResetAsyncJob(qemuDomainObjPrivatePtr priv) VIR_FREE(job->current); qemuMigrationParamsFree(job->migParams); job->migParams =3D NULL; + job->apiFlags =3D 0; } =20 void @@ -354,6 +355,7 @@ qemuDomainObjRestoreJob(virDomainObjPtr obj, job->asyncOwner =3D priv->job.asyncOwner; job->phase =3D priv->job.phase; VIR_STEAL_PTR(job->migParams, priv->job.migParams); + job->apiFlags =3D priv->job.apiFlags; =20 qemuDomainObjResetJob(priv); qemuDomainObjResetAsyncJob(priv); @@ -5805,7 +5807,8 @@ qemuDomainObjBeginJobInternal(virQEMUDriverPtr driver, asyncDuration =3D now - priv->job.asyncStarted; =20 VIR_WARN("Cannot start job (%s, %s) for domain %s; " - "current job is (%s, %s) owned by (%llu %s, %llu %s) " + "current job is (%s, %s) " + "owned by (%llu %s, %llu %s (flags=3D0x%lx)) " "for (%llus, %llus)", qemuDomainJobTypeToString(job), qemuDomainAsyncJobTypeToString(asyncJob), @@ -5814,6 +5817,7 @@ qemuDomainObjBeginJobInternal(virQEMUDriverPtr driver, qemuDomainAsyncJobTypeToString(priv->job.asyncJob), priv->job.owner, NULLSTR(priv->job.ownerAPI), priv->job.asyncOwner, NULLSTR(priv->job.asyncOwnerAPI), + priv->job.apiFlags, duration / 1000, asyncDuration / 1000); =20 if (nested || qemuDomainNestedJobAllowed(priv, job)) @@ -5877,7 +5881,8 @@ int qemuDomainObjBeginJob(virQEMUDriverPtr driver, int qemuDomainObjBeginAsyncJob(virQEMUDriverPtr driver, virDomainObjPtr obj, qemuDomainAsyncJob asyncJob, - virDomainJobOperation operation) + virDomainJobOperation operation, + unsigned long apiFlags) { qemuDomainObjPrivatePtr priv; =20 @@ -5887,6 +5892,7 @@ int qemuDomainObjBeginAsyncJob(virQEMUDriverPtr drive= r, =20 priv =3D obj->privateData; priv->job.current->operation =3D operation; + priv->job.apiFlags =3D apiFlags; return 0; } =20 diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index 2bb3e0a788..2146ff00a9 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -182,6 +182,7 @@ struct _qemuDomainJobObj { bool dumpCompleted; /* dump completed */ =20 qemuMigrationParamsPtr migParams; + unsigned long apiFlags; /* flags passed to the API which started the a= sync job */ }; =20 typedef void (*qemuDomainCleanupCallback)(virQEMUDriverPtr driver, @@ -493,7 +494,8 @@ int qemuDomainObjBeginJob(virQEMUDriverPtr driver, int qemuDomainObjBeginAsyncJob(virQEMUDriverPtr driver, virDomainObjPtr obj, qemuDomainAsyncJob asyncJob, - virDomainJobOperation operation) + virDomainJobOperation operation, + unsigned long apiFlags) ATTRIBUTE_RETURN_CHECK; int qemuDomainObjBeginNestedJob(virQEMUDriverPtr driver, virDomainObjPtr obj, diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 8917beae35..198020a0e4 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -267,7 +267,7 @@ qemuAutostartDomain(virDomainObjPtr vm, if (vm->autostart && !virDomainObjIsActive(vm)) { if (qemuProcessBeginJob(driver, vm, - VIR_DOMAIN_JOB_OPERATION_START) < 0) { + VIR_DOMAIN_JOB_OPERATION_START, flags) < 0= ) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Failed to start job on VM '%s': %s"), vm->def->name, virGetLastErrorMessage()); @@ -1779,7 +1779,8 @@ static virDomainPtr qemuDomainCreateXML(virConnectPtr= conn, virObjectRef(vm); def =3D NULL; =20 - if (qemuProcessBeginJob(driver, vm, VIR_DOMAIN_JOB_OPERATION_START) < = 0) { + if (qemuProcessBeginJob(driver, vm, VIR_DOMAIN_JOB_OPERATION_START, + flags) < 0) { qemuDomainRemoveInactiveJob(driver, vm); goto cleanup; } @@ -3345,7 +3346,7 @@ qemuDomainSaveInternal(virQEMUDriverPtr driver, goto cleanup; =20 if (qemuDomainObjBeginAsyncJob(driver, vm, QEMU_ASYNC_JOB_SAVE, - VIR_DOMAIN_JOB_OPERATION_SAVE) < 0) + VIR_DOMAIN_JOB_OPERATION_SAVE, flags) <= 0) goto cleanup; =20 if (!virDomainObjIsActive(vm)) { @@ -3953,7 +3954,8 @@ qemuDomainCoreDumpWithFormat(virDomainPtr dom, =20 if (qemuDomainObjBeginAsyncJob(driver, vm, QEMU_ASYNC_JOB_DUMP, - VIR_DOMAIN_JOB_OPERATION_DUMP) < 0) + VIR_DOMAIN_JOB_OPERATION_DUMP, + flags) < 0) goto cleanup; =20 if (!virDomainObjIsActive(vm)) { @@ -4178,7 +4180,8 @@ processWatchdogEvent(virQEMUDriverPtr driver, case VIR_DOMAIN_WATCHDOG_ACTION_DUMP: if (qemuDomainObjBeginAsyncJob(driver, vm, QEMU_ASYNC_JOB_DUMP, - VIR_DOMAIN_JOB_OPERATION_DUMP) < 0)= { + VIR_DOMAIN_JOB_OPERATION_DUMP, + flags) < 0) { goto cleanup; } =20 @@ -4264,9 +4267,10 @@ processGuestPanicEvent(virQEMUDriverPtr driver, virObjectEventPtr event =3D NULL; virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); bool removeInactive =3D false; + unsigned long flags =3D VIR_DUMP_MEMORY_ONLY; =20 if (qemuDomainObjBeginAsyncJob(driver, vm, QEMU_ASYNC_JOB_DUMP, - VIR_DOMAIN_JOB_OPERATION_DUMP) < 0) + VIR_DOMAIN_JOB_OPERATION_DUMP, flags) <= 0) goto cleanup; =20 if (!virDomainObjIsActive(vm)) { @@ -4297,7 +4301,7 @@ processGuestPanicEvent(virQEMUDriverPtr driver, =20 switch (action) { case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_DESTROY: - if (doCoreDumpToAutoDumpPath(driver, vm, VIR_DUMP_MEMORY_ONLY) < 0) + if (doCoreDumpToAutoDumpPath(driver, vm, flags) < 0) goto endjob; ATTRIBUTE_FALLTHROUGH; =20 @@ -4314,7 +4318,7 @@ processGuestPanicEvent(virQEMUDriverPtr driver, break; =20 case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_RESTART: - if (doCoreDumpToAutoDumpPath(driver, vm, VIR_DUMP_MEMORY_ONLY) < 0) + if (doCoreDumpToAutoDumpPath(driver, vm, flags) < 0) goto endjob; ATTRIBUTE_FALLTHROUGH; =20 @@ -6769,7 +6773,8 @@ qemuDomainRestoreFlags(virConnectPtr conn, priv->hookRun =3D true; } =20 - if (qemuProcessBeginJob(driver, vm, VIR_DOMAIN_JOB_OPERATION_RESTORE) = < 0) + if (qemuProcessBeginJob(driver, vm, VIR_DOMAIN_JOB_OPERATION_RESTORE, + flags) < 0) goto cleanup; =20 ret =3D qemuDomainSaveImageStartVM(conn, driver, vm, &fd, data, path, @@ -7357,7 +7362,8 @@ qemuDomainCreateWithFlags(virDomainPtr dom, unsigned = int flags) if (virDomainCreateWithFlagsEnsureACL(dom->conn, vm->def) < 0) goto cleanup; =20 - if (qemuProcessBeginJob(driver, vm, VIR_DOMAIN_JOB_OPERATION_START) < = 0) + if (qemuProcessBeginJob(driver, vm, VIR_DOMAIN_JOB_OPERATION_START, + flags) < 0) goto cleanup; =20 if (virDomainObjIsActive(vm)) { @@ -15208,7 +15214,7 @@ qemuDomainSnapshotCreateXML(virDomainPtr domain, * 'savevm' blocks the monitor. External snapshot will then modify the * job mask appropriately. */ if (qemuDomainObjBeginAsyncJob(driver, vm, QEMU_ASYNC_JOB_SNAPSHOT, - VIR_DOMAIN_JOB_OPERATION_SNAPSHOT) < 0) + VIR_DOMAIN_JOB_OPERATION_SNAPSHOT, flag= s) < 0) goto cleanup; =20 qemuDomainObjSetAsyncJobMask(vm, QEMU_JOB_NONE); @@ -15807,7 +15813,8 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr sna= pshot, } =20 if (qemuProcessBeginJob(driver, vm, - VIR_DOMAIN_JOB_OPERATION_SNAPSHOT_REVERT) < 0) + VIR_DOMAIN_JOB_OPERATION_SNAPSHOT_REVERT, + flags) < 0) goto cleanup; =20 if (!(snap =3D qemuSnapObjFromSnapshot(vm, snapshot))) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 42194c0ea8..431875c762 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -80,7 +80,8 @@ VIR_ENUM_IMPL(qemuMigrationJobPhase, QEMU_MIGRATION_PHASE= _LAST, static int qemuMigrationJobStart(virQEMUDriverPtr driver, virDomainObjPtr vm, - qemuDomainAsyncJob job) + qemuDomainAsyncJob job, + unsigned long apiFlags) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK; =20 static void @@ -1985,7 +1986,8 @@ qemuMigrationSrcBegin(virConnectPtr conn, qemuDomainAsyncJob asyncJob; =20 if ((flags & VIR_MIGRATE_CHANGE_PROTECTION)) { - if (qemuMigrationJobStart(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT= ) < 0) + if (qemuMigrationJobStart(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT, + flags) < 0) goto cleanup; asyncJob =3D QEMU_ASYNC_JOB_MIGRATION_OUT; } else { @@ -2320,7 +2322,8 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, !!(flags & VIR_MIGRATE_NON_SHARED= _INC)) < 0) goto cleanup; =20 - if (qemuMigrationJobStart(driver, vm, QEMU_ASYNC_JOB_MIGRATION_IN) < 0) + if (qemuMigrationJobStart(driver, vm, QEMU_ASYNC_JOB_MIGRATION_IN, + flags) < 0) goto cleanup; qemuMigrationJobSetPhase(driver, vm, QEMU_MIGRATION_PHASE_PREPARE); =20 @@ -4440,7 +4443,8 @@ qemuMigrationSrcPerformJob(virQEMUDriverPtr driver, virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); qemuDomainObjPrivatePtr priv =3D vm->privateData; =20 - if (qemuMigrationJobStart(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT) < = 0) + if (qemuMigrationJobStart(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT, + flags) < 0) goto cleanup; =20 if (!virDomainObjIsActive(vm) && !(flags & VIR_MIGRATE_OFFLINE)) { @@ -4552,7 +4556,8 @@ qemuMigrationSrcPerformPhase(virQEMUDriverPtr driver, =20 /* If we didn't start the job in the begin phase, start it now. */ if (!(flags & VIR_MIGRATE_CHANGE_PROTECTION)) { - if (qemuMigrationJobStart(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT= ) < 0) + if (qemuMigrationJobStart(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT, + flags) < 0) goto cleanup; } else if (!qemuMigrationJobIsActive(vm, QEMU_ASYNC_JOB_MIGRATION_OUT)= ) { goto cleanup; @@ -5291,7 +5296,8 @@ qemuMigrationSrcCancel(virQEMUDriverPtr driver, static int qemuMigrationJobStart(virQEMUDriverPtr driver, virDomainObjPtr vm, - qemuDomainAsyncJob job) + qemuDomainAsyncJob job, + unsigned long apiFlags) { qemuDomainObjPrivatePtr priv =3D vm->privateData; virDomainJobOperation op; @@ -5307,7 +5313,7 @@ qemuMigrationJobStart(virQEMUDriverPtr driver, JOB_MASK(QEMU_JOB_MIGRATION_OP); } =20 - if (qemuDomainObjBeginAsyncJob(driver, vm, job, op) < 0) + if (qemuDomainObjBeginAsyncJob(driver, vm, job, op, apiFlags) < 0) return -1; =20 priv->job.current->statsType =3D QEMU_DOMAIN_JOB_STATS_TYPE_MIGRATION; diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 6aa4f4ed71..b4bb7eb8a5 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -4189,10 +4189,11 @@ qemuProcessIncomingDefNew(virQEMUCapsPtr qemuCaps, int qemuProcessBeginJob(virQEMUDriverPtr driver, virDomainObjPtr vm, - virDomainJobOperation operation) + virDomainJobOperation operation, + unsigned long apiFlags) { if (qemuDomainObjBeginAsyncJob(driver, vm, QEMU_ASYNC_JOB_START, - operation) < 0) + operation, apiFlags) < 0) return -1; =20 qemuDomainObjSetAsyncJobMask(vm, QEMU_JOB_NONE); diff --git a/src/qemu/qemu_process.h b/src/qemu/qemu_process.h index 2741115673..9dd5c97642 100644 --- a/src/qemu/qemu_process.h +++ b/src/qemu/qemu_process.h @@ -68,7 +68,8 @@ void qemuProcessIncomingDefFree(qemuProcessIncomingDefPtr= inc); =20 int qemuProcessBeginJob(virQEMUDriverPtr driver, virDomainObjPtr vm, - virDomainJobOperation operation); + virDomainJobOperation operation, + unsigned long apiFlags); void qemuProcessEndJob(virQEMUDriverPtr driver, virDomainObjPtr vm); =20 --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523780593981901.8894404284736; Sun, 15 Apr 2018 01:23:13 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id AEB863135530; Sun, 15 Apr 2018 08:23:12 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 80F80176DB; Sun, 15 Apr 2018 08:23:12 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 369DD5BC01; Sun, 15 Apr 2018 08:23:12 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgHkY008939 for ; Wed, 11 Apr 2018 10:42:17 -0400 Received: by smtp.corp.redhat.com (Postfix) id 6A5EFAB3E2; Wed, 11 Apr 2018 14:42:17 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 4A13FAB3E4 for ; Wed, 11 Apr 2018 14:42:17 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 3884810037D; Wed, 11 Apr 2018 16:42:11 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:58 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 68/73] qemu: Properly avoid cancelling memory-only dump X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.44]); Sun, 15 Apr 2018 08:23:13 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" migrate_cancel QMP command cannot be used for cancelling memory-only dumps and priv->job.dump_memory_only is used for reporting an error if someone calls virDomainAbortJob when memory-only dump job is running. Since commit 150930e3098 the dump_memory_only flag is set only dump-guest-memory command was called without the detach parameter. This would incorrectly allow libvirt to send migrate_cancel while the detached memory-only dump is running. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_driver.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 198020a0e4..4af6d58fb1 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -3794,12 +3794,12 @@ qemuDumpToFd(virQEMUDriverPtr driver, if (qemuSecuritySetImageFDLabel(driver->securityManager, vm->def, fd) = < 0) return -1; =20 - if (detach) { + priv->job.dump_memory_only =3D true; + + if (detach) priv->job.current->statsType =3D QEMU_DOMAIN_JOB_STATS_TYPE_MEMDUM= P; - } else { + else VIR_FREE(priv->job.current); - priv->job.dump_memory_only =3D true; - } =20 if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) return -1; @@ -13472,7 +13472,7 @@ static int qemuDomainAbortJob(virDomainPtr dom) =20 priv =3D vm->privateData; =20 - if (!priv->job.asyncJob || priv->job.dump_memory_only) { + if (!priv->job.asyncJob) { virReportError(VIR_ERR_OPERATION_INVALID, "%s", _("no job is active on the domain")); goto endjob; @@ -13485,6 +13485,13 @@ static int qemuDomainAbortJob(virDomainPtr dom) goto endjob; } =20 + if (priv->job.asyncJob =3D=3D QEMU_ASYNC_JOB_DUMP && + priv->job.dump_memory_only) { + virReportError(VIR_ERR_OPERATION_INVALID, "%s", + _("cannot abort memory-only dump")); + goto endjob; + } + if (priv->job.asyncJob =3D=3D QEMU_ASYNC_JOB_MIGRATION_OUT && (priv->job.current->status =3D=3D QEMU_DOMAIN_JOB_STATUS_POSTCOPY = || (virDomainObjGetState(vm, &reason) =3D=3D VIR_DOMAIN_PAUSED && --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457821619976.7992401378939; Wed, 11 Apr 2018 07:43:41 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 0A0A5C01CB71; Wed, 11 Apr 2018 14:43:38 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id CEA1A6592E; Wed, 11 Apr 2018 14:43:37 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 931FC5BC05; Wed, 11 Apr 2018 14:43:37 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgGa9008832 for ; Wed, 11 Apr 2018 10:42:17 -0400 Received: by smtp.corp.redhat.com (Postfix) id 74389202698A; Wed, 11 Apr 2018 14:42:17 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 53F3E2026E0E for ; Wed, 11 Apr 2018 14:42:17 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 3AE7E100D56; Wed, 11 Apr 2018 16:42:11 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:59 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 69/73] qemu: Drop priv->job.dump_memory_only bool X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Wed, 11 Apr 2018 14:43:38 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" We store the flags passed to the API which started QEMU_ASYNC_JOB_DUMP and we can use them to check whether a memory-only dump is running. There's no need for a specific bool flag. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_domain.c | 1 - src/qemu/qemu_domain.h | 1 - src/qemu/qemu_driver.c | 4 +--- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index bf04053607..9343f41f57 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -329,7 +329,6 @@ qemuDomainObjResetAsyncJob(qemuDomainObjPrivatePtr priv) job->asyncStarted =3D 0; job->phase =3D 0; job->mask =3D QEMU_JOB_DEFAULT_MASK; - job->dump_memory_only =3D false; job->abortJob =3D false; job->spiceMigration =3D false; job->spiceMigrated =3D false; diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index 2146ff00a9..8d608da121 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -170,7 +170,6 @@ struct _qemuDomainJobObj { unsigned long long asyncStarted; /* When the current async job star= ted */ int phase; /* Job phase (mainly for migration= s) */ unsigned long long mask; /* Jobs allowed during async job */ - bool dump_memory_only; /* use dump-guest-memory to do dum= p */ qemuDomainJobInfoPtr current; /* async job progress data */ qemuDomainJobInfoPtr completed; /* statistics data of a recently c= ompleted job */ bool abortJob; /* abort of the job requested */ diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 4af6d58fb1..3fac038583 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -3794,8 +3794,6 @@ qemuDumpToFd(virQEMUDriverPtr driver, if (qemuSecuritySetImageFDLabel(driver->securityManager, vm->def, fd) = < 0) return -1; =20 - priv->job.dump_memory_only =3D true; - if (detach) priv->job.current->statsType =3D QEMU_DOMAIN_JOB_STATS_TYPE_MEMDUM= P; else @@ -13486,7 +13484,7 @@ static int qemuDomainAbortJob(virDomainPtr dom) } =20 if (priv->job.asyncJob =3D=3D QEMU_ASYNC_JOB_DUMP && - priv->job.dump_memory_only) { + priv->job.apiFlags & VIR_DUMP_MEMORY_ONLY) { virReportError(VIR_ERR_OPERATION_INVALID, "%s", _("cannot abort memory-only dump")); goto endjob; --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523457824062602.5157497102593; Wed, 11 Apr 2018 07:43:44 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id BAD0858; Wed, 11 Apr 2018 14:43:42 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 9390178BA5; Wed, 11 Apr 2018 14:43:42 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 5CD11181D0A0; Wed, 11 Apr 2018 14:43:42 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgHeg008948 for ; Wed, 11 Apr 2018 10:42:17 -0400 Received: by smtp.corp.redhat.com (Postfix) id 89038946D5; Wed, 11 Apr 2018 14:42:17 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 67F58AB3E5 for ; Wed, 11 Apr 2018 14:42:17 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 3D296100D57; Wed, 11 Apr 2018 16:42:11 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:42:00 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 70/73] qemu: Drop priv->job.postcopyEnabled bool X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Wed, 11 Apr 2018 14:43:43 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" We store the flags passed to the API which started the migration. Let's use them instead of a separate bool to check if post-copy migration was requested. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_domain.c | 1 - src/qemu/qemu_domain.h | 1 - src/qemu/qemu_driver.c | 2 +- src/qemu/qemu_migration.c | 4 ---- 4 files changed, 1 insertion(+), 7 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 9343f41f57..71c3a917c1 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -332,7 +332,6 @@ qemuDomainObjResetAsyncJob(qemuDomainObjPrivatePtr priv) job->abortJob =3D false; job->spiceMigration =3D false; job->spiceMigrated =3D false; - job->postcopyEnabled =3D false; job->dumpCompleted =3D false; VIR_FREE(job->error); VIR_FREE(job->current); diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index 8d608da121..91385da2a9 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -176,7 +176,6 @@ struct _qemuDomainJobObj { bool spiceMigration; /* we asked for spice migration an= d we * should wait for it to finish */ bool spiceMigrated; /* spice migration completed */ - bool postcopyEnabled; /* post-copy migration was enabled= */ char *error; /* job event completion error */ bool dumpCompleted; /* dump completed */ =20 diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 3fac038583..1b37c0b45a 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -13840,7 +13840,7 @@ qemuDomainMigrateStartPostCopy(virDomainPtr dom, goto endjob; } =20 - if (!priv->job.postcopyEnabled) { + if (!(priv->job.apiFlags & VIR_MIGRATE_POSTCOPY)) { virReportError(VIR_ERR_OPERATION_INVALID, "%s", _("switching to post-copy requires migration to be " "started with VIR_MIGRATE_POSTCOPY flag")); diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 431875c762..ad87aebd3b 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -2406,8 +2406,6 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, migParams) < 0) goto stopjob; =20 - priv->job.postcopyEnabled =3D flags & VIR_MIGRATE_POSTCOPY; - if (mig->nbd && flags & (VIR_MIGRATE_NON_SHARED_DISK | VIR_MIGRATE_NON_SHARED_INC)= && virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_NBD_SERVER)) { @@ -3346,8 +3344,6 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, migParams) < 0) goto error; =20 - priv->job.postcopyEnabled =3D flags & VIR_MIGRATE_POSTCOPY; - if (migrate_flags & (QEMU_MONITOR_MIGRATE_NON_SHARED_DISK | QEMU_MONITOR_MIGRATE_NON_SHARED_INC)) { if (mig->nbd) { --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 16:46:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 152345782727687.76446254000325; Wed, 11 Apr 2018 07:43:47 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 176E13130671; Wed, 11 Apr 2018 14:43:46 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id D65287494E; Wed, 11 Apr 2018 14:43:45 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 921785BC12; Wed, 11 Apr 2018 14:43:45 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgHpE008975 for ; Wed, 11 Apr 2018 10:42:18 -0400 Received: by smtp.corp.redhat.com (Postfix) id CE20710B0F38; Wed, 11 Apr 2018 14:42:17 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 7575310B0F39 for ; Wed, 11 Apr 2018 14:42:17 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 3F773100D58; Wed, 11 Apr 2018 16:42:11 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:42:01 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 71/73] qemu: Store API flags for async jobs in status XML X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.47]); Wed, 11 Apr 2018 14:43:46 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" This will help us decide what to do when libvirtd is restarted while an async job is running. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_domain.c | 8 + .../migration-out-nbd-out.xml | 450 +++++++++++++++++- 2 files changed, 457 insertions(+), 1 deletion(-) mode change 120000 =3D> 100644 tests/qemustatusxml2xmldata/migration-out-n= bd-out.xml diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 71c3a917c1..8cd00576c8 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -2087,6 +2087,9 @@ qemuDomainObjPrivateXMLFormatJob(virBufferPtr buf, priv->job.phase)= ); } =20 + if (priv->job.asyncJob !=3D QEMU_ASYNC_JOB_NONE) + virBufferAsprintf(&attrBuf, " flags=3D'0x%lx'", priv->job.apiFlags= ); + if (priv->job.asyncJob =3D=3D QEMU_ASYNC_JOB_MIGRATION_OUT) { size_t i; virDomainDiskDefPtr disk; @@ -2382,6 +2385,11 @@ qemuDomainObjPrivateXMLParseJob(virDomainObjPtr vm, } } =20 + if (virXPathULongHex("string(@flags)", ctxt, &priv->job.apiFlags) =3D= =3D -2) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid job flags"= )); + goto cleanup; + } + if ((n =3D virXPathNodeSet("./disk[@migrating=3D'yes']", ctxt, &nodes)= ) < 0) goto cleanup; =20 diff --git a/tests/qemustatusxml2xmldata/migration-out-nbd-out.xml b/tests/= qemustatusxml2xmldata/migration-out-nbd-out.xml deleted file mode 120000 index a4830f04a8..0000000000 --- a/tests/qemustatusxml2xmldata/migration-out-nbd-out.xml +++ /dev/null @@ -1 +0,0 @@ -migration-out-nbd-in.xml \ No newline at end of file diff --git a/tests/qemustatusxml2xmldata/migration-out-nbd-out.xml b/tests/= qemustatusxml2xmldata/migration-out-nbd-out.xml new file mode 100644 index 0000000000..05da1f81c6 --- /dev/null +++ b/tests/qemustatusxml2xmldata/migration-out-nbd-out.xml @@ -0,0 +1,449 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + upstream + dcf47dbd-46d1-4d5b-b442-262a806a333a + 1024000 + 1024000 + + + + 8 + + + + + /machine + + + hvm + + + + + + + + + + + + + + + + + + + destroy + restart + restart + + + + + + /usr/bin/qemu-system-x86_64 + + + + + + + + base.qcow2 + + + + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+ + + +
+ + + + + + + + + + + + + +
+ +