[PATCH 04/12] migration/migration-pin: add qemu monitor callback functions

Jiang Jiacheng jiangjiacheng at huawei.com
Tue Jan 3 13:08:23 UTC 2023


From: zhengchuan <zhengchuan at huawei.com>

add qemu monitor callback functions

Signed-off-by:zhengchuan<zhengchuan at huawei.com>
---
 src/qemu/qemu_monitor.c      | 10 ++++++++++
 src/qemu/qemu_monitor.h      |  7 +++++++
 src/qemu/qemu_monitor_json.c | 16 ++++++++++++++++
 3 files changed, 33 insertions(+)

diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
index 734364e070..36ec923861 100644
--- a/src/qemu/qemu_monitor.c
+++ b/src/qemu/qemu_monitor.c
@@ -1380,6 +1380,16 @@ qemuMonitorEmitPRManagerStatusChanged(qemuMonitor *mon,
 }
 
 
+void
+qemuMonitorEmitMigrationPid(qemuMonitor *mon,
+                            int mpid)
+{
+    VIR_DEBUG("mon=%p, pass=%d", mon, mpid);
+
+    QEMU_MONITOR_CALLBACK(mon, domainMigrationPid, mon->vm, mpid);
+}
+
+
 void
 qemuMonitorEmitRdmaGidStatusChanged(qemuMonitor *mon,
                                     const char *netdev,
diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h
index 906a919f52..4eddd79779 100644
--- a/src/qemu/qemu_monitor.h
+++ b/src/qemu/qemu_monitor.h
@@ -362,6 +362,10 @@ typedef void (*qemuMonitorDomainMemoryDeviceSizeChange)(qemuMonitor *mon,
                                                         const char *alias,
                                                         unsigned long long size);
 
+typedef int (*qemuMonitorDomainMigrationPidCallback)(qemuMonitor *mon,
+                                                     virDomainObj *vm,
+                                                     int mcpid);
+
 typedef struct _qemuMonitorCallbacks qemuMonitorCallbacks;
 struct _qemuMonitorCallbacks {
     qemuMonitorEofNotifyCallback eofNotify;
@@ -397,6 +401,7 @@ struct _qemuMonitorCallbacks {
     qemuMonitorDomainMemoryFailureCallback domainMemoryFailure;
     qemuMonitorDomainMemoryDeviceSizeChange domainMemoryDeviceSizeChange;
     qemuMonitorDomainDeviceUnplugErrCallback domainDeviceUnplugError;
+    qemuMonitorDomainMigrationPidCallback domainMigrationPid;
 };
 
 qemuMonitor *qemuMonitorOpen(virDomainObj *vm,
@@ -499,6 +504,8 @@ void qemuMonitorEmitMigrationStatus(qemuMonitor *mon,
 void qemuMonitorEmitMigrationPass(qemuMonitor *mon,
                                   int pass);
 
+void qemuMonitorEmitMigrationPid(qemuMonitor *mon, int mpid);
+
 void qemuMonitorEmitAcpiOstInfo(qemuMonitor *mon,
                                 const char *alias,
                                 const char *slotType,
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index 9822097bd7..3129305107 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -84,6 +84,7 @@ static void qemuMonitorJSONHandleRdmaGidStatusChanged(qemuMonitor *mon, virJSONV
 static void qemuMonitorJSONHandleMemoryFailure(qemuMonitor *mon, virJSONValue *data);
 static void qemuMonitorJSONHandleMemoryDeviceSizeChange(qemuMonitor *mon, virJSONValue *data);
 static void qemuMonitorJSONHandleDeviceUnplugErr(qemuMonitor *mon, virJSONValue *data);
+static void qemuMonitorJSONHandleMigrationPid(qemuMonitor *mon, virJSONValue *data);
 
 typedef struct {
     const char *type;
@@ -106,6 +107,7 @@ static qemuEventHandler eventHandlers[] = {
     { "MEMORY_FAILURE", qemuMonitorJSONHandleMemoryFailure, },
     { "MIGRATION", qemuMonitorJSONHandleMigrationStatus, },
     { "MIGRATION_PASS", qemuMonitorJSONHandleMigrationPass, },
+    { "MIGRATION_PID", qemuMonitorJSONHandleMigrationPid, },
     { "NIC_RX_FILTER_CHANGED", qemuMonitorJSONHandleNicRxFilterChanged, },
     { "PR_MANAGER_STATUS_CHANGED", qemuMonitorJSONHandlePRManagerStatusChanged, },
     { "RDMA_GID_STATUS_CHANGED", qemuMonitorJSONHandleRdmaGidStatusChanged, },
@@ -129,6 +131,20 @@ static qemuEventHandler eventHandlers[] = {
     /* We use bsearch, so keep this list sorted.  */
 };
 
+static void
+qemuMonitorJSONHandleMigrationPid(qemuMonitor *mon,
+                                  virJSONValue *data)
+{
+    int mpid;
+
+    if (virJSONValueObjectGetNumberInt(data, "pid", &mpid) < 0) {
+        VIR_WARN("missing migration pid in migration-pid event");
+        return;
+    }
+
+    qemuMonitorEmitMigrationPid(mon, mpid);
+}
+
 static int
 qemuMonitorEventCompare(const void *key, const void *elt)
 {
-- 
2.33.0



More information about the libvir-list mailing list