On 2018/08/02 18:23, Jason Wang wrote: > On 2018年08月02日 16:41, Toshiaki Makita wrote: >> On 2018/08/02 17:18, Jason Wang wrote: >>> On 2018年08月01日 17:52, Tonghao Zhang wrote: >>>>> +static void vhost_net_busy_poll_check(struct vhost_net *net, >>>>> + struct vhost_virtqueue *rvq, >>>>> + struct vhost_virtqueue *tvq, >>>>> + bool rx) >>>>> +{ >>>>> + struct socket *sock = rvq->private_data; >>>>> + >>>>> + if (rx) >>>>> + vhost_net_busy_poll_try_queue(net, tvq); >>>>> + else if (sock && sk_has_rx_data(sock->sk)) >>>>> + vhost_net_busy_poll_try_queue(net, rvq); >>>>> + else { >>>>> + /* On tx here, sock has no rx data, so we >>>>> + * will wait for sock wakeup for rx, and >>>>> + * vhost_enable_notify() is not needed. */ >>>> A possible case is we do have rx data but guest does not refill the rx >>>> queue. In this case we may lose notifications from guest. >>> Yes, should consider this case. thanks. >> I'm a bit confused. Isn't this covered by the previous >> "else if (sock && sk_has_rx_data(...))" block? > > The problem is it does nothing if vhost_vq_avail_empty() is true and > vhost_enble_notify() is false. If vhost_enable_notify() is false, guest will eventually kicks vq, no? -- Toshiaki Makita _______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/virtualization