We need to track if iommufd object was added to the VM when we add
hotplug support.

Signed-off-by: Pavel Hrdina <[email protected]>
---
 src/qemu/qemu_command.c | 2 ++
 src/qemu/qemu_domain.c  | 6 ++++++
 src/qemu/qemu_domain.h  | 1 +
 3 files changed, 9 insertions(+)

diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 724f0cd8eb..cdf2f91ece 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -5366,6 +5366,8 @@ qemuBuildIOMMUFDCommandLine(virCommand *cmd,
     if (qemuBuildObjectCommandlineFromJSON(cmd, props) < 0)
         return -1;
 
+    priv->iommufdState = true;
+
     return 0;
 }
 
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index ada9d3431c..ccbfc8bac7 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -1976,6 +1976,7 @@ qemuDomainObjPrivateDataClear(qemuDomainObjPrivate *priv)
     priv->migrationRecoverSetup = false;
 
     g_clear_pointer(&priv->iommufd, qemuFDPassDirectFree);
+    priv->iommufdState = false;
 
     g_clear_pointer(&priv->memoryBackingDir, g_free);
 }
@@ -2844,6 +2845,9 @@ qemuDomainObjPrivateXMLFormat(virBuffer *buf,
                           priv->preMigrationMemlock);
     }
 
+    if (priv->iommufdState)
+        virBufferAddLit(buf, "<iommufd/>\n");
+
     return 0;
 }
 
@@ -3582,6 +3586,8 @@ qemuDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt,
         return -1;
     }
 
+    priv->iommufdState = virXPathBoolean("boolean(./iommufd)", ctxt) == 1;
+
     return 0;
 }
 
diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
index fa7d4ab40f..5755d2adb0 100644
--- a/src/qemu/qemu_domain.h
+++ b/src/qemu/qemu_domain.h
@@ -265,6 +265,7 @@ struct _qemuDomainObjPrivate {
     GHashTable *fds;
 
     qemuFDPassDirect *iommufd;
+    bool iommufdState; /* true if --object iommufd was added */
 
     char *memoryBackingDir;
 };
-- 
2.53.0

Reply via email to