diff mbox series

[net-next] net: netsec: add xdp tx return bulking support

Message ID 01487b8f5167d62649339469cdd0c6d8df885902.1605605531.git.lorenzo@kernel.org
State Superseded
Headers show
Series [net-next] net: netsec: add xdp tx return bulking support | expand

Commit Message

Lorenzo Bianconi Nov. 17, 2020, 9:35 a.m. UTC
Convert netsec driver to xdp_return_frame_bulk APIs.
Rely on xdp_return_frame_rx_napi for XDP_TX in order to try to recycle
the page in the "in-irq" page_pool cache.

Co-developed-by: Jesper Dangaard Brouer <brouer@redhat.com>
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
This patch is just compile tested, I have not carried out any run test
---
 drivers/net/ethernet/socionext/netsec.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

Comments

Jakub Kicinski Nov. 20, 2020, 6 p.m. UTC | #1
On Tue, 17 Nov 2020 10:35:28 +0100 Lorenzo Bianconi wrote:
> Convert netsec driver to xdp_return_frame_bulk APIs.
> Rely on xdp_return_frame_rx_napi for XDP_TX in order to try to recycle
> the page in the "in-irq" page_pool cache.
> 
> Co-developed-by: Jesper Dangaard Brouer <brouer@redhat.com>
> Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
> Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
> ---
> This patch is just compile tested, I have not carried out any run test

Doesn't look like anyone will test this so applied, thanks!
Ilias Apalodimas Nov. 20, 2020, 6:07 p.m. UTC | #2
Hi Jakub, 

On Fri, Nov 20, 2020 at 10:00:07AM -0800, Jakub Kicinski wrote:
> On Tue, 17 Nov 2020 10:35:28 +0100 Lorenzo Bianconi wrote:
> > Convert netsec driver to xdp_return_frame_bulk APIs.
> > Rely on xdp_return_frame_rx_napi for XDP_TX in order to try to recycle
> > the page in the "in-irq" page_pool cache.
> > 
> > Co-developed-by: Jesper Dangaard Brouer <brouer@redhat.com>
> > Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
> > Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
> > ---
> > This patch is just compile tested, I have not carried out any run test
> 
> Doesn't look like anyone will test this so applied, thanks!

I had everything applied trying to test, but there was an issue with the PHY the
socionext board uses [1].

In any case the patch looks correct, so you can keep it and I'll report any 
problems once I short the box out.

[1] https://lore.kernel.org/netdev/20201017151132.GK456889@lunn.ch/T/

Cheers
/Ilias
Jakub Kicinski Nov. 20, 2020, 6:14 p.m. UTC | #3
On Fri, 20 Nov 2020 20:07:13 +0200 Ilias Apalodimas wrote:
> On Fri, Nov 20, 2020 at 10:00:07AM -0800, Jakub Kicinski wrote:
> > On Tue, 17 Nov 2020 10:35:28 +0100 Lorenzo Bianconi wrote:  
> > > Convert netsec driver to xdp_return_frame_bulk APIs.
> > > Rely on xdp_return_frame_rx_napi for XDP_TX in order to try to recycle
> > > the page in the "in-irq" page_pool cache.
> > > 
> > > Co-developed-by: Jesper Dangaard Brouer <brouer@redhat.com>
> > > Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
> > > Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
> > > ---
> > > This patch is just compile tested, I have not carried out any run test  
> > 
> > Doesn't look like anyone will test this so applied, thanks!  
> 
> I had everything applied trying to test, but there was an issue with the PHY the
> socionext board uses [1].

FWIW feel free to send a note saying you need more time.

> In any case the patch looks correct, so you can keep it and I'll report any 
> problems once I short the box out.

Cool, fingers crossed :)
Ilias Apalodimas Dec. 4, 2020, 2:07 p.m. UTC | #4
Hi Jakub, 

