common : separate cgroup integer function with uint and int 78/98878/9
authorKichan Kwon <k_c.kwon@samsung.com>
Mon, 21 Nov 2016 05:41:19 +0000 (14:41 +0900)
committerKichan Kwon <k_c.kwon@samsung.com>
Mon, 12 Dec 2016 04:42:58 +0000 (13:42 +0900)
- Some numbers like pid should be written to unsigned int

Change-Id: Id34e1395974afd7526e1d92bb2dcfef4a2fd4f84
Signed-off-by: Kichan Kwon <k_c.kwon@samsung.com>
src/common/cgroup.c
src/common/cgroup.h
src/cpu/cpu.c
src/memory/memcontrol.c
src/memory/vmpressure-lowmem-handler.c
src/swap/swap.c
src/timer-slack/timer-slack.c
src/vip-agent/vip-process.c

index 7a466fb..20702c7 100644 (file)
@@ -68,8 +68,15 @@ static int cgroup_create(const char *cgroup_full_path)
 resourced_ret_c cgroup_write_pid_fullpath(const char *cgroup_full_path,
        const int pid)
 {
+       int ret;
        char buf[256];
-       int ret = cgroup_write_node(cgroup_full_path, CGROUP_FILE_NAME,
+
+       if (pid <=0) {
+               _E("try to write empty pid to %s", cgroup_full_path);
+               return RESOURCED_ERROR_NO_DATA;
+       }
+
+       ret = cgroup_write_node_uint32(cgroup_full_path, CGROUP_FILE_NAME,
                (u_int32_t)pid);
 
        ret_value_msg_if(ret < 0, RESOURCED_ERROR_FAIL,
@@ -126,8 +133,17 @@ resourced_ret_c cgroup_write_pidtree(const char *cgroup_subsystem,
        return RESOURCED_ERROR_NONE;
 }
 
-int cgroup_write_node(const char *cgroup_name,
-               const char *file_name, unsigned int value)
+int cgroup_write_node_uint32(const char *cgroup_name,
+               const char *file_name, uint32_t value)
+{
+       char buf[MAX_PATH_LENGTH];
+       snprintf(buf, sizeof(buf), "%s/%s", cgroup_name, file_name);
+       _SD("cgroup_buf %s, value %d\n", buf, value);
+       return fwrite_uint(buf, value);
+}
+
+int cgroup_write_node_int32(const char *cgroup_name,
+               const char *file_name, int32_t value)
 {
        char buf[MAX_PATH_LENGTH];
        snprintf(buf, sizeof(buf), "%s/%s", cgroup_name, file_name);
@@ -144,8 +160,8 @@ int cgroup_write_node_str(const char *cgroup_name,
        return fwrite_str(buf, string);
 }
 
-int cgroup_read_node(const char *cgroup_name,
-               const char *file_name, unsigned int *value)
+int cgroup_read_node_uint32(const char *cgroup_name,
+               const char *file_name, uint32_t *value)
 {
        char buf[MAX_PATH_LENGTH];
        int ret;
@@ -155,6 +171,17 @@ int cgroup_read_node(const char *cgroup_name,
        return ret;
 }
 
+int cgroup_read_node_int32(const char *cgroup_name,
+               const char *file_name, int32_t *value)
+{
+       char buf[MAX_PATH_LENGTH];
+       int ret;
+       snprintf(buf, sizeof(buf), "%s/%s", cgroup_name, file_name);
+       ret = fread_int(buf, value);
+       _SD("cgroup_buf %s, value %d\n", buf, *value);
+       return ret;
+}
+
 int cgroup_make_subdir(const char* parentdir, const char* cgroup_name, bool *already)
 {
        char buf[MAX_PATH_LENGTH];
@@ -274,39 +301,6 @@ int cgroup_pid_get_path(const char *controller, pid_t pid, char **path)
        return 0;
 }
 
-int cgroup_get_pids(const char *name, GArray **pids)
-{
-       _cleanup_free_ char *cg_procs = NULL;
-       _cleanup_fclose_ FILE *f = NULL;
-       char buf[MAX_PATH_LENGTH] = "";
-       GArray *array;
-       pid_t pid;
-
-       assert(name);
-       assert(pids);
-       assert(!pids);
-
-       if (asprintf(&cg_procs, "%s/cgroup.procs", name) < 0)
-               return -ENOMEM;
-
-       f = fopen(cg_procs, "r");
-       if (!f) {
-               _E("Failed to open '%s': %m", name);
-               return -errno;
-       }
-
-       array = g_array_new(false, false, sizeof(pid_t));
-
-       while (fgets(buf, 32, f)) {
-               pid = atoi(buf);
-               g_array_append_val(array, pid);
-       }
-
-       *pids = array;
-
-       return 0;
-}
-
 static void cgroup_memory_stat_init(struct cgroup_memory_stat *mem_stat, long long val)
 {
        enum cgroup_memory_stat_id id;
@@ -399,3 +393,35 @@ int cgroup_get_memory_stat(const char *name, struct cgroup_memory_stat **mem_sta
  *     g_array_free(pids_array, TRUE);
  *
  */
+int cgroup_get_pids(const char *name, GArray **pids)
+{
+       _cleanup_free_ char *cg_procs = NULL;
+       _cleanup_fclose_ FILE *f = NULL;
+       char buf[MAX_PATH_LENGTH] = "";
+       GArray *array;
+       pid_t pid;
+
+       assert(name);
+       assert(pids);
+       assert(!*pids);
+
+       if (asprintf(&cg_procs, "%s/cgroup.procs", name) < 0)
+               return -ENOMEM;
+
+       f = fopen(cg_procs, "r");
+       if (!f) {
+               _E("Failed to open '%s': %m", name);
+               return -errno;
+       }
+
+       array = g_array_new(false, false, sizeof(pid_t));
+
+       while (fgets(buf, 32, f)) {
+               pid = atoi(buf);
+               g_array_append_val(array, pid);
+       }
+
+       *pids = array;
+
+       return 0;
+}
index 2cb67e4..9a2f10e 100644 (file)
  *
  */
 
+#include <assert.h>
+#include <string.h>
 #include <resourced.h>
 #include <sys/types.h>
+#include <stdint.h>
 #include <glib.h>
+#include "macro.h"
 
 /*
  * Cgroup creation interface
 #define PROC_TASK_CHILDREN   "/proc/%d/task/%d/children"
 
 /**
- * @desc Get one unsigned int value from cgroup
+ * @desc Get one unsigned int32 value from cgroup
  * @param cgroup_name - cgroup path
  * @param file_name - cgroup content to write
  * @param value - out parameter, value to fill
  * @return negative value if error
 */
-int cgroup_read_node(const char *cgroup_name,
-               const char *file_name, unsigned int *value);
+int cgroup_read_node_uint32(const char *cgroup_name,
+               const char *file_name, uint32_t *value);
 
 /**
- * @desc Put value to cgroup,
+ * @desc Get one signed int32 value from cgroup
+ * @param cgroup_name - cgroup path
+ * @param file_name - cgroup content to write
+ * @param value - out parameter, value to fill
+ * @return negative value if error
+ */
+int cgroup_read_node_int32(const char *cgroup_name,
+               const char *file_name, int32_t *value);
+
+/**
+ * @desc Put unsigned int32 value to cgroup,
+ * @param cgroup_name - cgroup path
+ * @param file_name - cgroup content to write
+ * @param value - unsigned int32 data to write
+ * @return negative value if error
+ */
+int cgroup_write_node_uint32(const char *cgroup_name,  const char *file_name, uint32_t value);
+
+/**
+ * @desc Put signed int32 value to cgroup,
  * @param cgroup_name - cgroup path
  * @param file_name - cgroup content to write
- * @param value - data to write
+ * @param value - signed int32 data to write
  * @return negative value if error
  */
-int cgroup_write_node(const char *cgroup_name,  const char *file_name, unsigned int value);
+int cgroup_write_node_int32(const char *cgroup_name,  const char *file_name, int32_t value);
 
 /**
  * @desc Put value to cgroup,
index fb0cae1..98bf08c 100644 (file)
@@ -122,7 +122,7 @@ static int check_predefined(const pid_t pid)
 
 static int cpu_move_cgroup(pid_t pid, char *path)
 {
-       return cgroup_write_node(path, CGROUP_FILE_NAME, pid);
+       return cgroup_write_node_uint32(path, CGROUP_FILE_NAME, pid);
 }
 
 static int cpu_move_cgroup_foreach(pid_t pid, struct proc_app_info *pai, char *path)
@@ -131,13 +131,13 @@ static int cpu_move_cgroup_foreach(pid_t pid, struct proc_app_info *pai, char *p
        pid_t child_pid;
 
        if (!pai)
-               return cgroup_write_node(path, CGROUP_FILE_NAME, pid);
+               return cgroup_write_node_uint32(path, CGROUP_FILE_NAME, pid);
 
-       cgroup_write_node(path, CGROUP_FILE_NAME, pai->main_pid);
+       cgroup_write_node_uint32(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);
+                       cgroup_write_node_uint32(path, CGROUP_FILE_NAME, child_pid);
                }
        }
        return RESOURCED_ERROR_NONE;
@@ -164,7 +164,7 @@ static int get_relative_value(const char *cgroup_name,
 {
        unsigned int val;
 
-       if (cgroup_read_node(cgroup_name, file_name, &val) != RESOURCED_ERROR_NONE) {
+       if (cgroup_read_node_uint32(cgroup_name, file_name, &val) != RESOURCED_ERROR_NONE) {
                _E("Can't read %s%s. value is set to 1000", cgroup_name, file_name);
                val = 1000;
        }
@@ -215,17 +215,17 @@ static int load_cpu_config(struct parse_result *result, void *user_data)
        } else if (!strncmp(result->name, "BACKGROUND_CPU_SHARE", strlen("BACKGROUND_CPU_SHARE")+1)) {
                value = atoi(result->value);
                if (value)
-                       cgroup_write_node(CPU_BACKGROUND_GROUP, CPU_SHARE,
+                       cgroup_write_node_uint32(CPU_BACKGROUND_GROUP, CPU_SHARE,
                                        get_relative_value(CPU_DEFAULT_CGROUP, CPU_SHARE, value));
        } else if (!strncmp(result->name, "QUOTA_CPU_SHARE", strlen("QUOTA_CPU_SHARE")+1)) {
                value = atoi(result->value);
                if (value && cpu_quota_enabled())
-                       cgroup_write_node(CPU_CPUQUOTA_GROUP, CPU_SHARE,
+                       cgroup_write_node_uint32(CPU_CPUQUOTA_GROUP, CPU_SHARE,
                                        get_relative_value(CPU_DEFAULT_CGROUP, CPU_SHARE, value));
        } else if (!strncmp(result->name, "QUOTA_MAX_BANDWIDTH", strlen("QUOTA_MAX_BANDWIDTH")+1)) {
                value = atoi(result->value);
                if (value && cpu_quota_enabled())
-                       cgroup_write_node(CPU_CPUQUOTA_GROUP, CPU_CONTROL_BANDWIDTH,
+                       cgroup_write_node_uint32(CPU_CPUQUOTA_GROUP, CPU_CONTROL_BANDWIDTH,
                                        get_relative_value(CPU_CPUQUOTA_GROUP,
                                                CPU_CONTROL_FULL_BANDWIDTH, value));
        }
index 50acf4f..28d982c 100644 (file)
@@ -188,7 +188,7 @@ int memcg_get_anon_usage(struct memcg_info *mi, unsigned long long *anon_usage)
 
 int memcg_get_usage(struct memcg_info *mi, unsigned int *usage_bytes)
 {
-       return cgroup_read_node(mi->name, "memory.usage_in_bytes", usage_bytes);
+       return cgroup_read_node_uint32(mi->name, "memory.usage_in_bytes", usage_bytes);
 }
 
 /*
index 504eb68..040d1ca 100644 (file)
@@ -1029,7 +1029,7 @@ void lowmem_trigger_swap(pid_t pid, int memcg_idx)
 
        mi = memcg_tree[memcg_idx]->info;
        _D("name : %s, pid : %d", mi->name, pid);
-       cgroup_write_node(mi->name, CGROUP_FILE_NAME, pid);
+       cgroup_write_node_uint32(mi->name, CGROUP_FILE_NAME, pid);
        msg.type = memcg_idx;
        msg.info = mi;
        resourced_notify(RESOURCED_NOTIFIER_SWAP_START, &msg);
@@ -1525,7 +1525,7 @@ static int write_params_memcg_info(struct memcg_info *mi,
        int ret = RESOURCED_ERROR_NONE;
        _I("write memcg param for %s", name);
        /* enable cgroup move */
-       ret = cgroup_write_node(name,
+       ret = cgroup_write_node_uint32(name,
                        MEMCG_MOVE_CHARGE_PATH, 3);
        if (ret)
                return ret;
@@ -1539,13 +1539,13 @@ static int write_params_memcg_info(struct memcg_info *mi,
                return ret;
 
        /* disable memcg OOM-killer */
-       ret = cgroup_write_node(name,
+       ret = cgroup_write_node_uint32(name,
                        MEMCG_OOM_CONTROL_PATH, 1);
        if (ret)
                return ret;
 
        /* write limit_in_bytes */
-       ret = cgroup_write_node(name,
+       ret = cgroup_write_node_uint32(name,
                        MEMCG_LIMIT_PATH, limit);
        _I("set %s's limit to %u", name, limit);
        return ret;
@@ -1668,7 +1668,7 @@ static void lowmem_move_memcgroup(int pid, int oom_score_adj)
        _D("pid: %d, proc_name: %s, cg_name: %s, oom_score_adj: %d", pid,
                        pai ? pai->appid : "---", memcg_name[memcg_idx],
                        oom_score_adj);
-       cgroup_write_node(mi->name, CGROUP_FILE_NAME, pid);
+       cgroup_write_node_uint32(mi->name, CGROUP_FILE_NAME, pid);
        proc_set_process_memory_state(pai, memcg_idx, mi, oom_score_adj);
 
        /*
index 947a960..d03a1d4 100644 (file)
@@ -386,7 +386,7 @@ static int swap_reclaim_memcg(struct swap_status_msg msg)
        memcg_limit = swap_calculate_hard_limit_in_bytes(usage);
        _D("Swap request: %s cgroup usage is %lu, hard limit set to %lu (hard limit fraction %f)",
                        msg.info->name, usage, memcg_limit, swap_hard_limit_fraction);
-       ret = cgroup_write_node(msg.info->name, MEMCG_SIZE_LIMIT, memcg_limit);
+       ret = cgroup_write_node_uint32(msg.info->name, MEMCG_SIZE_LIMIT, memcg_limit);
        if (ret != RESOURCED_ERROR_NONE)
                _E("Not able to set hard limit of %s memory cgroup", msg.info->name);
 
@@ -752,7 +752,7 @@ static int swap_cgroup_reset_limit(void *data)
        struct swap_status_msg *msg = data;
 
        limit = -1;
-       ret = cgroup_write_node(msg->info->name, MEMCG_SIZE_LIMIT, limit);
+       ret = cgroup_write_node_int32(msg->info->name, MEMCG_SIZE_LIMIT, limit);
        if (ret != RESOURCED_ERROR_NONE)
                _E("Failed to change hard limit of %s cgroup to -1", msg->info->name);
        else
@@ -1015,7 +1015,7 @@ static void resourced_swap_change_memcg_settings(enum memcg_type type)
        if (ret != RESOURCED_ERROR_NONE)
                return;
 
-       cgroup_write_node(memcg_swap->info->name, MOVE_CHARGE, 1);
+       cgroup_write_node_uint32(memcg_swap->info->name, MOVE_CHARGE, 1);
 }
 
 static int resourced_swap_init(void *data)
index 43518a1..07d8d07 100644 (file)
@@ -93,9 +93,9 @@ static int timer_slack_write(char *sub_cgroup, char *node, int val)
        int ret;
        if (sub_cgroup) {
                snprintf(path_buf, sizeof(path_buf), "%s/%s", TIMER_CGROUP_PATH, sub_cgroup);
-               ret = cgroup_write_node(path_buf, node, val);
+               ret = cgroup_write_node_uint32(path_buf, node, val);
        } else
-               ret = cgroup_write_node(TIMER_CGROUP_PATH, node, val);
+               ret = cgroup_write_node_uint32(TIMER_CGROUP_PATH, node, val);
        return ret;
 }
 
index f300c46..13b39fb 100644 (file)
@@ -116,7 +116,7 @@ static int vip_create_sub_cgroup(const char *name, pid_t pid)
                return -ENOMEM;
        }
 
-       r = cgroup_write_node(cgroup_name, TASK_FILE_NAME, pid);
+       r = cgroup_write_node_uint32(cgroup_name, TASK_FILE_NAME, pid);
        if (r < 0) {
                _E("failed to write pid '%d' to '%s': %s",
                   pid, cgroup_name, strerror_r(-r, buf, sizeof(buf)));