On Sat, Jul 16, 2022 at 7:34 PM Eugenio Pérez <epere...@redhat.com> wrote: > > It allows to run commands at start of the device, before it have enabled > any queue. > > Signed-off-by: Eugenio Pérez <epere...@redhat.com> > --- > hw/virtio/vhost-shadow-virtqueue.h | 3 +++ > include/hw/virtio/vhost-vdpa.h | 5 +++++ > hw/virtio/vhost-vdpa.c | 8 ++++++++ > 3 files changed, 16 insertions(+) > > diff --git a/hw/virtio/vhost-shadow-virtqueue.h > b/hw/virtio/vhost-shadow-virtqueue.h > index 03eb7ff670..210fe393cd 100644 > --- a/hw/virtio/vhost-shadow-virtqueue.h > +++ b/hw/virtio/vhost-shadow-virtqueue.h > @@ -26,6 +26,8 @@ typedef struct SVQDescState { > } SVQDescState; > > typedef struct VhostShadowVirtqueue VhostShadowVirtqueue; > +typedef int (*ShadowVirtQueueStart)(VhostShadowVirtqueue *svq, > + void *opaque); > > /** > * Callback to handle an avail buffer. > @@ -43,6 +45,7 @@ typedef int (*VirtQueueAvailCallback)(VhostShadowVirtqueue > *svq, > void *vq_callback_opaque); > > typedef struct VhostShadowVirtqueueOps { > + ShadowVirtQueueStart start;
What's the difference between this and start_op? Thanks > VirtQueueAvailCallback avail_handler; > } VhostShadowVirtqueueOps; > > diff --git a/include/hw/virtio/vhost-vdpa.h b/include/hw/virtio/vhost-vdpa.h > index d10a89303e..b7d18b4e30 100644 > --- a/include/hw/virtio/vhost-vdpa.h > +++ b/include/hw/virtio/vhost-vdpa.h > @@ -24,6 +24,10 @@ typedef struct VhostVDPAHostNotifier { > void *addr; > } VhostVDPAHostNotifier; > > +struct vhost_vdpa; > +/* Called after send DRIVER_OK but after enabling vrings */ > +typedef int (*VhostVDPAStartOp)(struct vhost_vdpa *v); > + > typedef struct vhost_vdpa { > int device_fd; > int index; > @@ -39,6 +43,7 @@ typedef struct vhost_vdpa { > GPtrArray *shadow_vqs; > const VhostShadowVirtqueueOps *shadow_vq_ops; > void *shadow_vq_ops_opaque; > + VhostVDPAStartOp start_op; > struct vhost_dev *dev; > VhostVDPAHostNotifier notifier[VIRTIO_QUEUE_MAX]; > } VhostVDPA; > diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c > index 1d8829c619..48f031b8c0 100644 > --- a/hw/virtio/vhost-vdpa.c > +++ b/hw/virtio/vhost-vdpa.c > @@ -1136,6 +1136,14 @@ static int vhost_vdpa_dev_start(struct vhost_dev *dev, > bool started) > if (unlikely(r)) { > return r; > } > + > + if (v->start_op) { > + r = v->start_op(v); > + if (unlikely(r)) { > + return r; > + } > + } > + > vhost_vdpa_set_vring_ready(dev); > } else { > vhost_vdpa_reset_device(dev); > -- > 2.31.1 >