When libvirt is restarted, the qemuProcessShutdownReboot command is
executed to restore the VM that is being restarted. In this case, a
coredump may occur when we hotplug a pci device since the PCI address
hasn't be inited yet. Moving the initialization of address to the front
of qemuProcessShutdownOrReboot to ensure that we have the address inited.
Signed-off-by: Jiang Jiacheng <jiangjiacheng(a)huawei.com>
---
src/qemu/qemu_process.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index 32f03ff79a..6c93f28a9e 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -8784,6 +8784,11 @@ qemuProcessReconnect(void *opaque)
goto error;
}
+ if ((qemuDomainAssignAddresses(obj->def, priv->qemuCaps,
+ driver, obj, false)) < 0) {
+ goto error;
+ }
+
/* In case the domain shutdown or fake reboot while we were not running,
* we need to finish the shutdown or fake reboot process. And we need to
* do it after we have virQEMUCaps filled in.
@@ -8802,11 +8807,6 @@ qemuProcessReconnect(void *opaque)
if (qemuProcessBuildDestroyMemoryPaths(driver, obj, NULL, true) < 0)
goto error;
- if ((qemuDomainAssignAddresses(obj->def, priv->qemuCaps,
- driver, obj, false)) < 0) {
- goto error;
- }
-
/* if domain requests security driver we haven't loaded, report error, but
* do not kill the domain
*/
--
2.33.0