Move igvm file processing from machine init to reset callbacks. With
that the igvm file is properly re-loaded on reset. Also the loading
happens later in the init process now. This will simplify future
support for some IGVM parameters which depend on initialization steps
which happen after machine init.
Reviewed-by: Ani Sinha <anisinha@redhat.com>
Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Message-ID: <20260126123755.357378-6-kraxel@redhat.com>
---
backends/igvm-cfg.c | 7 +++++++
hw/i386/pc_piix.c | 10 ----------
hw/i386/pc_q35.c | 10 ----------
3 files changed, 7 insertions(+), 20 deletions(-)
diff --git a/backends/igvm-cfg.c b/backends/igvm-cfg.c
index 4014062e0f22..f236b523df3b 100644
--- a/backends/igvm-cfg.c
+++ b/backends/igvm-cfg.c
@@ -16,6 +16,8 @@
#include "system/igvm-internal.h"
#include "system/reset.h"
#include "qom/object_interfaces.h"
+#include "hw/core/qdev.h"
+#include "hw/core/boards.h"
#include "trace.h"
@@ -45,7 +47,12 @@ static void igvm_reset_enter(Object *obj, ResetType type)
static void igvm_reset_hold(Object *obj, ResetType type)
{
+ MachineState *ms = MACHINE(qdev_get_machine());
+ IgvmCfg *igvm = IGVM_CFG(obj);
+
trace_igvm_reset_hold(type);
+
+ qigvm_process_file(igvm, ms->cgs, false, &error_fatal);
}
static void igvm_reset_exit(Object *obj, ResetType type)
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index fea158fc4bfe..878db5721b78 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -320,16 +320,6 @@ static void pc_init1(MachineState *machine, const char *pci_type)
x86_nvdimm_acpi_dsmio,
x86ms->fw_cfg, OBJECT(pcms));
}
-
-#if defined(CONFIG_IGVM)
- /* Apply guest state from IGVM if supplied */
- if (x86ms->igvm) {
- if (IGVM_CFG_GET_CLASS(x86ms->igvm)
- ->process(x86ms->igvm, machine->cgs, false, &error_fatal) < 0) {
- g_assert_not_reached();
- }
- }
-#endif
}
typedef enum PCSouthBridgeOption {
diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
index 4d6046e47b0d..6e5a23d718f1 100644
--- a/hw/i386/pc_q35.c
+++ b/hw/i386/pc_q35.c
@@ -328,16 +328,6 @@ static void pc_q35_init(MachineState *machine)
x86_nvdimm_acpi_dsmio,
x86ms->fw_cfg, OBJECT(pcms));
}
-
-#if defined(CONFIG_IGVM)
- /* Apply guest state from IGVM if supplied */
- if (x86ms->igvm) {
- if (IGVM_CFG_GET_CLASS(x86ms->igvm)
- ->process(x86ms->igvm, machine->cgs, false, &error_fatal) < 0) {
- g_assert_not_reached();
- }
- }
-#endif
}
#define DEFINE_Q35_MACHINE(major, minor) \
--
2.52.0