diff mbox series

[net-next,3/3] net: update netdev_rx_csum_fault() print dump only once

Message ID 20210422194738.2175542-4-tannerlove.kernel@gmail.com
State New
Headers show
Series net: update netdev_rx_csum_fault() print dump only once | expand

Commit Message

Tanner Love April 22, 2021, 7:47 p.m. UTC
From: Tanner Love <tannerlove@google.com>

Printing this stack dump multiple times does not provide additional
useful information, and consumes time in the data path. Printing once
is sufficient.

Signed-off-by: Tanner Love <tannerlove@google.com>
Acked-by: Eric Dumazet <edumazet@google.com>
Acked-by: Mahesh Bandewar <maheshb@google.com>
---
 net/core/dev.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

Comments

Yunsheng Lin April 23, 2021, 12:42 a.m. UTC | #1
On 2021/4/23 3:47, Tanner Love wrote:
> From: Tanner Love <tannerlove@google.com>

> 

> Printing this stack dump multiple times does not provide additional

> useful information, and consumes time in the data path. Printing once

> is sufficient.

> 

> Signed-off-by: Tanner Love <tannerlove@google.com>

> Acked-by: Eric Dumazet <edumazet@google.com>

> Acked-by: Mahesh Bandewar <maheshb@google.com>

> ---

>  net/core/dev.c | 10 +++++++---

>  1 file changed, 7 insertions(+), 3 deletions(-)

> 

> diff --git a/net/core/dev.c b/net/core/dev.c

> index d9bf63dbe4fd..26b82b5d8563 100644

> --- a/net/core/dev.c

> +++ b/net/core/dev.c

> @@ -148,6 +148,7 @@

>  #include <net/devlink.h>

>  #include <linux/pm_runtime.h>

>  #include <linux/prandom.h>

> +#include <linux/once.h>

>  

>  #include "net-sysfs.h"

>  

> @@ -3487,13 +3488,16 @@ EXPORT_SYMBOL(__skb_gso_segment);

>  

>  /* Take action when hardware reception checksum errors are detected. */

>  #ifdef CONFIG_BUG

> -void netdev_rx_csum_fault(struct net_device *dev, struct sk_buff *skb)

> +static void do_netdev_rx_csum_fault(struct net_device *dev, struct sk_buff *skb)

>  {

> -	if (net_ratelimit()) {

>  		pr_err("%s: hw csum failure\n", dev ? dev->name : "<unknown>");

>  		skb_dump(KERN_ERR, skb, true);

>  		dump_stack();


Once the "if ()" is removed, one level of indent seems enough?

> -	}

> +}

> +

> +void netdev_rx_csum_fault(struct net_device *dev, struct sk_buff *skb)

> +{

> +	DO_ONCE_LITE(do_netdev_rx_csum_fault, dev, skb);

>  }

>  EXPORT_SYMBOL(netdev_rx_csum_fault);

>  #endif

>
diff mbox series

Patch

diff --git a/net/core/dev.c b/net/core/dev.c
index d9bf63dbe4fd..26b82b5d8563 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -148,6 +148,7 @@ 
 #include <net/devlink.h>
 #include <linux/pm_runtime.h>
 #include <linux/prandom.h>
+#include <linux/once.h>
 
 #include "net-sysfs.h"
 
@@ -3487,13 +3488,16 @@  EXPORT_SYMBOL(__skb_gso_segment);
 
 /* Take action when hardware reception checksum errors are detected. */
 #ifdef CONFIG_BUG
-void netdev_rx_csum_fault(struct net_device *dev, struct sk_buff *skb)
+static void do_netdev_rx_csum_fault(struct net_device *dev, struct sk_buff *skb)
 {
-	if (net_ratelimit()) {
 		pr_err("%s: hw csum failure\n", dev ? dev->name : "<unknown>");
 		skb_dump(KERN_ERR, skb, true);
 		dump_stack();
-	}
+}
+
+void netdev_rx_csum_fault(struct net_device *dev, struct sk_buff *skb)
+{
+	DO_ONCE_LITE(do_netdev_rx_csum_fault, dev, skb);
 }
 EXPORT_SYMBOL(netdev_rx_csum_fault);
 #endif