From 030e7702f141c76b298d5adb3f5584352ee57903 Mon Sep 17 00:00:00 2001 From: sdashmiz Date: Fri, 24 Jun 2022 15:24:50 -0400 Subject: [PATCH] SWDEV-343160 - correct mutual exclusive flags - flags passed should be only one type at a time Signed-off-by: sdashmiz Change-Id: I3e56f036e51d8cc84fe5c18c06cfa11cf785233f --- hipamd/src/hip_device_runtime.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/hipamd/src/hip_device_runtime.cpp b/hipamd/src/hip_device_runtime.cpp index 5a380e14cb..aada90b8f5 100644 --- a/hipamd/src/hip_device_runtime.cpp +++ b/hipamd/src/hip_device_runtime.cpp @@ -565,13 +565,23 @@ hipError_t hipSetDeviceFlags ( unsigned int flags ) { constexpr uint32_t supportedFlags = hipDeviceScheduleMask | hipDeviceMapHost | hipDeviceLmemResizeToMax; + constexpr uint32_t mutualExclusiveFlags = + hipDeviceScheduleSpin | hipDeviceScheduleYield | hipDeviceScheduleBlockingSync; + // Only one scheduling flag allowed a time + uint32_t scheduleFlag = flags & hipDeviceScheduleMask; + + if (((scheduleFlag & mutualExclusiveFlags) != hipDeviceScheduleSpin) && ((scheduleFlag & mutualExclusiveFlags) != hipDeviceScheduleYield) + && ((scheduleFlag & mutualExclusiveFlags) != hipDeviceScheduleBlockingSync) + && ((scheduleFlag & hipDeviceScheduleAuto) != hipDeviceScheduleAuto)) { + HIP_RETURN(hipErrorInvalidValue); + } if (flags & ~supportedFlags) { HIP_RETURN(hipErrorInvalidValue); } amd::Device* device = hip::getCurrentDevice()->devices()[0]; - switch (flags & hipDeviceScheduleMask) { + switch (scheduleFlag) { case hipDeviceScheduleAuto: // Current behavior is different from the spec, due to MT usage in runtime if (hip::host_device->devices().size() >= std::thread::hardware_concurrency()) {