On Mon, Jul 18, 2022 at 10:50 AM Jason Wang <jasow...@redhat.com> wrote: > > 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? >
This is a leftover, I'll delete for the next series. Thanks! > 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 > > >