fix: Correct IoctlHelperXe logic to query PF support

Move logic in order to respect relevant checks before trying to query support.

Signed-off-by: Filip Hazubski <filip.hazubski@intel.com>
This commit is contained in:
Filip Hazubski
2025-05-21 17:51:30 +00:00
committed by Compute-Runtime-Automation
parent 0b46fb9f0d
commit 3e59a2f108
4 changed files with 28 additions and 78 deletions

View File

@@ -265,7 +265,6 @@ bool IoctlHelperXe::initialize() {
assignValue(tileIdToMediaGtId, gt.tile_id, gt.gt_id);
}
}
querySupportedFeatures();
return true;
}
@@ -1017,8 +1016,25 @@ int IoctlHelperXe::queryDistances(std::vector<QueryItem> &queryItems, std::vecto
}
bool IoctlHelperXe::isPageFaultSupported() {
xeLog(" -> IoctlHelperXe::%s %d\n", __FUNCTION__, false);
return false;
auto checkVmCreateFlagsSupport = [&](uint32_t flags) -> bool {
struct drm_xe_vm_create vmCreate = {};
vmCreate.flags = flags;
auto ret = IoctlHelper::ioctl(DrmIoctl::gemVmCreate, &vmCreate);
if (ret == 0) {
struct drm_xe_vm_destroy vmDestroy = {};
vmDestroy.vm_id = vmCreate.vm_id;
ret = IoctlHelper::ioctl(DrmIoctl::gemVmDestroy, &vmDestroy);
DEBUG_BREAK_IF(ret != 0);
return true;
}
return false;
};
bool pageFaultSupport = checkVmCreateFlagsSupport(DRM_XE_VM_CREATE_FLAG_LR_MODE | DRM_XE_VM_CREATE_FLAG_FAULT_MODE);
xeLog(" -> IoctlHelperXe::%s %d\n", __FUNCTION__, pageFaultSupport);
return pageFaultSupport;
}
uint32_t IoctlHelperXe::getEuStallFdParameter() {
@@ -1864,22 +1880,4 @@ std::string IoctlHelperXe::getIoctlString(DrmIoctl ioctlRequest) const {
}
}
void IoctlHelperXe::querySupportedFeatures() {
auto checkVmCreateFlagsSupport = [&](uint32_t flags) -> bool {
struct drm_xe_vm_create vmCreate = {};
vmCreate.flags = flags;
auto ret = IoctlHelper::ioctl(DrmIoctl::gemVmCreate, &vmCreate);
if (ret == 0) {
struct drm_xe_vm_destroy vmDestroy = {};
vmDestroy.vm_id = vmCreate.vm_id;
ret = IoctlHelper::ioctl(DrmIoctl::gemVmDestroy, &vmDestroy);
DEBUG_BREAK_IF(ret != 0);
return true;
}
return false;
};
supportedFeatures.flags.pageFault = checkVmCreateFlagsSupport(DRM_XE_VM_CREATE_FLAG_LR_MODE | DRM_XE_VM_CREATE_FLAG_FAULT_MODE);
};
} // namespace NEO

View File

@@ -223,18 +223,6 @@ class IoctlHelperXe : public IoctlHelper {
uint32_t drmContextId;
};
struct SupportedFeatures {
union {
struct {
uint32_t pageFault : 1;
uint32_t reserved : 31;
} flags;
uint32_t allFlags = 0;
};
} supportedFeatures{};
static_assert(sizeof(SupportedFeatures::flags) == sizeof(SupportedFeatures::allFlags), "");
void querySupportedFeatures();
std::unique_ptr<EuDebugInterface> euDebugInterface;
};