[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 16/41] virtio: Add num_pci_queues field
From: |
Juan Quintela |
Subject: |
[Qemu-devel] [PATCH 16/41] virtio: Add num_pci_queues field |
Date: |
Wed, 2 Dec 2009 13:04:14 +0100 |
Signed-off-by: Juan Quintela <address@hidden>
---
hw/virtio.c | 32 +++++++++++++++++++-------------
hw/virtio.h | 2 ++
2 files changed, 21 insertions(+), 13 deletions(-)
diff --git a/hw/virtio.c b/hw/virtio.c
index b565bf9..f549543 100644
--- a/hw/virtio.c
+++ b/hw/virtio.c
@@ -615,10 +615,24 @@ void virtio_notify_config(VirtIODevice *vdev)
virtio_notify_vector(vdev, vdev->config_vector);
}
+static void virtio_pre_save(void *opaque)
+{
+ VirtIODevice *vdev = opaque;
+ int i;
+
+ for (i = 0; i < VIRTIO_PCI_QUEUE_MAX; i++) {
+ if (vdev->vq[i].vring.num == 0)
+ break;
+ }
+ vdev->num_pci_queues = i;
+}
+
void virtio_save(VirtIODevice *vdev, QEMUFile *f)
{
int i;
+ virtio_pre_save(vdev);
+
if (vdev->type == VIRTIO_PCI)
vmstate_save_state(f, &vmstate_virtio_pci_config,
vdev->binding_opaque);
@@ -629,17 +643,9 @@ void virtio_save(VirtIODevice *vdev, QEMUFile *f)
qemu_put_be32(f, vdev->config_len);
qemu_put_buffer(f, vdev->config, vdev->config_len);
- for (i = 0; i < VIRTIO_PCI_QUEUE_MAX; i++) {
- if (vdev->vq[i].vring.num == 0)
- break;
- }
-
- qemu_put_be32(f, i);
-
- for (i = 0; i < VIRTIO_PCI_QUEUE_MAX; i++) {
- if (vdev->vq[i].vring.num == 0)
- break;
+ qemu_put_sbe32s(f, &vdev->num_pci_queues);
+ for (i = 0; i < vdev->num_pci_queues; i++) {
qemu_put_be32(f, vdev->vq[i].vring.num);
qemu_put_be64(f, vdev->vq[i].pa);
qemu_put_be16s(f, &vdev->vq[i].last_avail_idx);
@@ -652,7 +658,7 @@ void virtio_save(VirtIODevice *vdev, QEMUFile *f)
int virtio_load(VirtIODevice *vdev, QEMUFile *f)
{
- int num, i, ret;
+ int i, ret;
if (vdev->type == VIRTIO_PCI) {
ret = vmstate_load_state(f, &vmstate_virtio_pci_config,
vdev->binding_opaque,
@@ -668,9 +674,9 @@ int virtio_load(VirtIODevice *vdev, QEMUFile *f)
vdev->config_len = qemu_get_be32(f);
qemu_get_buffer(f, vdev->config, vdev->config_len);
- num = qemu_get_be32(f);
+ qemu_get_sbe32s(f, &vdev->num_pci_queues);
- for (i = 0; i < num; i++) {
+ for (i = 0; i < vdev->num_pci_queues; i++) {
vdev->vq[i].vring.num = qemu_get_be32(f);
vdev->vq[i].pa = qemu_get_be64(f);
qemu_get_be16s(f, &vdev->vq[i].last_avail_idx);
diff --git a/hw/virtio.h b/hw/virtio.h
index 91a6c10..d849f44 100644
--- a/hw/virtio.h
+++ b/hw/virtio.h
@@ -111,6 +111,8 @@ struct VirtIODevice
const VirtIOBindings *binding;
void *binding_opaque;
uint16_t device_id;
+ /* fields used only by vmstate */
+ int32_t num_pci_queues;
};
VirtQueue *virtio_add_queue(VirtIODevice *vdev, int queue_size,
--
1.6.5.2
- [Qemu-devel] [PATCH 12/41] virtio-pci: port pci config to vmstate, (continued)
[Qemu-devel] [PATCH 16/41] virtio: Add num_pci_queues field,
Juan Quintela <=
[Qemu-devel] [PATCH 17/41] virtio: split virtio_post_load() from virtio_load(), Juan Quintela, 2009/12/02
[Qemu-devel] [PATCH 18/41] virtio: change config_len type to int32_t, Juan Quintela, 2009/12/02
[Qemu-devel] [PATCH 21/41] virtio: port to vmstate, Juan Quintela, 2009/12/02
[Qemu-devel] [PATCH 19/41] virtio: use the right types for VirtQueue elements, Juan Quintela, 2009/12/02
[Qemu-devel] [PATCH 20/41] virtio: abstract test for save/load values, Juan Quintela, 2009/12/02