Skip to content

Commit

Permalink
virtio_ring: packed: extract the logic of vring init
Browse files Browse the repository at this point in the history
Separate the logic of initializing vring, and subsequent patches will
call it separately.

This function completes the variable initialization of packed vring. It
together with the logic of atatch constitutes the initialization of
vring.

Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Message-Id: <20220801063902.129329-21-xuanzhuo@linux.alibaba.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
  • Loading branch information
Xuan Zhuo authored and Michael S. Tsirkin committed Aug 11, 2022
1 parent ef3167c commit 1a107c8
Showing 1 changed file with 17 additions and 11 deletions.
28 changes: 17 additions & 11 deletions drivers/virtio/virtio_ring.c
Original file line number Diff line number Diff line change
Expand Up @@ -1932,6 +1932,22 @@ static int vring_alloc_state_extra_packed(struct vring_virtqueue_packed *vring_p
return -ENOMEM;
}

static void virtqueue_vring_init_packed(struct vring_virtqueue_packed *vring_packed,
bool callback)
{
vring_packed->next_avail_idx = 0;
vring_packed->avail_wrap_counter = 1;
vring_packed->event_flags_shadow = 0;
vring_packed->avail_used_flags = 1 << VRING_PACKED_DESC_F_AVAIL;

/* No callback? Tell other side not to bother us. */
if (!callback) {
vring_packed->event_flags_shadow = VRING_PACKED_EVENT_FLAG_DISABLE;
vring_packed->vring.driver->flags =
cpu_to_le16(vring_packed->event_flags_shadow);
}
}

static struct virtqueue *vring_create_virtqueue_packed(
unsigned int index,
unsigned int num,
Expand Down Expand Up @@ -1986,11 +2002,6 @@ static struct virtqueue *vring_create_virtqueue_packed(

vq->packed.vring = vring_packed.vring;

vq->packed.next_avail_idx = 0;
vq->packed.avail_wrap_counter = 1;
vq->packed.event_flags_shadow = 0;
vq->packed.avail_used_flags = 1 << VRING_PACKED_DESC_F_AVAIL;

err = vring_alloc_state_extra_packed(&vring_packed);
if (err)
goto err_state_extra;
Expand All @@ -2001,12 +2012,7 @@ static struct virtqueue *vring_create_virtqueue_packed(
vq->packed.desc_state = vring_packed.desc_state;
vq->packed.desc_extra = vring_packed.desc_extra;

/* No callback? Tell other side not to bother us. */
if (!callback) {
vq->packed.event_flags_shadow = VRING_PACKED_EVENT_FLAG_DISABLE;
vq->packed.vring.driver->flags =
cpu_to_le16(vq->packed.event_flags_shadow);
}
virtqueue_vring_init_packed(&vring_packed, !!callback);

virtqueue_init(vq, num);

Expand Down

0 comments on commit 1a107c8

Please sign in to comment.