"Michael S. Tsirkin" <mst@xxxxxxxxxx> wrote: > With PUBLISH_USED_IDX, guest tells us which used entries > it has consumed. This can be used to reduce the number > of interrupts: after we write a used entry, if the guest has not yet > consumed the previous entry, or if the guest has already consumed the > new entry, we do not need to interrupt. > This imporves bandwidth by 30% under some workflows. > > Signed-off-by: Michael S. Tsirkin <mst@xxxxxxxxxx> > --- > > This is on top of Rusty's tree and depends on the virtio patch. > > Changes from v1: > fix build Minor nit if you have to respin it: > /* This actually signals the guest, using eventfd. */ > -void vhost_signal(struct vhost_dev *dev, struct vhost_virtqueue *vq) > +static void vhost_signal(struct vhost_dev *dev, struct vhost_virtqueue *vq) > { > __u16 flags; > + __u16 used; local var named "used" here > /* Flush out used index updates. This is paired > * with the barrier that the Guest executes when enabling > * interrupts. */ > @@ -1053,6 +1057,17 @@ void vhost_signal(struct vhost_dev *dev, struct vhost_virtqueue *vq) > !vhost_has_feature(dev, VIRTIO_F_NOTIFY_ON_EMPTY))) > return; > > + if (vhost_has_feature(dev, VIRTIO_RING_F_PUBLISH_USED)) { > + __u16 used; and a "more" local one also named "used" :) I guess you want to remove the previous declaration, as var is only used in this block. > + if (get_user(used, vq->last_used)) { > + vq_err(vq, "Failed to get last used idx"); > + return; > + } > + > + if (used != (u16)(vq->last_used_idx - 1)) > + return; > + } > + > /* Signal the Guest tell them we used something up. */ > if (vq->call_ctx) > eventfd_signal(vq->call_ctx, 1); Rest of patch looks ok, and as a bonus un-export two functions. Later, Juan. _______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/virtualization