rmnet_offload: I721bd69521fe4aa8daebefb280d8d1509f91e673

Update module to version I721bd69521fe4aa8daebefb280d8d1509f91e673

Change-Id: I321b1be25fbed91b164c9fae9b606a2d87b62c92
This commit is contained in:
Sean Tranchetti
2020-05-26 17:43:00 -06:00
committed by Subash Abhinov Kasiviswanathan
parent 88335da291
commit 670ea10293
20 changed files with 992 additions and 0 deletions

View File

@@ -0,0 +1,196 @@
/* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
* only version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#include <linux/log2.h>
#include <linux/list.h>
#include <linux/hashtable.h>
#include "rmnet_descriptor.h"
#include "rmnet_offload_state.h"
#include "rmnet_offload_engine.h"
#include "rmnet_offload_main.h"
#include "rmnet_offload_tcp.h"
#include "rmnet_offload_udp.h"
#include "rmnet_offload_stats.h"
#include "rmnet_offload_knob.h"
#define DATARMNETc9a92fd5dc \
(const_ilog2(DATARMNET51fcd2e93a))
static DEFINE_HASHTABLE(DATARMNETab0dbdf89d,DATARMNETc9a92fd5dc);static u32
DATARMNETb2ff7800c4(u8 DATARMNET22afafde5e){struct DATARMNET31caee06e2*
DATARMNET0277af6816;int DATARMNET6090c652d3;u32 DATARMNET67497a3454=
(0x145b+644-0x16df);hash_for_each(DATARMNETab0dbdf89d,DATARMNET6090c652d3,
DATARMNET0277af6816,DATARMNET0a9c7c9a12){if(DATARMNET0277af6816->
DATARMNET30d367f886&&DATARMNET0277af6816->DATARMNETb2a7197d60==
DATARMNET22afafde5e){DATARMNET67497a3454++;DATARMNET3bdaf91675(
DATARMNET0277af6816);}}return DATARMNET67497a3454;}static bool
DATARMNET5d54389061(u8 DATARMNET22afafde5e){u64 DATARMNET75cb1c0f3f;
DATARMNET75cb1c0f3f=DATARMNET3d487d950f(DATARMNETe9b360aea8);if(
DATARMNET75cb1c0f3f==DATARMNET651e3c6554)return true;if(DATARMNET75cb1c0f3f==
DATARMNETb94ae69059&&DATARMNET22afafde5e==DATARMNET70889e5696)return true;if(
DATARMNET75cb1c0f3f==DATARMNETda679f58ba&&DATARMNET22afafde5e==
DATARMNETb02d95e937)return true;return false;}static bool DATARMNET9c6847635e(
struct DATARMNET31caee06e2*DATARMNETd44a80d414,struct DATARMNETadd6ff90d0*
DATARMNETc3ffad4b30){if(!DATARMNETd44a80d414->DATARMNET30d367f886)return false;
if(DATARMNETc3ffad4b30->DATARMNET9f5b2909c8==(0x54a+6318-0x1df4)){struct
DATARMNETf61a39bce9*DATARMNETb5da236f91,*DATARMNET4e35bbb67d;DATARMNETb5da236f91
=DATARMNETd44a80d414->DATARMNETd321db9bb1;DATARMNET4e35bbb67d=
DATARMNETc3ffad4b30->DATARMNET574a565f78;if(DATARMNETb5da236f91->
DATARMNET58886f3d9d^DATARMNET4e35bbb67d->DATARMNET58886f3d9d||
DATARMNETb5da236f91->DATARMNET14d3de9c1a^DATARMNET4e35bbb67d->
DATARMNET14d3de9c1a||DATARMNETb5da236f91->DATARMNETa803e4f68b^
DATARMNET4e35bbb67d->DATARMNETa803e4f68b||DATARMNETb5da236f91->
DATARMNET422c25939d^DATARMNET4e35bbb67d->DATARMNET422c25939d)return true;}else
if(DATARMNETc3ffad4b30->DATARMNET9f5b2909c8==(0x1ff5+182-0x20a5)){__be32
DATARMNET55aa748931,DATARMNET34282dc487;__be32 DATARMNETfc68f228ca;
DATARMNET55aa748931=DATARMNETd44a80d414->DATARMNET85d5545fb8->
DATARMNETd750a8b9e5;DATARMNET34282dc487=DATARMNETc3ffad4b30->DATARMNET1dab0af728
->DATARMNETd750a8b9e5;DATARMNETfc68f228ca=DATARMNET55aa748931^
DATARMNET34282dc487;if(DATARMNETfc68f228ca&htonl(267386880))return true;}return
false;}static bool DATARMNETa96491b775(struct DATARMNET31caee06e2*
DATARMNETd44a80d414,struct DATARMNETadd6ff90d0*DATARMNETc3ffad4b30){__be16
DATARMNETffe972c30a,DATARMNETfee6a33770,DATARMNET063a3638c1,DATARMNETf80930b49f;
if(!DATARMNETd44a80d414->DATARMNET30d367f886)return DATARMNETd44a80d414->
DATARMNET2bb18bc9dd==DATARMNETc3ffad4b30->DATARMNET68ad0738e2;if(
DATARMNETd44a80d414->DATARMNETb2a7197d60!=DATARMNETc3ffad4b30->
DATARMNET072708db10)return false;DATARMNETffe972c30a=DATARMNETd44a80d414->
DATARMNETef42c82b6f->DATARMNETaad9b0a864;DATARMNET063a3638c1=DATARMNETd44a80d414
->DATARMNETef42c82b6f->DATARMNETd751c12d13;DATARMNETfee6a33770=
DATARMNETc3ffad4b30->DATARMNETc51cdf696b->DATARMNETaad9b0a864;
DATARMNETf80930b49f=DATARMNETc3ffad4b30->DATARMNETc51cdf696b->
DATARMNETd751c12d13;if(DATARMNETffe972c30a^DATARMNETfee6a33770||
DATARMNET063a3638c1^DATARMNETf80930b49f)return false;if(DATARMNETc3ffad4b30->
DATARMNET9f5b2909c8==(0x19f+8819-0x240e)){struct DATARMNETf61a39bce9*
DATARMNETb5da236f91,*DATARMNET4e35bbb67d;DATARMNETb5da236f91=DATARMNETd44a80d414
->DATARMNETd321db9bb1;DATARMNET4e35bbb67d=DATARMNETc3ffad4b30->
DATARMNET574a565f78;if(DATARMNETb5da236f91->DATARMNET7c6ed51964^
DATARMNET4e35bbb67d->DATARMNET7c6ed51964||DATARMNETb5da236f91->
DATARMNET799b2a47a5^DATARMNET4e35bbb67d->DATARMNET799b2a47a5)return false;}else
if(DATARMNETc3ffad4b30->DATARMNET9f5b2909c8==(0x53a+3466-0x12be)){struct
DATARMNETfab66e680d*DATARMNETb5da236f91,*DATARMNET4e35bbb67d;DATARMNETb5da236f91
=DATARMNETd44a80d414->DATARMNET85d5545fb8;DATARMNET4e35bbb67d=
DATARMNETc3ffad4b30->DATARMNET1dab0af728;if(memcmp(DATARMNETb5da236f91->
DATARMNET0f6f3a8868,DATARMNET4e35bbb67d->DATARMNET0f6f3a8868,sizeof(
DATARMNET4e35bbb67d->DATARMNET0f6f3a8868))||memcmp(DATARMNETb5da236f91->
DATARMNET818f335f71,DATARMNET4e35bbb67d->DATARMNET818f335f71,sizeof(
DATARMNET4e35bbb67d->DATARMNET818f335f71)))return false;}else{return false;}
return true;}static struct DATARMNET31caee06e2*DATARMNET30062b5353(void){struct
DATARMNET8357daf015*DATARMNETf7e8f6395c=DATARMNETccc25794e0();struct
DATARMNET337e435e40*DATARMNET048da5e00c;struct DATARMNET31caee06e2*
DATARMNETc5c31601b9;DATARMNET048da5e00c=&DATARMNETf7e8f6395c->
DATARMNETa3d1da1cba;if(DATARMNET048da5e00c->DATARMNET762f0d12b6<
DATARMNET51fcd2e93a){DATARMNETc5c31601b9=&DATARMNET048da5e00c->
DATARMNET51e299cf9c[DATARMNET048da5e00c->DATARMNET762f0d12b6];
DATARMNET048da5e00c->DATARMNET762f0d12b6++;return DATARMNETc5c31601b9;}
DATARMNETc5c31601b9=&DATARMNET048da5e00c->DATARMNET51e299cf9c[
DATARMNET048da5e00c->DATARMNETded3d12c96];DATARMNET048da5e00c->
DATARMNETded3d12c96++;DATARMNET048da5e00c->DATARMNETded3d12c96%=
DATARMNET51fcd2e93a;hash_del(&DATARMNETc5c31601b9->DATARMNET0a9c7c9a12);
if(DATARMNETc5c31601b9->DATARMNET30d367f886){DATARMNET5d24865423(
DATARMNETa05aa2c4a7);DATARMNET3bdaf91675(DATARMNETc5c31601b9);}return
DATARMNETc5c31601b9;}static void DATARMNET3d9424a1f2(void){
DATARMNET8f8c3a4cc3();if(DATARMNET54fd6bf483())DATARMNET5d24865423(
DATARMNETc0fe927262);DATARMNET4c69e80b6f();}void DATARMNETafcdd1146f(void){
rcu_assign_pointer(rmnet_perf_chain_end,DATARMNET3d9424a1f2);}void
DATARMNET28dfa538f2(void){rcu_assign_pointer(rmnet_perf_chain_end,NULL);}int
DATARMNET467c2610cd(u64 DATARMNET842aaafdc8,u64 DATARMNET7c1185ffbf){u32
DATARMNET67497a3454=(0x52d+7239-0x2174);if(DATARMNET842aaafdc8==
DATARMNET7d2f8bdc64||DATARMNET7c1185ffbf==DATARMNET651e3c6554)return
(0x1053+1012-0x1447);switch(DATARMNET7c1185ffbf){case DATARMNETb94ae69059:
DATARMNET67497a3454=DATARMNETb2ff7800c4(DATARMNETb02d95e937);break;case
DATARMNETda679f58ba:DATARMNET67497a3454=DATARMNETb2ff7800c4(DATARMNET70889e5696)
;break;case DATARMNET7d2f8bdc64:DATARMNET67497a3454=DATARMNET54fd6bf483();break;
}DATARMNETa3edc29191(DATARMNET2ec91e73cf,DATARMNET67497a3454);return
(0x349+1374-0x8a7);}void DATARMNET3bdaf91675(struct DATARMNET31caee06e2*
DATARMNETd44a80d414){struct DATARMNET8357daf015*DATARMNETf7e8f6395c=
DATARMNETccc25794e0();struct rmnet_frag_descriptor*DATARMNETb2b92619af,*
DATARMNETe6a1f8e9a8,*DATARMNETb9b0dca770;u32 DATARMNET439e3442b2=
DATARMNETd44a80d414->DATARMNET5f92dbf405+DATARMNETd44a80d414->
DATARMNET2e943b139f+DATARMNETd44a80d414->DATARMNET00656e1145;if(!
DATARMNETd44a80d414->DATARMNET30d367f886)return;DATARMNETb2b92619af=
list_first_entry(&DATARMNETd44a80d414->DATARMNETdaf24e965e,struct
rmnet_frag_descriptor,list);if(!DATARMNETb2b92619af->gso_segs)
DATARMNETb2b92619af->gso_segs=(0x1058+4757-0x22ec);DATARMNETb2b92619af->gso_size
=DATARMNETd44a80d414->DATARMNET632219f39d;DATARMNETe6a1f8e9a8=
DATARMNETb2b92619af;list_for_each_entry_safe_continue(DATARMNETe6a1f8e9a8,
DATARMNETb9b0dca770,&DATARMNETd44a80d414->DATARMNETdaf24e965e,list){if(
DATARMNETe6a1f8e9a8->hdr_ptr==rmnet_frag_data_ptr(DATARMNETe6a1f8e9a8)){if(!
rmnet_frag_pull(DATARMNETe6a1f8e9a8,DATARMNETf7e8f6395c->DATARMNET547651077b,
DATARMNETd44a80d414->DATARMNET2e943b139f+DATARMNETd44a80d414->
DATARMNET00656e1145))continue;}list_del(&DATARMNETe6a1f8e9a8->list);
list_add_tail(&DATARMNETe6a1f8e9a8->list,&DATARMNETb2b92619af->sub_frags);
DATARMNETb2b92619af->gso_segs+=(DATARMNETe6a1f8e9a8->gso_segs)?:
(0x11b6+461-0x1382);}DATARMNETb2b92619af->hash=DATARMNETd44a80d414->
DATARMNET2bb18bc9dd;DATARMNET654b85a739(DATARMNETb2b92619af,DATARMNET439e3442b2)
;DATARMNETd44a80d414->DATARMNET30d367f886=(0x1c9b+1105-0x20ec);
DATARMNETd44a80d414->DATARMNET5f92dbf405=(0xb26+2684-0x15a2);}void
DATARMNET8b657e07e9(u32 DATARMNETb7b515b920){struct DATARMNET31caee06e2*
DATARMNETd44a80d414;hash_for_each_possible(DATARMNETab0dbdf89d,
DATARMNETd44a80d414,DATARMNET0a9c7c9a12,DATARMNETb7b515b920){if(
DATARMNETd44a80d414->DATARMNET2bb18bc9dd==DATARMNETb7b515b920&&
DATARMNETd44a80d414->DATARMNET30d367f886)DATARMNET3bdaf91675(DATARMNETd44a80d414
);}}u32 DATARMNET54fd6bf483(void){struct DATARMNET31caee06e2*DATARMNETd44a80d414
;int DATARMNET6090c652d3;u32 DATARMNET67497a3454=(0x16b4+2078-0x1ed2);
hash_for_each(DATARMNETab0dbdf89d,DATARMNET6090c652d3,DATARMNETd44a80d414,
DATARMNET0a9c7c9a12){if(DATARMNETd44a80d414->DATARMNET30d367f886){
DATARMNET67497a3454++;DATARMNET3bdaf91675(DATARMNETd44a80d414);}}return
DATARMNET67497a3454;}void DATARMNETfc01092f09(struct DATARMNET31caee06e2*
DATARMNETd44a80d414,struct DATARMNETadd6ff90d0*DATARMNETc3ffad4b30){if(
DATARMNETc3ffad4b30->DATARMNET1e7926dc4c){DATARMNETd44a80d414->
DATARMNET6b35defba1=DATARMNETc3ffad4b30->DATARMNET9f5b2909c8;DATARMNETd44a80d414
->DATARMNET2e943b139f=DATARMNETc3ffad4b30->DATARMNETa7eaea0d00;
DATARMNETd44a80d414->DATARMNETd321db9bb1=DATARMNETc3ffad4b30->
DATARMNET574a565f78;DATARMNETd44a80d414->DATARMNETb2a7197d60=DATARMNETc3ffad4b30
->DATARMNET072708db10;DATARMNETd44a80d414->DATARMNET00656e1145=
DATARMNETc3ffad4b30->DATARMNETfeb7c81ac7;DATARMNETd44a80d414->
DATARMNET9a5f6d68d4=DATARMNETc3ffad4b30->DATARMNET7ff34eacb7;DATARMNETd44a80d414
->DATARMNET2bb18bc9dd=DATARMNETc3ffad4b30->DATARMNET68ad0738e2;
DATARMNETd44a80d414->DATARMNET632219f39d=(DATARMNETc3ffad4b30->
DATARMNET798fafaf36->gso_size)?:DATARMNETc3ffad4b30->DATARMNET5671455f38;if(
DATARMNETc3ffad4b30->DATARMNET072708db10==DATARMNET70889e5696){__be32
DATARMNETff7464c709;if(DATARMNETc3ffad4b30->DATARMNET798fafaf36->tcp_seq_set)
DATARMNETff7464c709=DATARMNETc3ffad4b30->DATARMNET798fafaf36->tcp_seq;else
DATARMNETff7464c709=DATARMNETc3ffad4b30->DATARMNET7ff34eacb7->
DATARMNET614032cc71;DATARMNETd44a80d414->DATARMNET956bd73340=ntohl(
DATARMNETff7464c709);}}if(DATARMNETc3ffad4b30->DATARMNET072708db10==
DATARMNET70889e5696)DATARMNETd44a80d414->DATARMNET956bd73340+=
DATARMNETc3ffad4b30->DATARMNET5671455f38;list_add_tail(&DATARMNETc3ffad4b30->
DATARMNET798fafaf36->list,&DATARMNETd44a80d414->DATARMNETdaf24e965e);
DATARMNETd44a80d414->DATARMNET30d367f886++;DATARMNETd44a80d414->
DATARMNET5f92dbf405+=DATARMNETc3ffad4b30->DATARMNET5671455f38;}bool
DATARMNET9b8a1a69f3(struct DATARMNETadd6ff90d0*DATARMNETc3ffad4b30){struct
DATARMNET31caee06e2*DATARMNETd44a80d414;bool DATARMNET262f926565=false;if(!
DATARMNET5d54389061(DATARMNETc3ffad4b30->DATARMNET072708db10)){
DATARMNET5d24865423(DATARMNETdae7cbfd97);return false;}hash_for_each_possible(
DATARMNETab0dbdf89d,DATARMNETd44a80d414,DATARMNET0a9c7c9a12,DATARMNETc3ffad4b30
->DATARMNET68ad0738e2){bool DATARMNET4e4b105fa2;if(!DATARMNETa96491b775(
DATARMNETd44a80d414,DATARMNETc3ffad4b30))continue;DATARMNETb9fc1ffb2f:
DATARMNET4e4b105fa2=DATARMNET9c6847635e(DATARMNETd44a80d414,DATARMNETc3ffad4b30)
;DATARMNETc3ffad4b30->DATARMNET1e7926dc4c=true;DATARMNET262f926565=true;switch(
DATARMNETc3ffad4b30->DATARMNET072708db10){case DATARMNET70889e5696:return
DATARMNETb25a21aeeb(DATARMNETd44a80d414,DATARMNETc3ffad4b30,DATARMNET4e4b105fa2)
;case DATARMNETb02d95e937:return DATARMNET9dd18589e3(DATARMNETd44a80d414,
DATARMNETc3ffad4b30,DATARMNET4e4b105fa2);default:return false;}}if(!
DATARMNET262f926565){DATARMNETd44a80d414=DATARMNET30062b5353();
DATARMNETd44a80d414->DATARMNET2bb18bc9dd=DATARMNETc3ffad4b30->
DATARMNET68ad0738e2;hash_add(DATARMNETab0dbdf89d,&DATARMNETd44a80d414->
DATARMNET0a9c7c9a12,DATARMNETd44a80d414->DATARMNET2bb18bc9dd);goto
DATARMNETb9fc1ffb2f;}return false;}void DATARMNETde815547a0(void){struct
DATARMNET31caee06e2*DATARMNETd44a80d414;struct hlist_node*DATARMNETb9b0dca770;
int DATARMNET6090c652d3;hash_for_each_safe(DATARMNETab0dbdf89d,
DATARMNET6090c652d3,DATARMNETb9b0dca770,DATARMNETd44a80d414,DATARMNET0a9c7c9a12)
hash_del(&DATARMNETd44a80d414->DATARMNET0a9c7c9a12);}int DATARMNETcce014cb1d(
void){struct DATARMNET8357daf015*DATARMNETf7e8f6395c=DATARMNETccc25794e0();u8
DATARMNET5d971be8b8;for(DATARMNET5d971be8b8=(0xec5+3020-0x1a91);
DATARMNET5d971be8b8<DATARMNET51fcd2e93a;DATARMNET5d971be8b8++){struct
DATARMNET31caee06e2*DATARMNETd44a80d414;DATARMNETd44a80d414=&DATARMNETf7e8f6395c
->DATARMNETa3d1da1cba.DATARMNET51e299cf9c[DATARMNET5d971be8b8];INIT_LIST_HEAD(&
DATARMNETd44a80d414->DATARMNETdaf24e965e);INIT_HLIST_NODE(&DATARMNETd44a80d414->
DATARMNET0a9c7c9a12);}return DATARMNET6e89887168;}