--- ./source/private_module/cmm/cmm_fmea.c	2018-12-02 02:40:58.000000000 +0800
+++ ./source/private_module/cmm/cmm_fmea.c.hotpatch	2018-12-02 02:40:58.000000000 +0800
@@ -989,3 +989,58 @@
 }
 
 #endif
+extern int32_t findPartitionByName(char* partitionName, uint32_t ownerModuleID, uint32_t *partitonID);
+int32_t cmm_set_exp_partition_maxcnt_patch(char* part_name, uint32_t   owner_modid, uint32_t max_cnt)
+{
+        uint32_t ret = -1;
+        uint32_t part_id = 0;
+        uint64_t slab_count_exp;
+        uint64_t slab_count_max_origin;
+        uint64_t slab_add_count = 0;
+        struct cmm_slab_partition_s *slab_part = NULL;
+
+        if(part_name == NULL || max_cnt == 0){
+              printk("CMM cmm_set_exp_partition_maxcnt_patch:param invaild: part_name is NULL, max_cnt is %d.\n", max_cnt);
+              return -1;
+        }
+
+        ret = findPartitionByName(part_name, owner_modid, &part_id);
+        if(ret == RETURN_ERROR){
+            printk("CMM cmm_set_exp_partition_maxcnt_patch: find part by partname(%s) fail.\n", part_name);
+            return -1;
+        }
+        
+        slab_part = cmm_get_slab_part(part_id);
+            /* slabΪջ߲չ */
+        if (slab_part ==  NULL || (!slab_part->ops))
+        {
+            printk("CMM cmm_set_exp_partition_maxcnt_patch: part(%s) cannot find or cannot exp.\n", part_name);
+            return -1;
+        }
+
+        printk("CMM cmm_set_exp_partition_maxcnt_patch:part id:%s,  new max_cnt:%d, origin uplimit exp count:%d, origin obj_count_max_real:%d.\n", 
+                    part_name, max_cnt, slab_part->uplimit_of_exp_slab_count, slab_part->obj_count_max_real);
+
+        slab_count_max_origin = slab_part->obj_count_max;
+        slab_count_exp = slab_part->obj_count_per_exp_slab;
+        if (max_cnt <= slab_count_max_origin)
+        {
+            printk("CMM cmm_set_exp_partition_maxcnt_patch warning: part(%s) param max_cnt(%d) is smaller than origin max_cnt(%d).\n",
+                    part_name, max_cnt, slab_count_max_origin);
+            return -1;
+        }
+
+        if (slab_count_exp == 0)
+        {
+            printk("CMM cmm_set_exp_partition_maxcnt_patch warning: part (%s) obj_count_per_exp_slab is zero.\n", part_name);
+            return -1;
+        }
+        
+        
+        slab_part->uplimit_of_exp_slab_count = (max_cnt - slab_part->obj_count_fix)/slab_count_exp + 1;
+        slab_part->obj_count_max_real = max_cnt + (slab_part->obj_count_fix_real - slab_part->obj_count_fix);
+        printk("CMM cmm_set_exp_partition_maxcnt_patch: set succ, part name:%s, new uplimit exp count:%d, new count_max_real:%d.\n",
+                    part_name,  slab_part->uplimit_of_exp_slab_count, slab_part->obj_count_max_real);
+        return 0;
+}
+EXPORT_SYMBOL(cmm_set_exp_partition_maxcnt_patch);
\ No newline at end of file
