diff options
author | Krzysztof Bogacki <krzysztof.bogacki@leancode.pl> | 2022-09-10 23:51:52 +0300 |
---|---|---|
committer | Jens Peters <jp7677@gmail.com> | 2022-09-11 09:29:57 +0300 |
commit | 0fb1b03897662492f377b84b26c7a369093eea3b (patch) | |
tree | fc0b95f9fd88abfa68274b4bdb8ce3d5ec20e9a5 | |
parent | 151bd75eeb87d71b523a02f66088d57d24246dc4 (diff) |
nvapi-gpu: Remove temperature signedness workaround
-rw-r--r-- | src/nvapi_gpu.cpp | 13 | ||||
-rw-r--r-- | tests/nvapi_sysinfo.cpp | 16 |
2 files changed, 12 insertions, 17 deletions
diff --git a/src/nvapi_gpu.cpp b/src/nvapi_gpu.cpp index e0341bc..4bc3006 100644 --- a/src/nvapi_gpu.cpp +++ b/src/nvapi_gpu.cpp @@ -564,9 +564,6 @@ extern "C" { return HandleInvalidated(str::format(n, ": NVML available but current adapter is not NVML compatible"), alreadyLoggedHandleInvalidated); unsigned sensors; - // NVML claims that defaultMinTemp is unsigned int, but it can return values like uint32_t(4294967256) - // which would be equal to -40 if interpreted as signed, while NvAPI simply returns NvS32(-40) for the same device - signed int defaultMinTemp; nvmlGpuThermalSettings_t thermalSettings; auto result = adapter->GetNvmlDeviceThermalSettings(sensorIndex, &thermalSettings); switch (result) { @@ -583,10 +580,9 @@ extern "C" { for (auto i = 0U; i < sensors; i++) { pThermalSettingsV1->sensor[i].controller = Nvml::ToNvThermalController(thermalSettings.sensor[i].controller); pThermalSettingsV1->sensor[i].target = Nvml::ToNvThermalTarget(thermalSettings.sensor[i].target); - pThermalSettingsV1->sensor[i].currentTemp = thermalSettings.sensor[i].currentTemp; - pThermalSettingsV1->sensor[i].defaultMaxTemp = thermalSettings.sensor[i].defaultMaxTemp; - memcpy(&defaultMinTemp, &thermalSettings.sensor[i].defaultMinTemp, sizeof(defaultMinTemp)); - pThermalSettingsV1->sensor[i].defaultMinTemp = static_cast<NvU32>(std::max(defaultMinTemp, 0)); + pThermalSettingsV1->sensor[i].currentTemp = static_cast<NvU32>(std::max(thermalSettings.sensor[i].currentTemp, 0)); + pThermalSettingsV1->sensor[i].defaultMaxTemp = static_cast<NvU32>(std::max(thermalSettings.sensor[i].defaultMaxTemp, 0)); + pThermalSettingsV1->sensor[i].defaultMinTemp = static_cast<NvU32>(std::max(thermalSettings.sensor[i].defaultMinTemp, 0)); } break; } @@ -597,8 +593,7 @@ extern "C" { pThermalSettings->sensor[i].target = Nvml::ToNvThermalTarget(thermalSettings.sensor[i].target); pThermalSettings->sensor[i].currentTemp = static_cast<NvS32>(thermalSettings.sensor[i].currentTemp); pThermalSettings->sensor[i].defaultMaxTemp = static_cast<NvS32>(thermalSettings.sensor[i].defaultMaxTemp); - memcpy(&defaultMinTemp, &thermalSettings.sensor[i].defaultMinTemp, sizeof(defaultMinTemp)); - pThermalSettings->sensor[i].defaultMinTemp = defaultMinTemp; + pThermalSettings->sensor[i].defaultMinTemp = static_cast<NvS32>(thermalSettings.sensor[i].defaultMinTemp); } break; default: diff --git a/tests/nvapi_sysinfo.cpp b/tests/nvapi_sysinfo.cpp index 7a48147..ac30b9e 100644 --- a/tests/nvapi_sysinfo.cpp +++ b/tests/nvapi_sysinfo.cpp @@ -940,9 +940,9 @@ TEST_CASE("Sysinfo methods succeed", "[.sysinfo]") { } SECTION("GetThermalSettings succeeds when DeviceGetThermalSettings is available") { - auto temp = 65U; - auto maxTemp = 127U; - auto minTemp = 4294967256U; // -40 as unsigned int + auto temp = 65; + auto maxTemp = 127; + auto minTemp = -40; ALLOW_CALL(*nvml, DeviceGetThermalSettings(_, _, _)) // NOLINT(bugprone-use-after-move) .LR_SIDE_EFFECT({ _3->count = 1; @@ -972,8 +972,8 @@ TEST_CASE("Sysinfo methods succeed", "[.sysinfo]") { REQUIRE(settings.count == 1); REQUIRE(settings.sensor[0].controller == NVAPI_THERMAL_CONTROLLER_GPU_INTERNAL); REQUIRE(settings.sensor[0].target == NVAPI_THERMAL_TARGET_GPU); - REQUIRE(settings.sensor[0].currentTemp == temp); - REQUIRE(settings.sensor[0].defaultMaxTemp == maxTemp); + REQUIRE(settings.sensor[0].currentTemp == static_cast<NvU32>(temp)); + REQUIRE(settings.sensor[0].defaultMaxTemp == static_cast<NvU32>(maxTemp)); REQUIRE(settings.sensor[0].defaultMinTemp == 0U); } @@ -984,9 +984,9 @@ TEST_CASE("Sysinfo methods succeed", "[.sysinfo]") { REQUIRE(settings.count == 1); REQUIRE(settings.sensor[0].controller == NVAPI_THERMAL_CONTROLLER_GPU_INTERNAL); REQUIRE(settings.sensor[0].target == NVAPI_THERMAL_TARGET_GPU); - REQUIRE(settings.sensor[0].currentTemp == static_cast<int>(temp)); - REQUIRE(settings.sensor[0].defaultMaxTemp == static_cast<int>(maxTemp)); - REQUIRE(settings.sensor[0].defaultMinTemp == -40); + REQUIRE(settings.sensor[0].currentTemp == temp); + REQUIRE(settings.sensor[0].defaultMaxTemp == maxTemp); + REQUIRE(settings.sensor[0].defaultMinTemp == minTemp); } SECTION("GetThermalSettings with unknown struct version returns incompatible-struct-version") { |