diff --git a/projects/clr/hipamd/src/hip_device_runtime.cpp b/projects/clr/hipamd/src/hip_device_runtime.cpp index adb58a63ec..beb00e2589 100644 --- a/projects/clr/hipamd/src/hip_device_runtime.cpp +++ b/projects/clr/hipamd/src/hip_device_runtime.cpp @@ -777,12 +777,14 @@ hipError_t hipSetDevice(int device) { hip::tls.isSetDeviceCalled = true; // Check if the device is already set - if (hip::tls.device_ != nullptr && hip::tls.device_->deviceId() == device) { + if (hip::tls.device_ != nullptr && hip::tls.device_->deviceId() == device + && hip::tls.device_->GetActiveStatus() == true) { HIP_RETURN(hipSuccess); } if (static_cast(device) < g_devices.size()) { hip::setCurrentDevice(device); + hip::getCurrentDevice()->SetActiveStatus(); HIP_RETURN(hipSuccess); } else if (g_devices.empty()) { diff --git a/projects/hip-tests/catch/unit/context/CMakeLists.txt b/projects/hip-tests/catch/unit/context/CMakeLists.txt index 8f5ac897a1..3ab58901b9 100644 --- a/projects/hip-tests/catch/unit/context/CMakeLists.txt +++ b/projects/hip-tests/catch/unit/context/CMakeLists.txt @@ -23,6 +23,7 @@ set(TEST_SRC hipDrvMemcpy.cc hipMemsetD8.cc hipCtxNotSupported.cc + hipCtxActivate.cc ) hip_add_exe_to_target(NAME Context TEST_SRC ${TEST_SRC} diff --git a/projects/hip-tests/catch/unit/context/hipCtxActivate.cc b/projects/hip-tests/catch/unit/context/hipCtxActivate.cc new file mode 100644 index 0000000000..5a959b02a3 --- /dev/null +++ b/projects/hip-tests/catch/unit/context/hipCtxActivate.cc @@ -0,0 +1,44 @@ +/* +Copyright (c) 2025 Advanced Micro Devices, Inc. All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +#include + +/** + * Test Description + * ------------------------ + * - Validates that the primary context is active when hipSetDevice is called + * - Expected output: is_active = 1 + * Test source + * ------------------------ + * - unit/context/hipCtxActivate.cc + * Test requirements + * ------------------------ + * - HIP_VERSION >= 7.2 + */ +TEST_CASE("Unit_hipSetDevice_CheckPrimaryCtxState") { + int device_id = 0; + HIP_CHECK(hipSetDevice(device_id)); + + unsigned flags; + int is_active; + HIP_CHECK(hipDevicePrimaryCtxGetState(device_id, &flags, &is_active)); + + REQUIRE(is_active == 1); +} +