mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-07 01:33:56 -06:00
hw/ipmi: Don't call vmstate_register() from instance_init() functions
instance_init() can be called multiple times, e.g. during introspection of the device. We should not install the vmstate handlers here. Do it in the realize() function instead. Signed-off-by: Thomas Huth <thuth@redhat.com> Reviewed-by: Juan Quintela <quintela@redhat.com> Acked-by: Corey Minyard <cminyard@mvista.com> Signed-off-by: Juan Quintela <quintela@redhat.com> Message-ID: <20231020145554.662751-1-thuth@redhat.com>
This commit is contained in:
parent
6c9ae1ce82
commit
6436db5a60
3 changed files with 57 additions and 56 deletions
|
@ -453,19 +453,6 @@ static void ipmi_bmc_extern_handle_reset(IPMIBmc *b)
|
|||
continue_send(ibe);
|
||||
}
|
||||
|
||||
static void ipmi_bmc_extern_realize(DeviceState *dev, Error **errp)
|
||||
{
|
||||
IPMIBmcExtern *ibe = IPMI_BMC_EXTERN(dev);
|
||||
|
||||
if (!qemu_chr_fe_backend_connected(&ibe->chr)) {
|
||||
error_setg(errp, "IPMI external bmc requires chardev attribute");
|
||||
return;
|
||||
}
|
||||
|
||||
qemu_chr_fe_set_handlers(&ibe->chr, can_receive, receive,
|
||||
chr_event, NULL, ibe, NULL, true);
|
||||
}
|
||||
|
||||
static int ipmi_bmc_extern_post_migrate(void *opaque, int version_id)
|
||||
{
|
||||
IPMIBmcExtern *ibe = opaque;
|
||||
|
@ -499,12 +486,26 @@ static const VMStateDescription vmstate_ipmi_bmc_extern = {
|
|||
}
|
||||
};
|
||||
|
||||
static void ipmi_bmc_extern_realize(DeviceState *dev, Error **errp)
|
||||
{
|
||||
IPMIBmcExtern *ibe = IPMI_BMC_EXTERN(dev);
|
||||
|
||||
if (!qemu_chr_fe_backend_connected(&ibe->chr)) {
|
||||
error_setg(errp, "IPMI external bmc requires chardev attribute");
|
||||
return;
|
||||
}
|
||||
|
||||
qemu_chr_fe_set_handlers(&ibe->chr, can_receive, receive,
|
||||
chr_event, NULL, ibe, NULL, true);
|
||||
|
||||
vmstate_register(NULL, 0, &vmstate_ipmi_bmc_extern, ibe);
|
||||
}
|
||||
|
||||
static void ipmi_bmc_extern_init(Object *obj)
|
||||
{
|
||||
IPMIBmcExtern *ibe = IPMI_BMC_EXTERN(obj);
|
||||
|
||||
ibe->extern_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, extern_timeout, ibe);
|
||||
vmstate_register(NULL, 0, &vmstate_ipmi_bmc_extern, ibe);
|
||||
}
|
||||
|
||||
static void ipmi_bmc_extern_finalize(Object *obj)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue