*/
# define VIR_DOMAIN_JOB_DISK_TEMP_TOTAL "disk_temp_total"
+/**
+ * VIR_DOMAIN_JOB_VFIO_DATA_TRANSFERRED:
+ * virDomainGetJobStats field: number of bytes transferred by VFIO devices
+ * in that iteration, as VIR_TYPED_PARAM_ULLONG.
+ *
+ * Since: 10.6.0
+ */
+# define VIR_DOMAIN_JOB_VFIO_DATA_TRANSFERRED "vfio_data_transferred"
+
/**
* virConnectDomainEventGenericCallback:
* @conn: the connection pointer
stats->cpu_throttle_percentage) < 0)
goto error;
+ if (stats->vfio_data_transferred &&
+ virTypedParamsAddULLong(&par, &npar, &maxpar,
+ VIR_DOMAIN_JOB_VFIO_DATA_TRANSFERRED,
+ stats->vfio_data_transferred) < 0)
+ goto error;
+
done:
*type = virDomainJobStatusToType(jobData->status);
*params = par;
unsigned long long xbzrle_overflow;
int cpu_throttle_percentage;
+ unsigned long long vfio_data_transferred;
};
int qemuMonitorGetMigrationStats(qemuMonitor *mon,
virJSONValue *ram;
virJSONValue *disk;
virJSONValue *comp;
+ virJSONValue *vfio;
const char *statusstr;
int rc;
double mbps;
return -1;
}
}
+
+ vfio = virJSONValueObjectGetObject(ret, "vfio");
+ if (vfio) {
+ rc = virJSONValueObjectGetNumberUlong(vfio, "transferred",
+ &stats->vfio_data_transferred);
+ if (rc < 0) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("vfio migration was active, but 'transferred' data was missing"));
+ return -1;
+ }
+ }
break;
}