Separate the logic of attach vring, the subsequent patch will call it separately. Signed-off-by: Xuan Zhuo <xuanzhuo@xxxxxxxxxxxxxxxxx> --- drivers/virtio/virtio_ring.c | 47 +++++++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 14 deletions(-) diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c index 5b5976c5742e..80d446fa8d16 100644 --- a/drivers/virtio/virtio_ring.c +++ b/drivers/virtio/virtio_ring.c @@ -1904,6 +1904,35 @@ static int vring_alloc_state_extra_packed(u32 num, return -ENOMEM; } +static void vring_virtqueue_attach_packed(struct vring_virtqueue *vq, + u32 num, + struct vring_packed_desc *ring, + struct vring_packed_desc_event *driver, + struct vring_packed_desc_event *device, + dma_addr_t ring_dma_addr, + dma_addr_t driver_event_dma_addr, + dma_addr_t device_event_dma_addr, + size_t ring_size_in_bytes, + size_t event_size_in_bytes, + struct vring_desc_state_packed *state, + struct vring_desc_extra *extra) +{ + vq->packed.ring_dma_addr = ring_dma_addr; + vq->packed.driver_event_dma_addr = driver_event_dma_addr; + vq->packed.device_event_dma_addr = device_event_dma_addr; + + vq->packed.ring_size_in_bytes = ring_size_in_bytes; + vq->packed.event_size_in_bytes = event_size_in_bytes; + + vq->packed.vring.num = num; + vq->packed.vring.desc = ring; + vq->packed.vring.driver = driver; + vq->packed.vring.device = device; + + vq->packed.desc_state = state; + vq->packed.desc_extra = extra; +} + static struct virtqueue *vring_create_virtqueue_packed( unsigned int index, unsigned int num, @@ -1962,18 +1991,6 @@ static struct virtqueue *vring_create_virtqueue_packed( if (virtio_has_feature(vdev, VIRTIO_F_ORDER_PLATFORM)) vq->weak_barriers = false; - vq->packed.ring_dma_addr = ring_dma_addr; - vq->packed.driver_event_dma_addr = driver_event_dma_addr; - vq->packed.device_event_dma_addr = device_event_dma_addr; - - vq->packed.ring_size_in_bytes = ring_size_in_bytes; - vq->packed.event_size_in_bytes = event_size_in_bytes; - - vq->packed.vring.num = num; - vq->packed.vring.desc = ring; - vq->packed.vring.driver = driver; - vq->packed.vring.device = device; - vq->packed.next_avail_idx = 0; vq->packed.avail_wrap_counter = 1; vq->packed.used_wrap_counter = 1; @@ -1984,8 +2001,10 @@ static struct virtqueue *vring_create_virtqueue_packed( if (err) goto err_state_extra; - vq->packed.desc_state = state; - vq->packed.desc_extra = extra; + vring_virtqueue_attach_packed(vq, num, ring, driver, device, + ring_dma_addr, driver_event_dma_addr, + device_event_dma_addr, ring_size_in_bytes, + event_size_in_bytes, state, extra); /* Put everything in free lists. */ vq->free_head = 0; -- 2.31.0