On Mon, 20 Feb 2023 13:37:41 +0800, Jason Wang <[email protected]> wrote:
> On Tue, Feb 14, 2023 at 3:27 PM Xuan Zhuo <[email protected]> wrote:
> >
> > Separating the logic of allocating indirect desc and checking queue
> > status to the upper layer function.
> >
> > The proposal of this is convenient to refactor virtqueue_add_packed()
> > for premapped.
> >
>
> Ok, so this is another hint that we should do the same thing for split.


Since split does not have an independent indirect function, both are different
here. Therefore, there will be no the same thing for split.

Thanks.


>
> Thanks
>
>
> > Signed-off-by: Xuan Zhuo <[email protected]>
> > ---
> >  drivers/virtio/virtio_ring.c | 29 ++++++++++++-----------------
> >  1 file changed, 12 insertions(+), 17 deletions(-)
> >
> > diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c
> > index 560ee30d942c..42b1ff87518e 100644
> > --- a/drivers/virtio/virtio_ring.c
> > +++ b/drivers/virtio/virtio_ring.c
> > @@ -1330,25 +1330,14 @@ static int virtqueue_add_indirect_packed(struct 
> > vring_virtqueue *vq,
> >                                          unsigned int out_sgs,
> >                                          unsigned int in_sgs,
> >                                          void *data,
> > -                                        gfp_t gfp)
> > +                                        struct vring_packed_desc *desc)
> >  {
> > -       struct vring_packed_desc *desc;
> >         struct scatterlist *sg;
> >         unsigned int i, n, err_idx;
> >         u16 head, id;
> >         dma_addr_t addr;
> >
> >         head = vq->packed.next_avail_idx;
> > -       desc = alloc_indirect_packed(total_sg, gfp);
> > -       if (!desc)
> > -               return -ENOMEM;
> > -
> > -       if (unlikely(vq->vq.num_free < 1)) {
> > -               pr_debug("Can't add buf len 1 - avail = 0\n");
> > -               kfree(desc);
> > -               END_USE(vq);
> > -               return -ENOSPC;
> > -       }
> >
> >         i = 0;
> >         id = vq->free_head;
> > @@ -1470,11 +1459,17 @@ static inline int virtqueue_add_packed(struct 
> > virtqueue *_vq,
> >         BUG_ON(total_sg == 0);
> >
> >         if (virtqueue_use_indirect(vq, total_sg)) {
> > -               err = virtqueue_add_indirect_packed(vq, sgs, total_sg, 
> > out_sgs,
> > -                                                   in_sgs, data, gfp);
> > -               if (err != -ENOMEM) {
> > -                       END_USE(vq);
> > -                       return err;
> > +               desc = alloc_indirect_packed(total_sg, gfp);
> > +               if (desc) {
> > +                       if (unlikely(vq->vq.num_free < 1)) {
> > +                               pr_debug("Can't add buf len 1 - avail = 
> > 0\n");
> > +                               kfree(desc);
> > +                               END_USE(vq);
> > +                               return -ENOSPC;
> > +                       }
> > +
> > +                       return virtqueue_add_indirect_packed(vq, sgs, 
> > total_sg, out_sgs,
> > +                                                            in_sgs, data, 
> > desc);
> >                 }
> >
> >                 /* fall back on direct */
> > --
> > 2.32.0.3.g01195cf9f
> >
>
_______________________________________________
Virtualization mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/virtualization

Reply via email to