Skip to content

Commit 7d3fc9a

Browse files
Create wrappers for gem context destroy, gem vm control, gem wait, reset stats
Related-To: NEO-6852 Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
1 parent 51d1752 commit 7d3fc9a

File tree

10 files changed

+108
-59
lines changed

10 files changed

+108
-59
lines changed

opencl/test/unit_test/linux/mock_os_layer.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -223,26 +223,26 @@ int drmContextCreate(NEO::GemContextCreateExt *create) {
223223
return failOnContextCreate;
224224
}
225225

226-
int drmContextDestroy(drm_i915_gem_context_destroy *destroy) {
226+
int drmContextDestroy(NEO::GemContextDestroy *destroy) {
227227
assert(destroy);
228228

229-
if (destroy->ctx_id == 1)
229+
if (destroy->contextId == 1)
230230
return 0;
231231
else
232232
return -1;
233233
}
234234

235-
int drmVirtualMemoryCreate(drm_i915_gem_vm_control *control) {
235+
int drmVirtualMemoryCreate(NEO::GemVmControl *control) {
236236
assert(control);
237-
control->vm_id = ++vmId;
237+
control->vmId = ++vmId;
238238
return failOnVirtualMemoryCreate;
239239
}
240240

241-
int drmVirtualMemoryDestroy(drm_i915_gem_vm_control *control) {
241+
int drmVirtualMemoryDestroy(NEO::GemVmControl *control) {
242242
assert(control);
243243

244244
vmId--;
245-
return (control->vm_id > 0) ? 0 : -1;
245+
return (control->vmId > 0) ? 0 : -1;
246246
}
247247

248248
int drmVersion(drm_version_t *version) {
@@ -305,13 +305,13 @@ int ioctl(int fd, unsigned long int request, ...) throw() {
305305
res = drmContextCreate(va_arg(vl, NEO::GemContextCreateExt *));
306306
break;
307307
case DRM_IOCTL_I915_GEM_CONTEXT_DESTROY:
308-
res = drmContextDestroy(va_arg(vl, drm_i915_gem_context_destroy *));
308+
res = drmContextDestroy(va_arg(vl, NEO::GemContextDestroy *));
309309
break;
310310
case DRM_IOCTL_I915_GEM_VM_CREATE:
311-
res = drmVirtualMemoryCreate(va_arg(vl, drm_i915_gem_vm_control *));
311+
res = drmVirtualMemoryCreate(va_arg(vl, NEO::GemVmControl *));
312312
break;
313313
case DRM_IOCTL_I915_GEM_VM_DESTROY:
314-
res = drmVirtualMemoryDestroy(va_arg(vl, drm_i915_gem_vm_control *));
314+
res = drmVirtualMemoryDestroy(va_arg(vl, NEO::GemVmControl *));
315315
break;
316316
case DRM_IOCTL_VERSION:
317317
res = drmVersion(va_arg(vl, drm_version_t *));

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,12 @@ using namespace NEO;
4848

4949
HWTEST_TEMPLATED_F(DrmCommandStreamTest, givenFlushStampWhenWaitCalledThenWaitForSpecifiedBoHandle) {
5050
FlushStamp handleToWait = 123;
51-
drm_i915_gem_wait expectedWait = {};
52-
expectedWait.bo_handle = static_cast<uint32_t>(handleToWait);
53-
expectedWait.timeout_ns = -1;
51+
GemWait expectedWait = {};
52+
expectedWait.boHandle = static_cast<uint32_t>(handleToWait);
53+
expectedWait.timeoutNs = -1;
5454

5555
csr->waitForFlushStamp(handleToWait);
56-
EXPECT_TRUE(memcmp(&expectedWait, &mock->receivedGemWait, sizeof(drm_i915_gem_wait)) == 0);
56+
EXPECT_TRUE(memcmp(&expectedWait, &mock->receivedGemWait, sizeof(GemWait)) == 0);
5757
EXPECT_EQ(1, mock->ioctlCount.gemWait);
5858
}
5959

shared/source/os_interface/linux/drm_neo.cpp

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -335,13 +335,13 @@ bool Drm::isGpuHangDetected(OsContext &osContext) {
335335
const auto &drmContextIds = osContextLinux->getDrmContextIds();
336336

337337
for (const auto drmContextId : drmContextIds) {
338-
drm_i915_reset_stats resetStats{};
339-
resetStats.ctx_id = drmContextId;
338+
ResetStats resetStats{};
339+
resetStats.contextId = drmContextId;
340340

341341
const auto retVal{ioctl(DRM_IOCTL_I915_GET_RESET_STATS, &resetStats)};
342342
UNRECOVERABLE_IF(retVal != 0);
343343

344-
if (resetStats.batch_active > 0 || resetStats.batch_pending > 0) {
344+
if (resetStats.batchActive > 0 || resetStats.batchPending > 0) {
345345
PRINT_DEBUG_STRING(DebugManager.flags.PrintDebugMessages.get(), stderr, "%s", "ERROR: GPU HANG detected!\n");
346346
return true;
347347
}
@@ -468,15 +468,15 @@ uint32_t Drm::createDrmContext(uint32_t drmVmId, bool isDirectSubmissionRequeste
468468
}
469469

470470
void Drm::destroyDrmContext(uint32_t drmContextId) {
471-
drm_i915_gem_context_destroy destroy = {};
472-
destroy.ctx_id = drmContextId;
471+
GemContextDestroy destroy{};
472+
destroy.contextId = drmContextId;
473473
auto retVal = ioctl(DRM_IOCTL_I915_GEM_CONTEXT_DESTROY, &destroy);
474474
UNRECOVERABLE_IF(retVal != 0);
475475
}
476476

477477
void Drm::destroyDrmVirtualMemory(uint32_t drmVmId) {
478-
drm_i915_gem_vm_control ctl = {};
479-
ctl.vm_id = drmVmId;
478+
GemVmControl ctl = {};
479+
ctl.vmId = drmVmId;
480480
auto ret = SysCalls::ioctl(getFileDescriptor(), DRM_IOCTL_I915_GEM_VM_DESTROY, &ctl);
481481
UNRECOVERABLE_IF(ret != 0);
482482
}
@@ -874,9 +874,9 @@ const TopologyMap &Drm::getTopologyMap() {
874874
int Drm::waitHandle(uint32_t waitHandle, int64_t timeout) {
875875
UNRECOVERABLE_IF(isVmBindAvailable());
876876

877-
drm_i915_gem_wait wait = {};
878-
wait.bo_handle = waitHandle;
879-
wait.timeout_ns = timeout;
877+
GemWait wait{};
878+
wait.boHandle = waitHandle;
879+
wait.timeoutNs = timeout;
880880

881881
int ret = ioctl(DRM_IOCTL_I915_GEM_WAIT, &wait);
882882
if (ret != 0) {
@@ -1501,7 +1501,7 @@ int Drm::unbindBufferObject(OsContext *osContext, uint32_t vmHandleId, BufferObj
15011501
}
15021502

15031503
int Drm::createDrmVirtualMemory(uint32_t &drmVmId) {
1504-
drm_i915_gem_vm_control ctl = {};
1504+
GemVmControl ctl{};
15051505

15061506
std::optional<MemoryClassInstance> regionInstanceClass;
15071507

@@ -1530,8 +1530,8 @@ int Drm::createDrmVirtualMemory(uint32_t &drmVmId) {
15301530
auto ret = SysCalls::ioctl(getFileDescriptor(), DRM_IOCTL_I915_GEM_VM_CREATE, &ctl);
15311531

15321532
if (ret == 0) {
1533-
drmVmId = ctl.vm_id;
1534-
if (ctl.vm_id == 0) {
1533+
drmVmId = ctl.vmId;
1534+
if (ctl.vmId == 0) {
15351535
// 0 is reserved for invalid/unassigned ppgtt
15361536
return -1;
15371537
}

shared/source/os_interface/linux/drm_wrappers.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,4 +119,26 @@ static_assert(offsetof(GemContextCreateExt, contextId) == offsetof(drm_i915_gem_
119119
static_assert(offsetof(GemContextCreateExt, flags) == offsetof(drm_i915_gem_context_create_ext, flags));
120120
static_assert(offsetof(GemContextCreateExt, extensions) == offsetof(drm_i915_gem_context_create_ext, extensions));
121121

122+
static_assert(sizeof(GemContextDestroy) == sizeof(drm_i915_gem_context_destroy));
123+
static_assert(offsetof(GemContextDestroy, contextId) == offsetof(drm_i915_gem_context_destroy, ctx_id));
124+
static_assert(offsetof(GemContextDestroy, reserved) == offsetof(drm_i915_gem_context_destroy, pad));
125+
126+
static_assert(sizeof(GemVmControl) == sizeof(drm_i915_gem_vm_control));
127+
static_assert(offsetof(GemVmControl, extensions) == offsetof(drm_i915_gem_vm_control, extensions));
128+
static_assert(offsetof(GemVmControl, flags) == offsetof(drm_i915_gem_vm_control, flags));
129+
static_assert(offsetof(GemVmControl, vmId) == offsetof(drm_i915_gem_vm_control, vm_id));
130+
131+
static_assert(sizeof(GemWait) == sizeof(drm_i915_gem_wait));
132+
static_assert(offsetof(GemWait, boHandle) == offsetof(drm_i915_gem_wait, bo_handle));
133+
static_assert(offsetof(GemWait, flags) == offsetof(drm_i915_gem_wait, flags));
134+
static_assert(offsetof(GemWait, timeoutNs) == offsetof(drm_i915_gem_wait, timeout_ns));
135+
136+
static_assert(sizeof(ResetStats) == sizeof(drm_i915_reset_stats));
137+
static_assert(offsetof(ResetStats, contextId) == offsetof(drm_i915_reset_stats, ctx_id));
138+
static_assert(offsetof(ResetStats, flags) == offsetof(drm_i915_reset_stats, flags));
139+
static_assert(offsetof(ResetStats, resetCount) == offsetof(drm_i915_reset_stats, reset_count));
140+
static_assert(offsetof(ResetStats, batchActive) == offsetof(drm_i915_reset_stats, batch_active));
141+
static_assert(offsetof(ResetStats, batchPending) == offsetof(drm_i915_reset_stats, batch_pending));
142+
static_assert(offsetof(ResetStats, reserved) == offsetof(drm_i915_reset_stats, pad));
143+
122144
} // namespace NEO

shared/source/os_interface/linux/drm_wrappers.h

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,4 +136,30 @@ struct GemContextCreateExt {
136136
uint64_t extensions;
137137
};
138138

139+
struct GemContextDestroy {
140+
uint32_t contextId;
141+
uint32_t reserved;
142+
};
143+
144+
struct GemVmControl {
145+
uint64_t extensions;
146+
uint32_t flags;
147+
uint32_t vmId;
148+
};
149+
150+
struct GemWait {
151+
uint32_t boHandle;
152+
uint32_t flags;
153+
int64_t timeoutNs;
154+
};
155+
156+
struct ResetStats {
157+
uint32_t contextId;
158+
uint32_t flags;
159+
uint32_t resetCount;
160+
uint32_t batchActive;
161+
uint32_t batchPending;
162+
uint32_t reserved;
163+
};
164+
139165
} // namespace NEO

shared/test/common/libult/linux/drm_mock.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,8 @@ int DrmMock::ioctl(unsigned long request, void *arg) {
9494

9595
if ((request == DRM_IOCTL_I915_GEM_CONTEXT_DESTROY) && (arg != nullptr)) {
9696
ioctlCount.contextDestroy++;
97-
auto destroy = static_cast<drm_i915_gem_context_destroy *>(arg);
98-
this->receivedDestroyContextId = destroy->ctx_id;
97+
auto destroy = static_cast<GemContextDestroy *>(arg);
98+
this->receivedDestroyContextId = destroy->contextId;
9999
return this->storedRetVal;
100100
}
101101

@@ -216,7 +216,7 @@ int DrmMock::ioctl(unsigned long request, void *arg) {
216216
}
217217
if (request == DRM_IOCTL_I915_GEM_WAIT) {
218218
ioctlCount.gemWait++;
219-
receivedGemWait = *static_cast<drm_i915_gem_wait *>(arg);
219+
receivedGemWait = *static_cast<GemWait *>(arg);
220220
return 0;
221221
}
222222
if (request == DRM_IOCTL_GEM_CLOSE) {
@@ -225,9 +225,9 @@ int DrmMock::ioctl(unsigned long request, void *arg) {
225225
}
226226
if (request == DRM_IOCTL_I915_GET_RESET_STATS && arg != nullptr) {
227227
ioctlCount.gemResetStats++;
228-
auto outResetStats = static_cast<drm_i915_reset_stats *>(arg);
228+
auto outResetStats = static_cast<ResetStats *>(arg);
229229
for (const auto &resetStats : resetStatsToReturn) {
230-
if (resetStats.ctx_id == outResetStats->ctx_id) {
230+
if (resetStats.contextId == outResetStats->contextId) {
231231
*outResetStats = resetStats;
232232
return 0;
233233
}

shared/test/common/libult/linux/drm_mock.h

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ class DrmMock : public Drm {
196196
bool capturedCooperativeContextRequest = false;
197197

198198
uint32_t passedContextDebugId = std::numeric_limits<uint32_t>::max();
199-
std::vector<drm_i915_reset_stats> resetStatsToReturn{};
199+
std::vector<ResetStats> resetStatsToReturn{};
200200

201201
GemContextCreateExtSetParam receivedContextCreateSetParam = {};
202202
uint32_t receivedContextCreateFlags = 0;
@@ -213,27 +213,27 @@ class DrmMock : public Drm {
213213
std::vector<MockExecBuffer> execBuffers{};
214214
std::vector<MockExecObject> receivedBos{};
215215
//DRM_IOCTL_I915_GEM_CREATE
216-
__u64 createParamsSize = 0;
217-
__u32 createParamsHandle = 0;
216+
uint64_t createParamsSize = 0;
217+
uint32_t createParamsHandle = 0;
218218
//DRM_IOCTL_I915_GEM_SET_TILING
219-
__u32 setTilingMode = 0;
220-
__u32 setTilingHandle = 0;
221-
__u32 setTilingStride = 0;
219+
uint32_t setTilingMode = 0;
220+
uint32_t setTilingHandle = 0;
221+
uint32_t setTilingStride = 0;
222222
//DRM_IOCTL_PRIME_FD_TO_HANDLE
223-
__u32 outputHandle = 0;
224-
__s32 inputFd = 0;
223+
uint32_t outputHandle = 0;
224+
int32_t inputFd = 0;
225225
int fdToHandleRetVal = 0;
226226
//DRM_IOCTL_HANDLE_TO_FD
227-
__s32 outputFd = 0;
227+
int32_t outputFd = 0;
228228
//DRM_IOCTL_I915_GEM_USERPTR
229-
__u32 returnHandle = 0;
230-
__u64 gpuMemSize = 3u * MemoryConstants::gigaByte;
229+
uint32_t returnHandle = 0;
230+
uint64_t gpuMemSize = 3u * MemoryConstants::gigaByte;
231231
//DRM_IOCTL_I915_GEM_MMAP
232232
uint64_t lockedPtr[4];
233233
//DRM_IOCTL_I915_QUERY
234234
QueryItem storedQueryItem = {};
235235
//DRM_IOCTL_I915_GEM_WAIT
236-
drm_i915_gem_wait receivedGemWait = {};
236+
GemWait receivedGemWait = {};
237237
//DRM_IOCTL_I915_GEM_CONTEXT_CREATE_EXT
238238
uint32_t storedDrmContextId{};
239239
//DRM_IOCTL_GEM_CLOSE

shared/test/common/os_interface/linux/device_command_stream_fixture.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,8 +140,8 @@ int DrmMockCustom::ioctl(unsigned long request, void *arg) {
140140
} break;
141141

142142
case DRM_IOCTL_I915_GEM_WAIT: {
143-
auto gemWaitParams = (drm_i915_gem_wait *)arg;
144-
gemWaitTimeout = gemWaitParams->timeout_ns;
143+
auto gemWaitParams = static_cast<NEO::GemWait *>(arg);
144+
gemWaitTimeout = gemWaitParams->timeoutNs;
145145
ioctl_cnt.gemWait++;
146146
} break;
147147

shared/test/common/os_interface/linux/sys_calls_linux_ult.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
*/
77

88
#include "shared/source/helpers/string.h"
9+
#include "shared/source/os_interface/linux/drm_wrappers.h"
910
#include "shared/source/os_interface/linux/sys_calls.h"
1011

1112
#include "drm/i915_drm.h"
@@ -97,17 +98,17 @@ int ioctl(int fileDescriptor, unsigned long int request, void *arg) {
9798
}
9899
if (request == DRM_IOCTL_I915_GEM_VM_CREATE) {
99100
ioctlVmCreateCalled++;
100-
auto control = static_cast<drm_i915_gem_vm_control *>(arg);
101+
auto control = static_cast<GemVmControl *>(arg);
101102
ioctlVmCreateExtensionArg = control->extensions;
102-
control->vm_id = ++vmId;
103+
control->vmId = ++vmId;
103104
vmFlags |= control->flags;
104105
return ioctlVmCreateReturned;
105106
}
106107
if (request == DRM_IOCTL_I915_GEM_VM_DESTROY) {
107-
auto control = static_cast<drm_i915_gem_vm_control *>(arg);
108+
auto control = static_cast<GemVmControl *>(arg);
108109
vmId--;
109110
vmFlags = 0;
110-
return (control->vm_id > 0) ? 0 : -1;
111+
return (control->vmId > 0) ? 0 : -1;
111112
}
112113
if (request == invalidIoctl) {
113114
errno = 0;

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

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1105,11 +1105,11 @@ TEST(DrmTest, GivenZeroBatchActiveAndZeroBatchPendingResetStatsWhenIsGpuHangIsCa
11051105
mockOsContextLinux.drmContextIds.push_back(0);
11061106
mockOsContextLinux.drmContextIds.push_back(3);
11071107

1108-
drm_i915_reset_stats resetStats{};
1109-
resetStats.ctx_id = 0;
1108+
ResetStats resetStats{};
1109+
resetStats.contextId = 0;
11101110
drm.resetStatsToReturn.push_back(resetStats);
11111111

1112-
resetStats.ctx_id = 3;
1112+
resetStats.contextId = 3;
11131113
drm.resetStatsToReturn.push_back(resetStats);
11141114

11151115
bool isGpuHangDetected{};
@@ -1129,12 +1129,12 @@ TEST(DrmTest, GivenBatchActiveGreaterThanZeroResetStatsWhenIsGpuHangIsCalledThen
11291129
mockOsContextLinux.drmContextIds.push_back(0);
11301130
mockOsContextLinux.drmContextIds.push_back(3);
11311131

1132-
drm_i915_reset_stats resetStats{};
1133-
resetStats.ctx_id = 0;
1132+
ResetStats resetStats{};
1133+
resetStats.contextId = 0;
11341134
drm.resetStatsToReturn.push_back(resetStats);
11351135

1136-
resetStats.ctx_id = 3;
1137-
resetStats.batch_active = 2;
1136+
resetStats.contextId = 3;
1137+
resetStats.batchActive = 2;
11381138
drm.resetStatsToReturn.push_back(resetStats);
11391139

11401140
bool isGpuHangDetected{};
@@ -1153,9 +1153,9 @@ TEST(DrmTest, GivenBatchPendingGreaterThanZeroResetStatsWhenIsGpuHangIsCalledThe
11531153
MockOsContextLinux mockOsContextLinux{drm, contextId, engineDescriptor};
11541154
mockOsContextLinux.drmContextIds.push_back(8);
11551155

1156-
drm_i915_reset_stats resetStats{};
1157-
resetStats.ctx_id = 8;
1158-
resetStats.batch_pending = 7;
1156+
ResetStats resetStats{};
1157+
resetStats.contextId = 8;
1158+
resetStats.batchPending = 7;
11591159
drm.resetStatsToReturn.push_back(resetStats);
11601160

11611161
bool isGpuHangDetected{};

0 commit comments

Comments
 (0)