#include "pass.h"
#include "pass-gov.h"
+#include "pass-plugin.h"
#include "pass-hotplug.h"
#include "core/device-notifier.h"
static void pass_hotplug_set_online(struct pass_policy *policy,
unsigned int online)
{
- struct pass_table *table = policy->pass_table;
struct pass_hotplug *hotplug = policy->hotplug;
- int num_online;
int i;
if (!hotplug || online == hotplug->online)
if (online > hotplug->max_online)
online = hotplug->max_online;
- if (online > hotplug->online)
- num_online = online;
- else
- num_online = hotplug->online;
-
for (i = 0 ; i < policy->cpufreq.num_nr_cpus; i++) {
if (i < online)
set_cpu_online(hotplug->sequence[i], PASS_CPU_UP);
int limit_max_freq;
int limit_max_cpu;
int online;
- int i;
if (new_level > policy->max_level)
new_level = policy->max_level;
struct pass_policy *policy = (struct pass_policy *)data;
static int count = 0;
int level;
- int online;
int ret;
if (!policy) {
*/
static int pass_governor_init(struct pass_policy *policy)
{
- int max_level;
- int ret;
-
if(policy->governor->gov_timeout < 0) {
_E("invalid timeout value [%d]!",
policy->governor->gov_timeout);
#include "pass.h"
#include "pass-plugin.h"
+#include "core/common.h"
#include "core/config-parser.h"
#define BUFF_MAX 255
struct pass_cpu_stats *stats = policy->pass_cpu_stats;
char str[BUFF_MAX];
FILE *fp_stats = NULL;
- int i, j;
- int ret = 1;
+ int i, j, ret;
if (!policy || !policy->cluster.path_load_table || !stats) {
_E("invalid parameter of structure pass_cpu_stats");
if (fp_stats == NULL)
return -EIO;
- fgets(str, BUFF_MAX, fp_stats);
+ /* Read the title and drop the buffer because it is not used */
+ if (!fgets(str, BUFF_MAX, fp_stats))
+ return -EIO;
+
for (i = 0; i < policy->num_pass_cpu_stats; i++) {
ret = fscanf(fp_stats, "%lld %d %d %d",
&stats[i].time,
&stats[i].freq,
&stats[i].freq_new,
&stats[i].nr_runnings);
+ if (ret < 0)
+ return -EIO;
- for (j = 0; j < policy->cpufreq.num_nr_cpus; j++)
+ for (j = 0; j < policy->cpufreq.num_nr_cpus; j++) {
ret = fscanf(fp_stats, "%d", &stats[i].load[j]);
+ if (ret < 0)
+ return -EIO;
+ }
}
fclose(fp_stats);
return 0;
}
-/*
- * Helper function
- * - Read from sysfs entry
- * - Write to sysfs entry
- */
-static int sys_read_buf(char *file, char *buf)
-{
- int fd;
- int r;
- int ret = 0;
-
- fd = open(file, O_RDONLY);
- if (fd == -1)
- return -ENOENT;
-
- r = read(fd, buf, BUFF_MAX);
- if ((r >= 0) && (r < BUFF_MAX))
- buf[r] = '\0';
- else
- ret = -EIO;
-
- close(fd);
-
- return ret;
-}
-
-static int sys_write_buf(char *file, char *buf)
-{
- int fd;
- int r;
- int ret = 0;
-
- fd = open(file, O_WRONLY);
- if (fd == -1)
- return -1;
-
- r = write(fd, buf, strlen(buf));
- if (r < 0)
- ret = -EIO;
-
- close(fd);
-
- return ret;
-}
-
-static int sys_get_int(char *fname, int *val)
-{
- char buf[BUFF_MAX];
-
- if (sys_read_buf(fname, buf) == 0) {
- *val = atoi(buf);
- return 0;
- } else {
- *val = -1;
- return -1;
- }
-}
-
-static int sys_set_int(char *fname, int val)
-{
- char buf[BUFF_MAX];
- int r = -1;
- snprintf(buf, sizeof(buf), "%d", val);
-
- if (sys_write_buf(fname, buf) == 0)
- r = 0;
-
- return r;
-}
-
/*
* Get/Set maximum cpu frequency
*/
-int get_cpufreq_scaling_max_freq(int cpu)
+int get_cpufreq_scaling_max_freq(unsigned int cpu)
{
char path[BUFF_MAX];
int online;
return online;
}
-int set_cpufreq_scaling_max_freq(int cpu, int freq)
+int set_cpufreq_scaling_max_freq(unsigned int cpu, int freq)
{
char path[BUFF_MAX];
int ret;
return 0;
}
-int get_cpufreq_scaling_min_freq(int cpu)
+int get_cpufreq_scaling_min_freq(unsigned int cpu)
{
char path[BUFF_MAX];
int online;
return online;
}
-int set_cpufreq_scaling_min_freq(int cpu, int freq)
+int set_cpufreq_scaling_min_freq(unsigned int cpu, int freq)
{
char path[BUFF_MAX];
int ret;
return 0;
}
-int get_cpu_online(int cpu)
+int get_cpu_online(unsigned int cpu)
{
char path[BUFF_MAX];
int online;
return online;
}
-int set_cpu_online(int cpu, int online)
+int set_cpu_online(unsigned int cpu, unsigned int online)
{
char path[BUFF_MAX];
int ret;
{
struct pass_policy *policy = user_data;
struct pass_scenario_policy *scenario = &policy->scenario;
- char section_name[BUFF_MAX];
- int i;
if (!policy && !scenario && !result)
return 0;
void *user_data, int level)
{
struct pass_policy *policy = user_data;
- char section_name[BUFF_MAX];
- int i, ret;
if (!result)
return 0;
static int pass_parse_core(struct parse_result *result, void *user_data)
{
struct pass_policy *policy = user_data;
- char section_name[BUFF_MAX];
- int i, ret;
if (!result)
return 0;
if (MATCH(result->name, "pass_compatible")) {
char compatible[BUFF_MAX];
- int len;
+ int len, ret;
- ret = sys_read_buf(PROC_DT_COMPATIBLE, compatible);
+ ret = sys_get_str(PROC_DT_COMPATIBLE, compatible);
if (ret < 0)
return -EEXIST;
char section_name[BUFF_MAX];
int level = PASS_UNUSED;
int index = PASS_UNUSED;
- int i, ret;
+ int ret;
if (!result)
return 0;
void *user_data, int id)
{
struct pass_cluster *cluster = user_data;
- char section_name[BUFF_MAX];
- int i, ret;
if (!result)
return 0;
int get_pass_table(struct pass_policy *policy, char *pass_conf_path);
void put_pass_table(struct pass_policy *policy);
+int get_pass_cluster(struct pass_cluster *cluster, char *pass_conf_path);
-int get_cpufreq_scaling_max_freq(int cpu);
-int set_cpufreq_scaling_max_freq(int cpu, int freq);
+int get_cpufreq_scaling_max_freq(unsigned int cpu);
+int set_cpufreq_scaling_max_freq(unsigned int cpu, int freq);
-int get_cpufreq_scaling_min_freq(int cpu);
-int set_cpufreq_scaling_min_freq(int cpu, int freq);
+int get_cpufreq_scaling_min_freq(unsigned int cpu);
+int set_cpufreq_scaling_min_freq(unsigned int cpu, int freq);
-int get_cpu_online(int);
-int set_cpu_online(int, int);
+int get_cpu_online(unsigned int);
+int set_cpu_online(unsigned int, unsigned int);
int get_num_cpus(void);