All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net-next 0/3] net: qualcomm: rmnet: Updates 2018-05-14
@ 2018-05-14 20:08 Subash Abhinov Kasiviswanathan
  2018-05-14 20:08 ` [PATCH net-next 1/3] net: qualcomm: rmnet: Capture all drops in transmit path Subash Abhinov Kasiviswanathan
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Subash Abhinov Kasiviswanathan @ 2018-05-14 20:08 UTC (permalink / raw)
  To: davem, netdev; +Cc: Subash Abhinov Kasiviswanathan

This series contains some minor updates for rmnet driver.

Patch 1 adds tx_drops counter to more places.
Patch 2 adds ethtool private stats support to make it easy to debug
the checksum offload path.
Patch 3 is a cleanup in command packet processing path.


Subash Abhinov Kasiviswanathan (3):
  net: qualcomm: rmnet: Capture all drops in transmit path
  net: qualcomm: rmnet: Add support for ethtool private stats
  net: qualcomm: rmnet: Remove redundant command check

 drivers/net/ethernet/qualcomm/rmnet/rmnet_config.h | 13 +++++
 .../net/ethernet/qualcomm/rmnet/rmnet_handlers.c   | 21 ++++----
 .../ethernet/qualcomm/rmnet/rmnet_map_command.c    | 14 ++---
 .../net/ethernet/qualcomm/rmnet/rmnet_map_data.c   | 59 +++++++++++++++++-----
 drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.c    | 51 +++++++++++++++++++
 5 files changed, 122 insertions(+), 36 deletions(-)

-- 
1.9.1

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

* [PATCH net-next 1/3] net: qualcomm: rmnet: Capture all drops in transmit path
  2018-05-14 20:08 [PATCH net-next 0/3] net: qualcomm: rmnet: Updates 2018-05-14 Subash Abhinov Kasiviswanathan
@ 2018-05-14 20:08 ` Subash Abhinov Kasiviswanathan
  2018-05-14 20:08 ` [PATCH net-next 2/3] net: qualcomm: rmnet: Add support for ethtool private stats Subash Abhinov Kasiviswanathan
  2018-05-14 20:08 ` [PATCH net-next 3/3] net: qualcomm: rmnet: Remove redundant command check Subash Abhinov Kasiviswanathan
  2 siblings, 0 replies; 9+ messages in thread
From: Subash Abhinov Kasiviswanathan @ 2018-05-14 20:08 UTC (permalink / raw)
  To: davem, netdev; +Cc: Subash Abhinov Kasiviswanathan

Packets in transmit path could potentially be dropped if there were
errors while adding the MAP header or the checksum header.
Increment the tx_drops stats in these cases.

Additionally, refactor the code to free the packet and increment
the tx_drops stat under a single label.

Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
---
 .../net/ethernet/qualcomm/rmnet/rmnet_handlers.c    | 21 ++++++++++-----------
 1 file changed, 10 insertions(+), 11 deletions(-)

diff --git a/drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c b/drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c
index 6fcd586..7fd86d4 100644
--- a/drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c
+++ b/drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c
@@ -148,7 +148,7 @@ static int rmnet_map_egress_handler(struct sk_buff *skb,
 
 	if (skb_headroom(skb) < required_headroom) {
 		if (pskb_expand_head(skb, required_headroom, 0, GFP_KERNEL))
-			goto fail;
+			return -ENOMEM;
 	}
 
 	if (port->data_format & RMNET_FLAGS_EGRESS_MAP_CKSUMV4)
@@ -156,17 +156,13 @@ static int rmnet_map_egress_handler(struct sk_buff *skb,
 
 	map_header = rmnet_map_add_map_header(skb, additional_header_len, 0);
 	if (!map_header)
-		goto fail;
+		return -ENOMEM;
 
 	map_header->mux_id = mux_id;
 
 	skb->protocol = htons(ETH_P_MAP);
 
 	return 0;
-
-fail:
-	kfree_skb(skb);
-	return -ENOMEM;
 }
 
 static void
@@ -228,15 +224,18 @@ void rmnet_egress_handler(struct sk_buff *skb)
 	mux_id = priv->mux_id;
 
 	port = rmnet_get_port(skb->dev);
-	if (!port) {
-		kfree_skb(skb);
-		return;
-	}
+	if (!port)
+		goto drop;
 
 	if (rmnet_map_egress_handler(skb, port, mux_id, orig_dev))
-		return;
+		goto drop;
 
 	rmnet_vnd_tx_fixup(skb, orig_dev);
 
 	dev_queue_xmit(skb);
+	return;
+
+drop:
+	this_cpu_inc(priv->pcpu_stats->stats.tx_drops);
+	kfree_skb(skb);
 }
