From patchwork Mon Feb 10 09:19:35 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kurt Kanzenbach X-Patchwork-Id: 13967514 X-Patchwork-Delegate: kuba@kernel.org Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D492E18CC1D for ; Mon, 10 Feb 2025 09:19:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.142.43.55 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739179182; cv=none; b=BdI+pCj61tlVbN6S/jpdTjZ0F9m3yKnYKCvNrLnZbBdVg+7aU6Bb7bPu5cOatzVLMTb55fFZG76ONJv6Nkwn/K58OQpztC6NxGtZK7p7Z6TyAuLG0lM4zQmQN0dknveeWf6AKqftoaABqKoTJipHekl1FMneyqaPQr4anIyVwYE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739179182; c=relaxed/simple; bh=F2p1ou/0AZv/PcbfHKVSZ8R2rxDMMGbcUOBFLhTwoJM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=HQcK+YRW4zUkQzP9dvuEAY5Qd9L+FYamrwfGMytRLZSYgqyAL9Km95ZSybEN/xKl6lvLZhVz7NkravaF40hYJM1Se3s/8HJujpS4u1nATbxiQyYbtHI6LWTVSUYinXtQOzp7brEIZ0qeTDV5CErlXgvVfpeo87v9/iRWxsI/y6E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de; spf=pass smtp.mailfrom=linutronix.de; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=GNvY3PqR; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=SJY9C6Ea; arc=none smtp.client-ip=193.142.43.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="GNvY3PqR"; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="SJY9C6Ea" From: Kurt Kanzenbach DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1739179178; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=7JkT/vU1zpbrf6oZbGOWeLDS5qg6c+tSDS6gec3w7LM=; b=GNvY3PqRQJdMDpy8MZT/0WrDZprpJ6y6jktMscLRYEGjWM7zIGYRjF2cBHiRGp6qD4yruD kjMp8WINzffTu2m7PYvGjjS2CdQsBjfFfquafG1ralrm0hsJE/O0C3ACJ8HXO8adCP3c4L AsRM5UPknTbRdcxlAdFKhFoZlNYsxioNRW7LB0ragrrUaQHO96BgCzKP2gm/pUp7+UkHM/ UJvSh7bdS2rQ+HG4NmuEiyVH4OAyt0PSoamjc5zNhqdAG6rQnnnglKC9f1rotjvS0LFNDP wkn2rAS2RWD/lQGr9EfmWSU/xY84yZsKt52Bwv6ZbcLrON4ryMCfKH3LudGV1Q== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1739179178; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=7JkT/vU1zpbrf6oZbGOWeLDS5qg6c+tSDS6gec3w7LM=; b=SJY9C6Ea3o3P54PGX+qMXJd1milifVdLaGhKvp59pN/Nkv7mGMBRKAd+dmhTC2DkMuTvkV w+N2GrfkPyk5HaBg== Date: Mon, 10 Feb 2025 10:19:35 +0100 Subject: [PATCH 1/3] igb: Link IRQs to NAPI instances Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250210-igb_irq-v1-1-bde078cdb9df@linutronix.de> References: <20250210-igb_irq-v1-0-bde078cdb9df@linutronix.de> In-Reply-To: <20250210-igb_irq-v1-0-bde078cdb9df@linutronix.de> To: Tony Nguyen , Przemek Kitszel Cc: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Sebastian Andrzej Siewior , Joe Damato , intel-wired-lan@lists.osuosl.org, netdev@vger.kernel.org, Kurt Kanzenbach X-Developer-Signature: v=1; a=openpgp-sha256; l=1966; i=kurt@linutronix.de; h=from:subject:message-id; bh=F2p1ou/0AZv/PcbfHKVSZ8R2rxDMMGbcUOBFLhTwoJM=; b=owEBbQKS/ZANAwAKAcGT0fKqRnOCAcsmYgBnqcSoRQ1vVIRYPr5dIdQOzLyrgzcd0/yzueF1p u5qsDQ9tCGJAjMEAAEKAB0WIQS8ub+yyMN909/bWZLBk9HyqkZzggUCZ6nEqAAKCRDBk9HyqkZz glwcD/41sGbRzUy5VSMOm2bmD00F/sUcWmbRbFGp19eYq9TPUz8r4s4g9q66DvuHHobDnzjAvc3 99ASA9Ls5izWcXl3jW26Si3/Bl9EvBYBc0HPit2N7QdkA9WMUUp5benWQe5JixWJGH3idBc2D1b bQmGNvVHVdYQomc2NhMniN77gDRjtPJCLJFv7kGT3m0vMBfSPLJau3a6wVDArSYCZJWuhGkMqnI w+mrYR+NpidrLflirvLbvJ+rDKzrTSRLcEsWeNIyFjEYJi5iKfPbKkHMq/qnUsY90WRF2YLt9E9 c6T4Pr0i61W/Q69QmyIwX4RGZ71Z5ScqCrZC9aBjD443qOCgo+cMBwHusf9+K/f2ACgibgL/u+H YuLlwxVVbG0T2BxGCDBQ03oRt/FrwjQq5gASMa4iswQ3BPDTQiMM2V4CRPvtxvzpIfpGCCg8sQe 1fCh/m8oViL7siTAjqrfmmp4rVngMocwz3OTbG+qiRqFOCOMDusK0QRjLbecgec2Eny/EEf022H Yyh59FtysK0hZv2jXZAiMcSrKBYYjiAgSn45/RhT/iL/njOTq0JChHSp5WCP2qUno6fu30EP25a YzJ351aWlJlNMM9TrQ7OXx0tVfHtap/3hSDJoJdo1zvyp3F5Dd/uTbbwYFLkjnRs4ds5OMrGx+c n5h6g/iXpIsuqTQ== X-Developer-Key: i=kurt@linutronix.de; a=openpgp; fpr=BCB9BFB2C8C37DD3DFDB5992C193D1F2AA467382 X-Patchwork-Delegate: kuba@kernel.org Link IRQs to NAPI instances via netdev-genl API. This allows users to query that information via netlink: |$ ./tools/net/ynl/pyynl/cli.py --spec Documentation/netlink/specs/netdev.yaml \ | --dump napi-get --json='{"ifindex": 2}' |[{'defer-hard-irqs': 0, | 'gro-flush-timeout': 0, | 'id': 8204, | 'ifindex': 2, | 'irq': 127, | 'irq-suspend-timeout': 0}, | {'defer-hard-irqs': 0, | 'gro-flush-timeout': 0, | 'id': 8203, | 'ifindex': 2, | 'irq': 126, | 'irq-suspend-timeout': 0}, | {'defer-hard-irqs': 0, | 'gro-flush-timeout': 0, | 'id': 8202, | 'ifindex': 2, | 'irq': 125, | 'irq-suspend-timeout': 0}, | {'defer-hard-irqs': 0, | 'gro-flush-timeout': 0, | 'id': 8201, | 'ifindex': 2, | 'irq': 124, | 'irq-suspend-timeout': 0}] |$ cat /proc/interrupts | grep enp2s0 |123: 0 1 IR-PCI-MSIX-0000:02:00.0 0-edge enp2s0 |124: 0 7 IR-PCI-MSIX-0000:02:00.0 1-edge enp2s0-TxRx-0 |125: 0 0 IR-PCI-MSIX-0000:02:00.0 2-edge enp2s0-TxRx-1 |126: 0 5 IR-PCI-MSIX-0000:02:00.0 3-edge enp2s0-TxRx-2 |127: 0 0 IR-PCI-MSIX-0000:02:00.0 4-edge enp2s0-TxRx-3 Signed-off-by: Kurt Kanzenbach Reviewed-by: Joe Damato --- drivers/net/ethernet/intel/igb/igb_main.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c index d368b753a4675d01b5dfa50dee4cd218e6a5e14b..d4128d19cc08f62f95682069bb5ed9b8bbbf10cb 100644 --- a/drivers/net/ethernet/intel/igb/igb_main.c +++ b/drivers/net/ethernet/intel/igb/igb_main.c @@ -947,6 +947,9 @@ static int igb_request_msix(struct igb_adapter *adapter) q_vector); if (err) goto err_free; + + netif_napi_set_irq(&q_vector->napi, + adapter->msix_entries[vector].vector); } igb_configure_msix(adapter); From patchwork Mon Feb 10 09:19:36 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kurt Kanzenbach X-Patchwork-Id: 13967515 X-Patchwork-Delegate: kuba@kernel.org Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 35A50191F6A for ; Mon, 10 Feb 2025 09:19:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.142.43.55 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739179183; cv=none; b=n0QLm4hJ/Cyn4iMaJsdUqS1av8/6Rvn4fV0n2p3HGO3DDf3vi0aflnheRZXMjnfbjreqVfhuaMeLt9t1rnV5JIEqMe7JX2/SJHuP4OpGY1Nsj4Y6pS0PnUzCKZta40gk3XVY7iEeZIAWFBdgdoTJSZpad8vLHYGvQ0hmgnSJLjQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739179183; c=relaxed/simple; bh=GkL9JSy5P6ljwAKvYg4VCY34kYgT09FHVA/8EkZR1fA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=GpqMZMVPhJ5yT0aYW4xHoLkLVmvAFD1S51yUqHk9gDzT0igd5wvKZArNlAopgX7L74W3kSv+VuCtJqWVSmhQdCbTEzbsWtl50kCeZqqVEo/Au649ugSiNpsKMs0RORiEhyslqq3HwmXCAbTyb1eNM2VCtXJY4dgVBDT5CYxAyio= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de; spf=pass smtp.mailfrom=linutronix.de; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=cZTPujqF; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=dKnLQ76z; arc=none smtp.client-ip=193.142.43.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="cZTPujqF"; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="dKnLQ76z" From: Kurt Kanzenbach DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1739179179; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=CTueP0CB24DUI+7ynpx3qPFeZE3/S9ux0KKHBNbMtDo=; b=cZTPujqFUX3zOt8Zs/a1SFUO5wSwABMLv+Pid2EtFA2FKAVb+Tog+h/QrnXc9ED0LR5x1R mRJTxo2bFmQ1ucUnNw8v0AP6bRtMviBw6RShlCWNE/Raw9o8uo35NNVLzmbU/U5W7GjSX9 RBEYDDV7wNS42K7frWrxqa0XIjjvI/gB7ZNzFIS40ec6d8mbMHTWDPoJJ1twZuePEEXH/H 3f3mTclHJPYNcfsT2/TCASknF8jJaaDRfblasr2g4No5F/aQPFXQSi+MbeA2wJ3nTflKww QnxF/iD8SwdKjoDOrRLZTPtKLJxGZwFZca9d6musAS2ELsnid2QpZieRLgVBpw== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1739179179; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=CTueP0CB24DUI+7ynpx3qPFeZE3/S9ux0KKHBNbMtDo=; b=dKnLQ76z5LE2wa6aSUOwyQuaai4rhvwzTcrfrL+Z21nwREE+8FGYaCHDIxOEn2fbwgODZl Rg76lFmr5NmaHmCw== Date: Mon, 10 Feb 2025 10:19:36 +0100 Subject: [PATCH 2/3] igb: Link queues to NAPI instances Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250210-igb_irq-v1-2-bde078cdb9df@linutronix.de> References: <20250210-igb_irq-v1-0-bde078cdb9df@linutronix.de> In-Reply-To: <20250210-igb_irq-v1-0-bde078cdb9df@linutronix.de> To: Tony Nguyen , Przemek Kitszel Cc: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Sebastian Andrzej Siewior , Joe Damato , intel-wired-lan@lists.osuosl.org, netdev@vger.kernel.org, Kurt Kanzenbach X-Developer-Signature: v=1; a=openpgp-sha256; l=5606; i=kurt@linutronix.de; h=from:subject:message-id; bh=GkL9JSy5P6ljwAKvYg4VCY34kYgT09FHVA/8EkZR1fA=; b=owEBbQKS/ZANAwAKAcGT0fKqRnOCAcsmYgBnqcSp4w62jUSR7lSpkUzz8ZWq7LAKJnexE7C/6 kWn3wZlrYCJAjMEAAEKAB0WIQS8ub+yyMN909/bWZLBk9HyqkZzggUCZ6nEqQAKCRDBk9HyqkZz gr4QEACT4DKCoC8+wj6OEqHagA0VxAvb+8Ca5Wil53Rw3eCK9zBIfwETQTdBnWqZIiS59Rr4lET T95tBl5GiVB2ilO80RdAcfhGLsZN/OmbO1mdFSQNXHMNh2m4bLvATWNhxkf7VfS5ft4BaYVJMFt 1qJCB3WX2GR3VL9KAmdLQ6YPo2/P3PnWOit9lyO9MAzNt5RW+++Z8r+Dh0YLWhawr8L3D7FOPSy gFDYp6LapEkSuJOXne8LI1OLrY429gNHcVQcghSU2kLFz3BD0ToZQx01fXdjV/ymSCZbrlzBSSE spigMWKa/07pRBJ9JJ42tYvkcs+hV1FOfjbFNNVitXFA5nhx75gg+Bk3MttiO2DhCy0vOGcAkQj Jnf8/sZ3JyBRO6r99sMfO5yg6liQgeRjVAi1aSw2iVpkZqM6b7RSReRojmHGwQaOWjKbxGtzRqi reYUMQ7RV81QKXFq1hOifjWGig5CYy+BblSyZJWeM7wsPhBvqHiHgpaQhIoBqRIt6MPvCpOzWQl gqnrLVhmnSNWKcfpIAASJ/Pr8sDlhDRHWzDusl9yQZpRTX8c/3WGuYv53Y/IuBx7hfI0pN4e3SO 3RgWd1KBmUPSyd/ipSPPL4TKVGbeFAwDRbAjSOHX/qaQThzz8xqf9z5nI0oBeixandk4F2Hth5i nRYIzzZVd41dfkw== X-Developer-Key: i=kurt@linutronix.de; a=openpgp; fpr=BCB9BFB2C8C37DD3DFDB5992C193D1F2AA467382 X-Patchwork-Delegate: kuba@kernel.org Link queues to NAPI instances via netdev-genl API. This is required to use XDP/ZC busy polling. See commit 5ef44b3cb43b ("xsk: Bring back busy polling support") for details. This also allows users to query the info with netlink: |$ ./tools/net/ynl/pyynl/cli.py --spec Documentation/netlink/specs/netdev.yaml \ | --dump queue-get --json='{"ifindex": 2}' |[{'id': 0, 'ifindex': 2, 'napi-id': 8201, 'type': 'rx'}, | {'id': 1, 'ifindex': 2, 'napi-id': 8202, 'type': 'rx'}, | {'id': 2, 'ifindex': 2, 'napi-id': 8203, 'type': 'rx'}, | {'id': 3, 'ifindex': 2, 'napi-id': 8204, 'type': 'rx'}, | {'id': 0, 'ifindex': 2, 'napi-id': 8201, 'type': 'tx'}, | {'id': 1, 'ifindex': 2, 'napi-id': 8202, 'type': 'tx'}, | {'id': 2, 'ifindex': 2, 'napi-id': 8203, 'type': 'tx'}, | {'id': 3, 'ifindex': 2, 'napi-id': 8204, 'type': 'tx'}] While at __igb_open() use RCT coding style. Signed-off-by: Kurt Kanzenbach --- drivers/net/ethernet/intel/igb/igb.h | 2 ++ drivers/net/ethernet/intel/igb/igb_main.c | 35 ++++++++++++++++++++++++++----- drivers/net/ethernet/intel/igb/igb_xsk.c | 2 ++ 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/drivers/net/ethernet/intel/igb/igb.h b/drivers/net/ethernet/intel/igb/igb.h index 02f340280d20a6f7e32bbd3dfcbb9c1c7b4c6662..79eca385a751bfdafdf384928b6cc1b350b22560 100644 --- a/drivers/net/ethernet/intel/igb/igb.h +++ b/drivers/net/ethernet/intel/igb/igb.h @@ -722,6 +722,8 @@ enum igb_boards { extern char igb_driver_name[]; +void igb_set_queue_napi(struct igb_adapter *adapter, int q_idx, + struct napi_struct *napi); int igb_xmit_xdp_ring(struct igb_adapter *adapter, struct igb_ring *ring, struct xdp_frame *xdpf); diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c index d4128d19cc08f62f95682069bb5ed9b8bbbf10cb..8e964484f4c9854e4e3e0b4f3e8785fe93bd1207 100644 --- a/drivers/net/ethernet/intel/igb/igb_main.c +++ b/drivers/net/ethernet/intel/igb/igb_main.c @@ -2099,6 +2099,22 @@ static void igb_check_swap_media(struct igb_adapter *adapter) wr32(E1000_CTRL_EXT, ctrl_ext); } +void igb_set_queue_napi(struct igb_adapter *adapter, int vector, + struct napi_struct *napi) +{ + struct igb_q_vector *q_vector = adapter->q_vector[vector]; + + if (q_vector->rx.ring) + netif_queue_set_napi(adapter->netdev, + q_vector->rx.ring->queue_index, + NETDEV_QUEUE_TYPE_RX, napi); + + if (q_vector->tx.ring) + netif_queue_set_napi(adapter->netdev, + q_vector->tx.ring->queue_index, + NETDEV_QUEUE_TYPE_TX, napi); +} + /** * igb_up - Open the interface and prepare it to handle traffic * @adapter: board private structure @@ -2106,6 +2122,7 @@ static void igb_check_swap_media(struct igb_adapter *adapter) int igb_up(struct igb_adapter *adapter) { struct e1000_hw *hw = &adapter->hw; + struct napi_struct *napi; int i; /* hardware has been reset, we need to reload some things */ @@ -2113,8 +2130,11 @@ int igb_up(struct igb_adapter *adapter) clear_bit(__IGB_DOWN, &adapter->state); - for (i = 0; i < adapter->num_q_vectors; i++) - napi_enable(&(adapter->q_vector[i]->napi)); + for (i = 0; i < adapter->num_q_vectors; i++) { + napi = &adapter->q_vector[i]->napi; + napi_enable(napi); + igb_set_queue_napi(adapter, i, napi); + } if (adapter->flags & IGB_FLAG_HAS_MSIX) igb_configure_msix(adapter); @@ -2184,6 +2204,7 @@ void igb_down(struct igb_adapter *adapter) for (i = 0; i < adapter->num_q_vectors; i++) { if (adapter->q_vector[i]) { napi_synchronize(&adapter->q_vector[i]->napi); + igb_set_queue_napi(adapter, i, NULL); napi_disable(&adapter->q_vector[i]->napi); } } @@ -4116,8 +4137,9 @@ static int igb_sw_init(struct igb_adapter *adapter) static int __igb_open(struct net_device *netdev, bool resuming) { struct igb_adapter *adapter = netdev_priv(netdev); - struct e1000_hw *hw = &adapter->hw; struct pci_dev *pdev = adapter->pdev; + struct e1000_hw *hw = &adapter->hw; + struct napi_struct *napi; int err; int i; @@ -4169,8 +4191,11 @@ static int __igb_open(struct net_device *netdev, bool resuming) /* From here on the code is the same as igb_up() */ clear_bit(__IGB_DOWN, &adapter->state); - for (i = 0; i < adapter->num_q_vectors; i++) - napi_enable(&(adapter->q_vector[i]->napi)); + for (i = 0; i < adapter->num_q_vectors; i++) { + napi = &adapter->q_vector[i]->napi; + napi_enable(napi); + igb_set_queue_napi(adapter, i, napi); + } /* Clear any pending interrupts. */ rd32(E1000_TSICR); diff --git a/drivers/net/ethernet/intel/igb/igb_xsk.c b/drivers/net/ethernet/intel/igb/igb_xsk.c index 157d43787fa0b55a74714f69e9e7903b695fcf0a..a5ad090dfe94b6afc8194fe39d28cdd51c7067b0 100644 --- a/drivers/net/ethernet/intel/igb/igb_xsk.c +++ b/drivers/net/ethernet/intel/igb/igb_xsk.c @@ -45,6 +45,7 @@ static void igb_txrx_ring_disable(struct igb_adapter *adapter, u16 qid) synchronize_net(); /* Rx/Tx share the same napi context. */ + igb_set_queue_napi(adapter, qid, NULL); napi_disable(&rx_ring->q_vector->napi); igb_clean_tx_ring(tx_ring); @@ -78,6 +79,7 @@ static void igb_txrx_ring_enable(struct igb_adapter *adapter, u16 qid) /* Rx/Tx share the same napi context. */ napi_enable(&rx_ring->q_vector->napi); + igb_set_queue_napi(adapter, qid, &rx_ring->q_vector->napi); } struct xsk_buff_pool *igb_xsk_pool(struct igb_adapter *adapter, From patchwork Mon Feb 10 09:19:37 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kurt Kanzenbach X-Patchwork-Id: 13967516 X-Patchwork-Delegate: kuba@kernel.org Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EA7241C1F08 for ; Mon, 10 Feb 2025 09:19:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.142.43.55 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739179184; cv=none; b=bIvb2bCI98UZDxV5+5zL90sN6d7dv3z9jGnv5rQKrORJ/EhWM8KXd52rQQM+nY9RwiS4geJRiHUt91qzraxcJG7OU4jlijtN/mhKO7NTARz02y4hzmcrGpXripg4vw+XTaldf+1a5PMkL8aMpzQX9v23JKH+Fkf8Mrsvx+Ax3WE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739179184; c=relaxed/simple; bh=cHDFtWtcVIJmeBQmyGr9ZowSzZ+BaH37t6BU0DGMi+U=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=j8PIaER8tL6wS0TlnUXPEyk8DQtup7+0c1ubLO47cKgnkrbqeit3KKx5AGugSQpLczH8IuRHHp2rhO/sVFmJkKW5m+HTChtt3FrbU7IxU5jgq0r/BvHmsEOtQJHwWdfJJKzhZ/qvEssrCAusHb86Po6CM7fXsJ9VyIat6kGB0GA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de; spf=pass smtp.mailfrom=linutronix.de; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=Nj7HLdYy; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=d8GORrcg; arc=none smtp.client-ip=193.142.43.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="Nj7HLdYy"; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="d8GORrcg" From: Kurt Kanzenbach DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1739179180; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=UWLliSMAkm07uTsXCRIauclvo1uxcCFEJNaANaMWylk=; b=Nj7HLdYy2PF4Xx5N11DO2W8BKmfswh57eze41qg4UEllrKf5CgckbA0FhvOFKRtteV+tAR WSi2Zf54pRjEtooWPfboUNclkLMe+koQFtKFs5djFevrhb1kOEjfU10D6rACe6e1gHRVTD g2rtMtkKYwOT/tfY6/jbWlDl/c17/9o9y0yh9GBIGgBDl5C/GPwvPRUEDD1eSe0Dgw7Nu9 vJJxC8b3q5o6xTkGCXVlyI7xMiE/1iGZkCJ/hxbBlJIB6iQlpb1rkfmo3o+zKVIKIBZH1O /EjY9spnkk2mjaC/kEDgJpRVCcs5GqAZ1YOVSjffEyYT33vHAVdTTttBUX8KCg== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1739179180; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=UWLliSMAkm07uTsXCRIauclvo1uxcCFEJNaANaMWylk=; b=d8GORrcgBgdV4oJDBuQSd9QEZAGtIwICnAECYUpUgVCVGmkQTiN2OQHbwq7HAGgJ2zNMSj i7BE+Jdv3kuEzDDQ== Date: Mon, 10 Feb 2025 10:19:37 +0100 Subject: [PATCH 3/3] igb: Get rid of spurious interrupts Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250210-igb_irq-v1-3-bde078cdb9df@linutronix.de> References: <20250210-igb_irq-v1-0-bde078cdb9df@linutronix.de> In-Reply-To: <20250210-igb_irq-v1-0-bde078cdb9df@linutronix.de> To: Tony Nguyen , Przemek Kitszel Cc: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Sebastian Andrzej Siewior , Joe Damato , intel-wired-lan@lists.osuosl.org, netdev@vger.kernel.org, Kurt Kanzenbach X-Developer-Signature: v=1; a=openpgp-sha256; l=4735; i=kurt@linutronix.de; h=from:subject:message-id; bh=cHDFtWtcVIJmeBQmyGr9ZowSzZ+BaH37t6BU0DGMi+U=; b=owEBbQKS/ZANAwAKAcGT0fKqRnOCAcsmYgBnqcSpDkTg21WicGwPg1F/pt6F/EBmvQNsf/zRz El80wL+j6WJAjMEAAEKAB0WIQS8ub+yyMN909/bWZLBk9HyqkZzggUCZ6nEqQAKCRDBk9HyqkZz gtoAD/9D2QmWRwv9O+ByoWXz+a6xRuNMqcpThjRb+w0b7NGv0Q4R2qzVXX51i00+5a2uVmKY8Nl Gb6mmA6XPweOnMzd18SFDjr3xrhdyU+H+UE8Fbg8R8I3t7nk8r5L1BaVtcTgwFsiyfkHnYX+Du/ vUrfSEJAN2DgCdfFWSLM2QhiB4I4uyOREgVKlVB7HiH91QFfUAn1gtP5pFGq4DfTueeDqiVB4ry GDoIMGgnwvLvNHU6Z8+MPZmHGVb+jBdNodmfEAcDvyodhN+2FloToJZ0iLfrki9OzNxCCgsiK8N iu/480zelJwkytUNuLED4KDQxz368NThE26k6bnL/BBuqXrNzC9Bgs7AG4Gt+sCc1mYQ6kVlIFT Pvyt2f6jAKLIfN3cyLqMWZXppxBQLfomxRzlyNw9RXubUoLFFIiYiHCuKh5pp17NG/9PPv32pyP FhVn1py+zdwVECznFaIkICpVp05Yqypx0FmoK5CxPpp/HN4kvaoyD5llyXZm+FE66i0v7HUTcTW TDf5i6bgtMuZSyjt/6hA/dIbmO27rhIhToORBEdjFunEL0II8G1PFqi+a84kzNgPOEmB8/C4GE/ MXRwhid09VD7y+Oj6s2MOUtvi3cr8wbh65WzAsTV9jU4ZeCwe8VxSfl8F1jZrvwQkkARAa7Rbf+ tQYjTLBlgjzIshw== X-Developer-Key: i=kurt@linutronix.de; a=openpgp; fpr=BCB9BFB2C8C37DD3DFDB5992C193D1F2AA467382 X-Patchwork-Delegate: kuba@kernel.org When running the igc with XDP/ZC in busy polling mode with deferral of hard interrupts, interrupts still happen from time to time. That is caused by the igc task watchdog which triggers Rx interrupts periodically. That mechanism has been introduced to overcome skb/memory allocation failures [1]. So the Rx clean functions stop processing the Rx ring in case of such failure. The task watchdog triggers Rx interrupts periodically in the hope that memory became available in the mean time. The current behavior is undesirable for real time applications, because the driver induced Rx interrupts trigger also the softirq processing. However, all real time packets should be processed by the application which uses the busy polling method. Therefore, only trigger the Rx interrupts in case of real allocation failures. Introduce a new flag for signaling that condition. Follow the same logic as in commit 8dcf2c212078 ("igc: Get rid of spurious interrupts"). [1] - https://git.kernel.org/pub/scm/linux/kernel/git/tglx/history.git/commit/?id=3be507547e6177e5c808544bd6a2efa2c7f1d436 Signed-off-by: Kurt Kanzenbach Reviewed-by: Joe Damato --- drivers/net/ethernet/intel/igb/igb.h | 3 ++- drivers/net/ethernet/intel/igb/igb_main.c | 29 +++++++++++++++++++++++++---- drivers/net/ethernet/intel/igb/igb_xsk.c | 1 + 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/drivers/net/ethernet/intel/igb/igb.h b/drivers/net/ethernet/intel/igb/igb.h index 79eca385a751bfdafdf384928b6cc1b350b22560..f34ead8243e9f0176a068299138c5c16f7faab2e 100644 --- a/drivers/net/ethernet/intel/igb/igb.h +++ b/drivers/net/ethernet/intel/igb/igb.h @@ -391,7 +391,8 @@ enum e1000_ring_flags_t { IGB_RING_FLAG_RX_LB_VLAN_BSWAP, IGB_RING_FLAG_TX_CTX_IDX, IGB_RING_FLAG_TX_DETECT_HANG, - IGB_RING_FLAG_TX_DISABLED + IGB_RING_FLAG_TX_DISABLED, + IGB_RING_FLAG_RX_ALLOC_FAILED, }; #define ring_uses_large_buffer(ring) \ diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c index 8e964484f4c9854e4e3e0b4f3e8785fe93bd1207..96da3e2ddc9a67f799ee55d9621d98f80a6b449c 100644 --- a/drivers/net/ethernet/intel/igb/igb_main.c +++ b/drivers/net/ethernet/intel/igb/igb_main.c @@ -5754,11 +5754,29 @@ static void igb_watchdog_task(struct work_struct *work) if (adapter->flags & IGB_FLAG_HAS_MSIX) { u32 eics = 0; - for (i = 0; i < adapter->num_q_vectors; i++) - eics |= adapter->q_vector[i]->eims_value; - wr32(E1000_EICS, eics); + for (i = 0; i < adapter->num_q_vectors; i++) { + struct igb_q_vector *q_vector = adapter->q_vector[i]; + struct igb_ring *rx_ring; + + if (!q_vector->rx.ring) + continue; + + rx_ring = adapter->rx_ring[q_vector->rx.ring->queue_index]; + + if (test_bit(IGB_RING_FLAG_RX_ALLOC_FAILED, &rx_ring->flags)) { + eics |= q_vector->eims_value; + clear_bit(IGB_RING_FLAG_RX_ALLOC_FAILED, &rx_ring->flags); + } + } + if (eics) + wr32(E1000_EICS, eics); } else { - wr32(E1000_ICS, E1000_ICS_RXDMT0); + struct igb_ring *rx_ring = adapter->rx_ring[0]; + + if (test_bit(IGB_RING_FLAG_RX_ALLOC_FAILED, &rx_ring->flags)) { + clear_bit(IGB_RING_FLAG_RX_ALLOC_FAILED, &rx_ring->flags); + wr32(E1000_ICS, E1000_ICS_RXDMT0); + } } igb_spoof_check(adapter); @@ -9089,6 +9107,7 @@ static int igb_clean_rx_irq(struct igb_q_vector *q_vector, const int budget) if (!xdp_res && !skb) { rx_ring->rx_stats.alloc_failed++; rx_buffer->pagecnt_bias++; + set_bit(IGB_RING_FLAG_RX_ALLOC_FAILED, &rx_ring->flags); break; } @@ -9148,6 +9167,7 @@ static bool igb_alloc_mapped_page(struct igb_ring *rx_ring, page = dev_alloc_pages(igb_rx_pg_order(rx_ring)); if (unlikely(!page)) { rx_ring->rx_stats.alloc_failed++; + set_bit(IGB_RING_FLAG_RX_ALLOC_FAILED, &rx_ring->flags); return false; } @@ -9164,6 +9184,7 @@ static bool igb_alloc_mapped_page(struct igb_ring *rx_ring, __free_pages(page, igb_rx_pg_order(rx_ring)); rx_ring->rx_stats.alloc_failed++; + set_bit(IGB_RING_FLAG_RX_ALLOC_FAILED, &rx_ring->flags); return false; } diff --git a/drivers/net/ethernet/intel/igb/igb_xsk.c b/drivers/net/ethernet/intel/igb/igb_xsk.c index a5ad090dfe94b6afc8194fe39d28cdd51c7067b0..47344ee1ed7f29bd68055485702a87df3b8922e8 100644 --- a/drivers/net/ethernet/intel/igb/igb_xsk.c +++ b/drivers/net/ethernet/intel/igb/igb_xsk.c @@ -417,6 +417,7 @@ int igb_clean_rx_irq_zc(struct igb_q_vector *q_vector, /* exit if we failed to retrieve a buffer */ if (!skb) { rx_ring->rx_stats.alloc_failed++; + set_bit(IGB_RING_FLAG_RX_ALLOC_FAILED, &rx_ring->flags); break; }