[PATCH vhost v6 5/6] virtio: vring_new_virtqueue(): pass struct instead of multi parameters
Xuan Zhuo
xuanzhuo at linux.alibaba.com
Wed Mar 27 23:33:55 PDT 2024
On Thu, 28 Mar 2024 12:31:48 +0800, Jason Wang <jasowang at redhat.com> wrote:
> On Wed, Mar 27, 2024 at 5:58 PM Xuan Zhuo <xuanzhuo at linux.alibaba.com> wrote:
> >
> > Now, we pass multi parameters to vring_new_virtqueue. These parameters
> > may from transport or from driver.
> >
> > vring_new_virtqueue is called by many places.
> > Every time, we try to add a new parameter, that is difficult.
> >
> > If parameters from the driver, that should directly be passed to vring.
> > Then the vring can access the config from driver directly.
> >
> > If parameters from the transport, we squish the parameters to a
> > structure. That will be helpful to add new parameter.
> >
> > Signed-off-by: Xuan Zhuo <xuanzhuo at linux.alibaba.com>
> > Reviewed-by: Ilpo Järvinen <ilpo.jarvinen at linux.intel.com>
> > ---
> > drivers/platform/mellanox/mlxbf-tmfifo.c | 12 ++++---
> > drivers/remoteproc/remoteproc_virtio.c | 11 ++++---
> > drivers/virtio/virtio_ring.c | 29 +++++++++++-----
> > include/linux/virtio_ring.h | 42 +++++++++++++++++++-----
> > tools/virtio/virtio_test.c | 4 +--
> > tools/virtio/vringh_test.c | 28 ++++++++--------
> > 6 files changed, 84 insertions(+), 42 deletions(-)
> >
> > diff --git a/drivers/platform/mellanox/mlxbf-tmfifo.c b/drivers/platform/mellanox/mlxbf-tmfifo.c
> > index 4252388f52a2..d2e871fad8b4 100644
> > --- a/drivers/platform/mellanox/mlxbf-tmfifo.c
> > +++ b/drivers/platform/mellanox/mlxbf-tmfifo.c
> > @@ -1059,6 +1059,7 @@ static int mlxbf_tmfifo_virtio_find_vqs(struct virtio_device *vdev,
> > struct virtio_vq_config *cfg)
> > {
> > struct mlxbf_tmfifo_vdev *tm_vdev = mlxbf_vdev_to_tmfifo(vdev);
> > + struct vq_transport_config tp_cfg = {};
> > struct virtqueue **vqs = cfg->vqs;
> > struct mlxbf_tmfifo_vring *vring;
> > unsigned int nvqs = cfg->nvqs;
> > @@ -1078,10 +1079,13 @@ static int mlxbf_tmfifo_virtio_find_vqs(struct virtio_device *vdev,
> > /* zero vring */
> > size = vring_size(vring->num, vring->align);
> > memset(vring->va, 0, size);
> > - vq = vring_new_virtqueue(i, vring->num, vring->align, vdev,
> > - false, false, vring->va,
> > - mlxbf_tmfifo_virtio_notify,
> > - cfg->callbacks[i], cfg->names[i]);
> > +
> > + tp_cfg.num = vring->num;
> > + tp_cfg.vring_align = vring->align;
> > + tp_cfg.weak_barriers = false;
> > + tp_cfg.notify = mlxbf_tmfifo_virtio_notify;
> > +
> > + vq = vring_new_virtqueue(vdev, i, vring->va, &tp_cfg, cfg);
> > if (!vq) {
> > dev_err(&vdev->dev, "vring_new_virtqueue failed\n");
> > ret = -ENOMEM;
> > diff --git a/drivers/remoteproc/remoteproc_virtio.c b/drivers/remoteproc/remoteproc_virtio.c
> > index 489fea1d41c0..2319c2007833 100644
> > --- a/drivers/remoteproc/remoteproc_virtio.c
> > +++ b/drivers/remoteproc/remoteproc_virtio.c
> > @@ -106,6 +106,7 @@ static struct virtqueue *rp_find_vq(struct virtio_device *vdev,
> > {
> > struct rproc_vdev *rvdev = vdev_to_rvdev(vdev);
> > struct rproc *rproc = vdev_to_rproc(vdev);
> > + struct vq_transport_config tp_cfg;
>
> Should we zero this structure?
YES.
Will fix in next version.
Thanks.
>
> Thanks
>
More information about the linux-um
mailing list