Message ID | 1393957383-16685-14-git-send-email-a.motakis@virtualopensystems.com |
---|---|
State | New |
Headers | show |
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
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 --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,