2022-08-25 08:58:12

by Kangjie Xu

[permalink] [raw]
Subject: [PATCH] vhost-net: support VIRTIO_F_RING_RESET

Add VIRTIO_F_RING_RESET, which indicates that the driver can reset a
queue individually.

VIRTIO_F_RING_RESET feature is added to virtio-spec 1.2. The relevant
information is in
oasis-tcs/virtio-spec#124
oasis-tcs/virtio-spec#139

The implementation only adds the feature bit in supported features. It
does not require any other changes because we reuse the existing vhost
protocol.

The virtqueue reset process can be concluded as two parts:
1. The driver can reset a virtqueue. When it is triggered, we use the
set_backend to disable the virtqueue.
2. After the virtqueue is disabled, the driver may optionally re-enable
it. The process is basically similar to when the device is started,
except that the restart process does not need to set features and set
mem table since they do not change. QEMU will send messages containing
size, base, addr, kickfd and callfd of the virtqueue in order.
Specifically, the host kernel will receive these messages in order:
a. VHOST_SET_VRING_NUM
b. VHOST_SET_VRING_BASE
c. VHOST_SET_VRING_ADDR
d. VHOST_SET_VRING_KICK
e. VHOST_SET_VRING_CALL
f. VHOST_NET_SET_BACKEND
Finally, after we use set_backend to attach the virtqueue, the virtqueue
will be enabled and start to work.

Signed-off-by: Kangjie Xu <[email protected]>
Signed-off-by: Xuan Zhuo <[email protected]>
---

Test environment and method:
Host: 5.19.0-rc3
Qemu: QEMU emulator version 7.0.50 (With vq rset support)
Guest: 5.19.0-rc3 (With vq reset support)
Test Cmd: ethtool -g eth1; ethtool -G eth1 rx $1 tx $2; ethtool -g eth1;

The drvier can resize the virtio queue, then virtio queue reset function should
be triggered.

The default is split mode, modify Qemu virtio-net to add PACKED feature to
test packed mode.

Guest Kernel Patch:
https://lore.kernel.org/bpf/[email protected]/

QEMU Patch:
https://lore.kernel.org/qemu-devel/[email protected]/

Looking forward to your review and comments. Thanks.

drivers/vhost/net.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c
index 68e4ecd1cc0e..8a34928d4fef 100644
--- a/drivers/vhost/net.c
+++ b/drivers/vhost/net.c
@@ -73,7 +73,8 @@ enum {
VHOST_NET_FEATURES = VHOST_FEATURES |
(1ULL << VHOST_NET_F_VIRTIO_NET_HDR) |
(1ULL << VIRTIO_NET_F_MRG_RXBUF) |
- (1ULL << VIRTIO_F_ACCESS_PLATFORM)
+ (1ULL << VIRTIO_F_ACCESS_PLATFORM) |
+ (1ULL << VIRTIO_F_RING_RESET)
};

