diff options
-rw-r--r-- | src/resource-limiter/memory/lowmem-controller.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/resource-limiter/memory/lowmem-controller.c b/src/resource-limiter/memory/lowmem-controller.c index ecfcf3e9..379257a2 100644 --- a/src/resource-limiter/memory/lowmem-controller.c +++ b/src/resource-limiter/memory/lowmem-controller.c @@ -358,8 +358,27 @@ static void lowmem_move_memcgroup(int pid, int next_oom_score_adj, struct proc_a switch (next_memcg_idx) { case MEMCG_ROOT: case MEMCG_BACKGROUND_LRU: - if (pai->memory.use_mem_limit) + if (pai->memory.use_mem_limit) { + /** + * FIXME: + * Calling lowmem_limit_move_cgroup will write + * all pids in the pai to its corresponding + * cgroup node. + * Normally, it has no effect but can fix + * abnormal situation such as 'some pids are + * added to the pai but not appeared in the + * cgroup'. + * This situation can be generated when the + * "AppGroup" signal is sent from the AMD but + * the child pid to group with is not managed by + * the resourced. + */ + int ret = lowmem_limit_move_cgroup(pai); + assert(ret != RESOURCED_ERROR_NO_DATA); + if (ret != RESOURCED_ERROR_NONE) + _E("Failed to move cgroup for child pid(%d)", pid); return; + } break; case MEMCG_BACKGROUND_MRU: break; |