power: fix P-state base frequency handling
authorAnatoly Burakov <anatoly.burakov@intel.com>
Fri, 2 Apr 2021 09:26:44 +0000 (09:26 +0000)
committerThomas Monjalon <thomas@monjalon.net>
Tue, 6 Apr 2021 08:36:42 +0000 (10:36 +0200)
Previous fix for base frequency handling in pstate mode introduced a
couple of issues:

- When base_frequency file does not exist, it simply bails out because
  of what appears to be accidental addition of FOPEN_OR_ERR_RET. This is
  incorrect, as absence of this file is not fatal and is in fact
  expected on kernel versions earlier than 5.3
- When base_frequency file does exist, it gets opened, but never gets
  closed, resulting in a resource leak

Both issues also manifest themselves as Coverity defects (dead code, and
a resource leak), so this fix addresses both.

Coverity issue: 369693, 369694
Bugzilla ID: 668
Fixes: 4db9587bbf72 ("power: check sysfs base frequency")

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: Reshma Pattan <reshma.pattan@intel.com>
lib/librte_power/power_pstate_cpufreq.c

index 8a1fffa..c4639e4 100644 (file)
@@ -206,7 +206,6 @@ power_init_for_setting_freq(struct pstate_power_info *pi)
                        pi->lcore_id);
 
        f_base = fopen(fullpath_base, "r");
-       FOPEN_OR_ERR_RET(f_base, -1);
        if (f_base == NULL) {
                /* No sysfs base_frequency, that's OK, continue without */
                base_ratio = 0;
@@ -221,6 +220,7 @@ power_init_for_setting_freq(struct pstate_power_info *pi)
 
                base_ratio = strtoul(buf_base, NULL, POWER_CONVERT_TO_DECIMAL)
                                / BUS_FREQ;
+               fclose(f_base);
        }
 
        /* Add MSR read to detect turbo status */