linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next] net: stmmac: call stmmac_finalize_xdp_rx() on a condition
@ 2023-03-08 16:26 Leesoo Ahn
  2023-03-09 13:40 ` Simon Horman
  0 siblings, 1 reply; 4+ messages in thread
From: Leesoo Ahn @ 2023-03-08 16:26 UTC (permalink / raw)
  To: lsahn
  Cc: Giuseppe Cavallaro, Alexandre Torgue, Jose Abreu,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Maxime Coquelin, Alexei Starovoitov, Daniel Borkmann,
	Jesper Dangaard Brouer, John Fastabend, netdev, linux-stm32,
	linux-arm-kernel, linux-kernel, bpf

The current codebase calls the function no matter net device has XDP
programs or not. So the finalize function is being called everytime when RX
bottom-half in progress. It needs a few machine instructions for nothing
in the case that XDP programs are not attached at all.

Lets it call the function on a condition that if xdp_status variable has
not zero value. That means XDP programs are attached to the net device
and it should be finalized based on the variable.

The following instructions show that it's better than calling the function
unconditionally.

  0.31 │6b8:   ldr     w0, [sp, #196]
       │    ┌──cbz     w0, 6cc
       │    │  mov     x1, x0
       │    │  mov     x0, x27
       │    │→ bl     stmmac_finalize_xdp_rx
       │6cc:└─→ldr    x1, [sp, #176]

with 'if (xdp_status)' statement, jump to '6cc' label if xdp_status has
zero value.

Signed-off-by: Leesoo Ahn <lsahn@ooseel.net>
---
 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index e4902a7bb61e..53c6e9b3a0c2 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -5145,7 +5145,8 @@ static int stmmac_rx_zc(struct stmmac_priv *priv, int limit, u32 queue)
 		rx_q->state.len = len;
 	}
 
-	stmmac_finalize_xdp_rx(priv, xdp_status);
+	if (xdp_status)
+		stmmac_finalize_xdp_rx(priv, xdp_status);
 
 	priv->xstats.rx_pkt_n += count;
 	priv->xstats.rxq_stats[queue].rx_pkt_n += count;
@@ -5425,7 +5426,8 @@ static int stmmac_rx(struct stmmac_priv *priv, int limit, u32 queue)
 		rx_q->state.len = len;
 	}
 
-	stmmac_finalize_xdp_rx(priv, xdp_status);
+	if (xdp_status)
+		stmmac_finalize_xdp_rx(priv, xdp_status);
 
 	stmmac_rx_refill(priv, queue);
 
-- 
2.34.1


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

* Re: [PATCH net-next] net: stmmac: call stmmac_finalize_xdp_rx() on a condition
  2023-03-08 16:26 [PATCH net-next] net: stmmac: call stmmac_finalize_xdp_rx() on a condition Leesoo Ahn
@ 2023-03-09 13:40 ` Simon Horman
  2023-03-09 15:08   ` Leesoo Ahn
  0 siblings, 1 reply; 4+ messages in thread
From: Simon Horman @ 2023-03-09 13:40 UTC (permalink / raw)
  To: Leesoo Ahn
  Cc: Giuseppe Cavallaro, Alexandre Torgue, Jose Abreu,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Maxime Coquelin, Alexei Starovoitov, Daniel Borkmann,
	Jesper Dangaard Brouer, John Fastabend, netdev, linux-stm32,
	linux-arm-kernel, linux-kernel, bpf

On Thu, Mar 09, 2023 at 01:26:18AM +0900, Leesoo Ahn wrote:
> The current codebase calls the function no matter net device has XDP
> programs or not. So the finalize function is being called everytime when RX
> bottom-half in progress. It needs a few machine instructions for nothing
> in the case that XDP programs are not attached at all.
> 
> Lets it call the function on a condition that if xdp_status variable has
> not zero value. That means XDP programs are attached to the net device
> and it should be finalized based on the variable.
> 
> The following instructions show that it's better than calling the function
> unconditionally.
> 
>   0.31 │6b8:   ldr     w0, [sp, #196]
>        │    ┌──cbz     w0, 6cc
>        │    │  mov     x1, x0
>        │    │  mov     x0, x27
>        │    │→ bl     stmmac_finalize_xdp_rx
>        │6cc:└─→ldr    x1, [sp, #176]
> 
> with 'if (xdp_status)' statement, jump to '6cc' label if xdp_status has
> zero value.
> 
> Signed-off-by: Leesoo Ahn <lsahn@ooseel.net>

Hi Leesoo,

I am curious to know if you considered going a step further and using
a static key.

Link: https://www.kernel.org/doc/html/latest/staging/static-keys.html

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

* Re: [PATCH net-next] net: stmmac: call stmmac_finalize_xdp_rx() on a condition
  2023-03-09 13:40 ` Simon Horman
@ 2023-03-09 15:08   ` Leesoo Ahn
  2023-03-09 16:34     ` Simon Horman
  0 siblings, 1 reply; 4+ messages in thread
