cpu : move cgroup along with children. 47/94447/10
authorKichan Kwon <k_c.kwon@samsung.com>
Mon, 31 Oct 2016 02:23:04 +0000 (11:23 +0900)
committerKichan Kwon <k_c.kwon@samsung.com>
Mon, 7 Nov 2016 04:49:04 +0000 (13:49 +0900)
Change-Id: Id177abb4510935da9396a72355c779ca81a91c4d
Signed-off-by: Kichan Kwon <k_c.kwon@samsung.com>
src/cpu/cpu.c

index 6aa1efd..c1d337b 100644 (file)
@@ -124,6 +124,24 @@ static int cpu_move_cgroup(pid_t pid, char *path)
        return cgroup_write_node(path, CGROUP_FILE_NAME, pid);
 }
 
+static int cpu_move_cgroup_foreach(pid_t pid, struct proc_app_info *pai, char *path)
+{
+       GSList *iter = NULL;
+       pid_t child_pid;
+
+       if (!pai)
+               return cgroup_write_node(path, CGROUP_FILE_NAME, pid);
+
+       cgroup_write_node(path, CGROUP_FILE_NAME, pai->main_pid);
+       if (pai->childs) {
+               gslist_for_each_item(iter, pai->childs) {
+                       child_pid = GPOINTER_TO_PID(iter->data);
+                       cgroup_write_node(path, CGROUP_FILE_NAME, child_pid);
+               }
+       }
+       return RESOURCED_ERROR_NONE;
+}
+
 static bool cpu_quota_enabled(void)
 {
        return bCPUQuota;
@@ -249,7 +267,7 @@ static int cpu_foreground_state(void *data)
        if (pri == -1 || pri > CPU_DEFAULT_PRI)
                setpriority(PRIO_PGRP, ps->pid, CPU_DEFAULT_PRI);
        if (check_predefined(ps->pid) != SET_DEFAUT)
-               cpu_move_cgroup(ps->pid, CPU_DEFAULT_CGROUP);
+               cpu_move_cgroup_foreach(ps->pid, ps->pai, CPU_DEFAULT_CGROUP);
        return RESOURCED_ERROR_NONE;
 }
 
@@ -260,7 +278,7 @@ static int cpu_background_state(void *data)
 
        _D("app background: pid = %d", ps->pid);
        setpriority(PRIO_PGRP, ps->pid, CPU_BACKGROUND_PRI);
-       cpu_move_cgroup(ps->pid, CPU_BACKGROUND_GROUP);
+       cpu_move_cgroup_foreach(ps->pid, ps->pai, CPU_BACKGROUND_GROUP);
        return RESOURCED_ERROR_NONE;
 }
 
@@ -272,7 +290,7 @@ static int cpu_restrict_state(void *data)
        if (CHECK_BIT(ps->pai->categories, PROC_BG_MEDIA))
                return RESOURCED_ERROR_NONE;
        _D("app suspend: pid = %d, appname = %s", ps->pid, ps->pai->appid);
-       cpu_move_cgroup(ps->pid, CPU_CPUQUOTA_GROUP);
+       cpu_move_cgroup_foreach(ps->pid, ps->pai, CPU_CPUQUOTA_GROUP);
        return RESOURCED_ERROR_NONE;
 }
 
@@ -286,7 +304,7 @@ static int cpu_active_state(void *data)
        ret = proc_get_oom_score_adj(ps->pid, &oom_score_adj);
        if (ret || oom_score_adj < OOMADJ_PREVIOUS_DEFAULT)
                return RESOURCED_ERROR_NONE;
-       cpu_move_cgroup(ps->pid, CPU_DEFAULT_CGROUP);
+       cpu_move_cgroup_foreach(ps->pid, ps->pai, CPU_DEFAULT_CGROUP);
        return RESOURCED_ERROR_NONE;
 }
 
@@ -326,7 +344,7 @@ static int cpu_terminatestart_state(void *data)
        struct proc_status *ps = (struct proc_status *)data;
        assert(ps);
 
-       cpu_move_cgroup(ps->pid, CPU_DEFAULT_CGROUP);
+       cpu_move_cgroup_foreach(ps->pid, ps->pai, CPU_DEFAULT_CGROUP);
        return RESOURCED_ERROR_NONE;
 }