[PATCH 0/2] qemu: implement iommu coldplug/unplug

Adam Julis (2): syms: Properly export virDomainIOMMUDefFree() qemu: implement iommu coldplug/unplug src/libvirt_private.syms | 1 + src/qemu/qemu_driver.c | 20 ++++++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) -- 2.45.0

While the function is exported via header, the symbol itself was not. Signed-off-by: Adam Julis <ajulis@redhat.com> --- src/libvirt_private.syms | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 653c84a520..8d760aca04 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -488,6 +488,7 @@ virDomainInputSourceGrabToggleTypeToString; virDomainInputSourceGrabTypeFromString; virDomainInputSourceGrabTypeToString; virDomainInputTypeToString; +virDomainIOMMUDefFree; virDomainIOMMUModelTypeFromString; virDomainIOMMUModelTypeToString; virDomainIOThreadIDAdd; -- 2.45.0

Resolves: https://issues.redhat.com/browse/RHEL-23833 Signed-off-by: Adam Julis <ajulis@redhat.com> --- src/qemu/qemu_driver.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 67b9778c67..74d5e3bb86 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -6847,6 +6847,15 @@ qemuDomainAttachDeviceConfig(virDomainDef *vmdef, vmdef->vsock = g_steal_pointer(&dev->data.vsock); break; + case VIR_DOMAIN_DEVICE_IOMMU: + if (vmdef->iommu) { + virReportError(VIR_ERR_OPERATION_INVALID, "%s", + _("domain already has an iommu configuration")); + return -1; + } + vmdef->iommu = g_steal_pointer(&dev->data.iommu); + break; + case VIR_DOMAIN_DEVICE_VIDEO: case VIR_DOMAIN_DEVICE_GRAPHICS: case VIR_DOMAIN_DEVICE_HUB: @@ -6856,7 +6865,6 @@ qemuDomainAttachDeviceConfig(virDomainDef *vmdef, case VIR_DOMAIN_DEVICE_NONE: case VIR_DOMAIN_DEVICE_TPM: case VIR_DOMAIN_DEVICE_PANIC: - case VIR_DOMAIN_DEVICE_IOMMU: case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_LAST: @@ -7057,6 +7065,15 @@ qemuDomainDetachDeviceConfig(virDomainDef *vmdef, g_clear_pointer(&vmdef->vsock, virDomainVsockDefFree); break; + case VIR_DOMAIN_DEVICE_IOMMU: + if (!vmdef->iommu) { + virReportError(VIR_ERR_OPERATION_FAILED, "%s", + _("matching iommu config not found")); + return -1; + } + g_clear_pointer(&vmdef->iommu, virDomainIOMMUDefFree); + break; + case VIR_DOMAIN_DEVICE_VIDEO: case VIR_DOMAIN_DEVICE_GRAPHICS: case VIR_DOMAIN_DEVICE_HUB: @@ -7066,7 +7083,6 @@ qemuDomainDetachDeviceConfig(virDomainDef *vmdef, case VIR_DOMAIN_DEVICE_NONE: case VIR_DOMAIN_DEVICE_TPM: case VIR_DOMAIN_DEVICE_PANIC: - case VIR_DOMAIN_DEVICE_IOMMU: case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_LAST: -- 2.45.0

On 6/18/24 11:56, Adam Julis wrote:
Resolves: https://issues.redhat.com/browse/RHEL-23833 Signed-off-by: Adam Julis <ajulis@redhat.com> --- src/qemu/qemu_driver.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 67b9778c67..74d5e3bb86 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -6847,6 +6847,15 @@ qemuDomainAttachDeviceConfig(virDomainDef *vmdef, vmdef->vsock = g_steal_pointer(&dev->data.vsock); break;
+ case VIR_DOMAIN_DEVICE_IOMMU: + if (vmdef->iommu) { + virReportError(VIR_ERR_OPERATION_INVALID, "%s", + _("domain already has an iommu configuration"));
s/configuration/device/
+ return -1; + } + vmdef->iommu = g_steal_pointer(&dev->data.iommu); + break; + case VIR_DOMAIN_DEVICE_VIDEO: case VIR_DOMAIN_DEVICE_GRAPHICS: case VIR_DOMAIN_DEVICE_HUB: @@ -6856,7 +6865,6 @@ qemuDomainAttachDeviceConfig(virDomainDef *vmdef, case VIR_DOMAIN_DEVICE_NONE: case VIR_DOMAIN_DEVICE_TPM: case VIR_DOMAIN_DEVICE_PANIC: - case VIR_DOMAIN_DEVICE_IOMMU: case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_LAST: @@ -7057,6 +7065,15 @@ qemuDomainDetachDeviceConfig(virDomainDef *vmdef, g_clear_pointer(&vmdef->vsock, virDomainVsockDefFree); break;
+ case VIR_DOMAIN_DEVICE_IOMMU: + if (!vmdef->iommu) { + virReportError(VIR_ERR_OPERATION_FAILED, "%s", + _("matching iommu config not found"));
s/config/device/
+ return -1; + } + g_clear_pointer(&vmdef->iommu, virDomainIOMMUDefFree); + break; + case VIR_DOMAIN_DEVICE_VIDEO: case VIR_DOMAIN_DEVICE_GRAPHICS: case VIR_DOMAIN_DEVICE_HUB: @@ -7066,7 +7083,6 @@ qemuDomainDetachDeviceConfig(virDomainDef *vmdef, case VIR_DOMAIN_DEVICE_NONE: case VIR_DOMAIN_DEVICE_TPM: case VIR_DOMAIN_DEVICE_PANIC: - case VIR_DOMAIN_DEVICE_IOMMU: case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_LAST:
I'll fix both before merging. Michal

On 6/18/24 11:56, Adam Julis wrote:
Adam Julis (2): syms: Properly export virDomainIOMMUDefFree() qemu: implement iommu coldplug/unplug
src/libvirt_private.syms | 1 + src/qemu/qemu_driver.c | 20 ++++++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-)
Reviewed-by: Michal Privoznik <mprivozn@redhat.com> Michal
participants (2)
-
Adam Julis
-
Michal Prívozník