diff --git a/shared/source/os_interface/linux/drm_neo.cpp b/shared/source/os_interface/linux/drm_neo.cpp index a3851f4cca..76558bf718 100644 --- a/shared/source/os_interface/linux/drm_neo.cpp +++ b/shared/source/os_interface/linux/drm_neo.cpp @@ -1409,7 +1409,7 @@ int changeBufferObjectBinding(Drm *drm, OsContext *osContext, uint32_t vmHandleI if (bind) { std::unique_lock lock; - auto vmBindExtSyncFence = ioctlHelper->createVmBindExtSyncFence(); + auto vmBindExtUserFence = ioctlHelper->createVmBindExtUserFence(); if (drm->useVMBindImmediate()) { lock = drm->lockBindFenceMutex(); @@ -1419,8 +1419,8 @@ int changeBufferObjectBinding(Drm *drm, OsContext *osContext, uint32_t vmHandleI auto address = castToUint64(drm->getFenceAddr(vmHandleId)); auto value = drm->getNextFenceVal(vmHandleId); - ioctlHelper->fillVmBindExtSyncFence(vmBindExtSyncFence, address, value, nextExtension); - vmBind.extensions = castToUint64(vmBindExtSyncFence.get()); + ioctlHelper->fillVmBindExtUserFence(vmBindExtUserFence, address, value, nextExtension); + vmBind.extensions = castToUint64(vmBindExtUserFence.get()); } } diff --git a/shared/source/os_interface/linux/ioctl_helper.h b/shared/source/os_interface/linux/ioctl_helper.h index 1a54844fb7..517fe76e39 100644 --- a/shared/source/os_interface/linux/ioctl_helper.h +++ b/shared/source/os_interface/linux/ioctl_helper.h @@ -112,8 +112,8 @@ class IoctlHelper { virtual uint32_t createCooperativeContext(Drm *drm, drm_i915_gem_context_create_ext &gcc) = 0; virtual std::unique_ptr createVmBindExtSetPat() = 0; virtual void fillVmBindExtSetPat(const std::unique_ptr &vmBindExtSetPat, uint64_t patIndex, uint64_t nextExtension) = 0; - virtual std::unique_ptr createVmBindExtSyncFence() = 0; - virtual void fillVmBindExtSyncFence(const std::unique_ptr &vmBindExtSyncFence, uint64_t fenceAddress, uint64_t fenceValue, uint64_t nextExtension) = 0; + virtual std::unique_ptr createVmBindExtUserFence() = 0; + virtual void fillVmBindExtUserFence(const std::unique_ptr &vmBindExtUserFence, uint64_t fenceAddress, uint64_t fenceValue, uint64_t nextExtension) = 0; virtual std::optional getCopyClassSaturatePCIECapability() = 0; virtual std::optional getCopyClassSaturateLinkCapability() = 0; virtual uint32_t getVmAdviseAtomicAttribute() = 0; @@ -164,8 +164,8 @@ class IoctlHelperUpstream : public IoctlHelper { uint32_t createCooperativeContext(Drm *drm, drm_i915_gem_context_create_ext &gcc) override; std::unique_ptr createVmBindExtSetPat() override; void fillVmBindExtSetPat(const std::unique_ptr &vmBindExtSetPat, uint64_t patIndex, uint64_t nextExtension) override; - std::unique_ptr createVmBindExtSyncFence() override; - void fillVmBindExtSyncFence(const std::unique_ptr &vmBindExtSyncFence, uint64_t fenceAddress, uint64_t fenceValue, uint64_t nextExtension) override; + std::unique_ptr createVmBindExtUserFence() override; + void fillVmBindExtUserFence(const std::unique_ptr &vmBindExtUserFence, uint64_t fenceAddress, uint64_t fenceValue, uint64_t nextExtension) override; std::optional getCopyClassSaturatePCIECapability() override; std::optional getCopyClassSaturateLinkCapability() override; uint32_t getVmAdviseAtomicAttribute() override; @@ -229,8 +229,8 @@ class IoctlHelperPrelim20 : public IoctlHelper { uint32_t createCooperativeContext(Drm *drm, drm_i915_gem_context_create_ext &gcc) override; std::unique_ptr createVmBindExtSetPat() override; void fillVmBindExtSetPat(const std::unique_ptr &vmBindExtSetPat, uint64_t patIndex, uint64_t nextExtension) override; - std::unique_ptr createVmBindExtSyncFence() override; - void fillVmBindExtSyncFence(const std::unique_ptr &vmBindExtSyncFence, uint64_t fenceAddress, uint64_t fenceValue, uint64_t nextExtension) override; + std::unique_ptr createVmBindExtUserFence() override; + void fillVmBindExtUserFence(const std::unique_ptr &vmBindExtUserFence, uint64_t fenceAddress, uint64_t fenceValue, uint64_t nextExtension) override; std::optional getCopyClassSaturatePCIECapability() override; std::optional getCopyClassSaturateLinkCapability() override; uint32_t getVmAdviseAtomicAttribute() override; diff --git a/shared/source/os_interface/linux/ioctl_helper_prelim.cpp b/shared/source/os_interface/linux/ioctl_helper_prelim.cpp index 678a63ba66..b1e1d2c81a 100644 --- a/shared/source/os_interface/linux/ioctl_helper_prelim.cpp +++ b/shared/source/os_interface/linux/ioctl_helper_prelim.cpp @@ -216,7 +216,7 @@ bool IoctlHelperPrelim20::setVmPrefetch(Drm *drm, uint64_t start, uint64_t lengt } uint32_t IoctlHelperPrelim20::getDirectSubmissionFlag() { - return PRELIM_I915_CONTEXT_CREATE_FLAGS_ULLS; + return PRELIM_I915_CONTEXT_CREATE_FLAGS_LONG_RUNNING; } int32_t IoctlHelperPrelim20::getMemRegionsIoctlVal() { @@ -449,17 +449,17 @@ void IoctlHelperPrelim20::fillVmBindExtSetPat(const std::unique_ptr & prelimVmBindExtSetPat->base.next_extension = nextExtension; } -std::unique_ptr IoctlHelperPrelim20::createVmBindExtSyncFence() { - return std::make_unique(sizeof(prelim_drm_i915_vm_bind_ext_sync_fence)); +std::unique_ptr IoctlHelperPrelim20::createVmBindExtUserFence() { + return std::make_unique(sizeof(prelim_drm_i915_vm_bind_ext_user_fence)); } -void IoctlHelperPrelim20::fillVmBindExtSyncFence(const std::unique_ptr &vmBindExtSyncFence, uint64_t fenceAddress, uint64_t fenceValue, uint64_t nextExtension) { - auto prelimVmBindExtSyncFence = reinterpret_cast(vmBindExtSyncFence.get()); - UNRECOVERABLE_IF(!prelimVmBindExtSyncFence); - prelimVmBindExtSyncFence->base.name = PRELIM_I915_VM_BIND_EXT_SYNC_FENCE; - prelimVmBindExtSyncFence->base.next_extension = nextExtension; - prelimVmBindExtSyncFence->addr = fenceAddress; - prelimVmBindExtSyncFence->val = fenceValue; +void IoctlHelperPrelim20::fillVmBindExtUserFence(const std::unique_ptr &vmBindExtUserFence, uint64_t fenceAddress, uint64_t fenceValue, uint64_t nextExtension) { + auto prelimVmBindExtUserFence = reinterpret_cast(vmBindExtUserFence.get()); + UNRECOVERABLE_IF(!prelimVmBindExtUserFence); + prelimVmBindExtUserFence->base.name = PRELIM_I915_VM_BIND_EXT_USER_FENCE; + prelimVmBindExtUserFence->base.next_extension = nextExtension; + prelimVmBindExtUserFence->addr = fenceAddress; + prelimVmBindExtUserFence->val = fenceValue; } std::optional IoctlHelperPrelim20::getCopyClassSaturatePCIECapability() { diff --git a/shared/source/os_interface/linux/ioctl_helper_upstream.cpp b/shared/source/os_interface/linux/ioctl_helper_upstream.cpp index e52804e8ba..72bc15d137 100644 --- a/shared/source/os_interface/linux/ioctl_helper_upstream.cpp +++ b/shared/source/os_interface/linux/ioctl_helper_upstream.cpp @@ -200,11 +200,11 @@ std::unique_ptr IoctlHelperUpstream::createVmBindExtSetPat() { void IoctlHelperUpstream::fillVmBindExtSetPat(const std::unique_ptr &vmBindExtSetPat, uint64_t patIndex, uint64_t nextExtension) {} -std::unique_ptr IoctlHelperUpstream::createVmBindExtSyncFence() { +std::unique_ptr IoctlHelperUpstream::createVmBindExtUserFence() { return {}; } -void IoctlHelperUpstream::fillVmBindExtSyncFence(const std::unique_ptr &vmBindExtSyncFence, uint64_t fenceAddress, uint64_t fenceValue, uint64_t nextExtension) {} +void IoctlHelperUpstream::fillVmBindExtUserFence(const std::unique_ptr &vmBindExtUserFence, uint64_t fenceAddress, uint64_t fenceValue, uint64_t nextExtension) {} std::optional IoctlHelperUpstream::getCopyClassSaturatePCIECapability() { return std::nullopt; diff --git a/shared/test/common/libult/linux/drm_mock_prelim_context.cpp b/shared/test/common/libult/linux/drm_mock_prelim_context.cpp index ec0c7366a2..6aba40c1cb 100644 --- a/shared/test/common/libult/linux/drm_mock_prelim_context.cpp +++ b/shared/test/common/libult/linux/drm_mock_prelim_context.cpp @@ -409,9 +409,9 @@ void DrmMockPrelimContext::storeVmBindExtensions(uint64_t ptr, bool bind) { size_t uuidIndex{0}; auto baseExt = reinterpret_cast(ptr); while (baseExt) { - if (baseExt->name == PRELIM_I915_VM_BIND_EXT_SYNC_FENCE) { - const auto *ext = reinterpret_cast(baseExt); - receivedVmBindSyncFence = {ext->addr, ext->val}; + if (baseExt->name == PRELIM_I915_VM_BIND_EXT_USER_FENCE) { + const auto *ext = reinterpret_cast(baseExt); + receivedVmBindUserFence = {ext->addr, ext->val}; } else if (baseExt->name == PRELIM_I915_VM_BIND_EXT_UUID) { const auto *ext = reinterpret_cast(baseExt); receivedVmBindUuidExt[uuidIndex++] = UuidVmBindExt{ext->uuid_handle, ext->base.next_extension}; @@ -444,8 +444,8 @@ uint32_t DrmPrelimHelper::getStringUuidClass() { return PRELIM_I915_UUID_CLASS_STRING; } -uint32_t DrmPrelimHelper::getULLSContextCreateFlag() { - return PRELIM_I915_CONTEXT_CREATE_FLAGS_ULLS; +uint32_t DrmPrelimHelper::getLongRunningContextCreateFlag() { + return PRELIM_I915_CONTEXT_CREATE_FLAGS_LONG_RUNNING; } uint32_t DrmPrelimHelper::getRunAloneContextParam() { diff --git a/shared/test/common/libult/linux/drm_mock_prelim_context.h b/shared/test/common/libult/linux/drm_mock_prelim_context.h index b1a06a53f5..edd8d5aa65 100644 --- a/shared/test/common/libult/linux/drm_mock_prelim_context.h +++ b/shared/test/common/libult/linux/drm_mock_prelim_context.h @@ -55,9 +55,10 @@ struct WaitUserFence { int64_t timeout{0}; }; -struct SyncFenceVmBindExt { +struct UserFenceVmBindExt { uint64_t addr; uint64_t val; + uint64_t rsvd; }; struct UuidVmBindExt { @@ -87,7 +88,7 @@ struct DrmMockPrelimContext { size_t vmBindCalled{0}; std::optional receivedVmBind{}; - std::optional receivedVmBindSyncFence{}; + std::optional receivedVmBindUserFence{}; std::optional receivedVmBindUuidExt[2]{}; std::optional receivedVmBindPatIndex{}; int vmBindReturn{0}; @@ -127,7 +128,7 @@ uint32_t getQueryComputeSlicesIoctl(); uint32_t getDistanceInfoQueryId(); uint32_t getComputeEngineClass(); uint32_t getStringUuidClass(); -uint32_t getULLSContextCreateFlag(); +uint32_t getLongRunningContextCreateFlag(); uint32_t getRunAloneContextParam(); uint32_t getAccContextParam(); uint32_t getAccContextParamSize(); diff --git a/shared/test/unit_test/os_interface/linux/drm_query_prelim_tests.cpp b/shared/test/unit_test/os_interface/linux/drm_query_prelim_tests.cpp index 73a67c1ec0..4840fa978e 100644 --- a/shared/test/unit_test/os_interface/linux/drm_query_prelim_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/drm_query_prelim_tests.cpp @@ -31,7 +31,7 @@ TEST(DrmQueryTest, givenDirectSubmissionActiveWhenCreateDrmContextThenProperFlag drm.createDrmContext(0, true, false); - EXPECT_TRUE(drm.receivedContextCreateFlags & DrmPrelimHelper::getULLSContextCreateFlag()); + EXPECT_TRUE(drm.receivedContextCreateFlags & DrmPrelimHelper::getLongRunningContextCreateFlag()); } TEST(DrmQueryTest, givenDirectSubmissionDisabledAndDirectSubmissionDrmContextSetWhenCreateDrmContextThenProperFlagIsSet) { @@ -44,7 +44,7 @@ TEST(DrmQueryTest, givenDirectSubmissionDisabledAndDirectSubmissionDrmContextSet drm.createDrmContext(0, false, false); - EXPECT_TRUE(drm.receivedContextCreateFlags & DrmPrelimHelper::getULLSContextCreateFlag()); + EXPECT_TRUE(drm.receivedContextCreateFlags & DrmPrelimHelper::getLongRunningContextCreateFlag()); } TEST(DrmQueryTest, givenDirectSubmissionActiveAndDirectSubmissionDrmContextSetZeroWhenCreateDrmContextThenProperFlagIsNotSet) { @@ -57,7 +57,7 @@ TEST(DrmQueryTest, givenDirectSubmissionActiveAndDirectSubmissionDrmContextSetZe drm.createDrmContext(0, true, false); - EXPECT_FALSE(drm.receivedContextCreateFlags & DrmPrelimHelper::getULLSContextCreateFlag()); + EXPECT_FALSE(drm.receivedContextCreateFlags & DrmPrelimHelper::getLongRunningContextCreateFlag()); } TEST(DrmQueryTest, givenCooperativeEngineWhenCreateDrmContextThenRunAloneContextIsRequested) { diff --git a/shared/test/unit_test/os_interface/linux/drm_vm_bind_prelim_tests.cpp b/shared/test/unit_test/os_interface/linux/drm_vm_bind_prelim_tests.cpp index ee02e4dc1d..4473fcb9f5 100644 --- a/shared/test/unit_test/os_interface/linux/drm_vm_bind_prelim_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/drm_vm_bind_prelim_tests.cpp @@ -51,9 +51,9 @@ TEST(DrmVmBindTest, givenBoRequiringExplicitResidencyWhenBindingThenMakeResident if (requireResidency) { EXPECT_EQ(DrmPrelimHelper::getImmediateVmBindFlag() | DrmPrelimHelper::getMakeResidentVmBindFlag(), drm.context.receivedVmBind->flags); - ASSERT_TRUE(drm.context.receivedVmBindSyncFence); - EXPECT_EQ(castToUint64(drm.getFenceAddr(vmHandleId)), drm.context.receivedVmBindSyncFence->addr); - EXPECT_EQ(drm.fenceVal[vmHandleId], drm.context.receivedVmBindSyncFence->val); + ASSERT_TRUE(drm.context.receivedVmBindUserFence); + EXPECT_EQ(castToUint64(drm.getFenceAddr(vmHandleId)), drm.context.receivedVmBindUserFence->addr); + EXPECT_EQ(drm.fenceVal[vmHandleId], drm.context.receivedVmBindUserFence->val); } else { EXPECT_EQ(DrmPrelimHelper::getImmediateVmBindFlag(), drm.context.receivedVmBind->flags); } diff --git a/shared/test/unit_test/os_interface/linux/ioctl_helper_tests_prelim.cpp b/shared/test/unit_test/os_interface/linux/ioctl_helper_tests_prelim.cpp index 256543b090..91df80f967 100644 --- a/shared/test/unit_test/os_interface/linux/ioctl_helper_tests_prelim.cpp +++ b/shared/test/unit_test/os_interface/linux/ioctl_helper_tests_prelim.cpp @@ -162,7 +162,7 @@ TEST_F(IoctlPrelimHelperTests, givenPrelimsWhenGetHwConfigIoctlValThenCorrectVal } TEST_F(IoctlPrelimHelperTests, givenPrelimsWhenGetDirectSubmissionFlagThenCorrectValueReturned) { - EXPECT_EQ(PRELIM_I915_CONTEXT_CREATE_FLAGS_ULLS, ioctlHelper.getDirectSubmissionFlag()); + EXPECT_EQ(PRELIM_I915_CONTEXT_CREATE_FLAGS_LONG_RUNNING, ioctlHelper.getDirectSubmissionFlag()); } TEST_F(IoctlPrelimHelperTests, givenPrelimsWhenGetMemRegionsIoctlValThenCorrectValueReturned) { @@ -197,8 +197,8 @@ TEST_F(IoctlPrelimHelperTests, whenCreateVmBindSetPatThenValidPointerIsReturned) EXPECT_NE(nullptr, ioctlHelper.createVmBindExtSetPat()); } -TEST_F(IoctlPrelimHelperTests, whenCreateVmBindSyncFenceThenValidPointerIsReturned) { - EXPECT_NE(nullptr, ioctlHelper.createVmBindExtSyncFence()); +TEST_F(IoctlPrelimHelperTests, whenCreateVmBindUserFenceThenValidPointerIsReturned) { + EXPECT_NE(nullptr, ioctlHelper.createVmBindExtUserFence()); } TEST_F(IoctlPrelimHelperTests, givenNullptrWhenFillVmBindSetPatThenUnrecoverableIsThrown) { @@ -206,9 +206,9 @@ TEST_F(IoctlPrelimHelperTests, givenNullptrWhenFillVmBindSetPatThenUnrecoverable EXPECT_THROW(ioctlHelper.fillVmBindExtSetPat(vmBindExtSetPat, 0u, 0u), std::runtime_error); } -TEST_F(IoctlPrelimHelperTests, givenNullptrWhenFillVmBindSyncFenceThenUnrecoverableIsThrown) { - std::unique_ptr vmBindExtSyncFence{}; - EXPECT_THROW(ioctlHelper.fillVmBindExtSyncFence(vmBindExtSyncFence, 0u, 0u, 0u), std::runtime_error); +TEST_F(IoctlPrelimHelperTests, givenNullptrWhenFillVmBindUserFenceThenUnrecoverableIsThrown) { + std::unique_ptr vmBindExtUserFence{}; + EXPECT_THROW(ioctlHelper.fillVmBindExtUserFence(vmBindExtUserFence, 0u, 0u, 0u), std::runtime_error); } TEST_F(IoctlPrelimHelperTests, givenValidInputWhenFillVmBindSetPatThenProperValuesAreSet) { @@ -226,21 +226,23 @@ TEST_F(IoctlPrelimHelperTests, givenValidInputWhenFillVmBindSetPatThenProperValu vmBindExtSetPat.release(); } -TEST_F(IoctlPrelimHelperTests, givenValidInputWhenFillVmBindSyncFenceThenProperValuesAreSet) { - std::unique_ptr vmBindExtSyncFence{}; - prelim_drm_i915_vm_bind_ext_sync_fence prelimVmBindExtSyncFence{}; - vmBindExtSyncFence.reset(reinterpret_cast(&prelimVmBindExtSyncFence)); +TEST_F(IoctlPrelimHelperTests, givenValidInputWhenFillVmBindUserFenceThenProperValuesAreSet) { + std::unique_ptr vmBindExtUserFence{}; + prelim_drm_i915_vm_bind_ext_user_fence prelimVmBindExtUserFence{}; + vmBindExtUserFence.reset(reinterpret_cast(&prelimVmBindExtUserFence)); uint64_t expectedAddress = 0xdead; uint64_t expectedValue = 0xc0de; uint64_t expectedNextExtension = 1234; - ioctlHelper.fillVmBindExtSyncFence(vmBindExtSyncFence, expectedAddress, expectedValue, expectedNextExtension); - EXPECT_EQ(static_cast(PRELIM_I915_VM_BIND_EXT_SYNC_FENCE), prelimVmBindExtSyncFence.base.name); - EXPECT_EQ(expectedAddress, prelimVmBindExtSyncFence.addr); - EXPECT_EQ(expectedValue, prelimVmBindExtSyncFence.val); - EXPECT_EQ(expectedNextExtension, prelimVmBindExtSyncFence.base.next_extension); + uint64_t expectedSize = sizeof(prelimVmBindExtUserFence.base) + sizeof(uint64_t) * 3; + ioctlHelper.fillVmBindExtUserFence(vmBindExtUserFence, expectedAddress, expectedValue, expectedNextExtension); + EXPECT_EQ(static_cast(PRELIM_I915_VM_BIND_EXT_USER_FENCE), prelimVmBindExtUserFence.base.name); + EXPECT_EQ(expectedAddress, prelimVmBindExtUserFence.addr); + EXPECT_EQ(expectedValue, prelimVmBindExtUserFence.val); + EXPECT_EQ(expectedNextExtension, prelimVmBindExtUserFence.base.next_extension); + EXPECT_EQ(expectedSize, sizeof(prelimVmBindExtUserFence)); - vmBindExtSyncFence.release(); + vmBindExtUserFence.release(); } TEST_F(IoctlPrelimHelperTests, givenPrelimWhenGettingEuStallPropertiesThenCorrectPropertiesAreReturned) { diff --git a/shared/test/unit_test/os_interface/linux/ioctl_helper_tests_upstream.cpp b/shared/test/unit_test/os_interface/linux/ioctl_helper_tests_upstream.cpp index af64427dd5..15a0d61b7e 100644 --- a/shared/test/unit_test/os_interface/linux/ioctl_helper_tests_upstream.cpp +++ b/shared/test/unit_test/os_interface/linux/ioctl_helper_tests_upstream.cpp @@ -289,9 +289,9 @@ TEST(IoctlHelperTestsUpstream, whenCreateVmBindSetPatThenNullptrIsReturned) { EXPECT_EQ(nullptr, ioctlHelper.createVmBindExtSetPat()); } -TEST(IoctlHelperTestsUpstream, whenCreateVmBindSyncFenceThenNullptrIsReturned) { +TEST(IoctlHelperTestsUpstream, whenCreateVmBindUserFenceThenNullptrIsReturned) { IoctlHelperUpstream ioctlHelper{}; - EXPECT_EQ(nullptr, ioctlHelper.createVmBindExtSyncFence()); + EXPECT_EQ(nullptr, ioctlHelper.createVmBindExtUserFence()); } TEST(IoctlHelperTestsUpstream, givenNullptrWhenFillVmBindSetPatThenNothingThrows) { @@ -300,10 +300,10 @@ TEST(IoctlHelperTestsUpstream, givenNullptrWhenFillVmBindSetPatThenNothingThrows EXPECT_NO_THROW(ioctlHelper.fillVmBindExtSetPat(vmBindExtSetPat, 0u, 0u)); } -TEST(IoctlHelperTestsUpstream, givenNullptrWhenFillVmBindSyncFenceThenNothingThrows) { +TEST(IoctlHelperTestsUpstream, givenNullptrWhenFillVmBindUserFenceThenNothingThrows) { IoctlHelperUpstream ioctlHelper{}; - auto vmBindExtSyncFence = ioctlHelper.createVmBindExtSyncFence(); - EXPECT_NO_THROW(ioctlHelper.fillVmBindExtSyncFence(vmBindExtSyncFence, 0u, 0u, 0u)); + auto vmBindExtUserFence = ioctlHelper.createVmBindExtUserFence(); + EXPECT_NO_THROW(ioctlHelper.fillVmBindExtUserFence(vmBindExtUserFence, 0u, 0u, 0u)); } TEST(IoctlHelperTestsUpstream, whenVmBindIsCalledThenZeroIsReturned) {