Skip to content

Commit 0e7ec82

Browse files
UUIDs generation
Related-To: NEO-4964 Change-Id: I0ef5912fb744788f713803f539551c7b0b134208 Signed-off-by: Mateusz Hoppe <[email protected]>
1 parent d5f7ad6 commit 0e7ec82

File tree

4 files changed

+34
-0
lines changed

4 files changed

+34
-0
lines changed

opencl/test/unit_test/os_interface/linux/drm_mock.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class DrmMock : public Drm {
3131
public:
3232
using Drm::checkQueueSliceSupport;
3333
using Drm::engineInfo;
34+
using Drm::generateUUID;
3435
using Drm::getQueueSliceCount;
3536
using Drm::memoryInfo;
3637
using Drm::nonPersistentContextsSupported;

opencl/test/unit_test/os_interface/linux/drm_tests.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,22 @@ TEST(DrmTest, givenPlatformWithSupportToChangeSliceCountWhenCallSetQueueSliceCou
349349
EXPECT_EQ(0, drm->getQueueSliceCount(&sseu));
350350
EXPECT_EQ(drm->getSliceMask(newSliceCount), sseu.slice_mask);
351351
}
352+
353+
TEST(DrmTest, GivenDrmWhenGeneratingUUIDThenCorrectStringsAreReturned) {
354+
DrmMock drm{};
355+
auto uuid1 = drm.generateUUID();
356+
auto uuid2 = drm.generateUUID();
357+
358+
std::string uuidff;
359+
for (int i = 0; i < 0xff - 2; i++) {
360+
uuidff = drm.generateUUID();
361+
}
362+
363+
EXPECT_STREQ("00000000-0000-0000-0000-000000000001", uuid1.c_str());
364+
EXPECT_STREQ("00000000-0000-0000-0000-000000000002", uuid2.c_str());
365+
EXPECT_STREQ("00000000-0000-0000-0000-0000000000ff", uuidff.c_str());
366+
}
367+
352368
namespace NEO {
353369
namespace SysCalls {
354370
extern uint32_t closeFuncCalled;

shared/source/os_interface/linux/drm_neo.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -473,6 +473,21 @@ uint32_t Drm::getVirtualMemoryAddressSpace(uint32_t vmId) {
473473
return 0;
474474
}
475475

476+
std::string Drm::generateUUID() {
477+
const char uuidString[] = "00000000-0000-0000-%04" SCNx64 "-%012" SCNx64;
478+
char buffer[36 + 1] = "00000000-0000-0000-0000-000000000000";
479+
uuid++;
480+
481+
UNRECOVERABLE_IF(uuid == 0xFFFFFFFFFFFFFFFF);
482+
483+
uint64_t parts[2] = {0, 0};
484+
parts[0] = uuid & 0xFFFFFFFFFFFF;
485+
parts[1] = (uuid & 0xFFFF000000000000) >> 48;
486+
sprintf(buffer, uuidString, parts[1], parts[0]);
487+
488+
return std::string(buffer, 36);
489+
}
490+
476491
Drm::~Drm() {
477492
destroyVirtualMemoryAddressSpace();
478493
}

shared/source/os_interface/linux/drm_neo.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ class Drm {
123123

124124
protected:
125125
int getQueueSliceCount(drm_i915_gem_context_param_sseu *sseu);
126+
std::string generateUUID();
126127
bool sliceCountChangeSupported = false;
127128
drm_i915_gem_context_param_sseu sseu{};
128129
bool preemptionSupported = false;
@@ -133,6 +134,7 @@ class Drm {
133134
int revisionId = 0;
134135
GTTYPE eGtType = GTTYPE_UNDEFINED;
135136
RootDeviceEnvironment &rootDeviceEnvironment;
137+
uint64_t uuid = 0;
136138

137139
Drm(std::unique_ptr<HwDeviceId> hwDeviceIdIn, RootDeviceEnvironment &rootDeviceEnvironment);
138140
std::unique_ptr<EngineInfo> engineInfo;

0 commit comments

Comments
 (0)