]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: emit vcpu-removed event on unplug completion
authorAkash Kulhalli via Devel <devel@lists.libvirt.org>
Wed, 29 Apr 2026 12:13:26 +0000 (17:43 +0530)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 12 May 2026 11:39:07 +0000 (13:39 +0200)
Emit the vcpu-removed event when QEMU vCPU unplug completes.

Hook this into qemuDomainRemoveVcpu(), which covers both the
synchronous completion path and the DEVICE_DELETED-driven alias
removal path.

Some architectures may have multiple vcpus grouped under a single qemu
vcpu object; on those platforms a `vcpu-removed` event will be emitted
for each vcpu that is removed from this group.

Signed-off-by: Akash Kulhalli <akash.kulhalli@oracle.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
src/qemu/qemu_hotplug.c

index 71a64b08793bd5aa2d1048d310d09cd168eddfeb..31086b4b8968cfcd44c3ffda2e8170d61bf383ce 100644 (file)
@@ -6727,6 +6727,7 @@ qemuDomainRemoveVcpu(virDomainObj *vm,
     unsigned int nvcpus = vcpupriv->vcpus;
     size_t i;
     ssize_t offlineVcpuWithTid = -1;
+    virObjectEvent *event = NULL;
 
     if (qemuDomainRefreshVcpuInfo(vm, VIR_ASYNC_JOB_NONE, false) < 0)
         return -1;
@@ -6744,6 +6745,10 @@ qemuDomainRemoveVcpu(virDomainObj *vm,
             if (offlineVcpuWithTid == -1)
                 offlineVcpuWithTid = i;
         }
+
+        /* fire the `vcpu-removed` event for each removed vcpu */
+        event = virDomainEventVcpuRemovedNewFromObj(vm, i);
+        virObjectEventStateQueue(priv->driver->domainEventState, event);
     }
 
     if (offlineVcpuWithTid != -1) {