Hi On Wed, May 3, 2023 at 12:21 PM Albert Esteve <aest...@redhat.com> wrote:
> Add vu_write_msg_cb type as a member of the VuDev > struct. > > In order to interact with the virtio-dmabuf > API, vhost-user backends have available a special > message type that can be sent to the frontend > in Qemu, in order to add, lookup, or remove > entries. > > To send these messages and avoid code replication, > backends will need the write_msg method to be exposed > to them, similarly to how the read_msg is for > receiving messages. > I think read_msg was introduced to blend libvhost-user IO to qemu mainloop & coroutine. Is that what you have in mind for write_msg? > Signed-off-by: Albert Esteve <aest...@redhat.com> > --- > subprojects/libvhost-user/libvhost-user.c | 1 + > subprojects/libvhost-user/libvhost-user.h | 16 ++++++++++++++++ > 2 files changed, 17 insertions(+) > > diff --git a/subprojects/libvhost-user/libvhost-user.c > b/subprojects/libvhost-user/libvhost-user.c > index 6b4b721225..c50b353915 100644 > --- a/subprojects/libvhost-user/libvhost-user.c > +++ b/subprojects/libvhost-user/libvhost-user.c > @@ -2115,6 +2115,7 @@ vu_init(VuDev *dev, > dev->sock = socket; > dev->panic = panic; > dev->read_msg = read_msg ? read_msg : vu_message_read_default; > + dev->write_msg = vu_message_write; > You are not making it customizable? And the callback is not used. > dev->set_watch = set_watch; > dev->remove_watch = remove_watch; > dev->iface = iface; > diff --git a/subprojects/libvhost-user/libvhost-user.h > b/subprojects/libvhost-user/libvhost-user.h > index 784db65f7c..f5d7162886 100644 > --- a/subprojects/libvhost-user/libvhost-user.h > +++ b/subprojects/libvhost-user/libvhost-user.h > @@ -242,6 +242,7 @@ typedef void (*vu_set_features_cb) (VuDev *dev, > uint64_t features); > typedef int (*vu_process_msg_cb) (VuDev *dev, VhostUserMsg *vmsg, > int *do_reply); > typedef bool (*vu_read_msg_cb) (VuDev *dev, int sock, VhostUserMsg *vmsg); > +typedef bool (*vu_write_msg_cb) (VuDev *dev, int sock, VhostUserMsg > *vmsg); > typedef void (*vu_queue_set_started_cb) (VuDev *dev, int qidx, bool > started); > typedef bool (*vu_queue_is_processed_in_order_cb) (VuDev *dev, int qidx); > typedef int (*vu_get_config_cb) (VuDev *dev, uint8_t *config, uint32_t > len); > @@ -429,6 +430,21 @@ struct VuDev { > */ > vu_read_msg_cb read_msg; > > + /* > + * @write_msg: custom method to write vhost-user message > + * > + * Write data to vhost_user socket fd from the passed > + * VhostUserMsg *vmsg struct. > + * > + * For the details, please refer to vu_message_write in > libvhost-user.c > + * which will be used by default when calling vu_unit. > + * No custom method is allowed. > "No custom method is allowed"? > + * > + * Returns: true if vhost-user message successfully sent, false > otherwise. > + * > + */ > + vu_write_msg_cb write_msg; > + > -- Marc-André Lureau