Pārlūkot izejas kodu

Fastforwarding datarmnet code to data-kernel.lnx.1.1

Change-Id: Iaa23d64a4b93e87bcd8c42923ba398471834e0e8
Arnav Sharma 5 gadi atpakaļ
vecāks
revīzija
b7cf580e81
5 mainītis faili ar 67 papildinājumiem un 23 dzēšanām
  1. 1 1
      core/rmnet_config.c
  2. 14 15
      core/rmnet_ctl_ipa.c
  3. 3 6
      core/rmnet_genl.c
  4. 28 1
      core/rmnet_trace.h
  5. 21 0
      core/rmnet_vnd.c

+ 1 - 1
core/rmnet_config.c

@@ -360,7 +360,7 @@ static int rmnet_rtnl_validate(struct nlattr *tb[], struct nlattr *data[],
 
 		if (data[IFLA_RMNET_UL_AGG_PARAMS]) {
 			agg_params = nla_data(data[IFLA_RMNET_UL_AGG_PARAMS]);
-			if (agg_params->agg_time < 3000000)
+			if (agg_params->agg_time < 1000000)
 				return -EINVAL;
 		}
 	}

+ 14 - 15
core/rmnet_ctl_ipa.c

@@ -18,6 +18,7 @@ struct rmnet_ctl_ipa_dev {
 };
 
 static struct rmnet_ctl_ipa_dev ctl_ipa_dev;
+static bool rmnet_ctl_ipa_registered;
 
 static int rmnet_ctl_send_ipa(struct rmnet_ctl_dev *dev, struct sk_buff *skb)
 {
@@ -78,33 +79,31 @@ static void rmnet_ctl_ipa_ready(void *user_data)
 			rmnet_ctl_dl_callback,
 			&ctl_ipa_dev);
 
-	pr_info("%s: %d\n", __func__, rc);
+	if (rc)
+		pr_err("%s: %d\n", __func__, rc);
+	else
+		rmnet_ctl_ipa_registered = true;
 }
 
 static int __init rmnet_ctl_init(void)
 {
 	int rc;
 
-	rc = ipa_register_rmnet_ctl_cb(
-			rmnet_ctl_probe,
-			&ctl_ipa_dev,
-			rmnet_ctl_remove,
-			&ctl_ipa_dev,
-			rmnet_ctl_dl_callback,
-			&ctl_ipa_dev);
-
-	if (rc == -EAGAIN)
-		rc = ipa_register_ipa_ready_cb(
-			rmnet_ctl_ipa_ready, NULL);
-
-	pr_info("%s: %d\n", __func__, rc);
+	rc = ipa_register_ipa_ready_cb(rmnet_ctl_ipa_ready, NULL);
+	if (rc == -EEXIST)
+		rmnet_ctl_ipa_ready(NULL);
+	else if (rc)
+		pr_err("%s: %d\n", __func__, rc);
 
 	return 0;
 }
 
 static void __exit rmnet_ctl_exit(void)
 {
-	ipa_unregister_rmnet_ctl_cb();
+	if (rmnet_ctl_ipa_registered) {
+		ipa_unregister_rmnet_ctl_cb();
+		rmnet_ctl_ipa_registered = false;
+	}
 }
 
 module_init(rmnet_ctl_init)

+ 3 - 6
core/rmnet_genl.c

@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: GPL-2.0-only
-/* Copyright (c) 2019, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2019-2020, The Linux Foundation. All rights reserved.
  *
  * RMNET Data Generic Netlink
  *
@@ -190,11 +190,8 @@ static void rmnet_create_pid_bps_resp(struct rmnet_core_pid_bps_resp
 			tx_bytes_cur = node_p->tx_bytes;
 			if (tx_bytes_cur <= node_p->tx_bytes_last_query) {
 				/* Dont send inactive pids to userspace */
-				/* TODO: can remove from hash table probably */
-				node_p->tx_bps = 0;
-				node_p->timstamp_last_query =
-					pid_bps_resp_ptr->timestamp;
-				node_p->sched_boost_remaining_ms = 0;
+				hash_del(&node_p->list);
+				kfree(node_p);
 				continue;
 			}
 

+ 28 - 1
core/rmnet_trace.h

@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
-/* Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved.
  */
 
 #undef TRACE_SYSTEM
@@ -101,6 +101,33 @@ DEFINE_EVENT
 
 );
 
+TRACE_EVENT(print_skb_gso,
+
+	TP_PROTO(struct sk_buff *skb, __be16 src, __be16 dest),
+
+	TP_ARGS(skb, src, dest),
+
+	TP_STRUCT__entry(
+		__field(void *,	skbaddr)
+		__field(int, len)
+		__field(int, data_len)
+		__field(__be16, src)
+		__field(__be16, dest)
+	),
+
+	TP_fast_assign(
+		__entry->skbaddr = skb;
+		__entry->len = skb->len;
+		__entry->data_len = skb->data_len;
+		__entry->src = src;
+		__entry->dest = dest;
+	),
+
+	TP_printk("GSO: skbaddr=%pK, len=%d, data_len=%d, src=%u, dest=%u",
+		__entry->skbaddr, __entry->len, __entry->data_len,
+		be16_to_cpu(__entry->src), be16_to_cpu(__entry->dest))
+);
+
 /*****************************************************************************/
 /* Trace events for rmnet_perf module */
 /*****************************************************************************/

+ 21 - 0
core/rmnet_vnd.c

@@ -17,6 +17,8 @@
 #include <linux/etherdevice.h>
 #include <linux/if_arp.h>
 #include <linux/ip.h>
+#include <linux/ipv6.h>
+#include <linux/tcp.h>
 #include <net/pkt_sched.h>
 #include "rmnet_config.h"
 #include "rmnet_handlers.h"
@@ -171,6 +173,25 @@ static u16 rmnet_vnd_select_queue(struct net_device *dev,
 	int boost_trigger = 0;
 	int txq = 0;
 
+	if (trace_print_skb_gso_enabled()) {
+		if (!skb_shinfo(skb)->gso_size)
+			goto skip_trace;
+
+		if (skb->protocol == htons(ETH_P_IP)) {
+			if (ip_hdr(skb)->protocol != IPPROTO_TCP)
+				goto skip_trace;
+		}
+
+		if (skb->protocol == htons(ETH_P_IPV6)) {
+			if (ipv6_hdr(skb)->nexthdr != IPPROTO_TCP)
+				goto skip_trace;
+		}
+
+		trace_print_skb_gso(skb, tcp_hdr(skb)->source,
+				    tcp_hdr(skb)->dest);
+	}
+
+skip_trace:
 	if (priv->real_dev)
 		txq = qmi_rmnet_get_queue(dev, skb);