Message ID | 20250214211252.2615573-1-sean.anderson@linux.dev (mailing list archive) |
---|---|
State | Accepted |
Commit | c900e49d58eb32b192b6d200ace4ae3ab89779d4 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net-next] net: xilinx: axienet: Implement BQL | expand |
> -----Original Message----- > From: Sean Anderson <sean.anderson@linux.dev> > Sent: Saturday, February 15, 2025 2:43 AM > To: Pandey, Radhey Shyam <radhey.shyam.pandey@amd.com>; > netdev@vger.kernel.org > Cc: linux-kernel@vger.kernel.org; Paolo Abeni <pabeni@redhat.com>; David S . > Miller <davem@davemloft.net>; Jakub Kicinski <kuba@kernel.org>; Simek, Michal > <michal.simek@amd.com>; linux-arm-kernel@lists.infradead.org; Eric Dumazet > <edumazet@google.com>; Andrew Lunn <andrew+netdev@lunn.ch>; Sean > Anderson <sean.anderson@linux.dev> > Subject: [PATCH net-next] net: xilinx: axienet: Implement BQL > > Caution: This message originated from an External Source. Use proper caution > when opening attachments, clicking links, or responding. > > > Implement byte queue limits to allow queueing disciplines to account for packets > enqueued in the ring buffers but not yet transmitted. > Could you please check if BQL can be implemented for DMAengine flow? > Signed-off-by: Sean Anderson <sean.anderson@linux.dev> > --- > > drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c > b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c > index 0673b2694e4c..7406e00de0fb 100644 > --- a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c > +++ b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c > @@ -1002,6 +1002,7 @@ static int axienet_tx_poll(struct napi_struct *napi, int > budget) > &size, budget); > > if (packets) { > + netdev_completed_queue(ndev, packets, size); > u64_stats_update_begin(&lp->tx_stat_sync); > u64_stats_add(&lp->tx_packets, packets); > u64_stats_add(&lp->tx_bytes, size); @@ -1125,6 +1126,7 @@ > axienet_start_xmit(struct sk_buff *skb, struct net_device *ndev) > if (++new_tail_ptr >= lp->tx_bd_num) > new_tail_ptr = 0; > WRITE_ONCE(lp->tx_bd_tail, new_tail_ptr); > + netdev_sent_queue(ndev, skb->len); > > /* Start the transfer */ > axienet_dma_out_addr(lp, XAXIDMA_TX_TDESC_OFFSET, tail_p); @@ - > 1751,6 +1753,7 @@ static int axienet_stop(struct net_device *ndev) > dma_release_channel(lp->tx_chan); > } > > + netdev_reset_queue(ndev); > axienet_iow(lp, XAE_IE_OFFSET, 0); > > if (lp->eth_irq > 0) > @@ -2676,6 +2679,7 @@ static void axienet_dma_err_handler(struct work_struct > *work) > ~(XAE_OPTION_TXEN | XAE_OPTION_RXEN)); > > axienet_dma_stop(lp); > + netdev_reset_queue(ndev); > > for (i = 0; i < lp->tx_bd_num; i++) { > cur_p = &lp->tx_bd_v[i]; > -- > 2.35.1.1320.gc452695387.dirty >
On 2/15/25 06:32, Gupta, Suraj wrote: > > >> -----Original Message----- >> From: Sean Anderson <sean.anderson@linux.dev> >> Sent: Saturday, February 15, 2025 2:43 AM >> To: Pandey, Radhey Shyam <radhey.shyam.pandey@amd.com>; >> netdev@vger.kernel.org >> Cc: linux-kernel@vger.kernel.org; Paolo Abeni <pabeni@redhat.com>; David S . >> Miller <davem@davemloft.net>; Jakub Kicinski <kuba@kernel.org>; Simek, Michal >> <michal.simek@amd.com>; linux-arm-kernel@lists.infradead.org; Eric Dumazet >> <edumazet@google.com>; Andrew Lunn <andrew+netdev@lunn.ch>; Sean >> Anderson <sean.anderson@linux.dev> >> Subject: [PATCH net-next] net: xilinx: axienet: Implement BQL >> >> Caution: This message originated from an External Source. Use proper caution >> when opening attachments, clicking links, or responding. >> >> >> Implement byte queue limits to allow queueing disciplines to account for packets >> enqueued in the ring buffers but not yet transmitted. >> > > Could you please check if BQL can be implemented for DMAengine flow? I can have a look, but TBH I do not test the dma engine configuration since it is so much slower. --Sean
> > Could you please check if BQL can be implemented for DMAengine flow? > > I can have a look, but TBH I do not test the dma engine configuration since it is > so much slower. It might actually benefit more from BQL if it is slower? Andrew
On 2/18/25 11:16, Andrew Lunn wrote: >> > Could you please check if BQL can be implemented for DMAengine flow? >> >> I can have a look, but TBH I do not test the dma engine configuration since it is >> so much slower. > > It might actually benefit more from BQL if it is slower? Actually, it will benefit less. The hardware is the same, so the slowdown is entirely due to extra CPU overhead. From the CPU's perspective, the queues actually drain faster than normal. --Sean
Hello: This patch was applied to netdev/net-next.git (main) by Jakub Kicinski <kuba@kernel.org>: On Fri, 14 Feb 2025 16:12:52 -0500 you wrote: > Implement byte queue limits to allow queueing disciplines to account for > packets enqueued in the ring buffers but not yet transmitted. > > Signed-off-by: Sean Anderson <sean.anderson@linux.dev> > --- > > drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 4 ++++ > 1 file changed, 4 insertions(+) Here is the summary with links: - [net-next] net: xilinx: axienet: Implement BQL https://git.kernel.org/netdev/net-next/c/c900e49d58eb You are awesome, thank you!
diff --git a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c index 0673b2694e4c..7406e00de0fb 100644 --- a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c +++ b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c @@ -1002,6 +1002,7 @@ static int axienet_tx_poll(struct napi_struct *napi, int budget) &size, budget); if (packets) { + netdev_completed_queue(ndev, packets, size); u64_stats_update_begin(&lp->tx_stat_sync); u64_stats_add(&lp->tx_packets, packets); u64_stats_add(&lp->tx_bytes, size); @@ -1125,6 +1126,7 @@ axienet_start_xmit(struct sk_buff *skb, struct net_device *ndev) if (++new_tail_ptr >= lp->tx_bd_num) new_tail_ptr = 0; WRITE_ONCE(lp->tx_bd_tail, new_tail_ptr); + netdev_sent_queue(ndev, skb->len); /* Start the transfer */ axienet_dma_out_addr(lp, XAXIDMA_TX_TDESC_OFFSET, tail_p); @@ -1751,6 +1753,7 @@ static int axienet_stop(struct net_device *ndev) dma_release_channel(lp->tx_chan); } + netdev_reset_queue(ndev); axienet_iow(lp, XAE_IE_OFFSET, 0); if (lp->eth_irq > 0) @@ -2676,6 +2679,7 @@ static void axienet_dma_err_handler(struct work_struct *work) ~(XAE_OPTION_TXEN | XAE_OPTION_RXEN)); axienet_dma_stop(lp); + netdev_reset_queue(ndev); for (i = 0; i < lp->tx_bd_num; i++) { cur_p = &lp->tx_bd_v[i];
Implement byte queue limits to allow queueing disciplines to account for packets enqueued in the ring buffers but not yet transmitted. Signed-off-by: Sean Anderson <sean.anderson@linux.dev> --- drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 4 ++++ 1 file changed, 4 insertions(+)