Skip to content
Snippets Groups Projects
Forked from Linaro / linux / kernel / torvalds / linux
Source project has a limited visibility.
user avatar
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
Name Last commit Last update