From nobody Sun Feb 8 09:03:55 2026 Received: from mail-pl1-f180.google.com (mail-pl1-f180.google.com [209.85.214.180]) (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 5E9331459EA for ; Fri, 7 Mar 2025 01:12:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741309944; cv=none; b=V5a9PGcZqyKuiisemRMC3uEyxAzjsu8RnZKuSJN4l+nvKpmyIP7qij3O1BcCfwmZm6kazNMhUDn3Kqik0fYPia0c4mTaaLP9+uB/pWoDfo06CzM61ficWhM3tDLNvhnoe7NodlFI/1TpxxJOHF+WzXvsN4KtGxUuvpLV9NnBn3Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741309944; c=relaxed/simple; bh=oZEKZBNyzTFUQoyDm8VLIwp8l+Uss/+aDmlef+L4zKU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YLAUgl6ao8A4wn/eFx772TUuoQ9iOfIVV3CvaFRdvM2fgg9H/akyIL8SZTjEFsgxUTn7cxVuIyV9nTMQTPhkwR1CpUiqst0r18trx+tv699233d7wlJ3cd76CcIwbbMUIyTAhLuGwinb6FcifhgnvBUCfFlEaYVPd3hA670BjnQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=fastly.com; spf=pass smtp.mailfrom=fastly.com; dkim=pass (1024-bit key) header.d=fastly.com header.i=@fastly.com header.b=ag6mFf2R; arc=none smtp.client-ip=209.85.214.180 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=fastly.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fastly.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=fastly.com header.i=@fastly.com header.b="ag6mFf2R" Received: by mail-pl1-f180.google.com with SMTP id d9443c01a7336-2235908a30aso34239775ad.3 for ; Thu, 06 Mar 2025 17:12:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fastly.com; s=google; t=1741309941; x=1741914741; 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=/tghgwiJFbKnAoocPVNdoGW6mlhutsLEBZ7NkypKcYI=; b=ag6mFf2RTzECLKnv6pE/D/+sfHo9wqGeoSYN91a4sDIbM06KgK9I2mbK0ORy+TpZdT 0koqwhoSFg5f2HYodPLa6n4TFVUVHu+ra++PZ3mTpy8/tb3RNYBs9UmHOHVcsOHzLw9+ mkzCyO+YoZSuVS+jvMLv2IjghkQQca1xFSzok= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741309941; x=1741914741; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/tghgwiJFbKnAoocPVNdoGW6mlhutsLEBZ7NkypKcYI=; b=ZC+b8uHkYDebVqLcc2Zwiw3zXqz5Kdn7QiSw3KoIxCN3/Jd4hWVremWZb0Rmna0nek UG4m0SFi5HpXJuGQ/y0d85P85BRqoDozsGzGk4YvtI1t/ebkkjtd66dPN/6AZNIJ7eA8 2m8wpYpF8ITAnOUxXLdH9nAmA/CmCqAygVdci8ee5ts3oftueYD5+gtDNKmtOZwKDPl8 8mKIagXndOJ/0pllOX8VdckLGUPKvVXw/VXTxF3uN76PaW8ChtxGrCpYjIKbvrQNISbH +LwA+s6M7SlGOBElJux04gSMFHRTDxUNS6aw5cv604Q4EJgfJnhz3QdHe3QWs0Yxzqyf PAlA== X-Forwarded-Encrypted: i=1; AJvYcCXgWgrzCj/fSh41jy5UfcZybFO02ZB7M8wNgp8EHR1uQEODtVMQ9+OdsJuz8ZORDgKR3aLd8PxE6qwdblQ=@vger.kernel.org X-Gm-Message-State: AOJu0YwQ8Ke4VLVy4CarG1Ut3qu7tiT807IImff7omjKFy34sSIqo6UN YkwTq/e5BHLbiZGOSO+F46Z2swGvqOoLrApUxd7XQ656PI8LN03XTPk++mYi0wo= X-Gm-Gg: ASbGncsUB6Fv9XemiwFRGMJr8EuwvGpUk9n9BHKdvSPuzWOZJqOjSLJERuxjnjXnfBH Cp+H2XglJ4LvFEYrkuEsd7BcUXliJi1kjgHl6dsh/kBriM4KwkT1DxxWTv+cvCBbVTxLuJIcjoc oXT0roDFLEGSveP+xpZCgwbS0GLrCE9iIv8/U90BvNMZKSkeAtmRgQw/V/XM959GbqypA1SHBCW qBIBrybKvLy6ei9xba5kiyL8agAqPwOWQ0Obq34/Ip7RFzflJCIwKC5gkvY0eSEQM+FASHrbL9f vDh4x3ux5bCR+SEDzpUHe61q6MZ8i7jS17FXge71yBu7h9AFOtc0 X-Google-Smtp-Source: AGHT+IGKhqwe2JpllICnS8YtflWUc4MgBo06dsvavfBwoHtdqy1vxCbTRe3YRbrAw0m3enhzIMPo2g== X-Received: by 2002:a17:902:ce0a:b0:224:584:6f05 with SMTP id d9443c01a7336-22428bdecdemr26052505ad.41.1741309941695; Thu, 06 Mar 2025 17:12:21 -0800 (PST) Received: from localhost.localdomain ([2620:11a:c019:0:65e:3115:2f58:c5fd]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22410abc816sm18749685ad.258.2025.03.06.17.12.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Mar 2025 17:12:21 -0800 (PST) From: Joe Damato To: netdev@vger.kernel.org Cc: mkarsten@uwaterloo.ca, gerhard@engleder-embedded.com, jasowang@redhat.com, xuanzhuo@linux.alibaba.com, kuba@kernel.org, mst@redhat.com, leiyang@redhat.com, Joe Damato , =?UTF-8?q?Eugenio=20P=C3=A9rez?= , Andrew Lunn , "David S. Miller" , Eric Dumazet , Paolo Abeni , virtualization@lists.linux.dev (open list:VIRTIO CORE AND NET DRIVERS), linux-kernel@vger.kernel.org (open list) Subject: [PATCH net-next v6 1/4] virtio-net: Refactor napi_enable paths Date: Fri, 7 Mar 2025 01:12:09 +0000 Message-ID: <20250307011215.266806-2-jdamato@fastly.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250307011215.266806-1-jdamato@fastly.com> References: <20250307011215.266806-1-jdamato@fastly.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" Refactor virtnet_napi_enable and virtnet_napi_tx_enable to take a struct receive_queue. Create a helper, virtnet_napi_do_enable, which contains the logic to enable a NAPI. Signed-off-by: Joe Damato Acked-by: Michael S. Tsirkin Acked-by: Jason Wang Tested-by: Lei Yang Reviewed-by: Xuan Zhuo --- drivers/net/virtio_net.c | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index ac26a6201c44..133b004c7a9a 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -2807,7 +2807,8 @@ static void skb_recv_done(struct virtqueue *rvq) virtqueue_napi_schedule(&rq->napi, rvq); } =20 -static void virtnet_napi_enable(struct virtqueue *vq, struct napi_struct *= napi) +static void virtnet_napi_do_enable(struct virtqueue *vq, + struct napi_struct *napi) { napi_enable(napi); =20 @@ -2820,10 +2821,16 @@ static void virtnet_napi_enable(struct virtqueue *v= q, struct napi_struct *napi) local_bh_enable(); } =20 -static void virtnet_napi_tx_enable(struct virtnet_info *vi, - struct virtqueue *vq, - struct napi_struct *napi) +static void virtnet_napi_enable(struct receive_queue *rq) { + virtnet_napi_do_enable(rq->vq, &rq->napi); +} + +static void virtnet_napi_tx_enable(struct send_queue *sq) +{ + struct virtnet_info *vi =3D sq->vq->vdev->priv; + struct napi_struct *napi =3D &sq->napi; + if (!napi->weight) return; =20 @@ -2835,7 +2842,7 @@ static void virtnet_napi_tx_enable(struct virtnet_inf= o *vi, return; } =20 - return virtnet_napi_enable(vq, napi); + virtnet_napi_do_enable(sq->vq, napi); } =20 static void virtnet_napi_tx_disable(struct napi_struct *napi) @@ -2856,7 +2863,7 @@ static void refill_work(struct work_struct *work) =20 napi_disable(&rq->napi); still_empty =3D !try_fill_recv(vi, rq, GFP_KERNEL); - virtnet_napi_enable(rq->vq, &rq->napi); + virtnet_napi_enable(rq); =20 /* In theory, this can happen: if we don't get any buffers in * we will *never* try to fill again. @@ -3073,8 +3080,8 @@ static int virtnet_enable_queue_pair(struct virtnet_i= nfo *vi, int qp_index) if (err < 0) goto err_xdp_reg_mem_model; =20 - virtnet_napi_enable(vi->rq[qp_index].vq, &vi->rq[qp_index].napi); - virtnet_napi_tx_enable(vi, vi->sq[qp_index].vq, &vi->sq[qp_index].napi); + virtnet_napi_enable(&vi->rq[qp_index]); + virtnet_napi_tx_enable(&vi->sq[qp_index]); =20 return 0; =20 @@ -3339,7 +3346,7 @@ static void virtnet_rx_resume(struct virtnet_info *vi= , struct receive_queue *rq) schedule_delayed_work(&vi->refill, 0); =20 if (running) - virtnet_napi_enable(rq->vq, &rq->napi); + virtnet_napi_enable(rq); } =20 static int virtnet_rx_resize(struct virtnet_info *vi, @@ -3402,7 +3409,7 @@ static void virtnet_tx_resume(struct virtnet_info *vi= , struct send_queue *sq) __netif_tx_unlock_bh(txq); =20 if (running) - virtnet_napi_tx_enable(vi, sq->vq, &sq->napi); + virtnet_napi_tx_enable(sq); } =20 static int virtnet_tx_resize(struct virtnet_info *vi, struct send_queue *s= q, @@ -5983,9 +5990,8 @@ static int virtnet_xdp_set(struct net_device *dev, st= ruct bpf_prog *prog, if (old_prog) bpf_prog_put(old_prog); if (netif_running(dev)) { - virtnet_napi_enable(vi->rq[i].vq, &vi->rq[i].napi); - virtnet_napi_tx_enable(vi, vi->sq[i].vq, - &vi->sq[i].napi); + virtnet_napi_enable(&vi->rq[i]); + virtnet_napi_tx_enable(&vi->sq[i]); } } =20 @@ -6000,9 +6006,8 @@ static int virtnet_xdp_set(struct net_device *dev, st= ruct bpf_prog *prog, =20 if (netif_running(dev)) { for (i =3D 0; i < vi->max_queue_pairs; i++) { - virtnet_napi_enable(vi->rq[i].vq, &vi->rq[i].napi); - virtnet_napi_tx_enable(vi, vi->sq[i].vq, - &vi->sq[i].napi); + virtnet_napi_enable(&vi->rq[i]); + virtnet_napi_tx_enable(&vi->sq[i]); } } if (prog) --=20 2.45.2 From nobody Sun Feb 8 09:03:55 2026 Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.170]) (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 193DD1474DA for ; Fri, 7 Mar 2025 01:12:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741309946; cv=none; b=JlKZJj+E2jAYu3frvE7mZBXjzXG3/ba+YeonOeTPUL6f/YW8OKUxswYHEprTSkLcWGCr1uNgnb9qUospk1n8QdR8nnfh5ODpWabvIcrffbbWsuxsBxpIccceZWWJSj0YLPixWnf31oAvRSf0z4K2yC77y5ZK9TQONuypPyTO0pg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741309946; c=relaxed/simple; bh=yAvpgVVKv0qwVx/BcaJPPk6io7i8uqUMf303YSpg6Bc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YFmuWWP2udkit743F6dAdF6jKgy/7wt9ejy4BlT/aQrbbt9DTWOcWYTGNowRCw9MsQa2aufSV2KE2zBGWR2kH31aRGmzDZvLdmiYjQYFsNTmVEkA2lheiAyijW27ZMOvQTwgxM9m+zMNg8nKvZE5bOwfPr56POyr8fB0uW0CSY0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=fastly.com; spf=pass smtp.mailfrom=fastly.com; dkim=pass (1024-bit key) header.d=fastly.com header.i=@fastly.com header.b=uXXbd7Ux; arc=none smtp.client-ip=209.85.214.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=fastly.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fastly.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=fastly.com header.i=@fastly.com header.b="uXXbd7Ux" Received: by mail-pl1-f170.google.com with SMTP id d9443c01a7336-224100e9a5cso24308505ad.2 for ; Thu, 06 Mar 2025 17:12:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fastly.com; s=google; t=1741309943; x=1741914743; 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=kvwTo73+IFY77/cYaIXsS2w5RqkSonWsueWTF0kXS/4=; b=uXXbd7Uxc0itPUE7M83fbS3D+/GaNswUO4C3yB7UDqCf7Kmx09SJyAuDcJ2GXpFSPc hbN6f6CENPJEKIGrWjmZ9szhZ3NoFPqsawtTA5wbQ4qV5O279iQWCj1vHC1ssFqiWt/6 SgjfyUhqjNhQE8sqBNMzVc4vXIu2lAlO0XJhk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741309943; x=1741914743; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=kvwTo73+IFY77/cYaIXsS2w5RqkSonWsueWTF0kXS/4=; b=fnt8Bq/ixjReMmjIaq5rHTgwxwYj8bUKqbXY9tV0y84Y9cusF1gUOI8yrITj7PX5QQ DHtRfmu6Y77yw9PvpizE3fNYFGmoajSgwnQbSzcxyhC5q8NV8OOa517inQfVD2w8fyqz q4AO0pBC/6fW6Yq35G7mbA3LrNm6LcdMChAoRPMU0AWS7iG8e20qZqgXMg49M/spqGuC jFFLdKGGBvtg4Detif2ZYDIMB4oWZJgdl50Fbbgp9Hq51wrGe2NWlQ/c23axB2ZN9srm b25sT2fCn5ijl5HC0NKd+kLcHdwnATicPoH7vlXVP0Kc6RE881MxlbBFh/GIaBC3LzPr URGg== X-Forwarded-Encrypted: i=1; AJvYcCW93PSSqjCoN2dJBwCOv447Bm0SGbzuRh1hH37I7sIMoqiuKsboHrhxOpPujYsmAhgfT47zWDjn01a94ZM=@vger.kernel.org X-Gm-Message-State: AOJu0YzLtURHutRrsSxfuzNsWdQDaWZN+OID+C5OOeA3wTAzM0Reuzh8 zRbNeEu4IZq/kn2qFl0wyDzvaQ+fWpgRjtXB5I7VRdOay6IdYQOj24kgwKjsN+E= X-Gm-Gg: ASbGncvLOnnkFKiOcpNmkShzK7R3q5b3W2L/yXS+4v6Y0gnRsUOx1I+Ny/cPAHU1klY W+2K9/JI5N3ytB6CVh+kYkf84EXqKx9Z1TPEZHU6gz9aQaPWw2GJ7gq+5suMlZU2APvY0RwM3cE yJBriaZaSumiKHF6L0mIDPusRsW5h8Xhz6z9uJsSwh8LOqitfeaYBMVKZH9ofxRK0XpM69auIm+ EmGign9ZZrPqisBqxIjyFmXW6u0Q6kkvytiz1S4ePmzODR1FxSxo8nudNtVqsqQY+xCrjJHhwm2 0dFxgB3Ot2HsYue4MBgDqjV+Tws6aAhE4boFxa6bBMJ2PBhJmCjw X-Google-Smtp-Source: AGHT+IGoI+aPJvj7yY+4BLZ2+twYf/oT3+TiRwVbnShK0v7noTjCRMsILjhJFgqCavzprURMi0Wvnw== X-Received: by 2002:a17:902:e810:b0:223:432b:593d with SMTP id d9443c01a7336-22428c07537mr25062635ad.42.1741309943342; Thu, 06 Mar 2025 17:12:23 -0800 (PST) Received: from localhost.localdomain ([2620:11a:c019:0:65e:3115:2f58:c5fd]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22410abc816sm18749685ad.258.2025.03.06.17.12.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Mar 2025 17:12:22 -0800 (PST) From: Joe Damato To: netdev@vger.kernel.org Cc: mkarsten@uwaterloo.ca, gerhard@engleder-embedded.com, jasowang@redhat.com, xuanzhuo@linux.alibaba.com, kuba@kernel.org, mst@redhat.com, leiyang@redhat.com, Joe Damato , =?UTF-8?q?Eugenio=20P=C3=A9rez?= , Andrew Lunn , "David S. Miller" , Eric Dumazet , Paolo Abeni , virtualization@lists.linux.dev (open list:VIRTIO CORE AND NET DRIVERS), linux-kernel@vger.kernel.org (open list) Subject: [PATCH net-next v6 2/4] virtio-net: Refactor napi_disable paths Date: Fri, 7 Mar 2025 01:12:10 +0000 Message-ID: <20250307011215.266806-3-jdamato@fastly.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250307011215.266806-1-jdamato@fastly.com> References: <20250307011215.266806-1-jdamato@fastly.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" Create virtnet_napi_disable helper and refactor virtnet_napi_tx_disable to take a struct send_queue. Signed-off-by: Joe Damato Acked-by: Michael S. Tsirkin Acked-by: Jason Wang Tested-by: Lei Yang Reviewed-by: Xuan Zhuo --- drivers/net/virtio_net.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index 133b004c7a9a..e578885c1093 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -2845,12 +2845,21 @@ static void virtnet_napi_tx_enable(struct send_queu= e *sq) virtnet_napi_do_enable(sq->vq, napi); } =20 -static void virtnet_napi_tx_disable(struct napi_struct *napi) +static void virtnet_napi_tx_disable(struct send_queue *sq) { + struct napi_struct *napi =3D &sq->napi; + if (napi->weight) napi_disable(napi); } =20 +static void virtnet_napi_disable(struct receive_queue *rq) +{ + struct napi_struct *napi =3D &rq->napi; + + napi_disable(napi); +} + static void refill_work(struct work_struct *work) { struct virtnet_info *vi =3D @@ -2861,7 +2870,7 @@ static void refill_work(struct work_struct *work) for (i =3D 0; i < vi->curr_queue_pairs; i++) { struct receive_queue *rq =3D &vi->rq[i]; =20 - napi_disable(&rq->napi); + virtnet_napi_disable(rq); still_empty =3D !try_fill_recv(vi, rq, GFP_KERNEL); virtnet_napi_enable(rq); =20 @@ -3060,8 +3069,8 @@ static int virtnet_poll(struct napi_struct *napi, int= budget) =20 static void virtnet_disable_queue_pair(struct virtnet_info *vi, int qp_ind= ex) { - virtnet_napi_tx_disable(&vi->sq[qp_index].napi); - napi_disable(&vi->rq[qp_index].napi); + virtnet_napi_tx_disable(&vi->sq[qp_index]); + virtnet_napi_disable(&vi->rq[qp_index]); xdp_rxq_info_unreg(&vi->rq[qp_index].xdp_rxq); } =20 @@ -3333,7 +3342,7 @@ static void virtnet_rx_pause(struct virtnet_info *vi,= struct receive_queue *rq) bool running =3D netif_running(vi->dev); =20 if (running) { - napi_disable(&rq->napi); + virtnet_napi_disable(rq); virtnet_cancel_dim(vi, &rq->dim); } } @@ -3375,7 +3384,7 @@ static void virtnet_tx_pause(struct virtnet_info *vi,= struct send_queue *sq) qindex =3D sq - vi->sq; =20 if (running) - virtnet_napi_tx_disable(&sq->napi); + virtnet_napi_tx_disable(sq); =20 txq =3D netdev_get_tx_queue(vi->dev, qindex); =20 @@ -5952,8 +5961,8 @@ static int virtnet_xdp_set(struct net_device *dev, st= ruct bpf_prog *prog, /* Make sure NAPI is not using any XDP TX queues for RX. */ if (netif_running(dev)) { for (i =3D 0; i < vi->max_queue_pairs; i++) { - napi_disable(&vi->rq[i].napi); - virtnet_napi_tx_disable(&vi->sq[i].napi); + virtnet_napi_disable(&vi->rq[i]); + virtnet_napi_tx_disable(&vi->sq[i]); } } =20 --=20 2.45.2 From nobody Sun Feb 8 09:03:55 2026 Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) (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 BEA581714B4 for ; Fri, 7 Mar 2025 01:12:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741309950; cv=none; b=BwoHbci7F24VLLKb4difqt+59EslATh4sIsL5aAQSXF/gm/LhXLKcK9+8MGXjXpkyzBEZ9gBNVeTKZVD1k+i9A9ZwJwr+el7LtObfaYCuDBLzvFNUnB2BxmEx3mCAfzN3g4ZwAG3CgIX1OuzCy3jLig0ntrcGzvk6ElbCoabB3c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741309950; c=relaxed/simple; bh=O43CjekhpNhqU5hy99CW3Pg6sV7P2M0U4HkhUdlpIoI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=M4dIs0mNA4NAerGohpFUpEYNzz/6KnwlnhTxEfINffF9pSReZl04Krg4NycQ+2gJqtxhbL2Nfe0vVZ29L3t91utzRqz10gszLRNcqPVodkSt9gliWen5eig4iGbA9BMLnjNtYxKK7eKQxBqL8GBRPkyN3yXv7+qYwILYYaD9k9s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=fastly.com; spf=pass smtp.mailfrom=fastly.com; dkim=pass (1024-bit key) header.d=fastly.com header.i=@fastly.com header.b=AuYLTS+j; arc=none smtp.client-ip=209.85.214.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=fastly.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fastly.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=fastly.com header.i=@fastly.com header.b="AuYLTS+j" Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-22355618fd9so24642035ad.3 for ; Thu, 06 Mar 2025 17:12:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fastly.com; s=google; t=1741309945; x=1741914745; 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=Kov/5Qi5/eXa3sZew7Uff/swL40CZY7WdNdYduRpGtQ=; b=AuYLTS+jy449um+B57nkmg+yhdv3lzxVzXFWpLvsij3FDJXQcl3+YVdHRLmXRvyneD 17OFw/7kC+QScQObKN2Wg1qC8LGpRkRhHJvG1nODAnI+G69UXHgDZSjfrh0oJY2BaoIp UtR3ZjI6ym4fwQPKUeuqFfjWV7gz9kjML8W10= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741309945; x=1741914745; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Kov/5Qi5/eXa3sZew7Uff/swL40CZY7WdNdYduRpGtQ=; b=rI33jLx5udU0Y4SY8r/gNrjEJut6OFndBfumAiVcW/8GI/Q618+CU2ANBoJ76A5tPO 37zF7HoIgA1bRT8LI1dy1ogv5mUdMsR9Ha1qOsDt5q7NFuWzVSxg7I4UUPWw6zJeWY2J YN+uQjoIWgb7AdFQ3/NjImMnTKbwo+HCHNUGLsVOw5DgdbaXsI/pNPzAPTJGLPBKQz5y +hD6uO5TAp7ge4wgbSoNvM5zx74vk4olmgc6wX0u5jMYzboKOjOTtSC5SOKExKEIz2kO fdpNiQ5AkYcH8Oypn9HrG1hts6RkHOMLa/8mNHfxAYJDeyrca9ExQvYJrTRR1AFDMQjb yiew== X-Forwarded-Encrypted: i=1; AJvYcCWhtgx2J4HsrcK6PIWCZKNQ0yDBsRwK9CXKFm0muifaLMMK37AeXAXur963oz/uc6S8LrbqAvbkL3a2f7s=@vger.kernel.org X-Gm-Message-State: AOJu0YxgTpWLRSCt+6XCzAcfWbQCqhyIN8GARU9jvjGM4FSO70F6MdbZ wA8HqB1pj9EOWxSIsCUFgmC10VItxcRxDFgDgsdJmyHIwwBmmmcnW8PAacZF4MU= X-Gm-Gg: ASbGncvUsS5QjIhD66pki04BTIpw7VJ+DACJDwQ0K5MRGvDnDJqGOcKCWS6fMwDl21k 5w7Vb9/8NGNbJfuKgZuBTRbT4M0sV8i1nI6NkZ/pbVDO8jweNl3YIyACBS7QKOk+1qLVXXi674K RqVFOTek+Knpms/X5pwWEcCb7H5u/zRwsyl3Njy3097f6iV9mFMjRauCCI/FfM1MpsPwFKwNvXP 8nF3XRd3rzsNl+FYyzrX/NZ0Dusg4QulV113tzOxht9StMabXkvzpP9nmnTQK93RBszrbev2Q/j eS7oW/iLzD6jiBFqLKyiySvT0h9tMt3VjRbIkO9ZR8yqtH/4JO6d X-Google-Smtp-Source: AGHT+IHk3rKIVw3xzN+NcT/1jnN7TTEd2BEkiVLbP8IFN0cXRTvNB5nEIsZoYv+ZdmtXYxpnfUvrZA== X-Received: by 2002:a17:903:1cf:b0:223:2630:6b82 with SMTP id d9443c01a7336-2242887fe22mr25579105ad.10.1741309945056; Thu, 06 Mar 2025 17:12:25 -0800 (PST) Received: from localhost.localdomain ([2620:11a:c019:0:65e:3115:2f58:c5fd]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22410abc816sm18749685ad.258.2025.03.06.17.12.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Mar 2025 17:12:24 -0800 (PST) From: Joe Damato To: netdev@vger.kernel.org Cc: mkarsten@uwaterloo.ca, gerhard@engleder-embedded.com, jasowang@redhat.com, xuanzhuo@linux.alibaba.com, kuba@kernel.org, mst@redhat.com, leiyang@redhat.com, Joe Damato , =?UTF-8?q?Eugenio=20P=C3=A9rez?= , Andrew Lunn , "David S. Miller" , Eric Dumazet , Paolo Abeni , virtualization@lists.linux.dev (open list:VIRTIO CORE AND NET DRIVERS), linux-kernel@vger.kernel.org (open list) Subject: [PATCH net-next v6 3/4] virtio-net: Map NAPIs to queues Date: Fri, 7 Mar 2025 01:12:11 +0000 Message-ID: <20250307011215.266806-4-jdamato@fastly.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250307011215.266806-1-jdamato@fastly.com> References: <20250307011215.266806-1-jdamato@fastly.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" Use netif_queue_set_napi to map NAPIs to queue IDs so that the mapping can be accessed by user apps. Note that the netif_queue_set_napi currently requires RTNL, so care must be taken to ensure RTNL is held on paths where this API might be reached. The paths in the driver where this API can be reached appear to be: - ndo_open, ndo_close, which hold RTNL so no driver change is needed. - rx_pause, rx_resume, tx_pause, tx_resume are reached either via an ethtool ioctl or via XSK - neither path requires a driver change. - power management paths (which call open and close), which have been updated to hold/release RTNL. $ ethtool -i ens4 | grep driver driver: virtio_net $ sudo ethtool -L ens4 combined 4 $ ./tools/net/ynl/pyynl/cli.py \ --spec Documentation/netlink/specs/netdev.yaml \ --dump queue-get --json=3D'{"ifindex": 2}' [{'id': 0, 'ifindex': 2, 'napi-id': 8289, 'type': 'rx'}, {'id': 1, 'ifindex': 2, 'napi-id': 8290, 'type': 'rx'}, {'id': 2, 'ifindex': 2, 'napi-id': 8291, 'type': 'rx'}, {'id': 3, 'ifindex': 2, 'napi-id': 8292, 'type': 'rx'}, {'id': 0, 'ifindex': 2, 'type': 'tx'}, {'id': 1, 'ifindex': 2, 'type': 'tx'}, {'id': 2, 'ifindex': 2, 'type': 'tx'}, {'id': 3, 'ifindex': 2, 'type': 'tx'}] Note that virtio_net has TX-only NAPIs which do not have NAPI IDs, so the lack of 'napi-id' in the above output is expected. Signed-off-by: Joe Damato Reviewed-by: Xuan Zhuo --- drivers/net/virtio_net.c | 40 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index e578885c1093..7bd63a677123 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -2823,13 +2823,18 @@ static void virtnet_napi_do_enable(struct virtqueue= *vq, =20 static void virtnet_napi_enable(struct receive_queue *rq) { + struct virtnet_info *vi =3D rq->vq->vdev->priv; + int qidx =3D vq2rxq(rq->vq); + virtnet_napi_do_enable(rq->vq, &rq->napi); + netif_queue_set_napi(vi->dev, qidx, NETDEV_QUEUE_TYPE_RX, &rq->napi); } =20 static void virtnet_napi_tx_enable(struct send_queue *sq) { struct virtnet_info *vi =3D sq->vq->vdev->priv; struct napi_struct *napi =3D &sq->napi; + int qidx =3D vq2txq(sq->vq); =20 if (!napi->weight) return; @@ -2843,20 +2848,28 @@ static void virtnet_napi_tx_enable(struct send_queu= e *sq) } =20 virtnet_napi_do_enable(sq->vq, napi); + netif_queue_set_napi(vi->dev, qidx, NETDEV_QUEUE_TYPE_TX, napi); } =20 static void virtnet_napi_tx_disable(struct send_queue *sq) { + struct virtnet_info *vi =3D sq->vq->vdev->priv; struct napi_struct *napi =3D &sq->napi; + int qidx =3D vq2txq(sq->vq); =20 - if (napi->weight) + if (napi->weight) { + netif_queue_set_napi(vi->dev, qidx, NETDEV_QUEUE_TYPE_TX, NULL); napi_disable(napi); + } } =20 static void virtnet_napi_disable(struct receive_queue *rq) { + struct virtnet_info *vi =3D rq->vq->vdev->priv; struct napi_struct *napi =3D &rq->napi; + int qidx =3D vq2rxq(rq->vq); =20 + netif_queue_set_napi(vi->dev, qidx, NETDEV_QUEUE_TYPE_RX, NULL); napi_disable(napi); } =20 @@ -2870,9 +2883,23 @@ static void refill_work(struct work_struct *work) for (i =3D 0; i < vi->curr_queue_pairs; i++) { struct receive_queue *rq =3D &vi->rq[i]; =20 - virtnet_napi_disable(rq); + /* + * When queue API support is added in the future and the call + * below becomes napi_disable_locked, this driver will need to + * be refactored. + * + * One possible solution would be to: + * - cancel refill_work with cancel_delayed_work (note: + * non-sync) + * - cancel refill_work with cancel_delayed_work_sync in + * virtnet_remove after the netdev is unregistered + * - wrap all of the work in a lock (perhaps the netdev + * instance lock) + * - check netif_running() and return early to avoid a race + */ + napi_disable(&rq->napi); still_empty =3D !try_fill_recv(vi, rq, GFP_KERNEL); - virtnet_napi_enable(rq); + virtnet_napi_do_enable(rq->vq, &rq->napi); =20 /* In theory, this can happen: if we don't get any buffers in * we will *never* try to fill again. @@ -5650,8 +5677,11 @@ static void virtnet_freeze_down(struct virtio_device= *vdev) netif_tx_lock_bh(vi->dev); netif_device_detach(vi->dev); netif_tx_unlock_bh(vi->dev); - if (netif_running(vi->dev)) + if (netif_running(vi->dev)) { + rtnl_lock(); virtnet_close(vi->dev); + rtnl_unlock(); + } } =20 static int init_vqs(struct virtnet_info *vi); @@ -5671,7 +5701,9 @@ static int virtnet_restore_up(struct virtio_device *v= dev) enable_rx_mode_work(vi); =20 if (netif_running(vi->dev)) { + rtnl_lock(); err =3D virtnet_open(vi->dev); + rtnl_unlock(); if (err) return err; } --=20 2.45.2 From nobody Sun Feb 8 09:03:55 2026 Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) (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 8A772188CB1 for ; Fri, 7 Mar 2025 01:12:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741309949; cv=none; b=YeiXm904IKxZmmOb5hfa0XBtD+4JVzVoRK2AeLZIRmWcLeGrIuyPuhzxhjrRjKVWR/U9w+PyRZ3vkzxXh6O+4akH3kIOKD7+F6FRg55syqOnPD8nU5JIrTvLmgr7bZHoC9+ihJCWf6BhFn/bWVVqlYWs261KIYFE/XEBoXgUiGo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741309949; c=relaxed/simple; bh=NRQvfEmcLOdbXMa3vkDoUqv3L83HRqj8sSJXVTmzeH4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fPOPKrjNLFdFUQECmUFOfmnyR1IZxs/CxCKyHSo1k4pcElf4d7ZlzFzJ1rw0UTWkiP1a2IY4Tpl7gc933js7xnrthVIjDElfbNOZUVP1C56Upxy70DmkwPqKRn0dnB0q3KIfP7KGLf+Hb/setMquwf79XOdUKDrwew8HR4x4Urk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=fastly.com; spf=pass smtp.mailfrom=fastly.com; dkim=pass (1024-bit key) header.d=fastly.com header.i=@fastly.com header.b=IpeKEemI; arc=none smtp.client-ip=209.85.214.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=fastly.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fastly.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=fastly.com header.i=@fastly.com header.b="IpeKEemI" Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-2234e5347e2so24927975ad.1 for ; Thu, 06 Mar 2025 17:12:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fastly.com; s=google; t=1741309947; x=1741914747; 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=UXXMV7POf8zFLVgsmU4lqm240SOUGeBUlbPBBPUwDdE=; b=IpeKEemISXj8LM8F4+azipgqCDQIoWZO3WOO9dCpSsKymcU3CsKSadAZb3s8CpYxgj TUKz2BFrJsF9riuu69GT7d7YaurN0owT2jm4+Rb/MklWggf4fCc61SUL4lJ4sYgFa5UU zna0omr+SSTI9fp0JOJPRAsyH1vmOhh6kJZOY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741309947; x=1741914747; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=UXXMV7POf8zFLVgsmU4lqm240SOUGeBUlbPBBPUwDdE=; b=uCXYtj5JtjXWyJwaRCkFu97zniBIQvXBOTBF4leQIGHyNPeDSwXMBueArqCMbRsaD6 T1vLNJG03QUPpC9CEQ0x7wVNcY2e9kDf2AGPm66JotCLmGPhRC9IyNh4a+W6y+NVp/ah QdJv7F7Cd7lIWZqqYVPE0A3gP+Q6VkOiIS7Au9gZlJtqt6WeNQUKsROFuah/hCRUdfw4 M7FTSZGmvrJ04OkWVz0JZqhC+HF77LdZM1tXlU5YvYh5VSvmb3VymGM73/BpBKjX96s3 l+lf5pftiWaK4uAubYElR3+5pMdCQK+1cqb+g5Pw/c3UKILN9i6GsNP+kwEpwxGWHa2l TMxg== X-Forwarded-Encrypted: i=1; AJvYcCXv4IR84eNK7vOM7fA7Nn/qybZsoCYAf4kRNgcoB5PSBUIQktRBDsixjbfYln2XosGyOmv+LXw7s8levhQ=@vger.kernel.org X-Gm-Message-State: AOJu0YySoG+0h1Y7UAoayvS9lhMvPpnxR+vq1abISf7a5Gv9345VE9Ec yPJMgByKqWyd792BPyci+HxmEmc9SEwVNQPOtorOABd4MiPzAWT0S0UTQ4D5aCk= X-Gm-Gg: ASbGnctvK7CfB0cExAbKG1zp7YB1woefj7wFEG1Ke/uj876C4MQMDqsE2Og1wmPk+/5 BoHdFIYc7YxHV5ZDMM2mKzOlR2cEprVH5LGVpJc1vaKWzSuI8N+4MpDbeZ0JHcnMJ7fVY3I1Oey nhtvXwdLrQQaC/oLp8M9uSbGn/DTspOQiC13+jJNnbLSdiKphUVaRnPMUHrVKQ9Hm/aja5gTFVc 39WS3Iunw00upG55rnBCxOCAnQ6c/3SnQRMpMSCP27O4Smx2whdPKSe1TPvib21n6xf3NpAnjZC nZEfgn57WH40sky6q8pTa7hNEHu2cLmwsZBMtEq2XhO9t4zuB1gF X-Google-Smtp-Source: AGHT+IFK3bB+IzKnnw66OCX8SvIqCP/r2HrOrRFyFYXEFX5hk5hRRIZRcJqImQVh7tFSujAdQgGJ9A== X-Received: by 2002:a17:903:32c6:b0:224:13c0:58e3 with SMTP id d9443c01a7336-22428bf1976mr19677025ad.51.1741309946772; Thu, 06 Mar 2025 17:12:26 -0800 (PST) Received: from localhost.localdomain ([2620:11a:c019:0:65e:3115:2f58:c5fd]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22410abc816sm18749685ad.258.2025.03.06.17.12.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Mar 2025 17:12:26 -0800 (PST) From: Joe Damato To: netdev@vger.kernel.org Cc: mkarsten@uwaterloo.ca, gerhard@engleder-embedded.com, jasowang@redhat.com, xuanzhuo@linux.alibaba.com, kuba@kernel.org, mst@redhat.com, leiyang@redhat.com, Joe Damato , =?UTF-8?q?Eugenio=20P=C3=A9rez?= , Andrew Lunn , "David S. Miller" , Eric Dumazet , Paolo Abeni , virtualization@lists.linux.dev (open list:VIRTIO CORE AND NET DRIVERS), linux-kernel@vger.kernel.org (open list) Subject: [PATCH net-next v6 4/4] virtio_net: Use persistent NAPI config Date: Fri, 7 Mar 2025 01:12:12 +0000 Message-ID: <20250307011215.266806-5-jdamato@fastly.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250307011215.266806-1-jdamato@fastly.com> References: <20250307011215.266806-1-jdamato@fastly.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" Use persistent NAPI config so that NAPI IDs are not renumbered as queue counts change. $ sudo ethtool -l ens4 | tail -5 | egrep -i '(current|combined)' Current hardware settings: Combined: 4 $ ./tools/net/ynl/pyynl/cli.py \ --spec Documentation/netlink/specs/netdev.yaml \ --dump queue-get --json=3D'{"ifindex": 2}' [{'id': 0, 'ifindex': 2, 'napi-id': 8193, 'type': 'rx'}, {'id': 1, 'ifindex': 2, 'napi-id': 8194, 'type': 'rx'}, {'id': 2, 'ifindex': 2, 'napi-id': 8195, 'type': 'rx'}, {'id': 3, 'ifindex': 2, 'napi-id': 8196, 'type': 'rx'}, {'id': 0, 'ifindex': 2, 'type': 'tx'}, {'id': 1, 'ifindex': 2, 'type': 'tx'}, {'id': 2, 'ifindex': 2, 'type': 'tx'}, {'id': 3, 'ifindex': 2, 'type': 'tx'}] Now adjust the queue count, note that the NAPI IDs are not renumbered: $ sudo ethtool -L ens4 combined 1 $ ./tools/net/ynl/pyynl/cli.py \ --spec Documentation/netlink/specs/netdev.yaml \ --dump queue-get --json=3D'{"ifindex": 2}' [{'id': 0, 'ifindex': 2, 'napi-id': 8193, 'type': 'rx'}, {'id': 0, 'ifindex': 2, 'type': 'tx'}] $ sudo ethtool -L ens4 combined 8 $ ./tools/net/ynl/pyynl/cli.py \ --spec Documentation/netlink/specs/netdev.yaml \ --dump queue-get --json=3D'{"ifindex": 2}' [{'id': 0, 'ifindex': 2, 'napi-id': 8193, 'type': 'rx'}, {'id': 1, 'ifindex': 2, 'napi-id': 8194, 'type': 'rx'}, {'id': 2, 'ifindex': 2, 'napi-id': 8195, 'type': 'rx'}, {'id': 3, 'ifindex': 2, 'napi-id': 8196, 'type': 'rx'}, {'id': 4, 'ifindex': 2, 'napi-id': 8197, 'type': 'rx'}, {'id': 5, 'ifindex': 2, 'napi-id': 8198, 'type': 'rx'}, {'id': 6, 'ifindex': 2, 'napi-id': 8199, 'type': 'rx'}, {'id': 7, 'ifindex': 2, 'napi-id': 8200, 'type': 'rx'}, [...] Signed-off-by: Joe Damato Reviewed-by: Xuan Zhuo Reviewed-by: Gerhard Engleder Acked-by: Jason Wang Acked-by: Michael S. Tsirkin Tested-by: Lei Yang --- drivers/net/virtio_net.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index 7bd63a677123..34cec2b11b74 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -6455,8 +6455,9 @@ static int virtnet_alloc_queues(struct virtnet_info *= vi) INIT_DELAYED_WORK(&vi->refill, refill_work); for (i =3D 0; i < vi->max_queue_pairs; i++) { vi->rq[i].pages =3D NULL; - netif_napi_add_weight(vi->dev, &vi->rq[i].napi, virtnet_poll, - napi_weight); + netif_napi_add_config(vi->dev, &vi->rq[i].napi, virtnet_poll, + i); + vi->rq[i].napi.weight =3D napi_weight; netif_napi_add_tx_weight(vi->dev, &vi->sq[i].napi, virtnet_poll_tx, napi_tx ? napi_weight : 0); --=20 2.45.2