mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-23 19:49:43 +00:00
Add VMState support for static sized buffers (uint_8)
This patch adds support for static sized buffer and typecheks that the buffer is right. Signed-off-by: Juan Quintela <quintela@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
2d1e9f96a2
commit
6f67c50ff4
18
hw/hw.h
18
hw/hw.h
@ -285,6 +285,7 @@ enum VMStateFlags {
|
||||
VMS_ARRAY = 0x004,
|
||||
VMS_STRUCT = 0x008,
|
||||
VMS_VARRAY = 0x010, /* Array with size in another field */
|
||||
VMS_BUFFER = 0x020, /* static sized buffer */
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
@ -321,6 +322,7 @@ extern const VMStateInfo vmstate_info_uint32;
|
||||
extern const VMStateInfo vmstate_info_uint64;
|
||||
|
||||
extern const VMStateInfo vmstate_info_timer;
|
||||
extern const VMStateInfo vmstate_info_buffer;
|
||||
|
||||
#define type_check_array(t1,t2,n) ((t1(*)[n])0 - (t2*)0)
|
||||
#define type_check_pointer(t1,t2) ((t1**)0 - (t2*)0)
|
||||
@ -389,6 +391,16 @@ extern const VMStateInfo vmstate_info_timer;
|
||||
+ type_check_array(_type,typeof_field(_state, _field),_num) \
|
||||
}
|
||||
|
||||
#define VMSTATE_STATIC_BUFFER(_field, _state, _version) { \
|
||||
.name = (stringify(_field)), \
|
||||
.version_id = (_version), \
|
||||
.size = sizeof(typeof_field(_state,_field)), \
|
||||
.info = &vmstate_info_buffer, \
|
||||
.flags = VMS_BUFFER, \
|
||||
.offset = offsetof(_state, _field) \
|
||||
+ type_check_array(uint8_t,typeof_field(_state, _field),sizeof(typeof_field(_state,_field))) \
|
||||
}
|
||||
|
||||
/* _f : field name
|
||||
_f_n : num of elements field_name
|
||||
_n : num of elements
|
||||
@ -459,6 +471,12 @@ extern const VMStateInfo vmstate_info_timer;
|
||||
#define VMSTATE_INT32_VARRAY(_f, _s, _f_n) \
|
||||
VMSTATE_INT32_VARRAY_V(_f, _s, _f_n, 0)
|
||||
|
||||
#define VMSTATE_BUFFER_V(_f, _s, _v) \
|
||||
VMSTATE_STATIC_BUFFER(_f, _s, _v)
|
||||
|
||||
#define VMSTATE_BUFFER(_f, _s) \
|
||||
VMSTATE_STATIC_BUFFER(_f, _s, 0)
|
||||
|
||||
#define VMSTATE_END_OF_LIST() \
|
||||
{}
|
||||
|
||||
|
21
savevm.c
21
savevm.c
@ -848,6 +848,27 @@ const VMStateInfo vmstate_info_timer = {
|
||||
.put = put_timer,
|
||||
};
|
||||
|
||||
/* uint8_t buffers */
|
||||
|
||||
static int get_buffer(QEMUFile *f, void *pv, size_t size)
|
||||
{
|
||||
uint8_t *v = pv;
|
||||
qemu_get_buffer(f, v, size);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void put_buffer(QEMUFile *f, const void *pv, size_t size)
|
||||
{
|
||||
uint8_t *v = (void *)pv;
|
||||
qemu_put_buffer(f, v, size);
|
||||
}
|
||||
|
||||
const VMStateInfo vmstate_info_buffer = {
|
||||
.name = "buffer",
|
||||
.get = get_buffer,
|
||||
.put = put_buffer,
|
||||
};
|
||||
|
||||
typedef struct SaveStateEntry {
|
||||
char idstr[256];
|
||||
int instance_id;
|
||||
|
Loading…
Reference in New Issue
Block a user