-- 
1.9.1

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

* [PATCH net-next 2/3] net: qualcomm: rmnet: Add support for ethtool private stats
  2018-05-14 20:08 [PATCH net-next 0/3] net: qualcomm: rmnet: Updates 2018-05-14 Subash Abhinov Kasiviswanathan
  2018-05-14 20:08 ` [PATCH net-next 1/3] net: qualcomm: rmnet: Capture all drops in transmit path Subash Abhinov Kasiviswanathan
@ 2018-05-14 20:08 ` Subash Abhinov Kasiviswanathan
  2018-05-15  4:42   ` kbuild test robot
                     ` (3 more replies)
  2018-05-14 20:08 ` [PATCH net-next 3/3] net: qualcomm: rmnet: Remove redundant command check Subash Abhinov Kasiviswanathan
  2 siblings, 4 replies; 9+ messages in thread
From: Subash Abhinov Kasiviswanathan @ 2018-05-14 20:08 UTC (permalink / raw)
  To: davem, netdev; +Cc: Subash Abhinov Kasiviswanathan

Add ethtool private stats handler to debug the handling of packets
with checksum offload header / trailer. This allows to keep track of
the number of packets for which hardware computes the checksum and
counts and reasons where checksum computation was skipped in hardware
and was done in the network stack.

Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
---
 drivers/net/ethernet/qualcomm/rmnet/rmnet_config.h | 13 +++++
 .../net/ethernet/qualcomm/rmnet/rmnet_map_data.c   | 59 +++++++++++++++++-----
 drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.c    | 51 +++++++++++++++++++
 3 files changed, 109 insertions(+), 14 deletions(-)

diff --git a/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.h b/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.h
index 0b5b5da..34ac45a 100644
--- a/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.h
+++ b/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.h
@@ -54,11 +54,24 @@ struct rmnet_pcpu_stats {
 	struct u64_stats_sync syncp;
 };
 
+struct rmnet_priv_stats {
+	u64 csum_ok;
+	u64 csum_valid_unset;
+	u64 csum_validation_failed;
+	u64 csum_err_bad_buffer;
+	u64 csum_err_invalid_ip_version;
+	u64 csum_err_invalid_transport;
+	u64 csum_fragmented_pkt;
+	u64 csum_skipped;
+	u64 csum_sw;
+};
+
 struct rmnet_priv {
 	u8 mux_id;
 	struct net_device *real_dev;
 	struct rmnet_pcpu_stats __percpu *pcpu_stats;
 	struct gro_cells gro_cells;
+	struct rmnet_priv_stats stats;
 };
 
 struct rmnet_port *rmnet_get_port(struct net_device *real_dev);
diff --git a/drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c b/drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c
index a6ea094..3453b66 100644
--- a/drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c
+++ b/drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c
@@ -48,7 +48,8 @@ static __sum16 *rmnet_map_get_csum_field(unsigned char protocol,
 
 static int
 rmnet_map_ipv4_dl_csum_trailer(struct sk_buff *skb,
-			       struct rmnet_map_dl_csum_trailer *csum_trailer)
+			       struct rmnet_map_dl_csum_trailer *csum_trailer,
+			       struct rmnet_priv *priv)
 {
 	__sum16 *csum_field, csum_temp, pseudo_csum, hdr_csum, ip_payload_csum;
 	u16 csum_value, csum_value_final;
@@ -58,19 +59,25 @@ static __sum16 *rmnet_map_get_csum_field(unsigned char protocol,
 
 	ip4h = (struct iphdr *)(skb->data);
 	if ((ntohs(ip4h->frag_off) & IP_MF) ||
-	    ((ntohs(ip4h->frag_off) & IP_OFFSET) > 0))
+	    ((ntohs(ip4h->frag_off) & IP_OFFSET) > 0)) {
+		priv->stats.csum_fragmented_pkt++;
 		return -EOPNOTSUPP;
+	}
 
 	txporthdr = skb->data + ip4h->ihl * 4;
 
 	csum_field = rmnet_map_get_csum_field(ip4h->protocol, txporthdr);
 
-	if (!csum_field)
+	if (!csum_field) {
+		priv->stats.csum_err_invalid_transport++;
 		return -EPROTONOSUPPORT;
+	}
 
 	/* RFC 768 - Skip IPv4 UDP packets where sender checksum field is 0 */
-	if (*csum_field == 0 && ip4h->protocol == IPPROTO_UDP)
+	if (*csum_field == 0 && ip4h->protocol == IPPROTO_UDP) {
+		priv->stats.csum_skipped++;
 		return 0;
+	}
 
 	csum_value = ~ntohs(csum_trailer->csum_value);
 	hdr_csum = ~ip_fast_csum(ip4h, (int)ip4h->ihl);
@@ -102,16 +109,20 @@ static __sum16 *rmnet_map_get_csum_field(unsigned char protocol,
 		}
 	}
 
-	if (csum_value_final == ntohs((__force __be16)*csum_field))
+	if (csum_value_final == ntohs((__force __be16)*csum_field)) {
+		priv->stats.csum_ok++;
 		return 0;
-	else
+	} else {
+		priv->stats.csum_validation_failed++;
 		return -EINVAL;
+	}
 }
 
 #if IS_ENABLED(CONFIG_IPV6)
 static int
 rmnet_map_ipv6_dl_csum_trailer(struct sk_buff *skb,
-			       struct rmnet_map_dl_csum_trailer *csum_trailer)
+			       struct rmnet_map_dl_csum_trailer *csum_trailer,
+			       struct rmnet_priv *priv)
 {
 	__sum16 *csum_field, ip6_payload_csum, pseudo_csum, csum_temp;
 	u16 csum_value, csum_value_final;
@@ -125,8 +136,10 @@ static __sum16 *rmnet_map_get_csum_field(unsigned char protocol,
 	txporthdr = skb->data + sizeof(struct ipv6hdr);
 	csum_field = rmnet_map_get_csum_field(ip6h->nexthdr, txporthdr);
 
-	if (!csum_field)
+	if (!csum_field) {
+		priv->stats.csum_err_invalid_transport++;
 		return -EPROTONOSUPPORT;
+	}
 
 	csum_value = ~ntohs(csum_trailer->csum_value);
 	ip6_hdr_csum = (__force __be16)
@@ -164,10 +177,13 @@ static __sum16 *rmnet_map_get_csum_field(unsigned char protocol,
 		}
 	}
 
-	if (csum_value_final == ntohs((__force __be16)*csum_field))
+	if (csum_value_final == ntohs((__force __be16)*csum_field)) {
+		priv->stats.csum_ok++;
 		return 0;
-	else
+	} else {
+		priv->stats.csum_validation_failed++;
 		return -EINVAL;
+	}
 }
 #endif
 
@@ -339,24 +355,33 @@ struct sk_buff *rmnet_map_deaggregate(struct sk_buff *skb,
  */
 int rmnet_map_checksum_downlink_packet(struct sk_buff *skb, u16 len)
 {
+	struct rmnet_priv *priv = netdev_priv(skb->dev);
 	struct rmnet_map_dl_csum_trailer *csum_trailer;
 
-	if (unlikely(!(skb->dev->features & NETIF_F_RXCSUM)))
+	if (unlikely(!(skb->dev->features & NETIF_F_RXCSUM))) {
+		priv->stats.csum_sw++;
 		return -EOPNOTSUPP;
+	}
 
 	csum_trailer = (struct rmnet_map_dl_csum_trailer *)(skb->data + len);
 
-	if (!csum_trailer->valid)
+	if (!csum_trailer->valid) {
+		priv->stats.csum_valid_unset++;
 		return -EINVAL;
+	}
 
 	if (skb->protocol == htons(ETH_P_IP))
-		return rmnet_map_ipv4_dl_csum_trailer(skb, csum_trailer);
+		return rmnet_map_ipv4_dl_csum_trailer(skb, csum_trailer, priv);
 	else if (skb->protocol == htons(ETH_P_IPV6))
 #if IS_ENABLED(CONFIG_IPV6)
-		return rmnet_map_ipv6_dl_csum_trailer(skb, csum_trailer);
+		return rmnet_map_ipv6_dl_csum_trailer(skb, csum_trailer, priv);
 #else
+		priv->stats.csum_err_invalid_ip_version++;
 		return -EPROTONOSUPPORT;
 #endif
+	else
+		priv->stats.csum_err_invalid_ip_version++;
+		return -EPROTONOSUPPORT;
 
 	return 0;
 }
@@ -367,6 +392,7 @@ int rmnet_map_checksum_downlink_packet(struct sk_buff *skb, u16 len)
 void rmnet_map_checksum_uplink_packet(struct sk_buff *skb,
 				      struct net_device *orig_dev)
 {
+	struct rmnet_priv *priv = netdev_priv(orig_dev);
 	struct rmnet_map_ul_csum_header *ul_header;
 	void *iphdr;
 
@@ -389,8 +415,11 @@ void rmnet_map_checksum_uplink_packet(struct sk_buff *skb,
 			rmnet_map_ipv6_ul_csum_header(iphdr, ul_header, skb);
 			return;
 #else
+			priv->stats.csum_err_invalid_ip_version++;
 			goto sw_csum;
 #endif
+		} else {
+			priv->stats.csum_err_invalid_ip_version++;
 		}
 	}
 
@@ -399,4 +428,6 @@ void rmnet_map_checksum_uplink_packet(struct sk_buff *skb,
 	ul_header->csum_insert_offset = 0;
 	ul_header->csum_enabled = 0;
 	ul_header->udp_ip4_ind = 0;
+
+	priv->stats.csum_sw++;
 }
diff --git a/drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.c b/drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.c
index 2ea16a0..4c04482 100644
--- a/drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.c
+++ b/drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.c
@@ -152,6 +152,56 @@ static void rmnet_get_stats64(struct net_device *dev,
 	.ndo_get_stats64 = rmnet_get_stats64,
 };
 
+static const char rmnet_gstrings_stats[][ETH_GSTRING_LEN] = {
+	"Checksum ok",
+	"Checksum valid bit not set",
+	"Checksum validation failed",
+	"Checksum error bad buffer",
+	"Checksum error bad ip version",
+	"Checksum error bad transport",
+	"Checksum skipped on ip fragment",
+	"Checksum skipped",
+	"Checksum computed in software",
+};
+
+static void rmnet_get_strings(struct net_device *dev, u32 stringset, u8 *buf)
+{
+	switch (stringset) {
+	case ETH_SS_STATS:
+		memcpy(buf, &rmnet_gstrings_stats,
+		       sizeof(rmnet_gstrings_stats));
+		break;
+	}
+}
+
+static int rmnet_get_sset_count(struct net_device *dev, int sset)
+{
+	switch (sset) {
+	case ETH_SS_STATS:
+		return ARRAY_SIZE(rmnet_gstrings_stats);
+	default:
+		return -EOPNOTSUPP;
+	}
+}
+
+static void rmnet_get_ethtool_stats(struct net_device *dev,
+				    struct ethtool_stats *stats, u64 *data)
+{
+	struct rmnet_priv *priv = netdev_priv(dev);
+	struct rmnet_priv_stats *st = &priv->stats;
+
+	if (!data)
+		return;
+
+	memcpy(data, st, ARRAY_SIZE(rmnet_gstrings_stats) * sizeof(u64));
+}
+
+const struct ethtool_ops rmnet_ethtool_ops = {
+	.get_ethtool_stats = rmnet_get_ethtool_stats,
+	.get_strings = rmnet_get_strings,
+	.get_sset_count = rmnet_get_sset_count,
+};
+
 /* Called by kernel whenever a new rmnet<n> device is created. Sets MTU,
  * flags, ARP type, needed headroom, etc...
  */
@@ -170,6 +220,7 @@ void rmnet_vnd_setup(struct net_device *rmnet_dev)
 	rmnet_dev->flags &= ~(IFF_BROADCAST | IFF_MULTICAST);
 
 	rmnet_dev->needs_free_netdev = true;
+	rmnet_dev->ethtool_ops = &rmnet_ethtool_ops;
 }
 
 /* Exposed API */
-- 
1.9.1

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

* [PATCH net-next 3/3] net: qualcomm: rmnet: Remove redundant command check
  2018-05-14 20:08 [PATCH net-next 0/3] net: qualcomm: rmnet: Updates 2018-05-14 Subash Abhinov Kasiviswanathan
  2018-05-14 20:08 ` [PATCH net-next 1/3] net: qualcomm: rmnet: Capture all drops in transmit path Subash Abhinov Kasiviswanathan
  2018-05-14 20:08 ` [PATCH net-next 2/3] net: qualcomm: rmnet: Add support for ethtool private stats Subash Abhinov Kasiviswanathan
@ 2018-05-14 20:08 ` Subash Abhinov Kasiviswanathan
  2 siblings, 0 replies; 9+ messages in thread
