Currently, the application does support running without the power
library being initialized, but it has to be specifically requested. On
platforms without support for frequency scaling using the power library,
we can just enable interrupt-only mode by default.

Signed-off-by: Anatoly Burakov <anatoly.bura...@intel.com>
Suggested-by: Jerin Jacob <jerinjac...@gmail.com>
---
 examples/l3fwd-power/main.c | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/examples/l3fwd-power/main.c b/examples/l3fwd-power/main.c
index 51acbfd87d..a66599e734 100644
--- a/examples/l3fwd-power/main.c
+++ b/examples/l3fwd-power/main.c
@@ -2412,6 +2412,20 @@ launch_timer(unsigned int lcore_id)
        return 0;
 }
 
+static int
+autodetect_mode(void)
+{
+       /*
+        * Empty poll and telemetry modes have to be specifically requested to
+        * be enabled, but we can auto-detect between legacy mode with or
+        * without interrupts. Both ACPI and pstate can be used.
+        */
+       if (rte_power_check_env_supported(PM_ENV_ACPI_CPUFREQ))
+               return APP_MODE_LEGACY;
+       if (rte_power_check_env_supported(PM_ENV_PSTATE_CPUFREQ))
+               return APP_MODE_LEGACY;
+       return APP_MODE_INTERRUPT;
+}
 
 int
 main(int argc, char **argv)
@@ -2449,7 +2463,7 @@ main(int argc, char **argv)
                rte_exit(EXIT_FAILURE, "Invalid L3FWD parameters\n");
 
        if (app_mode == APP_MODE_DEFAULT)
-               app_mode = APP_MODE_LEGACY;
+               app_mode = autodetect_mode();
 
        /* only legacy and empty poll mode rely on power library */
        if ((app_mode == APP_MODE_LEGACY || app_mode == APP_MODE_EMPTY_POLL) &&
-- 
2.17.1

Reply via email to