ath10k.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [net-next v3 1/5] netdev: replace simple napi_schedule_prep/__napi_schedule to napi_schedule
@ 2023-10-09 13:37 Christian Marangi
  2023-10-09 13:37 ` [net-next v3 2/5] netdev: make napi_schedule return bool on NAPI successful schedule Christian Marangi
                   ` (4 more replies)
  0 siblings, 5 replies; 7+ messages in thread
From: Christian Marangi @ 2023-10-09 13:37 UTC (permalink / raw)
  To: Jason Gunthorpe, Leon Romanovsky, Wolfgang Grandegger,
	Marc Kleine-Budde, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Chris Snook, Raju Rangoju, Jeroen de Borst,
	Praveen Kaligineedi, Shailend Chand, Douglas Miller, Nick Child,
	Michael Ellerman, Nicholas Piggin, Christophe Leroy,
	Haren Myneni, Rick Lindsley, Dany Madden, Thomas Falcon,
	Tariq Toukan, Alexandre Torgue, Jose Abreu, Maxime Coquelin,
	Krzysztof Halasa, Kalle Valo, Jeff Johnson, Gregory Greenman,
	Chandrashekar Devegowda, Intel Corporation, Chiranjeevi Rapolu,
	Liu Haijun, M Chetan Kumar, Ricardo Martinez, Loic Poulain,
	Sergey Ryazanov, Johannes Berg, Christian Marangi, Yuanjun Gong,
	Alex Elder, Bhupesh Sharma, Simon Horman, Rob Herring,
	Bailey Forrest, Junfeng Guo, Gustavo A. R. Silva, Ziwei Xiao,
	Rushil Gupta, Thomas Gleixner, Uwe Kleine-König,
	Krzysztof Kozlowski, Yuri Karpov, Andrew Lunn, Zheng Zengkai,
	Dawei Li, Anjaneyulu, Benjamin Berg, linux-rdma, linux-kernel,
	linux-can, netdev, linuxppc-dev, linux-stm32, linux-arm-kernel,
	ath10k, linux-wireless

Replace drivers that still use napi_schedule_prep/__napi_schedule
with napi_schedule helper as it does the same exact check and call.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
---
Changes v3:
- Add Reviewed-by tag
Changes v2:
- Add missing semicolon
---
 drivers/net/ethernet/ni/nixge.c     | 3 +--
 drivers/net/ethernet/wiznet/w5100.c | 4 ++--
 2 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/ni/nixge.c b/drivers/net/ethernet/ni/nixge.c
index 97f4798f4b42..f71a4f8bbb89 100644
--- a/drivers/net/ethernet/ni/nixge.c
+++ b/drivers/net/ethernet/ni/nixge.c
@@ -755,8 +755,7 @@ static irqreturn_t nixge_rx_irq(int irq, void *_ndev)
 		cr &= ~(XAXIDMA_IRQ_IOC_MASK | XAXIDMA_IRQ_DELAY_MASK);
 		nixge_dma_write_reg(priv, XAXIDMA_RX_CR_OFFSET, cr);
 
-		if (napi_schedule_prep(&priv->napi))
-			__napi_schedule(&priv->napi);
+		napi_schedule(&priv->napi);
 		goto out;
 	}
 	if (!(status & XAXIDMA_IRQ_ALL_MASK)) {
diff --git a/drivers/net/ethernet/wiznet/w5100.c b/drivers/net/ethernet/wiznet/w5100.c
index 341ee2f249fd..b26fd15c25ae 100644
--- a/drivers/net/ethernet/wiznet/w5100.c
+++ b/drivers/net/ethernet/wiznet/w5100.c
@@ -930,8 +930,8 @@ static irqreturn_t w5100_interrupt(int irq, void *ndev_instance)
 
 		if (priv->ops->may_sleep)
 			queue_work(priv->xfer_wq, &priv->rx_work);
-		else if (napi_schedule_prep(&priv->napi))
-			__napi_schedule(&priv->napi);
+		else
+			napi_schedule(&priv->napi);
 	}
 
 	return IRQ_HANDLED;
-- 
2.40.1


_______________________________________________
ath10k mailing list
ath10k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath10k

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [net-next v3 2/5] netdev: make napi_schedule return bool on NAPI successful schedule
  2023-10-09 13:37 [net-next v3 1/5] netdev: replace simple napi_schedule_prep/__napi_schedule to napi_schedule Christian Marangi
@ 2023-10-09 13:37 ` Christian Marangi
  2023-10-09 13:37 ` [net-next v3 3/5] netdev: replace napi_reschedule with napi_schedule Christian Marangi
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 7+ messages in thread
From: Christian Marangi @ 2023-10-09 13:37 UTC (permalink / raw)
  To: Jason Gunthorpe, Leon Romanovsky, Wolfgang Grandegger,
	Marc Kleine-Budde, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Chris Snook, Raju Rangoju, Jeroen de Borst,
	Praveen Kaligineedi, Shailend Chand, Douglas Miller, Nick Child,
	Michael Ellerman, Nicholas Piggin, Christophe Leroy,
	Haren Myneni, Rick Lindsley, Dany Madden, Thomas Falcon,
	Tariq Toukan, Alexandre Torgue, Jose Abreu, Maxime Coquelin,
	Krzysztof Halasa, Kalle Valo, Jeff Johnson, Gregory Greenman,
	Chandrashekar Devegowda, Intel Corporation, Chiranjeevi Rapolu,
	Liu Haijun, M Chetan Kumar, Ricardo Martinez, Loic Poulain,
	Sergey Ryazanov, Johannes Berg, Christian Marangi, Yuanjun Gong,
	Alex Elder, Bhupesh Sharma, Simon Horman, Rob Herring,
	Bailey Forrest, Junfeng Guo, Gustavo A. R. Silva, Ziwei Xiao,
	Rushil Gupta, Thomas Gleixner, Uwe Kleine-König,
	Krzysztof Kozlowski, Yuri Karpov, Andrew Lunn, Zheng Zengkai,
	Dawei Li, Anjaneyulu, Benjamin Berg, linux-rdma, linux-kernel,
	linux-can, netdev, linuxppc-dev, linux-stm32, linux-arm-kernel,
	ath10k, linux-wireless

