On Wed, Aug 14, 2024 at 10:17:15AM +0200, Jiri Pirko wrote: > >diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c > >index 3f10c72743e9..c6af18948092 100644 > >--- a/drivers/net/virtio_net.c > >+++ b/drivers/net/virtio_net.c > >@@ -2867,8 +2867,8 @@ static int virtnet_enable_queue_pair(struct virtnet_info *vi, int qp_index) > > if (err < 0) > > goto err_xdp_reg_mem_model; > > > >- virtnet_napi_enable(vi->rq[qp_index].vq, &vi->rq[qp_index].napi); > > netdev_tx_reset_queue(netdev_get_tx_queue(vi->dev, qp_index)); > >+ virtnet_napi_enable(vi->rq[qp_index].vq, &vi->rq[qp_index].napi); > > virtnet_napi_tx_enable(vi, vi->sq[qp_index].vq, &vi->sq[qp_index].napi); > > Hmm, I have to look at this a bit more. I think this might be accidental > fix. The thing is, napi can be triggered even if it is disabled: > > ->__local_bh_enable_ip() > -> net_rx_action() > -> __napi_poll() > > Here __napi_poll() calls napi_is_scheduled() and calls virtnet_poll_tx() > in case napi is scheduled. napi_is_scheduled() checks NAPI_STATE_SCHED > bit in napi state. > > However, this bit is set previously by netif_napi_add_weight(). It's actually set in napi_disable too, isn't it? > > > > > > ... > > > >Best regards > >-- > >Marek Szyprowski, PhD > >Samsung R&D Institute Poland > > > > > > > > return 0; > > > > > >Will submit the patch in a jiff. Thanks! > > > > > > > >> > >>Best regards > >>-- > >>Marek Szyprowski, PhD > >>Samsung R&D Institute Poland > >>