lkml.org 
[lkml]   [2019]   [Sep]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 4.19 48/52] tools/power x86_energy_perf_policy: Fix "uninitialized variable" warnings at -O2
    Date
    From: Ben Hutchings <ben@decadent.org.uk>

    [ Upstream commit adb8049097a9ec4acd09fbd3aa8636199a78df8a ]

    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>
    Signed-off-by: Len Brown <len.brown@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    .../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 65bbe627a425f..bbef8bcf44d6d 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);
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-09-04 18:09    [W:4.192 / U:0.596 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site