rmnet_core: Allow different UL aggregation params per state

Allows the use of different uplink aggregation parameters for the
default and low-latency uplink aggregation states. To faciliate this,
both contexts now have their own page recycling elements instead of a
single port-wide list, as well as their own instance of the
rmnet_egress_agg_params struct.

To configure these paramters, a new netlink attribute has been created
for specifying which aggregation state the given IFLA_RMNET_UL_AGG_PARAMS
attribute should apply to. For compatibility with user space, the default
state will be chosen if this element is not provided.

Change-Id: Ia340bbb479d9427658a153a2019f4891da0b741c
Signed-off-by: Sean Tranchetti <stranche@codeaurora.org>
This commit is contained in:
Sean Tranchetti
2021-02-16 14:38:02 -08:00
committed by Subash Abhinov Kasiviswanathan
부모 9e18715d96
커밋 5860a49e62
5개의 변경된 파일129개의 추가작업 그리고 101개의 파일을 삭제

파일 보기

@@ -76,16 +76,21 @@ enum {
};
struct rmnet_aggregation_state {
struct rmnet_egress_agg_params params;
struct timespec64 agg_time;
struct timespec64 agg_last;
struct hrtimer hrtimer;
struct work_struct agg_wq;
/* Pointer back to the main lock for use in the workqueue */
spinlock_t *agg_lock;
/* Protect aggregation related elements */
spinlock_t agg_lock;
struct sk_buff *agg_skb;
int (*send_agg_skb)(struct sk_buff *skb);
int agg_state;
u8 agg_count;
u8 agg_size_order;
struct list_head agg_list;
struct rmnet_agg_page *agg_head;
struct rmnet_agg_stats *stats;
};
@@ -107,15 +112,7 @@ struct rmnet_port {
struct net_device *bridge_ep;
void *rmnet_perf;
struct rmnet_egress_agg_params egress_agg_params;
/* Protect aggregation related elements */
spinlock_t agg_lock;
struct rmnet_aggregation_state agg_state[RMNET_MAX_AGG_STATE];
u8 agg_size_order;
struct list_head agg_list;
struct rmnet_agg_page *agg_head;
void *qmi_info;