mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
xenpm: Print HWP/CPPC parameters
Print HWP-specific parameters. Some are always present, but others depend on hardware support. Signed-off-by: Jason Andryuk <jandryuk@gmail.com> Reviewed-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
1 parent
cf476162b6
commit
a93fde4f87
1 file changed
+67
-1
+67
-1
@@ -708,6 +708,46 @@ void start_gather_func(int argc, char *argv[])
|
||||
pause();
|
||||
}
|
||||
|
||||
static unsigned int calculate_activity_window(const xc_cppc_para_t *cppc,
|
||||
const char **units)
|
||||
{
|
||||
unsigned int mantissa = MASK_EXTR(cppc->activity_window,
|
||||
XEN_CPPC_ACT_WINDOW_MANTISSA_MASK);
|
||||
unsigned int exponent = MASK_EXTR(cppc->activity_window,
|
||||
XEN_CPPC_ACT_WINDOW_EXPONENT_MASK);
|
||||
unsigned int multiplier = 1;
|
||||
unsigned int i;
|
||||
|
||||
/*
|
||||
* SDM only states a 0 register is hardware selected, and doesn't mention
|
||||
* a 0 mantissa with a non-0 exponent. Only special case a 0 register.
|
||||
*/
|
||||
if ( cppc->activity_window == 0 )
|
||||
{
|
||||
*units = "hardware selected";
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ( exponent >= 6 )
|
||||
{
|
||||
*units = "s";
|
||||
exponent -= 6;
|
||||
}
|
||||
else if ( exponent >= 3 )
|
||||
{
|
||||
*units = "ms";
|
||||
exponent -= 3;
|
||||
}
|
||||
else
|
||||
*units = "us";
|
||||
|
||||
for ( i = 0; i < exponent; i++ )
|
||||
multiplier *= 10;
|
||||
|
||||
return mantissa * multiplier;
|
||||
}
|
||||
|
||||
/* print out parameters about cpu frequency */
|
||||
static void print_cpufreq_para(int cpuid, struct xc_get_cpufreq_para *p_cpufreq)
|
||||
{
|
||||
@@ -733,7 +773,33 @@ static void print_cpufreq_para(int cpuid, struct xc_get_cpufreq_para *p_cpufreq)
|
||||
|
||||
printf("scaling_driver : %s\n", p_cpufreq->scaling_driver);
|
||||
|
||||
if ( !hwp )
|
||||
if ( hwp )
|
||||
{
|
||||
const xc_cppc_para_t *cppc = &p_cpufreq->u.cppc_para;
|
||||
|
||||
printf("cppc variables :\n");
|
||||
printf(" hardware limits : lowest [%"PRIu32"] lowest nonlinear [%"PRIu32"]\n",
|
||||
cppc->lowest, cppc->lowest_nonlinear);
|
||||
printf(" : nominal [%"PRIu32"] highest [%"PRIu32"]\n",
|
||||
cppc->nominal, cppc->highest);
|
||||
printf(" configured limits : min [%"PRIu32"] max [%"PRIu32"] energy perf [%"PRIu32"]\n",
|
||||
cppc->minimum, cppc->maximum, cppc->energy_perf);
|
||||
|
||||
if ( cppc->features & XEN_SYSCTL_CPPC_FEAT_ACT_WINDOW )
|
||||
{
|
||||
unsigned int activity_window;
|
||||
const char *units;
|
||||
|
||||
activity_window = calculate_activity_window(cppc, &units);
|
||||
printf(" : activity_window [%"PRIu32" %s]\n",
|
||||
activity_window, units);
|
||||
}
|
||||
|
||||
printf(" : desired [%"PRIu32"%s]\n",
|
||||
cppc->desired,
|
||||
cppc->desired ? "" : " hw autonomous");
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("scaling_avail_gov : %s\n",
|
||||
p_cpufreq->scaling_available_governors);
|
||||
|
||||