pass: rescon: Encapsulate struct pass_rescon to prevent direct access 01/283601/2
authorChanwoo Choi <cw00.choi@samsung.com>
Sun, 4 Sep 2022 17:03:22 +0000 (02:03 +0900)
committerChanwoo Choi <cw00.choi@samsung.com>
Tue, 13 Dec 2022 02:41:33 +0000 (11:41 +0900)
Any modules are able to access the internal fields of struct pass_rescon
directly. It might make the problem on later and the current method
is not proper. So that move the defintion of struct pass_rescon
into src/pass/pass-rescon.c to prevent the direct access.
Instead, provide the getter/setter function for fields of struct pass_rescon.

Change-Id: I801452d0b8ae98146a74f2ebd1926f6cc4c8c47a
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
12 files changed:
include/util/common.h
src/pass/pass-cpuhp-radiation.c
src/pass/pass-cpuhp-step.c
src/pass/pass-cpuhp.c
src/pass/pass-parser.c
src/pass/pass-rescon.c
src/pass/pass-rescon.h
src/pass/pass.c
src/pass/pass.h
tests/haltest/CMakeLists.txt
tests/integration-test/CMakeLists.txt
tests/unittest/CMakeLists.txt

index 10f465a..9f53733 100644 (file)
@@ -34,6 +34,7 @@ typedef unsigned long long uint64;
 
 #define BUFF_MAX        255
 #define ARRAY_SIZE(name) (sizeof(name)/sizeof(name[0]))
+#define INIT_VALUE     -1
 
 /*
  * One byte digit has 3 position in decimal representation
index f1af302..583ee24 100644 (file)
@@ -31,6 +31,7 @@
 #include <stdlib.h>
 
 #include "pass.h"
+#include "pass-rescon.h"
 #include "pass-resmon.h"
 
 #define PASS_CPU_STATS_MAX_COUNT       20
@@ -53,7 +54,7 @@ int pass_cpuhp_radiation_governor(struct pass_resource *res, void *result)
        int up_threshold = cpuhp->up_threshold;
        int down_threshold = cpuhp->down_threshold;
        int num_pass_gov = 0;
-       int level = res->rescon.curr_level;
+       int level = 0;
        int up_count = 0;
        int down_count = 0;
        int left_count = 0;
@@ -68,6 +69,10 @@ int pass_cpuhp_radiation_governor(struct pass_resource *res, void *result)
        int i;
        int j;
        int64_t time;
+       int max_level;
+
+       pass_rescon_get_curr_level(res, &level);
+       pass_rescon_get_max_level(res, &max_level);
 
        for (i = 0; i < PASS_CPU_STATS_MAX_COUNT; i++) {
                time = cpu_stats[i].time;
@@ -186,7 +191,7 @@ int pass_cpuhp_radiation_governor(struct pass_resource *res, void *result)
        if (up_count * 100 >= num_pass_gov * up_threshold) {
                level += res->config_data.num_cpus;
 
-               if (level > res->rescon.max_level)
+               if (level > max_level)
                        level -= res->config_data.num_cpus;
        } else if (down_count * 100 >= num_pass_gov * down_threshold) {
                level -= res->config_data.num_cpus;
@@ -195,38 +200,11 @@ int pass_cpuhp_radiation_governor(struct pass_resource *res, void *result)
        if (right_count * 100 >= num_pass_gov * up_threshold) {
                level += 1;
 
-               if (level > res->rescon.max_level)
+               if (level > max_level)
                        level -= 1;
        } else if (left_count * 100 >= num_pass_gov * down_threshold) {
                level -= 1;
        }
 
-       /*
-       if (level == res->prev_level) {
-               for (i = num_pass_gov; i < PASS_CPU_STATS_MAX_COUNT; i++) {
-                       time = cpu_stats[i].time;
-                       freq = cpu_stats[i].freq;
-                       nr_running = cpu_stats[i].nr_runnings;
-                       busy_cpu = cpu_stats[i].num_busy_cpu;
-
-                       _I("[Level%d][%d][%lld] %d | %d | %d",
-                                       level, i, time, freq,
-                                       nr_running, busy_cpu);
-               }
-       }
-
-       if (level != res->rescon.curr_level) {
-               _I("\n[Level%d] num_pass_gov: [%2d]", level, num_pass_gov);
-               _I("[Level%d] down_count  : %2d (%3d >= %3d)", level, down_count,
-                               down_count * 100, num_pass_gov * down_threshold);
-               _I("[Level%d] up_count    : %2d (%3d >= %3d)", level, up_count,
-                               up_count * 100, num_pass_gov * up_threshold);
-               _I("[Level%d] left_count  : %2d (%3d >= %3d)", level, left_count,
-                               left_count * 100, num_pass_gov * down_threshold);
-               _I("[Level%d] right_count : %2d (%3d >= %3d)", level, right_count,
-                               right_count * 100, num_pass_gov * up_threshold);
-       }
-       */
-
        return level;
 }
