lib/power: fix error handling on setting governor

Message ID 20190108145926.37367-1-david.hunt@intel.com (mailing list archive)
State Accepted, archived
Delegated to: Thomas Monjalon
Headers
Series lib/power: fix error handling on setting governor |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/mellanox-Performance-Testing success Performance Testing PASS
ci/intel-Performance-Testing success Performance Testing PASS
ci/Intel-compilation success Compilation OK

Commit Message

Hunt, David Jan. 8, 2019, 2:59 p.m. UTC
  In the power_set_governor_*() functions, we using fputs() on /sys
filesystem. However, we also need to call fflush() to ensure that
the write completes successfully. Otherwise the attempt to set the
power governor fails and the function returns as if it has
succeeded. This patch adds an fflush to ensure that the
write succeeds, otherwise returns an error.

Fixes: e6c6dc0f96c8 ("power: add p-state driver compatibility")

Signed-off-by: David Hunt <david.hunt@intel.com>
---
 lib/librte_power/power_acpi_cpufreq.c   | 4 ++++
 lib/librte_power/power_pstate_cpufreq.c | 4 ++++
 2 files changed, 8 insertions(+)
  

Comments

Thomas Monjalon Jan. 14, 2019, 10:45 p.m. UTC | #1
08/01/2019 15:59, David Hunt:
> In the power_set_governor_*() functions, we using fputs() on /sys
> filesystem. However, we also need to call fflush() to ensure that
> the write completes successfully. Otherwise the attempt to set the
> power governor fails and the function returns as if it has
> succeeded. This patch adds an fflush to ensure that the
> write succeeds, otherwise returns an error.
> 
> Fixes: e6c6dc0f96c8 ("power: add p-state driver compatibility")
> 
> Signed-off-by: David Hunt <david.hunt@intel.com>

Applied, thanks
  

Patch

diff --git a/lib/librte_power/power_acpi_cpufreq.c b/lib/librte_power/power_acpi_cpufreq.c
index 98dcde31d..45412f0b9 100644
--- a/lib/librte_power/power_acpi_cpufreq.c
+++ b/lib/librte_power/power_acpi_cpufreq.c
@@ -166,6 +166,10 @@  power_set_governor_userspace(struct rte_power_info *pi)
 	val = fputs(POWER_GOVERNOR_USERSPACE, f);
 	FOPS_OR_ERR_GOTO(val, out);
 
+	/* We need to flush to see if the fputs succeeds */
+	val = fflush(f);
+	FOPS_OR_ERR_GOTO(val, out);
+
 	ret = 0;
 	RTE_LOG(INFO, POWER, "Power management governor of lcore %u has been "
 			"set to user space successfully\n", pi->lcore_id);
diff --git a/lib/librte_power/power_pstate_cpufreq.c b/lib/librte_power/power_pstate_cpufreq.c
index 9ec5da511..c4d972fc0 100644
--- a/lib/librte_power/power_pstate_cpufreq.c
+++ b/lib/librte_power/power_pstate_cpufreq.c
@@ -308,6 +308,10 @@  power_set_governor_performance(struct pstate_power_info *pi)
 	val = fputs(POWER_GOVERNOR_PERF, f);
 	FOPS_OR_ERR_GOTO(val, out);
 
+	/* We need to flush to see if the fputs succeeds */
+	val = fflush(f);
+	FOPS_OR_ERR_GOTO(val, out);
+
 	ret = 0;
 	RTE_LOG(INFO, POWER, "Power management governor of lcore %u has been "
 			"set to performance successfully\n", pi->lcore_id);