Explorar o código

Sanity check the config values

	These values are up for debate, perhaps AMD or NV give nice limits
Marc Di Luzio %!s(int64=6) %!d(string=hai) anos
pai
achega
252aa89fa6
Modificáronse 1 ficheiros con 25 adicións e 3 borrados
  1. 25 3
      daemon/gamemode-gpu.c

+ 25 - 3
daemon/gamemode-gpu.c

@@ -95,24 +95,46 @@ int game_mode_initialise_gpu(GameModeConfig *config, GameModeGPUInfo **info)
 		return -1;
 	}
 
-	/* Load the config based on GPU */
+	/* Load the config based on GPU and also verify the values are sane */
 	switch (new_info->vendor) {
 	case Vendor_NVIDIA:
 		config_get_nv_core_clock_mhz_offset(config, &new_info->core);
 		config_get_nv_mem_clock_mhz_offset(config, &new_info->mem);
+
+		/* Reject values over some guessed values
+		 * If a user wants to go into very unsafe levels they can recompile
+         */
+		const int nv_core_hard_limit = 200;
+		const int nv_mem_hard_limit = 2000;
+		if( new_info->core > nv_core_hard_limit || new_info->mem > nv_mem_hard_limit ) {
+			LOG_ERROR("ERROR NVIDIA Overclock value above safety levels of +%d (core) +%d (mem), will not overclock!\n", nv_core_hard_limit, nv_mem_hard_limit );
+			LOG_ERROR("nv_core_clock_mhz_offset:%ld nv_mem_clock_mhz_offset:%ld\n", new_info->core, new_info->mem );
+			free(new_info);
+			return -1;
+		}
+
 		break;
 	case Vendor_AMD:
 		config_get_amd_core_clock_percentage(config, &new_info->core);
 		config_get_amd_mem_clock_percentage(config, &new_info->mem);
+
+		/* Reject values over 25%
+		 * If a user wants to go into very unsafe levels they can recompile
+         */
+		const int amd_hard_limit = 25;
+		if( new_info->core > amd_hard_limit || new_info->mem > amd_hard_limit ) {
+			LOG_ERROR("ERROR AMD Overclock value above safety level of %d%%, will not overclock!\n", amd_hard_limit );
+			LOG_ERROR("amd_core_clock_percentage:%ld amd_mem_clock_percentage:%ld\n", new_info->core, new_info->mem );
+			free(new_info);
+			return -1;
+		}
 		break;
 	default:
 		break;
 	}
-	/* TODO : Sanity check these values */
 
 	/* Give back the new gpu info */
 	*info = new_info;
-
 	return status;
 }