From: Subash Abhinov Kasiviswanathan @ 2018-05-14 20:08 UTC (permalink / raw)
  To: davem, netdev; +Cc: Subash Abhinov Kasiviswanathan

The command packet size is already checked once in
rmnet_map_deaggregate() for the header, packet and trailer size, so
this additional check is not needed.

Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
---
 drivers/net/ethernet/qualcomm/rmnet/rmnet_map_command.c | 14 +++-----------
 1 file changed, 3 insertions(+), 11 deletions(-)

diff --git a/drivers/net/ethernet/qualcomm/rmnet/rmnet_map_command.c b/drivers/net/ethernet/qualcomm/rmnet/rmnet_map_command.c
index 78fdad0..56a93df 100644
--- a/drivers/net/ethernet/qualcomm/rmnet/rmnet_map_command.c
+++ b/drivers/net/ethernet/qualcomm/rmnet/rmnet_map_command.c
@@ -69,17 +69,9 @@ static void rmnet_map_send_ack(struct sk_buff *skb,
 	struct rmnet_map_control_command *cmd;
 	int xmit_status;
 
-	if (port->data_format & RMNET_FLAGS_INGRESS_MAP_CKSUMV4) {
-		if (skb->len < sizeof(struct rmnet_map_header) +
-		    RMNET_MAP_GET_LENGTH(skb) +
-		    sizeof(struct rmnet_map_dl_csum_trailer)) {
-			kfree_skb(skb);
-			return;
-		}
-
-		skb_trim(skb, skb->len -
-			 sizeof(struct rmnet_map_dl_csum_trailer));
-	}
+	if (port->data_format & RMNET_FLAGS_INGRESS_MAP_CKSUMV4)
+		skb_trim(skb,
+			 skb->len - sizeof(struct rmnet_map_dl_csum_trailer));
 
 	skb->protocol = htons(ETH_P_MAP);
 
-- 
1.9.1

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

* Re: [PATCH net-next 2/3] net: qualcomm: rmnet: Add support for ethtool private stats
  2018-05-14 20:08 ` [PATCH net-next 2/3] net: qualcomm: rmnet: Add support for ethtool private stats Subash Abhinov Kasiviswanathan
@ 2018-05-15  4:42   ` kbuild test robot
  2018-05-15  8:41   ` [RFC PATCH] net: qualcomm: rmnet: rmnet_ethtool_ops can be static kbuild test robot
                     ` (2 subsequent siblings)
  3 siblings, 0 replies; 9+ messages in thread
From: kbuild test robot @ 2018-05-15  4:42 UTC (permalink / raw)
  To: Subash Abhinov Kasiviswanathan
  Cc: kbuild-all, davem, netdev, Subash Abhinov Kasiviswanathan

[-- Attachment #1: Type: text/plain, Size: 2578 bytes --]

Hi Subash,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on net-next/master]

url:    https://github.com/0day-ci/linux/commits/Subash-Abhinov-Kasiviswanathan/net-qualcomm-rmnet-Updates-2018-05-14/20180515-115355
config: i386-allmodconfig (attached as .config)
compiler: gcc-7 (Debian 7.3.0-16) 7.3.0
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

All warnings (new ones prefixed by >>):

   drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c: In function 'rmnet_map_checksum_downlink_packet':
>> drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c:382:2: warning: this 'else' clause does not guard... [-Wmisleading-indentation]
     else
     ^~~~
   drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c:384:3: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else'
      return -EPROTONOSUPPORT;
      ^~~~~~

vim +/else +382 drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c

   349	
   350	/* Validates packet checksums. Function takes a pointer to
   351	 * the beginning of a buffer which contains the IP payload +
   352	 * padding + checksum trailer.
   353	 * Only IPv4 and IPv6 are supported along with TCP & UDP.
   354	 * Fragmented or tunneled packets are not supported.
   355	 */
   356	int rmnet_map_checksum_downlink_packet(struct sk_buff *skb, u16 len)
   357	{
   358		struct rmnet_priv *priv = netdev_priv(skb->dev);
   359		struct rmnet_map_dl_csum_trailer *csum_trailer;
   360	
   361		if (unlikely(!(skb->dev->features & NETIF_F_RXCSUM))) {
   362			priv->stats.csum_sw++;
   363			return -EOPNOTSUPP;
   364		}
   365	
   366		csum_trailer = (struct rmnet_map_dl_csum_trailer *)(skb->data + len);
   367	
   368		if (!csum_trailer->valid) {
   369			priv->stats.csum_valid_unset++;
   370			return -EINVAL;
   371		}
   372	
   373		if (skb->protocol == htons(ETH_P_IP))
   374			return rmnet_map_ipv4_dl_csum_trailer(skb, csum_trailer, priv);
   375		else if (skb->protocol == htons(ETH_P_IPV6))
   376	#if IS_ENABLED(CONFIG_IPV6)
   377			return rmnet_map_ipv6_dl_csum_trailer(skb, csum_trailer, priv);
   378	#else
   379			priv->stats.csum_err_invalid_ip_version++;
   380			return -EPROTONOSUPPORT;
   381	#endif
 > 382		else
   383			priv->stats.csum_err_invalid_ip_version++;
   384			return -EPROTONOSUPPORT;
   385	
   386		return 0;
   387	}
   388	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 63034 bytes --]

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

