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@xxxxxxxxxx> 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@xxxxxxxxxxxxxxxxx> > > > Signed-off-by: Xuan Zhuo <xuanzhuo@xxxxxxxxxxxxxxxxx> > > > > > > Acked-by: Jason Wang <jasowang@xxxxxxxxxx> > > @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@xxxxxxxxxxxxxxxxx/ > > > > > > QEMU Patch: > > > https://lore.kernel.org/qemu-devel/cover.1661414345.git.kangjie.xu@xxxxxxxxxxxxxxxxx/ > > > > > > 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 { > >