On Thu, 12 Oct 2023 05:36:56 -0400, "Michael S. Tsirkin" <mst@xxxxxxxxxx> wrote: > On Thu, Oct 12, 2023 at 05:12:33PM +0800, Xuan Zhuo wrote: > > On Thu, 12 Oct 2023 05:10:55 -0400, "Michael S. Tsirkin" <mst@xxxxxxxxxx> wrote: > > > On Wed, Oct 11, 2023 at 05:27:27PM +0800, Xuan Zhuo wrote: > > > > If send queue sent some packets, we update the tx timeout > > > > record to prevent the tx timeout. > > > > > > > > Signed-off-by: Xuan Zhuo <xuanzhuo@xxxxxxxxxxxxxxxxx> > > > > --- > > > > drivers/net/virtio/xsk.c | 10 ++++++++++ > > > > 1 file changed, 10 insertions(+) > > > > > > > > diff --git a/drivers/net/virtio/xsk.c b/drivers/net/virtio/xsk.c > > > > index 7abd46bb0e3d..e605f860edb6 100644 > > > > --- a/drivers/net/virtio/xsk.c > > > > +++ b/drivers/net/virtio/xsk.c > > > > @@ -274,6 +274,16 @@ bool virtnet_xsk_xmit(struct virtnet_sq *sq, struct xsk_buff_pool *pool, > > > > > > > > virtnet_xsk_check_queue(sq); > > > > > > > > + if (stats.packets) { > > > > + struct netdev_queue *txq; > > > > + struct virtnet_info *vi; > > > > + > > > > + vi = sq->vq->vdev->priv; > > > > + > > > > + txq = netdev_get_tx_queue(vi->dev, sq - vi->sq); > > > > + txq_trans_cond_update(txq); > > > > + } > > > > + > > > > u64_stats_update_begin(&sq->stats.syncp); > > > > sq->stats.packets += stats.packets; > > > > sq->stats.bytes += stats.bytes; > > > > > > I don't get what this is doing. Is there some kind of race here you > > > are trying to address? And what introduced the race? > > > > > > Because the xsk xmit shares the send queue with the kernel xmit, > > then when I do benchmark, the xsk will always use the send queue, > > so the kernel may have no chance to do xmit, the tx watchdog > > thinks that the send queue is hang and prints tx timeout log. > > > > So I call the txq_trans_cond_update() to tell the tx watchdog > > that the send queue is working. > > > > Thanks. > > Don't like this hack. > So packets are stuck in queue - that's not good is it? > Is ours the only driver that shares queues like this? NO. And txq_trans_cond_update() is called by many net drivers for the similar reason. Thanks > > > > > > > > > > -- > > > > 2.32.0.3.g01195cf9f > > > > > > > _______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/virtualization