* Re: [PATCH net-next 2/3] net: qualcomm: rmnet: Add support for ethtool private stats
  2018-05-14 20:08 ` [PATCH net-next 2/3] net: qualcomm: rmnet: Add support for ethtool private stats Subash Abhinov Kasiviswanathan
  2018-05-15  4:42   ` kbuild test robot
  2018-05-15  8:41   ` [RFC PATCH] net: qualcomm: rmnet: rmnet_ethtool_ops can be static kbuild test robot
@ 2018-05-15  8:41   ` kbuild test robot
  2018-05-15 18:09     ` Subash Abhinov Kasiviswanathan
  2018-05-15 23:16   ` kbuild test robot
  3 siblings, 1 reply; 9+ messages in thread
From: kbuild test robot @ 2018-05-15  8:41 UTC (permalink / raw)
  To: Subash Abhinov Kasiviswanathan
  Cc: kbuild-all, davem, netdev, Subash Abhinov Kasiviswanathan

Hi Subash,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on net-next/master]

url:    https://github.com/0day-ci/linux/commits/Subash-Abhinov-Kasiviswanathan/net-qualcomm-rmnet-Updates-2018-05-14/20180515-115355
reproduce:
        # apt-get install sparse
        make ARCH=x86_64 allmodconfig
        make C=1 CF=-D__CHECK_ENDIAN__


