fix: get timestamp frequency from default engine in xe path

Related-To: NEO-11111
Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
Mateusz Jablonski 2024-04-12 13:38:19 +00:00 committed by Compute-Runtime-Automation
parent d60d57b994
commit 27398c2b6f
4 changed files with 7 additions and 51 deletions

View File

@ -291,7 +291,6 @@ std::unique_ptr<MemoryInfo> IoctlHelperXe::createMemoryInfo() {
auto regionIndex = Math::log2(nearMemRegions);
UNRECOVERABLE_IF(!memoryRegionInstances[regionIndex]);
regionsContainer.push_back(createMemoryRegionFromXeMemRegion(*memoryRegionInstances[regionIndex]));
xeTimestampFrequency = xeGtListData->gt_list[i].reference_clock;
}
}
return std::make_unique<MemoryInfo>(regionsContainer, drm);
@ -335,11 +334,6 @@ bool IoctlHelperXe::setGpuCpuTimes(TimeStampData *pGpuCpuTime, OSTime *osTime) {
return ret == 0;
}
bool IoctlHelperXe::getTimestampFrequency(uint64_t &frequency) {
frequency = xeTimestampFrequency;
return frequency != 0;
}
void IoctlHelperXe::getTopologyData(size_t nTiles, std::vector<std::bitset<8>> *geomDss, std::vector<std::bitset<8>> *computeDss,
std::vector<std::bitset<8>> *euDss, DrmQueryTopologyData &topologyData, bool &isComputeDssEmpty) {
int subSliceCount = 0;
@ -899,10 +893,7 @@ int IoctlHelperXe::ioctl(DrmIoctl request, void *arg) {
ret = 0;
switch (getParam->param) {
case static_cast<int>(DrmParam::paramCsTimestampFrequency): {
uint64_t frequency = 0;
if (getTimestampFrequency(frequency)) {
*getParam->value = static_cast<int>(frequency);
}
*getParam->value = xeGtListData->gt_list[defaultEngine->gt_id].reference_clock;
} break;
default:
ret = -1;

View File

@ -109,8 +109,6 @@ class IoctlHelperXe : public IoctlHelper {
void getTopologyMap(size_t nTiles, std::vector<std::bitset<8>> *dssInfo, TopologyMap &topologyMap);
bool setGpuCpuTimes(TimeStampData *pGpuCpuTime, OSTime *osTime) override;
bool getTimestampFrequency(uint64_t &frequency);
void fillBindInfoForIpcHandle(uint32_t handle, size_t size) override;
bool getFdFromVmExport(uint32_t vmId, uint32_t flags, int32_t *fd) override;
bool isImmediateVmBindRequired() const override;
@ -164,7 +162,6 @@ class IoctlHelperXe : public IoctlHelper {
int maxExecQueuePriority = 0;
std::mutex xeLock;
std::vector<BindInfo> bindInfo;
uint32_t xeTimestampFrequency = 0;
std::vector<uint32_t> hwconfig;
std::vector<drm_xe_engine_class_instance> contextParamEngine;

View File

@ -532,6 +532,7 @@ TEST(IoctlHelperXeTest, whenCallingIoctlThenProperValueIsReturned) {
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]};
auto mockXeIoctlHelper = std::make_unique<MockIoctlHelperXe>(drm);
mockXeIoctlHelper->initialize();
drm.reset();
{
@ -674,10 +675,9 @@ TEST(IoctlHelperXeTest, whenCallingIoctlThenProperValueIsReturned) {
ret = mockXeIoctlHelper->ioctl(DrmIoctl::getparam, &test);
EXPECT_EQ(-1, ret);
test.param = static_cast<int>(DrmParam::paramCsTimestampFrequency);
mockXeIoctlHelper->xeTimestampFrequency = 1;
ret = mockXeIoctlHelper->ioctl(DrmIoctl::getparam, &test);
EXPECT_EQ(0, ret);
EXPECT_EQ(dstvalue, 1);
EXPECT_EQ(static_cast<uint32_t>(dstvalue), DrmMockXe::mockTimestampFrequency);
}
EXPECT_THROW(mockXeIoctlHelper->ioctl(DrmIoctl::gemContextCreateExt, NULL), std::runtime_error);
drm.reset();
@ -1599,37 +1599,6 @@ TEST(IoctlHelperXeTest, whenFillBindInfoForIpcHandleIsCalledThenBindInfoIsCorrec
EXPECT_EQ(bindInfo.size, size);
}
TEST(IoctlHelperXeTest, givenIoctlFailureWhenGetTimestampFrequencyIsCalledThenFalseIsReturned) {
DebugManagerStateRestore restorer;
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]};
auto xeIoctlHelper = std::make_unique<MockIoctlHelperXe>(drm);
auto engineInfo = xeIoctlHelper->createEngineInfo(false);
ASSERT_NE(nullptr, engineInfo);
drm.testMode(1, -1);
uint64_t frequency;
auto ret = xeIoctlHelper->getTimestampFrequency(frequency);
EXPECT_EQ(false, ret);
}
TEST(IoctlHelperXeTest, whenGetTimestampFrequencyIsCalledThenProperFrequencyIsSet) {
DebugManagerStateRestore restorer;
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]};
auto xeIoctlHelper = std::make_unique<MockIoctlHelperXe>(drm);
auto engineInfo = xeIoctlHelper->createEngineInfo(false);
ASSERT_NE(nullptr, engineInfo);
uint32_t expectedFrequency = 100;
xeIoctlHelper->xeTimestampFrequency = expectedFrequency;
uint64_t frequency = 0;
auto ret = xeIoctlHelper->getTimestampFrequency(frequency);
EXPECT_EQ(true, ret);
EXPECT_EQ(expectedFrequency, frequency);
}
TEST(IoctlHelperXeTest, givenIoctlFailureWhenSetGpuCpuTimesIsCalledThenFalseIsReturned) {
DebugManagerStateRestore restorer;
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();

View File

@ -45,7 +45,6 @@ struct MockIoctlHelperXe : IoctlHelperXe {
using IoctlHelperXe::xeGetengineClassName;
using IoctlHelperXe::xeGtListData;
using IoctlHelperXe::xeShowBindTable;
using IoctlHelperXe::xeTimestampFrequency;
};
inline constexpr int testValueVmId = 0x5764;
@ -108,7 +107,7 @@ class DrmMockXe : public DrmMockCustom {
0, // tile_id
0, // gt_id
{0}, // padding
12500000, // reference_clock
mockTimestampFrequency, // reference_clock
0b100, // native mem regions
0x011, // slow mem regions
};
@ -117,7 +116,7 @@ class DrmMockXe : public DrmMockCustom {
1, // tile_id
1, // gt_id
{0}, // padding
12500000, // reference_clock
mockTimestampFrequency, // reference_clock
0b001, // native mem regions
0x110, // slow mem regions
};
@ -126,7 +125,7 @@ class DrmMockXe : public DrmMockCustom {
0, // tile_id
0, // gt_id
{0}, // padding
12500000, // reference_clock
mockTimestampFrequency, // reference_clock
0b010, // native mem regions
0x101, // slow mem regions
};
@ -320,7 +319,7 @@ class DrmMockXe : public DrmMockCustom {
uint64_t queryConfig[6]{}; // 1 qword for num params and 1 qwords per param
static constexpr uint32_t mockExecQueueId = 1234;
static constexpr int32_t mockMaxExecQueuePriority = 3;
static constexpr uint32_t mockTimestampFrequency = 12500000;
static_assert(sizeof(drm_xe_engine) == 4 * sizeof(uint64_t), "");
uint64_t queryEngines[45]{}; // 1 qword for num engines and 4 qwords per engine
static_assert(sizeof(drm_xe_mem_region) == 11 * sizeof(uint64_t), "");