Change napi_schedule to return a bool on NAPI successful schedule.
This might be useful for some driver to do additional steps after a
NAPI has been scheduled.

Suggested-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
---
Changes v2:
- Add Suggested-by tag
- Add Reviewed-by tag
---
 include/linux/netdevice.h | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 7e520c14eb8c..2bead8e2a14d 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -490,11 +490,18 @@ bool napi_schedule_prep(struct napi_struct *n);
  *
  * Schedule NAPI poll routine to be called if it is not already
  * running.
+ * Return true if we schedule a NAPI or false if not.
+ * Refer to napi_schedule_prep() for additional reason on why
+ * a NAPI might not be scheduled.
  */
-static inline void napi_schedule(struct napi_struct *n)
+static inline bool napi_schedule(struct napi_struct *n)
 {
-	if (napi_schedule_prep(n))
+	if (napi_schedule_prep(n)) {
 		__napi_schedule(n);
+		return true;
+	}
+
+	return false;
 }
 
 /**
-- 
2.40.1


_______________________________________________
ath10k mailing list
ath10k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath10k

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [net-next v3 3/5] netdev: replace napi_reschedule with napi_schedule
  2023-10-09 13:37 [net-next v3 1/5] netdev: replace simple napi_schedule_prep/__napi_schedule to napi_schedule Christian Marangi
  2023-10-09 13:37 ` [net-next v3 2/5] netdev: make napi_schedule return bool on NAPI successful schedule Christian Marangi
@ 2023-10-09 13:37 ` Christian Marangi
  2023-10-10  7:54   ` Tariq Toukan
  2023-10-09 13:37 ` [net-next v3 4/5] net: tc35815: rework network interface interrupt logic Christian Marangi
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 7+ messages in thread
From: Christian Marangi @ 2023-10-09 13:37 UTC (permalink / raw)
  To: Jason Gunthorpe, Leon Romanovsky, Wolfgang Grandegger,
	Marc Kleine-Budde, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Chris Snook, Raju Rangoju, Jeroen de Borst,
	Praveen Kaligineedi, Shailend Chand, Douglas Miller, Nick Child,
	Michael Ellerman, Nicholas Piggin, Christophe Leroy,
	Haren Myneni, Rick Lindsley, Dany Madden, Thomas Falcon,
	Tariq Toukan, Alexandre Torgue, Jose Abreu, Maxime Coquelin,
	Krzysztof Halasa, Kalle Valo, Jeff Johnson, Gregory Greenman,
	Chandrashekar Devegowda, Intel Corporation, Chiranjeevi Rapolu,
	Liu Haijun, M Chetan Kumar, Ricardo Martinez, Loic Poulain,
	Sergey Ryazanov, Johannes Berg, Christian Marangi, Yuanjun Gong,
	Alex Elder, Bhupesh Sharma, Simon Horman, Rob Herring,
	Bailey Forrest, Junfeng Guo, Gustavo A. R. Silva, Ziwei Xiao,
	Rushil Gupta, Thomas Gleixner, Uwe Kleine-König,
	Krzysztof Kozlowski, Yuri Karpov, Andrew Lunn, Zheng Zengkai,
	Dawei Li, Anjaneyulu, Benjamin Berg, linux-rdma, linux-kernel,
	linux-can, netdev, linuxppc-dev, linux-stm32, linux-arm-kernel,
	ath10k, linux-wireless

Now that napi_schedule return a bool, we can drop napi_reschedule that
does the same exact function. The function comes from a very old commit
bfe13f54f502 ("ibm_emac: Convert to use napi_struct independent of struct
net_device") and the purpose is actually deprecated in favour of
different logic.

Convert every user of napi_reschedule to napi_schedule.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com> # ath10k
Acked-by: Nick Child <nnac123@linux.ibm.com> # ibm
Acked-by: Marc Kleine-Budde <mkl@pengutronix.de> # for can/dev/rx-offload.c
Reviewed-by: Eric Dumazet <edumazet@google.com>
---
Changes v3:
- Add Reviewed-by tag
Changes v2:
- Add ack tag
---
 drivers/infiniband/ulp/ipoib/ipoib_ib.c                |  4 ++--
 drivers/net/can/dev/rx-offload.c                       |  2 +-
 drivers/net/ethernet/chelsio/cxgb4/sge.c               |  2 +-
 drivers/net/ethernet/chelsio/cxgb4vf/sge.c             |  2 +-
 drivers/net/ethernet/ezchip/nps_enet.c                 |  2 +-
 drivers/net/ethernet/google/gve/gve_main.c             |  2 +-
 drivers/net/ethernet/ibm/ehea/ehea_main.c              |  2 +-
 drivers/net/ethernet/ibm/emac/mal.c                    |  2 +-
 drivers/net/ethernet/ibm/ibmveth.c                     |  2 +-
 drivers/net/ethernet/ibm/ibmvnic.c                     |  2 +-
 drivers/net/ethernet/mellanox/mlx4/en_rx.c             |  2 +-
 drivers/net/ethernet/ni/nixge.c                        |  2 +-
 drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c |  2 +-
 drivers/net/ethernet/xscale/ixp4xx_eth.c               |  4 ++--
 drivers/net/fjes/fjes_main.c                           |  2 +-
 drivers/net/wan/ixp4xx_hss.c                           |  4 ++--
 drivers/net/wireless/ath/ath10k/pci.c                  |  2 +-
 drivers/net/wwan/t7xx/t7xx_hif_dpmaif_rx.c             |  2 +-
 include/linux/netdevice.h                              | 10 ----------
 19 files changed, 21 insertions(+), 31 deletions(-)

diff --git a/drivers/infiniband/ulp/ipoib/ipoib_ib.c b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
index ed25061fac62..7f84d9866cef 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_ib.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
@@ -488,7 +488,7 @@ int ipoib_rx_poll(struct napi_struct *napi, int budget)
 		if (unlikely(ib_req_notify_cq(priv->recv_cq,
 					      IB_CQ_NEXT_COMP |
 					      IB_CQ_REPORT_MISSED_EVENTS)) &&
-		    napi_reschedule(napi))
+		    napi_schedule(napi))
 			goto poll_more;
 	}
 
@@ -518,7 +518,7 @@ int ipoib_tx_poll(struct napi_struct *napi, int budget)
 		napi_complete(napi);
 		if (unlikely(ib_req_notify_cq(priv->send_cq, IB_CQ_NEXT_COMP |
 					      IB_CQ_REPORT_MISSED_EVENTS)) &&
-		    napi_reschedule(napi))
+		    napi_schedule(napi))
 			goto poll_more;
 	}
 	return n < 0 ? 0 : n;
diff --git a/drivers/net/can/dev/rx-offload.c b/drivers/net/can/dev/rx-offload.c
index 77091f7d1fa7..46e7b6db4a1e 100644
--- a/drivers/net/can/dev/rx-offload.c
+++ b/drivers/net/can/dev/rx-offload.c
@@ -67,7 +67,7 @@ static int can_rx_offload_napi_poll(struct napi_struct *napi, int quota)
 
 		/* Check if there was another interrupt */
 		if (!skb_queue_empty(&offload->skb_queue))
