From 5ebc77a0f15b103839f37eaee28be2c0d3052870 Mon Sep 17 00:00:00 2001 From: Marc Di Luzio Date: Tue, 15 May 2018 17:04:31 +0100 Subject: [PATCH] Add defaultgov and desiredgov config settings Allows users to choose which governor settings they want. Should provide some future compatibility for other governor settings. --- daemon/daemon_config.h | 10 ++++++++++ daemon/gamemode.c | 14 ++++++++++++-- data/gamemoded.1 | 5 +++++ example/gamemode.ini | 5 +++++ 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/daemon/daemon_config.h b/daemon/daemon_config.h index c86a499..1be1940 100644 --- a/daemon/daemon_config.h +++ b/daemon/daemon_config.h @@ -93,3 +93,13 @@ void config_get_gamemode_start_scripts(GameModeConfig *self, */ void config_get_gamemode_end_scripts(GameModeConfig *self, char scripts[CONFIG_LIST_MAX][CONFIG_VALUE_MAX]); + +/* + * Get the chosen default governor + */ +void config_get_default_governor(GameModeConfig *self, char governor[CONFIG_VALUE_MAX]); + +/* + * Get the chosen desired governor + */ +void config_get_desired_governor(GameModeConfig *self, char governor[CONFIG_VALUE_MAX]); diff --git a/daemon/gamemode.c b/daemon/gamemode.c index 1237a29..3903dc5 100644 --- a/daemon/gamemode.c +++ b/daemon/gamemode.c @@ -184,8 +184,13 @@ static void game_mode_context_enter(GameModeContext *self) self->initial_cpu_mode[sizeof(self->initial_cpu_mode) - 1] = '\0'; LOG_MSG("governor was initially set to [%s]\n", initial_state); + /* Choose the desired governor */ + char desired[CONFIG_VALUE_MAX] = { 0 }; + config_get_desired_governor(self->config, desired); + const char *desiredGov = desired[0] != '\0' ? desired : "performance"; + /* set the governor to performance */ - if (!set_governors("performance")) { + if (!set_governors(desiredGov)) { /* if the set fails, clear the initial mode so we don't try and reset it back and fail * again, presumably */ memset(self->initial_cpu_mode, 0, sizeof(self->initial_cpu_mode)); @@ -206,7 +211,12 @@ static void game_mode_context_leave(GameModeContext *self) /* Reset the governer state back to initial */ if (self->initial_cpu_mode[0] != '\0') { - set_governors(self->initial_cpu_mode); + /* Choose the governor to reset to, using the config to override */ + char defaultgov[CONFIG_VALUE_MAX] = { 0 }; + config_get_default_governor(self->config, defaultgov); + const char *gov_mode = defaultgov[0] != '\0' ? defaultgov : self->initial_cpu_mode; + + set_governors(gov_mode); memset(self->initial_cpu_mode, 0, sizeof(self->initial_cpu_mode)); } diff --git a/data/gamemoded.1 b/data/gamemoded.1 index fd1a09c..8c50b38 100644 --- a/data/gamemoded.1 +++ b/data/gamemoded.1 @@ -97,6 +97,11 @@ Behaviour of the config file can be explained by presenting a commented example: ; The reaper thread will check every 10 seconds for exited clients reaper_freq=10 +; The desired governor is used when entering GameMode instead of "performance" +desiredgov=performance +; The default governer is used when leaving GameMode instead of restoring the original value +defaultgov=powersave + [filter] ; If "whitelist" entry has a value(s) ; gamemode will reject anything not in the whitelist diff --git a/example/gamemode.ini b/example/gamemode.ini index dfabb60..9c04fb2 100644 --- a/example/gamemode.ini +++ b/example/gamemode.ini @@ -2,6 +2,11 @@ ; The reaper thread will check every 10 seconds for exited clients reaper_freq=10 +; The desired governor is used when entering GameMode instead of "performance" +desiredgov=performance +; The default governer is used when leaving GameMode instead of restoring the original value +defaultgov=powersave + [filter] ; If "whitelist" entry has a value(s) ; gamemode will reject anything not in the whitelist