On Fri, Nov 20, 2020 at 10:14:34AM -0800, Jakub Kicinski wrote:
> On Fri, 20 Nov 2020 20:07:13 +0200 Ilias Apalodimas wrote:
> > On Fri, Nov 20, 2020 at 10:00:07AM -0800, Jakub Kicinski wrote:
> > > On Tue, 17 Nov 2020 10:35:28 +0100 Lorenzo Bianconi wrote:  
> > > > Convert netsec driver to xdp_return_frame_bulk APIs.
> > > > Rely on xdp_return_frame_rx_napi for XDP_TX in order to try to recycle
> > > > the page in the "in-irq" page_pool cache.
> > > > 
> > > > Co-developed-by: Jesper Dangaard Brouer <brouer@redhat.com>
> > > > Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
> > > > Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
> > > > ---
> > > > This patch is just compile tested, I have not carried out any run test  
> > > 
> > > Doesn't look like anyone will test this so applied, thanks!  
> > 
> > I had everything applied trying to test, but there was an issue with the PHY the
> > socionext board uses [1].
> 
> FWIW feel free to send a note saying you need more time.
> 
> > In any case the patch looks correct, so you can keep it and I'll report any 
> > problems once I short the box out.
> 
> Cool, fingers crossed :)

FWIW I did eventually test this. 
I can't see anything wrong with it.

Cheers
/Ilias
Jakub Kicinski Dec. 4, 2020, 4:08 p.m. UTC | #5
On Fri, 4 Dec 2020 16:07:54 +0200 Ilias Apalodimas wrote:
> > > I had everything applied trying to test, but there was an issue with the PHY the
> > > socionext board uses [1].  
> > 
> > FWIW feel free to send a note saying you need more time.
> >   
> > > In any case the patch looks correct, so you can keep it and I'll report any 
> > > problems once I short the box out.  
> > 
> > Cool, fingers crossed :)  
> 
> FWIW I did eventually test this. 
> I can't see anything wrong with it.

Good to know, thank you!
diff mbox series

Patch

diff --git a/drivers/net/ethernet/socionext/netsec.c b/drivers/net/ethernet/socionext/netsec.c
index 1503cc9ec6e2..536aa8961dc6 100644
--- a/drivers/net/ethernet/socionext/netsec.c
+++ b/drivers/net/ethernet/socionext/netsec.c
@@ -631,6 +631,7 @@  static void netsec_set_rx_de(struct netsec_priv *priv,
 static bool netsec_clean_tx_dring(struct netsec_priv *priv)
 {
 	struct netsec_desc_ring *dring = &priv->desc_ring[NETSEC_RING_TX];
+	struct xdp_frame_bulk bq;
 	struct netsec_de *entry;
 	int tail = dring->tail;
 	unsigned int bytes;
@@ -639,8 +640,11 @@  static bool netsec_clean_tx_dring(struct netsec_priv *priv)
 	spin_lock(&dring->lock);
 
 	bytes = 0;
+	xdp_frame_bulk_init(&bq);
 	entry = dring->vaddr + DESC_SZ * tail;
 
+	rcu_read_lock(); /* need for xdp_return_frame_bulk */
+
 	while (!(entry->attr & (1U << NETSEC_TX_SHIFT_OWN_FIELD)) &&
 	       cnt < DESC_NUM) {
 		struct netsec_desc *desc;
@@ -665,7 +669,10 @@  static bool netsec_clean_tx_dring(struct netsec_priv *priv)
 			dev_kfree_skb(desc->skb);
 		} else {
 			bytes += desc->xdpf->len;
-			xdp_return_frame(desc->xdpf);
+			if (desc->buf_type == TYPE_NETSEC_XDP_TX)
+				xdp_return_frame_rx_napi(desc->xdpf);
+			else
+				xdp_return_frame_bulk(desc->xdpf, &bq);
 		}
 next:
 		/* clean up so netsec_uninit_pkt_dring() won't free the skb
@@ -684,6 +691,9 @@  static bool netsec_clean_tx_dring(struct netsec_priv *priv)
 		entry = dring->vaddr + DESC_SZ * tail;
 		cnt++;
 	}
+	xdp_flush_frame_bulk(&bq);
+
+	rcu_read_unlock();
 
 	spin_unlock(&dring->lock);