-			napi_reschedule(&offload->napi);
+			napi_schedule(&offload->napi);
 	}
 
 	return work_done;
diff --git a/drivers/net/ethernet/chelsio/cxgb4/sge.c b/drivers/net/ethernet/chelsio/cxgb4/sge.c
index 98dd78551d89..b5ff2e1a9975 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/sge.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/sge.c
@@ -4261,7 +4261,7 @@ static void sge_rx_timer_cb(struct timer_list *t)
 
 			if (fl_starving(adap, fl)) {
 				rxq = container_of(fl, struct sge_eth_rxq, fl);
-				if (napi_reschedule(&rxq->rspq.napi))
+				if (napi_schedule(&rxq->rspq.napi))
 					fl->starving++;
 				else
 					set_bit(id, s->starving_fl);
diff --git a/drivers/net/ethernet/chelsio/cxgb4vf/sge.c b/drivers/net/ethernet/chelsio/cxgb4vf/sge.c
index 2d0cf76fb3c5..5b1d746e6563 100644
--- a/drivers/net/ethernet/chelsio/cxgb4vf/sge.c
+++ b/drivers/net/ethernet/chelsio/cxgb4vf/sge.c
@@ -2094,7 +2094,7 @@ static void sge_rx_timer_cb(struct timer_list *t)
 				struct sge_eth_rxq *rxq;
 
 				rxq = container_of(fl, struct sge_eth_rxq, fl);
-				if (napi_reschedule(&rxq->rspq.napi))
+				if (napi_schedule(&rxq->rspq.napi))
 					fl->starving++;
 				else
 					set_bit(id, s->starving_fl);
diff --git a/drivers/net/ethernet/ezchip/nps_enet.c b/drivers/net/ethernet/ezchip/nps_enet.c
index edf000e7bab4..4d7184d46824 100644
--- a/drivers/net/ethernet/ezchip/nps_enet.c
+++ b/drivers/net/ethernet/ezchip/nps_enet.c
@@ -198,7 +198,7 @@ static int nps_enet_poll(struct napi_struct *napi, int budget)
 		 */
 		if (nps_enet_is_tx_pending(priv)) {
 			nps_enet_reg_set(priv, NPS_ENET_REG_BUF_INT_ENABLE, 0);
-			napi_reschedule(napi);
+			napi_schedule(napi);
 		}
 	}
 
diff --git a/drivers/net/ethernet/google/gve/gve_main.c b/drivers/net/ethernet/google/gve/gve_main.c
index 83b09dcfafc4..276f996f95dc 100644
--- a/drivers/net/ethernet/google/gve/gve_main.c
+++ b/drivers/net/ethernet/google/gve/gve_main.c
@@ -281,7 +281,7 @@ static int gve_napi_poll(struct napi_struct *napi, int budget)
 		if (block->rx)
 			reschedule |= gve_rx_work_pending(block->rx);
 
-		if (reschedule && napi_reschedule(napi))
+		if (reschedule && napi_schedule(napi))
 			iowrite32be(GVE_IRQ_MASK, irq_doorbell);
 	}
 	return work_done;
diff --git a/drivers/net/ethernet/ibm/ehea/ehea_main.c b/drivers/net/ethernet/ibm/ehea/ehea_main.c
index 251dedd55cfb..1e29e5c9a2df 100644
--- a/drivers/net/ethernet/ibm/ehea/ehea_main.c
+++ b/drivers/net/ethernet/ibm/ehea/ehea_main.c
@@ -900,7 +900,7 @@ static int ehea_poll(struct napi_struct *napi, int budget)
 		if (!cqe && !cqe_skb)
 			return rx;
 
-		if (!napi_reschedule(napi))
+		if (!napi_schedule(napi))
 			return rx;
 
 		cqe_skb = ehea_proc_cqes(pr, EHEA_POLL_MAX_CQES);
