pass: Replace struct pass_policy to pass_resource for representing h/w resource 40/163440/3
authorChanwoo Choi <cw00.choi@samsung.com>
Mon, 6 Nov 2017 01:47:24 +0000 (10:47 +0900)
committerChanwoo Choi <cw00.choi@samsung.com>
Mon, 11 Dec 2017 08:13:11 +0000 (17:13 +0900)
The commit 86cd810d6e1ae ("pass: Add new helper function to handle
the h/w resource through hal interface") introduced the 'struct pass_resource'
which represents the each h/w resource such as CPU/GPU/BUS, memory and so on.

Before applied commit 86cd810d6e1ae, PASS used the 'struct pass_policy' which
represented the each h/w resource. So, this patch replaces 'struct pass_policy'
to 'struct pass_resource' for representing the each h/w resource.

Change-Id: I714c633255696af2cbf4719ce2892f15b37e1b25
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
12 files changed:
src/pass/pass-gov.c
src/pass/pass-gov.h
src/pass/pass-hal.c
src/pass/pass-hal.h
src/pass/pass-parser.c
src/pass/pass-parser.h
src/pass/pass-pmqos.c
src/pass/pass-pmqos.h
src/pass/pass-rescon.c
src/pass/pass-rescon.h
src/pass/pass.c
src/pass/pass.h

index e38878838b3a9d369d717e6eef5dbaec9a717222..aa511a970ba1a589adad066e2357ecd621afb472 100644 (file)
 
 #define PASS_CPU_STATS_MAX_COUNT       20
 
+struct pass_governor {
+       char name[BUFF_MAX];
+       enum pass_gov_state gov_state;
+
+       int (*init)(struct pass_resource *res);
+       int (*exit)(struct pass_resource *res);
+       int (*update)(struct pass_resource *res, enum pass_gov_state state);
+       int (*governor)(struct pass_resource *res);
+};
+
 /*
  * is_enabled - Check the state of PASS governor
- * @policy: instance of pass_policy structure
+ * @policy: the instance of struct pass_policy
  *
  * Return true if the state of PASS is PASS_GOV_START
  * Return false if the state of PASS is PASS_GOV_STOP
  */
 static bool is_enabled(struct pass_policy *policy)
 {
-       if (!policy)
-               return false;
-
        if (policy->governor->gov_state != PASS_GOV_START)
                return false;
 
@@ -53,38 +60,38 @@ static bool is_enabled(struct pass_policy *policy)
 /*
  * pass_notifier_pmqos - Callback func of DEVICE_NOTIFIER_PMQOS
  * @data: the scenario name
- * @user_data: the instance of struct pass_policy
+ * @user_data: the instance of struct pass_resource
  */
 static int pass_notifier_pmqos(void *data, void *user_data)
 {
-       struct pass_policy *policy = user_data;
+       struct pass_resource *res = user_data;
 
-       if (policy->state == PASS_ON)
-               pass_notifier_pmqos_func(policy, data);
+       if (res->policy.state == PASS_ON)
+               pass_notifier_pmqos_func(res, data);
 
        return 0;
 }
 
 /*
  * pass_notifier_init - Register notifiers and init
- * @policy: the instance of pass_policy structure
+ * @res: the instance of struct pass_resource
  */
-static int pass_notifier_init(struct pass_policy *policy)
+static int pass_notifier_init(struct pass_resource *res)
 {
        /* Register DEVICE_NOTIFIER_PMQOS */
        return register_notifier(DEVICE_NOTIFIER_PMQOS, pass_notifier_pmqos,
-                       policy);
+                       res);
 }
 
 /*
  * pass_notifier_exit - Un-register notifiers and exit
- * @policy: the instance of pass_policy structure
+ * @res: the instance of struct pass_resource
  */
-static int pass_notifier_exit(struct pass_policy *policy)
+static int pass_notifier_exit(struct pass_resource *res)
 {
        /* Un-register DEVICE_NOTIFIER_PMQOS */
        unregister_notifier(DEVICE_NOTIFIER_PMQOS, pass_notifier_pmqos,
-                       policy);
+                       res);
 
        return 0;
 }
