From nobody Wed May 15 19:50:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linux.alibaba.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1675653729687449.72062532646123; Sun, 5 Feb 2023 19:22:09 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pOs4J-0002vt-CX; Sun, 05 Feb 2023 22:21:23 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pOs4H-0002v8-U7 for qemu-devel@nongnu.org; Sun, 05 Feb 2023 22:21:21 -0500 Received: from out30-133.freemail.mail.aliyun.com ([115.124.30.133]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pOs4F-000694-T0 for qemu-devel@nongnu.org; Sun, 05 Feb 2023 22:21:21 -0500 Received: from localhost(mailfrom:xuanzhuo@linux.alibaba.com fp:SMTPD_---0VawTBr._1675653665) by smtp.aliyun-inc.com; Mon, 06 Feb 2023 11:21:06 +0800 X-Alimail-AntiSpam: AC=PASS; BC=-1|-1; BR=01201311R211e4; CH=green; DM=||false|; DS=||; FP=0|-1|-1|-1|0|-1|-1|-1; HT=ay29a033018045176; MF=xuanzhuo@linux.alibaba.com; NM=1; PH=DS; RN=3; SR=0; TI=SMTPD_---0VawTBr._1675653665; From: Xuan Zhuo To: qemu-devel@nongnu.org Cc: "Michael S. Tsirkin" , Jason Wang Subject: [PATCH v2 1/2] virtio_net: virtio_net_tx_complete() stop flush new packets for purge operation Date: Mon, 6 Feb 2023 11:21:04 +0800 Message-Id: <20230206032105.35831-2-xuanzhuo@linux.alibaba.com> X-Mailer: git-send-email 2.32.0.3.g01195cf9f In-Reply-To: <20230206032105.35831-1-xuanzhuo@linux.alibaba.com> References: <20230206032105.35831-1-xuanzhuo@linux.alibaba.com> MIME-Version: 1.0 X-Git-Hash: 761767cc32 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=115.124.30.133; envelope-from=xuanzhuo@linux.alibaba.com; helo=out30-133.freemail.mail.aliyun.com X-Spam_score_int: -98 X-Spam_score: -9.9 X-Spam_bar: --------- X-Spam_report: (-9.9 / 5.0 requ) BAYES_00=-1.9, ENV_AND_HDR_SPF_MATCH=-0.5, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, UNPARSEABLE_RELAY=0.001, USER_IN_DEF_SPF_WL=-7.5 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZM-MESSAGEID: 1675653731812100003 Content-Type: text/plain; charset="utf-8" For async tx, virtio_net_tx_complete() is called when purge or flush operation is done. But for purge operation, we should not try to flush new packet from tx queue. The purge operation means we will stop the queue soon. Signed-off-by: Xuan Zhuo --- hw/net/virtio-net.c | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c index 3ae909041a..6daa1e5ac1 100644 --- a/hw/net/virtio-net.c +++ b/hw/net/virtio-net.c @@ -2601,21 +2601,25 @@ static void virtio_net_tx_complete(NetClientState *= nc, ssize_t len) q->async_tx.elem =3D NULL; =20 virtio_queue_set_notification(q->tx_vq, 1); - ret =3D virtio_net_flush_tx(q); - if (ret >=3D n->tx_burst) { - /* - * the flush has been stopped by tx_burst - * we will not receive notification for the - * remainining part, so re-schedule - */ - virtio_queue_set_notification(q->tx_vq, 0); - if (q->tx_bh) { - qemu_bh_schedule(q->tx_bh); - } else { - timer_mod(q->tx_timer, - qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + n->tx_timeou= t); + + /* len =3D=3D 0 means purge, we should not flush new tx packets. */ + if (len) { + ret =3D virtio_net_flush_tx(q); + if (ret >=3D n->tx_burst) { + /* + * the flush has been stopped by tx_burst + * we will not receive notification for the + * remainining part, so re-schedule + */ + virtio_queue_set_notification(q->tx_vq, 0); + if (q->tx_bh) { + qemu_bh_schedule(q->tx_bh); + } else { + timer_mod(q->tx_timer, + qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + n->tx_ti= meout); + } + q->tx_waiting =3D 1; } - q->tx_waiting =3D 1; } } =20 --=20 2.32.0.3.g01195cf9f From nobody Wed May 15 19:50:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linux.alibaba.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1675653732627676.6732734485112; Sun, 5 Feb 2023 19:22:12 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pOs4J-0002w8-TF; Sun, 05 Feb 2023 22:21:23 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pOs4G-0002ut-Rt for qemu-devel@nongnu.org; Sun, 05 Feb 2023 22:21:20 -0500 Received: from out30-133.freemail.mail.aliyun.com ([115.124.30.133]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pOs4E-000698-Ev for qemu-devel@nongnu.org; Sun, 05 Feb 2023 22:21:20 -0500 Received: from localhost(mailfrom:xuanzhuo@linux.alibaba.com fp:SMTPD_---0VawgfOv_1675653666) by smtp.aliyun-inc.com; Mon, 06 Feb 2023 11:21:07 +0800 X-Alimail-AntiSpam: AC=PASS; BC=-1|-1; BR=01201311R191e4; CH=green; DM=||false|; DS=||; FP=0|-1|-1|-1|0|-1|-1|-1; HT=ay29a033018045170; MF=xuanzhuo@linux.alibaba.com; NM=1; PH=DS; RN=4; SR=0; TI=SMTPD_---0VawgfOv_1675653666; From: Xuan Zhuo To: qemu-devel@nongnu.org Cc: "Michael S. Tsirkin" , Jason Wang , Alexander Bulekov Subject: [PATCH v2 2/2] virtio_net: just purge tx when dev/queue reset Date: Mon, 6 Feb 2023 11:21:05 +0800 Message-Id: <20230206032105.35831-3-xuanzhuo@linux.alibaba.com> X-Mailer: git-send-email 2.32.0.3.g01195cf9f In-Reply-To: <20230206032105.35831-1-xuanzhuo@linux.alibaba.com> References: <20230206032105.35831-1-xuanzhuo@linux.alibaba.com> MIME-Version: 1.0 X-Git-Hash: 761767cc32 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=115.124.30.133; envelope-from=xuanzhuo@linux.alibaba.com; helo=out30-133.freemail.mail.aliyun.com X-Spam_score_int: -98 X-Spam_score: -9.9 X-Spam_bar: --------- X-Spam_report: (-9.9 / 5.0 requ) BAYES_00=-1.9, ENV_AND_HDR_SPF_MATCH=-0.5, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, UNPARSEABLE_RELAY=0.001, USER_IN_DEF_SPF_WL=-7.5 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZM-MESSAGEID: 1675653733328100005 Content-Type: text/plain; charset="utf-8" When dev/queue reset, we should just purge all packet, not try to flush the async packets. When flush these async packets, the callback(virtio_net_tx_complete) will try to flush new packets from tx queue. Fixes: 7dc6be52 ("virtio-net: support queue reset") Fixes: https://gitlab.com/qemu-project/qemu/-/issues/1451 Reported-by: Alexander Bulekov Signed-off-by: Xuan Zhuo --- hw/net/virtio-net.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c index 6daa1e5ac1..2ac6d3dad9 100644 --- a/hw/net/virtio-net.c +++ b/hw/net/virtio-net.c @@ -570,7 +570,7 @@ static void virtio_net_queue_reset(VirtIODevice *vdev, = uint32_t queue_index) vhost_net_virtqueue_reset(vdev, nc, queue_index); } =20 - flush_or_purge_queued_packets(nc); + qemu_purge_queued_packets(nc); } =20 static void virtio_net_queue_enable(VirtIODevice *vdev, uint32_t queue_ind= ex) --=20 2.32.0.3.g01195cf9f