index 06983c4..6a5dec2 100644 (file)
@@ -31,6 +31,7 @@
 #include <stdlib.h>
 
 #include "pass.h"
+#include "pass-rescon.h"
 #include "pass-resmon.h"
 
 #define PASS_CPU_STATS_MAX_COUNT       20
@@ -53,7 +54,7 @@ int pass_cpuhp_step_governor(struct pass_resource *res, void *result)
        int up_threshold = cpuhp->up_threshold;
        int down_threshold = cpuhp->down_threshold;
        int num_pass_gov = 0;
-       int level = res->rescon.curr_level;
+       int level = 0;
        int up_count = 0;
        int up_max_count = 0;
        int down_count = 0;
@@ -65,6 +66,12 @@ int pass_cpuhp_step_governor(struct pass_resource *res, void *result)
        int i;
        int j;
        int64_t time;
+       int max_level = 0;
+       int min_level = 0;
+
+       pass_rescon_get_curr_level(res, &level);
+       pass_rescon_get_max_level(res, &max_level);
+       pass_rescon_get_min_level(res, &min_level);
 
        for (i = 0; i < PASS_CPU_STATS_MAX_COUNT; i++) {
                time = cpu_stats[i].time;
@@ -129,7 +136,7 @@ int pass_cpuhp_step_governor(struct pass_resource *res, void *result)
                        */
                }
 
-               if (level < res->rescon.max_level &&
+               if (level < max_level &&
                        freq == levels[level].limit_max_freq)
                        up_max_count++;
        }
@@ -137,10 +144,10 @@ int pass_cpuhp_step_governor(struct pass_resource *res, void *result)
        if (!num_pass_gov)
                return level;
 
