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:
Penny Zheng authored and Jan Beulich committed 2025-07-09 10:55:49 +02:00
1 parent a16f2b3e06
commit f1d4ca28de
6 files changed
+23 -2

No files matched your search

+2
View File
@@ -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)
{
+1
View File
@@ -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
+8
View File
@@ -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
View File
@@ -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;
+1 -1
View File
@@ -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
+10
View File
@@ -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);
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.