sparse warnings: (new ones prefixed by >>)

>> drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.c:199:26: sparse: symbol 'rmnet_ethtool_ops' was not declared. Should it be static?

Please review and possibly fold the followup patch.

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

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

* [RFC PATCH] net: qualcomm: rmnet: rmnet_ethtool_ops can be static
  2018-05-14 20:08 ` [PATCH net-next 2/3] net: qualcomm: rmnet: Add support for ethtool private stats Subash Abhinov Kasiviswanathan
  2018-05-15  4:42   ` kbuild test robot
@ 2018-05-15  8:41   ` kbuild test robot
  2018-05-15  8:41   ` [PATCH net-next 2/3] net: qualcomm: rmnet: Add support for ethtool private stats kbuild test robot
  2018-05-15 23:16   ` kbuild test robot
  3 siblings, 0 replies; 9+ messages in thread
From: kbuild test robot @ 2018-05-15  8:41 UTC (permalink / raw)
  To: Subash Abhinov Kasiviswanathan
  Cc: kbuild-all, davem, netdev, Subash Abhinov Kasiviswanathan


Fixes: f85908d4636e ("net: qualcomm: rmnet: Add support for ethtool private stats")
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
---
 rmnet_vnd.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.c b/drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.c
index 4c04482..cb02e1a 100644
--- a/drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.c
+++ b/drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.c
@@ -196,7 +196,7 @@ static void rmnet_get_ethtool_stats(struct net_device *dev,
 	memcpy(data, st, ARRAY_SIZE(rmnet_gstrings_stats) * sizeof(u64));
 }
 
-const struct ethtool_ops rmnet_ethtool_ops = {
+static const struct ethtool_ops rmnet_ethtool_ops = {
 	.get_ethtool_stats = rmnet_get_ethtool_stats,
 	.get_strings = rmnet_get_strings,
 	.get_sset_count = rmnet_get_sset_count,

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

* Re: [PATCH net-next 2/3] net: qualcomm: rmnet: Add support for ethtool private stats
  2018-05-15  8:41   ` [PATCH net-next 2/3] net: qualcomm: rmnet: Add support for ethtool private stats kbuild test robot
