From de394915dfa12628fd55680dadeda521e53ef948 Mon Sep 17 00:00:00 2001 From: David Hunt Date: Tue, 8 Jan 2019 14:59:26 +0000 Subject: [PATCH] power: fix error handling on setting governor 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 --- lib/librte_power/power_acpi_cpufreq.c | 4 ++++ lib/librte_power/power_pstate_cpufreq.c | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/lib/librte_power/power_acpi_cpufreq.c b/lib/librte_power/power_acpi_cpufreq.c index cd5978d5b3..f50897b4dd 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 411d0eb163..0f8e8f9706 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); -- 2.20.1