From: Leesoo Ahn @ 2023-03-09 15:08 UTC (permalink / raw)
  To: Simon Horman
  Cc: Giuseppe Cavallaro, Alexandre Torgue, Jose Abreu,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Maxime Coquelin, Alexei Starovoitov, Daniel Borkmann,
	Jesper Dangaard Brouer, John Fastabend, netdev, linux-stm32,
	linux-arm-kernel, linux-kernel, bpf



On 23. 3. 9. 22:40, Simon Horman wrote:
> On Thu, Mar 09, 2023 at 01:26:18AM +0900, Leesoo Ahn wrote:
>> The current codebase calls the function no matter net device has XDP
>> programs or not. So the finalize function is being called everytime when RX
>> bottom-half in progress. It needs a few machine instructions for nothing
>> in the case that XDP programs are not attached at all.
>>
>> Lets it call the function on a condition that if xdp_status variable has
>> not zero value. That means XDP programs are attached to the net device
>> and it should be finalized based on the variable.
>>
>> The following instructions show that it's better than calling the function
>> unconditionally.
>>
>>    0.31 │6b8:   ldr     w0, [sp, #196]
>>         │    ┌──cbz     w0, 6cc
>>         │    │  mov     x1, x0
>>         │    │  mov     x0, x27
>>         │    │→ bl     stmmac_finalize_xdp_rx
>>         │6cc:└─→ldr    x1, [sp, #176]
>>
>> with 'if (xdp_status)' statement, jump to '6cc' label if xdp_status has
>> zero value.
>>
>> Signed-off-by: Leesoo Ahn <lsahn@ooseel.net>
> Hi Leesoo,
>
> I am curious to know if you considered going a step further and using
> a static key.
>
> Link: https://www.kernel.org/doc/html/latest/staging/static-keys.html

Thank you for the review.

The function must be called for only XDP_TX or XDP_REDIRECT cases.
So using a static key doesn't look good and the commit message is not 
clear for 'why' as well.
I think that's why you suggested for using 'static key' by the latter 
reason.

I will edit the message and post v2 soon.

Best regards,
Leesoo

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

* Re: [PATCH net-next] net: stmmac: call stmmac_finalize_xdp_rx() on a condition
  2023-03-09 15:08   ` Leesoo Ahn
@ 2023-03-09 16:34     ` Simon Horman
  0 siblings, 0 replies; 4+ messages in thread
From: Simon Horman @ 2023-03-09 16:34 UTC (permalink / raw)
  To: Leesoo Ahn
  Cc: Giuseppe Cavallaro, Alexandre Torgue, Jose Abreu,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Maxime Coquelin, Alexei Starovoitov, Daniel Borkmann,
	Jesper Dangaard Brouer, John Fastabend, netdev, linux-stm32,
	linux-arm-kernel, linux-kernel, bpf

On Fri, Mar 10, 2023 at 12:08:29AM +0900, Leesoo Ahn wrote:
> 
> 
> On 23. 3. 9. 22:40, Simon Horman wrote:
> > On Thu, Mar 09, 2023 at 01:26:18AM +0900, Leesoo Ahn wrote:
> > > The current codebase calls the function no matter net device has XDP
> > > programs or not. So the finalize function is being called everytime when RX
> > > bottom-half in progress. It needs a few machine instructions for nothing
> > > in the case that XDP programs are not attached at all.
> > > 
> > > Lets it call the function on a condition that if xdp_status variable has
> > > not zero value. That means XDP programs are attached to the net device
> > > and it should be finalized based on the variable.
> > > 
> > > The following instructions show that it's better than calling the function
> > > unconditionally.
> > > 
> > >    0.31 │6b8:   ldr     w0, [sp, #196]
> > >         │    ┌──cbz     w0, 6cc
> > >         │    │  mov     x1, x0
> > >         │    │  mov     x0, x27
> > >         │    │→ bl     stmmac_finalize_xdp_rx
> > >         │6cc:└─→ldr    x1, [sp, #176]
> > > 
> > > with 'if (xdp_status)' statement, jump to '6cc' label if xdp_status has
> > > zero value.
> > > 
> > > Signed-off-by: Leesoo Ahn <lsahn@ooseel.net>
> > Hi Leesoo,
> > 
> > I am curious to know if you considered going a step further and using
> > a static key.
> > 
> > Link: https://www.kernel.org/doc/html/latest/staging/static-keys.html
> 
> Thank you for the review.
> 
> The function must be called for only XDP_TX or XDP_REDIRECT cases.
> So using a static key doesn't look good and the commit message is not clear
> for 'why' as well.
> I think that's why you suggested for using 'static key' by the latter
> reason.

Yes, my suggestion was based on the performance optimisation
aspect of your patch.

> I will edit the message and post v2 soon.

Thanks

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

end of thread, other threads:[~2023-03-09 16:47 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-08 16:26 [PATCH net-next] net: stmmac: call stmmac_finalize_xdp_rx() on a condition Leesoo Ahn
2023-03-09 13:40 ` Simon Horman
2023-03-09 15:08   ` Leesoo Ahn
2023-03-09 16:34     ` Simon Horman

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).