瀏覽代碼

rmnet_mem: I70e645fabb7547c95a261d4488bf7e343d02fc85

I70e645fabb7547c95a261d4488bf7e343d02fc85

CRs-Fixed: 3590324
Change-Id: I70e645fabb7547c95a261d4488bf7e343d02fc85
Signed-off-by: Raul Martinez <[email protected]>
Raul Martinez 1 年之前
父節點
當前提交
f4d228c3f5
共有 3 個文件被更改,包括 47 次插入43 次删除
  1. 2 1
      mem/define_mem.bzl
  2. 43 40
      mem/rmnet_mem_main.c
  3. 2 2
      mem/rmnet_mem_priv.h

+ 2 - 1
mem/define_mem.bzl

@@ -8,8 +8,9 @@ def define_mem(target, variant):
     ddk_module(
         name = "{}_rmnet_mem".format(kernel_build_variant),
         out = "rmnet_mem.ko",
+	includes = ["."],
+	hdrs = [ "rmnet_mem.h" ],
         srcs = [
-            "rmnet_mem.h",
             "rmnet_mem_main.c",
             "rmnet_mem_nl.c",
             "rmnet_mem_nl.h",

+ 43 - 40
mem/rmnet_mem_main.c

@@ -10,9 +10,12 @@
 #include "rmnet_mem.h"
 #include "rmnet_mem_priv.h"
 MODULE_LICENSE("\x47\x50\x4c\x20\x76\x32");DEFINE_SPINLOCK(rmnet_mem_lock);int 
-max_pool_size[POOL_LEN]={(0xd2d+202-0xdf7),(0xd2d+202-0xdf7),MAX_POOL_O2,
-MAX_POOL_O3};module_param_array(max_pool_size,int,NULL,(0xdb7+6665-0x261c));
-MODULE_PARM_DESC(max_pool_size,
+DATARMNETfb2a1a4560[POOL_LEN];module_param_array(DATARMNETfb2a1a4560,int,NULL,
+(0xcb7+5769-0x221c));MODULE_PARM_DESC(DATARMNETfb2a1a4560,
+"\x67\x61\x76\x65\x75\x70\x20\x70\x65\x72\x20\x69\x64");int max_pool_size[
+POOL_LEN]={(0xd2d+202-0xdf7),(0xd2d+202-0xdf7),MAX_POOL_O2,MAX_POOL_O3};
+module_param_array(max_pool_size,int,NULL,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+max_pool_size,
 "\x4d\x61\x78\x20\x50\x6f\x6f\x6c\x20\x73\x69\x7a\x65\x20\x70\x65\x72\x20\x6f\x72\x64\x65\x72"
 );int static_pool_size[POOL_LEN];module_param_array(static_pool_size,int,NULL,
 (0xcb7+5769-0x221c));MODULE_PARM_DESC(static_pool_size,
@@ -29,7 +32,7 @@ rmnet_mem_id_req[POOL_LEN];module_param_array(rmnet_mem_id_req,int,NULL,
 "\x52\x65\x71\x75\x65\x73\x74\x20\x70\x65\x72\x20\x69\x64");int 
 rmnet_mem_id_recycled[POOL_LEN];module_param_array(rmnet_mem_id_recycled,int,
 NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(rmnet_mem_id_recycled,
-"\x52\x65\x71\x75\x65\x73\x74\x20\x70\x65\x72\x20\x69\x64");struct 
+"\x52\x65\x63\x79\x63\x6c\x65\x64\x20\x70\x65\x72\x20\x69\x64");struct 
 workqueue_struct*mem_wq;int target_static_pool_size[POOL_LEN];module_param_array
 (target_static_pool_size,int,NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(
 target_static_pool_size,
@@ -68,42 +71,42 @@ mem_slot->mem_head);put_page(mem_slot->addr);static_pool_size[mem_slot->order]--
 rmnet_mem_get_pages_entry(gfp_t gfp_mask,unsigned int order,int*code,int*
 pageorder,unsigned id){unsigned long flags;struct mem_info*mem_page;struct page*
 page=NULL;int i=(0xd2d+202-0xdf7);int j=(0xd2d+202-0xdf7);spin_lock_irqsave(&
-rmnet_mem_lock,flags);rmnet_mem_id_req[id]++;rmnet_mem_order_requests[order]++;
-if(order<POOL_LEN){for(j=order;j>(0xd2d+202-0xdf7)&&j<POOL_LEN;j++){do{mem_page=
-list_first_entry_or_null(&rmnet_mem_pool[j],struct mem_info,mem_head);if(!
-mem_page){break;}if(page_ref_count(mem_page->addr)==(0xd26+209-0xdf6)){
-rmnet_mem_id_recycled[j]++;page=mem_page->addr;page_ref_inc(mem_page->addr);
-list_rotate_left(&rmnet_mem_pool[j]);break;}list_rotate_left(&rmnet_mem_pool[j])
-;i++;}while(i<=(0xd0a+237-0xdf2));if(page&&pageorder){*pageorder=j;break;}i=
-(0xd2d+202-0xdf7);}}if(!page){if(order<(0xd18+223-0xdf4)){page=__dev_alloc_pages
-(GFP_ATOMIC,order);if(page){if(static_pool_size[order]<max_pool_size[order]&&
-pool_unbound_feature[order]){rmnet_mem_add_page(page,order);page_ref_inc(page);}
-if(pageorder){*pageorder=order;}}}else{if(static_pool_size[order]<max_pool_size[
-order]&&pool_unbound_feature[order]){page=__dev_alloc_pages(GFP_ATOMIC,order);if
-(page){rmnet_mem_add_page(page,order);page_ref_inc(page);}if(pageorder){*
-pageorder=order;}}}}spin_unlock_irqrestore(&rmnet_mem_lock,flags);if(pageorder&&
-code&&page){if(*pageorder==order)*code=RMNET_MEM_SUCCESS;else if(*pageorder>
-order)*code=RMNET_MEM_UPGRADE;else if(*pageorder<order)*code=RMNET_MEM_DOWNGRADE
-;}else if(pageorder&&code){*code=RMNET_MEM_FAIL;*pageorder=(0xd2d+202-0xdf7);}
-return page;}EXPORT_SYMBOL(rmnet_mem_get_pages_entry);void 
-rmnet_mem_put_page_entry(struct page*page){put_page(page);}EXPORT_SYMBOL(
-rmnet_mem_put_page_entry);static void mem_update_pool_work(struct work_struct*
-work){int i;for(i=(0xd2d+202-0xdf7);i<POOL_LEN;i++){local_bh_disable();
-rmnet_mem_adjust(target_static_pool_size[i],i);if(i==POOL_NOTIF){
-rmnet_mem_mode_notify(target_static_pool_size[i]);}local_bh_enable();}}void 
-rmnet_mem_adjust(unsigned perm_size,u8 pageorder){struct list_head*entry,*next;
-struct mem_info*mem_slot;int i;struct page*newpage=NULL;int adjustment;unsigned 
-long flags;if(pageorder>=POOL_LEN||perm_size>MAX_STATIC_POOL)return;adjustment=
-perm_size-static_pool_size[pageorder];if(perm_size==static_pool_size[pageorder])
-return;spin_lock_irqsave(&rmnet_mem_lock,flags);if(perm_size>static_pool_size[
-pageorder]){for(i=(0xd2d+202-0xdf7);i<(adjustment);i++){newpage=
-__dev_alloc_pages(GFP_ATOMIC,pageorder);if(!newpage){continue;}
-rmnet_mem_add_page(newpage,pageorder);}}else{list_for_each_safe(entry,next,&(
-rmnet_mem_pool[pageorder])){mem_slot=list_entry(entry,struct mem_info,mem_head);
-list_del(&mem_slot->mem_head);put_page(mem_slot->addr);kfree(mem_slot);
-static_pool_size[pageorder]--;if(static_pool_size[pageorder]==perm_size)break;}}
-spin_unlock_irqrestore(&rmnet_mem_lock,flags);}int __init rmnet_mem_module_init(
-void){int rc=(0xd2d+202-0xdf7);int i=(0xd2d+202-0xdf7);pr_info(
+rmnet_mem_lock,flags);if(order<POOL_LEN){rmnet_mem_id_req[id]++;
+rmnet_mem_order_requests[order]++;for(j=order;j>(0xd2d+202-0xdf7)&&j<POOL_LEN;j
+++){do{mem_page=list_first_entry_or_null(&rmnet_mem_pool[j],struct mem_info,
+mem_head);if(!mem_page){break;}if(page_ref_count(mem_page->addr)==
+(0xd26+209-0xdf6)){rmnet_mem_id_recycled[j]++;page=mem_page->addr;page_ref_inc(
+mem_page->addr);list_rotate_left(&rmnet_mem_pool[j]);break;}list_rotate_left(&
+rmnet_mem_pool[j]);i++;}while(i<=(0xd0a+237-0xdf2));if(page&&pageorder){*
+pageorder=j;break;}i=(0xd2d+202-0xdf7);}}if(!page){DATARMNETfb2a1a4560[id]++;if(
+order<(0xd18+223-0xdf4)){page=__dev_alloc_pages(GFP_ATOMIC,order);if(page){if(
+static_pool_size[order]<max_pool_size[order]&&pool_unbound_feature[order]){
+rmnet_mem_add_page(page,order);page_ref_inc(page);}if(pageorder){*pageorder=
+order;}}}else{if(static_pool_size[order]<max_pool_size[order]&&
+pool_unbound_feature[order]){page=__dev_alloc_pages(GFP_ATOMIC,order);if(page){
+rmnet_mem_add_page(page,order);page_ref_inc(page);}if(pageorder){*pageorder=
+order;}}}}spin_unlock_irqrestore(&rmnet_mem_lock,flags);if(pageorder&&code&&page
+){if(*pageorder==order)*code=RMNET_MEM_SUCCESS;else if(*pageorder>order)*code=
+RMNET_MEM_UPGRADE;else if(*pageorder<order)*code=RMNET_MEM_DOWNGRADE;}else if(
+pageorder&&code){*code=RMNET_MEM_FAIL;*pageorder=(0xd2d+202-0xdf7);}return page;
+}EXPORT_SYMBOL(rmnet_mem_get_pages_entry);void rmnet_mem_put_page_entry(struct 
+page*page){put_page(page);}EXPORT_SYMBOL(rmnet_mem_put_page_entry);static void 
+mem_update_pool_work(struct work_struct*work){int i;for(i=(0xd2d+202-0xdf7);i<
+POOL_LEN;i++){local_bh_disable();rmnet_mem_adjust(target_static_pool_size[i],i);
+if(i==POOL_NOTIF){rmnet_mem_mode_notify(target_static_pool_size[i]);}
+local_bh_enable();}}void rmnet_mem_adjust(unsigned perm_size,u8 pageorder){
+struct list_head*entry,*next;struct mem_info*mem_slot;int i;struct page*newpage=
+NULL;int adjustment;unsigned long flags;if(pageorder>=POOL_LEN||perm_size>
+MAX_STATIC_POOL)return;adjustment=perm_size-static_pool_size[pageorder];if(
+perm_size==static_pool_size[pageorder])return;spin_lock_irqsave(&rmnet_mem_lock,
+flags);if(perm_size>static_pool_size[pageorder]){for(i=(0xd2d+202-0xdf7);i<(
+adjustment);i++){newpage=__dev_alloc_pages(GFP_ATOMIC,pageorder);if(!newpage){
+continue;}rmnet_mem_add_page(newpage,pageorder);}}else{list_for_each_safe(entry,
+next,&(rmnet_mem_pool[pageorder])){mem_slot=list_entry(entry,struct mem_info,
+mem_head);list_del(&mem_slot->mem_head);put_page(mem_slot->addr);kfree(mem_slot)
+;static_pool_size[pageorder]--;if(static_pool_size[pageorder]==perm_size)break;}
+}spin_unlock_irqrestore(&rmnet_mem_lock,flags);}int __init rmnet_mem_module_init
+(void){int rc=(0xd2d+202-0xdf7);int i=(0xd2d+202-0xdf7);pr_info(
 "\x25\x73\x28\x29\x3a\x20\x53\x74\x61\x72\x74\x69\x6e\x67\x20\x72\x6d\x6e\x65\x74\x20\x6d\x65\x6d\x20\x6d\x6f\x64\x75\x6c\x65" "\n"
 ,__func__);for(i=(0xd2d+202-0xdf7);i<POOL_LEN;i++){INIT_LIST_HEAD(&(
 rmnet_mem_pool[i]));}mem_wq=alloc_workqueue("\x6d\x65\x6d\x5f\x77\x71",

+ 2 - 2
mem/rmnet_mem_priv.h

@@ -11,8 +11,8 @@
 #define IPA_ID (0xd26+209-0xdf6)
 #define RMNET_CORE_ID (0xd1f+216-0xdf5)
 #define POOL_LEN (0xd11+230-0xdf3)
-#define MAX_STATIC_POOL (0xcc7+5761-0x221c)
-#define MAX_POOL_O3 (0xbb7+4453-0x1c3c)
+#define MAX_STATIC_POOL (0xc07+1233-0xe1c)
+#define MAX_POOL_O3 (0xbb7+1296-0xe24)
 #define MAX_POOL_O2 (0xbb7+4453-0x1c3c)
 void rmnet_mem_adjust(unsigned perm_size,u8 order);
 #define rm_err(DATARMNET6c3cf5865b, ...)  \