Message ID | 20210621041650.5826-4-jasowang@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | vhost-vDPA multiqueue | expand |
On Mon, Jun 21, 2021 at 12:16:35PM +0800, Jason Wang wrote: >This patch switches to initialize dev.nvqs from the VhostNetOptions >instead of assuming it was 2. This is useful for implementing control >virtqueue support which will be a single vhost_net structure with a >single cvq. > >Signed-off-by: Jason Wang <jasowang@redhat.com> >--- > hw/net/vhost_net.c | 2 +- > include/net/vhost_net.h | 1 + > net/tap.c | 1 + > net/vhost-user.c | 1 + > net/vhost-vdpa.c | 1 + > 5 files changed, 5 insertions(+), 1 deletion(-) > >diff --git a/hw/net/vhost_net.c b/hw/net/vhost_net.c >index 6bd4184f96..ef1370bd92 100644 >--- a/hw/net/vhost_net.c >+++ b/hw/net/vhost_net.c >@@ -163,9 +163,9 @@ struct vhost_net *vhost_net_init(VhostNetOptions *options) > goto fail; > } > net->nc = options->net_backend; >+ net->dev.nvqs = options->nvqs; > > net->dev.max_queues = 1; >- net->dev.nvqs = 2; > net->dev.vqs = net->vqs; > > if (backend_kernel) { >diff --git a/include/net/vhost_net.h b/include/net/vhost_net.h >index 172b0051d8..fba40cf695 100644 >--- a/include/net/vhost_net.h >+++ b/include/net/vhost_net.h >@@ -14,6 +14,7 @@ typedef struct VhostNetOptions { > VhostBackendType backend_type; > NetClientState *net_backend; > uint32_t busyloop_timeout; >+ unsigned int nvqs; > void *opaque; > } VhostNetOptions; > >diff --git a/net/tap.c b/net/tap.c >index f5686bbf77..f716be3e3f 100644 >--- a/net/tap.c >+++ b/net/tap.c >@@ -749,6 +749,7 @@ static void net_init_tap_one(const NetdevTapOptions *tap, NetClientState *peer, > qemu_set_nonblock(vhostfd); > } > options.opaque = (void *)(uintptr_t)vhostfd; >+ options.nvqs = 2; > > s->vhost_net = vhost_net_init(&options); > if (!s->vhost_net) { >diff --git a/net/vhost-user.c b/net/vhost-user.c >index ffbd94d944..b93918c5a4 100644 >--- a/net/vhost-user.c >+++ b/net/vhost-user.c >@@ -85,6 +85,7 @@ static int vhost_user_start(int queues, NetClientState *ncs[], > options.net_backend = ncs[i]; > options.opaque = be; > options.busyloop_timeout = 0; >+ options.nvqs = 2; > net = vhost_net_init(&options); > if (!net) { > error_report("failed to init vhost_net for queue %d", i); >diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c >index 19187dce8c..18b45ad777 100644 >--- a/net/vhost-vdpa.c >+++ b/net/vhost-vdpa.c >@@ -105,6 +105,7 @@ static int vhost_vdpa_add(NetClientState *ncs, void *be) > options.net_backend = ncs; > options.opaque = be; > options.busyloop_timeout = 0; >+ options.nvqs = 2; > > net = vhost_net_init(&options); > if (!net) { >-- >2.25.1 > > Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
On Mon, Jun 21, 2021 at 12:16:35PM +0800, Jason Wang wrote: > This patch switches to initialize dev.nvqs from the VhostNetOptions > instead of assuming it was 2. This is useful for implementing control > virtqueue support which will be a single vhost_net structure with a > single cvq. Maybe worth mentioning in the changelog that nvqs is still set to 2 for all users and this patch does not change functionality. Reviewed-by: Eli Cohen <elic@nvidia.com> > Signed-off-by: Jason Wang <jasowang@redhat.com> > --- > hw/net/vhost_net.c | 2 +- > include/net/vhost_net.h | 1 + > net/tap.c | 1 + > net/vhost-user.c | 1 + > net/vhost-vdpa.c | 1 + > 5 files changed, 5 insertions(+), 1 deletion(-) > > diff --git a/hw/net/vhost_net.c b/hw/net/vhost_net.c > index 6bd4184f96..ef1370bd92 100644 > --- a/hw/net/vhost_net.c > +++ b/hw/net/vhost_net.c > @@ -163,9 +163,9 @@ struct vhost_net *vhost_net_init(VhostNetOptions *options) > goto fail; > } > net->nc = options->net_backend; > + net->dev.nvqs = options->nvqs; > > net->dev.max_queues = 1; > - net->dev.nvqs = 2; > net->dev.vqs = net->vqs; > > if (backend_kernel) { > diff --git a/include/net/vhost_net.h b/include/net/vhost_net.h > index 172b0051d8..fba40cf695 100644 > --- a/include/net/vhost_net.h > +++ b/include/net/vhost_net.h > @@ -14,6 +14,7 @@ typedef struct VhostNetOptions { > VhostBackendType backend_type; > NetClientState *net_backend; > uint32_t busyloop_timeout; > + unsigned int nvqs; > void *opaque; > } VhostNetOptions; > > diff --git a/net/tap.c b/net/tap.c > index f5686bbf77..f716be3e3f 100644 > --- a/net/tap.c > +++ b/net/tap.c > @@ -749,6 +749,7 @@ static void net_init_tap_one(const NetdevTapOptions *tap, NetClientState *peer, > qemu_set_nonblock(vhostfd); > } > options.opaque = (void *)(uintptr_t)vhostfd; > + options.nvqs = 2; > > s->vhost_net = vhost_net_init(&options); > if (!s->vhost_net) { > diff --git a/net/vhost-user.c b/net/vhost-user.c > index ffbd94d944..b93918c5a4 100644 > --- a/net/vhost-user.c > +++ b/net/vhost-user.c > @@ -85,6 +85,7 @@ static int vhost_user_start(int queues, NetClientState *ncs[], > options.net_backend = ncs[i]; > options.opaque = be; > options.busyloop_timeout = 0; > + options.nvqs = 2; > net = vhost_net_init(&options); > if (!net) { > error_report("failed to init vhost_net for queue %d", i); > diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c > index 19187dce8c..18b45ad777 100644 > --- a/net/vhost-vdpa.c > +++ b/net/vhost-vdpa.c > @@ -105,6 +105,7 @@ static int vhost_vdpa_add(NetClientState *ncs, void *be) > options.net_backend = ncs; > options.opaque = be; > options.busyloop_timeout = 0; > + options.nvqs = 2; > > net = vhost_net_init(&options); > if (!net) { > -- > 2.25.1 >
在 2021/6/24 下午2:22, Eli Cohen 写道: > On Mon, Jun 21, 2021 at 12:16:35PM +0800, Jason Wang wrote: >> This patch switches to initialize dev.nvqs from the VhostNetOptions >> instead of assuming it was 2. This is useful for implementing control >> virtqueue support which will be a single vhost_net structure with a >> single cvq. > Maybe worth mentioning in the changelog that nvqs is still set to 2 for > all users and this patch does not change functionality. > > Reviewed-by: Eli Cohen <elic@nvidia.com> Ok, will do that in V2. Thanks > >> Signed-off-by: Jason Wang <jasowang@redhat.com> >> --- >> hw/net/vhost_net.c | 2 +- >> include/net/vhost_net.h | 1 + >> net/tap.c | 1 + >> net/vhost-user.c | 1 + >> net/vhost-vdpa.c | 1 + >> 5 files changed, 5 insertions(+), 1 deletion(-) >> >> diff --git a/hw/net/vhost_net.c b/hw/net/vhost_net.c >> index 6bd4184f96..ef1370bd92 100644 >> --- a/hw/net/vhost_net.c >> +++ b/hw/net/vhost_net.c >> @@ -163,9 +163,9 @@ struct vhost_net *vhost_net_init(VhostNetOptions *options) >> goto fail; >> } >> net->nc = options->net_backend; >> + net->dev.nvqs = options->nvqs; >> >> net->dev.max_queues = 1; >> - net->dev.nvqs = 2; >> net->dev.vqs = net->vqs; >> >> if (backend_kernel) { >> diff --git a/include/net/vhost_net.h b/include/net/vhost_net.h >> index 172b0051d8..fba40cf695 100644 >> --- a/include/net/vhost_net.h >> +++ b/include/net/vhost_net.h >> @@ -14,6 +14,7 @@ typedef struct VhostNetOptions { >> VhostBackendType backend_type; >> NetClientState *net_backend; >> uint32_t busyloop_timeout; >> + unsigned int nvqs; >> void *opaque; >> } VhostNetOptions; >> >> diff --git a/net/tap.c b/net/tap.c >> index f5686bbf77..f716be3e3f 100644 >> --- a/net/tap.c >> +++ b/net/tap.c >> @@ -749,6 +749,7 @@ static void net_init_tap_one(const NetdevTapOptions *tap, NetClientState *peer, >> qemu_set_nonblock(vhostfd); >> } >> options.opaque = (void *)(uintptr_t)vhostfd; >> + options.nvqs = 2; >> >> s->vhost_net = vhost_net_init(&options); >> if (!s->vhost_net) { >> diff --git a/net/vhost-user.c b/net/vhost-user.c >> index ffbd94d944..b93918c5a4 100644 >> --- a/net/vhost-user.c >> +++ b/net/vhost-user.c >> @@ -85,6 +85,7 @@ static int vhost_user_start(int queues, NetClientState *ncs[], >> options.net_backend = ncs[i]; >> options.opaque = be; >> options.busyloop_timeout = 0; >> + options.nvqs = 2; >> net = vhost_net_init(&options); >> if (!net) { >> error_report("failed to init vhost_net for queue %d", i); >> diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c >> index 19187dce8c..18b45ad777 100644 >> --- a/net/vhost-vdpa.c >> +++ b/net/vhost-vdpa.c >> @@ -105,6 +105,7 @@ static int vhost_vdpa_add(NetClientState *ncs, void *be) >> options.net_backend = ncs; >> options.opaque = be; >> options.busyloop_timeout = 0; >> + options.nvqs = 2; >> >> net = vhost_net_init(&options); >> if (!net) { >> -- >> 2.25.1 >>
diff --git a/hw/net/vhost_net.c b/hw/net/vhost_net.c index 6bd4184f96..ef1370bd92 100644 --- a/hw/net/vhost_net.c +++ b/hw/net/vhost_net.c @@ -163,9 +163,9 @@ struct vhost_net *vhost_net_init(VhostNetOptions *options) goto fail; } net->nc = options->net_backend; + net->dev.nvqs = options->nvqs; net->dev.max_queues = 1; - net->dev.nvqs = 2; net->dev.vqs = net->vqs; if (backend_kernel) { diff --git a/include/net/vhost_net.h b/include/net/vhost_net.h index 172b0051d8..fba40cf695 100644 --- a/include/net/vhost_net.h +++ b/include/net/vhost_net.h @@ -14,6 +14,7 @@ typedef struct VhostNetOptions { VhostBackendType backend_type; NetClientState *net_backend; uint32_t busyloop_timeout; + unsigned int nvqs; void *opaque; } VhostNetOptions; diff --git a/net/tap.c b/net/tap.c index f5686bbf77..f716be3e3f 100644 --- a/net/tap.c +++ b/net/tap.c @@ -749,6 +749,7 @@ static void net_init_tap_one(const NetdevTapOptions *tap, NetClientState *peer, qemu_set_nonblock(vhostfd); } options.opaque = (void *)(uintptr_t)vhostfd; + options.nvqs = 2; s->vhost_net = vhost_net_init(&options); if (!s->vhost_net) { diff --git a/net/vhost-user.c b/net/vhost-user.c index ffbd94d944..b93918c5a4 100644 --- a/net/vhost-user.c +++ b/net/vhost-user.c @@ -85,6 +85,7 @@ static int vhost_user_start(int queues, NetClientState *ncs[], options.net_backend = ncs[i]; options.opaque = be; options.busyloop_timeout = 0; + options.nvqs = 2; net = vhost_net_init(&options); if (!net) { error_report("failed to init vhost_net for queue %d", i); diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c index 19187dce8c..18b45ad777 100644 --- a/net/vhost-vdpa.c +++ b/net/vhost-vdpa.c @@ -105,6 +105,7 @@ static int vhost_vdpa_add(NetClientState *ncs, void *be) options.net_backend = ncs; options.opaque = be; options.busyloop_timeout = 0; + options.nvqs = 2; net = vhost_net_init(&options); if (!net) {
This patch switches to initialize dev.nvqs from the VhostNetOptions instead of assuming it was 2. This is useful for implementing control virtqueue support which will be a single vhost_net structure with a single cvq. Signed-off-by: Jason Wang <jasowang@redhat.com> --- hw/net/vhost_net.c | 2 +- include/net/vhost_net.h | 1 + net/tap.c | 1 + net/vhost-user.c | 1 + net/vhost-vdpa.c | 1 + 5 files changed, 5 insertions(+), 1 deletion(-)