mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-07 21:27:04 +08:00
feature: add support for new vm bind flags based on upstream xe kernel
support for DRM_XE_VM_BIND_FLAG_IMMEDIATE and DRM_XE_VM_BIND_FLAG_READONLY Fixes: #717 Related-To: NEO-10958 Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
27c2359f23
commit
b488799e85
@@ -2178,3 +2178,83 @@ TEST(IoctlHelperXeTest, whenCheckingGpuHangThenBanPropertyIsQueried) {
|
||||
EXPECT_TRUE(drm->checkResetStatus(osContext));
|
||||
EXPECT_TRUE(osContext.isHangDetected());
|
||||
}
|
||||
|
||||
TEST(IoctlHelperXeVmBindTest, givenImmediateAndReadOnlyBindFlagsSupportedWhenGettingFlagsForVmBindThenCorrectFlagsAreReturned) {
|
||||
|
||||
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
|
||||
auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]);
|
||||
auto xeIoctlHelper = static_cast<MockIoctlHelperXe *>(drm->getIoctlHelper());
|
||||
xeIoctlHelper->initialize();
|
||||
|
||||
for (const auto &bindImmediateSupport : ::testing::Bool()) {
|
||||
for (const auto &bindReadOnlySupport : ::testing::Bool()) {
|
||||
xeIoctlHelper->supportedFeatures.flags.vmBindImmediate = bindImmediateSupport;
|
||||
xeIoctlHelper->supportedFeatures.flags.vmBindReadOnly = bindReadOnlySupport;
|
||||
|
||||
uint64_t expectedFlags = DRM_XE_VM_BIND_FLAG_DUMPABLE;
|
||||
|
||||
if (bindImmediateSupport) {
|
||||
expectedFlags |= DRM_XE_VM_BIND_FLAG_IMMEDIATE;
|
||||
}
|
||||
if (bindReadOnlySupport) {
|
||||
expectedFlags |= DRM_XE_VM_BIND_FLAG_READONLY;
|
||||
}
|
||||
|
||||
auto bindFlags = xeIoctlHelper->getFlagsForVmBind(true, true, false, false, true);
|
||||
|
||||
EXPECT_EQ(expectedFlags, bindFlags);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct DrmMockXeVmBind : public DrmMockXe {
|
||||
static auto create(RootDeviceEnvironment &rootDeviceEnvironment) {
|
||||
auto drm = std::unique_ptr<DrmMockXeVmBind>(new DrmMockXeVmBind{rootDeviceEnvironment});
|
||||
drm->initInstance();
|
||||
|
||||
return drm;
|
||||
}
|
||||
|
||||
int ioctl(DrmIoctl request, void *arg) override {
|
||||
switch (request) {
|
||||
case DrmIoctl::gemVmBind: {
|
||||
auto vmBindInput = static_cast<drm_xe_vm_bind *>(arg);
|
||||
|
||||
if ((vmBindInput->bind.flags & DRM_XE_VM_BIND_FLAG_IMMEDIATE) == DRM_XE_VM_BIND_FLAG_IMMEDIATE && !supportsBindImmediate) {
|
||||
return -EINVAL;
|
||||
}
|
||||
if ((vmBindInput->bind.flags & DRM_XE_VM_BIND_FLAG_READONLY) == DRM_XE_VM_BIND_FLAG_READONLY && !supportsBindReadOnly) {
|
||||
return -EINVAL;
|
||||
}
|
||||
return 0;
|
||||
} break;
|
||||
|
||||
default:
|
||||
return DrmMockXe::ioctl(request, arg);
|
||||
}
|
||||
};
|
||||
bool supportsBindImmediate = true;
|
||||
bool supportsBindReadOnly = true;
|
||||
|
||||
protected:
|
||||
// Don't call directly, use the create() function
|
||||
DrmMockXeVmBind(RootDeviceEnvironment &rootDeviceEnvironment) : DrmMockXe(rootDeviceEnvironment) {}
|
||||
};
|
||||
|
||||
TEST(IoctlHelperXeVmBindTest, whenInitializeIoctlHelperThenQueryBindFlagsSupport) {
|
||||
|
||||
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
|
||||
auto drm = DrmMockXeVmBind::create(*executionEnvironment->rootDeviceEnvironments[0]);
|
||||
|
||||
for (const auto &bindImmediateSupport : ::testing::Bool()) {
|
||||
for (const auto &bindReadOnlySupport : ::testing::Bool()) {
|
||||
|
||||
drm->supportsBindImmediate = bindImmediateSupport;
|
||||
drm->supportsBindReadOnly = bindReadOnlySupport;
|
||||
auto xeIoctlHelper = std::make_unique<MockIoctlHelperXe>(*drm);
|
||||
xeIoctlHelper->initialize();
|
||||
EXPECT_EQ(xeIoctlHelper->supportedFeatures.flags.vmBindImmediate, bindImmediateSupport);
|
||||
EXPECT_EQ(xeIoctlHelper->supportedFeatures.flags.vmBindReadOnly, bindReadOnlySupport);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user