mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-08 02:03:56 -06:00
migration: extend VMStateInfo
Current migration code cannot handle some data structures such as QTAILQ in qemu/queue.h. Here we extend the signatures of put/get in VMStateInfo so that customized handling is supported. put now will return int type. Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Signed-off-by: Jianjun Duan <duanj@linux.vnet.ibm.com> Message-Id: <1484852453-12728-2-git-send-email-duanj@linux.vnet.ibm.com> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
This commit is contained in:
parent
d7fc72ceb5
commit
2c21ee769e
22 changed files with 262 additions and 105 deletions
|
@ -2165,7 +2165,8 @@ static int usbredir_post_load(void *priv, int version_id)
|
|||
}
|
||||
|
||||
/* For usbredirparser migration */
|
||||
static void usbredir_put_parser(QEMUFile *f, void *priv, size_t unused)
|
||||
static int usbredir_put_parser(QEMUFile *f, void *priv, size_t unused,
|
||||
VMStateField *field, QJSON *vmdesc)
|
||||
{
|
||||
USBRedirDevice *dev = priv;
|
||||
uint8_t *data;
|
||||
|
@ -2173,7 +2174,7 @@ static void usbredir_put_parser(QEMUFile *f, void *priv, size_t unused)
|
|||
|
||||
if (dev->parser == NULL) {
|
||||
qemu_put_be32(f, 0);
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
usbredirparser_serialize(dev->parser, &data, &len);
|
||||
|
@ -2183,9 +2184,12 @@ static void usbredir_put_parser(QEMUFile *f, void *priv, size_t unused)
|
|||
qemu_put_buffer(f, data, len);
|
||||
|
||||
free(data);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int usbredir_get_parser(QEMUFile *f, void *priv, size_t unused)
|
||||
static int usbredir_get_parser(QEMUFile *f, void *priv, size_t unused,
|
||||
VMStateField *field)
|
||||
{
|
||||
USBRedirDevice *dev = priv;
|
||||
uint8_t *data;
|
||||
|
@ -2228,7 +2232,8 @@ static const VMStateInfo usbredir_parser_vmstate_info = {
|
|||
|
||||
|
||||
/* For buffered packets (iso/irq) queue migration */
|
||||
static void usbredir_put_bufpq(QEMUFile *f, void *priv, size_t unused)
|
||||
static int usbredir_put_bufpq(QEMUFile *f, void *priv, size_t unused,
|
||||
VMStateField *field, QJSON *vmdesc)
|
||||
{
|
||||
struct endp_data *endp = priv;
|
||||
USBRedirDevice *dev = endp->dev;
|
||||
|
@ -2246,9 +2251,12 @@ static void usbredir_put_bufpq(QEMUFile *f, void *priv, size_t unused)
|
|||
i++;
|
||||
}
|
||||
assert(i == endp->bufpq_size);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int usbredir_get_bufpq(QEMUFile *f, void *priv, size_t unused)
|
||||
static int usbredir_get_bufpq(QEMUFile *f, void *priv, size_t unused,
|
||||
VMStateField *field)
|
||||
{
|
||||
struct endp_data *endp = priv;
|
||||
USBRedirDevice *dev = endp->dev;
|
||||
|
@ -2351,7 +2359,8 @@ static const VMStateDescription usbredir_ep_vmstate = {
|
|||
|
||||
|
||||
/* For PacketIdQueue migration */
|
||||
static void usbredir_put_packet_id_q(QEMUFile *f, void *priv, size_t unused)
|
||||
static int usbredir_put_packet_id_q(QEMUFile *f, void *priv, size_t unused,
|
||||
VMStateField *field, QJSON *vmdesc)
|
||||
{
|
||||
struct PacketIdQueue *q = priv;
|
||||
USBRedirDevice *dev = q->dev;
|
||||
|
@ -2365,9 +2374,12 @@ static void usbredir_put_packet_id_q(QEMUFile *f, void *priv, size_t unused)
|
|||
remain--;
|
||||
}
|
||||
assert(remain == 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int usbredir_get_packet_id_q(QEMUFile *f, void *priv, size_t unused)
|
||||
static int usbredir_get_packet_id_q(QEMUFile *f, void *priv, size_t unused,
|
||||
VMStateField *field)
|
||||
{
|
||||
struct PacketIdQueue *q = priv;
|
||||
USBRedirDevice *dev = q->dev;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue