Skip to content

Commit 611b847

Browse files
luluu9ifdu
authored andcommitted
fix: align NEO code to new uAPI header
Related-To: NEO-8324 Co-authored-by: Francois Dugast <[email protected]> Co-authored-by: Naklicki, Mateusz <[email protected]> Signed-off-by: Francois Dugast <[email protected]> Signed-off-by: Naklicki, Mateusz <[email protected]>
1 parent 239831f commit 611b847

File tree

4 files changed

+235
-202
lines changed

4 files changed

+235
-202
lines changed

shared/source/os_interface/linux/xe/ioctl_helper_xe.cpp

Lines changed: 18 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ std::unique_ptr<EngineInfo> IoctlHelperXe::createEngineInfo(bool isSysmanEnabled
269269
return std::make_unique<EngineInfo>(&drm, enginesPerTile);
270270
}
271271

272-
inline MemoryRegion createMemoryRegionFromXeMemRegion(const drm_xe_query_mem_region &xeMemRegion) {
272+
inline MemoryRegion createMemoryRegionFromXeMemRegion(const drm_xe_mem_region &xeMemRegion) {
273273
MemoryRegion memoryRegion{};
274274
memoryRegion.region.memoryInstance = xeMemRegion.instance;
275275
memoryRegion.region.memoryClass = xeMemRegion.mem_class;
@@ -290,10 +290,10 @@ std::unique_ptr<MemoryInfo> IoctlHelperXe::createMemoryInfo() {
290290
auto xeMemRegionsData = reinterpret_cast<drm_xe_query_mem_regions *>(memUsageData.data());
291291
auto xeGtListData = reinterpret_cast<drm_xe_query_gt_list *>(gtListData.data());
292292

293-
std::array<drm_xe_query_mem_region *, 64> memoryRegionInstances{};
293+
std::array<drm_xe_mem_region *, 64> memoryRegionInstances{};
294294

295-
for (auto i = 0u; i < xeMemRegionsData->num_regions; i++) {
296-
auto &region = xeMemRegionsData->regions[i];
295+
for (auto i = 0u; i < xeMemRegionsData->num_mem_regions; i++) {
296+
auto &region = xeMemRegionsData->mem_regions[i];
297297
memoryRegionInstances[region.instance] = &region;
298298
if (region.mem_class == DRM_XE_MEM_REGION_CLASS_SYSMEM) {
299299
regionsContainer.push_back(createMemoryRegionFromXeMemRegion(region));
@@ -310,7 +310,7 @@ std::unique_ptr<MemoryInfo> IoctlHelperXe::createMemoryInfo() {
310310
auto regionIndex = Math::log2(nearMemRegions);
311311
UNRECOVERABLE_IF(!memoryRegionInstances[regionIndex]);
312312
regionsContainer.push_back(createMemoryRegionFromXeMemRegion(*memoryRegionInstances[regionIndex]));
313-
xeTimestampFrequency = xeGtListData->gt_list[i].clock_freq;
313+
xeTimestampFrequency = xeGtListData->gt_list[i].reference_clock;
314314
}
315315
}
316316
return std::make_unique<MemoryInfo>(regionsContainer, drm);
@@ -355,31 +355,8 @@ bool IoctlHelperXe::setGpuCpuTimes(TimeStampData *pGpuCpuTime, OSTime *osTime) {
355355
}
356356

357357
bool IoctlHelperXe::getTimestampFrequency(uint64_t &frequency) {
358-
drm_xe_device_query deviceQuery = {};
359-
deviceQuery.query = DRM_XE_DEVICE_QUERY_ENGINE_CYCLES;
360-
361-
auto ret = IoctlHelper::ioctl(DrmIoctl::query, &deviceQuery);
362-
363-
if (ret != 0) {
364-
xeLog(" -> IoctlHelperXe::%s s=0x%lx r=%d\n", __FUNCTION__, deviceQuery.size, ret);
365-
return false;
366-
}
367-
368-
std::vector<uint8_t> retVal(deviceQuery.size);
369-
deviceQuery.data = castToUint64(retVal.data());
370-
371-
drm_xe_query_engine_cycles *queryEngineCycles = reinterpret_cast<drm_xe_query_engine_cycles *>(retVal.data());
372-
queryEngineCycles->clockid = CLOCK_MONOTONIC_RAW;
373-
queryEngineCycles->eci = *defaultEngine;
374-
375-
ret = IoctlHelper::ioctl(DrmIoctl::query, &deviceQuery);
376-
frequency = queryEngineCycles->engine_frequency;
377-
378-
xeLog(" -> IoctlHelperXe::%s [%d,%d] clockId=0x%x s=0x%lx frequency=0x%x r=%d\n", __FUNCTION__,
379-
queryEngineCycles->eci.engine_class, queryEngineCycles->eci.engine_instance,
380-
queryEngineCycles->clockid, deviceQuery.size, frequency, ret);
381-
382-
return ret == 0;
358+
frequency = xeTimestampFrequency;
359+
return frequency != 0;
383360
}
384361

385362
void IoctlHelperXe::getTopologyData(size_t nTiles, std::vector<std::bitset<8>> *geomDss, std::vector<std::bitset<8>> *computeDss,
@@ -561,15 +538,14 @@ int IoctlHelperXe::createGemExt(const MemRegionsVec &memClassInstances, size_t a
561538
for (const auto &memoryClassInstance : memClassInstances) {
562539
memoryInstances.set(memoryClassInstance.memoryInstance);
563540
}
564-
create.flags = static_cast<uint32_t>(memoryInstances.to_ulong());
541+
create.placement = static_cast<uint32_t>(memoryInstances.to_ulong());
565542
create.cpu_caching = this->getCpuCachingMode();
566-
567543
auto ret = IoctlHelper::ioctl(DrmIoctl::gemCreate, &create);
568544
handle = create.handle;
569545

570-
xeLog(" -> IoctlHelperXe::%s [%d,%d] vmid=0x%x s=0x%lx f=0x%x h=0x%x r=%d\n", __FUNCTION__,
546+
xeLog(" -> IoctlHelperXe::%s [%d,%d] vmid=0x%x s=0x%lx p=0x%x f=0x%x h=0x%x r=%d\n", __FUNCTION__,
571547
mem.memoryClass, mem.memoryInstance,
572-
create.vm_id, create.size, create.flags, handle, ret);
548+
create.vm_id, create.size, create.flags, create.placement, handle, ret);
573549
updateBindInfo(create.handle, 0u, create.size);
574550
return ret;
575551
}
@@ -595,7 +571,7 @@ uint32_t IoctlHelperXe::createGem(uint64_t size, uint32_t memoryBanks) {
595571
auto regionClassAndInstance = memoryInfo->getMemoryRegionClassAndInstance(memoryBanks, *pHwInfo);
596572
memoryInstances.set(regionClassAndInstance.memoryInstance);
597573
}
598-
create.flags = static_cast<uint32_t>(memoryInstances.to_ulong());
574+
create.placement = static_cast<uint32_t>(memoryInstances.to_ulong());
599575
create.cpu_caching = this->getCpuCachingMode();
600576
[[maybe_unused]] auto ret = ioctl(DrmIoctl::gemCreate, &create);
601577
DEBUG_BREAK_IF(ret != 0);
@@ -725,7 +701,8 @@ int IoctlHelperXe::execBuffer(ExecBuffer *execBuffer, uint64_t completionGpuAddr
725701
completionGpuAddress, counterValue, engine);
726702

727703
struct drm_xe_sync sync[1] = {};
728-
sync[0].flags = DRM_XE_SYNC_FLAG_USER_FENCE | DRM_XE_SYNC_FLAG_SIGNAL;
704+
sync[0].type = DRM_XE_SYNC_TYPE_USER_FENCE;
705+
sync[0].flags = DRM_XE_SYNC_FLAG_SIGNAL;
729706
sync[0].addr = completionGpuAddress;
730707
sync[0].timeline_value = counterValue;
731708
struct drm_xe_exec exec = {};
@@ -1079,15 +1056,15 @@ int IoctlHelperXe::ioctl(DrmIoctl request, void *arg) {
10791056
GemVmControl *d = static_cast<GemVmControl *>(arg);
10801057
struct drm_xe_vm_create args = {};
10811058
args.flags = DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT |
1082-
DRM_XE_VM_CREATE_FLAG_COMPUTE_MODE;
1059+
DRM_XE_VM_CREATE_FLAG_LR_MODE;
10831060
if (drm.hasPageFaultSupport()) {
10841061
args.flags |= DRM_XE_VM_CREATE_FLAG_FAULT_MODE;
10851062
}
10861063
ret = IoctlHelper::ioctl(request, &args);
10871064
d->vmId = ret ? 0 : args.vm_id;
10881065
d->flags = ret ? 0 : args.flags;
10891066
xeVmId = d->vmId;
1090-
xeLog(" -> IoctlHelperXe::ioctl GemVmCreate vmid=0x%x r=%d\n", d->vmId, ret);
1067+
xeLog(" -> IoctlHelperXe::ioctl gemVmCreate vmid=0x%x r=%d\n", d->vmId, ret);
10911068

10921069
} break;
10931070
case DrmIoctl::gemVmDestroy: {
@@ -1130,7 +1107,7 @@ int IoctlHelperXe::ioctl(DrmIoctl request, void *arg) {
11301107
case DrmIoctl::gemCreate: {
11311108
drm_xe_gem_create *gemCreate = static_cast<drm_xe_gem_create *>(arg);
11321109
ret = IoctlHelper::ioctl(request, arg);
1133-
xeLog(" -> IoctlHelperXe::ioctl GemCreate h=0x%x s=0x%llx f=0x%x r=%d\n",
1110+
xeLog(" -> IoctlHelperXe::ioctl GemCreate h=0x%x s=0x%lx p=0x%x f=0x%x r=%d\n",
11341111
gemCreate->handle, gemCreate->size, gemCreate->flags, ret);
11351112
} break;
11361113
default:
@@ -1249,7 +1226,8 @@ int IoctlHelperXe::xeVmBind(const VmBindParams &vmBindParams, bool isBind) {
12491226
if (index != invalidIndex) {
12501227

12511228
drm_xe_sync sync[1] = {};
1252-
sync[0].flags = DRM_XE_SYNC_FLAG_USER_FENCE | DRM_XE_SYNC_FLAG_SIGNAL;
1229+
sync[0].type = DRM_XE_SYNC_TYPE_USER_FENCE;
1230+
sync[0].flags = DRM_XE_SYNC_FLAG_SIGNAL;
12531231
auto xeBindExtUserFence = reinterpret_cast<UserFenceExtension *>(vmBindParams.extensions);
12541232
UNRECOVERABLE_IF(!xeBindExtUserFence);
12551233
UNRECOVERABLE_IF(xeBindExtUserFence->tag != UserFenceExtension::tagValue);

shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_tests.cpp

Lines changed: 40 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,9 @@ TEST(IoctlHelperXeTest, givenIoctlHelperXeWhenCallGemCreateAndNoLocalMemoryThenP
108108
EXPECT_FALSE(xeIoctlHelper->bindInfo.empty());
109109

110110
EXPECT_EQ(size, drm.createParamsSize);
111-
EXPECT_EQ(1u, drm.createParamsFlags);
111+
EXPECT_EQ(0u, drm.createParamsFlags);
112112
EXPECT_EQ(DRM_XE_GEM_CPU_CACHING_WC, drm.createParamsCpuCaching);
113+
EXPECT_EQ(1u, drm.createParamsPlacement);
113114

114115
// dummy mock handle
115116
EXPECT_EQ(handle, drm.createParamsHandle);
@@ -136,8 +137,9 @@ TEST(IoctlHelperXeTest, givenIoctlHelperXeWhenCallGemCreateWhenMemoryBanksZeroTh
136137
EXPECT_FALSE(xeIoctlHelper->bindInfo.empty());
137138

138139
EXPECT_EQ(size, drm.createParamsSize);
139-
EXPECT_EQ(1u, drm.createParamsFlags);
140140
EXPECT_EQ(DRM_XE_GEM_CPU_CACHING_WC, drm.createParamsCpuCaching);
141+
EXPECT_EQ(0u, drm.createParamsFlags);
142+
EXPECT_EQ(1u, drm.createParamsPlacement);
141143

142144
// dummy mock handle
143145
EXPECT_EQ(handle, drm.createParamsHandle);
@@ -164,8 +166,9 @@ TEST(IoctlHelperXeTest, givenIoctlHelperXeWhenCallGemCreateAndLocalMemoryThenPro
164166
EXPECT_FALSE(xeIoctlHelper->bindInfo.empty());
165167

166168
EXPECT_EQ(size, drm.createParamsSize);
167-
EXPECT_EQ(6u, drm.createParamsFlags);
168169
EXPECT_EQ(DRM_XE_GEM_CPU_CACHING_WC, drm.createParamsCpuCaching);
170+
EXPECT_EQ(0u, drm.createParamsFlags);
171+
EXPECT_EQ(6u, drm.createParamsPlacement);
169172

170173
// dummy mock handle
171174
EXPECT_EQ(handle, drm.createParamsHandle);
@@ -541,15 +544,15 @@ TEST(IoctlHelperXeTest, whenCallingIoctlThenProperValueIsReturned) {
541544
GemVmControl test = {};
542545
drm.pageFaultSupported = false;
543546
uint32_t expectedVmCreateFlags = DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT |
544-
DRM_XE_VM_CREATE_FLAG_COMPUTE_MODE;
547+
DRM_XE_VM_CREATE_FLAG_LR_MODE;
545548
ret = mockXeIoctlHelper->ioctl(DrmIoctl::gemVmCreate, &test);
546549
EXPECT_EQ(0, ret);
547550
EXPECT_EQ(static_cast<int>(test.vmId), testValueVmId);
548551
EXPECT_EQ(test.flags, expectedVmCreateFlags);
549552

550553
drm.pageFaultSupported = true;
551554
expectedVmCreateFlags = DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT |
552-
DRM_XE_VM_CREATE_FLAG_COMPUTE_MODE |
555+
DRM_XE_VM_CREATE_FLAG_LR_MODE |
553556
DRM_XE_VM_CREATE_FLAG_FAULT_MODE;
554557
ret = mockXeIoctlHelper->ioctl(DrmIoctl::gemVmCreate, &test);
555558
EXPECT_EQ(0, ret);
@@ -586,7 +589,8 @@ TEST(IoctlHelperXeTest, whenCallingIoctlThenProperValueIsReturned) {
586589
{
587590
drm_xe_gem_create test = {};
588591
test.handle = 0;
589-
test.flags = 1;
592+
test.placement = 1;
593+
test.flags = 0;
590594
test.size = 123;
591595
test.cpu_caching = DRM_XE_GEM_CPU_CACHING_WC;
592596
ret = mockXeIoctlHelper->ioctl(DrmIoctl::gemCreate, &test);
@@ -671,9 +675,10 @@ TEST(IoctlHelperXeTest, whenCallingIoctlThenProperValueIsReturned) {
671675
EXPECT_EQ(0, ret);
672676
EXPECT_EQ(static_cast<unsigned int>(dstvalue), 0x80000037);
673677
test.param = static_cast<int>(DrmParam::paramCsTimestampFrequency);
678+
mockXeIoctlHelper->xeTimestampFrequency = 1;
674679
ret = mockXeIoctlHelper->ioctl(DrmIoctl::getparam, &test);
675680
EXPECT_EQ(0, ret);
676-
EXPECT_EQ(dstvalue, 0);
681+
EXPECT_EQ(dstvalue, 1);
677682
}
678683
EXPECT_THROW(mockXeIoctlHelper->ioctl(DrmIoctl::gemContextCreateExt, NULL), std::runtime_error);
679684
drm.reset();
@@ -787,8 +792,10 @@ TEST(IoctlHelperXeTest, givenOnlyMediaTypeWhenGetTopologyDataAndMapThenSubsliceI
787792
xeQueryGtList->num_gt = 1;
788793
xeQueryGtList->gt_list[0] = {
789794
DRM_XE_QUERY_GT_TYPE_MEDIA, // type
795+
0, // tile_id
790796
0, // gt_id
791-
12500000, // clock freq
797+
{0}, // padding
798+
12500000, // reference_clock
792799
0b100, // native mem regions
793800
0x011, // slow mem regions
794801
};
@@ -832,29 +839,37 @@ TEST(IoctlHelperXeTest, givenMainAndMediaTypesWhenGetTopologyDataAndMapThenResul
832839
xeQueryGtList->num_gt = 4;
833840
xeQueryGtList->gt_list[0] = {
834841
DRM_XE_QUERY_GT_TYPE_MAIN, // type
842+
0, // tile_id
835843
0, // gt_id
836-
12500000, // clock freq
844+
{0}, // padding
845+
12500000, // reference_clock
837846
0b100, // native mem regions
838847
0x011, // slow mem regions
839848
};
840849
xeQueryGtList->gt_list[1] = {
841850
DRM_XE_QUERY_GT_TYPE_MEDIA, // type
851+
0, // tile_id
842852
0, // gt_id
843-
12500000, // clock freq
853+
{0}, // padding
854+
12500000, // reference_clock
844855
0b100, // native mem regions
845856
0x011, // slow mem regions
846857
};
847858
xeQueryGtList->gt_list[2] = {
848859
DRM_XE_QUERY_GT_TYPE_MAIN, // type
860+
0, // tile_id
849861
0, // gt_id
850-
12500000, // clock freq
862+
{0}, // padding
863+
12500000, // reference_clock
851864
0b010, // native mem regions
852865
0x101, // slow mem regions
853866
};
854867
xeQueryGtList->gt_list[3] = {
855868
DRM_XE_QUERY_GT_TYPE_MEDIA, // type
869+
0, // tile_id
856870
0, // gt_id
857-
12500000, // clock freq
871+
{0}, // padding
872+
12500000, // reference_clock
858873
0b001, // native mem regions
859874
0x100, // slow mem regions
860875
};
@@ -893,27 +908,24 @@ TEST(IoctlHelperXeTest, givenMainAndMediaTypesWhenGetTopologyDataAndMapThenResul
893908
struct DrmMockXe2T : public DrmMockXe {
894909
DrmMockXe2T(RootDeviceEnvironment &rootDeviceEnvironment) : DrmMockXe(rootDeviceEnvironment) {
895910
auto xeQueryMemUsage = reinterpret_cast<drm_xe_query_mem_regions *>(queryMemUsage);
896-
xeQueryMemUsage->num_regions = 3;
897-
xeQueryMemUsage->regions[0] = {
911+
xeQueryMemUsage->num_mem_regions = 3;
912+
xeQueryMemUsage->mem_regions[0] = {
898913
DRM_XE_MEM_REGION_CLASS_VRAM, // class
899914
1, // instance
900-
0, // padding
901915
MemoryConstants::pageSize, // min page size
902916
2 * MemoryConstants::gigaByte, // total size
903917
MemoryConstants::megaByte // used size
904918
};
905-
xeQueryMemUsage->regions[1] = {
919+
xeQueryMemUsage->mem_regions[1] = {
906920
DRM_XE_MEM_REGION_CLASS_SYSMEM, // class
907921
0, // instance
908-
0, // padding
909922
MemoryConstants::pageSize, // min page size
910923
MemoryConstants::gigaByte, // total size
911924
MemoryConstants::kiloByte // used size
912925
};
913-
xeQueryMemUsage->regions[2] = {
926+
xeQueryMemUsage->mem_regions[2] = {
914927
DRM_XE_MEM_REGION_CLASS_VRAM, // class
915928
2, // instance
916-
0, // padding
917929
MemoryConstants::pageSize, // min page size
918930
4 * MemoryConstants::gigaByte, // total size
919931
MemoryConstants::gigaByte // used size
@@ -923,15 +935,19 @@ struct DrmMockXe2T : public DrmMockXe {
923935
xeQueryGtList->num_gt = 2;
924936
xeQueryGtList->gt_list[0] = {
925937
DRM_XE_QUERY_GT_TYPE_MAIN, // type
938+
0, // tile_id
926939
0, // gt_id
927-
12500000, // clock freq
940+
{0}, // padding
941+
12500000, // reference_clock
928942
0b100, // native mem regions
929943
0x011, // slow mem regions
930944
};
931945
xeQueryGtList->gt_list[1] = {
932946
DRM_XE_QUERY_GT_TYPE_MAIN, // type
947+
0, // tile_id
933948
0, // gt_id
934-
12500000, // clock freq
949+
{0}, // padding
950+
12500000, // reference_clock
935951
0b010, // native mem regions
936952
0x101, // slow mem regions
937953
};
@@ -1311,7 +1327,7 @@ TEST(IoctlHelperXeTest, givenNoMemoryRegionsWhenCreatingMemoryInfoThenMemoryInfo
13111327
auto xeIoctlHelper = std::make_unique<MockIoctlHelperXe>(drm);
13121328

13131329
auto xeQueryMemUsage = reinterpret_cast<drm_xe_query_mem_regions *>(drm.queryMemUsage);
1314-
xeQueryMemUsage->num_regions = 0u;
1330+
xeQueryMemUsage->num_mem_regions = 0u;
13151331
auto memoryInfo = xeIoctlHelper->createMemoryInfo();
13161332
EXPECT_EQ(nullptr, memoryInfo);
13171333
}
@@ -1572,9 +1588,8 @@ TEST(IoctlHelperXeTest, whenGetTimestampFrequencyIsCalledThenProperFrequencyIsSe
15721588
auto engineInfo = xeIoctlHelper->createEngineInfo(false);
15731589
ASSERT_NE(nullptr, engineInfo);
15741590

1575-
uint64_t expectedFrequency = 100;
1576-
auto xeQueryEngineCycles = reinterpret_cast<drm_xe_query_engine_cycles *>(drm.queryEngineCycles);
1577-
xeQueryEngineCycles->engine_frequency = expectedFrequency;
1591+
uint32_t expectedFrequency = 100;
1592+
xeIoctlHelper->xeTimestampFrequency = expectedFrequency;
15781593

15791594
uint64_t frequency = 0;
15801595
auto ret = xeIoctlHelper->getTimestampFrequency(frequency);

0 commit comments

Comments
 (0)