From nobody Mon Feb 9 06:34:44 2026 Received: from mail-pj1-f54.google.com (mail-pj1-f54.google.com [209.85.216.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id ECFBD34D39C for ; Tue, 23 Dec 2025 15:27:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766503640; cv=none; b=LCAWscYGkE+q+6EtVdWNGqALytTlfik27bHm9TOz0i0UYCLPlqXVf9i+J4UuxtoQvxCNq/Cu6QGCidYnuJcYi5sMfBdM5LKQu9BQwGZf0BFtOk4v3WAWbrCsSSKWXhdfbMMNfb8vdd1Zj5hify5BMgbArqizShAUf6I6S1R30Wg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766503640; c=relaxed/simple; bh=dqAVCd406spP927ct6RgvB4a8I1dOdU+v808mOA7XuI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gLO4dd/MTPMoLiI6HqJw3D82tyBWUICIRRqv0eb7EccfivGdhVSN2clG4sfURpFk8tdrRU9BRV3c5qrstX49ECNzv+p9ABH/87aCr4nPhFIUFSw8/6zipdUNHMu2NBvnL7B6lkVB5ayv8/bNYsTGcZTKRK651RZe4/ri74PJfDA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=dEEOpmP1; arc=none smtp.client-ip=209.85.216.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="dEEOpmP1" Received: by mail-pj1-f54.google.com with SMTP id 98e67ed59e1d1-34c718c5481so4920144a91.3 for ; Tue, 23 Dec 2025 07:27:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1766503638; x=1767108438; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Ze9XAlqzMbfmN07PhRbHKjr9BLXv6+joNuOst0RuStI=; b=dEEOpmP1FdgkOa3ktWP8RLJupssR+p8a0ID+w0AEfkGuW8t9R5zULSqd5pllEznehv eGj7xgm98JtQGTmKza/LZkAFZPDb+24cAJy1ubomu5FCY4xz113NQe/PVfsQBWWUJEFJ Rlr/PuHgHsP2/aAdgYQsr1/9OxCdN2OCEgp8hehA28jtPza3s5gDuJ8dnPJFjbqXsB9D PVyC2ufQqtWqe86Om883mdJIaHvf0dgwTTOg1dJssCdLoUiu5r2meFWox6zaG1PvIkLD iuEJms2dHp9YZPCO1ib/Ujhcgt9MXadBCN8TWkbdupyJ2BlEBQe/L0Urx31DCC7TUxPa DupQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766503638; x=1767108438; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=Ze9XAlqzMbfmN07PhRbHKjr9BLXv6+joNuOst0RuStI=; b=h54IsmJNWb25jx/RQnTBk5XgMPIXDocjyXZI5ccmPrltrK502FKlelzRnlb5TjmsQ4 2Zss0Wn8Z68n8sZnc70QBAv+iXmuG67p4mYlgeK+Q+8l1HkR2IhnUCwJkI8BRMmiQhS8 bnsWD9dxgDuj6pbYOUHWWZgZwwIP6ovdMXUwvUHYgKEkmPcylpDjhGTL6b4i1WhPExQl zNKfDDF//Ffmai/VRFDSNAVEgTB7VlpYNoJSVEUnC99TudGUikFGKyWw1V2zMjpMkaLt XlWgHNSC8vuSyAtqva7w/KjHNwS/cOc7ZOAK5EpgTLMX7L0/r11v8CRWkfEKst+Pv3E1 jO4Q== X-Forwarded-Encrypted: i=1; AJvYcCWyM6omvZT3JANLN85wHUMLhULlnKIPhz4CmspTlUB3K0Fio5kQW9nuq/anJwX/N6pNBJ4hgSKx9ZGJ5lo=@vger.kernel.org X-Gm-Message-State: AOJu0YxbDAPv2VZt7zOLoMmtfgIAUQZydSGtO4HCvPamHpueSuQGysbA wCtr0vlHe9kqzxjQum4P4e9op/zSX1ipxjTkIn/rNJsR3QPQEB2jdwkT X-Gm-Gg: AY/fxX7ubhaIa/VBngMwcN0H2rUywEqOWj2O7ks9AIB2rKEF2yo1NcgMUteZ90rXlOZ M3bAtk0ZlF97ixiv/zEUM+JpGPKwcz+CmUlBavR0jd+UUXqryLjPyCdAulREl30/DTy0Fs5JRWL iUM2IObq7RrZy9tsTFxe8x1G0IHU0WVRNACU8/ufduvHWxFNaHNjPz0/aOCUP8UJOCWTauOBv6s ilfi8AC+kQ8Xbi3NW62SXO1zJ1MtXWeGNnnFsDBn2b5Ayk1kZGUpaGzl4oREGQe/fSEAQkNIaGz HwSnTuyO5Q39dt5sStwRNFb7vm8DUtDFUA4q3nmm/CoR43tpfqcNQClncdN5ojQ58+KHsUzADeN jSJgbW10HZwWuzGDtSO/uIc6EOGzXMbHWts8E3DdwdvzncQkJG5ZVXYTJ0PGBZJgmnsrNaO4kab Ob+fbClFKelohr+J4Hgwy68LHI X-Google-Smtp-Source: AGHT+IEk5kNaKT2vsTzXqOJuqMCa8BgC7mYYuynqk5le798li0SZVD/6VGOpORiTUPiHf0D9J/Vgsw== X-Received: by 2002:a17:90b:3ccf:b0:349:162d:ae1e with SMTP id 98e67ed59e1d1-34e921f7eb0mr11071309a91.33.1766503638325; Tue, 23 Dec 2025 07:27:18 -0800 (PST) Received: from minh.192.168.1.1 ([2001:ee0:4f4c:210:3523:f373:4d1d:e7f0]) by smtp.googlemail.com with ESMTPSA id 98e67ed59e1d1-34e76ae7618sm8006138a91.1.2025.12.23.07.27.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Dec 2025 07:27:17 -0800 (PST) From: Bui Quang Minh To: netdev@vger.kernel.org Cc: "Michael S. Tsirkin" , Jason Wang , Xuan Zhuo , =?UTF-8?q?Eugenio=20P=C3=A9rez?= , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Alexei Starovoitov , Daniel Borkmann , Jesper Dangaard Brouer , John Fastabend , Stanislav Fomichev , virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, Bui Quang Minh Subject: [PATCH net 3/3] virtio-net: schedule the pending refill work after being enabled Date: Tue, 23 Dec 2025 22:25:33 +0700 Message-ID: <20251223152533.24364-4-minhquangbui99@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251223152533.24364-1-minhquangbui99@gmail.com> References: <20251223152533.24364-1-minhquangbui99@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" As we need to move the enable_delayed_refill after napi_enable, it's possible that a refill work needs to be scheduled in virtnet_receive but it cannot. This can make the receive side stuck because if we don't have any receive buffers, there will be nothing trigger the refill logic. So in case it happens, in virtnet_receive, set the rx queue's refill_pending, then when the refill work is enabled again, a refill work will be scheduled. Signed-off-by: Bui Quang Minh --- drivers/net/virtio_net.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index 8016d2b378cf..ddc62dab2f9a 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -383,6 +383,9 @@ struct receive_queue { /* Is delayed refill enabled? */ bool refill_enabled; =20 + /* A refill work needs to be scheduled when delayed refill is enabled */ + bool refill_pending; + /* The lock to synchronize the access to refill_enabled */ spinlock_t refill_lock; =20 @@ -720,10 +723,13 @@ static void virtnet_rq_free_buf(struct virtnet_info *= vi, put_page(virt_to_head_page(buf)); } =20 -static void enable_delayed_refill(struct receive_queue *rq) +static void enable_delayed_refill(struct receive_queue *rq, + bool schedule_refill) { spin_lock_bh(&rq->refill_lock); rq->refill_enabled =3D true; + if (rq->refill_pending || schedule_refill) + schedule_delayed_work(&rq->refill, 0); spin_unlock_bh(&rq->refill_lock); } =20 @@ -3032,6 +3038,8 @@ static int virtnet_receive(struct receive_queue *rq, = int budget, spin_lock(&rq->refill_lock); if (rq->refill_enabled) schedule_delayed_work(&rq->refill, 0); + else + rq->refill_pending =3D true; spin_unlock(&rq->refill_lock); } } @@ -3228,11 +3236,8 @@ static int virtnet_open(struct net_device *dev) if (err < 0) goto err_enable_qp; =20 - if (i < vi->curr_queue_pairs) { - enable_delayed_refill(&vi->rq[i]); - if (schedule_refill) - schedule_delayed_work(&vi->rq[i].refill, 0); - } + if (i < vi->curr_queue_pairs) + enable_delayed_refill(&vi->rq[i], schedule_refill); } =20 if (virtio_has_feature(vi->vdev, VIRTIO_NET_F_STATUS)) { @@ -3480,9 +3485,7 @@ static void __virtnet_rx_resume(struct virtnet_info *= vi, if (running) virtnet_napi_enable(rq); =20 - enable_delayed_refill(rq); - if (schedule_refill) - schedule_delayed_work(&rq->refill, 0); + enable_delayed_refill(rq, schedule_refill); } =20 static void virtnet_rx_resume_all(struct virtnet_info *vi) --=20 2.43.0