2019-09-05 13:27:10

by Prarit Bhargava

[permalink] [raw]
Subject: [PATCH v2 0/9] tools-power-x86-intel-speed-select: Fixes and updates for output

Some general fixes and updates for intel-speed-select. Fixes include some
typos as well as an off-by-one cpu count reporting error. Updates for the
output are

- switching to MHz as a standard
- reporting CPU frequencies instead of ratios as a standard
- viewing a human-readable CPU list.
- avoiding reporting "0|1" as success|fail as these can be confusing for a
user.

v2: Add additional patch to fix memory leak and remove help text in 8/9.

Cc: Srinivas Pandruvada <[email protected]>
Cc: David Arcari <[email protected]>
Cc: [email protected]

Prarit Bhargava (9):
tools/power/x86/intel-speed-select: Fix package typo
tools/power/x86/intel-speed-select: Fix help option typo
tools/power/x86/intel-speed-select: Fix cpu-count output
tools/power/x86/intel-speed-select: Simplify output for turbo-freq and
base-freq
tools/power/x86/intel-speed-select: Switch output to MHz
tools/power/x86/intel-speed-select: Change turbo ratio output to
maximum turbo frequency
tools/power/x86/intel-speed-select: Output human readable CPU list
tools/power/x86/intel-speed-select: Output success/failed for command
output
tools/power/x86/intel-speed-select: Fix memory leak

.../x86/intel-speed-select/isst-config.c | 21 +--
.../x86/intel-speed-select/isst-display.c | 120 +++++++++++++-----
2 files changed, 98 insertions(+), 43 deletions(-)

--
2.21.0


2019-09-05 13:27:15

by Prarit Bhargava

[permalink] [raw]
Subject: [PATCH v2 1/9] tools/power/x86/intel-speed-select: Fix package typo

packag_ should be package_.

Signed-off-by: Prarit Bhargava <[email protected]>
Cc: Srinivas Pandruvada <[email protected]>
Cc: David Arcari <[email protected]>
Cc: [email protected]
---
tools/power/x86/intel-speed-select/isst-display.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/tools/power/x86/intel-speed-select/isst-display.c b/tools/power/x86/intel-speed-select/isst-display.c
index f368b8323742..0d9a53a5da2d 100644
--- a/tools/power/x86/intel-speed-select/isst-display.c
+++ b/tools/power/x86/intel-speed-select/isst-display.c
@@ -133,7 +133,7 @@ static void format_and_print(FILE *outf, int level, char *header, char *value)
last_level = level;
}

