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: Dr. David Alan Gilbert <dgilbert@redhat.com>
|
||||
S: Maintained
|
||||
F: hw/core/vmstate-if.c
|
||||
F: include/hw/vmstate-if.h
|
||||
F: include/migration/
|
||||
F: migration/
|
||||
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) += vm-change-state-handler.o
|
||||
common-obj-y += cpu.o
|
||||
common-obj-y += vmstate-if.o
|
||||
|
||||
common-obj-$(CONFIG_EMPTY_SLOT) += empty_slot.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)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(class);
|
||||
VMStateIfClass *vc = VMSTATE_IF_CLASS(class);
|
||||
|
||||
class->unparent = device_unparent;
|
||||
|
||||
@ -1101,6 +1110,7 @@ static void device_class_init(ObjectClass *class, void *data)
|
||||
*/
|
||||
dc->hotpluggable = true;
|
||||
dc->user_creatable = true;
|
||||
vc->get_id = device_vmstate_if_get_id;
|
||||
}
|
||||
|
||||
void device_class_set_parent_reset(DeviceClass *dc,
|
||||
@ -1158,6 +1168,10 @@ static const TypeInfo device_type_info = {
|
||||
.class_init = device_class_init,
|
||||
.abstract = true,
|
||||
.class_size = sizeof(DeviceClass),
|
||||
.interfaces = (InterfaceInfo[]) {
|
||||
{ TYPE_VMSTATE_IF },
|
||||
{ }
|
||||
}
|
||||
};
|
||||
|
||||
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
|
||||
#define MIGRATION_REGISTER_H
|
||||
|
||||
#include "hw/vmstate-if.h"
|
||||
|
||||
typedef struct SaveVMHandlers {
|
||||
/* This runs inside the iothread lock. */
|
||||
SaveStateHandler *save_state;
|
||||
|
@ -27,6 +27,8 @@
|
||||
#ifndef QEMU_VMSTATE_H
|
||||
#define QEMU_VMSTATE_H
|
||||
|
||||
#include "hw/vmstate-if.h"
|
||||
|
||||
typedef struct VMStateInfo VMStateInfo;
|
||||
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/fw-path-provider.o \
|
||||
hw/core/reset.o \
|
||||
hw/core/vmstate-if.o \
|
||||
$(test-qapi-obj-y)
|
||||
tests/test-vmstate$(EXESUF): tests/test-vmstate.o \
|
||||
migration/vmstate.o migration/vmstate-types.o migration/qemu-file.o \
|
||||
|
Loading…
Reference in New Issue
Block a user