mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
xen/sysctl: introduce CONFIG_PM_STATS
We introduce a new Kconfig CONFIG_PM_STATS for wrapping all operations regarding performance management statistics. The major codes reside in xen/drivers/acpi/pmstat.c, including the pm-statistic-related sysctl op: do_get_pm_info(). CONFIG_PM_STATS also shall depend on CONFIG_SYSCTL We shall also provide "# CONFIG_PM_STATS is not set" in preset configs for PV shim on x86. Signed-off-by: Penny Zheng <Penny.Zheng@amd.com> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org> Acked-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
1 parent
a16f2b3e06
commit
f1d4ca28de
6 files changed
+23
-2
No files matched your search
@@ -1489,6 +1489,7 @@ static void amd_cpuidle_init(struct acpi_processor_power *power)
|
||||
vendor_override = -1;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_STATS
|
||||
uint32_t pmstat_get_cx_nr(unsigned int cpu)
|
||||
{
|
||||
return processor_powers[cpu] ? processor_powers[cpu]->count : 0;
|
||||
@@ -1608,6 +1609,7 @@ int pmstat_reset_cx_stat(unsigned int cpu)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_PM_STATS */
|
||||
|
||||
void cpuidle_disable_deep_cstate(void)
|
||||
{
|
||||
|
||||
@@ -27,3 +27,4 @@ CONFIG_EXPERT=y
|
||||
# CONFIG_DEBUG is not set
|
||||
# CONFIG_GDBSX is not set
|
||||
# CONFIG_PM_OP is not set
|
||||
# CONFIG_PM_STATS is not set
|
||||
@@ -628,4 +628,12 @@ config PM_OP
|
||||
This option shall enable userspace performance management control
|
||||
to do power/performance analyzing and tuning.
|
||||
|
||||
config PM_STATS
|
||||
bool "Enable Performance Management Statistics"
|
||||
depends on ACPI && HAS_CPUFREQ && SYSCTL
|
||||
default y
|
||||
help
|
||||
Enable collection of performance management statistics to aid in
|
||||
analyzing and tuning power/performance characteristics of the system
|
||||
|
||||
endmenu
|
||||
+1
-1
@@ -170,7 +170,7 @@ long do_sysctl(XEN_GUEST_HANDLE_PARAM(xen_sysctl_t) u_sysctl)
|
||||
op->u.availheap.avail_bytes <<= PAGE_SHIFT;
|
||||
break;
|
||||
|
||||
#if defined (CONFIG_ACPI) && defined (CONFIG_HAS_CPUFREQ)
|
||||
#ifdef CONFIG_PM_STATS
|
||||
case XEN_SYSCTL_get_pmstat:
|
||||
ret = do_get_pm_info(&op->u.get_pmstat);
|
||||
break;
|
||||
|
||||
@@ -5,7 +5,7 @@ obj-$(CONFIG_X86) += apei/
|
||||
obj-bin-y += tables.init.o
|
||||
obj-$(CONFIG_ACPI_NUMA) += numa.o
|
||||
obj-y += osl.o
|
||||
obj-$(CONFIG_HAS_CPUFREQ) += pmstat.o
|
||||
obj-$(CONFIG_PM_STATS) += pmstat.o
|
||||
obj-$(CONFIG_PM_OP) += pm-op.o
|
||||
|
||||
obj-$(CONFIG_X86) += hwregs.o
|
||||
|
||||
@@ -9,9 +9,19 @@
|
||||
|
||||
unsigned int powernow_register_driver(void);
|
||||
unsigned int get_measured_perf(unsigned int cpu, unsigned int flag);
|
||||
#ifdef CONFIG_PM_STATS
|
||||
void cpufreq_statistic_update(unsigned int cpu, uint8_t from, uint8_t to);
|
||||
int cpufreq_statistic_init(unsigned int cpu);
|
||||
void cpufreq_statistic_exit(unsigned int cpu);
|
||||
#else
|
||||
static inline void cpufreq_statistic_update(unsigned int cpu, uint8_t from,
|
||||
uint8_t to) {}
|
||||
static inline int cpufreq_statistic_init(unsigned int cpu)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline void cpufreq_statistic_exit(unsigned int cpu) {}
|
||||
#endif /* CONFIG_PM_STATS */
|
||||
|
||||
int cpufreq_limit_change(unsigned int cpu);
|
||||
|
||||
|
||||