On Thu, Aug 10, 2023 at 11:36 PM Eugenio Pérez <epere...@redhat.com> wrote: > > The vhost-vdpa net backend needs to enable vrings in a different order > than default, so export it. > > No functional change intended except for tracing, that now includes the > (virtio) index being enabled and the return value of the ioctl. > > Still ignoring return value of this function if called from > vhost_vdpa_dev_start, as reorganize calling code around it is out of > the scope of this series. > > Signed-off-by: Eugenio Pérez <epere...@redhat.com>
Acked-by: Jason Wang <jasow...@redhat.com> Thanks > --- > include/hw/virtio/vhost-vdpa.h | 1 + > hw/virtio/vhost-vdpa.c | 25 +++++++++++++------------ > hw/virtio/trace-events | 2 +- > 3 files changed, 15 insertions(+), 13 deletions(-) > > diff --git a/include/hw/virtio/vhost-vdpa.h b/include/hw/virtio/vhost-vdpa.h > index e64bfc7f98..5407d54fd7 100644 > --- a/include/hw/virtio/vhost-vdpa.h > +++ b/include/hw/virtio/vhost-vdpa.h > @@ -57,6 +57,7 @@ typedef struct vhost_vdpa { > } VhostVDPA; > > int vhost_vdpa_get_iova_range(int fd, struct vhost_vdpa_iova_range > *iova_range); > +int vhost_vdpa_set_vring_ready(struct vhost_vdpa *v, unsigned idx); > > int vhost_vdpa_dma_map(struct vhost_vdpa *v, uint32_t asid, hwaddr iova, > hwaddr size, void *vaddr, bool readonly); > diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c > index 42f2a4bae9..0d9975b5b5 100644 > --- a/hw/virtio/vhost-vdpa.c > +++ b/hw/virtio/vhost-vdpa.c > @@ -876,18 +876,17 @@ static int vhost_vdpa_get_vq_index(struct vhost_dev > *dev, int idx) > return idx; > } > > -static int vhost_vdpa_set_vring_ready(struct vhost_dev *dev) > +int vhost_vdpa_set_vring_ready(struct vhost_vdpa *v, unsigned idx) > { > - int i; > - trace_vhost_vdpa_set_vring_ready(dev); > - for (i = 0; i < dev->nvqs; ++i) { > - struct vhost_vring_state state = { > - .index = dev->vq_index + i, > - .num = 1, > - }; > - vhost_vdpa_call(dev, VHOST_VDPA_SET_VRING_ENABLE, &state); > - } > - return 0; > + struct vhost_dev *dev = v->dev; > + struct vhost_vring_state state = { > + .index = idx, > + .num = 1, > + }; > + int r = vhost_vdpa_call(dev, VHOST_VDPA_SET_VRING_ENABLE, &state); > + > + trace_vhost_vdpa_set_vring_ready(dev, idx, r); > + return r; > } > > static int vhost_vdpa_set_config_call(struct vhost_dev *dev, > @@ -1298,7 +1297,9 @@ static int vhost_vdpa_dev_start(struct vhost_dev *dev, > bool started) > if (unlikely(!ok)) { > return -1; > } > - vhost_vdpa_set_vring_ready(dev); > + for (int i = 0; i < dev->nvqs; ++i) { > + vhost_vdpa_set_vring_ready(v, dev->vq_index + i); > + } > } else { > vhost_vdpa_suspend(dev); > vhost_vdpa_svqs_stop(dev); > diff --git a/hw/virtio/trace-events b/hw/virtio/trace-events > index 7109cf1a3b..1cb9027d1e 100644 > --- a/hw/virtio/trace-events > +++ b/hw/virtio/trace-events > @@ -48,7 +48,7 @@ vhost_vdpa_set_features(void *dev, uint64_t features) "dev: > %p features: 0x%"PRI > vhost_vdpa_get_device_id(void *dev, uint32_t device_id) "dev: %p device_id > %"PRIu32 > vhost_vdpa_reset_device(void *dev) "dev: %p" > vhost_vdpa_get_vq_index(void *dev, int idx, int vq_idx) "dev: %p idx: %d vq > idx: %d" > -vhost_vdpa_set_vring_ready(void *dev) "dev: %p" > +vhost_vdpa_set_vring_ready(void *dev, unsigned i, int r) "dev: %p, idx: %u, > r: %d" > vhost_vdpa_dump_config(void *dev, const char *line) "dev: %p %s" > vhost_vdpa_set_config(void *dev, uint32_t offset, uint32_t size, uint32_t > flags) "dev: %p offset: %"PRIu32" size: %"PRIu32" flags: 0x%"PRIx32 > vhost_vdpa_get_config(void *dev, void *config, uint32_t config_len) "dev: %p > config: %p config_len: %"PRIu32 > -- > 2.39.3 >