vmstate: add qom interface to get id
Add an interface to get the instance id, instead of depending on Device and qdev_get_dev_path(). Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Acked-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
This commit is contained in:
parent
b0b74e1f17
commit
107b59698f
@ -2196,6 +2196,8 @@ Migration
|
|||||||
M: Juan Quintela <quintela@redhat.com>
|
M: Juan Quintela <quintela@redhat.com>
|
||||||
M: Dr. David Alan Gilbert <dgilbert@redhat.com>
|
M: Dr. David Alan Gilbert <dgilbert@redhat.com>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
F: hw/core/vmstate-if.c
|
||||||
|
F: include/hw/vmstate-if.h
|
||||||
F: include/migration/
|
F: include/migration/
|
||||||
F: migration/
|
F: migration/
|
||||||
F: scripts/vmstate-static-checker.py
|
F: scripts/vmstate-static-checker.py
|
||||||
|
@ -9,6 +9,7 @@ common-obj-y += hotplug.o
|
|||||||
common-obj-$(CONFIG_SOFTMMU) += nmi.o
|
common-obj-$(CONFIG_SOFTMMU) += nmi.o
|
||||||
common-obj-$(CONFIG_SOFTMMU) += vm-change-state-handler.o
|
common-obj-$(CONFIG_SOFTMMU) += vm-change-state-handler.o
|
||||||
common-obj-y += cpu.o
|
common-obj-y += cpu.o
|
||||||
|
common-obj-y += vmstate-if.o
|
||||||
|
|
||||||
common-obj-$(CONFIG_EMPTY_SLOT) += empty_slot.o
|
common-obj-$(CONFIG_EMPTY_SLOT) += empty_slot.o
|
||||||
common-obj-$(CONFIG_XILINX_AXI) += stream.o
|
common-obj-$(CONFIG_XILINX_AXI) += stream.o
|
||||||
|
@ -1087,9 +1087,18 @@ static void device_unparent(Object *obj)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
device_vmstate_if_get_id(VMStateIf *obj)
|
||||||
|
{
|
||||||
|
DeviceState *dev = DEVICE(obj);
|
||||||
|
|
||||||
|
return qdev_get_dev_path(dev);
|
||||||
|
}
|
||||||
|
|
||||||
static void device_class_init(ObjectClass *class, void *data)
|
static void device_class_init(ObjectClass *class, void *data)
|
||||||
{
|
{
|
||||||
DeviceClass *dc = DEVICE_CLASS(class);
|
DeviceClass *dc = DEVICE_CLASS(class);
|
||||||
|
VMStateIfClass *vc = VMSTATE_IF_CLASS(class);
|
||||||
|
|
||||||
class->unparent = device_unparent;
|
class->unparent = device_unparent;
|
||||||
|
|
||||||
@ -1101,6 +1110,7 @@ static void device_class_init(ObjectClass *class, void *data)
|
|||||||
*/
|
*/
|
||||||
dc->hotpluggable = true;
|
dc->hotpluggable = true;
|
||||||
dc->user_creatable = true;
|
dc->user_creatable = true;
|
||||||
|
vc->get_id = device_vmstate_if_get_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
void device_class_set_parent_reset(DeviceClass *dc,
|
void device_class_set_parent_reset(DeviceClass *dc,
|
||||||
@ -1158,6 +1168,10 @@ static const TypeInfo device_type_info = {
|
|||||||
.class_init = device_class_init,
|
.class_init = device_class_init,
|
||||||
.abstract = true,
|
.abstract = true,
|
||||||
.class_size = sizeof(DeviceClass),
|
.class_size = sizeof(DeviceClass),
|
||||||
|
.interfaces = (InterfaceInfo[]) {
|
||||||
|
{ TYPE_VMSTATE_IF },
|
||||||
|
{ }
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static void qdev_register_types(void)
|
static void qdev_register_types(void)
|
||||||
|
23
hw/core/vmstate-if.c
Normal file
23
hw/core/vmstate-if.c
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
/*
|
||||||
|
* VMState interface
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009-2019 Red Hat Inc
|
||||||
|
* This work is licensed under the terms of the GNU GPL, version 2 or later.
|
||||||
|
* See the COPYING file in the top-level directory.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "qemu/osdep.h"
|
||||||
|
#include "hw/vmstate-if.h"
|
||||||
|
|
||||||
|
static const TypeInfo vmstate_if_info = {
|
||||||
|
.name = TYPE_VMSTATE_IF,
|
||||||
|
.parent = TYPE_INTERFACE,
|
||||||
|
.class_size = sizeof(VMStateIfClass),
|
||||||
|
};
|
||||||
|
|
||||||
|
static void vmstate_register_types(void)
|
||||||
|
{
|
||||||
|
type_register_static(&vmstate_if_info);
|
||||||
|
}
|
||||||
|
|
||||||
|
type_init(vmstate_register_types);
|
40
include/hw/vmstate-if.h
Normal file
40
include/hw/vmstate-if.h
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* VMState interface
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009-2019 Red Hat Inc
|
||||||
|
* This work is licensed under the terms of the GNU GPL, version 2 or later.
|
||||||
|
* See the COPYING file in the top-level directory.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef VMSTATE_IF_H
|
||||||
|
#define VMSTATE_IF_H
|
||||||
|
|
||||||
|
#include "qom/object.h"
|
||||||
|
|
||||||
|
#define TYPE_VMSTATE_IF "vmstate-if"
|
||||||
|
|
||||||
|
#define VMSTATE_IF_CLASS(klass) \
|
||||||
|
OBJECT_CLASS_CHECK(VMStateIfClass, (klass), TYPE_VMSTATE_IF)
|
||||||
|
#define VMSTATE_IF_GET_CLASS(obj) \
|
||||||
|
OBJECT_GET_CLASS(VMStateIfClass, (obj), TYPE_VMSTATE_IF)
|
||||||
|
#define VMSTATE_IF(obj) \
|
||||||
|
INTERFACE_CHECK(VMStateIf, (obj), TYPE_VMSTATE_IF)
|
||||||
|
|
||||||
|
typedef struct VMStateIf VMStateIf;
|
||||||
|
|
||||||
|
typedef struct VMStateIfClass {
|
||||||
|
InterfaceClass parent_class;
|
||||||
|
|
||||||
|
char * (*get_id)(VMStateIf *obj);
|
||||||
|
} VMStateIfClass;
|
||||||
|
|
||||||
|
static inline char *vmstate_if_get_id(VMStateIf *vmif)
|
||||||
|
{
|
||||||
|
if (!vmif) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return VMSTATE_IF_GET_CLASS(vmif)->get_id(vmif);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* VMSTATE_IF_H */
|
@ -14,6 +14,8 @@
|
|||||||
#ifndef MIGRATION_REGISTER_H
|
#ifndef MIGRATION_REGISTER_H
|
||||||
#define MIGRATION_REGISTER_H
|
#define MIGRATION_REGISTER_H
|
||||||
|
|
||||||
|
#include "hw/vmstate-if.h"
|
||||||
|
|
||||||
typedef struct SaveVMHandlers {
|
typedef struct SaveVMHandlers {
|
||||||
/* This runs inside the iothread lock. */
|
/* This runs inside the iothread lock. */
|
||||||
SaveStateHandler *save_state;
|
SaveStateHandler *save_state;
|
||||||
|
@ -27,6 +27,8 @@
|
|||||||
#ifndef QEMU_VMSTATE_H
|
#ifndef QEMU_VMSTATE_H
|
||||||
#define QEMU_VMSTATE_H
|
#define QEMU_VMSTATE_H
|
||||||
|
|
||||||
|
#include "hw/vmstate-if.h"
|
||||||
|
|
||||||
typedef struct VMStateInfo VMStateInfo;
|
typedef struct VMStateInfo VMStateInfo;
|
||||||
typedef struct VMStateField VMStateField;
|
typedef struct VMStateField VMStateField;
|
||||||
|
|
||||||
|
@ -579,6 +579,7 @@ tests/test-qdev-global-props$(EXESUF): tests/test-qdev-global-props.o \
|
|||||||
hw/core/irq.o \
|
hw/core/irq.o \
|
||||||
hw/core/fw-path-provider.o \
|
hw/core/fw-path-provider.o \
|
||||||
hw/core/reset.o \
|
hw/core/reset.o \
|
||||||
|
hw/core/vmstate-if.o \
|
||||||
$(test-qapi-obj-y)
|
$(test-qapi-obj-y)
|
||||||
tests/test-vmstate$(EXESUF): tests/test-vmstate.o \
|
tests/test-vmstate$(EXESUF): tests/test-vmstate.o \
|
||||||
migration/vmstate.o migration/vmstate-types.o migration/qemu-file.o \
|
migration/vmstate.o migration/vmstate-types.o migration/qemu-file.o \
|
||||||
|
Loading…
Reference in New Issue
Block a user