fix: don't query vm bind support on i915 prelim for pre-Xe platforms

Related-To: HSD-18036843571
Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
Mateusz Jablonski 2024-02-09 10:34:56 +00:00 committed by Compute-Runtime-Automation
parent 71457b7f08
commit bb5f6d9660
8 changed files with 46 additions and 13 deletions

View File

@ -138,6 +138,10 @@ bool IoctlHelperPrelim20::getTopologyDataAndMap(const HardwareInfo &hwInfo, DrmQ
}
bool IoctlHelperPrelim20::isVmBindAvailable() {
const auto &productHelper = drm.getRootDeviceEnvironment().getHelper<ProductHelper>();
if (!productHelper.isNewResidencyModelSupported()) {
return false;
}
int vmBindSupported = 0;
GetParam getParam{};
getParam.param = PRELIM_I915_PARAM_HAS_VM_BIND;

View File

@ -108,6 +108,7 @@ class ProductHelper {
virtual bool allowCompression(const HardwareInfo &hwInfo) const = 0;
virtual LocalMemoryAccessMode getLocalMemoryAccessMode(const HardwareInfo &hwInfo) const = 0;
virtual bool isAllocationSizeAdjustmentRequired(const HardwareInfo &hwInfo) const = 0;
virtual bool isNewResidencyModelSupported() const = 0;
virtual bool isDirectSubmissionSupported(ReleaseHelper *releaseHelper) const = 0;
virtual bool isDirectSubmissionConstantCacheInvalidationNeeded(const HardwareInfo &hwInfo) const = 0;
virtual std::pair<bool, bool> isPipeControlPriorToNonPipelinedStateCommandsWARequired(const HardwareInfo &hwInfo, bool isRcs, const ReleaseHelper *releaseHelper) const = 0;

View File

@ -40,6 +40,11 @@ bool ProductHelperHw<gfxProduct>::isBlitterFullySupported(const HardwareInfo &hw
return false;
}
template <PRODUCT_FAMILY gfxProduct>
bool ProductHelperHw<gfxProduct>::isNewResidencyModelSupported() const {
return false;
}
template <PRODUCT_FAMILY gfxProduct>
bool ProductHelperHw<gfxProduct>::heapInLocalMem(const HardwareInfo &hwInfo) const {
return false;

View File

@ -55,6 +55,7 @@ class ProductHelperHw : public ProductHelper {
bool allowCompression(const HardwareInfo &hwInfo) const override;
LocalMemoryAccessMode getLocalMemoryAccessMode(const HardwareInfo &hwInfo) const override;
bool isAllocationSizeAdjustmentRequired(const HardwareInfo &hwInfo) const override;
bool isNewResidencyModelSupported() const override;
bool isDirectSubmissionSupported(ReleaseHelper *releaseHelper) const override;
bool isDirectSubmissionConstantCacheInvalidationNeeded(const HardwareInfo &hwInfo) const override;
std::pair<bool, bool> isPipeControlPriorToNonPipelinedStateCommandsWARequired(const HardwareInfo &hwInfo, bool isRcs, const ReleaseHelper *releaseHelper) const override;

View File

@ -49,6 +49,11 @@ bool ProductHelperHw<gfxProduct>::isBlitterFullySupported(const HardwareInfo &hw
return hwInfo.capabilityTable.blitterOperationsSupported;
}
template <PRODUCT_FAMILY gfxProduct>
bool ProductHelperHw<gfxProduct>::isNewResidencyModelSupported() const {
return true;
}
template <PRODUCT_FAMILY gfxProduct>
void ProductHelperHw<gfxProduct>::setCapabilityCoherencyFlag(const HardwareInfo &hwInfo, bool &coherencyFlag) {
coherencyFlag = false;

View File

@ -203,6 +203,11 @@ bool ProductHelperHw<IGFX_UNKNOWN>::isAllocationSizeAdjustmentRequired(const Har
return false;
}
template <>
bool ProductHelperHw<IGFX_UNKNOWN>::isNewResidencyModelSupported() const {
return false;
}
template <>
std::pair<bool, bool> ProductHelperHw<IGFX_UNKNOWN>::isPipeControlPriorToNonPipelinedStateCommandsWARequired(const HardwareInfo &hwInfo, bool isRcs, const ReleaseHelper *releaseHelper) const {
return {false, false};

View File

@ -1324,7 +1324,9 @@ TEST_F(DrmMemoryOperationsHandlerBindTest, givenClosEnabledAndAllocationToBeCach
memoryManager->freeGraphicsMemory(allocation);
}
TEST(DrmResidencyHandlerTests, givenClosIndexAndMemoryTypeWhenAskingForPatIndexThenReturnCorrectValue) {
using DrmResidencyHandlerTests = ::testing::Test;
HWTEST2_F(DrmResidencyHandlerTests, givenClosIndexAndMemoryTypeWhenAskingForPatIndexThenReturnCorrectValue, IsWithinXeGfxFamily) {
MockExecutionEnvironment mockExecutionEnvironment{};
auto &gfxCoreHelper = mockExecutionEnvironment.rootDeviceEnvironments[0]->getHelper<GfxCoreHelper>();
@ -1349,7 +1351,7 @@ TEST(DrmResidencyHandlerTests, givenClosIndexAndMemoryTypeWhenAskingForPatIndexT
}
}
TEST(DrmResidencyHandlerTests, givenForceAllResourcesUnchashedSetAskingForPatIndexThenReturnCorrectValue) {
HWTEST2_F(DrmResidencyHandlerTests, givenForceAllResourcesUnchashedSetAskingForPatIndexThenReturnCorrectValue, IsWithinXeGfxFamily) {
DebugManagerStateRestore restorer;
debugManager.flags.ForceAllResourcesUncached.set(1);
@ -1377,7 +1379,7 @@ TEST(DrmResidencyHandlerTests, givenForceAllResourcesUnchashedSetAskingForPatInd
}
}
TEST(DrmResidencyHandlerTests, givenSupportedVmBindAndDebugFlagUseVmBindWhenQueryingIsVmBindAvailableThenBindAvailableIsInitializedOnce) {
HWTEST2_F(DrmResidencyHandlerTests, givenSupportedVmBindAndDebugFlagUseVmBindWhenQueryingIsVmBindAvailableThenBindAvailableIsInitializedOnce, IsWithinXeGfxFamily) {
DebugManagerStateRestore restorer;
debugManager.flags.UseVmBind.set(1);
@ -1395,7 +1397,7 @@ TEST(DrmResidencyHandlerTests, givenSupportedVmBindAndDebugFlagUseVmBindWhenQuer
EXPECT_EQ(1u, drm.context.vmBindQueryCalled);
}
TEST(DrmResidencyHandlerTests, givenDebugFlagUseVmBindWhenQueryingIsVmBindAvailableThenSupportIsOverriden) {
HWTEST2_F(DrmResidencyHandlerTests, givenDebugFlagUseVmBindWhenQueryingIsVmBindAvailableThenSupportIsOverriden, IsWithinXeGfxFamily) {
DebugManagerStateRestore restorer;
debugManager.flags.UseVmBind.set(1);
@ -1417,7 +1419,7 @@ namespace NEO {
extern bool disableBindDefaultInTests;
}
TEST(DrmResidencyHandlerTests, givenDebugFlagUseVmBindSetDefaultAndBindAvailableInDrmWhenQueryingIsVmBindAvailableThenBindIsAvailable) {
HWTEST2_F(DrmResidencyHandlerTests, givenDebugFlagUseVmBindSetDefaultAndBindAvailableInDrmWhenQueryingIsVmBindAvailableThenBindIsAvailableWhenSupported, IsWithinXeGfxFamily) {
DebugManagerStateRestore restorer;
debugManager.flags.UseVmBind.set(-1);
VariableBackup<bool> disableBindBackup(&disableBindDefaultInTests, false);
@ -1427,13 +1429,15 @@ TEST(DrmResidencyHandlerTests, givenDebugFlagUseVmBindSetDefaultAndBindAvailable
drm.context.vmBindQueryValue = 1;
drm.context.vmBindQueryReturn = 0;
EXPECT_FALSE(drm.bindAvailable);
auto &productHelper = drm.getRootDeviceEnvironment().getHelper<ProductHelper>();
EXPECT_EQ(0u, drm.context.vmBindQueryCalled);
EXPECT_TRUE(drm.isVmBindAvailable());
EXPECT_EQ(drm.isVmBindAvailable(), productHelper.isNewResidencyModelSupported());
EXPECT_EQ(drm.bindAvailable, productHelper.isNewResidencyModelSupported());
EXPECT_EQ(1u, drm.context.vmBindQueryCalled);
}
TEST(DrmResidencyHandlerTests, givenDebugFlagUseVmBindSetDefaultWhenQueryingIsVmBindAvailableFailedThenBindIsNot) {
HWTEST2_F(DrmResidencyHandlerTests, givenDebugFlagUseVmBindSetDefaultWhenQueryingIsVmBindAvailableFailedThenBindIsNot, IsWithinXeGfxFamily) {
DebugManagerStateRestore restorer;
debugManager.flags.UseVmBind.set(-1);
VariableBackup<bool> disableBindBackup(&disableBindDefaultInTests, false);
@ -1450,7 +1454,7 @@ TEST(DrmResidencyHandlerTests, givenDebugFlagUseVmBindSetDefaultWhenQueryingIsVm
EXPECT_EQ(1u, drm.context.vmBindQueryCalled);
}
TEST(DrmResidencyHandlerTests, givenDebugFlagUseVmBindSetDefaultWhenQueryingIsVmBindAvailableSuccedAndReportNoBindAvailableInDrmThenBindIsNotAvailable) {
HWTEST2_F(DrmResidencyHandlerTests, givenDebugFlagUseVmBindSetDefaultWhenQueryingIsVmBindAvailableSuccedAndReportNoBindAvailableInDrmThenBindIsNotAvailable, IsWithinXeGfxFamily) {
DebugManagerStateRestore restorer;
debugManager.flags.UseVmBind.set(-1);
VariableBackup<bool> disableBindBackup(&disableBindDefaultInTests, false);
@ -1553,7 +1557,7 @@ TEST(DrmSetPairTests, whenQueryingForSetPairAvailableAndDebugKeyNotSetThenNoSupp
EXPECT_EQ(0u, drm.context.setPairQueryCalled);
}
TEST(DrmResidencyHandlerTests, whenQueryingForSetPairAvailableAndVmBindAvailableThenBothExpectedValueIsReturned) {
HWTEST2_F(DrmResidencyHandlerTests, whenQueryingForSetPairAvailableAndVmBindAvailableThenBothExpectedValueIsReturned, IsWithinXeGfxFamily) {
DebugManagerStateRestore restorer;
debugManager.flags.UseVmBind.set(-1);
debugManager.flags.EnableSetPair.set(1);
@ -1561,6 +1565,7 @@ TEST(DrmResidencyHandlerTests, whenQueryingForSetPairAvailableAndVmBindAvailable
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
DrmQueryMock drm{*executionEnvironment->rootDeviceEnvironments[0]};
auto &productHelper = drm.getRootDeviceEnvironment().getHelper<ProductHelper>();
drm.context.setPairQueryValue = 1;
drm.context.setPairQueryReturn = 0;
@ -1578,7 +1583,8 @@ TEST(DrmResidencyHandlerTests, whenQueryingForSetPairAvailableAndVmBindAvailable
EXPECT_EQ(1u, drm.context.setPairQueryCalled);
EXPECT_EQ(0u, drm.context.vmBindQueryCalled);
EXPECT_TRUE(drm.isVmBindAvailable());
EXPECT_EQ(drm.isVmBindAvailable(), productHelper.isNewResidencyModelSupported());
EXPECT_EQ(drm.bindAvailable, productHelper.isNewResidencyModelSupported());
EXPECT_EQ(1u, drm.context.vmBindQueryCalled);
}

View File

@ -83,6 +83,7 @@ TEST(IoctlHelperPrelimTest, whenGettingVmBindAvailabilityThenProperValueIsReturn
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
DrmQueryMock drm{*executionEnvironment->rootDeviceEnvironments[0]};
const auto &productHelper = executionEnvironment->rootDeviceEnvironments[0]->getProductHelper();
IoctlHelperPrelim20 ioctlHelper{drm};
for (auto &ioctlValue : {0, EINVAL}) {
@ -91,12 +92,17 @@ TEST(IoctlHelperPrelimTest, whenGettingVmBindAvailabilityThenProperValueIsReturn
drm.context.vmBindQueryValue = hasVmBind;
drm.context.vmBindQueryCalled = 0u;
if (ioctlValue == 0) {
EXPECT_EQ(hasVmBind, ioctlHelper.isVmBindAvailable());
if (productHelper.isNewResidencyModelSupported()) {
if (ioctlValue == 0) {
EXPECT_EQ(hasVmBind, ioctlHelper.isVmBindAvailable());
} else {
EXPECT_FALSE(ioctlHelper.isVmBindAvailable());
}
EXPECT_EQ(1u, drm.context.vmBindQueryCalled);
} else {
EXPECT_FALSE(ioctlHelper.isVmBindAvailable());
EXPECT_EQ(0u, drm.context.vmBindQueryCalled);
}
EXPECT_EQ(1u, drm.context.vmBindQueryCalled);
}
}
}