From: "Michael S. Tsirkin" <mst@redhat.com>
To: Jason Wang <jasowang@redhat.com>
Cc: xuanzhuo@linux.alibaba.com, eperezma@redhat.com,
virtualization@lists.linux.dev, linux-kernel@vger.kernel.org
Subject: Re: [PATCH V6 06/19] virtio_ring: switch to use vring_virtqueue for virtqueue_add variants
Date: Sun, 21 Sep 2025 13:47:00 -0400 [thread overview]
Message-ID: <20250921134601-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <20250919073154.49278-7-jasowang@redhat.com>
On Fri, Sep 19, 2025 at 03:31:41PM +0800, Jason Wang wrote:
> Those variants are used internally so let's switch to use
> vring_virtqueue as parameter to be consistent with other internal
> virtqueue helpers.
>
> Acked-by: Eugenio Pérez <eperezma@redhat.com>
> Reviewed-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
> Signed-off-by: Jason Wang <jasowang@redhat.com>
> ---
> drivers/virtio/virtio_ring.c | 40 +++++++++++++++++-------------------
> 1 file changed, 19 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c
> index aadeab66e57c..93c36314b5e7 100644
> --- a/drivers/virtio/virtio_ring.c
> +++ b/drivers/virtio/virtio_ring.c
> @@ -476,7 +476,7 @@ static unsigned int vring_unmap_one_split(const struct vring_virtqueue *vq,
> return extra->next;
> }
>
> -static struct vring_desc *alloc_indirect_split(struct virtqueue *_vq,
> +static struct vring_desc *alloc_indirect_split(struct vring_virtqueue *vq,
> unsigned int total_sg,
> gfp_t gfp)
> {
> @@ -505,7 +505,7 @@ static struct vring_desc *alloc_indirect_split(struct virtqueue *_vq,
> return desc;
> }
>
> -static inline unsigned int virtqueue_add_desc_split(struct virtqueue *vq,
> +static inline unsigned int virtqueue_add_desc_split(struct vring_virtqueue *vq,
> struct vring_desc *desc,
> struct vring_desc_extra *extra,
> unsigned int i,
> @@ -513,11 +513,12 @@ static inline unsigned int virtqueue_add_desc_split(struct virtqueue *vq,
> unsigned int len,
> u16 flags, bool premapped)
> {
> + struct virtio_device *vdev = vq->vq.vdev;
> u16 next;
>
> - desc[i].flags = cpu_to_virtio16(vq->vdev, flags);
> - desc[i].addr = cpu_to_virtio64(vq->vdev, addr);
> - desc[i].len = cpu_to_virtio32(vq->vdev, len);
> + desc[i].flags = cpu_to_virtio16(vdev, flags);
> + desc[i].addr = cpu_to_virtio64(vdev, addr);
> + desc[i].len = cpu_to_virtio32(vdev, len);
>
> extra[i].addr = premapped ? DMA_MAPPING_ERROR : addr;
> extra[i].len = len;
> @@ -525,12 +526,12 @@ static inline unsigned int virtqueue_add_desc_split(struct virtqueue *vq,
>
> next = extra[i].next;
>
> - desc[i].next = cpu_to_virtio16(vq->vdev, next);
> + desc[i].next = cpu_to_virtio16(vdev, next);
>
> return next;
> }
>
> -static inline int virtqueue_add_split(struct virtqueue *_vq,
> +static inline int virtqueue_add_split(struct vring_virtqueue *vq,
> struct scatterlist *sgs[],
> unsigned int total_sg,
> unsigned int out_sgs,
> @@ -540,7 +541,6 @@ static inline int virtqueue_add_split(struct virtqueue *_vq,
> bool premapped,
> gfp_t gfp)
> {
> - struct vring_virtqueue *vq = to_vvq(_vq);
> struct vring_desc_extra *extra;
> struct scatterlist *sg;
> struct vring_desc *desc;
> @@ -565,7 +565,7 @@ static inline int virtqueue_add_split(struct virtqueue *_vq,
> head = vq->free_head;
>
> if (virtqueue_use_indirect(vq, total_sg))
> - desc = alloc_indirect_split(_vq, total_sg, gfp);
> + desc = alloc_indirect_split(vq, total_sg, gfp);
> else {
> desc = NULL;
> WARN_ON_ONCE(total_sg > vq->split.vring.num && !vq->indirect);
> @@ -612,7 +612,7 @@ static inline int virtqueue_add_split(struct virtqueue *_vq,
> /* Note that we trust indirect descriptor
> * table since it use stream DMA mapping.
> */
> - i = virtqueue_add_desc_split(_vq, desc, extra, i, addr, len,
> + i = virtqueue_add_desc_split(vq, desc, extra, i, addr, len,
> VRING_DESC_F_NEXT,
> premapped);
> }
> @@ -629,14 +629,14 @@ static inline int virtqueue_add_split(struct virtqueue *_vq,
> /* Note that we trust indirect descriptor
> * table since it use stream DMA mapping.
> */
> - i = virtqueue_add_desc_split(_vq, desc, extra, i, addr, len,
> + i = virtqueue_add_desc_split(vq, desc, extra, i, addr, len,
> VRING_DESC_F_NEXT |
> VRING_DESC_F_WRITE,
> premapped);
> }
> }
> /* Last one doesn't continue. */
> - desc[prev].flags &= cpu_to_virtio16(_vq->vdev, ~VRING_DESC_F_NEXT);
> + desc[prev].flags &= cpu_to_virtio16(vq->vq.vdev, ~VRING_DESC_F_NEXT);
> if (!indirect && vring_need_unmap_buffer(vq, &extra[prev]))
> vq->split.desc_extra[prev & (vq->split.vring.num - 1)].flags &=
> ~VRING_DESC_F_NEXT;
> @@ -649,7 +649,7 @@ static inline int virtqueue_add_split(struct virtqueue *_vq,
> if (vring_mapping_error(vq, addr))
> goto unmap_release;
>
> - virtqueue_add_desc_split(_vq, vq->split.vring.desc,
> + virtqueue_add_desc_split(vq, vq->split.vring.desc,
> vq->split.desc_extra,
> head, addr,
> total_sg * sizeof(struct vring_desc),
> @@ -675,13 +675,13 @@ static inline int virtqueue_add_split(struct virtqueue *_vq,
> /* Put entry in available array (but don't update avail->idx until they
> * do sync). */
> avail = vq->split.avail_idx_shadow & (vq->split.vring.num - 1);
> - vq->split.vring.avail->ring[avail] = cpu_to_virtio16(_vq->vdev, head);
> + vq->split.vring.avail->ring[avail] = cpu_to_virtio16(vq->vq.vdev, head);
>
> /* Descriptors and available array need to be set before we expose the
> * new available array entries. */
> virtio_wmb(vq->weak_barriers);
> vq->split.avail_idx_shadow++;
> - vq->split.vring.avail->idx = cpu_to_virtio16(_vq->vdev,
> + vq->split.vring.avail->idx = cpu_to_virtio16(vq->vq.vdev,
> vq->split.avail_idx_shadow);
> vq->num_added++;
>
> @@ -691,7 +691,7 @@ static inline int virtqueue_add_split(struct virtqueue *_vq,
> /* This is very unlikely, but theoretically possible. Kick
> * just in case. */
> if (unlikely(vq->num_added == (1 << 16) - 1))
> - virtqueue_kick(_vq);
> + virtqueue_kick(&vq->vq);
>
> return 0;
>
> @@ -706,7 +706,6 @@ static inline int virtqueue_add_split(struct virtqueue *_vq,
> for (n = 0; n < total_sg; n++) {
> if (i == err_idx)
> break;
> -
> i = vring_unmap_one_split(vq, &extra[i]);
> }
>
can't say I like this, error handling is better separated visually from
good path.
> @@ -1440,7 +1439,7 @@ static int virtqueue_add_indirect_packed(struct vring_virtqueue *vq,
> return -ENOMEM;
> }
>
> -static inline int virtqueue_add_packed(struct virtqueue *_vq,
> +static inline int virtqueue_add_packed(struct vring_virtqueue *vq,
> struct scatterlist *sgs[],
> unsigned int total_sg,
> unsigned int out_sgs,
> @@ -1450,7 +1449,6 @@ static inline int virtqueue_add_packed(struct virtqueue *_vq,
> bool premapped,
> gfp_t gfp)
> {
> - struct vring_virtqueue *vq = to_vvq(_vq);
> struct vring_packed_desc *desc;
> struct scatterlist *sg;
> unsigned int i, n, c, descs_used, err_idx, len;
> @@ -2262,9 +2260,9 @@ static inline int virtqueue_add(struct virtqueue *_vq,
> {
> struct vring_virtqueue *vq = to_vvq(_vq);
>
> - return vq->packed_ring ? virtqueue_add_packed(_vq, sgs, total_sg,
> + return vq->packed_ring ? virtqueue_add_packed(vq, sgs, total_sg,
> out_sgs, in_sgs, data, ctx, premapped, gfp) :
> - virtqueue_add_split(_vq, sgs, total_sg,
> + virtqueue_add_split(vq, sgs, total_sg,
> out_sgs, in_sgs, data, ctx, premapped, gfp);
> }
>
> --
> 2.31.1
next prev parent reply other threads:[~2025-09-21 17:47 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-19 7:31 [PATCH V6 00/19] virtio_ring in order support Jason Wang
2025-09-19 7:31 ` [PATCH V6 01/19] virtio_ring: rename virtqueue_reinit_xxx to virtqueue_reset_xxx() Jason Wang
2025-09-19 7:31 ` [PATCH V6 02/19] virtio_ring: switch to use vring_virtqueue in virtqueue_poll variants Jason Wang
2025-09-19 7:31 ` [PATCH V6 03/19] virtio_ring: unify logic of virtqueue_poll() and more_used() Jason Wang
2025-09-19 7:31 ` [PATCH V6 04/19] virtio_ring: switch to use vring_virtqueue for virtqueue resize variants Jason Wang
2025-09-19 7:31 ` [PATCH V6 05/19] virtio_ring: switch to use vring_virtqueue for virtqueue_kick_prepare variants Jason Wang
2025-09-19 7:31 ` [PATCH V6 06/19] virtio_ring: switch to use vring_virtqueue for virtqueue_add variants Jason Wang
2025-09-21 17:47 ` Michael S. Tsirkin [this message]
2025-09-22 0:54 ` Jason Wang
2025-09-19 7:31 ` [PATCH V6 07/19] virtio: " Jason Wang
2025-09-21 17:45 ` Michael S. Tsirkin
2025-09-22 0:51 ` Jason Wang
2025-09-19 7:31 ` [PATCH V6 08/19] virtio_ring: switch to use vring_virtqueue for enable_cb_prepare variants Jason Wang
2025-09-19 7:31 ` [PATCH V6 09/19] virtio_ring: use vring_virtqueue for enable_cb_delayed variants Jason Wang
2025-09-19 7:31 ` [PATCH V6 10/19] virtio_ring: switch to use vring_virtqueue for disable_cb variants Jason Wang
2025-09-19 7:31 ` [PATCH V6 11/19] virtio_ring: switch to use vring_virtqueue for detach_unused_buf variants Jason Wang
2025-09-19 7:31 ` [PATCH V6 12/19] virtio_ring: use u16 for last_used_idx in virtqueue_poll_split() Jason Wang
2025-09-19 7:31 ` [PATCH V6 13/19] virtio_ring: introduce virtqueue ops Jason Wang
2025-09-21 18:33 ` Michael S. Tsirkin
2025-09-22 1:00 ` Jason Wang
2025-09-19 7:31 ` [PATCH V6 14/19] virtio_ring: determine descriptor flags at one time Jason Wang
2025-09-21 17:44 ` Michael S. Tsirkin
2025-09-22 0:47 ` Jason Wang
2025-09-21 18:39 ` Michael S. Tsirkin
2025-09-22 0:57 ` Jason Wang
2025-09-19 7:31 ` [PATCH V6 15/19] virtio_ring: factor out core logic of buffer detaching Jason Wang
2025-09-21 17:42 ` Michael S. Tsirkin
2025-09-22 0:46 ` Jason Wang
2025-09-19 7:31 ` [PATCH V6 16/19] virtio_ring: factor out core logic for updating last_used_idx Jason Wang
2025-09-19 7:31 ` [PATCH V6 17/19] virtio_ring: factor out split indirect detaching logic Jason Wang
2025-09-21 18:29 ` Michael S. Tsirkin
2025-09-21 18:30 ` Michael S. Tsirkin
2025-09-22 0:58 ` Jason Wang
2025-09-19 7:31 ` [PATCH V6 18/19] virtio_ring: factor out split " Jason Wang
2025-09-19 7:31 ` [PATCH V6 19/19] virtio_ring: add in order support Jason Wang
2025-09-21 17:40 ` Michael S. Tsirkin
2025-09-22 0:43 ` Jason Wang
2025-09-21 18:07 ` Michael S. Tsirkin
2025-09-21 18:24 ` Michael S. Tsirkin
2025-09-24 5:38 ` Jason Wang
2025-09-24 5:53 ` Michael S. Tsirkin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250921134601-mutt-send-email-mst@kernel.org \
--to=mst@redhat.com \
--cc=eperezma@redhat.com \
--cc=jasowang@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=virtualization@lists.linux.dev \
--cc=xuanzhuo@linux.alibaba.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.