@@ -95,11 +102,11 @@ static int pass_notifier_exit(struct pass_policy *policy)
 
 /*
  * pass_hotplug_stop - Stop PASS hotplug
- *
- * @policy: the instance of struct pass_policy
+ * @res: the instance of struct pass_resource
  */
-static void pass_hotplug_stop(struct pass_policy *policy)
+static void pass_hotplug_stop(struct pass_resource *res)
 {
+       struct pass_policy *policy = &res->policy;
        struct pass_level *levels = policy->levels;
        int level = policy->max_level;
 
@@ -109,8 +116,9 @@ static void pass_hotplug_stop(struct pass_policy *policy)
        policy->hotplug->online = levels[level].limit_min_cpu;
 }
 
-static int pass_hotplug_dummy_governor(struct pass_policy *policy)
+static int pass_hotplug_dummy_governor(struct pass_resource *res)
 {
+       struct pass_policy *policy = &res->policy;
        int level = policy->curr_level;
 
        return policy->levels[level].limit_min_cpu;
@@ -118,10 +126,10 @@ static int pass_hotplug_dummy_governor(struct pass_policy *policy)
 
 /*
  * pass_get_governor - Return specific hotplug instance according to type
- *
+ * @res: the instance of struct pass_resource
  * @type: the type of PASS hotplug
  */
-struct pass_hotplug* pass_get_hotplug(struct pass_policy *policy,
+struct pass_hotplug* pass_get_hotplug(struct pass_resource *res,
                                        enum pass_gov_type type)
 {
        struct pass_hotplug *hotplug;
@@ -157,13 +165,12 @@ struct pass_hotplug* pass_get_hotplug(struct pass_policy *policy,
 /*
  * pass_calculate_busy_cpu - Count a number of busy cpu among NR_CPUS by using
  *                          runnable_avg_sum/runnable_avg_period
- *
- * @policy: the instance of struct pass_policy
+ * @res: the instance of struct pass_resource
  */
-static void pass_calculate_busy_cpu(struct pass_policy *policy)
+static void pass_calculate_busy_cpu(struct pass_resource *res)
 {
+       struct pass_policy *policy = &res->policy;
        struct pass_cpu_stats *stats = policy->pass_cpu_stats;
-       struct pass_resource *res = to_pass_resource(policy);
        struct pass_level *levels = policy->levels;
        struct pass_conf_data *cdata = &res->cdata;
        unsigned int level = policy->curr_level;
@@ -224,17 +231,17 @@ static void pass_calculate_busy_cpu(struct pass_policy *policy)
 
 /*
  * pass_governor_timeout_cb - Callback for each timeout interval of the governor
- *
- * @data: the instance of struct pass_policy
+ * @data: the instance of struct pass_resource
 */
 static gboolean pass_governor_timeout_cb(gpointer data)
 {
-       struct pass_policy *policy = (struct pass_policy *) data;
+       struct pass_resource *res = (struct pass_resource *)data;
+       struct pass_policy *policy = &res->policy;
        static int count = 0;
        double curr_gov_timeout, next_gov_timeout;
        int level, ret;
 
-       if (!policy) {
+       if (!res) {
                _E("cannot call the governor timeout callback\n");
                return FALSE;
        }
@@ -245,7 +252,7 @@ static gboolean pass_governor_timeout_cb(gpointer data)
         * - the number of nr_running
         * - the resource utilization
         */
-       ret = pass_get_cpu_stats(policy);
+       ret = pass_get_cpu_stats(res);
        if (ret < 0) {
                if (count++ < PASS_CPU_STATS_MAX_COUNT)
                        return TRUE;
@@ -253,25 +260,25 @@ static gboolean pass_governor_timeout_cb(gpointer data)
                count = 0;
 
                _E("cannot read the 'pass_cpu_stats' sysfs entry");
-               pass_governor_update(policy, PASS_GOV_STOP);
+               pass_governor_update(res, PASS_GOV_STOP);
 
                return FALSE;
        }
 
        /* Calculate the number of busy cpu */
-       pass_calculate_busy_cpu(policy);
+       pass_calculate_busy_cpu(res);
 
        /* Store current governor timeout */
        curr_gov_timeout = policy->levels[policy->curr_level].gov_timeout;
 
        /* Determine the amount of proper resource */
        if (policy->governor->governor) {
-               level = policy->governor->governor(policy);
+               level = policy->governor->governor(res);
 
-               pass_rescon_set_level(policy, level);
+               pass_rescon_set_level(res, level);
        } else {
                _E("cannot call the governor function");
-               pass_governor_update(policy, PASS_GOV_STOP);
+               pass_governor_update(res, PASS_GOV_STOP);
                return FALSE;
        }
 
@@ -290,7 +297,7 @@ static gboolean pass_governor_timeout_cb(gpointer data)
                policy->gov_timeout_id = g_timeout_add(
                                (guint)(next_gov_timeout * 1000),
                                pass_governor_timeout_cb,
-                               (gpointer)policy);
+                               (gpointer)res);
        }
 
        return TRUE;
@@ -298,12 +305,11 @@ static gboolean pass_governor_timeout_cb(gpointer data)
 
 /*
  * __pass_governor_start - Start PASS governor through D-Bus
- *
- * @policy: the instance of struct pass_policy
+ * @res: the instance of struct pass_resource
  */
-static void __pass_governor_start(struct pass_policy *policy)
+static void __pass_governor_start(struct pass_resource *res)
 {
-       struct pass_resource *res = to_pass_resource(policy);
+       struct pass_policy *policy = &res->policy;
        struct pass_conf_data *cdata = &res->cdata;
 
        if (!policy->governor) {
@@ -321,10 +327,10 @@ static void __pass_governor_start(struct pass_policy *policy)
                policy->gov_timeout_id = g_timeout_add(
                                (guint)(policy->gov_timeout * 1000),
                                (GSourceFunc)pass_governor_timeout_cb,
-                               (gpointer)policy);
+                               (gpointer)res);
                if (!policy->gov_timeout_id) {
                        _E("cannot add core timer for governor");
-                       pass_governor_update(policy, PASS_GOV_STOP);
+                       pass_governor_update(res, PASS_GOV_STOP);
                        return;
                }
        } else {
@@ -339,7 +345,7 @@ static void __pass_governor_start(struct pass_policy *policy)
        if (policy->init_level > policy->max_level)
                policy->init_level = policy->max_level;
 
-       pass_rescon_set_level(policy, policy->init_level);
+       pass_rescon_set_level(res, policy->init_level);
 
        /* Set PASS state as PASS_GOV_START */
        policy->governor->gov_state = PASS_GOV_START;
@@ -349,12 +355,11 @@ static void __pass_governor_start(struct pass_policy *policy)
 
 /*
  * __pass_governor_stop - Stop PASS governor through D-Bus
- *
- * @policy: the instance of struct pass_policy
+ * @res: the instance of struct pass_resource
  */
-static void __pass_governor_stop(struct pass_policy *policy)
+static void __pass_governor_stop(struct pass_resource *res)
 {
-       struct pass_resource *res = to_pass_resource(policy);
+       struct pass_policy *policy = &res->policy;
        struct pass_conf_data *cdata = &res->cdata;
 
        if (!policy->governor) {
@@ -367,7 +372,7 @@ static void __pass_governor_stop(struct pass_policy *policy)
                return;
        }
 
-       pass_hotplug_stop(policy);
+       pass_hotplug_stop(res);
 
        if (policy->gov_timeout_id) {
                g_source_remove(policy->gov_timeout_id);
@@ -380,42 +385,44 @@ static void __pass_governor_stop(struct pass_policy *policy)
        _I("Stop governor for '%s' resource", cdata->res_name);
 }
 
-static int __pass_governor_init(struct pass_policy *policy)
+static int __pass_governor_init(struct pass_resource *res)
 {
+       struct pass_policy *policy = &res->policy;
        int ret;
 
        if (policy->gov_timeout < 0) {
                _E("invalid timeout value [%d]!", policy->gov_timeout);
-               pass_governor_update(policy, PASS_GOV_STOP);
+               pass_governor_update(res, PASS_GOV_STOP);
                return -EINVAL;
        }
 
        /* Set default PASS state */
        policy->governor->gov_state = PASS_GOV_STOP;
-       ret = pass_notifier_init(policy);
+       ret = pass_notifier_init(res);
        if (ret < 0) {
                _E("cannot initialize notifier for the pmqos (%d)\n", ret);
                return ret;
        }
 
        if (policy->state == PASS_ON)
-               pass_governor_update(policy, PASS_GOV_START);
+               pass_governor_update(res, PASS_GOV_START);
 
        return 0;
 }
 
-static int __pass_governor_exit(struct pass_policy *policy)
+static int __pass_governor_exit(struct pass_resource *res)
 {
+       struct pass_policy *policy = &res->policy;
        int i;
 
        /* Exit notifier */
-       pass_notifier_exit(policy);
+       pass_notifier_exit(res);
 
        /*
         * Stop timer and
         * Restore the frequency and the number of online resources
         */
-       pass_governor_update(policy, PASS_GOV_STOP);
+       pass_governor_update(res, PASS_GOV_STOP);
 
        /* Free allocated memory */
        for (i = 0; i < policy->num_pass_cpu_stats; i++) {
@@ -448,20 +455,15 @@ static int __pass_governor_exit(struct pass_policy *policy)
        return 0;
 }
 
-static int __pass_governor_update(struct pass_policy *policy,
+static int __pass_governor_update(struct pass_resource *res,
                        enum pass_gov_state state)
 {
-       if (!policy) {
-               _E("cannot update PASS governor");
-               return -EINVAL;
-       }
-
        switch (state) {
        case PASS_GOV_START:
-               __pass_governor_start(policy);
+               __pass_governor_start(res);
                break;
        case PASS_GOV_STOP:
-               __pass_governor_stop(policy);
+               __pass_governor_stop(res);
                break;
        default:
                _E("Unknown governor state");
@@ -505,10 +507,9 @@ static struct pass_governor pass_gov_radiation = {
 
 /*
  * pass_get_governor - Return specific governor instance according to type
- *
  * @type: the type of PASS governor
  */
-struct pass_governor* pass_get_governor(struct pass_policy *policy,
+struct pass_governor* pass_get_governor(struct pass_resource *res,
                                                enum pass_gov_type type)
 {
        switch (type) {
@@ -533,42 +534,62 @@ struct pass_governor* pass_get_governor(struct pass_policy *policy,
 }
 
 /*
- * __pass_governor_init - Initialize PASS governor
- *
- * @policy: the instance of struct pass_policy
+ * pass_governor_init - Initialize PASS governor
+ * @res: the instance of struct pass_resource
  */
-int pass_governor_init(struct pass_policy *policy)
+int pass_governor_init(struct pass_resource *res)
 {
-       if (!policy || !policy->governor || !policy->governor->init)
+       struct pass_policy *policy;
+
+       if (!res)
                return -EINVAL;
 
-       return policy->governor->init(policy);
+       policy = &res->policy;
+
+       if (!policy->governor || !policy->governor->init)
+               return -EINVAL;
+
+       return policy->governor->init(res);
 }
 
 /*
- * __pass_governor_exit - Exit PASS governor
+ * pass_governor_exit - Exit PASS governor
+ * @res: the instance of struct pass_resource
  */
-int pass_governor_exit(struct pass_policy *policy)
+int pass_governor_exit(struct pass_resource *res)
 {
-       if (!policy || !policy->governor || !policy->governor->exit)
+       struct pass_policy *policy;
+
+       if (!res)
                return -EINVAL;
 
-       return policy->governor->exit(policy);
+       policy = &res->policy;
+
+       if (!policy->governor || !policy->governor->exit)
+               return -EINVAL;
+
+       return policy->governor->exit(res);
 }
 
 /*
- * __pass_governor_update - Restart/Pause PASS governor
- *
- * @policy: the instance of struct pass_policy
+ * pass_governor_update - Restart/Pause PASS governor
+ * @res: the instance of struct pass_resource
  * @state: the state of governor
  *     PASS_GOV_START : start governor
  *     PASS_GOV_STOP: stop governor
  */
-int pass_governor_update(struct pass_policy *policy,
+int pass_governor_update(struct pass_resource *res,
                                        enum pass_gov_state state)
 {
-       if (!policy || !policy->governor || !policy->governor->update)
+       struct pass_policy *policy;
+
+       if (!res)
+               return -EINVAL;
+
+       policy = &res->policy;
+
+       if (!policy->governor || !policy->governor->update)
                return -EINVAL;
 
-       return policy->governor->update(policy, state);
+       return policy->governor->update(res, state);
 }
index 9bbbada8d495748f2a3024d991c68054cd3e212e..f91e67815f27d7f5b1449a4a680ce59a65e7e5bc 100644 (file)
@@ -25,29 +25,20 @@ enum pass_gov_state {
        PASS_GOV_STOP,
 };
 
-struct pass_governor {
-       char name[BUFF_MAX];
-       enum pass_gov_state gov_state;
-
-       int (*init)(struct pass_policy *);
-       int (*exit)(struct pass_policy *);
-       int (*update)(struct pass_policy *, enum pass_gov_state state);
-       int (*governor)(struct pass_policy *);
-};
-
 /* Init, exit and update the governor */
-int pass_governor_init(struct pass_policy *policy);
-int pass_governor_exit(struct pass_policy *policy);
-int pass_governor_update(struct pass_policy *policy, enum pass_gov_state state);
+int pass_governor_init(struct pass_resource *res);
+int pass_governor_exit(struct pass_resource *res);
+int pass_governor_update(struct pass_resource *res,
+                               enum pass_gov_state state);
 
 /* Get the governor/hotplug instance according to enum pass_gov_type */
-struct pass_governor* pass_get_governor(struct pass_policy *policy,
-                                       enum pass_gov_type type);
-struct pass_hotplug* pass_get_hotplug(struct pass_policy *policy,
-                                       enum pass_gov_type type);
+struct pass_governor* pass_get_governor(struct pass_resource *res,
+                               enum pass_gov_type type);
+struct pass_hotplug* pass_get_hotplug(struct pass_resource *res,
+                               enum pass_gov_type type);
 
 /* Function for radiation and step governor */
-int pass_step_governor(struct pass_policy *policy);
-int pass_radiation_governor(struct pass_policy *policy);
+int pass_step_governor(struct pass_resource *res);
+int pass_radiation_governor(struct pass_resource *res);
 
 #endif /* __PASS_GOV__ */
index fb9fe0ef6a3003eae57978c744a30de315d857c5..78bb2d65a9043eaf60eb61b71b56c4831fc37902 100644 (file)
@@ -989,21 +989,22 @@ int pass_put_resource(struct pass_resource *res)
  * FXIME: Following function is not standard interface.
  * Following functions will be altered by the standard interface on later.
  *
- * - int pass_get_cpu_stats(struct pass_policy *policy)
+ * - int pass_get_cpu_stats(struct pass_resource *res)
  * - int64_t pass_get_time_ms(void)
  */
 
 /* Get the load_table of each resource to estimate the system load. */
-int pass_get_cpu_stats(struct pass_policy *policy)
+int pass_get_cpu_stats(struct pass_resource *res)
 {
+       struct pass_policy *policy;
        struct pass_cpu_stats *stats;
-       struct pass_resource *res;
        char str[BUFF_MAX];
        FILE *fp_stats = NULL;
        int i, j, ret;
 
-       if (!policy)
+       if (!res)
                return -EINVAL;
+       policy = &res->policy;
 
        stats = policy->pass_cpu_stats;
        res = to_pass_resource(policy);
index c5c0da0f4266d4d60f6fbf5dfa61607544637c25..172b0a42658a0a28c23cc2bb201ec36c6b7e88e6 100644 (file)
@@ -79,7 +79,7 @@ int pass_set_online_max_num(struct pass_resource *res, int num);
  * FXIME: Following function is not standard interface.
  * These functions will be altered by the standard interface on later.
  */
-int pass_get_cpu_stats(struct pass_policy *policy);
+int pass_get_cpu_stats(struct pass_resource *res);
 
 /***
  * Functions for Memory h/w resource
index 121a606457c6841fb9286ed8ca981ceed83c0e53..ade6407f559d1f6af01ae2dc7c2cc257e5bdbae9 100644 (file)
@@ -324,10 +324,16 @@ out:
        return 0;
 }
 
-int pass_get_table(struct pass_policy *policy, char *pass_conf_path)
+int pass_get_table(struct pass_resource *res, char *pass_conf_path)
 {
+       struct pass_policy *policy;
        int ret;
 
+       if (!res)
+               return -EINVAL;
+
+       policy = &res->policy;
+
        policy->state = PASS_UNUSED;
        policy->pmqos.state = PASS_UNUSED;
 
@@ -353,7 +359,6 @@ int pass_get_table(struct pass_policy *policy, char *pass_conf_path)
        }
 
        /*
-       struct pass_resource *res = to_pass_resource(policy);
        int level;
 
        _I("%s| policy->state : %d\n",
@@ -474,8 +479,17 @@ int pass_get_table(struct pass_policy *policy, char *pass_conf_path)
        return 0;
 }
 
-void pass_put_table(struct pass_policy *policy)
+void pass_put_table(struct pass_resource *res)
 {
+       struct pass_policy *policy;
+
+       if (!res) {
+               _E("cannot put pass table\n");
+               return;
+       }
+
+       policy = &res->policy;
+
        if (policy->levels) {
                free(policy->levels);
                policy->levels = NULL;
index 81c66746e4f159001a70af81c18e71f96c8ca7dc..5de7643e2ed3cc9a749d6262dd74a2d6310a16c8 100644 (file)
@@ -21,8 +21,9 @@
 
 #include "pass.h"
 
-int pass_get_table(struct pass_policy *policy, char *pass_conf_path);
-void pass_put_table(struct pass_policy *policy);
+int pass_get_table(struct pass_resource *res, char *pass_conf_path);
+void pass_put_table(struct pass_resource *res);
+
 int pass_get_resource_config(struct pass *pass, char *pass_conf_path);
 void pass_put_resource_config(struct pass *pass);
 
index ba9b7e75275fa379552db1066b6e98c74456393a..22668b276b1f28a036725c0abc1918db830eb5e9 100644 (file)
@@ -100,9 +100,9 @@ static int find_scenario_index(struct pass_pmqos *pmqos, char *name)
  * pass_notifier_pmqos - Callback function of DEVICE_NOTIFIER_PMQOS notifier
  * @data: the scenario name
  */
-int pass_notifier_pmqos_func(struct pass_policy *policy, void *data)
+int pass_notifier_pmqos_func(struct pass_resource *res, void *data)
 {
-       struct pass_resource *res;
+       struct pass_policy *policy;
        struct pass_conf_data *cdata;
        struct pass_pmqos *pmqos;
        struct pass_scenario *scn = NULL;
@@ -113,10 +113,14 @@ int pass_notifier_pmqos_func(struct pass_policy *policy, void *data)
        unsigned int max_level = 0;
        int index = -1;
 
+       if (!res)
+               return -EINVAL;
+
+       policy = &res->policy;
+
        if (!is_pmqos_enabled(policy))
                return 0;
 
-       res = to_pass_resource(policy);
        cdata = &res->cdata;
        pmqos = &policy->pmqos;
 
@@ -188,8 +192,7 @@ int pass_notifier_pmqos_func(struct pass_policy *policy, void *data)
                }
        }
 
-       pass_rescon_set_level_scope(policy, new_level,
-                                       min_level, max_level, data);
+       pass_rescon_set_level_scope(res, new_level, min_level, max_level, data);
 
        if (scn->locked) {
                _I("Lock   '%s' scenario for '%s' resource\n",
index 6d8e4c02db757f7011135a11dc9e4f3969bbd4c4..4505479a7b08098e077af4df0a9d39e304990da1 100644 (file)
@@ -21,8 +21,9 @@
 
 /*
  * pass_notifier_pmqos - Callback function of DEVICE_NOTIFIER_PMQOS notifier
+ * @res : the instance of pass_resource
  * @data: the scenario name
  */
-int pass_notifier_pmqos_func(struct pass_policy *policy, void *data);
+int pass_notifier_pmqos_func(struct pass_resource *res, void *data);
 
 #endif /* __PASS_PMQOS__ */
index 55dd8b57bcb741b137631ff57776d62a0049a361..120b4304341aa94845d1249e3456857f8405696f 100644 (file)
@@ -63,22 +63,32 @@ static void hotplug_set_online(struct pass_policy *policy,
 /*
  * pass_rescon_set_level - Change frequency and number of online resources
  *
- * @policy: the instance of struct pass_policy
+ * @res: the instance of struct pass_resource
  * @new_level: the desired pass level
  */
-int pass_rescon_set_level(struct pass_policy *policy, int new_level)
+int pass_rescon_set_level(struct pass_resource *res, int new_level)
 {
-       struct pass_resource *res = to_pass_resource(policy);
-       struct pass_conf_data *cdata = &res->cdata;
-       struct pass_level *levels = policy->levels;
-       struct pass_hotplug *hotplug = policy->hotplug;
-       int curr_level = policy->curr_level;
+       struct pass_policy *policy;
+       struct pass_conf_data *cdata;
+       struct pass_level *levels;
+       struct pass_hotplug *hotplug;
+       int curr_level;
        int limit_max_freq;
        int limit_min_freq;
        int limit_min_cpu;
        int fault_around_bytes;
        int ret;
 
+       if (!res)
+               return -EINVAL;
+
+       policy = &res->policy;
+
+       cdata = &res->cdata;
+       levels = policy->levels;
+       hotplug = policy->hotplug;
+       curr_level = policy->curr_level;
+
        if (new_level > policy->max_level)
                new_level = policy->max_level;
 
@@ -99,7 +109,7 @@ int pass_rescon_set_level(struct pass_policy *policy, int new_level)
        /* Turn on/off CPUs according the maximum number of online CPU */
        if (hotplug) {
                if (hotplug->governor)
-                       limit_min_cpu = hotplug->governor(policy);
+                       limit_min_cpu = hotplug->governor(res);
                else
                        limit_min_cpu = 1;
 
@@ -150,17 +160,20 @@ int pass_rescon_set_level(struct pass_policy *policy, int new_level)
 /*
  * pass_rescon_set_level_scope - Change the scope of pass level
  *
- * @policy: the instance of struct pass_policy
+ * @res: the instance of struct pass_resource
  * @new_level: the desirous pass level
  * @min_level: the minimum pass level
  * @max_level: the maximum pass level
  * @data: the PMQoS's data containing the scenario name and lock state
  */
-int pass_rescon_set_level_scope(struct pass_policy *policy, int new_level,
+int pass_rescon_set_level_scope(struct pass_resource *res, int new_level,
                                int min_level, int max_level, void *data)
 {
-       if (!policy)
+       struct pass_policy *policy;
+
+       if (!res)
                return -EINVAL;
+       policy = &res->policy;
 
        /*
         * FIXME: PMQoS core sends the raw data to the HAL in order to
@@ -168,7 +181,7 @@ int pass_rescon_set_level_scope(struct pass_policy *policy, int new_level,
         * be removed after finding the proper method.
         */
        if (data)
-               pass_set_pmqos_data(to_pass_resource(policy), data);
+               pass_set_pmqos_data(res, data);
 
        if (min_level > max_level) {
                _E("min_level(%d) have to be smaller than max_level(%d)\n",
@@ -184,7 +197,7 @@ int pass_rescon_set_level_scope(struct pass_policy *policy, int new_level,
        policy->min_level = min_level;
        policy->max_level = max_level;
 
-       pass_rescon_set_level(policy, new_level);
+       pass_rescon_set_level(res, new_level);
 
        return 0;
 }
index 00bbcce148b62638018db3adf412a8308fed8370..e98a407810b055f95c4a3ecf919262d550b18f85 100644 (file)
@@ -19,7 +19,7 @@
 #ifndef __PASS_RESCON__
 #define __PASS_RESCON__
 
-int pass_rescon_set_level(struct pass_policy *policy, int new_level);
-int pass_rescon_set_level_scope(struct pass_policy *policy, int new_level,
+int pass_rescon_set_level(struct pass_resource *res, int new_level);
+int pass_rescon_set_level_scope(struct pass_resource *res, int new_level,
                                int min_level, int max_level, void *data);
 #endif /* __PASS_RESCON__ */
index bb32453cc18fc081a6e89912f049e72076f1c77b..3d96a21aa4007a9b1f8b7b5303afc599c038cce5 100644 (file)
@@ -124,10 +124,8 @@ static int pass_init_resource(struct pass_resource *res)
        int ret;
        int i;
 
-       /*
-        * Initialize pass-table by parsing pass.conf
-        */
-       ret = pass_get_table(policy, res->cdata.path_conf_file);
+       /* Get configuration of each resource from pass-resource*.conf */
+       ret = pass_get_table(res, res->cdata.path_conf_file);
        if (ret < 0) {
                _E("cannot parse %s\n", res->cdata.path_conf_file);
                return -1;
@@ -191,14 +189,14 @@ static int pass_init_resource(struct pass_resource *res)
        }
 
        /* Get the instance of PASS governor */
-       policy->governor = pass_get_governor(policy, policy->gov_type);
+       policy->governor = pass_get_governor(res, policy->gov_type);
        if (!policy->governor) {
                _E("cannot get the instance of PASS governor");
                return -1;
        }
 
        /* Get the instance of PASS hotplug */
-       policy->hotplug = pass_get_hotplug(policy, policy->gov_type);
+       policy->hotplug = pass_get_hotplug(res, policy->gov_type);
        if (policy->hotplug) {
                policy->hotplug->sequence = calloc(res->cdata.num_cpus,
                                                sizeof(int));
@@ -208,7 +206,7 @@ static int pass_init_resource(struct pass_resource *res)
                policy->hotplug->num_cpus = res->cdata.num_cpus;
        }
 
-       ret = pass_governor_init(policy);
+       ret = pass_governor_init(res);
        if (ret < 0) {
                _E("cannot initialize PASS governor");
                return -1;
@@ -222,9 +220,10 @@ static int pass_exit_resource(struct pass_resource *res)
        struct pass_policy *policy = &res->policy;
        int ret;
 
-       pass_put_table(policy);
+       /* Put configuration of each resource from pass-resource*.conf */
+       pass_put_table(res);
 
-       ret = pass_governor_exit(policy);
+       ret = pass_governor_exit(res);
        if (ret < 0) {
                _E("cannot exit PASS governor");
                return -1;
@@ -239,7 +238,7 @@ static int pass_init_done(void *data, void *user_data)
 {
        int i, ret;
 
-       /* Parse configuration file (/etc/pass/pass.conf) */
+       /* Get configuration of resource list from pass.conf */
        ret = pass_get_resource_config(&g_pass, PASS_CONF_PATH);
        if (ret < 0) {
                _E("cannot parse %s\n", PASS_CONF_PATH);
@@ -344,6 +343,7 @@ static int pass_exit_done(void)
                res->state = PASS_OFF;
        }
 
+       /* Put configuration of resource list from pass.conf */
        pass_put_resource_config(&g_pass);
        g_pass.state = PASS_OFF;
 
index 9f18fe1367617d5be8f37e9cd3506814a1cee670..e16420b4fb6f7115b2563db0b21345abeecd8b11 100644 (file)
@@ -33,7 +33,9 @@
  ******************************************************/
 #define PASS_LEVEL_COND_MAX    3
 
+struct pass_resource;
 struct pass_policy;
+struct pass_governor;
 
 /*
  * PASS state
@@ -68,8 +70,6 @@ enum pass_gov_type {
        PASS_GOV_END,
 };
 
-struct pass_governor;
-
 /******************************************************
  *                   PASS basic data                  *
  ******************************************************/
@@ -186,7 +186,7 @@ struct pass_hotplug {
        unsigned int num_cpus;
        unsigned int online;
        unsigned int *sequence;
-       int (*governor)(struct pass_policy *);
+       int (*governor)(struct pass_resource *res);
 };