tools: x86_energy_perf_policy: Fix "uninitialized variable" warnings at -O2
This commit is contained in:
parent
05c9d96767
commit
605745f58f
|
@ -19,6 +19,7 @@ linux (4.19~rc3-1~exp2) UNRELEASED; urgency=medium
|
|||
* lockdep, lib{cpupower,lockdep}-dev: Remove bogus deps on ${shlibs:Depends}
|
||||
* debian/rules.d/tools/power/linux-cpupower: Add "+" to recursive make
|
||||
commands
|
||||
* tools: x86_energy_perf_policy: Fix "uninitialized variable" warnings at -O2
|
||||
|
||||
-- Ben Hutchings <ben@decadent.org.uk> Mon, 10 Sep 2018 22:25:53 +0100
|
||||
|
||||
|
|
95
debian/patches/bugfix/x86/tools-x86_energy_perf_policy-fix-uninitialized-varia.patch
vendored
Normal file
95
debian/patches/bugfix/x86/tools-x86_energy_perf_policy-fix-uninitialized-varia.patch
vendored
Normal file
|
@ -0,0 +1,95 @@
|
|||
From: Ben Hutchings <ben@decadent.org.uk>
|
||||
Date: Tue, 11 Sep 2018 02:38:36 +0100
|
||||
Subject: tools: x86_energy_perf_policy: Fix "uninitialized variable"
|
||||
warnings at -O2
|
||||
|
||||
x86_energy_perf_policy first uses __get_cpuid() to check the maximum
|
||||
CPUID level and exits if it is too low. It then assumes that later
|
||||
calls will succeed (which I think is architecturally guaranteed). It
|
||||
also assumes that CPUID works at all (which is not guaranteed on
|
||||
x86_32).
|
||||
|
||||
If optimisations are enabled, gcc warns about potentially
|
||||
uninitialized variables. Fix this by adding an exit-on-error after
|
||||
every call to __get_cpuid() instead of just checking the maximum
|
||||
level.
|
||||
|
||||
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||
---
|
||||
.../x86_energy_perf_policy.c | 26 +++++++++++--------
|
||||
1 file changed, 15 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/tools/power/x86/x86_energy_perf_policy/x86_energy_perf_policy.c b/tools/power/x86/x86_energy_perf_policy/x86_energy_perf_policy.c
|
||||
index 65bbe627a425..bbef8bcf44d6 100644
|
||||
--- a/tools/power/x86/x86_energy_perf_policy/x86_energy_perf_policy.c
|
||||
+++ b/tools/power/x86/x86_energy_perf_policy/x86_energy_perf_policy.c
|
||||
@@ -1260,6 +1260,15 @@ void probe_dev_msr(void)
|
||||
if (system("/sbin/modprobe msr > /dev/null 2>&1"))
|
||||
err(-5, "no /dev/cpu/0/msr, Try \"# modprobe msr\" ");
|
||||
}
|
||||
+
|
||||
+static void get_cpuid_or_exit(unsigned int leaf,
|
||||
+ unsigned int *eax, unsigned int *ebx,
|
||||
+ unsigned int *ecx, unsigned int *edx)
|
||||
+{
|
||||
+ if (!__get_cpuid(leaf, eax, ebx, ecx, edx))
|
||||
+ errx(1, "Processor not supported\n");
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* early_cpuid()
|
||||
* initialize turbo_is_enabled, has_hwp, has_epb
|
||||
@@ -1267,15 +1276,10 @@ void probe_dev_msr(void)
|
||||
*/
|
||||
void early_cpuid(void)
|
||||
{
|
||||
- unsigned int eax, ebx, ecx, edx, max_level;
|
||||
+ unsigned int eax, ebx, ecx, edx;
|
||||
unsigned int fms, family, model;
|
||||
|
||||
- __get_cpuid(0, &max_level, &ebx, &ecx, &edx);
|
||||
-
|
||||
- if (max_level < 6)
|
||||
- errx(1, "Processor not supported\n");
|
||||
-
|
||||
- __get_cpuid(1, &fms, &ebx, &ecx, &edx);
|
||||
+ get_cpuid_or_exit(1, &fms, &ebx, &ecx, &edx);
|
||||
family = (fms >> 8) & 0xf;
|
||||
model = (fms >> 4) & 0xf;
|
||||
if (family == 6 || family == 0xf)
|
||||
@@ -1289,7 +1293,7 @@ void early_cpuid(void)
|
||||
bdx_highest_ratio = msr & 0xFF;
|
||||
}
|
||||
|
||||
- __get_cpuid(0x6, &eax, &ebx, &ecx, &edx);
|
||||
+ get_cpuid_or_exit(0x6, &eax, &ebx, &ecx, &edx);
|
||||
turbo_is_enabled = (eax >> 1) & 1;
|
||||
has_hwp = (eax >> 7) & 1;
|
||||
has_epb = (ecx >> 3) & 1;
|
||||
@@ -1307,7 +1311,7 @@ void parse_cpuid(void)
|
||||
|
||||
eax = ebx = ecx = edx = 0;
|
||||
|
||||
- __get_cpuid(0, &max_level, &ebx, &ecx, &edx);
|
||||
+ get_cpuid_or_exit(0, &max_level, &ebx, &ecx, &edx);
|
||||
|
||||
if (ebx == 0x756e6547 && edx == 0x49656e69 && ecx == 0x6c65746e)
|
||||
genuine_intel = 1;
|
||||
@@ -1316,7 +1320,7 @@ void parse_cpuid(void)
|
||||
fprintf(stderr, "CPUID(0): %.4s%.4s%.4s ",
|
||||
(char *)&ebx, (char *)&edx, (char *)&ecx);
|
||||
|
||||
- __get_cpuid(1, &fms, &ebx, &ecx, &edx);
|
||||
+ get_cpuid_or_exit(1, &fms, &ebx, &ecx, &edx);
|
||||
family = (fms >> 8) & 0xf;
|
||||
model = (fms >> 4) & 0xf;
|
||||
stepping = fms & 0xf;
|
||||
@@ -1341,7 +1345,7 @@ void parse_cpuid(void)
|
||||
errx(1, "CPUID: no MSR");
|
||||
|
||||
|
||||
- __get_cpuid(0x6, &eax, &ebx, &ecx, &edx);
|
||||
+ get_cpuid_or_exit(0x6, &eax, &ebx, &ecx, &edx);
|
||||
/* turbo_is_enabled already set */
|
||||
/* has_hwp already set */
|
||||
has_hwp_notify = eax & (1 << 8);
|
|
@ -152,6 +152,7 @@ bugfix/all/lockdep-stub-task_struct-state.patch
|
|||
bugfix/all/locking-lockdep-delete-unnecesary-include.patch
|
||||
bugfix/all/tools-lib-api-fs-fs.c-fix-misuse-of-strncpy.patch
|
||||
bugfix/all/usbip-fix-misuse-of-strncpy.patch
|
||||
bugfix/x86/tools-x86_energy_perf_policy-fix-uninitialized-varia.patch
|
||||
|
||||
# wireless: Disable regulatory.db direct loading (until we sort out signing)
|
||||
debian/wireless-disable-regulatory.db-direct-loading.patch
|
||||
|
|
Loading…
Reference in New Issue