Commit Graph

212 Commits

Author SHA1 Message Date
b411cfff6b gpuclockctl: refactor buffer size specification and avoid redundancies 2019-04-04 11:44:34 +02:00
d7394cbeb2 daemon: fix file descriptor leaks 2019-04-03 16:27:12 +02:00
618997f0b3 gpuclockctl: fix return value of get_gpu_state_amd() 2019-04-03 16:18:36 +02:00
41b85c245d Rewrite strncpy to silence compiler warning
Instead of initializing the char array to 0 and writing N-1 bytes,
write N-1 bytes and set the last byte manually to 0. This seems
to make gcc happy.
2019-03-28 17:14:00 +01:00
4a577b8c7c Rename local variable to un-shadow the global bus
The local variable 'bus' was shadowing the global 'bus' variable;
to not confuse the two, rename the local one. Also unref the local
bus, i.e. fix a small memory leak.
2019-03-28 11:40:40 +00:00
c34186be07 Mark game_mode_context_loop as 'noreturn'
The function contains the main-loop of the daemon and will indeed
never return.
2019-03-28 11:40:40 +00:00
d12ab6830f No old-style function definitions.
Specify void as argument type for functions that don't take args.
2019-03-28 11:40:40 +00:00
45ba5bc4c4 Use matching signedness in format strings
Either cast the variable or change the format string to match the
signedness.
2019-03-28 11:40:40 +00:00
0eb59fc848 Use minimal number of characters for strncmp
MAX_GOVERNOR_LENGTH is defined as PATH_MAX + 1, so when comparing
two variable, each of once size, use the smaller one, i.e. PATH_MAX.
Assert statically that MAX_GOVERNOR_LENGTH is larger then PATH_MAX
so copying a string to a MAX_GOVERNOR_LENGTH sized variable from a
PATH_MAX size variable will not truncate the string.
2019-03-28 11:40:40 +00:00
bbde1d0357 Ensure strncpy'ed strings are all null terminated
If there is no null byte among the first n bytes of the source the
resulting string will not be properly null terminated.
Ensure that all strings that are copied via strncpy are properly
terminated copy "sizeof (dest) - 1" bytes and manually terminate
the string in the cases the array was not initialized.

Example compiler warning:
  ../daemon/gamemode-tests.c: In function ‘run_cpu_governor_tests’:
  ../daemon/gamemode-tests.c:326:4: warning: ‘strncpy’ specified bound
      256 equals destination size [-Wstringop-truncation]
    strncpy(defaultgov, currentgov, CONFIG_VALUE_MAX);
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2019-03-28 11:40:40 +00:00
10a31f8dec Update copyright years to 2019 2019-03-14 16:59:30 +00:00
0f680f2a83 clang-format fix 2019-03-14 16:30:52 +00:00
2ab46df4c3 Disable softrealtime (SCHED_ISO) and renice by default
SCHED_ISO is not supported by upstream kernels, so don't try to use this by
default since for most users it will result in an error log that trying to
set the scheduling policy fails.

Without extra system configuration, we will also not have permission to renice
processes by default, so out of the box doing this will fail as well.

Users that wish to use these features can enable them from the config once
they have configured their system appropriately.
2019-03-14 15:00:49 +00:00
1482a2b39e Get the gpu index for both get and set (thanks @rezzafr33!) 2019-03-12 08:52:58 +00:00
c1d06f2ad5 Try and make an educated guess at the correct nvidia gpu index
This should hopefully fix issue #113, where the user was in the common situation of having an intel and an nvidia GPU, at card0 and card1 respectively, but the nvidia gpu was [gpu:0] according to the driver
2019-03-11 21:58:51 +00:00
dc1258d750 Automatically adjust the nvidia gpu index
The drm device ID doesn't match up with the pci device as expected, spotted by issue #113

	I can't test this myself just yet, will need data from the user in question to verify PCIDevice is the right value
2019-03-11 16:27:49 +00:00
fec32ac53d Remove the nv_perf_level config option and figure it out programmatically
This also fixes the instances in testing where we don't have the nv overclock in use, but we do have the mode set

	Solves issues explaining the what the perf_level actually meant, and future proofs for any PR that wants to set individual perf levels
