On Tue, Apr 13, 2021 at 4:53 AM Jason Wang <jasowang@xxxxxxxxxx> wrote: > > > 在 2021/4/13 下午1:47, Michael S. Tsirkin 写道: > > There are currently two cases where we poll TX vq not in response to a > > callback: start xmit and rx napi. We currently do this with callbacks > > enabled which can cause extra interrupts from the card. Used not to be > > a big issue as we run with interrupts disabled but that is no longer the > > case, and in some cases the rate of spurious interrupts is so high > > linux detects this and actually kills the interrupt. > > > > Fix up by disabling the callbacks before polling the tx vq. > > > > Signed-off-by: Michael S. Tsirkin <mst@xxxxxxxxxx> > > --- > > drivers/net/virtio_net.c | 2 ++ > > 1 file changed, 2 insertions(+) > > > > diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c > > index 82e520d2cb12..16d5abed582c 100644 > > --- a/drivers/net/virtio_net.c > > +++ b/drivers/net/virtio_net.c > > @@ -1429,6 +1429,7 @@ static void virtnet_poll_cleantx(struct receive_queue *rq) > > return; > > > > if (__netif_tx_trylock(txq)) { > > + virtqueue_disable_cb(sq->vq); > > free_old_xmit_skbs(sq, true); > > __netif_tx_unlock(txq); > > > Any reason that we don't need to enable the cb here? This is an opportunistic clean outside the normal tx-napi path, so if disabling the tx interrupt here, it won't be reenabled based on napi_complete_done. I think that means that it stays disabled until the following start_xmit: if (use_napi && kick) virtqueue_enable_cb_delayed(sq->vq); But that seems sufficient. _______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/virtualization