mirror of
https://github.com/qemu/qemu.git
synced 2024-11-30 23:33:51 +08:00
virtio-blk: live migrate s->rq with multiqueue
Add a field for the virtqueue index when migrating the s->rq request list. The new field is only needed when num_queues > 1. Existing QEMUs are unaffected by this change and therefore virtio-blk migration stays compatible. Suggested-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Reviewed-by: Fam Zheng <famz@redhat.com> Message-id: 1466511196-12612-6-git-send-email-stefanha@redhat.com Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
edaffd9f0b
commit
30d8bf6d17
@ -808,6 +808,11 @@ static void virtio_blk_save_device(VirtIODevice *vdev, QEMUFile *f)
|
||||
|
||||
while (req) {
|
||||
qemu_put_sbyte(f, 1);
|
||||
|
||||
if (s->conf.num_queues > 1) {
|
||||
qemu_put_be32(f, virtio_get_queue_index(req->vq));
|
||||
}
|
||||
|
||||
qemu_put_virtqueue_element(f, &req->elem);
|
||||
req = req->next;
|
||||
}
|
||||
@ -831,9 +836,22 @@ static int virtio_blk_load_device(VirtIODevice *vdev, QEMUFile *f,
|
||||
VirtIOBlock *s = VIRTIO_BLK(vdev);
|
||||
|
||||
while (qemu_get_sbyte(f)) {
|
||||
unsigned nvqs = s->conf.num_queues;
|
||||
unsigned vq_idx = 0;
|
||||
VirtIOBlockReq *req;
|
||||
|
||||
if (nvqs > 1) {
|
||||
vq_idx = qemu_get_be32(f);
|
||||
|
||||
if (vq_idx >= nvqs) {
|
||||
error_report("Invalid virtqueue index in request list: %#x",
|
||||
vq_idx);
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
req = qemu_get_virtqueue_element(f, sizeof(VirtIOBlockReq));
|
||||
virtio_blk_init_request(s, s->vq, req);
|
||||
virtio_blk_init_request(s, virtio_get_queue(vdev, vq_idx), req);
|
||||
req->next = s->rq;
|
||||
s->rq = req;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user