* [Qemu-devel] [PATCH 00/12] vmstate cleanups and fixes
@ 2009-12-02 11:36 Juan Quintela
2009-12-02 11:36 ` [Qemu-devel] [PATCH 01/12] vmstate: Avoid seeking Juan Quintela
` (11 more replies)
0 siblings, 12 replies; 13+ messages in thread
From: Juan Quintela @ 2009-12-02 11:36 UTC (permalink / raw)
To: qemu-devel
The new features are going to be used in next series (virtio port to vmstate).
I just sent it because the cleanups were needed for other people.
This patch is on top of my audio vmstate changes series (but it should be
independent).
- fseek + migration has stopped working, just read to a local buffer (Jan).
- macaddr: brown paper bug (Jan fixed it)
- We add support for test function in more types.
- qdev: fix vmstate_unregister call now that it has the right type.
- port all devices that don't need changes to qdev.vmsd (patch is largish,
but it is very easy).
- multiply by a constant: this is needed for unsafe buffers, where we
have the number of elements, not the full size of the buffer.
You can get it at:
http://repo.or.cz/w/qemu/quintela.git/shortlog/refs/heads/vmstate/cleanup
Later, Juan.
Jan Kiszka (1):
vmstate: Fix info field of VMSTATE_MACADDR
Juan Quintela (11):
vmstate: Avoid seeking
vmstate: fix missing ARRAY_OF_POINTERS support on save state
vmstate: Add support for VBUFFERS
vmstate: Introduce VMSTATE_STRUCT_TEST
vmstate: Introduce VMSTATE_STRUCT_POINTER_TEST
vmstate: Introduce UINT16_TEST support
vmstate: remove usused VMSTATE_STRUCT_ARRAY_SIZE_UINT8
vmstate: Add support for multiplying size for a constant
pci: vmstate_register() already assign consecutive numbers starting
at 0
qdev: enable vmstate_unregister() support
savevm: Port to qdev.vmsd all devices that have qdev
hw/ac97.c | 2 +-
hw/cirrus_vga.c | 2 +-
hw/cs4231a.c | 2 +-
hw/e1000.c | 4 +--
hw/es1370.c | 2 +-
hw/gus.c | 2 +-
hw/hw.h | 82 +++++++++++++++++++++++++++++++++++++---------------
hw/lance.c | 14 ++++++++-
hw/lm832x.c | 2 +-
hw/lsi53c895a.c | 2 +-
hw/max7310.c | 2 +-
hw/ne2000-isa.c | 12 +++++++-
hw/ne2000.c | 3 +-
hw/pci.c | 4 +--
hw/pckbd.c | 13 ++++++++-
hw/pcnet.c | 4 +--
hw/piix_pci.c | 4 +-
hw/qdev.c | 2 -
hw/rtl8139.c | 4 +--
hw/sb16.c | 2 +-
hw/ssd0303.c | 2 +-
hw/tmp105.c | 2 +-
hw/twl92230.c | 2 +-
hw/usb-uhci.c | 3 +-
hw/vga-pci.c | 2 +-
hw/vmware_vga.c | 2 +-
hw/wdt_i6300esb.c | 3 +-
hw/wdt_ib700.c | 2 +-
hw/wm8750.c | 2 +-
savevm.c | 49 ++++++++++++++++++++++++++------
30 files changed, 159 insertions(+), 74 deletions(-)
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Qemu-devel] [PATCH 01/12] vmstate: Avoid seeking
2009-12-02 11:36 [Qemu-devel] [PATCH 00/12] vmstate cleanups and fixes Juan Quintela
@ 2009-12-02 11:36 ` Juan Quintela
2009-12-02 11:36 ` [Qemu-devel] [PATCH 02/12] vmstate: Fix info field of VMSTATE_MACADDR Juan Quintela
` (10 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Juan Quintela @ 2009-12-02 11:36 UTC (permalink / raw)
To: qemu-devel; +Cc: Jan Kiszka
From: Jan Kiszka <jan.kiszka@web.de>
Seeking on vmstate save/load does not work if the underlying file is a
stream. We could try to make all QEMUFile* forward-seek-aware, but first
attempts in this direction indicated that it's saner to convert the few
qemu_fseek-on-vmstates users to plain reads/writes.
This fixes various subtle vmstate corruptions where unused fields were
involved.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
savevm.c | 20 +++++++++++++++++---
1 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/savevm.c b/savevm.c
index 18c2e54..833bf3c 100644
--- a/savevm.c
+++ b/savevm.c
@@ -959,13 +959,27 @@ const VMStateInfo vmstate_info_buffer = {
static int get_unused_buffer(QEMUFile *f, void *pv, size_t size)
{
- qemu_fseek(f, size, SEEK_CUR);
- return 0;
+ uint8_t buf[1024];
+ int block_len;
+
+ while (size > 0) {
+ block_len = MIN(sizeof(buf), size);
+ size -= block_len;
+ qemu_get_buffer(f, buf, block_len);
+ }
+ return 0;
}
static void put_unused_buffer(QEMUFile *f, void *pv, size_t size)
{
- qemu_fseek(f, size, SEEK_CUR);
+ static const uint8_t buf[1024];
+ int block_len;
+
+ while (size > 0) {
+ block_len = MIN(sizeof(buf), size);
+ size -= block_len;
+ qemu_put_buffer(f, buf, block_len);
+ }
}
const VMStateInfo vmstate_info_unused_buffer = {
--
1.6.5.2
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [Qemu-devel] [PATCH 02/12] vmstate: Fix info field of VMSTATE_MACADDR
2009-12-02 11:36 [Qemu-devel] [PATCH 00/12] vmstate cleanups and fixes Juan Quintela
2009-12-02 11:36 ` [Qemu-devel] [PATCH 01/12] vmstate: Avoid seeking Juan Quintela
@ 2009-12-02 11:36 ` Juan Quintela
2009-12-02 11:36 ` [Qemu-devel] [PATCH 03/12] vmstate: fix missing ARRAY_OF_POINTERS support on save state Juan Quintela
` (9 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Juan Quintela @ 2009-12-02 11:36 UTC (permalink / raw)
To: qemu-devel; +Cc: Jan Kiszka
From: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
hw/hw.h | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/hw/hw.h b/hw/hw.h
index 7889aa3..c3c0c9f 100644
--- a/hw/hw.h
+++ b/hw/hw.h
@@ -545,7 +545,7 @@ extern const VMStateDescription vmstate_i2c_slave;
#define VMSTATE_MACADDR(_field, _state) { \
.name = (stringify(_field)), \
.size = sizeof(MACAddr), \
- .info = &vmstate_info_uint8, \
+ .info = &vmstate_info_buffer, \
.flags = VMS_BUFFER, \
.offset = vmstate_offset_macaddr(_state, _field), \
}
--
1.6.5.2
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [Qemu-devel] [PATCH 03/12] vmstate: fix missing ARRAY_OF_POINTERS support on save state
2009-12-02 11:36 [Qemu-devel] [PATCH 00/12] vmstate cleanups and fixes Juan Quintela
2009-12-02 11:36 ` [Qemu-devel] [PATCH 01/12] vmstate: Avoid seeking Juan Quintela
2009-12-02 11:36 ` [Qemu-devel] [PATCH 02/12] vmstate: Fix info field of VMSTATE_MACADDR Juan Quintela
@ 2009-12-02 11:36 ` Juan Quintela
2009-12-02 11:36 ` [Qemu-devel] [PATCH 04/12] vmstate: Add support for VBUFFERS Juan Quintela
` (8 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Juan Quintela @ 2009-12-02 11:36 UTC (permalink / raw)
To: qemu-devel
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
savevm.c | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/savevm.c b/savevm.c
index 833bf3c..8fac502 100644
--- a/savevm.c
+++ b/savevm.c
@@ -1206,6 +1206,9 @@ void vmstate_save_state(QEMUFile *f, const VMStateDescription *vmsd,
for (i = 0; i < n_elems; i++) {
void *addr = base_addr + field->size * i;
+ if (field->flags & VMS_ARRAY_OF_POINTER) {
+ addr = *(void **)addr;
+ }
if (field->flags & VMS_STRUCT) {
vmstate_save_state(f, field->vmsd, addr);
} else {
--
1.6.5.2
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [Qemu-devel] [PATCH 04/12] vmstate: Add support for VBUFFERS
2009-12-02 11:36 [Qemu-devel] [PATCH 00/12] vmstate cleanups and fixes Juan Quintela
` (2 preceding siblings ...)
2009-12-02 11:36 ` [Qemu-devel] [PATCH 03/12] vmstate: fix missing ARRAY_OF_POINTERS support on save state Juan Quintela
@ 2009-12-02 11:36 ` Juan Quintela
2009-12-02 11:36 ` [Qemu-devel] [PATCH 05/12] vmstate: Introduce VMSTATE_STRUCT_TEST Juan Quintela
` (7 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Juan Quintela @ 2009-12-02 11:36 UTC (permalink / raw)
To: qemu-devel
Support for buffer that are pointed by a pointer (i.e. not embedded)
where the size that we want to use is a field in the state.
We also need a new place to store where to start in the middle of the
buffer, as now it is a pointer, not the offset of the 1st field.
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
hw/hw.h | 20 ++++++++++++++++++++
savevm.c | 20 ++++++++++++++------
2 files changed, 34 insertions(+), 6 deletions(-)
diff --git a/hw/hw.h b/hw/hw.h
index c3c0c9f..47fb12b 100644
--- a/hw/hw.h
+++ b/hw/hw.h
@@ -294,14 +294,17 @@ enum VMStateFlags {
VMS_BUFFER = 0x020, /* static sized buffer */
VMS_ARRAY_OF_POINTER = 0x040,
VMS_VARRAY_UINT16 = 0x080, /* Array with size in uint16_t field */
+ VMS_VBUFFER = 0x100, /* Buffer with size in int32_t field */
};
typedef struct {
const char *name;
size_t offset;
size_t size;
+ size_t start;
int num;
size_t num_offset;
+ size_t size_offset;
const VMStateInfo *info;
enum VMStateFlags flags;
const VMStateDescription *vmsd;
@@ -490,6 +493,17 @@ extern const VMStateInfo vmstate_info_unused_buffer;
.offset = vmstate_offset_buffer(_state, _field) + _start, \
}
+#define VMSTATE_VBUFFER(_field, _state, _version, _test, _start, _field_size) { \
+ .name = (stringify(_field)), \
+ .version_id = (_version), \
+ .field_exists = (_test), \
+ .size_offset = vmstate_offset_value(_state, _field_size, int32_t),\
+ .info = &vmstate_info_buffer, \
+ .flags = VMS_VBUFFER|VMS_POINTER, \
+ .offset = offsetof(_state, _field), \
+ .start = (_start), \
+}
+
#define VMSTATE_BUFFER_UNSAFE_INFO(_field, _state, _version, _info, _size) { \
.name = (stringify(_field)), \
.version_id = (_version), \
@@ -683,6 +697,12 @@ extern const VMStateDescription vmstate_i2c_slave;
#define VMSTATE_BUFFER_START_MIDDLE(_f, _s, _start) \
VMSTATE_STATIC_BUFFER(_f, _s, 0, NULL, _start, sizeof(typeof_field(_s, _f)))
+#define VMSTATE_PARTIAL_VBUFFER(_f, _s, _size) \
+ VMSTATE_VBUFFER(_f, _s, 0, NULL, 0, _size)
+
+#define VMSTATE_SUB_VBUFFER(_f, _s, _start, _size) \
+ VMSTATE_VBUFFER(_f, _s, 0, NULL, _start, _size)
+
#define VMSTATE_BUFFER_TEST(_f, _s, _test) \
VMSTATE_STATIC_BUFFER(_f, _s, 0, _test, 0, sizeof(typeof_field(_s, _f)))
diff --git a/savevm.c b/savevm.c
index 8fac502..2715f8f 100644
--- a/savevm.c
+++ b/savevm.c
@@ -1143,7 +1143,11 @@ int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd,
field->version_id <= version_id)) {
void *base_addr = opaque + field->offset;
int ret, i, n_elems = 1;
+ int size = field->size;
+ if (field->flags & VMS_VBUFFER) {
+ size = *(int32_t *)(opaque+field->size_offset);
+ }
if (field->flags & VMS_ARRAY) {
n_elems = field->num;
} else if (field->flags & VMS_VARRAY_INT32) {
@@ -1152,10 +1156,10 @@ int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd,
n_elems = *(uint16_t *)(opaque+field->num_offset);
}
if (field->flags & VMS_POINTER) {
- base_addr = *(void **)base_addr;
+ base_addr = *(void **)base_addr + field->start;
}
for (i = 0; i < n_elems; i++) {
- void *addr = base_addr + field->size * i;
+ void *addr = base_addr + size * i;
if (field->flags & VMS_ARRAY_OF_POINTER) {
addr = *(void **)addr;
@@ -1163,7 +1167,7 @@ int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd,
if (field->flags & VMS_STRUCT) {
ret = vmstate_load_state(f, field->vmsd, addr, field->vmsd->version_id);
} else {
- ret = field->info->get(f, addr, field->size);
+ ret = field->info->get(f, addr, size);
}
if (ret < 0) {
@@ -1192,7 +1196,11 @@ void vmstate_save_state(QEMUFile *f, const VMStateDescription *vmsd,
field->field_exists(opaque, vmsd->version_id)) {
void *base_addr = opaque + field->offset;
int i, n_elems = 1;
+ int size = field->size;
+ if (field->flags & VMS_VBUFFER) {
+ size = *(int32_t *)(opaque+field->size_offset);
+ }
if (field->flags & VMS_ARRAY) {
n_elems = field->num;
} else if (field->flags & VMS_VARRAY_INT32) {
@@ -1201,10 +1209,10 @@ void vmstate_save_state(QEMUFile *f, const VMStateDescription *vmsd,
n_elems = *(uint16_t *)(opaque+field->num_offset);
}
if (field->flags & VMS_POINTER) {
- base_addr = *(void **)base_addr;
+ base_addr = *(void **)base_addr + field->start;
}
for (i = 0; i < n_elems; i++) {
- void *addr = base_addr + field->size * i;
+ void *addr = base_addr + size * i;
if (field->flags & VMS_ARRAY_OF_POINTER) {
addr = *(void **)addr;
@@ -1212,7 +1220,7 @@ void vmstate_save_state(QEMUFile *f, const VMStateDescription *vmsd,
if (field->flags & VMS_STRUCT) {
vmstate_save_state(f, field->vmsd, addr);
} else {
- field->info->put(f, addr, field->size);
+ field->info->put(f, addr, size);
}
}
}
--
1.6.5.2
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [Qemu-devel] [PATCH 05/12] vmstate: Introduce VMSTATE_STRUCT_TEST
2009-12-02 11:36 [Qemu-devel] [PATCH 00/12] vmstate cleanups and fixes Juan Quintela
` (3 preceding siblings ...)
2009-12-02 11:36 ` [Qemu-devel] [PATCH 04/12] vmstate: Add support for VBUFFERS Juan Quintela
@ 2009-12-02 11:36 ` Juan Quintela
2009-12-02 11:36 ` [Qemu-devel] [PATCH 06/12] vmstate: Introduce VMSTATE_STRUCT_POINTER_TEST Juan Quintela
` (6 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Juan Quintela @ 2009-12-02 11:36 UTC (permalink / raw)
To: qemu-devel
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
hw/hw.h | 18 +++++++++++-------
1 files changed, 11 insertions(+), 7 deletions(-)
diff --git a/hw/hw.h b/hw/hw.h
index 47fb12b..0f4442a 100644
--- a/hw/hw.h
+++ b/hw/hw.h
@@ -436,13 +436,14 @@ extern const VMStateInfo vmstate_info_unused_buffer;
.offset = offsetof(_state, _field), \
}
-#define VMSTATE_STRUCT(_field, _state, _version, _vmsd, _type) { \
- .name = (stringify(_field)), \
- .version_id = (_version), \
- .vmsd = &(_vmsd), \
- .size = sizeof(_type), \
- .flags = VMS_STRUCT, \
- .offset = vmstate_offset_value(_state, _field, _type), \
+#define VMSTATE_STRUCT_TEST(_field, _state, _test, _version, _vmsd, _type) { \
+ .name = (stringify(_field)), \
+ .version_id = (_version), \
+ .field_exists = (_test), \
+ .vmsd = &(_vmsd), \
+ .size = sizeof(_type), \
+ .flags = VMS_STRUCT, \
+ .offset = vmstate_offset_value(_state, _field, _type), \
}
#define VMSTATE_STRUCT_POINTER(_field, _state, _vmsd, _type) { \
@@ -574,6 +575,9 @@ extern const VMStateDescription vmstate_i2c_slave;
#define VMSTATE_SINGLE(_field, _state, _version, _info, _type) \
VMSTATE_SINGLE_TEST(_field, _state, NULL, _version, _info, _type)
+#define VMSTATE_STRUCT(_field, _state, _version, _vmsd, _type) \
+ VMSTATE_STRUCT_TEST(_field, _state, NULL, _version, _vmsd, _type)
+
#define VMSTATE_INT8_V(_f, _s, _v) \
VMSTATE_SINGLE(_f, _s, _v, vmstate_info_int8, int8_t)
#define VMSTATE_INT16_V(_f, _s, _v) \
--
1.6.5.2
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [Qemu-devel] [PATCH 06/12] vmstate: Introduce VMSTATE_STRUCT_POINTER_TEST
2009-12-02 11:36 [Qemu-devel] [PATCH 00/12] vmstate cleanups and fixes Juan Quintela
` (4 preceding siblings ...)
2009-12-02 11:36 ` [Qemu-devel] [PATCH 05/12] vmstate: Introduce VMSTATE_STRUCT_TEST Juan Quintela
@ 2009-12-02 11:36 ` Juan Quintela
2009-12-02 11:36 ` [Qemu-devel] [PATCH 07/12] vmstate: Introduce UINT16_TEST support Juan Quintela
` (5 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Juan Quintela @ 2009-12-02 11:36 UTC (permalink / raw)
To: qemu-devel
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
hw/hw.h | 16 ++++++++++------
1 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/hw/hw.h b/hw/hw.h
index 0f4442a..0a5acd4 100644
--- a/hw/hw.h
+++ b/hw/hw.h
@@ -446,12 +446,13 @@ extern const VMStateInfo vmstate_info_unused_buffer;
.offset = vmstate_offset_value(_state, _field, _type), \
}
-#define VMSTATE_STRUCT_POINTER(_field, _state, _vmsd, _type) { \
- .name = (stringify(_field)), \
- .vmsd = &(_vmsd), \
- .size = sizeof(_type), \
- .flags = VMS_STRUCT|VMS_POINTER, \
- .offset = vmstate_offset_value(_state, _field, _type), \
+#define VMSTATE_STRUCT_POINTER_TEST(_field, _state, _test, _vmsd, _type) { \
+ .name = (stringify(_field)), \
+ .field_exists = (_test), \
+ .vmsd = &(_vmsd), \
+ .size = sizeof(_type), \
+ .flags = VMS_STRUCT|VMS_POINTER, \
+ .offset = vmstate_offset_value(_state, _field, _type), \
}
#define VMSTATE_ARRAY_OF_POINTER(_field, _state, _num, _version, _info, _type) {\
@@ -578,6 +579,9 @@ extern const VMStateDescription vmstate_i2c_slave;
#define VMSTATE_STRUCT(_field, _state, _version, _vmsd, _type) \
VMSTATE_STRUCT_TEST(_field, _state, NULL, _version, _vmsd, _type)
+#define VMSTATE_STRUCT_POINTER(_field, _state, _vmsd, _type) \
+ VMSTATE_STRUCT_POINTER_TEST(_field, _state, NULL, _vmsd, _type)
+
#define VMSTATE_INT8_V(_f, _s, _v) \
VMSTATE_SINGLE(_f, _s, _v, vmstate_info_int8, int8_t)
#define VMSTATE_INT16_V(_f, _s, _v) \
--
1.6.5.2
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [Qemu-devel] [PATCH 07/12] vmstate: Introduce UINT16_TEST support
2009-12-02 11:36 [Qemu-devel] [PATCH 00/12] vmstate cleanups and fixes Juan Quintela
` (5 preceding siblings ...)
2009-12-02 11:36 ` [Qemu-devel] [PATCH 06/12] vmstate: Introduce VMSTATE_STRUCT_POINTER_TEST Juan Quintela
@ 2009-12-02 11:36 ` Juan Quintela
2009-12-02 11:36 ` [Qemu-devel] [PATCH 08/12] vmstate: remove usused VMSTATE_STRUCT_ARRAY_SIZE_UINT8 Juan Quintela
` (4 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Juan Quintela @ 2009-12-02 11:36 UTC (permalink / raw)
To: qemu-devel
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
hw/hw.h | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/hw/hw.h b/hw/hw.h
index 0a5acd4..5994d86 100644
--- a/hw/hw.h
+++ b/hw/hw.h
@@ -633,6 +633,9 @@ extern const VMStateDescription vmstate_i2c_slave;
#define VMSTATE_INT32_LE(_f, _s) \
VMSTATE_SINGLE(_f, _s, 0, vmstate_info_int32_le, int32_t)
+#define VMSTATE_UINT16_TEST(_f, _s, _t) \
+ VMSTATE_SINGLE_TEST(_f, _s, _t, 0, vmstate_info_uint16, uint16_t)
+
#define VMSTATE_UINT32_TEST(_f, _s, _t) \
VMSTATE_SINGLE_TEST(_f, _s, _t, 0, vmstate_info_uint32, uint32_t)
--
1.6.5.2
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [Qemu-devel] [PATCH 08/12] vmstate: remove usused VMSTATE_STRUCT_ARRAY_SIZE_UINT8
2009-12-02 11:36 [Qemu-devel] [PATCH 00/12] vmstate cleanups and fixes Juan Quintela
` (6 preceding siblings ...)
2009-12-02 11:36 ` [Qemu-devel] [PATCH 07/12] vmstate: Introduce UINT16_TEST support Juan Quintela
@ 2009-12-02 11:36 ` Juan Quintela
2009-12-02 11:36 ` [Qemu-devel] [PATCH 09/12] vmstate: Add support for multiplying size for a constant Juan Quintela
` (3 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Juan Quintela @ 2009-12-02 11:36 UTC (permalink / raw)
To: qemu-devel
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
hw/hw.h | 10 ----------
1 files changed, 0 insertions(+), 10 deletions(-)
diff --git a/hw/hw.h b/hw/hw.h
index 5994d86..41e13cc 100644
--- a/hw/hw.h
+++ b/hw/hw.h
@@ -475,16 +475,6 @@ extern const VMStateInfo vmstate_info_unused_buffer;
.offset = vmstate_offset_array(_state, _field, _type, _num), \
}
-#define VMSTATE_STRUCT_ARRAY_SIZE_UINT8(_field, _state, _field__num, _version, _vmsd, _type) { \
- .name = (stringify(_field)), \
- .num_offset = vmstate_offset_value(_state, _field_num, uint8_t), \
- .version_id = (_version), \
- .vmsd = &(_vmsd), \
- .size = sizeof(_type), \
- .flags = VMS_STRUCT|VMS_ARRAY, \
- .offset = vmstate_offset_array(_state, _field, _type, _num), \
-}
-
#define VMSTATE_STATIC_BUFFER(_field, _state, _version, _test, _start, _size) { \
.name = (stringify(_field)), \
.version_id = (_version), \
--
1.6.5.2
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [Qemu-devel] [PATCH 09/12] vmstate: Add support for multiplying size for a constant
2009-12-02 11:36 [Qemu-devel] [PATCH 00/12] vmstate cleanups and fixes Juan Quintela
` (7 preceding siblings ...)
2009-12-02 11:36 ` [Qemu-devel] [PATCH 08/12] vmstate: remove usused VMSTATE_STRUCT_ARRAY_SIZE_UINT8 Juan Quintela
@ 2009-12-02 11:36 ` Juan Quintela
2009-12-02 11:36 ` [Qemu-devel] [PATCH 10/12] pci: vmstate_register() already assign consecutive numbers starting at 0 Juan Quintela
` (2 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Juan Quintela @ 2009-12-02 11:36 UTC (permalink / raw)
To: qemu-devel
When the size that we want to transmit is in another field, but in an
unit different that bytes
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
hw/hw.h | 13 +++++++++++++
savevm.c | 6 ++++++
2 files changed, 19 insertions(+), 0 deletions(-)
diff --git a/hw/hw.h b/hw/hw.h
index 41e13cc..5f34991 100644
--- a/hw/hw.h
+++ b/hw/hw.h
@@ -295,6 +295,7 @@ enum VMStateFlags {
VMS_ARRAY_OF_POINTER = 0x040,
VMS_VARRAY_UINT16 = 0x080, /* Array with size in uint16_t field */
VMS_VBUFFER = 0x100, /* Buffer with size in int32_t field */
+ VMS_MULTIPLY = 0x200, /* multiply "size" field by field_size */
};
typedef struct {
@@ -485,6 +486,18 @@ extern const VMStateInfo vmstate_info_unused_buffer;
.offset = vmstate_offset_buffer(_state, _field) + _start, \
}
+#define VMSTATE_BUFFER_MULTIPLY(_field, _state, _version, _test, _start, _field_size, _multiply) { \
+ .name = (stringify(_field)), \
+ .version_id = (_version), \
+ .field_exists = (_test), \
+ .size_offset = vmstate_offset_value(_state, _field_size, uint32_t),\
+ .size = (_multiply), \
+ .info = &vmstate_info_buffer, \
+ .flags = VMS_VBUFFER|VMS_MULTIPLY, \
+ .offset = offsetof(_state, _field), \
+ .start = (_start), \
+}
+
#define VMSTATE_VBUFFER(_field, _state, _version, _test, _start, _field_size) { \
.name = (stringify(_field)), \
.version_id = (_version), \
diff --git a/savevm.c b/savevm.c
index 2715f8f..c7da4a6 100644
--- a/savevm.c
+++ b/savevm.c
@@ -1147,6 +1147,9 @@ int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd,
if (field->flags & VMS_VBUFFER) {
size = *(int32_t *)(opaque+field->size_offset);
+ if (field->flags & VMS_MULTIPLY) {
+ size *= field->size;
+ }
}
if (field->flags & VMS_ARRAY) {
n_elems = field->num;
@@ -1200,6 +1203,9 @@ void vmstate_save_state(QEMUFile *f, const VMStateDescription *vmsd,
if (field->flags & VMS_VBUFFER) {
size = *(int32_t *)(opaque+field->size_offset);
+ if (field->flags & VMS_MULTIPLY) {
+ size *= field->size;
+ }
}
if (field->flags & VMS_ARRAY) {
n_elems = field->num;
--
1.6.5.2
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [Qemu-devel] [PATCH 10/12] pci: vmstate_register() already assign consecutive numbers starting at 0
2009-12-02 11:36 [Qemu-devel] [PATCH 00/12] vmstate cleanups and fixes Juan Quintela
` (8 preceding siblings ...)
2009-12-02 11:36 ` [Qemu-devel] [PATCH 09/12] vmstate: Add support for multiplying size for a constant Juan Quintela
@ 2009-12-02 11:36 ` Juan Quintela
2009-12-02 11:36 ` [Qemu-devel] [PATCH 11/12] qdev: enable vmstate_unregister() support Juan Quintela
2009-12-02 11:36 ` [Qemu-devel] [PATCH 12/12] savevm: Port to qdev.vmsd all devices that have qdev Juan Quintela
11 siblings, 0 replies; 13+ messages in thread
From: Juan Quintela @ 2009-12-02 11:36 UTC (permalink / raw)
To: qemu-devel
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
hw/pci.c | 4 +---
1 files changed, 1 insertions(+), 3 deletions(-)
diff --git a/hw/pci.c b/hw/pci.c
index 8cf008d..3f855b3 100644
--- a/hw/pci.c
+++ b/hw/pci.c
@@ -161,8 +161,6 @@ PCIBus *pci_find_root_bus(int domain)
void pci_bus_new_inplace(PCIBus *bus, DeviceState *parent,
const char *name, int devfn_min)
{
- static int nbus = 0;
-
qbus_create_inplace(&bus->qbus, &pci_bus_info, parent, name);
bus->devfn_min = devfn_min;
@@ -170,7 +168,7 @@ void pci_bus_new_inplace(PCIBus *bus, DeviceState *parent,
QLIST_INIT(&bus->child);
pci_host_bus_register(0, bus); /* for now only pci domain 0 is supported */
- vmstate_register(nbus++, &vmstate_pcibus, bus);
+ vmstate_register(-1, &vmstate_pcibus, bus);
qemu_register_reset(pci_bus_reset, bus);
}
--
1.6.5.2
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [Qemu-devel] [PATCH 11/12] qdev: enable vmstate_unregister() support
2009-12-02 11:36 [Qemu-devel] [PATCH 00/12] vmstate cleanups and fixes Juan Quintela
` (9 preceding siblings ...)
2009-12-02 11:36 ` [Qemu-devel] [PATCH 10/12] pci: vmstate_register() already assign consecutive numbers starting at 0 Juan Quintela
@ 2009-12-02 11:36 ` Juan Quintela
2009-12-02 11:36 ` [Qemu-devel] [PATCH 12/12] savevm: Port to qdev.vmsd all devices that have qdev Juan Quintela
11 siblings, 0 replies; 13+ messages in thread
From: Juan Quintela @ 2009-12-02 11:36 UTC (permalink / raw)
To: qemu-devel
Now vmstate_unregister have the right type
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
hw/qdev.c | 2 --
1 files changed, 0 insertions(+), 2 deletions(-)
diff --git a/hw/qdev.c b/hw/qdev.c
index d19d531..e9d76d4 100644
--- a/hw/qdev.c
+++ b/hw/qdev.c
@@ -296,10 +296,8 @@ void qdev_free(DeviceState *dev)
bus = QLIST_FIRST(&dev->child_bus);
qbus_free(bus);
}
-#if 0 /* FIXME: need sane vmstate_unregister function */
if (dev->info->vmsd)
vmstate_unregister(dev->info->vmsd, dev);
-#endif
if (dev->info->exit)
dev->info->exit(dev);
if (dev->opts)
--
1.6.5.2
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [Qemu-devel] [PATCH 12/12] savevm: Port to qdev.vmsd all devices that have qdev
2009-12-02 11:36 [Qemu-devel] [PATCH 00/12] vmstate cleanups and fixes Juan Quintela
` (10 preceding siblings ...)
2009-12-02 11:36 ` [Qemu-devel] [PATCH 11/12] qdev: enable vmstate_unregister() support Juan Quintela
@ 2009-12-02 11:36 ` Juan Quintela
11 siblings, 0 replies; 13+ messages in thread
From: Juan Quintela @ 2009-12-02 11:36 UTC (permalink / raw)
To: qemu-devel
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
hw/ac97.c | 2 +-
hw/cirrus_vga.c | 2 +-
hw/cs4231a.c | 2 +-
hw/e1000.c | 4 +---
hw/es1370.c | 2 +-
hw/gus.c | 2 +-
hw/lance.c | 14 ++++++++++++--
hw/lm832x.c | 2 +-
hw/lsi53c895a.c | 2 +-
hw/max7310.c | 2 +-
hw/ne2000-isa.c | 12 +++++++++++-
hw/ne2000.c | 3 +--
hw/pckbd.c | 13 ++++++++++++-
hw/pcnet.c | 4 +---
hw/piix_pci.c | 4 ++--
hw/rtl8139.c | 4 +---
hw/sb16.c | 2 +-
hw/ssd0303.c | 2 +-
hw/tmp105.c | 2 +-
hw/twl92230.c | 2 +-
hw/usb-uhci.c | 3 ++-
hw/vga-pci.c | 2 +-
hw/vmware_vga.c | 2 +-
hw/wdt_i6300esb.c | 3 +--
hw/wdt_ib700.c | 2 +-
hw/wm8750.c | 2 +-
26 files changed, 60 insertions(+), 36 deletions(-)
diff --git a/hw/ac97.c b/hw/ac97.c
index f2d2823..62e349a 100644
--- a/hw/ac97.c
+++ b/hw/ac97.c
@@ -1319,7 +1319,6 @@ static int ac97_initfn (PCIDevice *dev)
pci_register_bar (&s->dev, 0, 256 * 4, PCI_BASE_ADDRESS_SPACE_IO,
ac97_map);
pci_register_bar (&s->dev, 1, 64 * 4, PCI_BASE_ADDRESS_SPACE_IO, ac97_map);
- vmstate_register (0, &vmstate_ac97, s);
qemu_register_reset (ac97_on_reset, s);
AUD_register_card ("ac97", &s->card);
ac97_on_reset (s);
@@ -1336,6 +1335,7 @@ static PCIDeviceInfo ac97_info = {
.qdev.name = "AC97",
.qdev.desc = "Intel 82801AA AC97 Audio",
.qdev.size = sizeof (AC97LinkState),
+ .qdev.vmsd = &vmstate_ac97,
.init = ac97_initfn,
};
diff --git a/hw/cirrus_vga.c b/hw/cirrus_vga.c
index d76e5bb..1194b5a 100644
--- a/hw/cirrus_vga.c
+++ b/hw/cirrus_vga.c
@@ -3245,7 +3245,6 @@ static int pci_cirrus_vga_initfn(PCIDevice *dev)
pci_register_bar((PCIDevice *)d, 1, CIRRUS_PNPMMIO_SIZE,
PCI_BASE_ADDRESS_SPACE_MEMORY, cirrus_pci_mmio_map);
}
- vmstate_register(0, &vmstate_pci_cirrus_vga, d);
/* ROM BIOS */
rom_add_vga(VGABIOS_CIRRUS_FILENAME);
@@ -3260,6 +3259,7 @@ void pci_cirrus_vga_init(PCIBus *bus)
static PCIDeviceInfo cirrus_vga_info = {
.qdev.name = "Cirrus VGA",
.qdev.size = sizeof(PCICirrusVGAState),
+ .qdev.vmsd = &vmstate_pci_cirrus_vga,
.init = pci_cirrus_vga_initfn,
.config_write = pci_cirrus_write_config,
};
diff --git a/hw/cs4231a.c b/hw/cs4231a.c
index 7c29aa8..4d5ce5c 100644
--- a/hw/cs4231a.c
+++ b/hw/cs4231a.c
@@ -651,7 +651,6 @@ static int cs4231a_initfn (ISADevice *dev)
DMA_register_channel (s->dma, cs_dma_read, s);
- vmstate_register (0, &vmstate_cs4231a, s);
qemu_register_reset (cs_reset, s);
cs_reset (s);
@@ -669,6 +668,7 @@ static ISADeviceInfo cs4231a_info = {
.qdev.name = "cs4231a",
.qdev.desc = "Crystal Semiconductor CS4231A",
.qdev.size = sizeof (CSState),
+ .qdev.vmsd = &vmstate_cs4231a,
.init = cs4231a_initfn,
.qdev.props = (Property[]) {
DEFINE_PROP_HEX32 ("iobase", CSState, port, 0x534),
diff --git a/hw/e1000.c b/hw/e1000.c
index 00f6a57..782a60b 100644
--- a/hw/e1000.c
+++ b/hw/e1000.c
@@ -1051,7 +1051,6 @@ pci_e1000_uninit(PCIDevice *dev)
cpu_unregister_io_memory(d->mmio_index);
qemu_del_vlan_client(d->vc);
- vmstate_unregister(&vmstate_e1000, d);
return 0;
}
@@ -1116,8 +1115,6 @@ static int pci_e1000_init(PCIDevice *pci_dev)
qemu_format_nic_info_str(d->vc, macaddr);
- vmstate_register(-1, &vmstate_e1000, d);
-
if (!pci_dev->qdev.hotplugged) {
static int loaded = 0;
if (!loaded) {
@@ -1139,6 +1136,7 @@ static PCIDeviceInfo e1000_info = {
.qdev.desc = "Intel Gigabit Ethernet",
.qdev.size = sizeof(E1000State),
.qdev.reset = qdev_e1000_reset,
+ .qdev.vmsd = &vmstate_e1000,
.init = pci_e1000_init,
.exit = pci_e1000_uninit,
.qdev.props = (Property[]) {
diff --git a/hw/es1370.c b/hw/es1370.c
index 4e646dc..c358253 100644
--- a/hw/es1370.c
+++ b/hw/es1370.c
@@ -1023,7 +1023,6 @@ static int es1370_initfn (PCIDevice *dev)
c[0x3f] = 0x80;
pci_register_bar (&s->dev, 0, 256, PCI_BASE_ADDRESS_SPACE_IO, es1370_map);
- vmstate_register (0, &vmstate_es1370, s);
qemu_register_reset (es1370_on_reset, s);
AUD_register_card ("es1370", &s->card);
@@ -1041,6 +1040,7 @@ static PCIDeviceInfo es1370_info = {
.qdev.name = "ES1370",
.qdev.desc = "ENSONIQ AudioPCI ES1370",
.qdev.size = sizeof (ES1370State),
+ .qdev.vmsd = &vmstate_es1370,
.init = es1370_initfn,
};
diff --git a/hw/gus.c b/hw/gus.c
index d35da0a..e9016d8 100644
--- a/hw/gus.c
+++ b/hw/gus.c
@@ -287,7 +287,6 @@ static int gus_initfn (ISADevice *dev)
AUD_set_active_out (s->voice, 1);
- vmstate_register (0, &vmstate_gus, s);
return 0;
}
@@ -301,6 +300,7 @@ static ISADeviceInfo gus_info = {
.qdev.name = "gus",
.qdev.desc = "Gravis Ultrasound GF1",
.qdev.size = sizeof (GUSState),
+ .qdev.vmsd = &vmstate_gus,
.init = gus_initfn,
.qdev.props = (Property[]) {
DEFINE_PROP_UINT32 ("freq", GUSState, freq, 44100),
diff --git a/hw/lance.c b/hw/lance.c
index 0a96644..1f31d10 100644
--- a/hw/lance.c
+++ b/hw/lance.c
@@ -96,10 +96,20 @@ static void lance_cleanup(VLANClientState *vc)
{
PCNetState *d = vc->opaque;
- vmstate_unregister(&vmstate_pcnet, d);
pcnet_common_cleanup(d);
}
+static const VMStateDescription vmstate_lance = {
+ .name = "pcnet",
+ .version_id = 3,
+ .minimum_version_id = 2,
+ .minimum_version_id_old = 2,
+ .fields = (VMStateField []) {
+ VMSTATE_STRUCT(state, SysBusPCNetState, 0, vmstate_pcnet, PCNetState),
+ VMSTATE_END_OF_LIST()
+ }
+};
+
static int lance_init(SysBusDevice *dev)
{
SysBusPCNetState *d = FROM_SYSBUS(SysBusPCNetState, dev);
@@ -117,7 +127,6 @@ static int lance_init(SysBusDevice *dev)
s->phys_mem_read = ledma_memory_read;
s->phys_mem_write = ledma_memory_write;
- vmstate_register(-1, &vmstate_pcnet, d);
return pcnet_common_init(&dev->qdev, s, lance_cleanup);
}
@@ -133,6 +142,7 @@ static SysBusDeviceInfo lance_info = {
.qdev.name = "lance",
.qdev.size = sizeof(SysBusPCNetState),
.qdev.reset = lance_reset,
+ .qdev.vmsd = &vmstate_lance,
.qdev.props = (Property[]) {
DEFINE_PROP_PTR("dma", SysBusPCNetState, state.dma_opaque),
DEFINE_NIC_PROPERTIES(SysBusPCNetState, state.conf),
diff --git a/hw/lm832x.c b/hw/lm832x.c
index 7e552c7..ce7dcac 100644
--- a/hw/lm832x.c
+++ b/hw/lm832x.c
@@ -471,7 +471,6 @@ static int lm8323_init(i2c_slave *i2c)
lm_kbd_reset(s);
qemu_register_reset((void *) lm_kbd_reset, s);
- vmstate_register(-1, &vmstate_lm_kbd, s);
return 0;
}
@@ -498,6 +497,7 @@ void lm832x_key_event(struct i2c_slave *i2c, int key, int state)
static I2CSlaveInfo lm8323_info = {
.qdev.name = "lm8323",
.qdev.size = sizeof(LM823KbdState),
+ .qdev.vmsd = &vmstate_lm_kbd,
.init = lm8323_init,
.event = lm_i2c_event,
.recv = lm_i2c_rx,
diff --git a/hw/lsi53c895a.c b/hw/lsi53c895a.c
index 8b8a80b..01caca0 100644
--- a/hw/lsi53c895a.c
+++ b/hw/lsi53c895a.c
@@ -2106,7 +2106,6 @@ static int lsi_scsi_init(PCIDevice *dev)
if (!dev->qdev.hotplugged) {
scsi_bus_legacy_handle_cmdline(&s->bus);
}
- vmstate_register(-1, &vmstate_lsi_scsi, s);
return 0;
}
@@ -2114,6 +2113,7 @@ static PCIDeviceInfo lsi_info = {
.qdev.name = "lsi53c895a",
.qdev.alias = "lsi",
.qdev.size = sizeof(LSIState),
+ .qdev.vmsd = &vmstate_lsi_scsi,
.init = lsi_scsi_init,
.exit = lsi_scsi_uninit,
};
diff --git a/hw/max7310.c b/hw/max7310.c
index 0ce6ac9..c302eb6 100644
--- a/hw/max7310.c
+++ b/hw/max7310.c
@@ -184,7 +184,6 @@ static int max7310_init(i2c_slave *i2c)
max7310_reset(&s->i2c);
- vmstate_register(-1, &vmstate_max7310, s);
return 0;
}
@@ -206,6 +205,7 @@ void max7310_gpio_out_set(i2c_slave *i2c, int line, qemu_irq handler)
static I2CSlaveInfo max7310_info = {
.qdev.name = "max7310",
.qdev.size = sizeof(MAX7310State),
+ .qdev.vmsd = &vmstate_max7310,
.init = max7310_init,
.event = max7310_event,
.recv = max7310_rx,
diff --git a/hw/ne2000-isa.c b/hw/ne2000-isa.c
index 729e8e2..5a5bc2d 100644
--- a/hw/ne2000-isa.c
+++ b/hw/ne2000-isa.c
@@ -42,6 +42,17 @@ static void isa_ne2000_cleanup(VLANClientState *vc)
s->vc = NULL;
}
+const VMStateDescription vmstate_isa_ne2000 = {
+ .name = "ne2000",
+ .version_id = 2,
+ .minimum_version_id = 0,
+ .minimum_version_id_old = 0,
+ .fields = (VMStateField []) {
+ VMSTATE_STRUCT(ne2000, ISANE2000State, 0, vmstate_ne2000, NE2000State),
+ VMSTATE_END_OF_LIST()
+ }
+};
+
static int isa_ne2000_initfn(ISADevice *dev)
{
ISANE2000State *isa = DO_UPCAST(ISANE2000State, dev, dev);
@@ -69,7 +80,6 @@ static int isa_ne2000_initfn(ISADevice *dev)
NULL, isa_ne2000_cleanup, s);
qemu_format_nic_info_str(s->vc, s->c.macaddr.a);
- vmstate_register(-1, &vmstate_ne2000, s);
return 0;
}
diff --git a/hw/ne2000.c b/hw/ne2000.c
index 63efc3a..641b00f 100644
--- a/hw/ne2000.c
+++ b/hw/ne2000.c
@@ -739,7 +739,6 @@ static int pci_ne2000_init(PCIDevice *pci_dev)
}
}
- vmstate_register(-1, &vmstate_pci_ne2000, d);
return 0;
}
@@ -748,7 +747,6 @@ static int pci_ne2000_exit(PCIDevice *pci_dev)
PCINE2000State *d = DO_UPCAST(PCINE2000State, dev, pci_dev);
NE2000State *s = &d->ne2000;
- vmstate_unregister(&vmstate_pci_ne2000, s);
qemu_del_vlan_client(s->vc);
return 0;
}
@@ -756,6 +754,7 @@ static int pci_ne2000_exit(PCIDevice *pci_dev)
static PCIDeviceInfo ne2000_info = {
.qdev.name = "ne2k_pci",
.qdev.size = sizeof(PCINE2000State),
+ .qdev.vmsd = &vmstate_pci_ne2000,
.init = pci_ne2000_init,
.exit = pci_ne2000_exit,
.qdev.props = (Property[]) {
diff --git a/hw/pckbd.c b/hw/pckbd.c
index a81b303..7e0d68d 100644
--- a/hw/pckbd.c
+++ b/hw/pckbd.c
@@ -414,6 +414,17 @@ typedef struct ISAKBDState {
KBDState kbd;
} ISAKBDState;
+const VMStateDescription vmstate_kbd_isa = {
+ .name = "pckbd",
+ .version_id = 3,
+ .minimum_version_id = 3,
+ .minimum_version_id_old = 3,
+ .fields = (VMStateField []) {
+ VMSTATE_STRUCT(kbd, ISAKBDState, 0, vmstate_kbd, KBDState),
+ VMSTATE_END_OF_LIST()
+ }
+};
+
static int i8042_initfn(ISADevice *dev)
{
KBDState *s = &(DO_UPCAST(ISAKBDState, dev, dev)->kbd);
@@ -421,7 +432,6 @@ static int i8042_initfn(ISADevice *dev)
isa_init_irq(dev, &s->irq_kbd, 1);
isa_init_irq(dev, &s->irq_mouse, 12);
- vmstate_register(0, &vmstate_kbd, s);
register_ioport_read(0x60, 1, 1, kbd_read_data, s);
register_ioport_write(0x60, 1, 1, kbd_write_data, s);
register_ioport_read(0x64, 1, 1, kbd_read_status, s);
@@ -439,6 +449,7 @@ static int i8042_initfn(ISADevice *dev)
static ISADeviceInfo i8042_info = {
.qdev.name = "i8042",
.qdev.size = sizeof(ISAKBDState),
+ .qdev.vmsd = &vmstate_kbd_isa,
.qdev.no_user = 1,
.init = i8042_initfn,
};
diff --git a/hw/pcnet.c b/hw/pcnet.c
index ee3db09..e2e4dd5 100644
--- a/hw/pcnet.c
+++ b/hw/pcnet.c
@@ -1957,7 +1957,6 @@ static int pci_pcnet_uninit(PCIDevice *dev)
PCIPCNetState *d = DO_UPCAST(PCIPCNetState, pci_dev, dev);
cpu_unregister_io_memory(d->state.mmio_index);
- vmstate_unregister(&vmstate_pci_pcnet, d);
qemu_del_timer(d->state.poll_timer);
qemu_free_timer(d->state.poll_timer);
qemu_del_vlan_client(d->state.vc);
@@ -2007,8 +2006,6 @@ static int pci_pcnet_init(PCIDevice *pci_dev)
s->phys_mem_read = pci_physical_memory_read;
s->phys_mem_write = pci_physical_memory_write;
- vmstate_register(-1, &vmstate_pci_pcnet, d);
-
if (!pci_dev->qdev.hotplugged) {
static int loaded = 0;
if (!loaded) {
@@ -2031,6 +2028,7 @@ static PCIDeviceInfo pcnet_info = {
.qdev.name = "pcnet",
.qdev.size = sizeof(PCIPCNetState),
.qdev.reset = pci_reset,
+ .qdev.vmsd = &vmstate_pci_pcnet,
.init = pci_pcnet_init,
.exit = pci_pcnet_uninit,
.qdev.props = (Property[]) {
diff --git a/hw/piix_pci.c b/hw/piix_pci.c
index a44f941..1b67475 100644
--- a/hw/piix_pci.c
+++ b/hw/piix_pci.c
@@ -198,7 +198,6 @@ static int i440fx_initfn(PCIDevice *dev)
d->dev.config[0x72] = 0x02; /* SMRAM */
- vmstate_register(0, &vmstate_i440fx, d);
return 0;
}
@@ -312,7 +311,6 @@ static int piix3_initfn(PCIDevice *dev)
uint8_t *pci_conf;
isa_bus_new(&d->dev.qdev);
- vmstate_register(0, &vmstate_piix3, d);
pci_conf = d->dev.config;
pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_INTEL);
@@ -330,6 +328,7 @@ static PCIDeviceInfo i440fx_info[] = {
.qdev.name = "i440FX",
.qdev.desc = "Host bridge",
.qdev.size = sizeof(PCII440FXState),
+ .qdev.vmsd = &vmstate_i440fx,
.qdev.no_user = 1,
.init = i440fx_initfn,
.config_write = i440fx_write_config,
@@ -337,6 +336,7 @@ static PCIDeviceInfo i440fx_info[] = {
.qdev.name = "PIIX3",
.qdev.desc = "ISA bridge",
.qdev.size = sizeof(PIIX3State),
+ .qdev.vmsd = &vmstate_piix3,
.qdev.no_user = 1,
.init = piix3_initfn,
},{
diff --git a/hw/rtl8139.c b/hw/rtl8139.c
index c166db0..1a0df5e 100644
--- a/hw/rtl8139.c
+++ b/hw/rtl8139.c
@@ -3300,7 +3300,6 @@ static int pci_rtl8139_uninit(PCIDevice *dev)
qemu_del_timer(s->timer);
qemu_free_timer(s->timer);
#endif
- vmstate_unregister(&vmstate_rtl8139, s);
qemu_del_vlan_client(s->vc);
return 0;
}
@@ -3343,8 +3342,6 @@ static int pci_rtl8139_init(PCIDevice *dev)
s->cplus_txbuffer_len = 0;
s->cplus_txbuffer_offset = 0;
- vmstate_register(-1, &vmstate_rtl8139, s);
-
#ifdef RTL8139_ONBOARD_TIMER
s->timer = qemu_new_timer(vm_clock, rtl8139_timer, s);
@@ -3366,6 +3363,7 @@ static PCIDeviceInfo rtl8139_info = {
.qdev.name = "rtl8139",
.qdev.size = sizeof(RTL8139State),
.qdev.reset = rtl8139_reset,
+ .qdev.vmsd = &vmstate_rtl8139,
.init = pci_rtl8139_init,
.exit = pci_rtl8139_uninit,
.qdev.props = (Property[]) {
diff --git a/hw/sb16.c b/hw/sb16.c
index 4c0d682..9f4ac50 100644
--- a/hw/sb16.c
+++ b/hw/sb16.c
@@ -1381,7 +1381,6 @@ static int sb16_initfn (ISADevice *dev)
DMA_register_channel (s->dma, SB_read_DMA, s);
s->can_write = 1;
- vmstate_register (0, &vmstate_sb16, s);
AUD_register_card ("sb16", &s->card);
return 0;
}
@@ -1396,6 +1395,7 @@ static ISADeviceInfo sb16_info = {
.qdev.name = "sb16",
.qdev.desc = "Creative Sound Blaster 16",
.qdev.size = sizeof (SB16State),
+ .qdev.vmsd = &vmstate_sb16,
.init = sb16_initfn,
.qdev.props = (Property[]) {
DEFINE_PROP_HEX32 ("version", SB16State, ver, 0x0405), /* 4.5 */
diff --git a/hw/ssd0303.c b/hw/ssd0303.c
index f60930e..108c068 100644
--- a/hw/ssd0303.c
+++ b/hw/ssd0303.c
@@ -291,13 +291,13 @@ static int ssd0303_init(i2c_slave *i2c)
ssd0303_invalidate_display,
NULL, NULL, s);
qemu_console_resize(s->ds, 96 * MAGNIFY, 16 * MAGNIFY);
- vmstate_register(-1, &vmstate_ssd0303, s);
return 0;
}
static I2CSlaveInfo ssd0303_info = {
.qdev.name = "ssd0303",
.qdev.size = sizeof(ssd0303_state),
+ .qdev.vmsd = &vmstate_ssd0303,
.init = ssd0303_init,
.event = ssd0303_event,
.recv = ssd0303_recv,
diff --git a/hw/tmp105.c b/hw/tmp105.c
index 74141b3..8343aff 100644
--- a/hw/tmp105.c
+++ b/hw/tmp105.c
@@ -228,13 +228,13 @@ static int tmp105_init(i2c_slave *i2c)
tmp105_reset(&s->i2c);
- vmstate_register(-1, &vmstate_tmp105, s);
return 0;
}
static I2CSlaveInfo tmp105_info = {
.qdev.name = "tmp105",
.qdev.size = sizeof(TMP105State),
+ .qdev.vmsd = &vmstate_tmp105,
.init = tmp105_init,
.event = tmp105_event,
.recv = tmp105_rx,
diff --git a/hw/twl92230.c b/hw/twl92230.c
index 93232da..b1b2ac9 100644
--- a/hw/twl92230.c
+++ b/hw/twl92230.c
@@ -855,13 +855,13 @@ static int twl92230_init(i2c_slave *i2c)
menelaus_reset(&s->i2c);
- vmstate_register(-1, &vmstate_menelaus, s);
return 0;
}
static I2CSlaveInfo twl92230_info = {
.qdev.name ="twl92230",
.qdev.size = sizeof(MenelausState),
+ .qdev.vmsd = &vmstate_menelaus,
.init = twl92230_init,
.event = menelaus_event,
.recv = menelaus_rx,
diff --git a/hw/usb-uhci.c b/hw/usb-uhci.c
index 671916e..ba26a4e 100644
--- a/hw/usb-uhci.c
+++ b/hw/usb-uhci.c
@@ -1086,7 +1086,6 @@ static int usb_uhci_common_initfn(UHCIState *s)
pci_register_bar(&s->dev, 4, 0x20,
PCI_BASE_ADDRESS_SPACE_IO, uhci_map);
- vmstate_register(0, &vmstate_uhci, s);
return 0;
}
@@ -1114,10 +1113,12 @@ static PCIDeviceInfo uhci_info[] = {
{
.qdev.name = "PIIX3 USB-UHCI",
.qdev.size = sizeof(UHCIState),
+ .qdev.vmsd = &vmstate_uhci,
.init = usb_uhci_piix3_initfn,
},{
.qdev.name = "PIIX4 USB-UHCI",
.qdev.size = sizeof(UHCIState),
+ .qdev.vmsd = &vmstate_uhci,
.init = usb_uhci_piix4_initfn,
},{
/* end of list */
diff --git a/hw/vga-pci.c b/hw/vga-pci.c
index 234d581..14cecdc 100644
--- a/hw/vga-pci.c
+++ b/hw/vga-pci.c
@@ -82,7 +82,6 @@ static int pci_vga_initfn(PCIDevice *dev)
// vga + console init
vga_common_init(s, VGA_RAM_SIZE);
vga_init(s);
- vmstate_register(0, &vmstate_vga_pci, d);
s->ds = graphic_console_init(s->update, s->invalidate,
s->screen_dump, s->text_update, s);
@@ -128,6 +127,7 @@ int pci_vga_init(PCIBus *bus,
static PCIDeviceInfo vga_info = {
.qdev.name = "VGA",
.qdev.size = sizeof(PCIVGAState),
+ .qdev.vmsd = &vmstate_vga_pci,
.init = pci_vga_initfn,
.config_write = pci_vga_write_config,
.qdev.props = (Property[]) {
diff --git a/hw/vmware_vga.c b/hw/vmware_vga.c
index bb34101..24ea620 100644
--- a/hw/vmware_vga.c
+++ b/hw/vmware_vga.c
@@ -1189,7 +1189,6 @@ static int pci_vmsvga_initfn(PCIDevice *dev)
vmsvga_init(&s->chip, VGA_RAM_SIZE);
- vmstate_register(0, &vmstate_vmware_vga, s);
return 0;
}
@@ -1201,6 +1200,7 @@ void pci_vmsvga_init(PCIBus *bus)
static PCIDeviceInfo vmsvga_info = {
.qdev.name = "QEMUware SVGA",
.qdev.size = sizeof(struct pci_vmsvga_state_s),
+ .qdev.vmsd = &vmstate_vmware_vga,
.init = pci_vmsvga_initfn,
};
diff --git a/hw/wdt_i6300esb.c b/hw/wdt_i6300esb.c
index 27fa09e..805b302 100644
--- a/hw/wdt_i6300esb.c
+++ b/hw/wdt_i6300esb.c
@@ -416,8 +416,6 @@ static int i6300esb_init(PCIDevice *dev)
pci_register_bar(&d->dev, 0, 0x10,
PCI_BASE_ADDRESS_SPACE_MEMORY, i6300esb_map);
- vmstate_register(-1, &vmstate_i6300esb, d);
-
return 0;
}
@@ -429,6 +427,7 @@ static WatchdogTimerModel model = {
static PCIDeviceInfo i6300esb_info = {
.qdev.name = "i6300esb",
.qdev.size = sizeof(I6300State),
+ .qdev.vmsd = &vmstate_i6300esb,
.config_read = i6300esb_config_read,
.config_write = i6300esb_config_write,
.init = i6300esb_init,
diff --git a/hw/wdt_ib700.c b/hw/wdt_ib700.c
index d67bf9e..c34687b 100644
--- a/hw/wdt_ib700.c
+++ b/hw/wdt_ib700.c
@@ -98,7 +98,6 @@ static int wdt_ib700_init(ISADevice *dev)
IB700State *s = DO_UPCAST(IB700State, dev, dev);
s->timer = qemu_new_timer(vm_clock, ib700_timer_expired, s);
- vmstate_register(-1, &vmstate_ib700, s);
register_ioport_write(0x441, 2, 1, ib700_write_disable_reg, s);
register_ioport_write(0x443, 2, 1, ib700_write_enable_reg, s);
@@ -113,6 +112,7 @@ static WatchdogTimerModel model = {
static ISADeviceInfo wdt_ib700_info = {
.qdev.name = "ib700",
.qdev.size = sizeof(IB700State),
+ .qdev.vmsd = &vmstate_ib700,
.init = wdt_ib700_init,
};
diff --git a/hw/wm8750.c b/hw/wm8750.c
index e6a9c06..6064da0 100644
--- a/hw/wm8750.c
+++ b/hw/wm8750.c
@@ -622,7 +622,6 @@ static int wm8750_init(i2c_slave *i2c)
AUD_register_card(CODEC, &s->card);
wm8750_reset(&s->i2c);
- vmstate_register(-1, &vmstate_wm8750, s);
return 0;
}
@@ -699,6 +698,7 @@ void wm8750_set_bclk_in(void *opaque, int new_hz)
static I2CSlaveInfo wm8750_info = {
.qdev.name = "wm8750",
.qdev.size = sizeof(WM8750State),
+ .qdev.vmsd = &vmstate_wm8750,
.init = wm8750_init,
.event = wm8750_event,
.recv = wm8750_rx,
--
1.6.5.2
^ permalink raw reply related [flat|nested] 13+ messages in thread
end of thread, other threads:[~2009-12-02 11:37 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-12-02 11:36 [Qemu-devel] [PATCH 00/12] vmstate cleanups and fixes Juan Quintela
2009-12-02 11:36 ` [Qemu-devel] [PATCH 01/12] vmstate: Avoid seeking Juan Quintela
2009-12-02 11:36 ` [Qemu-devel] [PATCH 02/12] vmstate: Fix info field of VMSTATE_MACADDR Juan Quintela
2009-12-02 11:36 ` [Qemu-devel] [PATCH 03/12] vmstate: fix missing ARRAY_OF_POINTERS support on save state Juan Quintela
2009-12-02 11:36 ` [Qemu-devel] [PATCH 04/12] vmstate: Add support for VBUFFERS Juan Quintela
2009-12-02 11:36 ` [Qemu-devel] [PATCH 05/12] vmstate: Introduce VMSTATE_STRUCT_TEST Juan Quintela
2009-12-02 11:36 ` [Qemu-devel] [PATCH 06/12] vmstate: Introduce VMSTATE_STRUCT_POINTER_TEST Juan Quintela
2009-12-02 11:36 ` [Qemu-devel] [PATCH 07/12] vmstate: Introduce UINT16_TEST support Juan Quintela
2009-12-02 11:36 ` [Qemu-devel] [PATCH 08/12] vmstate: remove usused VMSTATE_STRUCT_ARRAY_SIZE_UINT8 Juan Quintela
2009-12-02 11:36 ` [Qemu-devel] [PATCH 09/12] vmstate: Add support for multiplying size for a constant Juan Quintela
2009-12-02 11:36 ` [Qemu-devel] [PATCH 10/12] pci: vmstate_register() already assign consecutive numbers starting at 0 Juan Quintela
2009-12-02 11:36 ` [Qemu-devel] [PATCH 11/12] qdev: enable vmstate_unregister() support Juan Quintela
2009-12-02 11:36 ` [Qemu-devel] [PATCH 12/12] savevm: Port to qdev.vmsd all devices that have qdev Juan Quintela
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.