Commit 8113ab20 authored by Borislav Petkov's avatar Borislav Petkov
Browse files

tools/power/cpupower: Read energy_perf_bias from sysfs



... instead of poking at the MSR. For that, move the accessor functions
to misc.c and add a sysfs-writing function too.

There should be no functional changes resulting from this.

Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
Reviewed-by: default avatarShuah Khan <skhan@linuxfoundation.org>
Cc: Thomas Renninger <trenn@suse.com>
Link: https://lkml.kernel.org/r/20201029190259.3476-2-bp@alien8.de
parent 632211cd
Loading
Loading
Loading
Loading
+22 −1
Original line number Diff line number Diff line
@@ -16,8 +16,8 @@

unsigned int cpupower_read_sysfs(const char *path, char *buf, size_t buflen)
{
	int fd;
	ssize_t numread;
	int fd;

	fd = open(path, O_RDONLY);
	if (fd == -1)
@@ -35,6 +35,27 @@ unsigned int cpupower_read_sysfs(const char *path, char *buf, size_t buflen)
	return (unsigned int) numread;
}

unsigned int cpupower_write_sysfs(const char *path, char *buf, size_t buflen)
{
	ssize_t numwritten;
	int fd;

	fd = open(path, O_WRONLY);
	if (fd == -1)
		return 0;

	numwritten = write(fd, buf, buflen - 1);
	if (numwritten < 1) {
		perror(path);
		close(fd);
		return -1;
	}

	close(fd);

	return (unsigned int) numwritten;
}

/*
 * Detect whether a CPU is online
 *
+5 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0 */
#define PATH_TO_CPU "/sys/devices/system/cpu/"

#ifndef MAX_LINE_LEN
#define MAX_LINE_LEN 4096
#endif

#define SYSFS_PATH_MAX 255

unsigned int cpupower_read_sysfs(const char *path, char *buf, size_t buflen);
unsigned int cpupower_write_sysfs(const char *path, char *buf, size_t buflen);
+1 −1
Original line number Diff line number Diff line
@@ -101,7 +101,7 @@ int cmd_info(int argc, char **argv)
		}

		if (params.perf_bias) {
			ret = msr_intel_get_perf_bias(cpu);
			ret = cpupower_intel_get_perf_bias(cpu);
			if (ret < 0) {
				fprintf(stderr,
			_("Could not read perf-bias value[%d]\n"), ret);
+1 −1
Original line number Diff line number Diff line
@@ -95,7 +95,7 @@ int cmd_set(int argc, char **argv)
		}

		if (params.perf_bias) {
			ret = msr_intel_set_perf_bias(cpu, perf_bias);
			ret = cpupower_intel_set_perf_bias(cpu, perf_bias);
			if (ret) {
				fprintf(stderr, _("Error setting perf-bias "
						  "value on CPU %d\n"), cpu);
+4 −4
Original line number Diff line number Diff line
@@ -105,8 +105,8 @@ extern struct cpupower_cpu_info cpupower_cpu_info;
extern int read_msr(int cpu, unsigned int idx, unsigned long long *val);
extern int write_msr(int cpu, unsigned int idx, unsigned long long val);

extern int msr_intel_set_perf_bias(unsigned int cpu, unsigned int val);
extern int msr_intel_get_perf_bias(unsigned int cpu);
extern int cpupower_intel_set_perf_bias(unsigned int cpu, unsigned int val);
extern int cpupower_intel_get_perf_bias(unsigned int cpu);
extern unsigned long long msr_intel_get_turbo_ratio(unsigned int cpu);

/* Read/Write msr ****************************/
@@ -150,9 +150,9 @@ static inline int read_msr(int cpu, unsigned int idx, unsigned long long *val)
{ return -1; };
static inline int write_msr(int cpu, unsigned int idx, unsigned long long val)
{ return -1; };
static inline int msr_intel_set_perf_bias(unsigned int cpu, unsigned int val)
static inline int cpupower_intel_set_perf_bias(unsigned int cpu, unsigned int val)
{ return -1; };
static inline int msr_intel_get_perf_bias(unsigned int cpu)
static inline int cpupower_intel_get_perf_bias(unsigned int cpu)
{ return -1; };
static inline unsigned long long msr_intel_get_turbo_ratio(unsigned int cpu)
{ return 0; };
Loading