diff --git a/shared/source/os_interface/linux/xe/ioctl_helper_xe.cpp b/shared/source/os_interface/linux/xe/ioctl_helper_xe.cpp index 29a7878493..264c1ebb61 100644 --- a/shared/source/os_interface/linux/xe/ioctl_helper_xe.cpp +++ b/shared/source/os_interface/linux/xe/ioctl_helper_xe.cpp @@ -733,15 +733,6 @@ bool IoctlHelperXe::completionFenceExtensionSupported(const bool isVmBindAvailab uint64_t IoctlHelperXe::getFlagsForVmBind(bool bindCapture, bool bindImmediate, bool bindMakeResident) { uint64_t ret = 0; xeLog(" -> IoctlHelperXe::%s %d %d %d\n", __FUNCTION__, bindCapture, bindImmediate, bindMakeResident); - if (bindCapture) { - ret |= XE_NEO_BIND_CAPTURE_FLAG; - } - if (bindImmediate) { - ret |= XE_NEO_BIND_IMMEDIATE_FLAG; - } - if (bindMakeResident) { - ret |= XE_NEO_BIND_MAKERESIDENT_FLAG; - } return ret; } @@ -1216,6 +1207,7 @@ int IoctlHelperXe::xeVmBind(const VmBindParams &vmBindParams, bool isBind) { bind.bind.obj_offset = vmBindParams.offset; bind.bind.pat_index = static_cast(vmBindParams.patIndex); bind.bind.extensions = vmBindParams.extensions; + bind.bind.flags = static_cast(vmBindParams.flags); if (isBind) { bind.bind.op = DRM_XE_VM_BIND_OP_MAP; @@ -1256,9 +1248,10 @@ int IoctlHelperXe::xeVmBind(const VmBindParams &vmBindParams, bool isBind) { return ret; } + constexpr auto oneSecTimeout = 1000000; return xeWaitUserFence(bind.exec_queue_id, DRM_XE_UFENCE_WAIT_OP_EQ, sync[0].addr, - sync[0].timeline_value, XE_ONE_SEC); + sync[0].timeline_value, oneSecTimeout); } xeLog("error: -> IoctlHelperXe::%s %s index=%d vmid=0x%x h=0x%x s=0x%llx o=0x%llx l=0x%llx f=0x%llx pat=%hu r=%d\n", diff --git a/shared/source/os_interface/linux/xe/ioctl_helper_xe.h b/shared/source/os_interface/linux/xe/ioctl_helper_xe.h index f959b37218..f5c7f66621 100644 --- a/shared/source/os_interface/linux/xe/ioctl_helper_xe.h +++ b/shared/source/os_interface/linux/xe/ioctl_helper_xe.h @@ -17,15 +17,6 @@ struct drm_xe_engine_class_instance; -// Arbitratry value for easier identification in the logs for now -#define XE_NEO_BIND_CAPTURE_FLAG 0x1 -#define XE_NEO_BIND_IMMEDIATE_FLAG 0x20 -#define XE_NEO_BIND_MAKERESIDENT_FLAG 0x300 - -#define PRELIM_I915_UFENCE_WAIT_SOFT (1 << 15) - -#define XE_ONE_SEC 1000000000 - namespace NEO { enum class EngineClass : uint16_t; diff --git a/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_tests.cpp b/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_tests.cpp index 3e396101c0..cfa8afe69b 100644 --- a/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_tests.cpp @@ -406,10 +406,7 @@ TEST(IoctlHelperXeTest, givenIoctlHelperXeWhenCallingAnyMethodThenDummyValueIsRe EXPECT_EQ(static_cast(DRM_XE_VM_CREATE_FLAG_LR_MODE), xeIoctlHelper->getFlagsForVmCreate(false, false, false)); - EXPECT_EQ(static_cast(XE_NEO_BIND_CAPTURE_FLAG | - XE_NEO_BIND_IMMEDIATE_FLAG | - XE_NEO_BIND_MAKERESIDENT_FLAG), - xeIoctlHelper->getFlagsForVmBind(true, true, true)); + EXPECT_EQ(0ull, xeIoctlHelper->getFlagsForVmBind(true, true, true)); uint32_t fabricId = 0, latency = 0, bandwidth = 0; EXPECT_FALSE(xeIoctlHelper->getFabricLatency(fabricId, latency, bandwidth)); @@ -1412,11 +1409,16 @@ TEST(IoctlHelperXeTest, whenCallingVmBindThenWaitUserFenceIsCalled) { drm.vmBindInputs.clear(); drm.syncInputs.clear(); drm.waitUserFenceInputs.clear(); + + EXPECT_EQ(0u, vmBindParams.flags); + vmBindParams.flags = 0x12345; // set non-zero to check if flags are passed + auto expectedFlags = vmBindParams.flags; EXPECT_EQ(0, xeIoctlHelper->vmBind(vmBindParams)); EXPECT_EQ(1u, drm.vmBindInputs.size()); EXPECT_EQ(1u, drm.syncInputs.size()); EXPECT_EQ(1u, drm.waitUserFenceInputs.size()); auto expectedMask = std::numeric_limits::max(); + auto expectedTimeout = 1000000ll; { auto &sync = drm.syncInputs[0]; @@ -1430,8 +1432,10 @@ TEST(IoctlHelperXeTest, whenCallingVmBindThenWaitUserFenceIsCalled) { EXPECT_EQ(0u, waitUserFence.flags); EXPECT_EQ(fenceValue, waitUserFence.value); EXPECT_EQ(expectedMask, waitUserFence.mask); - EXPECT_EQ(static_cast(XE_ONE_SEC), waitUserFence.timeout); + EXPECT_EQ(expectedTimeout, waitUserFence.timeout); EXPECT_EQ(0u, waitUserFence.exec_queue_id); + + EXPECT_EQ(expectedFlags, drm.vmBindInputs[0].bind.flags); } drm.vmBindInputs.clear(); drm.syncInputs.clear(); @@ -1453,8 +1457,10 @@ TEST(IoctlHelperXeTest, whenCallingVmBindThenWaitUserFenceIsCalled) { EXPECT_EQ(0u, waitUserFence.flags); EXPECT_EQ(fenceValue, waitUserFence.value); EXPECT_EQ(expectedMask, waitUserFence.mask); - EXPECT_EQ(static_cast(XE_ONE_SEC), waitUserFence.timeout); + EXPECT_EQ(expectedTimeout, waitUserFence.timeout); EXPECT_EQ(0u, waitUserFence.exec_queue_id); + + EXPECT_EQ(expectedFlags, drm.vmBindInputs[0].bind.flags); } }