On Mon, Feb 27, 2023 at 8:24 AM Jason Wang <jasowang@redhat.com> wrote:
>
>
> 在 2023/2/24 23:54, Eugenio Pérez 写道:
> > This allows vhost_vdpa to track if it is safe to get vring base from the
> > device or not. If it is not, vhost can fall back to fetch idx from the
> > guest buffer again.
> >
> > No functional change intended in this patch, later patches will use this
> > field.
> >
> > Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
>
>
> I think we probably need to re-order the patch, e.g to let this come
> before at least patch 5.
>
Right, that was a miss. I'll reorder them.
>
> > ---
> > include/hw/virtio/vhost-vdpa.h | 2 ++
> > hw/virtio/vhost-vdpa.c | 8 ++++++++
> > 2 files changed, 10 insertions(+)
> >
> > diff --git a/include/hw/virtio/vhost-vdpa.h b/include/hw/virtio/vhost-vdpa.h
> > index 7997f09a8d..4a7d396674 100644
> > --- a/include/hw/virtio/vhost-vdpa.h
> > +++ b/include/hw/virtio/vhost-vdpa.h
> > @@ -42,6 +42,8 @@ typedef struct vhost_vdpa {
> > bool shadow_vqs_enabled;
> > /* Vdpa must send shadow addresses as IOTLB key for data queues, not GPA */
> > bool shadow_data;
> > + /* Device suspended successfully */
> > + bool suspended;
>
>
> Should we implement the set/clear in this patch as well?
>
I'd prefer to keep each patch separated in declaration / usage but
they can be squashed for sure.
Thanks!
> Thanks
>
>
> > /* IOVA mapping used by the Shadow Virtqueue */
> > VhostIOVATree *iova_tree;
> > GPtrArray *shadow_vqs;
> > diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c
> > index 8cc9c98db9..228677895a 100644
> > --- a/hw/virtio/vhost-vdpa.c
> > +++ b/hw/virtio/vhost-vdpa.c
> > @@ -1227,6 +1227,14 @@ static int vhost_vdpa_get_vring_base(struct vhost_dev *dev,
> > return 0;
> > }
> >
> > + if (!v->suspended) {
> > + /*
> > + * Cannot trust in value returned by device, let vhost recover used
> > + * idx from guest.
> > + */
> > + return -1;
> > + }
> > +
> > ret = vhost_vdpa_call(dev, VHOST_GET_VRING_BASE, ring);
> > trace_vhost_vdpa_get_vring_base(dev, ring->index, ring->num);
> > return ret;
>