@ 2018-05-15 18:09     ` Subash Abhinov Kasiviswanathan
  0 siblings, 0 replies; 9+ messages in thread
From: Subash Abhinov Kasiviswanathan @ 2018-05-15 18:09 UTC (permalink / raw)
  To: kbuild test robot; +Cc: kbuild-all, davem, netdev

On 2018-05-15 02:41, kbuild test robot wrote:
> Hi Subash,
> 
> Thank you for the patch! Perhaps something to improve:
> 
> [auto build test WARNING on net-next/master]
> 
> url:
> https://github.com/0day-ci/linux/commits/Subash-Abhinov-Kasiviswanathan/net-qualcomm-rmnet-Updates-2018-05-14/20180515-115355
> reproduce:
>         # apt-get install sparse
>         make ARCH=x86_64 allmodconfig
>         make C=1 CF=-D__CHECK_ENDIAN__
> 
> 
> sparse warnings: (new ones prefixed by >>)
> 
>>> drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.c:199:26: sparse: 
>>> symbol 'rmnet_ethtool_ops' was not declared. Should it be static?
> 
> Please review and possibly fold the followup patch.
> 
> ---
> 0-DAY kernel test infrastructure                Open Source Technology 
> Center
> https://lists.01.org/pipermail/kbuild-all                   Intel 
> Corporation

Thanks Fengguang. I will fix both issues in v2

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project

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

* Re: [PATCH net-next 2/3] net: qualcomm: rmnet: Add support for ethtool private stats
  2018-05-14 20:08 ` [PATCH net-next 2/3] net: qualcomm: rmnet: Add support for ethtool private stats Subash Abhinov Kasiviswanathan
                     ` (2 preceding siblings ...)
  2018-05-15  8:41   ` [PATCH net-next 2/3] net: qualcomm: rmnet: Add support for ethtool private stats kbuild test robot
