On Wed, May 1, 2024 at 4:07 AM Michael S. Tsirkin <mst@xxxxxxxxxx> wrote: > > On Tue, Apr 30, 2024 at 03:35:09PM -0400, Darius Rad wrote: > > The transmit queue is stopped when the number of free queue entries is less > > than 2+MAX_SKB_FRAGS, in start_xmit(). If the queue length (QUEUE_NUM_MAX) > > is less than then this, transmission will immediately trigger a netdev > > watchdog timeout. Report this condition earlier and more directly. > > > > Signed-off-by: Darius Rad <darius@xxxxxxxxxxxx> > > --- > > drivers/net/virtio_net.c | 3 +++ > > 1 file changed, 3 insertions(+) > > > > diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c > > index 115c3c5414f2..72ee8473b61c 100644 > > --- a/drivers/net/virtio_net.c > > +++ b/drivers/net/virtio_net.c > > @@ -4917,6 +4917,9 @@ static int virtnet_probe(struct virtio_device *vdev) > > set_bit(guest_offloads[i], &vi->guest_offloads); > > vi->guest_offloads_capable = vi->guest_offloads; > > > > + if (virtqueue_get_vring_size(vi->sq->vq) < 2 + MAX_SKB_FRAGS) > > + netdev_warn_once(dev, "not enough queue entries, expect xmit timeout\n"); > > + > > How about actually fixing it though? E.g. by linearizing... Actually, the linearing is only needed for the case when the indirect descriptor is not supported. > > It also bothers me that there's practically > /proc/sys/net/core/max_skb_frags > and if that's low then things could actually work. Probably not as it won't exceed MAX_SKB_FRAGS. > > Finally, while originally it was just 17 typically, now it's > configurable. So it's possible that you change the config to make big > tcp Note that virtio-net doesn't fully support big TCP. > work better and device stops working while it worked fine > previously. For this patch, I guess not as we had: if (sq->vq->num_free < 2+MAX_SKB_FRAGS) in the tx path. So it won't even work before this patch. Thanks > > > > pr_debug("virtnet: registered device %s with %d RX and TX vq's\n", > > dev->name, max_queue_pairs); > > > > -- > > 2.39.2 >