diff mbox

[v9,13/20] Add mandatory_features to vhost_dev

Message ID 1393957383-16685-14-git-send-email-a.motakis@virtualopensystems.com
State New
Headers show

Commit Message

Antonios Motakis March 4, 2014, 6:22 p.m. UTC
This will be used in a following patch to ensure that a vhost-user
client reconnecting to QEMU supports the features that were exposed
by the first client that initiated the virtio-net session.

Signed-off-by: Antonios Motakis <a.motakis@virtualopensystems.com>
Signed-off-by: Nikolay Nikolaev <n.nikolaev@virtualopensystems.com>
---
 hw/net/vhost_net.c        | 10 ++++++++++
 include/hw/virtio/vhost.h |  1 +
 include/net/vhost_net.h   |  2 ++
 3 files changed, 13 insertions(+)

Comments

Michael S. Tsirkin March 4, 2014, 6:38 p.m. UTC | #1
On Tue, Mar 04, 2014 at 07:22:56PM +0100, Antonios Motakis wrote:
> This will be used in a following patch to ensure that a vhost-user
> client reconnecting to QEMU supports the features that were exposed
> by the first client that initiated the virtio-net session.
> 
> Signed-off-by: Antonios Motakis <a.motakis@virtualopensystems.com>
> Signed-off-by: Nikolay Nikolaev <n.nikolaev@virtualopensystems.com>

Why isn't checking features, or backend_features field sufficient?


