Re: [libvirt] [PATCH v2 39/73] qemu: Set migration capabilities automatically

2018-04-15 Thread Ján Tomko

On Wed, Apr 11, 2018 at 04:41:29PM +0200, Jiri Denemark wrote:

Most migration capabilities are directly connected with
virDomainMigrateFlags so qemuMigrationParamsFromFlags can automatically
enable them.

Signed-off-by: Jiri Denemark 
---
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(-)



Reviewed-by: Ján Tomko 

Jano


signature.asc
Description: Digital signature
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

[libvirt] [PATCH v2 39/73] qemu: Set migration capabilities automatically

2018-04-11 Thread Jiri Denemark
Most migration capabilities are directly connected with
virDomainMigrateFlags so qemuMigrationParamsFromFlags can automatically
enable them.

Signed-off-by: Jiri Denemark 
---
 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;
 }
 
-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_POSTCOPY,
- 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;
 
-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_POSTCOPY,
- 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_params.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 */
 };
 
+typedef struct _qemuMigrationParamsFlagMapItem qemuMigrationParamsFlagMapItem;
+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[] = {
@@ -56,6 +63,21 @@ static const qemuMigrationParamsAlwaysOnItem 
qemuMigrationParamsAlwaysOn[] = {
  QEMU_MIGRATION_SOURCE},
 };
 
+/* Translation from virDomainMigrateFlags to qemuMonitorMigrationCaps. */
+static const qemuMigrationParamsFlagMapItem qemuMigrationParamsFlagMap[] = {
+{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},
+};
+
 
 static qemuMigrationParamsPtr
 qemuMigrationParamsNew(void)
@@ -97,12 +119,21 @@ qemuMigrationParamsFromFlags(virTypedParameterPtr params,
  qemuMigrationParty party)
 {
 qemuMigrationParamsPtr migParams;
+size_t i;
 
 if (!(migParams = qemuMigrationParamsNew()))
 return NULL;
 
-if (!params)
-return migParams;
+for (i = 0; i < ARRAY_CARDINALITY(qemuMigrationParamsFlagMap); i++) {
+qemuMonitorMigrationCaps cap = 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));
+}
+}
 
 #define GET(PARAM, VAR) \
 do { \
@@ -116,9 +147,11 @@ qemuMigrationParamsFromFlags(virTypedParameterPtr