"Michael S. Tsirkin" <mst@xxxxxxxxxx> wrote: > vhost was dong some complex math to get > offset to log at, and got it wrong by a couple of bytes, > while in fact it's simple: get address where we write, > subtract start of buffer, add log base. > > Do it this way. > > Signed-off-by: Michael S. Tsirkin <mst@xxxxxxxxxx> Reviewed-by: Juan Quintela <quintela@xxxxxxxxxx> > --- > drivers/vhost/vhost.c | 10 ++++++---- > 1 files changed, 6 insertions(+), 4 deletions(-) > > diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c > index 6eb1525..c767279 100644 > --- a/drivers/vhost/vhost.c > +++ b/drivers/vhost/vhost.c > @@ -1004,10 +1004,12 @@ int vhost_add_used(struct vhost_virtqueue *vq, unsigned int head, int len) > if (unlikely(vq->log_used)) { > /* Make sure data is seen before log. */ We explain what smp_wmb() does. > smp_wmb(); > - log_write(vq->log_base, vq->log_addr + sizeof *vq->used->ring * > - (vq->last_used_idx % vq->num), > - sizeof *vq->used->ring); > - log_write(vq->log_base, vq->log_addr, sizeof *vq->used->ring); > + log_write(vq->log_base, > + vq->log_addr + ((void *)used - (void *)vq->used), > + sizeof *used); > + log_write(vq->log_base, > + vq->log_addr + offsetof(struct vring_used, idx), > + sizeof vq->used->idx); Once here, can we add a comment explaining _what_ are we trying to write to the log? michael explains that t is the used element and the index, but nothing states that. > if (vq->log_ctx) > eventfd_signal(vq->log_ctx, 1); > } _______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/virtualization