> ---
>  hw/net/vhost_net.c        | 10 ++++++++++
>  include/hw/virtio/vhost.h |  1 +
>  include/net/vhost_net.h   |  2 ++
>  3 files changed, 13 insertions(+)
> 
> diff --git a/hw/net/vhost_net.c b/hw/net/vhost_net.c
> index 0fb4fa5..38e1e8a 100644
> --- a/hw/net/vhost_net.c
> +++ b/hw/net/vhost_net.c
> @@ -80,6 +80,11 @@ void vhost_net_ack_features(struct vhost_net *net, unsigned features)
>      }
>  }
>  
> +unsigned long long vhost_net_features(VHostNetState *net)
> +{
> +    return net->dev.features;
> +}
> +
>  static int vhost_net_get_fd(NetClientState *backend)
>  {
>      switch (backend->info->type) {
> @@ -112,6 +117,7 @@ struct vhost_net *vhost_net_init(VhostNetOptions *options)
>  
>      net->dev.nvqs = 2;
>      net->dev.vqs = net->vqs;
> +    net->dev.mandatory_features = options->mandatory_features;
>  
>      r = vhost_dev_init(&net->dev, options->opaque,
>                         options->force);
> @@ -347,6 +353,10 @@ unsigned vhost_net_get_features(struct vhost_net *net, unsigned features)
>  void vhost_net_ack_features(struct vhost_net *net, unsigned features)
>  {
>  }
> +unsigned long long vhost_net_features(struct vhost_net *net)
> +{
> +    return 0;
> +}
>  
>  bool vhost_net_virtqueue_pending(VHostNetState *net, int idx)
>  {
> diff --git a/include/hw/virtio/vhost.h b/include/hw/virtio/vhost.h
> index 97641b6..0068d40 100644
> --- a/include/hw/virtio/vhost.h
> +++ b/include/hw/virtio/vhost.h
> @@ -41,6 +41,7 @@ struct vhost_dev {
>      unsigned long long features;
>      unsigned long long acked_features;
>      unsigned long long backend_features;
> +    unsigned long long mandatory_features;
>      bool started;
>      bool log_enabled;
>      vhost_log_chunk_t *log;
> diff --git a/include/net/vhost_net.h b/include/net/vhost_net.h
> index 2067ee2..b39bb45 100644
> --- a/include/net/vhost_net.h
> +++ b/include/net/vhost_net.h
> @@ -10,6 +10,7 @@ typedef struct VhostNetOptions {
>      NetClientState *net_backend;
>      void *opaque;
>      bool force;
> +    unsigned long long mandatory_features;
>  } VhostNetOptions;
>  
>  struct vhost_net *vhost_net_init(VhostNetOptions *options);
> @@ -22,6 +23,7 @@ void vhost_net_cleanup(VHostNetState *net);
>  
>  unsigned vhost_net_get_features(VHostNetState *net, unsigned features);
>  void vhost_net_ack_features(VHostNetState *net, unsigned features);
> +unsigned long long vhost_net_features(VHostNetState *net);
>  
>  bool vhost_net_virtqueue_pending(VHostNetState *net, int n);
>  void vhost_net_virtqueue_mask(VHostNetState *net, VirtIODevice *dev,
> -- 
> 1.8.3.2
Antonios Motakis March 5, 2014, 1:40 p.m. UTC | #2
On Tue, Mar 4, 2014 at 7:38 PM, Michael S. Tsirkin <mst@redhat.com> wrote:

> On Tue, Mar 04, 2014 at 07:22:56PM +0100, Antonios Motakis wrote:
> > This will be used in a following patch to ensure that a vhost-user
> > client reconnecting to QEMU supports the features that were exposed
> > by the first client that initiated the virtio-net session.
> >
> > Signed-off-by: Antonios Motakis <a.motakis@virtualopensystems.com>
> > Signed-off-by: Nikolay Nikolaev <n.nikolaev@virtualopensystems.com>
>
> Why isn't checking features, or backend_features field sufficient?
>
>
Since we unfortunately need to remove reconnect support, this will go away
too.


>
> > ---
> >  hw/net/vhost_net.c        | 10 ++++++++++
> >  include/hw/virtio/vhost.h |  1 +
> >  include/net/vhost_net.h   |  2 ++
> >  3 files changed, 13 insertions(+)
> >
> > diff --git a/hw/net/vhost_net.c b/hw/net/vhost_net.c
> > index 0fb4fa5..38e1e8a 100644
> > --- a/hw/net/vhost_net.c
> > +++ b/hw/net/vhost_net.c
> > @@ -80,6 +80,11 @@ void vhost_net_ack_features(struct vhost_net *net,
> unsigned features)
> >      }
> >  }
> >
> > +unsigned long long vhost_net_features(VHostNetState *net)
> > +{
> > +    return net->dev.features;
> > +}
> > +
> >  static int vhost_net_get_fd(NetClientState *backend)
> >  {
> >      switch (backend->info->type) {
> > @@ -112,6 +117,7 @@ struct vhost_net *vhost_net_init(VhostNetOptions
> *options)
> >
> >      net->dev.nvqs = 2;
> >      net->dev.vqs = net->vqs;
> > +    net->dev.mandatory_features = options->mandatory_features;
> >
> >      r = vhost_dev_init(&net->dev, options->opaque,
> >                         options->force);
> > @@ -347,6 +353,10 @@ unsigned vhost_net_get_features(struct vhost_net
> *net, unsigned features)
> >  void vhost_net_ack_features(struct vhost_net *net, unsigned features)
> >  {
> >  }
> > +unsigned long long vhost_net_features(struct vhost_net *net)
> > +{
> > +    return 0;
> > +}
> >
> >  bool vhost_net_virtqueue_pending(VHostNetState *net, int idx)
> >  {
> > diff --git a/include/hw/virtio/vhost.h b/include/hw/virtio/vhost.h
> > index 97641b6..0068d40 100644
> > --- a/include/hw/virtio/vhost.h
> > +++ b/include/hw/virtio/vhost.h
> > @@ -41,6 +41,7 @@ struct vhost_dev {
> >      unsigned long long features;
> >      unsigned long long acked_features;
> >      unsigned long long backend_features;
> > +    unsigned long long mandatory_features;
> >      bool started;
> >      bool log_enabled;
> >      vhost_log_chunk_t *log;
> > diff --git a/include/net/vhost_net.h b/include/net/vhost_net.h
> > index 2067ee2..b39bb45 100644
> > --- a/include/net/vhost_net.h
> > +++ b/include/net/vhost_net.h
> > @@ -10,6 +10,7 @@ typedef struct VhostNetOptions {
> >      NetClientState *net_backend;
> >      void *opaque;
> >      bool force;
> > +    unsigned long long mandatory_features;
> >  } VhostNetOptions;
> >
> >  struct vhost_net *vhost_net_init(VhostNetOptions *options);
> > @@ -22,6 +23,7 @@ void vhost_net_cleanup(VHostNetState *net);
> >
> >  unsigned vhost_net_get_features(VHostNetState *net, unsigned features);
> >  void vhost_net_ack_features(VHostNetState *net, unsigned features);
> > +unsigned long long vhost_net_features(VHostNetState *net);
> >
> >  bool vhost_net_virtqueue_pending(VHostNetState *net, int n);
> >  void vhost_net_virtqueue_mask(VHostNetState *net, VirtIODevice *dev,
> > --
> > 1.8.3.2
>
diff mbox

Patch

diff --git a/hw/net/vhost_net.c b/hw/net/vhost_net.c
index 0fb4fa5..38e1e8a 100644
--- a/hw/net/vhost_net.c
+++ b/hw/net/vhost_net.c
@@ -80,6 +80,11 @@  void vhost_net_ack_features(struct vhost_net *net, unsigned features)
     }
 }
 
+unsigned long long vhost_net_features(VHostNetState *net)
+{
+    return net->dev.features;
+}
+
 static int vhost_net_get_fd(NetClientState *backend)
 {
     switch (backend->info->type) {
@@ -112,6 +117,7 @@  struct vhost_net *vhost_net_init(VhostNetOptions *options)
 
     net->dev.nvqs = 2;
     net->dev.vqs = net->vqs;
+    net->dev.mandatory_features = options->mandatory_features;
 
     r = vhost_dev_init(&net->dev, options->opaque,
                        options->force);
@@ -347,6 +353,10 @@  unsigned vhost_net_get_features(struct vhost_net *net, unsigned features)
 void vhost_net_ack_features(struct vhost_net *net, unsigned features)
 {
 }
+unsigned long long vhost_net_features(struct vhost_net *net)
+{
+    return 0;
+}
 
 bool vhost_net_virtqueue_pending(VHostNetState *net, int idx)
 {
diff --git a/include/hw/virtio/vhost.h b/include/hw/virtio/vhost.h
index 97641b6..0068d40 100644
--- a/include/hw/virtio/vhost.h
+++ b/include/hw/virtio/vhost.h
@@ -41,6 +41,7 @@  struct vhost_dev {
     unsigned long long features;
     unsigned long long acked_features;
     unsigned long long backend_features;
+    unsigned long long mandatory_features;
     bool started;
     bool log_enabled;
     vhost_log_chunk_t *log;
diff --git a/include/net/vhost_net.h b/include/net/vhost_net.h
index 2067ee2..b39bb45 100644
--- a/include/net/vhost_net.h
+++ b/include/net/vhost_net.h
@@ -10,6 +10,7 @@  typedef struct VhostNetOptions {
     NetClientState *net_backend;
     void *opaque;
     bool force;
+    unsigned long long mandatory_features;
 } VhostNetOptions;
 
 struct vhost_net *vhost_net_init(VhostNetOptions *options);
@@ -22,6 +23,7 @@  void vhost_net_cleanup(VHostNetState *net);
 
 unsigned vhost_net_get_features(VHostNetState *net, unsigned features);
 void vhost_net_ack_features(VHostNetState *net, unsigned features);
+unsigned long long vhost_net_features(VHostNetState *net);
 
 bool vhost_net_virtqueue_pending(VHostNetState *net, int n);
 void vhost_net_virtqueue_mask(VHostNetState *net, VirtIODevice *dev,