diff mbox series

[v4,11/15] vdpa net: block migration if the device has CVQ

Message ID 20230224155438.112797-12-eperezma@redhat.com (mailing list archive)
State New, archived
Headers show
Series Dynamically switch to vhost shadow virtqueues at vdpa net migration | expand

Commit Message

Eugenio Perez Martin Feb. 24, 2023, 3:54 p.m. UTC
Devices with CVQ needs to migrate state beyond vq state.  Leaving this
to future series.

Signed-off-by: Eugenio Pérez <eperezma@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(+)

Comments

Jason Wang Feb. 27, 2023, 8:12 a.m. UTC | #1
在 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@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 v


The 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) {
Eugenio Perez Martin March 2, 2023, 3:13 p.m. UTC | #2
On Mon, Feb 27, 2023 at 9:13 AM Jason Wang <jasowang@redhat.com> wrote:
>
>
> 在 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@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 v
>
>
> The sentence is incomplete.
>

Right, I'll fix it for the next version.

Thanks!

> 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) {
>
diff mbox series

Patch

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 v
+         */
+        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) {