Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c9d7cd60 authored by Subash Abhinov Kasiviswanathan's avatar Subash Abhinov Kasiviswanathan
Browse files

rmnet_shs: add userspace flow movement and slow start support



Adds shared memory and generic netlink communication channels for
userspace to access cpu and flow related stats so that shsusr
can manage how flows are balanced and how TCP flows ramp up.

Change-Id: Ie565141149fd5fa58cb1d2b982907681f5c7fd7d
Signed-off-by: default avatarSubash Abhinov Kasiviswanathan <subashab@codeaurora.org>
parent 7f9de3b9
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@ LOCAL_CLANG :=true
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
LOCAL_MODULE := rmnet_shs.ko

LOCAL_SRC_FILES := rmnet_shs_main.c rmnet_shs_config.c rmnet_shs_wq.c rmnet_shs_freq.c
LOCAL_SRC_FILES := rmnet_shs_main.c rmnet_shs_config.c rmnet_shs_wq.c rmnet_shs_freq.c rmnet_shs_wq_mem.c rmnet_shs_wq_genl.c

RMNET_SHS_BLD_DIR := ../../vendor/qcom/opensource/data-kernel/drivers/rmnet/shs
DLKM_DIR := ./device/qcom/common/dlkm
+1 −1
Original line number Diff line number Diff line
obj-m += rmnet_shs.o
rmnet_shs-y := rmnet_shs_config.o rmnet_shs_main.o rmnet_shs_wq.o rmnet_shs_freq.o
rmnet_shs-y := rmnet_shs_config.o rmnet_shs_main.o rmnet_shs_wq.o rmnet_shs_freq.o rmnet_shs_wq_mem.o rmnet_shs_wq_genl.o
+11 −8
Original line number Diff line number Diff line
@@ -54,14 +54,14 @@
//#define RMNET_SHS_UDP_PPS_SILVER_CORE_UPPER_THRESH 90000
//#define RMNET_SHS_TCP_PPS_SILVER_CORE_UPPER_THRESH 90000

#define SHS_TRACE_ERR(...) if (rmnet_shs_debug) \
	trace_rmnet_shs_err(__VA_ARGS__)
#define SHS_TRACE_ERR(...) \
  do { if (rmnet_shs_debug) trace_rmnet_shs_err(__VA_ARGS__); } while (0)

#define SHS_TRACE_HIGH(...) if (rmnet_shs_debug) \
	trace_rmnet_shs_high(__VA_ARGS__)
#define SHS_TRACE_HIGH(...) \
  do { if (rmnet_shs_debug) trace_rmnet_shs_high(__VA_ARGS__); } while (0)

#define SHS_TRACE_LOW(...) if (rmnet_shs_debug) \
	trace_rmnet_shs_low(__VA_ARGS__)
#define SHS_TRACE_LOW(...) \
  do { if (rmnet_shs_debug) trace_rmnet_shs_low(__VA_ARGS__); } while (0)

#define RMNET_SHS_MAX_SILVER_CORE_BURST_CAPACITY  204800

@@ -77,6 +77,9 @@
#define RMNET_SHS_UDP_PPS_PERF_CPU_LTHRESH 40000
#define RMNET_SHS_TCP_PPS_PERF_CPU_LTHRESH (40000*RMNET_SHS_TCP_COALESCING_RATIO)

#define RMNET_SHS_UDP_PPS_HEADROOM 20000
#define RMNET_SHS_GOLD_BALANCING_THRESH (RMNET_SHS_UDP_PPS_PERF_CPU_UTHRESH / 2)

struct core_flush_s {
	struct  hrtimer core_timer;
	struct work_struct work;
@@ -92,8 +95,8 @@ struct rmnet_shs_cfg_s {
	struct rmnet_port *port;
	struct  core_flush_s core_flush[MAX_CPUS];
	u64 core_skbs[MAX_CPUS];
	long int num_bytes_parked;
	long int num_pkts_parked;
	long num_bytes_parked;
	long num_pkts_parked;
	u32 is_reg_dl_mrk_ind;
	u16 num_flows;
	u8 is_pkt_parked;
+1 −1
Original line number Diff line number Diff line
@@ -32,7 +32,7 @@ unsigned int rmnet_shs_stats_enabled __read_mostly = 1;
module_param(rmnet_shs_stats_enabled, uint, 0644);
MODULE_PARM_DESC(rmnet_shs_stats_enabled, "Enable Disable stats collection");

unsigned long int rmnet_shs_crit_err[RMNET_SHS_CRIT_ERR_MAX];
unsigned long rmnet_shs_crit_err[RMNET_SHS_CRIT_ERR_MAX];
module_param_array(rmnet_shs_crit_err, ulong, 0, 0444);
MODULE_PARM_DESC(rmnet_shs_crit_err, "rmnet shs crtical error type");

+5 −1
Original line number Diff line number Diff line
@@ -42,12 +42,16 @@ enum rmnet_shs_crit_err_e {
	RMNET_SHS_CPU_PKTLEN_ERR,
	RMNET_SHS_NULL_SKB_HEAD,
	RMNET_SHS_RPS_MASK_CHANGE,
	RMNET_SHS_WQ_INVALID_CPU_ERR,
	RMNET_SHS_WQ_INVALID_PTR_ERR,
	RMNET_SHS_WQ_NODE_MALLOC_ERR,
	RMNET_SHS_WQ_NL_SOCKET_ERR,
	RMNET_SHS_CRIT_ERR_MAX
};

extern unsigned int rmnet_shs_debug;
extern unsigned int rmnet_shs_stats_enabled;
extern unsigned long int rmnet_shs_crit_err[RMNET_SHS_CRIT_ERR_MAX];
extern unsigned long rmnet_shs_crit_err[RMNET_SHS_CRIT_ERR_MAX];
extern struct rmnet_shs_cfg_s rmnet_shs_cfg;
extern int rmnet_is_real_dev_registered(const struct net_device *real_dev);

Loading