@ 2018-05-15 23:16   ` kbuild test robot
  3 siblings, 0 replies; 9+ messages in thread
From: kbuild test robot @ 2018-05-15 23:16 UTC (permalink / raw)
  To: Subash Abhinov Kasiviswanathan
  Cc: kbuild-all, davem, netdev, Subash Abhinov Kasiviswanathan

[-- Attachment #1: Type: text/plain, Size: 3343 bytes --]

Hi Subash,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on net-next/master]

url:    https://github.com/0day-ci/linux/commits/Subash-Abhinov-Kasiviswanathan/net-qualcomm-rmnet-Updates-2018-05-14/20180515-115355
config: x86_64-randconfig-s4-05160610 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-16) 7.3.0
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

All error/warnings (new ones prefixed by >>):

   In file included from include/linux/kernel.h:10:0,
                    from include/linux/list.h:9,
                    from include/linux/timer.h:5,
                    from include/linux/netdevice.h:28,
                    from drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c:16:
   drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c: In function 'rmnet_map_checksum_downlink_packet':
   include/linux/compiler.h:58:2: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
     if (__builtin_constant_p(!!(cond)) ? !!(cond) :   \
     ^
   include/linux/compiler.h:56:23: note: in expansion of macro '__trace_if'
    #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) )
                          ^~~~~~~~~~
>> drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c:375:7: note: in expansion of macro 'if'
     else if (skb->protocol == htons(ETH_P_IPV6))
          ^~
   drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c:380:3: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
      return -EPROTONOSUPPORT;
      ^~~~~~
>> drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c:382:2: error: 'else' without a previous 'if'
     else
     ^~~~

vim +382 drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c

   349	
   350	/* Validates packet checksums. Function takes a pointer to
   351	 * the beginning of a buffer which contains the IP payload +
   352	 * padding + checksum trailer.
   353	 * Only IPv4 and IPv6 are supported along with TCP & UDP.
   354	 * Fragmented or tunneled packets are not supported.
   355	 */
   356	int rmnet_map_checksum_downlink_packet(struct sk_buff *skb, u16 len)
   357	{
   358		struct rmnet_priv *priv = netdev_priv(skb->dev);
   359		struct rmnet_map_dl_csum_trailer *csum_trailer;
   360	
   361		if (unlikely(!(skb->dev->features & NETIF_F_RXCSUM))) {
   362			priv->stats.csum_sw++;
   363			return -EOPNOTSUPP;
   364		}
   365	
   366		csum_trailer = (struct rmnet_map_dl_csum_trailer *)(skb->data + len);
   367	
   368		if (!csum_trailer->valid) {
   369			priv->stats.csum_valid_unset++;
   370			return -EINVAL;
   371		}
   372	
   373		if (skb->protocol == htons(ETH_P_IP))
   374			return rmnet_map_ipv4_dl_csum_trailer(skb, csum_trailer, priv);
 > 375		else if (skb->protocol == htons(ETH_P_IPV6))
   376	#if IS_ENABLED(CONFIG_IPV6)
   377			return rmnet_map_ipv6_dl_csum_trailer(skb, csum_trailer, priv);
   378	#else
   379			priv->stats.csum_err_invalid_ip_version++;
   380			return -EPROTONOSUPPORT;
   381	#endif
 > 382		else
   383			priv->stats.csum_err_invalid_ip_version++;
   384			return -EPROTONOSUPPORT;
   385	
   386		return 0;
   387	}
   388	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 36599 bytes --]

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

end of thread, other threads:[~2018-05-15 23:16 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-05-14 20:08 [PATCH net-next 0/3] net: qualcomm: rmnet: Updates 2018-05-14 Subash Abhinov Kasiviswanathan
2018-05-14 20:08 ` [PATCH net-next 1/3] net: qualcomm: rmnet: Capture all drops in transmit path Subash Abhinov Kasiviswanathan
2018-05-14 20:08 ` [PATCH net-next 2/3] net: qualcomm: rmnet: Add support for ethtool private stats Subash Abhinov Kasiviswanathan
2018-05-15  4:42   ` kbuild test robot
2018-05-15  8:41   ` [RFC PATCH] net: qualcomm: rmnet: rmnet_ethtool_ops can be static kbuild test robot
2018-05-15  8:41   ` [PATCH net-next 2/3] net: qualcomm: rmnet: Add support for ethtool private stats kbuild test robot
2018-05-15 18:09     ` Subash Abhinov Kasiviswanathan
2018-05-15 23:16   ` kbuild test robot
2018-05-14 20:08 ` [PATCH net-next 3/3] net: qualcomm: rmnet: Remove redundant command check Subash Abhinov Kasiviswanathan

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.