• Jason Wang's avatar
    virtio-net: correctly enable callback during start_xmit · d71ebe81
    Jason Wang authored
    Commit a7766ef1("virtio_net: disable cb aggressively") enables
    virtqueue callback via the following statement:
    
            do {
    		if (use_napi)
    			virtqueue_disable_cb(sq->vq);
    
    		free_old_xmit_skbs(sq, false);
    
    	} while (use_napi && kick &&
                   unlikely(!virtqueue_enable_cb_delayed(sq->vq)));
    
    When NAPI is used and kick is false, the callback won't be enabled
    here. And when the virtqueue is about to be full, the tx will be
    disabled, but we still don't enable tx interrupt which will cause a TX
    hang. This could be observed when using pktgen with burst enabled.
    
    TO be consistent with the logic that tries to disable cb only for
    NAPI, fixing this by trying to enable delayed callback only when NAPI
    is enabled when the queue is about to be full.
    
    Fixes: a7766ef1 ("virtio_net: disable cb aggressively")
    Signed-off-by: default avatarJason Wang <jasowang@redhat.com>
    Tested-by: default avatarLaurent Vivier <lvivier@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    d71ebe81
virtio_net.c 107 KB