From nobody Thu May 15 13:31:23 2025 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 Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1508326174611597.1427422953943; Wed, 18 Oct 2017 04:29:34 -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 669BA4900C; Wed, 18 Oct 2017 11:29: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 495DA6933B; Wed, 18 Oct 2017 11:29: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 07A4F410B3; Wed, 18 Oct 2017 11:29:33 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v9IBTW6K018771 for ; Wed, 18 Oct 2017 07:29:32 -0400 Received: by smtp.corp.redhat.com (Postfix) id 62A236932B; Wed, 18 Oct 2017 11:29:32 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.105]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 11E7C66856 for ; Wed, 18 Oct 2017 11:29:29 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id A7EDD1020BC; Wed, 18 Oct 2017 13:29:28 +0200 (CEST) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 669BA4900C Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=libvir-list-bounces@redhat.com From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 18 Oct 2017 13:29:24 +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.5.11.16 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 3/5] qemu: Use bitmap with migration 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.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Wed, 18 Oct 2017 11:29:33 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" All calls to qemuMonitorGetMigrationCapability in QEMU driver are replaced with qemuMigrationCapsGet. Signed-off-by: Jiri Denemark Reviewed-by: John Ferlan --- src/qemu/qemu_domain.c | 7 +++++++ src/qemu/qemu_driver.c | 32 +++++++++++++------------------- src/qemu/qemu_migration.c | 45 ++++++++++++++++++++++++++-----------------= -- src/qemu/qemu_migration.h | 4 ++++ 4 files changed, 50 insertions(+), 38 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index a8cabc5727..1dcf263ce5 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -10184,6 +10184,13 @@ qemuDomainCheckMigrationCapabilities(virQEMUDriver= Ptr driver, } } =20 + /* 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; =20 cleanup: diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index fb4d722368..7f77dcb994 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -13413,20 +13413,17 @@ qemuDomainMigrateGetCompressionCache(virDomainPtr= dom, =20 priv =3D vm->privateData; =20 - qemuDomainObjEnterMonitor(driver, vm); - - ret =3D qemuMonitorGetMigrationCapability( - priv->mon, - QEMU_MONITOR_MIGRATION_CAPS_XBZRLE); - if (ret =3D=3D 0) { + if (!qemuMigrationCapsGet(vm, QEMU_MONITOR_MIGRATION_CAPS_XBZRLE)) { virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", _("Compressed migration is not supported by " "QEMU binary")); - ret =3D -1; - } else if (ret > 0) { - ret =3D qemuMonitorGetMigrationCacheSize(priv->mon, cacheSize); + goto endjob; } =20 + qemuDomainObjEnterMonitor(driver, vm); + + ret =3D qemuMonitorGetMigrationCacheSize(priv->mon, cacheSize); + if (qemuDomainObjExitMonitor(driver, vm) < 0) ret =3D -1; =20 @@ -13467,21 +13464,18 @@ qemuDomainMigrateSetCompressionCache(virDomainPtr= dom, =20 priv =3D vm->privateData; =20 - qemuDomainObjEnterMonitor(driver, vm); - - ret =3D qemuMonitorGetMigrationCapability( - priv->mon, - QEMU_MONITOR_MIGRATION_CAPS_XBZRLE); - if (ret =3D=3D 0) { + if (!qemuMigrationCapsGet(vm, QEMU_MONITOR_MIGRATION_CAPS_XBZRLE)) { virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", _("Compressed migration is not supported by " "QEMU binary")); - ret =3D -1; - } else if (ret > 0) { - VIR_DEBUG("Setting compression cache to %llu B", cacheSize); - ret =3D qemuMonitorSetMigrationCacheSize(priv->mon, cacheSize); + goto endjob; } =20 + qemuDomainObjEnterMonitor(driver, vm); + + VIR_DEBUG("Setting compression cache to %llu B", cacheSize); + ret =3D qemuMonitorSetMigrationCacheSize(priv->mon, cacheSize); + if (qemuDomainObjExitMonitor(driver, vm) < 0) ret =3D -1; =20 diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index b286d68061..72edbb667c 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -1274,17 +1274,12 @@ qemuMigrationSetOption(virQEMUDriverPtr driver, qemuDomainObjPrivatePtr priv =3D vm->privateData; int ret; =20 - if (qemuDomainObjEnterMonitorAsync(driver, vm, job) < 0) - return -1; + if (!qemuMigrationCapsGet(vm, capability)) { + if (!state) { + /* Unsupported but we want it off anyway */ + return 0; + } =20 - ret =3D qemuMonitorGetMigrationCapability(priv->mon, capability); - - if (ret < 0) { - goto cleanup; - } else if (ret =3D=3D 0 && !state) { - /* Unsupported but we want it off anyway */ - goto cleanup; - } else if (ret =3D=3D 0) { if (job =3D=3D QEMU_ASYNC_JOB_MIGRATION_IN) { virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, _("Migration option '%s' is not supported by " @@ -1296,15 +1291,17 @@ qemuMigrationSetOption(virQEMUDriverPtr driver, "source QEMU binary"), qemuMonitorMigrationCapsTypeToString(capability= )); } - ret =3D -1; - goto cleanup; + return -1; } =20 + if (qemuDomainObjEnterMonitorAsync(driver, vm, job) < 0) + return -1; + ret =3D qemuMonitorSetMigrationCapability(priv->mon, capability, state= ); =20 - cleanup: if (qemuDomainObjExitMonitor(driver, vm) < 0) ret =3D -1; + return ret; } =20 @@ -5923,12 +5920,8 @@ qemuMigrationReset(virQEMUDriverPtr driver, goto cleanup; =20 for (cap =3D 0; cap < QEMU_MONITOR_MIGRATION_CAPS_LAST; cap++) { - /* "events" capability is set (when supported) in qemuConnectMonit= or - * and should never be cleared */ - if (cap =3D=3D QEMU_MONITOR_MIGRATION_CAPS_EVENTS) - continue; - - if (qemuMigrationSetOption(driver, vm, cap, false, job) < 0) + if (qemuMigrationCapsGet(vm, cap) && + qemuMigrationSetOption(driver, vm, cap, false, job) < 0) goto cleanup; } =20 @@ -5989,3 +5982,17 @@ qemuMigrationFetchMirrorStats(virQEMUDriverPtr drive= r, 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 63a4325624..f634138f4d 100644 --- a/src/qemu/qemu_migration.h +++ b/src/qemu/qemu_migration.h @@ -326,4 +326,8 @@ qemuMigrationFetchMirrorStats(virQEMUDriverPtr driver, qemuDomainAsyncJob asyncJob, qemuDomainJobInfoPtr jobInfo); =20 +bool +qemuMigrationCapsGet(virDomainObjPtr vm, + qemuMonitorMigrationCaps cap); + #endif /* __QEMU_MIGRATION_H__ */ --=20 2.14.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list