Message ID | 20220825085610.80315-1-kangjie.xu@linux.alibaba.com (mailing list archive) |
---|---|
State | Not Applicable |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | vhost-net: support VIRTIO_F_RING_RESET | expand |
Context | Check | Description |
---|---|---|
netdev/tree_selection | success | Not a local patch |
在 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 <kangjie.xu@linux.alibaba.com> > Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com> Acked-by: Jason Wang <jasowang@redhat.com> > --- > > 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/20220801063902.129329-1-xuanzhuo@linux.alibaba.com/ > > QEMU Patch: > https://lore.kernel.org/qemu-devel/cover.1661414345.git.kangjie.xu@linux.alibaba.com/ > > 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 {
On Mon, 5 Sep 2022 16:32:19 +0800, Jason Wang <jasowang@redhat.com> 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 <kangjie.xu@linux.alibaba.com> > > Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com> > > > Acked-by: Jason Wang <jasowang@redhat.com> @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/20220801063902.129329-1-xuanzhuo@linux.alibaba.com/ > > > > QEMU Patch: > > https://lore.kernel.org/qemu-devel/cover.1661414345.git.kangjie.xu@linux.alibaba.com/ > > > > 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 { >
On Mon, Jan 30, 2023 at 03:39:06PM +0800, Xuan Zhuo wrote: > On Mon, 5 Sep 2022 16:32:19 +0800, Jason Wang <jasowang@redhat.com> 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 <kangjie.xu@linux.alibaba.com> > > > Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com> > > > > > > Acked-by: Jason Wang <jasowang@redhat.com> > > @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/20220801063902.129329-1-xuanzhuo@linux.alibaba.com/ > > > > > > QEMU Patch: > > > https://lore.kernel.org/qemu-devel/cover.1661414345.git.kangjie.xu@linux.alibaba.com/ > > > > > > 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 { > >
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 {