• Kangjie Xu's avatar
    vhost-net: support VIRTIO_F_RING_RESET · 313389be
    Kangjie Xu authored
    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: default avatarKangjie Xu <kangjie.xu@linux.alibaba.com>
    Signed-off-by: default avatarXuan Zhuo <xuanzhuo@linux.alibaba.com>
    Message-Id: <20220825085610.80315-1-kangjie.xu@linux.alibaba.com>
    Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
    Acked-by: default avatarJason Wang <jasowang@redhat.com>
    313389be
net.c 44.5 KB