int single_freq_init (actuator_t *act) { int err; struct cpufreq_policy *policy; struct cpufreq_available_frequencies *freq_list; freq_scaler_data_t *data; unsigned long freq_min, freq_max; act->data = data = malloc(sizeof(freq_scaler_data_t)); fail_if(!data, "cannot allocate freq data block"); err = cpufreq_get_hardware_limits(act->core, &freq_min, &freq_max); fail_if(err, "cannot get cpufreq hardware limits"); act->min = freq_min; act->max = freq_max; policy = cpufreq_get_policy(act->core); fail_if(!policy, "cannot get cpufreq policy"); if (strcmp(policy->governor, "userspace") != 0) { err = cpufreq_modify_policy_governor(act->core, "userspace"); policy = cpufreq_get_policy(act->core); fail_if (strcmp(policy->governor, "userspace") != 0, "cannot set cpufreq policy to userspace"); } freq_list = cpufreq_get_available_frequencies(act->core); data->freq_count = create_freq_array(freq_list, &data->freq_array); fail_if(data->freq_count < 1, "cannot get frequency list"); act->value = act->set_value = cpufreq_get_freq_kernel(act->core); data->cur_index = get_freq_index(data, act->value); return 0; fail: return -1; }
static int set_policy(int ncpus) { int cpu; for (cpu=0; cpu < ncpus; cpu++) { struct cpufreq_policy *policy = cpufreq_get_policy(cpu); if (!policy) return -EINVAL; //printf("%lu %lu %s\n", policy->min, policy->max, policy->governor); if (policy->governor != "userspace"){ cpufreq_modify_policy_governor(cpu, "userspace"); printf("%lu %lu %s\n", policy->min, policy->max, policy->governor); } } /* cpufreq_put_policy(policy);*/ return 0; }
JNIEXPORT jint JNICALL Java_platforms_x86_X86_1DVFS_setGovernor (JNIEnv *env, jobject obj, jint cpu, jstring governorName) { const char *str; int ret; str = (*env)->GetStringUTFChars(env, governorName, NULL); if (str == NULL) { /* OutOfMemoryError already thrown */ return -1; } ret = cpufreq_modify_policy_governor((unsigned int)cpu, (char *)str); (*env)->ReleaseStringUTFChars(env, governorName, str); return ret; }
int set_cpufreq_governor(char *governor, unsigned int cpu) { dprintf("set %s as cpufreq governor\n", governor); if (cpufreq_cpu_exists(cpu) != 0) { perror("cpufreq_cpu_exists"); fprintf(stderr, "error: cpu %u does not exist\n", cpu); return -1; } if (cpufreq_modify_policy_governor(cpu, governor) != 0) { perror("cpufreq_modify_policy_governor"); fprintf(stderr, "error: unable to set %s governor\n", governor); return -1; } return 0; }
static int do_one_cpu(unsigned int cpu, struct cpufreq_policy *new_pol, unsigned long freq, unsigned int pc) { switch (pc) { case 0: return cpufreq_set_frequency(cpu, freq); case 1: if (new_pol->min) return cpufreq_modify_policy_min(cpu, new_pol->min); else if (new_pol->max) return cpufreq_modify_policy_max(cpu, new_pol->max); else if (new_pol->governor) return cpufreq_modify_policy_governor(cpu, new_pol->governor); default: return do_new_policy(cpu, new_pol); } }
static int do_one_cpu(unsigned int cpu, struct cpufreq_policy *new_pol, unsigned long freq, unsigned int pc) { switch (pc) { case 0: return cpufreq_set_frequency(cpu, freq); case 1: /* if only one value of a policy is to be changed, we can * use a "fast path". */ if (new_pol->min) return cpufreq_modify_policy_min(cpu, new_pol->min); else if (new_pol->max) return cpufreq_modify_policy_max(cpu, new_pol->max); else if (new_pol->governor) return cpufreq_modify_policy_governor(cpu, new_pol->governor); default: /* slow path */ return do_new_policy(cpu, new_pol); } }
static gboolean cpufreq_selector_libcpufreq_set_governor (CPUFreqSelector *selector, const gchar *governor, GError **error) { CPUFreqSelectorLibcpufreq *selector_libcpufreq; guint cpu; selector_libcpufreq = CPUFREQ_SELECTOR_LIBCPUFREQ (selector); if (!cpufreq_selector_libcpufreq_validate_governor (selector_libcpufreq, governor)) { g_set_error (error, CPUFREQ_SELECTOR_ERROR, SELECTOR_ERROR_INVALID_GOVERNOR, "Invalid governor '%s'", governor); return FALSE; } g_object_get (G_OBJECT (selector), "cpu", &cpu, NULL); if (cpufreq_modify_policy_governor (cpu, (gchar *)governor) != 0) { g_set_error (error, CPUFREQ_SELECTOR_ERROR, SELECTOR_ERROR_INVALID_GOVERNOR, "Invalid governor '%s'", governor); return FALSE; } return TRUE; }