Skip to content

Commit

Permalink
Add support for acpi-cpufreq scaling driver
Browse files Browse the repository at this point in the history
  • Loading branch information
ipatix committed Oct 15, 2024
1 parent b69887e commit 3cfefa4
Showing 1 changed file with 36 additions and 14 deletions.
50 changes: 36 additions & 14 deletions src/sysFeatures_cpufreq.c
Original file line number Diff line number Diff line change
Expand Up @@ -119,11 +119,6 @@ static int cpufreq_driver_test(const char* testgovernor)

/* ACPI CPUfreq driver */

static int cpufreq_acpi_scaling_driver_getter(const LikwidDevice_t device, char **value)
{
return cpufreq_sysfs_getter(device, value, "scaling_driver");
}

static int cpufreq_acpi_cur_cpu_freq_getter(const LikwidDevice_t device, char** value)
{
return cpufreq_sysfs_getter(device, value, "scaling_cur_freq");
Expand Down Expand Up @@ -161,11 +156,14 @@ static int cpufreq_acpi_avail_governors_getter(const LikwidDevice_t device, char

static int cpufreq_acpi_test(void)
{
return cpufreq_driver_test("acpi_cpufreq");
int err = cpufreq_driver_test("acpi_cpufreq");
if (err != 0)
return err;
/* On AMD Genoa the string appears to be with a dash '-'. */
return cpufreq_driver_test("acpi-cpufreq");
}

static _SysFeature cpufreq_acpi_features[] = {
{"driver", "cpu_freq", "Scaling Driver", cpufreq_acpi_scaling_driver_getter, NULL, DEVICE_TYPE_HWTHREAD},
{"cur_cpu_freq", "cpu_freq", "Current CPU frequency", cpufreq_acpi_cur_cpu_freq_getter, NULL, DEVICE_TYPE_HWTHREAD},
{"min_cpu_freq", "cpu_freq", "Minimal CPU frequency", cpufreq_acpi_min_cpu_freq_getter, NULL, DEVICE_TYPE_HWTHREAD},
{"max_cpu_freq", "cpu_freq", "Maximal CPU frequency", cpufreq_acpi_max_cpu_freq_getter, NULL, DEVICE_TYPE_HWTHREAD},
Expand All @@ -182,11 +180,6 @@ static const _SysFeatureList cpufreq_acpi_feature_list = {

/* Intel Pstate driver */

static int cpufreq_intel_pstate_scaling_driver_getter(const LikwidDevice_t device, char **value)
{
return cpufreq_sysfs_getter(device, value, "scaling_driver");
}

static int cpufreq_intel_pstate_base_cpu_freq_getter(const LikwidDevice_t device, char** value)
{
int err = cpufreq_sysfs_getter(device, value, "base_frequency");
Expand Down Expand Up @@ -240,7 +233,6 @@ static int cpufreq_intel_pstate_test(void)
}

static _SysFeature cpufreq_pstate_features[] = {
{"driver", "cpu_freq", "Scaling Driver", cpufreq_intel_pstate_scaling_driver_getter, NULL, DEVICE_TYPE_HWTHREAD},
{"base_freq", "cpu_freq", "Base CPU frequency", cpufreq_intel_pstate_base_cpu_freq_getter, NULL, DEVICE_TYPE_HWTHREAD},
{"cur_cpu_freq", "cpu_freq", "Current CPU frequency", cpufreq_intel_pstate_cur_cpu_freq_getter, NULL, DEVICE_TYPE_HWTHREAD},
{"min_cpu_freq", "cpu_freq", "Minimal CPU frequency", cpufreq_intel_pstate_min_cpu_freq_getter, cpufreq_intel_pstate_min_cpu_freq_setter, DEVICE_TYPE_HWTHREAD},
Expand All @@ -265,7 +257,6 @@ static int cpufreq_intel_cpufreq_test(void)
/* INFO: Most sysfs entries are the same as for the intel_pstate driver,
* so they share the same getters. */
static _SysFeature cpufreq_intel_cpufreq_features[] = {
{"driver", "cpu_freq", "Scaling Driver", cpufreq_intel_pstate_scaling_driver_getter, NULL, DEVICE_TYPE_HWTHREAD},
{"cur_cpu_freq", "cpu_freq", "Current CPU frequency", cpufreq_intel_pstate_cur_cpu_freq_getter, NULL, DEVICE_TYPE_HWTHREAD},
{"min_cpu_freq", "cpu_freq", "Minimal CPU frequency", cpufreq_intel_pstate_min_cpu_freq_getter, cpufreq_intel_pstate_min_cpu_freq_setter, DEVICE_TYPE_HWTHREAD},
{"max_cpu_freq", "cpu_freq", "Maximal CPU frequency", cpufreq_intel_pstate_max_cpu_freq_getter, cpufreq_intel_pstate_max_cpu_freq_setter, DEVICE_TYPE_HWTHREAD},
Expand Down Expand Up @@ -312,6 +303,28 @@ static const _SysFeatureList cpufreq_epp_feature_list = {
.features = cpufreq_epp_features,
};

/* Scaling Driver (common to all) */

static int cpufreq_scaling_driver_getter(const LikwidDevice_t device, char **value)
{
return cpufreq_sysfs_getter(device, value, "scaling_driver");
}

static int cpufreq_scaling_driver_test(void)
{
return access("/sys/devices/system/cpu/cpu0/cpufreq/scaling_driver", R_OK) == 0;
}

static _SysFeature cpufreq_scaling_driver_features[] = {
{"scaling_driver", "cpu_freq", "Kernel Scaling Driver", cpufreq_scaling_driver_getter, NULL, DEVICE_TYPE_HWTHREAD},
};

static const _SysFeatureList cpufreq_scaling_driver_feature_list = {
.num_features = ARRAY_COUNT(cpufreq_scaling_driver_features),
.tester = cpufreq_scaling_driver_test,
.features = cpufreq_scaling_driver_features,
};

/* Init function */

int likwid_sysft_init_cpufreq(_SysFeatureList* out)
Expand Down Expand Up @@ -354,5 +367,14 @@ int likwid_sysft_init_cpufreq(_SysFeatureList* out)
return err;
}
}
if (cpufreq_scaling_driver_test())
{
DEBUG_PRINT(DEBUGLEV_DEVELOP, Registering Scaling Driver knobs for cpufreq)
err = likwid_sysft_register_features(out, &cpufreq_scaling_driver_feature_list);
if (err < 0)
{
return err;
}
}
return 0;
}

0 comments on commit 3cfefa4

Please sign in to comment.