enum {
--
2.32.0


2022-09-05 08:57:18

by Jason Wang

[permalink] [raw]
Subject: Re: [PATCH] vhost-net: support VIRTIO_F_RING_RESET


在 2022/8/25 16:56, Kangjie Xu 写道:
> Add VIRTIO_F_RING_RESET, which indicates that the driver can reset a
> queue individually.
>
> VIRTIO_F_RING_RESET feature is added to virtio-spec 1.2. The relevant
> information is in
> oasis-tcs/virtio-spec#124
> oasis-tcs/virtio-spec#139
>
> The implementation only adds the feature bit in supported features. It
> does not require any other changes because we reuse the existing vhost
> protocol.
>
> The virtqueue reset process can be concluded as two parts:
> 1. The driver can reset a virtqueue. When it is triggered, we use the
> set_backend to disable the virtqueue.
> 2. After the virtqueue is disabled, the driver may optionally re-enable
> it. The process is basically similar to when the device is started,
> except that the restart process does not need to set features and set
> mem table since they do not change. QEMU will send messages containing
> size, base, addr, kickfd and callfd of the virtqueue in order.
> Specifically, the host kernel will receive these messages in order:
> a. VHOST_SET_VRING_NUM
> b. VHOST_SET_VRING_BASE
> c. VHOST_SET_VRING_ADDR
> d. VHOST_SET_VRING_KICK
> e. VHOST_SET_VRING_CALL
> f. VHOST_NET_SET_BACKEND
> Finally, after we use set_backend to attach the virtqueue, the virtqueue
> will be enabled and start to work.
>
> Signed-off-by: Kangjie Xu <[email protected]>
> Signed-off-by: Xuan Zhuo <[email protected]>


Acked-by: Jason Wang <[email protected]>


> ---
>
> Test environment and method:
> Host: 5.19.0-rc3
> Qemu: QEMU emulator version 7.0.50 (With vq rset support)
> Guest: 5.19.0-rc3 (With vq reset support)
> Test Cmd: ethtool -g eth1; ethtool -G eth1 rx $1 tx $2; ethtool -g eth1;
>
> The drvier can resize the virtio queue, then virtio queue reset function should
> be triggered.
>
> The default is split mode, modify Qemu virtio-net to add PACKED feature to
> test packed mode.
>
> Guest Kernel Patch:
> https://lore.kernel.org/bpf/[email protected]/
>
> QEMU Patch:
> https://lore.kernel.org/qemu-devel/[email protected]/
>
> Looking forward to your review and comments. Thanks.
>
> drivers/vhost/net.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c
> index 68e4ecd1cc0e..8a34928d4fef 100644
> --- a/drivers/vhost/net.c
> +++ b/drivers/vhost/net.c
> @@ -73,7 +73,8 @@ enum {
> VHOST_NET_FEATURES = VHOST_FEATURES |
> (1ULL << VHOST_NET_F_VIRTIO_NET_HDR) |
> (1ULL << VIRTIO_NET_F_MRG_RXBUF) |
> - (1ULL << VIRTIO_F_ACCESS_PLATFORM)
> + (1ULL << VIRTIO_F_ACCESS_PLATFORM) |
> + (1ULL << VIRTIO_F_RING_RESET)
> };
>
> enum {

2023-01-30 07:40:15

by Xuan Zhuo

[permalink] [raw]
Subject: Re: [PATCH] vhost-net: support VIRTIO_F_RING_RESET

On Mon, 5 Sep 2022 16:32:19 +0800, Jason Wang <[email protected]> wrote:
>
> 在 2022/8/25 16:56, Kangjie Xu 写道:
> > Add VIRTIO_F_RING_RESET, which indicates that the driver can reset a
> > queue individually.
> >
> > VIRTIO_F_RING_RESET feature is added to virtio-spec 1.2. The relevant
> > information is in
> > oasis-tcs/virtio-spec#124
> > oasis-tcs/virtio-spec#139
> >
> > The implementation only adds the feature bit in supported features. It
> > does not require any other changes because we reuse the existing vhost
> > protocol.
> >
> > The virtqueue reset process can be concluded as two parts:
> > 1. The driver can reset a virtqueue. When it is triggered, we use the
> > set_backend to disable the virtqueue.
> > 2. After the virtqueue is disabled, the driver may optionally re-enable
> > it. The process is basically similar to when the device is started,
> > except that the restart process does not need to set features and set
> > mem table since they do not change. QEMU will send messages containing
> > size, base, addr, kickfd and callfd of the virtqueue in order.
> > Specifically, the host kernel will receive these messages in order:
> > a. VHOST_SET_VRING_NUM
> > b. VHOST_SET_VRING_BASE
> > c. VHOST_SET_VRING_ADDR
> > d. VHOST_SET_VRING_KICK
> > e. VHOST_SET_VRING_CALL
> > f. VHOST_NET_SET_BACKEND
> > Finally, after we use set_backend to attach the virtqueue, the virtqueue
> > will be enabled and start to work.
> >
> > Signed-off-by: Kangjie Xu <[email protected]>
> > Signed-off-by: Xuan Zhuo <[email protected]>
>
>
> Acked-by: Jason Wang <[email protected]>

@mst

Do we miss this?

Thanks.

>
>
> > ---
> >
> > Test environment and method:
> > Host: 5.19.0-rc3
> > Qemu: QEMU emulator version 7.0.50 (With vq rset support)
> > Guest: 5.19.0-rc3 (With vq reset support)
> > Test Cmd: ethtool -g eth1; ethtool -G eth1 rx $1 tx $2; ethtool -g eth1;
> >
> > The drvier can resize the virtio queue, then virtio queue reset function should
> > be triggered.
> >
> > The default is split mode, modify Qemu virtio-net to add PACKED feature to
> > test packed mode.
> >
> > Guest Kernel Patch:
> > https://lore.kernel.org/bpf/[email protected]/
> >
> > QEMU Patch:
> > https://lore.kernel.org/qemu-devel/[email protected]/
> >
> > Looking forward to your review and comments. Thanks.
> >
> > drivers/vhost/net.c | 3 ++-
> > 1 file changed, 2 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c
> > index 68e4ecd1cc0e..8a34928d4fef 100644
> > --- a/drivers/vhost/net.c
> > +++ b/drivers/vhost/net.c
> > @@ -73,7 +73,8 @@ enum {
> > VHOST_NET_FEATURES = VHOST_FEATURES |
> > (1ULL << VHOST_NET_F_VIRTIO_NET_HDR) |
> > (1ULL << VIRTIO_NET_F_MRG_RXBUF) |
> > - (1ULL << VIRTIO_F_ACCESS_PLATFORM)
> > + (1ULL << VIRTIO_F_ACCESS_PLATFORM) |
> > + (1ULL << VIRTIO_F_RING_RESET)
> > };
> >
> > enum {
>

2023-01-30 10:31:01

by Michael S. Tsirkin

[permalink] [raw]
Subject: Re: [PATCH] vhost-net: support VIRTIO_F_RING_RESET

On Mon, Jan 30, 2023 at 03:39:06PM +0800, Xuan Zhuo wrote:
> On Mon, 5 Sep 2022 16:32:19 +0800, Jason Wang <[email protected]> wrote:
> >
> > 在 2022/8/25 16:56, Kangjie Xu 写道:
> > > Add VIRTIO_F_RING_RESET, which indicates that the driver can reset a
> > > queue individually.
> > >
> > > VIRTIO_F_RING_RESET feature is added to virtio-spec 1.2. The relevant
> > > information is in
> > > oasis-tcs/virtio-spec#124
> > > oasis-tcs/virtio-spec#139
> > >
> > > The implementation only adds the feature bit in supported features. It
> > > does not require any other changes because we reuse the existing vhost
> > > protocol.
> > >
> > > The virtqueue reset process can be concluded as two parts:
> > > 1. The driver can reset a virtqueue. When it is triggered, we use the
> > > set_backend to disable the virtqueue.
> > > 2. After the virtqueue is disabled, the driver may optionally re-enable
> > > it. The process is basically similar to when the device is started,
> > > except that the restart process does not need to set features and set
> > > mem table since they do not change. QEMU will send messages containing
> > > size, base, addr, kickfd and callfd of the virtqueue in order.
> > > Specifically, the host kernel will receive these messages in order:
> > > a. VHOST_SET_VRING_NUM
> > > b. VHOST_SET_VRING_BASE
> > > c. VHOST_SET_VRING_ADDR
> > > d. VHOST_SET_VRING_KICK
> > > e. VHOST_SET_VRING_CALL
> > > f. VHOST_NET_SET_BACKEND
> > > Finally, after we use set_backend to attach the virtqueue, the virtqueue
> > > will be enabled and start to work.
> > >
> > > Signed-off-by: Kangjie Xu <[email protected]>
> > > Signed-off-by: Xuan Zhuo <[email protected]>
> >
> >
> > Acked-by: Jason Wang <[email protected]>
>
> @mst
>
> Do we miss this?
>
> Thanks.

I did, thanks! tagged now.

> >
> >
> > > ---
> > >
> > > Test environment and method:
> > > Host: 5.19.0-rc3
> > > Qemu: QEMU emulator version 7.0.50 (With vq rset support)
> > > Guest: 5.19.0-rc3 (With vq reset support)
> > > Test Cmd: ethtool -g eth1; ethtool -G eth1 rx $1 tx $2; ethtool -g eth1;
> > >
> > > The drvier can resize the virtio queue, then virtio queue reset function should
> > > be triggered.
> > >
> > > The default is split mode, modify Qemu virtio-net to add PACKED feature to
> > > test packed mode.
> > >
> > > Guest Kernel Patch:
> > > https://lore.kernel.org/bpf/[email protected]/
> > >
> > > QEMU Patch:
> > > https://lore.kernel.org/qemu-devel/[email protected]/
> > >
> > > Looking forward to your review and comments. Thanks.
> > >
> > > drivers/vhost/net.c | 3 ++-
> > > 1 file changed, 2 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c
> > > index 68e4ecd1cc0e..8a34928d4fef 100644
> > > --- a/drivers/vhost/net.c
> > > +++ b/drivers/vhost/net.c
> > > @@ -73,7 +73,8 @@ enum {
> > > VHOST_NET_FEATURES = VHOST_FEATURES |
> > > (1ULL << VHOST_NET_F_VIRTIO_NET_HDR) |
> > > (1ULL << VIRTIO_NET_F_MRG_RXBUF) |
> > > - (1ULL << VIRTIO_F_ACCESS_PLATFORM)
> > > + (1ULL << VIRTIO_F_ACCESS_PLATFORM) |
> > > + (1ULL << VIRTIO_F_RING_RESET)
> > > };
> > >
> > > enum {
> >