-static void print_packag_info(int cpu, FILE *outf)
+static void print_package_info(int cpu, FILE *outf)
{
char header[256];

@@ -261,7 +261,7 @@ void isst_ctdp_display_information(int cpu, FILE *outf, int tdp_level,
char value[256];
int i, base_level = 1;

- print_packag_info(cpu, outf);
+ print_package_info(cpu, outf);

for (i = 0; i <= pkg_dev->levels; ++i) {
struct isst_pkg_ctdp_level_info *ctdp_level;
@@ -397,7 +397,7 @@ void isst_ctdp_display_information_end(FILE *outf)
void isst_pbf_display_information(int cpu, FILE *outf, int level,
struct isst_pbf_info *pbf_info)
{
- print_packag_info(cpu, outf);
+ print_package_info(cpu, outf);
_isst_pbf_display_information(cpu, outf, level, pbf_info, 4);
format_and_print(outf, 1, NULL, NULL);
}
@@ -406,7 +406,7 @@ void isst_fact_display_information(int cpu, FILE *outf, int level,
int fact_bucket, int fact_avx,
struct isst_fact_info *fact_info)
{
- print_packag_info(cpu, outf);
+ print_package_info(cpu, outf);
_isst_fact_display_information(cpu, outf, level, fact_bucket, fact_avx,
fact_info, 4);
format_and_print(outf, 1, NULL, NULL);
--
2.21.0

2019-09-05 13:28:26

by Prarit Bhargava

[permalink] [raw]
Subject: [PATCH v2 2/9] tools/power/x86/intel-speed-select: Fix help option typo

Help is -h, not --h.

Signed-off-by: Prarit Bhargava <[email protected]>
Cc: Srinivas Pandruvada <[email protected]>
Cc: David Arcari <[email protected]>
Cc: [email protected]
---
tools/power/x86/intel-speed-select/isst-config.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/power/x86/intel-speed-select/isst-config.c b/tools/power/x86/intel-speed-select/isst-config.c
index 91c5ad1685a1..d32af8210427 100644
--- a/tools/power/x86/intel-speed-select/isst-config.c
+++ b/tools/power/x86/intel-speed-select/isst-config.c
@@ -1491,7 +1491,7 @@ static void usage(void)
printf("intel-speed-select [OPTIONS] FEATURE COMMAND COMMAND_ARGUMENTS\n");
printf("\nUse this tool to enumerate and control the Intel Speed Select Technology features,\n");
printf("\nFEATURE : [perf-profile|base-freq|turbo-freq|core-power]\n");
- printf("\nFor help on each feature, use --h|--help\n");
+ printf("\nFor help on each feature, use -h|--help\n");
printf("\tFor example: intel-speed-select perf-profile -h\n");

printf("\nFor additional help on each command for a feature, use --h|--help\n");
--
2.21.0

2019-09-05 15:45:54

by Prarit Bhargava

[permalink] [raw]
Subject: [PATCH v2 5/9] tools/power/x86/intel-speed-select: Switch output to MHz

These features are introduced on new processors that will never operate
in the KHz range.

Save some zeros and switch the output to MHz.

Signed-off-by: Prarit Bhargava <[email protected]>
Cc: Srinivas Pandruvada <[email protected]>
Cc: David Arcari <[email protected]>
Cc: [email protected]
---
.../x86/intel-speed-select/isst-display.c | 20 +++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/tools/power/x86/intel-speed-select/isst-display.c b/tools/power/x86/intel-speed-select/isst-display.c
index 3ae693efceaa..4ec1924ff7a9 100644
--- a/tools/power/x86/intel-speed-select/isst-display.c
+++ b/tools/power/x86/intel-speed-select/isst-display.c
@@ -6,7 +6,7 @@

#include "isst.h"

-#define DISP_FREQ_MULTIPLIER 100000
+#define DISP_FREQ_MULTIPLIER 100

static void printcpumask(int str_len, char *str, int mask_size,
cpu_set_t *cpu_mask)
@@ -156,7 +156,7 @@ static void _isst_pbf_display_information(int cpu, FILE *outf, int level,
snprintf(header, sizeof(header), "speed-select-base-freq");
format_and_print(outf, disp_level, header, NULL);

- snprintf(header, sizeof(header), "high-priority-base-frequency(KHz)");
+ snprintf(header, sizeof(header), "high-priority-base-frequency(MHz)");
snprintf(value, sizeof(value), "%d",
pbf_info->p1_high * DISP_FREQ_MULTIPLIER);
format_and_print(outf, disp_level + 1, header, value);
@@ -166,7 +166,7 @@ static void _isst_pbf_display_information(int cpu, FILE *outf, int level,
pbf_info->core_cpumask);
format_and_print(outf, disp_level + 1, header, value);

- snprintf(header, sizeof(header), "low-priority-base-frequency(KHz)");
+ snprintf(header, sizeof(header), "low-priority-base-frequency(MHz)");
snprintf(value, sizeof(value), "%d",
pbf_info->p1_low * DISP_FREQ_MULTIPLIER);
format_and_print(outf, disp_level + 1, header, value);
@@ -209,7 +209,7 @@ static void _isst_fact_display_information(int cpu, FILE *outf, int level,

if (fact_avx & 0x01) {
snprintf(header, sizeof(header),
- "high-priority-max-frequency(KHz)");
+ "high-priority-max-frequency(MHz)");
snprintf(value, sizeof(value), "%d",
bucket_info[j].sse_trl * DISP_FREQ_MULTIPLIER);
format_and_print(outf, base_level + 2, header, value);
@@ -217,7 +217,7 @@ static void _isst_fact_display_information(int cpu, FILE *outf, int level,

if (fact_avx & 0x02) {
snprintf(header, sizeof(header),
- "high-priority-max-avx2-frequency(KHz)");
+ "high-priority-max-avx2-frequency(MHz)");
snprintf(value, sizeof(value), "%d",
bucket_info[j].avx_trl * DISP_FREQ_MULTIPLIER);
format_and_print(outf, base_level + 2, header, value);
@@ -225,7 +225,7 @@ static void _isst_fact_display_information(int cpu, FILE *outf, int level,

if (fact_avx & 0x04) {
snprintf(header, sizeof(header),
- "high-priority-max-avx512-frequency(KHz)");
+ "high-priority-max-avx512-frequency(MHz)");
snprintf(value, sizeof(value), "%d",
bucket_info[j].avx512_trl *
DISP_FREQ_MULTIPLIER);
@@ -235,19 +235,19 @@ static void _isst_fact_display_information(int cpu, FILE *outf, int level,
snprintf(header, sizeof(header),
"speed-select-turbo-freq-clip-frequencies");
format_and_print(outf, base_level + 1, header, NULL);
- snprintf(header, sizeof(header), "low-priority-max-frequency(KHz)");
+ snprintf(header, sizeof(header), "low-priority-max-frequency(MHz)");
snprintf(value, sizeof(value), "%d",
fact_info->lp_clipping_ratio_license_sse *
DISP_FREQ_MULTIPLIER);
format_and_print(outf, base_level + 2, header, value);
snprintf(header, sizeof(header),
- "low-priority-max-avx2-frequency(KHz)");
+ "low-priority-max-avx2-frequency(MHz)");
snprintf(value, sizeof(value), "%d",
fact_info->lp_clipping_ratio_license_avx2 *
DISP_FREQ_MULTIPLIER);
format_and_print(outf, base_level + 2, header, value);
snprintf(header, sizeof(header),
- "low-priority-max-avx512-frequency(KHz)");
+ "low-priority-max-avx512-frequency(MHz)");
snprintf(value, sizeof(value), "%d",
fact_info->lp_clipping_ratio_license_avx512 *
DISP_FREQ_MULTIPLIER);
@@ -291,7 +291,7 @@ void isst_ctdp_display_information(int cpu, FILE *outf, int tdp_level,
snprintf(value, sizeof(value), "%d", ctdp_level->tdp_ratio);
format_and_print(outf, base_level + 4, header, value);

- snprintf(header, sizeof(header), "base-frequency(KHz)");
+ snprintf(header, sizeof(header), "base-frequency(MHz)");
snprintf(value, sizeof(value), "%d",
ctdp_level->tdp_ratio * DISP_FREQ_MULTIPLIER);
format_and_print(outf, base_level + 4, header, value);
--
2.21.0

2019-09-05 15:45:56

by Prarit Bhargava

[permalink] [raw]
Subject: [PATCH v2 3/9] tools/power/x86/intel-speed-select: Fix cpu-count output

I have a system with 28 threads/socket but intel-speed-select reports
a cpu-count of 29.

Fix an off-by-one error in the cpu_count() function.

Signed-off-by: Prarit Bhargava <[email protected]>
Cc: Srinivas Pandruvada <[email protected]>
Cc: David Arcari <[email protected]>
Cc: [email protected]
---
tools/power/x86/intel-speed-select/isst-config.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/power/x86/intel-speed-select/isst-config.c b/tools/power/x86/intel-speed-select/isst-config.c
index d32af8210427..f81a28c6b586 100644
--- a/tools/power/x86/intel-speed-select/isst-config.c
+++ b/tools/power/x86/intel-speed-select/isst-config.c
@@ -304,7 +304,7 @@ static void set_cpu_present_cpu_mask(void)
int get_cpu_count(int pkg_id, int die_id)
{
if (pkg_id < MAX_PACKAGE_COUNT && die_id < MAX_DIE_PER_PACKAGE)
- return cpu_cnt[pkg_id][die_id] + 1;
+ return cpu_cnt[pkg_id][die_id];

return 0;
}
--
2.21.0

2019-09-05 16:38:41

by Prarit Bhargava

[permalink] [raw]
Subject: [PATCH v2 6/9] tools/power/x86/intel-speed-select: Change turbo ratio output to maximum turbo frequency

The intel-speed-select tool currently outputs the turbo ratio for every
bucket. Make the output more user-friendly by changing the output to the
maximum turbo frequency.

Signed-off-by: Prarit Bhargava <[email protected]>
Cc: Srinivas Pandruvada <[email protected]>
Cc: David Arcari <[email protected]>
Cc: [email protected]
---
.../x86/intel-speed-select/isst-display.c | 18 ++++++++++++------
1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/tools/power/x86/intel-speed-select/isst-display.c b/tools/power/x86/intel-speed-select/isst-display.c
index 4ec1924ff7a9..cfeee0beb78d 100644
--- a/tools/power/x86/intel-speed-select/isst-display.c
+++ b/tools/power/x86/intel-speed-select/isst-display.c
@@ -336,9 +336,11 @@ void isst_ctdp_display_information(int cpu, FILE *outf, int tdp_level,
snprintf(value, sizeof(value), "%d", j);
format_and_print(outf, base_level + 6, header, value);

- snprintf(header, sizeof(header), "turbo-ratio");
+ snprintf(header, sizeof(header),
+ "max-turbo-frequency(MHz)");
snprintf(value, sizeof(value), "%d",
- ctdp_level->trl_sse_active_cores[j]);
+ ctdp_level->trl_sse_active_cores[j] *
+ DISP_FREQ_MULTIPLIER);
format_and_print(outf, base_level + 6, header, value);
}
snprintf(header, sizeof(header), "turbo-ratio-limits-avx");
@@ -351,9 +353,11 @@ void isst_ctdp_display_information(int cpu, FILE *outf, int tdp_level,
snprintf(value, sizeof(value), "%d", j);
format_and_print(outf, base_level + 6, header, value);

- snprintf(header, sizeof(header), "turbo-ratio");
+ snprintf(header, sizeof(header),
+ "max-turbo-frequency(MHz)");
snprintf(value, sizeof(value), "%d",
- ctdp_level->trl_avx_active_cores[j]);
+ ctdp_level->trl_avx_active_cores[j] *
+ DISP_FREQ_MULTIPLIER);
format_and_print(outf, base_level + 6, header, value);
}

@@ -367,9 +371,11 @@ void isst_ctdp_display_information(int cpu, FILE *outf, int tdp_level,
snprintf(value, sizeof(value), "%d", j);
format_and_print(outf, base_level + 6, header, value);

- snprintf(header, sizeof(header), "turbo-ratio");
+ snprintf(header, sizeof(header),
+ "max-turbo-frequency(MHz)");
snprintf(value, sizeof(value), "%d",
- ctdp_level->trl_avx_512_active_cores[j]);
+ ctdp_level->trl_avx_512_active_cores[j] *
+ DISP_FREQ_MULTIPLIER);
format_and_print(outf, base_level + 6, header, value);
}
if (ctdp_level->pbf_support)
--
2.21.0

2019-09-05 16:39:01

by Prarit Bhargava

[permalink] [raw]
Subject: [PATCH v2 7/9] tools/power/x86/intel-speed-select: Output human readable CPU list

The intel-speed-select tool currently only outputs a hexidecimal CPU mask,
which requires translation for use with kernel parameters such as
isolcpus.

Along with the CPU mask, output a human readable CPU list.

Signed-off-by: Prarit Bhargava <[email protected]>
Cc: Srinivas Pandruvada <[email protected]>
Cc: David Arcari <[email protected]>
Cc: [email protected]
---
.../x86/intel-speed-select/isst-display.c | 39 +++++++++++++++++++
1 file changed, 39 insertions(+)

diff --git a/tools/power/x86/intel-speed-select/isst-display.c b/tools/power/x86/intel-speed-select/isst-display.c
index cfeee0beb78d..890a01bfee4b 100644
--- a/tools/power/x86/intel-speed-select/isst-display.c
+++ b/tools/power/x86/intel-speed-select/isst-display.c
@@ -8,6 +8,33 @@

#define DISP_FREQ_MULTIPLIER 100

+static void printcpulist(int str_len, char *str, int mask_size,
+ cpu_set_t *cpu_mask)
+{
+ int i, first, curr_index, index;
+
+ if (!CPU_COUNT_S(mask_size, cpu_mask)) {
+ snprintf(str, str_len, "none");
+ return;
+ }
+
+ curr_index = 0;
+ first = 1;
+ for (i = 0; i < get_topo_max_cpus(); ++i) {
+ if (!CPU_ISSET_S(i, mask_size, cpu_mask))
+ continue;
+ if (!first) {
+ index = snprintf(&str[curr_index],
+ str_len - curr_index, ",");
+ curr_index += index;
+ }
+ index = snprintf(&str[curr_index], str_len - curr_index, "%d",
+ i);
+ curr_index += index;
+ first = 0;
+ }
+}
+
static void printcpumask(int str_len, char *str, int mask_size,
cpu_set_t *cpu_mask)
{
@@ -166,6 +193,12 @@ static void _isst_pbf_display_information(int cpu, FILE *outf, int level,
pbf_info->core_cpumask);
format_and_print(outf, disp_level + 1, header, value);

+ snprintf(header, sizeof(header), "high-priority-cpu-list");
+ printcpulist(sizeof(value), value,
+ pbf_info->core_cpumask_size,
+ pbf_info->core_cpumask);
+ format_and_print(outf, disp_level + 1, header, value);
+
snprintf(header, sizeof(header), "low-priority-base-frequency(MHz)");
snprintf(value, sizeof(value), "%d",
pbf_info->p1_low * DISP_FREQ_MULTIPLIER);
@@ -287,6 +320,12 @@ void isst_ctdp_display_information(int cpu, FILE *outf, int tdp_level,
ctdp_level->core_cpumask);
format_and_print(outf, base_level + 4, header, value);

+ snprintf(header, sizeof(header), "enable-cpu-list");
+ printcpulist(sizeof(value), value,
+ ctdp_level->core_cpumask_size,
+ ctdp_level->core_cpumask);
+ format_and_print(outf, base_level + 4, header, value);
+
snprintf(header, sizeof(header), "thermal-design-power-ratio");
snprintf(value, sizeof(value), "%d", ctdp_level->tdp_ratio);
format_and_print(outf, base_level + 4, header, value);
--
2.21.0

2019-09-05 16:39:03

by Prarit Bhargava

[permalink] [raw]
Subject: [PATCH v2 8/9] tools/power/x86/intel-speed-select: Output success/failed for command output

Command output has confusing data, returning "0" on success. For example

|# ./intel-speed-select -c 14 turbo-freq enable
Intel(R) Speed Select Technology
Executing on CPU model:106[0x6a]
package-1
die-0
cpu-14
turbo-freq
enable:0

To avoid confusion change the command output to 'success' or 'failed'.

v2: Remove help output line.

Signed-off-by: Prarit Bhargava <[email protected]>
Cc: Srinivas Pandruvada <[email protected]>
Cc: David Arcari <[email protected]>
Cc: [email protected]
---
tools/power/x86/intel-speed-select/isst-config.c | 1 -
tools/power/x86/intel-speed-select/isst-display.c | 5 ++++-
2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/tools/power/x86/intel-speed-select/isst-config.c b/tools/power/x86/intel-speed-select/isst-config.c
index f81a28c6b586..78f0cebda1da 100644
--- a/tools/power/x86/intel-speed-select/isst-config.c
+++ b/tools/power/x86/intel-speed-select/isst-config.c
@@ -1514,7 +1514,6 @@ static void usage(void)
printf("\tResult display uses a common format for each command:\n");
printf("\tResults are formatted in text/JSON with\n");
printf("\t\tPackage, Die, CPU, and command specific results.\n");
- printf("\t\t\tFor Set commands, status is 0 for success and rest for failures\n");
exit(1);
}

diff --git a/tools/power/x86/intel-speed-select/isst-display.c b/tools/power/x86/intel-speed-select/isst-display.c
index 890a01bfee4b..8500cf2997a6 100644
--- a/tools/power/x86/intel-speed-select/isst-display.c
+++ b/tools/power/x86/intel-speed-select/isst-display.c
@@ -519,7 +519,10 @@ void isst_display_result(int cpu, FILE *outf, char *feature, char *cmd,
snprintf(header, sizeof(header), "%s", feature);
format_and_print(outf, 4, header, NULL);
snprintf(header, sizeof(header), "%s", cmd);
- snprintf(value, sizeof(value), "%d", result);
+ if (!result)
+ snprintf(value, sizeof(value), "success");
+ else
+ snprintf(value, sizeof(value), "failed(error %d)", result);
format_and_print(outf, 5, header, value);

format_and_print(outf, 1, NULL, NULL);
--
2.21.0

2019-09-05 16:44:31

by Prarit Bhargava

[permalink] [raw]
Subject: [PATCH v2 4/9] tools/power/x86/intel-speed-select: Simplify output for turbo-freq and base-freq

The current output of 'intel-speed-select -c 53 perf-profile info -l 0'
shows

speed-select-turbo-freq-support:1
speed-select-base-freq-support:1
speed-select-base-freq-enabled:0
speed-select-turbo-freq-enabled:0

Simplify the output to single lines displaying status of disabled,
enabled, and unsupported.

Signed-off-by: Prarit Bhargava <[email protected]>
Cc: Srinivas Pandruvada <[email protected]>
Cc: David Arcari <[email protected]>
Cc: [email protected]
---
.../x86/intel-speed-select/isst-display.c | 30 ++++++++++---------
1 file changed, 16 insertions(+), 14 deletions(-)

diff --git a/tools/power/x86/intel-speed-select/isst-display.c b/tools/power/x86/intel-speed-select/isst-display.c
index 0d9a53a5da2d..3ae693efceaa 100644
--- a/tools/power/x86/intel-speed-select/isst-display.c
+++ b/tools/power/x86/intel-speed-select/isst-display.c
@@ -297,23 +297,25 @@ void isst_ctdp_display_information(int cpu, FILE *outf, int tdp_level,
format_and_print(outf, base_level + 4, header, value);

snprintf(header, sizeof(header),
- "speed-select-turbo-freq-support");
- snprintf(value, sizeof(value), "%d", ctdp_level->fact_support);
+ "speed-select-turbo-freq");
+ if (ctdp_level->fact_support) {
+ if (ctdp_level->fact_enabled)
+ snprintf(value, sizeof(value), "enabled");
+ else
+ snprintf(value, sizeof(value), "disabled");
+ } else
+ snprintf(value, sizeof(value), "unsupported");
format_and_print(outf, base_level + 4, header, value);

snprintf(header, sizeof(header),
- "speed-select-base-freq-support");
- snprintf(value, sizeof(value), "%d", ctdp_level->pbf_support);
- format_and_print(outf, base_level + 4, header, value);
-
- snprintf(header, sizeof(header),
- "speed-select-base-freq-enabled");
- snprintf(value, sizeof(value), "%d", ctdp_level->pbf_enabled);
- format_and_print(outf, base_level + 4, header, value);
-
- snprintf(header, sizeof(header),
- "speed-select-turbo-freq-enabled");
- snprintf(value, sizeof(value), "%d", ctdp_level->fact_enabled);
+ "speed-select-base-freq");
+ if (ctdp_level->pbf_support) {
+ if (ctdp_level->pbf_enabled)
+ snprintf(value, sizeof(value), "enabled");
+ else
+ snprintf(value, sizeof(value), "disabled");
+ } else
+ snprintf(value, sizeof(value), "unsupported");
format_and_print(outf, base_level + 4, header, value);

snprintf(header, sizeof(header), "thermal-design-power(W)");
--
2.21.0

2019-09-05 16:44:45

by Prarit Bhargava

[permalink] [raw]
Subject: [PATCH v2 9/9] tools/power/x86/intel-speed-select: Fix memory leak

cpumasks are allocated by calling the alloc_cpu_mask() function and are
never free'd. They should be free'd after the commands have run.

Fix the memory leaks by calling free_cpu_set().

Signed-off-by: Prarit Bhargava <[email protected]>
Cc: Srinivas Pandruvada <[email protected]>
Cc: David Arcari <[email protected]>
Cc: [email protected]
---
tools/power/x86/intel-speed-select/isst-config.c | 16 +++++++++++-----
1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/tools/power/x86/intel-speed-select/isst-config.c b/tools/power/x86/intel-speed-select/isst-config.c
index 78f0cebda1da..59753b3917bb 100644
--- a/tools/power/x86/intel-speed-select/isst-config.c
+++ b/tools/power/x86/intel-speed-select/isst-config.c
@@ -603,6 +603,10 @@ static int isst_fill_platform_info(void)

close(fd);

+ if (isst_platform_info.api_version > supported_api_ver) {
+ printf("Incompatible API versions; Upgrade of tool is required\n");
+ return -1;
+ }
return 0;
}

@@ -1528,6 +1532,7 @@ static void cmdline(int argc, char **argv)
{
int opt;
int option_index = 0;
+ int ret;

static struct option long_options[] = {
{ "cpu", required_argument, 0, 'c' },
@@ -1589,13 +1594,14 @@ static void cmdline(int argc, char **argv)
set_max_cpu_num();
set_cpu_present_cpu_mask();
set_cpu_target_cpu_mask();
- isst_fill_platform_info();
- if (isst_platform_info.api_version > supported_api_ver) {
- printf("Incompatible API versions; Upgrade of tool is required\n");
- exit(0);
- }
+ ret = isst_fill_platform_info();
+ if (ret)
+ goto out;

process_command(argc, argv);
+out:
+ free_cpu_set(present_cpumask);
+ free_cpu_set(target_cpumask);
}

int main(int argc, char **argv)
--
2.21.0

2019-09-05 23:03:00

by srinivas pandruvada

[permalink] [raw]
Subject: Re: [PATCH v2 9/9] tools/power/x86/intel-speed-select: Fix memory leak

On Thu, 2019-09-05 at 08:03 -0400, Prarit Bhargava wrote:
> cpumasks are allocated by calling the alloc_cpu_mask() function and
> are
> never free'd. They should be free'd after the commands have run.
>
> Fix the memory leaks by calling free_cpu_set().
Good to fix this. But after one command execution the process will
exit.

Thanks,
Srinivas

>
> Signed-off-by: Prarit Bhargava <[email protected]>
> Cc: Srinivas Pandruvada <[email protected]>
> Cc: David Arcari <[email protected]>
> Cc: [email protected]
> ---
> tools/power/x86/intel-speed-select/isst-config.c | 16 +++++++++++---
> --
> 1 file changed, 11 insertions(+), 5 deletions(-)
>
> diff --git a/tools/power/x86/intel-speed-select/isst-config.c
> b/tools/power/x86/intel-speed-select/isst-config.c
> index 78f0cebda1da..59753b3917bb 100644
> --- a/tools/power/x86/intel-speed-select/isst-config.c
> +++ b/tools/power/x86/intel-speed-select/isst-config.c
> @@ -603,6 +603,10 @@ static int isst_fill_platform_info(void)
>
> close(fd);
>
> + if (isst_platform_info.api_version > supported_api_ver) {
> + printf("Incompatible API versions; Upgrade of tool is
> required\n");
> + return -1;
> + }
> return 0;
> }
>
> @@ -1528,6 +1532,7 @@ static void cmdline(int argc, char **argv)
> {
> int opt;
> int option_index = 0;
> + int ret;
>
> static struct option long_options[] = {
> { "cpu", required_argument, 0, 'c' },
> @@ -1589,13 +1594,14 @@ static void cmdline(int argc, char **argv)
> set_max_cpu_num();
> set_cpu_present_cpu_mask();
> set_cpu_target_cpu_mask();
> - isst_fill_platform_info();
> - if (isst_platform_info.api_version > supported_api_ver) {
> - printf("Incompatible API versions; Upgrade of tool is
> required\n");
> - exit(0);
> - }
> + ret = isst_fill_platform_info();
> + if (ret)
> + goto out;
>
> process_command(argc, argv);
> +out:
> + free_cpu_set(present_cpumask);
> + free_cpu_set(target_cpumask);
> }
>
> int main(int argc, char **argv)

2019-09-06 07:59:15

by srinivas pandruvada

[permalink] [raw]
Subject: Re: [PATCH v2 0/9] tools-power-x86-intel-speed-select: Fixes and updates for output

On Thu, 2019-09-05 at 08:03 -0400, Prarit Bhargava wrote:
> Some general fixes and updates for intel-speed-select. Fixes include
> some
> typos as well as an off-by-one cpu count reporting error. Updates
> for the
> output are
>
> - switching to MHz as a standard
> - reporting CPU frequencies instead of ratios as a standard
> - viewing a human-readable CPU list.
> - avoiding reporting "0|1" as success|fail as these can be confusing
> for a
> user.
>
> v2: Add additional patch to fix memory leak and remove help text in
> 8/9.

For the series

Acked-by: Srinivas Pandruvada <[email protected]>

>
> Cc: Srinivas Pandruvada <[email protected]>
> Cc: David Arcari <[email protected]>
> Cc: [email protected]
>
> Prarit Bhargava (9):
> tools/power/x86/intel-speed-select: Fix package typo
> tools/power/x86/intel-speed-select: Fix help option typo
> tools/power/x86/intel-speed-select: Fix cpu-count output
> tools/power/x86/intel-speed-select: Simplify output for turbo-freq
> and
> base-freq
> tools/power/x86/intel-speed-select: Switch output to MHz
> tools/power/x86/intel-speed-select: Change turbo ratio output to
> maximum turbo frequency
> tools/power/x86/intel-speed-select: Output human readable CPU list
> tools/power/x86/intel-speed-select: Output success/failed for
> command
> output
> tools/power/x86/intel-speed-select: Fix memory leak
>
> .../x86/intel-speed-select/isst-config.c | 21 +--
> .../x86/intel-speed-select/isst-display.c | 120 +++++++++++++---
> --
> 2 files changed, 98 insertions(+), 43 deletions(-)
>

2019-09-06 08:18:50

by Prarit Bhargava

[permalink] [raw]
Subject: Re: [PATCH v2 9/9] tools/power/x86/intel-speed-select: Fix memory leak



On 9/5/19 3:42 PM, Srinivas Pandruvada wrote:
> On Thu, 2019-09-05 at 08:03 -0400, Prarit Bhargava wrote:
>> cpumasks are allocated by calling the alloc_cpu_mask() function and
>> are
>> never free'd. They should be free'd after the commands have run.
>>
>> Fix the memory leaks by calling free_cpu_set().
> Good to fix this. But after one command execution the process will
> exit.
>

I'm sorry, I misunderstood your comment. Yes, the process will exit after one
command :)

P.

> Thanks,
> Srinivas
>
>>
>> Signed-off-by: Prarit Bhargava <[email protected]>
>> Cc: Srinivas Pandruvada <[email protected]>
>> Cc: David Arcari <[email protected]>
>> Cc: [email protected]
>> ---
>> tools/power/x86/intel-speed-select/isst-config.c | 16 +++++++++++---
>> --
>> 1 file changed, 11 insertions(+), 5 deletions(-)
>>
>> diff --git a/tools/power/x86/intel-speed-select/isst-config.c
>> b/tools/power/x86/intel-speed-select/isst-config.c
>> index 78f0cebda1da..59753b3917bb 100644
>> --- a/tools/power/x86/intel-speed-select/isst-config.c
>> +++ b/tools/power/x86/intel-speed-select/isst-config.c
>> @@ -603,6 +603,10 @@ static int isst_fill_platform_info(void)
>>
>> close(fd);
>>
>> + if (isst_platform_info.api_version > supported_api_ver) {
>> + printf("Incompatible API versions; Upgrade of tool is
>> required\n");
>> + return -1;
>> + }
>> return 0;
>> }
>>
>> @@ -1528,6 +1532,7 @@ static void cmdline(int argc, char **argv)
>> {
>> int opt;
>> int option_index = 0;
>> + int ret;
>>
>> static struct option long_options[] = {
>> { "cpu", required_argument, 0, 'c' },
>> @@ -1589,13 +1594,14 @@ static void cmdline(int argc, char **argv)
>> set_max_cpu_num();
>> set_cpu_present_cpu_mask();
>> set_cpu_target_cpu_mask();
>> - isst_fill_platform_info();
>> - if (isst_platform_info.api_version > supported_api_ver) {
>> - printf("Incompatible API versions; Upgrade of tool is
>> required\n");
>> - exit(0);
>> - }
>> + ret = isst_fill_platform_info();
>> + if (ret)
>> + goto out;
>>
>> process_command(argc, argv);
>> +out:
>> + free_cpu_set(present_cpumask);
>> + free_cpu_set(target_cpumask);
>> }
>>
>> int main(int argc, char **argv)
>

2019-09-06 08:51:08

by Prarit Bhargava

[permalink] [raw]
Subject: Re: [PATCH v2 9/9] tools/power/x86/intel-speed-select: Fix memory leak



On 9/5/19 3:42 PM, Srinivas Pandruvada wrote:
> On Thu, 2019-09-05 at 08:03 -0400, Prarit Bhargava wrote:
>> cpumasks are allocated by calling the alloc_cpu_mask() function and
>> are
>> never free'd. They should be free'd after the commands have run.
>>
>> Fix the memory leaks by calling free_cpu_set().
> Good to fix this. But after one command execution the process will
> exit.

Oh ... I didn't realize it was possible to execute multiple commands in one
call. I'll go off and fix that and send a v3.

P.

>
> Thanks,
> Srinivas
>
>>
>> Signed-off-by: Prarit Bhargava <[email protected]>
>> Cc: Srinivas Pandruvada <[email protected]>
>> Cc: David Arcari <[email protected]>
>> Cc: [email protected]
>> ---
>> tools/power/x86/intel-speed-select/isst-config.c | 16 +++++++++++---
>> --
>> 1 file changed, 11 insertions(+), 5 deletions(-)
>>
>> diff --git a/tools/power/x86/intel-speed-select/isst-config.c
>> b/tools/power/x86/intel-speed-select/isst-config.c
>> index 78f0cebda1da..59753b3917bb 100644
>> --- a/tools/power/x86/intel-speed-select/isst-config.c
>> +++ b/tools/power/x86/intel-speed-select/isst-config.c
>> @@ -603,6 +603,10 @@ static int isst_fill_platform_info(void)
>>
>> close(fd);
>>
>> + if (isst_platform_info.api_version > supported_api_ver) {
>> + printf("Incompatible API versions; Upgrade of tool is
>> required\n");
>> + return -1;
>> + }
>> return 0;
>> }
>>
>> @@ -1528,6 +1532,7 @@ static void cmdline(int argc, char **argv)
>> {
>> int opt;
>> int option_index = 0;
>> + int ret;
>>
>> static struct option long_options[] = {
>> { "cpu", required_argument, 0, 'c' },
>> @@ -1589,13 +1594,14 @@ static void cmdline(int argc, char **argv)
>> set_max_cpu_num();
>> set_cpu_present_cpu_mask();
>> set_cpu_target_cpu_mask();
>> - isst_fill_platform_info();
>> - if (isst_platform_info.api_version > supported_api_ver) {
>> - printf("Incompatible API versions; Upgrade of tool is
>> required\n");
>> - exit(0);
>> - }
>> + ret = isst_fill_platform_info();
>> + if (ret)
>> + goto out;
>>
>> process_command(argc, argv);
>> +out:
>> + free_cpu_set(present_cpumask);
>> + free_cpu_set(target_cpumask);
>> }
>>
>> int main(int argc, char **argv)
>

2019-09-09 03:41:45

by Andy Shevchenko

[permalink] [raw]
Subject: Re: [PATCH v2 0/9] tools-power-x86-intel-speed-select: Fixes and updates for output

On Fri, Sep 6, 2019 at 10:58 AM Srinivas Pandruvada
<[email protected]> wrote:
>
> On Thu, 2019-09-05 at 08:03 -0400, Prarit Bhargava wrote:
> > Some general fixes and updates for intel-speed-select. Fixes include
> > some
> > typos as well as an off-by-one cpu count reporting error. Updates
> > for the
> > output are
> >
> > - switching to MHz as a standard
> > - reporting CPU frequencies instead of ratios as a standard
> > - viewing a human-readable CPU list.
> > - avoiding reporting "0|1" as success|fail as these can be confusing
> > for a
> > user.
> >
> > v2: Add additional patch to fix memory leak and remove help text in
> > 8/9.
>
> For the series
>
> Acked-by: Srinivas Pandruvada <[email protected]>
>

Pushed to my review and testing queue, thanks!


> >
> > Cc: Srinivas Pandruvada <[email protected]>
> > Cc: David Arcari <[email protected]>
> > Cc: [email protected]
> >
> > Prarit Bhargava (9):
> > tools/power/x86/intel-speed-select: Fix package typo
> > tools/power/x86/intel-speed-select: Fix help option typo
> > tools/power/x86/intel-speed-select: Fix cpu-count output
> > tools/power/x86/intel-speed-select: Simplify output for turbo-freq
> > and
> > base-freq
> > tools/power/x86/intel-speed-select: Switch output to MHz
> > tools/power/x86/intel-speed-select: Change turbo ratio output to
> > maximum turbo frequency
> > tools/power/x86/intel-speed-select: Output human readable CPU list
> > tools/power/x86/intel-speed-select: Output success/failed for
> > command
> > output
> > tools/power/x86/intel-speed-select: Fix memory leak
> >
> > .../x86/intel-speed-select/isst-config.c | 21 +--
> > .../x86/intel-speed-select/isst-display.c | 120 +++++++++++++---
> > --
> > 2 files changed, 98 insertions(+), 43 deletions(-)
> >
>


--
With Best Regards,
Andy Shevchenko