Jason Wang
2023-Feb-27 08:12 UTC
[PATCH v4 11/15] vdpa net: block migration if the device has CVQ
? 2023/2/24 23:54, Eugenio P?rez ??:> Devices with CVQ needs to migrate state beyond vq state. Leaving this > to future series. > > Signed-off-by: Eugenio P?rez <eperezma at redhat.com> > --- > v3: Migration blocker is registered in vhost_dev. > --- > include/hw/virtio/vhost-vdpa.h | 1 + > hw/virtio/vhost-vdpa.c | 1 + > net/vhost-vdpa.c | 9 +++++++++ > 3 files changed, 11 insertions(+) > > diff --git a/include/hw/virtio/vhost-vdpa.h b/include/hw/virtio/vhost-vdpa.h > index 4a7d396674..c278a2a8de 100644 > --- a/include/hw/virtio/vhost-vdpa.h > +++ b/include/hw/virtio/vhost-vdpa.h > @@ -50,6 +50,7 @@ typedef struct vhost_vdpa { > const VhostShadowVirtqueueOps *shadow_vq_ops; > void *shadow_vq_ops_opaque; > struct vhost_dev *dev; > + Error *migration_blocker; > VhostVDPAHostNotifier notifier[VIRTIO_QUEUE_MAX]; > } VhostVDPA; > > diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c > index 27655e7582..25b64ae854 100644 > --- a/hw/virtio/vhost-vdpa.c > +++ b/hw/virtio/vhost-vdpa.c > @@ -438,6 +438,7 @@ static int vhost_vdpa_init(struct vhost_dev *dev, void *opaque, Error **errp) > v->msg_type = VHOST_IOTLB_MSG_V2; > vhost_vdpa_init_svq(dev, v); > > + error_propagate(&dev->migration_blocker, v->migration_blocker); > if (!vhost_vdpa_first_dev(dev)) { > return 0; > } > diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c > index c5512ddf10..4f983df000 100644 > --- a/net/vhost-vdpa.c > +++ b/net/vhost-vdpa.c > @@ -828,6 +828,15 @@ static NetClientState *net_vhost_vdpa_init(NetClientState *peer, > > s->vhost_vdpa.shadow_vq_ops = &vhost_vdpa_net_svq_ops; > s->vhost_vdpa.shadow_vq_ops_opaque = s; > + > + /* > + * TODO: We cannot migrate devices with CVQ as there is no way to set > + * the device state (MAC, MQ, etc) before starting datapath. > + * > + * Migration blocker ownership now belongs to vThe sentence is incomplete. Other looks good. Thanks> + */ > + error_setg(&s->vhost_vdpa.migration_blocker, > + "net vdpa cannot migrate with CVQ feature"); > } > ret = vhost_vdpa_add(nc, (void *)&s->vhost_vdpa, queue_pair_index, nvqs); > if (ret) {