-       if (up_count && level < res->rescon.max_level &&
+       if (up_count && level < max_level &&
                        up_count * 100 >= num_pass_gov * up_threshold) {
                level += 1;
-       } else if (down_count && level > res->rescon.min_level &&
+       } else if (down_count && level > min_level &&
                        down_count * 100 >= num_pass_gov * down_threshold) {
                level -= 1;
        }
index 27cfeb6..fadbfcc 100644 (file)
@@ -101,7 +101,7 @@ static void cpuhp_calculate_busy_cpu(struct pass_resource *res, void *result)
        struct pass_level *levels = res->config_data.levels;
        struct pass_resource_config_data *config_data = &res->config_data;
        struct resmon_result_src_cpuhp *stats = result;
-       unsigned int level = res->rescon.curr_level;
+       int level = 0;
        unsigned int cpu_threshold = 0;
        unsigned int busy_cpu;
        unsigned int cur_freq;
@@ -112,6 +112,14 @@ static void cpuhp_calculate_busy_cpu(struct pass_resource *res, void *result)
        int limit_min_cpu;
        int i;
        int j;
+       int ret;
+
+       ret = pass_rescon_get_curr_level(res, &level);
+       if (ret < 0) {
+               _E("failed to get curr level of '%s' resource",
+                               res->config_data.res_name);
+               return;
+       }
 
        limit_min_cpu = levels[level].limit_min_cpu;
 
@@ -172,6 +180,7 @@ static int cpuhp_timer_func(void *result, void *user_data)
        struct pass_cpuhp *cpuhp;
        int curr_gov_timeout, next_gov_timeout;
        int level;
+       int curr_level;
 
        if (!res) {
                _E("cannot call the governor timeout callback\n");
@@ -181,11 +190,13 @@ static int cpuhp_timer_func(void *result, void *user_data)
        levels = res->config_data.levels;
        cpuhp = &res->cpuhp;
 
+       pass_rescon_get_curr_level(res, &curr_level);
+
        /* Calculate the number of busy cpu */
        cpuhp_calculate_busy_cpu(res, result);
 
        /* Store current governor timeout */
-       curr_gov_timeout = levels[res->rescon.curr_level].gov_timeout;
+       curr_gov_timeout = levels[curr_level].gov_timeout;
 
        /* Determine the amount of proper resource */
        if (cpuhp->governor->governor) {
@@ -199,7 +210,7 @@ static int cpuhp_timer_func(void *result, void *user_data)
        }
 
        /* Get the governor timeout interval for the next */
-       next_gov_timeout = levels[res->rescon.curr_level].gov_timeout;
+       next_gov_timeout = levels[curr_level].gov_timeout;
 
        /*
         * Change the governor timeout interval when the next interval is not
index c2c2c67..c429fa2 100644 (file)
 #include <libsyscommon/resource-type.h>
 
 #include "pass.h"
+#include "pass-rescon.h"
 
 #define MAX_NUM                        255
 #define MIN_TIMEOUT_MS         200
 #define MAX_TIMEOUT_MS         3600000 /* 1 hour */
-#define INIT_VALUE             -1
 
 static int compare_compatible_name(const char *compatible,
                                        const char *path_compatible)
@@ -484,9 +484,9 @@ static int parse_cpuhp(struct pass_resource *res, json_object *obj)
        }
 
        /* Initialize config_data from property values of confiugartion file */
-       res->rescon.min_level = cpuhp_min_level;
-       res->rescon.max_level = cpuhp_max_level;
-       res->rescon.init_level = cpuhp_init_level;
+       pass_rescon_set_min_level(res, cpuhp_min_level);
+       pass_rescon_set_max_level(res, cpuhp_max_level);
+       pass_rescon_set_init_level(res, cpuhp_init_level);
 
        if (res->config_data.gov_timeout < MIN_TIMEOUT_MS
                || res->config_data.gov_timeout > MAX_TIMEOUT_MS)
@@ -566,7 +566,9 @@ static int parse_header(struct pass_resource *res, json_object *obj)
 
        if (init_level < 0)
                init_level = 0;
-       res->rescon.init_scenario_level = init_level;
+
+       /* Initialize config_data from property values of confiugartion file */
+       pass_rescon_set_init_scenario_level(res, init_level);
 
        res->config_data.scenario_levels = calloc(
                                        res->config_data.num_scenario_levels,
@@ -881,12 +883,9 @@ int pass_parser_get_each_resource_config(struct pass_resource *res, const char *
        res->config_data.levels = NULL;
 
        /* Initialize the ResCon's data */
-       res->rescon.init_level = INIT_VALUE;
-       res->rescon.prev_level = INIT_VALUE;
-       res->rescon.min_level = INIT_VALUE;
-       res->rescon.max_level = INIT_VALUE;
-       res->rescon.init_scenario_level = INIT_VALUE;
-       res->rescon.overridable = 1;
+       ret = pass_rescon_prepare(res);
+       if (ret < 0)
+               return ret;
 
        /* Initialize the CPUHP's data */
        cpuhp->pass_cpu_threshold = 0;
index 35735d0..0cd721d 100644 (file)
 #define MIN_FAULT_AROUND_BYTES         4096
 #define MAX_FAULT_AROUND_BYTES         65536
 
+/**
+ * @brief      Represent PASS_MODULE_RESCON (Resource Controller) module.
+ *             It should be always enabled in order to control h/w resources.
+ */
+struct pass_rescon {
+       /** State of PASS_MODULE_RESCON */
+       enum pass_state state;
+
+       /** Representing whether this resource can be overridden or not */
+       int overridable;
+
+       /**
+        * Initial level when initializing h/w resource by resource controller.
+        * If value is -1, it is not initialized by parser.
+        */
+       int init_level;
+       /**
+        * Current level controlled by resource controller.
+        * If value is -1, it is not initialized by parser.
+        */
+       int curr_level;
+       /**
+        * Previous level controlled by resource controller.
+        * If value is -1, it is not initialized by parser.
+        */
+       int prev_level;
+       /**
+        * Available minimum level controlled by resource controller.
+        * If value is -1, it is not initialized by parser.
+        */
+       int min_level;
+       /**
+        * Available maximum level controlled by resource controller.
+        * If value is -1, it is not initialized by parser.
+        */
+       int max_level;
+
+       /**
+        * Initial level when initializing h/w resource by resource controller.
+        * If value is -1, it is not initialized by parser.
+        */
+       int init_scenario_level;
+
+       /** Ondemanded scenario list */
+       GList *scenario_level_list;
+       /** Mutex of ondemanded scenario list */
+       GMutex scenario_level_mutex;
+};
+
 static void rescon_print_level(struct pass_resource *res,
                                struct pass_level *level)
 {
@@ -132,7 +181,7 @@ static void rescon_adjust_level(struct pass_level *a, struct pass_level *b)
 
 static int rescon_update(struct pass_resource *res)
 {
-       struct pass_rescon *rescon = &res->rescon;
+       struct pass_rescon *rescon = res->rescon;
        struct pass_level *levels = res->config_data.levels;
        struct pass_level *scenario_levels = res->config_data.scenario_levels;
        struct pass_level adjusted_level;
@@ -168,7 +217,7 @@ static int rescon_update(struct pass_resource *res)
        adjusted_level.charging_current_uA = MAX_INT;
 
        /* Adjust with pass_level */
-       if (res->rescon.curr_level >= 0)
+       if (rescon->curr_level >= 0)
                rescon_adjust_level(&adjusted_level, &levels[rescon->curr_level]);
 
        /* Adjust with scenario pass_level */
@@ -347,7 +396,7 @@ static int rescon_update(struct pass_resource *res)
 static void rescon_set_scenario_level(struct pass_resource *res,
                                        int scenario_level)
 {
-       struct pass_rescon *rescon = &res->rescon;
+       struct pass_rescon *rescon = res->rescon;
 
        if (scenario_level < 0 || !rescon->overridable)
                return;
@@ -362,7 +411,7 @@ static void rescon_set_scenario_level(struct pass_resource *res,
 static void rescon_unset_scenario_level(struct pass_resource *res,
                                        int scenario_level)
 {
-       struct pass_rescon *rescon = &res->rescon;
+       struct pass_rescon *rescon = res->rescon;
 
        if (scenario_level < 0 || !rescon->overridable)
                return;
@@ -401,17 +450,17 @@ int pass_rescon_set_level(struct pass_resource *res, int new_level)
        if (new_level < 0)
                return 0;
 
-       if (new_level > res->rescon.max_level)
-               new_level = res->rescon.max_level;
+       if (new_level > res->rescon->max_level)
+               new_level = res->rescon->max_level;
 
-       if (new_level < res->rescon.min_level)
-               new_level = res->rescon.min_level;
+       if (new_level < res->rescon->min_level)
+               new_level = res->rescon->min_level;
 
-       if (new_level == res->rescon.curr_level)
+       if (new_level == res->rescon->curr_level)
                return 0;
 
-       res->rescon.prev_level = res->rescon.curr_level;
-       res->rescon.curr_level = new_level;
+       res->rescon->prev_level = res->rescon->curr_level;
+       res->rescon->curr_level = new_level;
 
        return 0;
 };
@@ -430,17 +479,17 @@ int pass_rescon_set_level_sync(struct pass_resource *res, int new_level)
        if (new_level < 0)
                return 0;
 
-       if (new_level > res->rescon.max_level)
-               new_level = res->rescon.max_level;
+       if (new_level > res->rescon->max_level)
+               new_level = res->rescon->max_level;
 
-       if (new_level < res->rescon.min_level)
-               new_level = res->rescon.min_level;
+       if (new_level < res->rescon->min_level)
+               new_level = res->rescon->min_level;
 
-       if (new_level == res->rescon.curr_level)
+       if (new_level == res->rescon->curr_level)
                return 0;
 
-       res->rescon.prev_level = res->rescon.curr_level;
-       res->rescon.curr_level = new_level;
+       res->rescon->prev_level = res->rescon->curr_level;
+       res->rescon->curr_level = new_level;
 
        return rescon_update(res);
 };
@@ -521,14 +570,99 @@ int pass_rescon_unset_scenario_level_sync(struct pass_resource *res,
  */
 int pass_rescon_set_overridable(struct pass_resource *res, int overridable)
 {
-       if (!res)
+       if (!res || !res->rescon || overridable < -1 || overridable >= INT_MAX)
+               return -EINVAL;
+
+       res->rescon->overridable = overridable;
+
+       return 0;
+}
+
+int pass_rescon_set_init_level(struct pass_resource *res, int level)
+{
+       if (!res || !res->rescon || level < 0 || level >= INT_MAX)
                return -EINVAL;
 
-       res->rescon.overridable = overridable;
+       res->rescon->init_level = level;
 
        return 0;
 }
 
+int pass_rescon_set_curr_level(struct pass_resource *res, int level)
+{
+       if (!res || !res->rescon || level < 0 || level >= INT_MAX)
+               return -EINVAL;
+
+       res->rescon->curr_level = level;
+
+       return 0;
+}
+
+int pass_rescon_set_prev_level(struct pass_resource *res, int level)
+{
+       if (!res || !res->rescon || level < 0 || level >= INT_MAX)
+               return -EINVAL;
+
+       res->rescon->prev_level = level;
+
+       return 0;
+}
+
+int pass_rescon_set_min_level(struct pass_resource *res, int level)
+{
+       if (!res || !res->rescon || level < 0 || level >= INT_MAX)
+               return -EINVAL;
+
+       res->rescon->min_level = level;
+
+       return 0;
+}
+
+int pass_rescon_set_max_level(struct pass_resource *res, int level)
+{
+       if (!res || !res->rescon || level < 0 || level >= INT_MAX)
+               return -EINVAL;
+
+       res->rescon->max_level = level;
+
+       return 0;
+}
+
+int pass_rescon_set_init_scenario_level(struct pass_resource *res, int level)
+{
+       if (!res || !res->rescon || level < 0 || level >= INT_MAX)
+               return -EINVAL;
+
+       res->rescon->init_scenario_level = level;
+
+       return 0;
+}
+
+int pass_rescon_get_init_level(struct pass_resource *res, int *level)
+{
+       return (!res || !res->rescon) ? -EINVAL : res->rescon->init_level;
+}
+
+int pass_rescon_get_curr_level(struct pass_resource *res, int *level)
+{
+       return (!res || !res->rescon) ? -EINVAL : res->rescon->curr_level;
+}
+
+int pass_rescon_get_prev_level(struct pass_resource *res, int *level)
+{
+       return (!res || !res->rescon) ? -EINVAL : res->rescon->prev_level;
+}
+
+int pass_rescon_get_min_level(struct pass_resource *res, int *level)
+{
+       return (!res || !res->rescon) ? -EINVAL : res->rescon->min_level;
+}
+
+int pass_rescon_get_max_level(struct pass_resource *res, int *level)
+{
+       return (!res || !res->rescon) ? -EINVAL : res->rescon->max_level;
+}
+
 /*
  * @brief      Deprecated function to support backward compatibility with sync.
  *             Set up the scenario pass_level by PASS_MODULE_PMQOS with data.
@@ -583,6 +717,27 @@ int pass_rescon_unset_scenario_level_sync_with_data(struct pass_resource *res,
        return rescon_update(res);
 }
 
+int pass_rescon_prepare(struct pass_resource *res)
+{
+       if (!res || res->rescon != NULL)
+               return -EINVAL;
+
+       res->rescon = calloc(1, sizeof(struct pass_rescon));
+       if (!res->rescon)
+               return -ENOMEM;
+
+       res->rescon->init_level = INIT_VALUE;
+       res->rescon->prev_level = INIT_VALUE;
+       res->rescon->min_level = INIT_VALUE;
+       res->rescon->max_level = INIT_VALUE;
+       res->rescon->init_scenario_level = INIT_VALUE;
+       res->rescon->overridable = 1;
+       res->rescon->curr_level = INIT_VALUE;
+       res->rescon->prev_level = INIT_VALUE;
+
+       return 0;
+}
+
 /**
  * @brief      Initialize PASS_MODULE_RESCON(Resource Controller) module.
  * @param      [in] res Instance of h/w resource
@@ -593,15 +748,11 @@ int pass_rescon_init(struct pass_resource *res)
        struct pass_rescon *rescon;
        int ret;
 
-       if (!res || res->rescon.state == PASS_ON)
+       if (!res || !res->rescon || res->rescon->state == PASS_ON)
                return -1;
-
-       rescon = &res->rescon;
+       rescon = res->rescon;
 
        /* Initialize the variables of resource-controller */
-       rescon->curr_level = -1;
-       rescon->prev_level = -1;
-
        if (!rescon->min_level)
                rescon->min_level = 0;
        res->config_data.default_min_level = rescon->min_level;
@@ -671,10 +822,10 @@ int pass_rescon_exit(struct pass_resource *res)
        struct pass_rescon *rescon;
        int ret;
 
-       if (!res || res->rescon.state == PASS_OFF)
+       if (!res || !res->rescon || res->rescon->state == PASS_OFF)
                return -1;
 
-       rescon = &res->rescon;
+       rescon = res->rescon;
 
        /* Restore the h/w resource by using the saved data */
        ret = pass_hal_restore_initdata(res);
@@ -699,5 +850,8 @@ int pass_rescon_exit(struct pass_resource *res)
 
        rescon->state = PASS_OFF;
 
+       free(rescon);
+       res->rescon = NULL;
+
        return ret;
 }
index f318b55..47e7cae 100644 (file)
@@ -43,7 +43,26 @@ int pass_rescon_set_scenario_level(struct pass_resource *res,
 int pass_rescon_unset_scenario_level(struct pass_resource *res,
                                        int scenario_level);
 
+/* Get and set the fields of struct pass_rescon */
+int pass_rescon_set_init_level(struct pass_resource *res, int level);
+int pass_rescon_set_curr_level(struct pass_resource *res, int level);
+int pass_rescon_set_prev_level(struct pass_resource *res, int level);
+int pass_rescon_set_min_level(struct pass_resource *res, int level);
+int pass_rescon_set_max_level(struct pass_resource *res, int level);
+int pass_rescon_set_init_scenario_level(struct pass_resource *res, int level);
 int pass_rescon_set_overridable(struct pass_resource *res, int overridable);
+
+int pass_rescon_get_init_level(struct pass_resource *res, int *level);
+int pass_rescon_get_curr_level(struct pass_resource *res, int *level);
+int pass_rescon_get_prev_level(struct pass_resource *res, int *level);
+int pass_rescon_get_min_level(struct pass_resource *res, int *level);
+int pass_rescon_get_max_level(struct pass_resource *res, int *level);
+
+/* Init, exit and prepare the resource monitor module */
+int pass_rescon_prepare(struct pass_resource *res);
+int pass_rescon_init(struct pass_resource *res);
+int pass_rescon_exit(struct pass_resource *res);
+
 /*
  * Following APIs are deprecated. These functions are provided
  * for keeping the compatibility with legacy feature.
index 50f3d2e..4d6824a 100644 (file)
@@ -43,6 +43,7 @@
 #include "pass.h"
 #include "pass-parser.h"
 #include "pass-hal.h"
+#include "pass-rescon.h"
 
 #define PASS_JSON_PATH                         "/hal/etc/pass/pass.json"
 
@@ -88,8 +89,6 @@ static uint64 supported_module[] = {
                                        | PASS_MODULE_THERMAL,
 };
 
-extern int pass_rescon_init(struct pass_resource *res);
-extern int pass_rescon_exit(struct pass_resource *res);
 extern int pass_resmon_init(struct pass_resource *res);
 extern int pass_resmon_exit(struct pass_resource *res);
 extern int pass_cpuhp_init(struct pass_resource *res);
index 1f41600..35702fc 100644 (file)
@@ -43,6 +43,7 @@
 
 #define PASS_LEVEL_COND_MAX    3
 
+struct pass_rescon;
 struct pass_resource;
 struct pass_cpuhp_governor;
 
@@ -281,54 +282,6 @@ struct pass_scenario {
  *                   PASS Module                      *
  ******************************************************/
 
-/**
- * @brief      Represent PASS_MODULE_RESCON (Resource Controller) module.
- *             It should be always enabled in order to control h/w resources.
- */
-struct pass_rescon {
-       /** State of PASS_MODULE_RESCON */
-       enum pass_state state;
-
-       /** Representing whether this resource can be overridden or not */
-       int overridable;
-
-       /**
-        * Initial level when initializing h/w resource by resource controller.
-        * If value is -1, it is not initialized by parser.
-        */
-       int init_level;
-       /**
-        * Current level controlled by resource controller.
-        * If value is -1, it is not initialized by parser.
-        */
-       int curr_level;
-       /**
-        * Previous level controlled by resource controller.
-        * If value is -1, it is not initialized by parser.
-        */
-       int prev_level;
-       /**
-        * Available minimum level controlled by resource controller.
-        * If value is -1, it is not initialized by parser.
-        */
-       int min_level;
-       /**
-        * Available maximum level controlled by resource controller.
-        * If value is -1, it is not initialized by parser.
-        */
-       int max_level;
-
-       /**
-        * Initial level when initializing h/w resource by resource controller.
-        * If value is -1, it is not initialized by parser.
-        */
-       int init_scenario_level;
-
-       /** Ondemanded scenario list */
-       GList *scenario_level_list;
-       /** Mutex of ondemanded scenario list */
-       GMutex scenario_level_mutex;
-};
 
 /**
  * @brief      Represent PASS_MODULE_RESMON (Resource Monitor) module.
@@ -633,7 +586,7 @@ struct pass_resource {
        } hal;
 
        /** Instance of PASS_MODULE_RESCON module */
-       struct pass_rescon rescon;
+       struct pass_rescon *rescon;
        /** Instance of PASS_MODULE_RESMON module */
        struct pass_resmon resmon;
        /** Instance of PASS_MODULE_CPUHP module */
index 1f0e9a3..1a1bcad 100644 (file)
@@ -1,6 +1,7 @@
 PROJECT(pass C CXX)
 
 SET(SRCS ${CMAKE_SOURCE_DIR}/src/pass/pass-hal.c
+       ${CMAKE_SOURCE_DIR}/src/pass/pass-rescon.c
        ${CMAKE_SOURCE_DIR}/src/pass/pass-parser.c
        ${CMAKE_SOURCE_DIR}/src/util/common.c
 )
index 24600cd..c0b9e64 100644 (file)
@@ -1,6 +1,7 @@
 PROJECT(pass C CXX)
 
 SET(SRCS ${CMAKE_SOURCE_DIR}/src/pass/pass-hal.c
+       ${CMAKE_SOURCE_DIR}/src/pass/pass-rescon.c
        ${CMAKE_SOURCE_DIR}/src/pass/pass-parser.c
        ${CMAKE_SOURCE_DIR}/src/util/common.c
        ${CMAKE_SOURCE_DIR}/src/util/privilege.c
index a5ba5af..1592154 100644 (file)
@@ -7,6 +7,7 @@ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CFLAGS} -Wall -Werror")
 SET(PASS_SRCS
        ${CMAKE_SOURCE_DIR}/src/util/common.c
        ${CMAKE_SOURCE_DIR}/src/pass/pass-hal.c
+       ${CMAKE_SOURCE_DIR}/src/pass/pass-rescon.c
        ${CMAKE_SOURCE_DIR}/src/pass/pass-parser.c
 )