On Tue, Apr 13, 2021 at 04:53:32PM +0800, Jason Wang 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? Good point ... probably only if the vq isn't empty ... > And as we discussed in the past, it's probably the time to have a single > NAPI for both tx and rx? > > Thanks Donnu. I'd like to get a minimal bugfix in, refactoring on top ... > > > } > > @@ -1582,6 +1583,7 @@ static netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev) > > bool use_napi = sq->napi.weight; > > /* Free up any pending old buffers before queueing new ones. */ > > + virtqueue_disable_cb(sq->vq); > > free_old_xmit_skbs(sq, false); > > if (use_napi && kick) _______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/virtualization