From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lf0-f43.google.com (mail-lf0-f43.google.com [209.85.215.43]) by dpdk.org (Postfix) with ESMTP id 34D3F1B70E for ; Mon, 16 Oct 2017 15:47:57 +0200 (CEST) Received: by mail-lf0-f43.google.com with SMTP id w21so9426760lfc.6 for ; Mon, 16 Oct 2017 06:47:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=8zwcC+/g0SiYH1EaVGrJDfZWGMDooFsO3tB/92US0uA=; b=VVejeWMeVlptm5h1v73aor05fLFgbTclatgrz26xB7flb8t9M51BhdPI+XhEulbWim beYXxl8ZJ1aXiXJroVWb3nUurC4iZ42sCyJF6x/An5fXNx8miEwN7CiZig0qnbTwJm3Z 9f5+r4np7A2LCwbYgzS+49zZjq0EUBjeZGZT4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=8zwcC+/g0SiYH1EaVGrJDfZWGMDooFsO3tB/92US0uA=; b=SyWrQ7rnG4sNYaEpaOUTpaXvbG628C7/G4B6n/estFI+6ZjoTrHDlWy+0hTIOsdowm htLNu8ki8xRe1yZ16DJ6U1g0Sc8U4LcLjpcvjzF6Oj4POB9NyF/x1IFNxtX9h+vOY6P+ 2Pn23TReS/4jdkQqDzScs+xRp5ZG5b8K1q1Kp/JXgkhtWIPiVAklqbxJRsf9RATqQLlb Gbv/KlH0gUjwAr5lBkKpBwDF1Pms5B7iecRw/P47gqsWV3+HBd/Pe2LrMEOKZU9ZZ/F6 T91i5W1FBJFjprmwbZmaQnF0Qf4j7WCTDk9EvrVpeu9ji+oc/dHlGdh6+trB0tivAuCv 12QQ== X-Gm-Message-State: AMCzsaWano5Sc3DBW0NQl9FCqv0YMZBjhB5Efbg2eCx83iXjMlr3+Avn TPfxTCGqC5L+vGmic4FKuuCj4oi2NKk= X-Google-Smtp-Source: ABhQp+QnV4kqKrQi6lhYt1A1kTgr+5DQOTnA3yB7DEi9TGgIvHSIWdZqFXCzWjLdLlBSnttk8FtngQ== X-Received: by 10.25.202.82 with SMTP id h18mr3064987lfj.54.1508161676674; Mon, 16 Oct 2017 06:47:56 -0700 (PDT) Received: from rad-H81M-S1.semihalf.local (31-172-191-173.noc.fibertech.net.pl. [31.172.191.173]) by smtp.gmail.com with ESMTPSA id s193sm1519140lfe.22.2017.10.16.06.47.55 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 16 Oct 2017 06:47:56 -0700 (PDT) From: Radoslaw Biernacki To: dev@dpdk.org, david.hunt@intel.com Cc: stable@dpdk.org, alan.carew@intel.com, pablo.de.lara.guarch@intel.com Date: Mon, 16 Oct 2017 15:47:08 +0200 Message-Id: <1508161628-4265-2-git-send-email-radoslaw.biernacki@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1508161628-4265-1-git-send-email-radoslaw.biernacki@linaro.org> References: <1508161628-4265-1-git-send-email-radoslaw.biernacki@linaro.org> Subject: [dpdk-dev] [PATCH 2/2] power: check if userspace governor is available X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 16 Oct 2017 13:47:57 -0000 Since for new Intel CPU's kernel use intel_pstate driver, which does not offer userspace governor, it is vise to check the userspace governor availability before trying to perform governor switch. The outcome from this patch is direct information for user about the root cause of failure during the rte_power_acpi_cpufreq_init(). This patch also add the /sys file name to error message as on some platforms some files expected by this rte_power are not available. This is also useful for pinning down the root cause of the problem. Signed-off-by: Radoslaw Biernacki --- lib/librte_power/rte_power_acpi_cpufreq.c | 35 ++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/lib/librte_power/rte_power_acpi_cpufreq.c b/lib/librte_power/rte_power_acpi_cpufreq.c index 8bf5685..342eb22 100644 --- a/lib/librte_power/rte_power_acpi_cpufreq.c +++ b/lib/librte_power/rte_power_acpi_cpufreq.c @@ -55,9 +55,9 @@ #define POWER_DEBUG_TRACE(fmt, args...) #endif -#define FOPEN_OR_ERR_RET(f, retval) do { \ +#define FOPEN_OR_ERR_RET(f, fullpath, retval) do { \ if ((f) == NULL) { \ - RTE_LOG(ERR, POWER, "File not openned\n"); \ + RTE_LOG(ERR, POWER, "File %s not openned\n", fullpath); \ return retval; \ } \ } while (0) @@ -80,6 +80,8 @@ #define POWER_CONVERT_TO_DECIMAL 10 #define POWER_GOVERNOR_USERSPACE "userspace" +#define POWER_SYSFILE_AVAIL_GOVERNOR \ + "/sys/devices/system/cpu/cpu%u/cpufreq/scaling_available_governors" #define POWER_SYSFILE_GOVERNOR \ "/sys/devices/system/cpu/cpu%u/cpufreq/scaling_governor" #define POWER_SYSFILE_AVAIL_FREQ \ @@ -170,10 +172,28 @@ power_set_governor_userspace(struct rte_power_info *pi) char *s; int val; + /* check if userspace governor is available */ + + snprintf(fullpath, sizeof(fullpath), POWER_SYSFILE_AVAIL_GOVERNOR, + pi->lcore_id); + f = fopen(fullpath, "r"); + FOPEN_OR_ERR_RET(f, fullpath, ret); + + s = fgets(buf, sizeof(buf), f); + FOPS_OR_NULL_GOTO(s, out); + + if (!strstr(buf, POWER_GOVERNOR_USERSPACE)) { + RTE_LOG(ERR, POWER, "Userspace governor is not available\n"); + goto out; + } + fclose(f); + + /* store current governor and set userspace governor */ + snprintf(fullpath, sizeof(fullpath), POWER_SYSFILE_GOVERNOR, pi->lcore_id); f = fopen(fullpath, "rw+"); - FOPEN_OR_ERR_RET(f, ret); + FOPEN_OR_ERR_RET(f, fullpath, ret); if (setvbuf(f, NULL, _IONBF, 0)) { RTE_LOG(ERR, POWER, "Cannot set unbuffered mode\n"); @@ -184,8 +204,7 @@ power_set_governor_userspace(struct rte_power_info *pi) FOPS_OR_NULL_GOTO(s, out); /* Check if current governor is userspace */ - if (strncmp(buf, POWER_GOVERNOR_USERSPACE, - sizeof(POWER_GOVERNOR_USERSPACE)) == 0) { + if (!strcmp(buf, POWER_GOVERNOR_USERSPACE)) { ret = 0; POWER_DEBUG_TRACE("Power management governor of lcore %u is " "already userspace\n", pi->lcore_id); @@ -228,7 +247,7 @@ power_get_available_freqs(struct rte_power_info *pi) snprintf(fullpath, sizeof(fullpath), POWER_SYSFILE_AVAIL_FREQ, pi->lcore_id); f = fopen(fullpath, "r"); - FOPEN_OR_ERR_RET(f, ret); + FOPEN_OR_ERR_RET(f, fullpath, ret); s = fgets(buf, sizeof(buf), f); FOPS_OR_NULL_GOTO(s, out); @@ -296,7 +315,7 @@ power_init_for_setting_freq(struct rte_power_info *pi) snprintf(fullpath, sizeof(fullpath), POWER_SYSFILE_SETSPEED, pi->lcore_id); f = fopen(fullpath, "rw+"); - FOPEN_OR_ERR_RET(f, -1); + FOPEN_OR_ERR_RET(f, fullpath, -1); if (setvbuf(f, NULL, _IONBF, 0)) { RTE_LOG(ERR, POWER, "Cannot set unbuffered mode\n"); @@ -398,7 +417,7 @@ power_set_governor_original(struct rte_power_info *pi) snprintf(fullpath, sizeof(fullpath), POWER_SYSFILE_GOVERNOR, pi->lcore_id); f = fopen(fullpath, "rw+"); - FOPEN_OR_ERR_RET(f, ret); + FOPEN_OR_ERR_RET(f, fullpath, ret); if (setvbuf(f, NULL, _IONBF, 0)) { RTE_LOG(ERR, POWER, "Cannot set unbuffered mode\n"); -- 2.7.4