2019-03-10 15:19:34 +00:00
873d0a224b Remove passing the vendor to gpuclockctl 2019-03-10 15:19:34 +00:00
c49cd45e01 Ensure that we null terminate the process output buffer in run_external_process 2019-03-10 10:51:15 +00:00
8bb7c901de Fix typo (default_timout -> default_timeout) 2019-03-10 10:47:17 +00:00
7fb1950357 Fix formatting 2019-03-10 10:32:08 +00:00
54d7d3f259 Allow nv_perl_level and nv_powermizer_mode to be set independently 2019-03-10 10:32:08 +00:00
834a18aab4 Implement nv_powermizer_mode option to allow setting the Nvidia powermizer mode 2019-03-10 10:32:08 +00:00
9ade4481c3 Change AMD overclocking to simply be setting the power_dpm_force_performance_level file for now
This covers the MVP for now, and simply allows pinning the power level to "high"

	Full overclocking set up is somewhat more complicated, and it'll be better to implement that at the same time as the same for Nvidia, where we're currently only really setting the top end power level
2019-03-10 10:32:08 +00:00
20efaaa33f Rename the core and mem stats to nv_ prefix
These will be NV only going forward, as AMD needs a different chunk of work
2019-03-10 10:32:08 +00:00
6a240d550e Extend the sleep for the child gamemode in tests 2019-03-08 12:32:08 +00:00
0efd65fc78 set the default gov not the desired gov in tests 2019-03-08 12:14:01 +00:00
b6da948ca2 Add the output to the log for external processes that have failed 2019-03-07 17:51:57 +00:00
c215626ccd Add "script_timeout" config value to control if a user wants to extend the script timeout before kill value 2019-03-07 17:51:57 +00:00
53d1700a68 Add the timout to the call signature of run_external_process 2019-03-07 17:51:57 +00:00
4578af47ba Combine the two run_external_process functions so they both have the same timeout protection 2019-03-07 17:51:57 +00:00
e9ff2cbb10 Implement a timeout in run_external_process 2019-03-07 17:51:57 +00:00
1665447350 Use run_external_process for the script execution
This protects the main process against script exection and allows more detailed error handling
2019-03-07 17:51:57 +00:00
5facf2bba5 Refactor out script execution 2019-03-07 17:51:57 +00:00
024acddf90 Run the custom start scripts to after the other optimisations
This ensures the other featues are applied first, and the scripts can react if needed to those settings
2019-03-07 17:51:57 +00:00
9df1dd857c Try waiting for the reaper thread at the start of tests if needed 2019-03-07 17:51:57 +00:00
3c28e84700 Merge pull request #105 from mdiluz/auto-detect-vendor
Detect the GPU vendor automatically
2019-03-04 08:43:58 +00:00
7f6f32d284 Actually reject requests if require_supervisor is hit 2019-02-22 15:58:46 +00:00
c1dfd8bbc4 Add gamemode error strings to printouts to help debug issues 2019-02-21 17:34:20 +00:00
218dc9dab8 Fix up formatting 2019-02-21 17:34:20 +00:00
70c317233f Wait for the child to finish up 2019-02-21 17:34:20 +00:00
3a624350d1 Add flavor to error log messages 2019-02-21 17:34:20 +00:00
baf295773b Implement supervisor tests 2019-02-21 17:34:20 +00:00
b28efdb555 Correct the names and return 0 for success 2019-02-21 17:34:20 +00:00
602afdcbb7 Add check against require_supervisor variable 2019-02-21 17:34:20 +00:00
1d40c0cc1b Refactor to use single internal functions for register, unregister and query 2019-02-21 17:34:20 +00:00
d4fdd9e3b4 Correct internal name for query_status_for 2019-02-21 17:34:20 +00:00
de1049f070 Fix comments 2019-02-21 17:34:20 +00:00
c2f7e971c6 Implement game_mode_query_status_for as well 2019-02-21 17:34:20 +00:00
1430c0b831 Implement supervisor features using new config variables
This allows direct control over who can make requests on behalf of other processes

	require_supervisor can also be used to allow a supervisor to take direct control of gamemode on the system (perhaps a GUI, or game launcher)
2019-02-21 17:34:20 +00:00