diff --git a/drivers/net/ethernet/ibm/emac/mal.c b/drivers/net/ethernet/ibm/emac/mal.c
index 462646d1b817..2439f7e96e05 100644
--- a/drivers/net/ethernet/ibm/emac/mal.c
+++ b/drivers/net/ethernet/ibm/emac/mal.c
@@ -442,7 +442,7 @@ static int mal_poll(struct napi_struct *napi, int budget)
 		if (unlikely(mc->ops->peek_rx(mc->dev) ||
 			     test_bit(MAL_COMMAC_RX_STOPPED, &mc->flags))) {
 			MAL_DBG2(mal, "rotting packet" NL);
-			if (!napi_reschedule(napi))
+			if (!napi_schedule(napi))
 				goto more_work;
 
 			spin_lock_irqsave(&mal->lock, flags);
diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c
index 832a2ae01950..9490272c0421 100644
--- a/drivers/net/ethernet/ibm/ibmveth.c
+++ b/drivers/net/ethernet/ibm/ibmveth.c
@@ -1433,7 +1433,7 @@ static int ibmveth_poll(struct napi_struct *napi, int budget)
 		BUG_ON(lpar_rc != H_SUCCESS);
 
 		if (ibmveth_rxq_pending_buffer(adapter) &&
-		    napi_reschedule(napi)) {
+		    napi_schedule(napi)) {
 			lpar_rc = h_vio_signal(adapter->vdev->unit_address,
 					       VIO_IRQ_DISABLE);
 		}
diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
index cdf5251e5679..2094f413cbe4 100644
--- a/drivers/net/ethernet/ibm/ibmvnic.c
+++ b/drivers/net/ethernet/ibm/ibmvnic.c
@@ -3519,7 +3519,7 @@ static int ibmvnic_poll(struct napi_struct *napi, int budget)
 		if (napi_complete_done(napi, frames_processed)) {
 			enable_scrq_irq(adapter, rx_scrq);
 			if (pending_scrq(adapter, rx_scrq)) {
-				if (napi_reschedule(napi)) {
+				if (napi_schedule(napi)) {
 					disable_scrq_irq(adapter, rx_scrq);
 					goto restart_poll;
 				}
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_rx.c b/drivers/net/ethernet/mellanox/mlx4/en_rx.c
index 332472fe4990..a09b6e05337d 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_rx.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_rx.c
@@ -400,7 +400,7 @@ void mlx4_en_recover_from_oom(struct mlx4_en_priv *priv)
 	for (ring = 0; ring < priv->rx_ring_num; ring++) {
 		if (mlx4_en_is_ring_empty(priv->rx_ring[ring])) {
 			local_bh_disable();
-			napi_reschedule(&priv->rx_cq[ring]->napi);
+			napi_schedule(&priv->rx_cq[ring]->napi);
 			local_bh_enable();
 		}
 	}
diff --git a/drivers/net/ethernet/ni/nixge.c b/drivers/net/ethernet/ni/nixge.c
index f71a4f8bbb89..fa1f78b03cb2 100644
--- a/drivers/net/ethernet/ni/nixge.c
+++ b/drivers/net/ethernet/ni/nixge.c
@@ -683,7 +683,7 @@ static int nixge_poll(struct napi_struct *napi, int budget)
 		if (status & (XAXIDMA_IRQ_IOC_MASK | XAXIDMA_IRQ_DELAY_MASK)) {
 			/* If there's more, reschedule, but clear */
 			nixge_dma_write_reg(priv, XAXIDMA_RX_SR_OFFSET, status);
-			napi_reschedule(napi);
+			napi_schedule(napi);
 		} else {
 			/* if not, turn on RX IRQs again ... */
 			cr = nixge_dma_read_reg(priv, XAXIDMA_RX_CR_OFFSET);
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c
index f9e43fc32ee8..3ca1c2a816ff 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c
@@ -802,7 +802,7 @@ static int stmmac_test_flowctrl(struct stmmac_priv *priv)
 		stmmac_start_rx(priv, priv->ioaddr, i);
 
 		local_bh_disable();
-		napi_reschedule(&ch->rx_napi);
+		napi_schedule(&ch->rx_napi);
 		local_bh_enable();
 	}
 
diff --git a/drivers/net/ethernet/xscale/ixp4xx_eth.c b/drivers/net/ethernet/xscale/ixp4xx_eth.c
index b242aa61d8ab..64dea4ad2ad3 100644
--- a/drivers/net/ethernet/xscale/ixp4xx_eth.c
+++ b/drivers/net/ethernet/xscale/ixp4xx_eth.c
@@ -714,9 +714,9 @@ static int eth_poll(struct napi_struct *napi, int budget)
 			napi_complete(napi);
 			qmgr_enable_irq(rxq);
 			if (!qmgr_stat_below_low_watermark(rxq) &&
-			    napi_reschedule(napi)) { /* not empty again */
+			    napi_schedule(napi)) { /* not empty again */
 #if DEBUG_RX
-				netdev_debug(dev, "eth_poll napi_reschedule succeeded\n");
+				netdev_debug(dev, "eth_poll napi_schedule succeeded\n");
 #endif
 				qmgr_disable_irq(rxq);
 				continue;
diff --git a/drivers/net/fjes/fjes_main.c b/drivers/net/fjes/fjes_main.c
index 2513be6d4e11..cd8cf08477ec 100644
--- a/drivers/net/fjes/fjes_main.c
+++ b/drivers/net/fjes/fjes_main.c
@@ -1030,7 +1030,7 @@ static int fjes_poll(struct napi_struct *napi, int budget)
 		}
 
 		if (((long)jiffies - (long)adapter->rx_last_jiffies) < 3) {
-			napi_reschedule(napi);
+			napi_schedule(napi);
 		} else {
 			spin_lock(&hw->rx_status_lock);
 			for (epidx = 0; epidx < hw->max_epid; epidx++) {
diff --git a/drivers/net/wan/ixp4xx_hss.c b/drivers/net/wan/ixp4xx_hss.c
index e46b7f5ee49e..b09f4c235142 100644
--- a/drivers/net/wan/ixp4xx_hss.c
+++ b/drivers/net/wan/ixp4xx_hss.c
@@ -687,10 +687,10 @@ static int hss_hdlc_poll(struct napi_struct *napi, int budget)
 			napi_complete(napi);
 			qmgr_enable_irq(rxq);
 			if (!qmgr_stat_empty(rxq) &&
-			    napi_reschedule(napi)) {
+			    napi_schedule(napi)) {
 #if DEBUG_RX
 				printk(KERN_DEBUG "%s: hss_hdlc_poll"
-				       " napi_reschedule succeeded\n",
+				       " napi_schedule succeeded\n",
 				       dev->name);
 #endif
 				qmgr_disable_irq(rxq);
diff --git a/drivers/net/wireless/ath/ath10k/pci.c b/drivers/net/wireless/ath/ath10k/pci.c
index 23f366221939..2f8c785277af 100644
--- a/drivers/net/wireless/ath/ath10k/pci.c
+++ b/drivers/net/wireless/ath/ath10k/pci.c
@@ -3148,7 +3148,7 @@ static int ath10k_pci_napi_poll(struct napi_struct *ctx, int budget)
 		 * immediate servicing.
 		 */
 		if (ath10k_ce_interrupt_summary(ar)) {
-			napi_reschedule(ctx);
+			napi_schedule(ctx);
 			goto out;
 		}
 		ath10k_pci_enable_legacy_irq(ar);
diff --git a/drivers/net/wwan/t7xx/t7xx_hif_dpmaif_rx.c b/drivers/net/wwan/t7xx/t7xx_hif_dpmaif_rx.c
index f4ff2198b5ef..210d84c67ef9 100644
--- a/drivers/net/wwan/t7xx/t7xx_hif_dpmaif_rx.c
+++ b/drivers/net/wwan/t7xx/t7xx_hif_dpmaif_rx.c
@@ -852,7 +852,7 @@ int t7xx_dpmaif_napi_rx_poll(struct napi_struct *napi, const int budget)
 	if (!ret) {
 		napi_complete_done(napi, work_done);
 		rxq->sleep_lock_pending = true;
-		napi_reschedule(napi);
+		napi_schedule(napi);
 		return work_done;
 	}
 
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 2bead8e2a14d..bbf9038f2afd 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -516,16 +516,6 @@ static inline void napi_schedule_irqoff(struct napi_struct *n)
 		__napi_schedule_irqoff(n);
 }
 
-/* Try to reschedule poll. Called by dev->poll() after napi_complete().  */
-static inline bool napi_reschedule(struct napi_struct *napi)
-{
-	if (napi_schedule_prep(napi)) {
-		__napi_schedule(napi);
-		return true;
-	}
-	return false;
-}
-
 /**
  * napi_complete_done - NAPI processing complete
  * @n: NAPI context
-- 
2.40.1


_______________________________________________
ath10k mailing list
ath10k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath10k

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [net-next v3 4/5] net: tc35815: rework network interface interrupt logic
  2023-10-09 13:37 [net-next v3 1/5] netdev: replace simple napi_schedule_prep/__napi_schedule to napi_schedule Christian Marangi
  2023-10-09 13:37 ` [net-next v3 2/5] netdev: make napi_schedule return bool on NAPI successful schedule Christian Marangi
  2023-10-09 13:37 ` [net-next v3 3/5] netdev: replace napi_reschedule with napi_schedule Christian Marangi
@ 2023-10-09 13:37 ` Christian Marangi
  2023-10-09 13:37 ` [net-next v3 5/5] netdev: use napi_schedule bool instead of napi_schedule_prep/__napi_schedule Christian Marangi
  2023-10-12  0:40 ` [net-next v3 1/5] netdev: replace simple napi_schedule_prep/__napi_schedule to napi_schedule patchwork-bot+netdevbpf
  4 siblings, 0 replies; 7+ messages in thread
From: Christian Marangi @ 2023-10-09 13:37 UTC (permalink / raw)
  To: Jason Gunthorpe, Leon Romanovsky, Wolfgang Grandegger,
	Marc Kleine-Budde, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Chris Snook, Raju Rangoju, Jeroen de Borst,
	Praveen Kaligineedi, Shailend Chand, Douglas Miller, Nick Child,
	Michael Ellerman, Nicholas Piggin, Christophe Leroy,
	Haren Myneni, Rick Lindsley, Dany Madden, Thomas Falcon,
	Tariq Toukan, Alexandre Torgue, Jose Abreu, Maxime Coquelin,
	Krzysztof Halasa, Kalle Valo, Jeff Johnson, Gregory Greenman,
	Chandrashekar Devegowda, Intel Corporation, Chiranjeevi Rapolu,
	Liu Haijun, M Chetan Kumar, Ricardo Martinez, Loic Poulain,
	Sergey Ryazanov, Johannes Berg, Christian Marangi, Yuanjun Gong,
	Alex Elder, Bhupesh Sharma, Simon Horman, Rob Herring,
	Bailey Forrest, Junfeng Guo, Gustavo A. R. Silva, Ziwei Xiao,
	Rushil Gupta, Thomas Gleixner, Uwe Kleine-König,
	Krzysztof Kozlowski, Yuri Karpov, Andrew Lunn, Zheng Zengkai,
	Dawei Li, Anjaneyulu, Benjamin Berg, linux-rdma, linux-kernel,
	linux-can, netdev, linuxppc-dev, linux-stm32, linux-arm-kernel,
	ath10k, linux-wireless

Rework network interface logic. Before this change, the code flow was:
1. Disable interrupt
2. Try to schedule a NAPI
3. Check if it was possible (NAPI is not already scheduled)
4. emit BUG() if we receive interrupt while a NAPI is scheduled

If some application busy poll or set gro_flush_timeout low enough, it's
possible to reach the BUG() condition. Given that the condition may
happen and it wouldn't be a bug, rework the logic to permit such case
and prevent stall with interrupt never enabled again.

Disable the interrupt only if the NAPI can be scheduled (aka it's not
already scheduled) and drop the printk and BUG() call. With these
change, in the event of a NAPI already scheduled, the interrupt is
simply ignored with nothing done.

Suggested-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
---
 drivers/net/ethernet/toshiba/tc35815.c | 10 +++-------
 1 file changed, 3 insertions(+), 7 deletions(-)

diff --git a/drivers/net/ethernet/toshiba/tc35815.c b/drivers/net/ethernet/toshiba/tc35815.c
index 14cf6ecf6d0d..6e3758dfbdbd 100644
--- a/drivers/net/ethernet/toshiba/tc35815.c
+++ b/drivers/net/ethernet/toshiba/tc35815.c
@@ -1434,14 +1434,10 @@ static irqreturn_t tc35815_interrupt(int irq, void *dev_id)
 	u32 dmactl = tc_readl(&tr->DMA_Ctl);
 
 	if (!(dmactl & DMA_IntMask)) {
-		/* disable interrupts */
-		tc_writel(dmactl | DMA_IntMask, &tr->DMA_Ctl);
-		if (napi_schedule_prep(&lp->napi))
+		if (napi_schedule_prep(&lp->napi)) {
+			/* disable interrupts */
+			tc_writel(dmactl | DMA_IntMask, &tr->DMA_Ctl);
 			__napi_schedule(&lp->napi);
-		else {
-			printk(KERN_ERR "%s: interrupt taken in poll\n",
-			       dev->name);
-			BUG();
 		}
 		(void)tc_readl(&tr->Int_Src);	/* flush */
 		return IRQ_HANDLED;
-- 
2.40.1


_______________________________________________
ath10k mailing list
ath10k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath10k

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [net-next v3 5/5] netdev: use napi_schedule bool instead of napi_schedule_prep/__napi_schedule
  2023-10-09 13:37 [net-next v3 1/5] netdev: replace simple napi_schedule_prep/__napi_schedule to napi_schedule Christian Marangi
                   ` (2 preceding siblings ...)
  2023-10-09 13:37 ` [net-next v3 4/5] net: tc35815: rework network interface interrupt logic Christian Marangi
@ 2023-10-09 13:37 ` Christian Marangi
  2023-10-12  0:40 ` [net-next v3 1/5] netdev: replace simple napi_schedule_prep/__napi_schedule to napi_schedule patchwork-bot+netdevbpf
  4 siblings, 0 replies; 7+ messages in thread
From: Christian Marangi @ 2023-10-09 13:37 UTC (permalink / raw)
  To: Jason Gunthorpe, Leon Romanovsky, Wolfgang Grandegger,
	Marc Kleine-Budde, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Chris Snook, Raju Rangoju, Jeroen de Borst,
	Praveen Kaligineedi, Shailend Chand, Douglas Miller, Nick Child,
	Michael Ellerman, Nicholas Piggin, Christophe Leroy,
	Haren Myneni, Rick Lindsley, Dany Madden, Thomas Falcon,
	Tariq Toukan, Alexandre Torgue, Jose Abreu, Maxime Coquelin,
	Krzysztof Halasa, Kalle Valo, Jeff Johnson, Gregory Greenman,
	Chandrashekar Devegowda, Intel Corporation, Chiranjeevi Rapolu,
	Liu Haijun, M Chetan Kumar, Ricardo Martinez, Loic Poulain,
	Sergey Ryazanov, Johannes Berg, Christian Marangi, Yuanjun Gong,
	Alex Elder, Bhupesh Sharma, Simon Horman, Rob Herring,
	Bailey Forrest, Junfeng Guo, Gustavo A. R. Silva, Ziwei Xiao,
	Rushil Gupta, Thomas Gleixner, Uwe Kleine-König,
	Krzysztof Kozlowski, Yuri Karpov, Andrew Lunn, Zheng Zengkai,
	Dawei Li, Anjaneyulu, Benjamin Berg, linux-rdma, linux-kernel,
	linux-can, netdev, linuxppc-dev, linux-stm32, linux-arm-kernel,
	ath10k, linux-wireless

Replace if condition of napi_schedule_prep/__napi_schedule and use bool
from napi_schedule directly where possible.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
---
Changes v3:
- Drop toshiba change and rework in separate patch
---
 drivers/net/ethernet/atheros/atlx/atl1.c     | 4 +---
 drivers/net/wireless/intel/iwlwifi/pcie/rx.c | 4 +---
 2 files changed, 2 insertions(+), 6 deletions(-)

diff --git a/drivers/net/ethernet/atheros/atlx/atl1.c b/drivers/net/ethernet/atheros/atlx/atl1.c
index 02aa6fd8ebc2..a9014d7932db 100644
--- a/drivers/net/ethernet/atheros/atlx/atl1.c
+++ b/drivers/net/ethernet/atheros/atlx/atl1.c
@@ -2446,7 +2446,7 @@ static int atl1_rings_clean(struct napi_struct *napi, int budget)
 
 static inline int atl1_sched_rings_clean(struct atl1_adapter* adapter)
 {
-	if (!napi_schedule_prep(&adapter->napi))
+	if (!napi_schedule(&adapter->napi))
 		/* It is possible in case even the RX/TX ints are disabled via IMR
 		 * register the ISR bits are set anyway (but do not produce IRQ).
 		 * To handle such situation the napi functions used to check is
@@ -2454,8 +2454,6 @@ static inline int atl1_sched_rings_clean(struct atl1_adapter* adapter)
 		 */
 		return 0;
 
-	__napi_schedule(&adapter->napi);
-
 	/*
 	 * Disable RX/TX ints via IMR register if it is
 	 * allowed. NAPI handler must reenable them in same
diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/rx.c b/drivers/net/wireless/intel/iwlwifi/pcie/rx.c
index 23b5a0adcbd6..146bc7bd14fb 100644
--- a/drivers/net/wireless/intel/iwlwifi/pcie/rx.c
+++ b/drivers/net/wireless/intel/iwlwifi/pcie/rx.c
@@ -1660,9 +1660,7 @@ irqreturn_t iwl_pcie_irq_rx_msix_handler(int irq, void *dev_id)
 	IWL_DEBUG_ISR(trans, "[%d] Got interrupt\n", entry->entry);
 
 	local_bh_disable();
-	if (napi_schedule_prep(&rxq->napi))
-		__napi_schedule(&rxq->napi);
-	else
+	if (!napi_schedule(&rxq->napi))
 		iwl_pcie_clear_irq(trans, entry->entry);
 	local_bh_enable();
 
-- 
2.40.1


_______________________________________________
ath10k mailing list
ath10k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath10k

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [net-next v3 3/5] netdev: replace napi_reschedule with napi_schedule
  2023-10-09 13:37 ` [net-next v3 3/5] netdev: replace napi_reschedule with napi_schedule Christian Marangi
@ 2023-10-10  7:54   ` Tariq Toukan
  0 siblings, 0 replies; 7+ messages in thread
From: Tariq Toukan @ 2023-10-10  7:54 UTC (permalink / raw)
  To: Christian Marangi, Jason Gunthorpe, Leon Romanovsky,
	Wolfgang Grandegger, Marc Kleine-Budde, David S. Miller,
	Eric Dumazet, Jakub Kicinski, Paolo Abeni, Chris Snook,
	Raju Rangoju, Jeroen de Borst, Praveen Kaligineedi,
	Shailend Chand, Douglas Miller, Nick Child, Michael Ellerman,
	Nicholas Piggin, Christophe Leroy, Haren Myneni, Rick Lindsley,
	Dany Madden, Thomas Falcon, Tariq Toukan, Alexandre Torgue,
	Jose Abreu, Maxime Coquelin, Krzysztof Halasa, Kalle Valo,
	Jeff Johnson, Gregory Greenman, Chandrashekar Devegowda,
	Intel Corporation, Chiranjeevi Rapolu, Liu Haijun,
	M Chetan Kumar, Ricardo Martinez, Loic Poulain, Sergey Ryazanov,
	Johannes Berg, Yuanjun Gong, Alex Elder, Bhupesh Sharma,
	Simon Horman, Rob Herring, Bailey Forrest, Junfeng Guo,
	Gustavo A. R. Silva, Ziwei Xiao, Rushil Gupta, Thomas Gleixner,
	Uwe Kleine-König, Krzysztof Kozlowski, Yuri Karpov,
	Andrew Lunn, Zheng Zengkai, Dawei Li, Anjaneyulu, Benjamin Berg,
	linux-rdma, linux-kernel, linux-can, netdev, linuxppc-dev,
	linux-stm32, linux-arm-kernel, ath10k, linux-wireless



On 09/10/2023 16:37, Christian Marangi wrote:
> Now that napi_schedule return a bool, we can drop napi_reschedule that
> does the same exact function. The function comes from a very old commit
> bfe13f54f502 ("ibm_emac: Convert to use napi_struct independent of struct
> net_device") and the purpose is actually deprecated in favour of
> different logic.
> 
> Convert every user of napi_reschedule to napi_schedule.
> 
> Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
> Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com> # ath10k
> Acked-by: Nick Child <nnac123@linux.ibm.com> # ibm
> Acked-by: Marc Kleine-Budde <mkl@pengutronix.de> # for can/dev/rx-offload.c
> Reviewed-by: Eric Dumazet <edumazet@google.com>
> ---
> Changes v3:
> - Add Reviewed-by tag
> Changes v2:
> - Add ack tag
> ---
>   drivers/infiniband/ulp/ipoib/ipoib_ib.c                |  4 ++--
>   drivers/net/can/dev/rx-offload.c                       |  2 +-
>   drivers/net/ethernet/chelsio/cxgb4/sge.c               |  2 +-
>   drivers/net/ethernet/chelsio/cxgb4vf/sge.c             |  2 +-
>   drivers/net/ethernet/ezchip/nps_enet.c                 |  2 +-
>   drivers/net/ethernet/google/gve/gve_main.c             |  2 +-
>   drivers/net/ethernet/ibm/ehea/ehea_main.c              |  2 +-
>   drivers/net/ethernet/ibm/emac/mal.c                    |  2 +-
>   drivers/net/ethernet/ibm/ibmveth.c                     |  2 +-
>   drivers/net/ethernet/ibm/ibmvnic.c                     |  2 +-
>   drivers/net/ethernet/mellanox/mlx4/en_rx.c             |  2 +-
>   drivers/net/ethernet/ni/nixge.c                        |  2 +-
>   drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c |  2 +-
>   drivers/net/ethernet/xscale/ixp4xx_eth.c               |  4 ++--
>   drivers/net/fjes/fjes_main.c                           |  2 +-
>   drivers/net/wan/ixp4xx_hss.c                           |  4 ++--
>   drivers/net/wireless/ath/ath10k/pci.c                  |  2 +-
>   drivers/net/wwan/t7xx/t7xx_hif_dpmaif_rx.c             |  2 +-
>   include/linux/netdevice.h                              | 10 ----------
>   19 files changed, 21 insertions(+), 31 deletions(-)
> 

...

> diff --git a/drivers/net/ethernet/mellanox/mlx4/en_rx.c b/drivers/net/ethernet/mellanox/mlx4/en_rx.c
> index 332472fe4990..a09b6e05337d 100644
> --- a/drivers/net/ethernet/mellanox/mlx4/en_rx.c
> +++ b/drivers/net/ethernet/mellanox/mlx4/en_rx.c
> @@ -400,7 +400,7 @@ void mlx4_en_recover_from_oom(struct mlx4_en_priv *priv)
>   	for (ring = 0; ring < priv->rx_ring_num; ring++) {
>   		if (mlx4_en_is_ring_empty(priv->rx_ring[ring])) {
>   			local_bh_disable();
> -			napi_reschedule(&priv->rx_cq[ring]->napi);
> +			napi_schedule(&priv->rx_cq[ring]->napi);
>   			local_bh_enable();
>   		}
>   	}

For mlx4 part:
Acked-by: Tariq Toukan <tariqt@nvidia.com>


_______________________________________________
ath10k mailing list
ath10k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath10k

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [net-next v3 1/5] netdev: replace simple napi_schedule_prep/__napi_schedule to napi_schedule
  2023-10-09 13:37 [net-next v3 1/5] netdev: replace simple napi_schedule_prep/__napi_schedule to napi_schedule Christian Marangi
                   ` (3 preceding siblings ...)
  2023-10-09 13:37 ` [net-next v3 5/5] netdev: use napi_schedule bool instead of napi_schedule_prep/__napi_schedule Christian Marangi
@ 2023-10-12  0:40 ` patchwork-bot+netdevbpf
  4 siblings, 0 replies; 7+ messages in thread
From: patchwork-bot+netdevbpf @ 2023-10-12  0:40 UTC (permalink / raw)
  To: Christian Marangi
  Cc: jgg, leon, wg, mkl, davem, edumazet, kuba, pabeni, chris.snook,
	rajur, jeroendb, pkaligineedi, shailend, dougmill, nnac123, mpe,
	npiggin, christophe.leroy, haren, ricklind, danymadden, tlfalcon,
	tariqt, alexandre.torgue, joabreu, mcoquelin.stm32, khalasa,
	kvalo, quic_jjohnson, gregory.greenman, chandrashekar.devegowda,
	linuxwwan, chiranjeevi.rapolu, haijun.liu, m.chetan.kumar,
	ricardo.martinez, loic.poulain, ryazanov.s.a, johannes,
	ruc_gongyuanjun, elder, bhupesh.sharma, horms, robh, bcf,
	junfeng.guo, gustavoars, ziweixiao, rushilg, tglx,
	u.kleine-koenig, krzysztof.kozlowski, YKarpov, andrew,
	zhengzengkai, set_pte_at, pagadala.yesu.anjaneyulu,
	benjamin.berg, linux-rdma, linux-kernel, linux-can, netdev,
	linuxppc-dev, linux-stm32, linux-arm-kernel, ath10k,
	linux-wireless

Hello:

This series was applied to netdev/net-next.git (main)
by Jakub Kicinski <kuba@kernel.org>:

On Mon,  9 Oct 2023 15:37:50 +0200 you wrote:
> Replace drivers that still use napi_schedule_prep/__napi_schedule
> with napi_schedule helper as it does the same exact check and call.
> 
> Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
> Reviewed-by: Eric Dumazet <edumazet@google.com>
> ---
> Changes v3:
> - Add Reviewed-by tag
> Changes v2:
> - Add missing semicolon
> 
> [...]

Here is the summary with links:
  - [net-next,v3,1/5] netdev: replace simple napi_schedule_prep/__napi_schedule to napi_schedule
    https://git.kernel.org/netdev/net-next/c/ef724517b596
  - [net-next,v3,2/5] netdev: make napi_schedule return bool on NAPI successful schedule
    https://git.kernel.org/netdev/net-next/c/0a779003213b
  - [net-next,v3,3/5] netdev: replace napi_reschedule with napi_schedule
    https://git.kernel.org/netdev/net-next/c/73382e919f3d
  - [net-next,v3,4/5] net: tc35815: rework network interface interrupt logic
    https://git.kernel.org/netdev/net-next/c/be176234d0a8
  - [net-next,v3,5/5] netdev: use napi_schedule bool instead of napi_schedule_prep/__napi_schedule
    https://git.kernel.org/netdev/net-next/c/d1fea38f01ac

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



_______________________________________________
ath10k mailing list
ath10k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath10k

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2023-10-12  0:40 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-10-09 13:37 [net-next v3 1/5] netdev: replace simple napi_schedule_prep/__napi_schedule to napi_schedule Christian Marangi
2023-10-09 13:37 ` [net-next v3 2/5] netdev: make napi_schedule return bool on NAPI successful schedule Christian Marangi
2023-10-09 13:37 ` [net-next v3 3/5] netdev: replace napi_reschedule with napi_schedule Christian Marangi
2023-10-10  7:54   ` Tariq Toukan
2023-10-09 13:37 ` [net-next v3 4/5] net: tc35815: rework network interface interrupt logic Christian Marangi
2023-10-09 13:37 ` [net-next v3 5/5] netdev: use napi_schedule bool instead of napi_schedule_prep/__napi_schedule Christian Marangi
2023-10-12  0:40 ` [net-next v3 1/5] netdev: replace simple napi_schedule_prep/__napi_schedule to napi_schedule patchwork-bot+netdevbpf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).