Introduce a function to initialize vq without allocating new ring, desc_state, desc_extra. Subsequent patches will call this function after reset vq to reinitialize vq. Signed-off-by: Xuan Zhuo <xuanzhuo@xxxxxxxxxxxxxxxxx> --- drivers/virtio/virtio_ring.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c index 874f878087a3..3dc6ace2ba7a 100644 --- a/drivers/virtio/virtio_ring.c +++ b/drivers/virtio/virtio_ring.c @@ -953,6 +953,25 @@ static void vring_virtqueue_init_split(struct vring_virtqueue *vq, vq->free_head = 0; } +static void virtqueue_reinit_split(struct vring_virtqueue *vq) +{ + struct virtio_device *vdev = vq->vq.vdev; + int size, i; + + memset(vq->split.vring.desc, 0, vq->split.queue_size_in_bytes); + + size = sizeof(struct vring_desc_state_split) * vq->split.vring.num; + memset(vq->split.desc_state, 0, size); + + size = sizeof(struct vring_desc_extra) * vq->split.vring.num; + memset(vq->split.desc_extra, 0, size); + + for (i = 0; i < vq->split.vring.num - 1; i++) + vq->split.desc_extra[i].next = i + 1; + + vring_virtqueue_init_split(vq, vdev, true); +} + static void vring_virtqueue_attach_split(struct vring_virtqueue *vq, struct vring vring, struct vring_desc_state_split *desc_state, -- 2.31.0