Loading core/rmnet_config.c +1 −1 Original line number Diff line number Diff line Loading @@ -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; } } Loading core/rmnet_ctl_ipa.c +14 −15 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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) { if (rmnet_ctl_ipa_registered) { ipa_unregister_rmnet_ctl_cb(); rmnet_ctl_ipa_registered = false; } } module_init(rmnet_ctl_init) Loading core/rmnet_genl.c +3 −6 Original line number Diff line number Diff line // 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 * Loading Loading @@ -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; } Loading core/rmnet_trace.h +28 −1 Original line number Diff line number Diff line /* 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 Loading Loading @@ -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 */ /*****************************************************************************/ Loading core/rmnet_vnd.c +21 −0 Original line number Diff line number Diff line Loading @@ -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" Loading Loading @@ -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); Loading Loading
core/rmnet_config.c +1 −1 Original line number Diff line number Diff line Loading @@ -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; } } Loading
core/rmnet_ctl_ipa.c +14 −15 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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) { if (rmnet_ctl_ipa_registered) { ipa_unregister_rmnet_ctl_cb(); rmnet_ctl_ipa_registered = false; } } module_init(rmnet_ctl_init) Loading
core/rmnet_genl.c +3 −6 Original line number Diff line number Diff line // 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 * Loading Loading @@ -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; } Loading
core/rmnet_trace.h +28 −1 Original line number Diff line number Diff line /* 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 Loading Loading @@ -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 */ /*****************************************************************************/ Loading
core/rmnet_vnd.c +21 −0 Original line number Diff line number Diff line Loading @@ -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" Loading Loading @@ -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); Loading