Skip to content

Commit 05cb489

Browse files
Create wrappers for drm getparam, query, gem close, prime handle, version
Related-To: NEO-6852 Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
1 parent 07efa4a commit 05cb489

File tree

17 files changed

+152
-89
lines changed

17 files changed

+152
-89
lines changed

opencl/test/unit_test/linux/main_linux_dll.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -469,7 +469,7 @@ TEST_F(DrmTests, GivenErrorCodeWhenCreatingDrmThenDrmCreatedOnlyWithSpecificErro
469469
auto drm = DrmWrap::createDrm(*rootDeviceEnvironment);
470470
EXPECT_NE(drm, nullptr);
471471

472-
drm_i915_getparam_t getParam;
472+
GetParam getParam{};
473473
int lDeviceId;
474474

475475
VariableBackup<decltype(ioctlCnt)> backupIoctlCnt(&ioctlCnt);

opencl/test/unit_test/linux/mock_os_layer.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ struct dirent *readdir(DIR *dir) {
132132
return &entries[entryIndex++];
133133
}
134134

135-
int drmGetParam(drm_i915_getparam_t *param) {
135+
int drmGetParam(NEO::GetParam *param) {
136136
assert(param);
137137
int ret = 0;
138138

@@ -245,14 +245,14 @@ int drmVirtualMemoryDestroy(NEO::GemVmControl *control) {
245245
return (control->vmId > 0) ? 0 : -1;
246246
}
247247

248-
int drmVersion(drm_version_t *version) {
249-
memcpy_s(version->name, version->name_len, providedDrmVersion, strlen(providedDrmVersion) + 1);
248+
int drmVersion(NEO::DrmVersion *version) {
249+
memcpy_s(version->name, version->nameLen, providedDrmVersion, strlen(providedDrmVersion) + 1);
250250

251251
return failOnDrmVersion;
252252
}
253253

254-
int drmQueryItem(drm_i915_query *query) {
255-
auto queryItemArg = reinterpret_cast<NEO::QueryItem *>(query->items_ptr);
254+
int drmQueryItem(NEO::Query *query) {
255+
auto queryItemArg = reinterpret_cast<NEO::QueryItem *>(query->itemsPtr);
256256
if (queryItemArg->length == 0) {
257257
if (queryItemArg->queryId == DRM_I915_QUERY_TOPOLOGY_INFO) {
258258
queryItemArg->length = sizeof(NEO::QueryTopologyInfo) + 1;
@@ -293,7 +293,7 @@ int ioctl(int fd, unsigned long int request, ...) throw() {
293293
if (res == 0) {
294294
switch (request) {
295295
case DRM_IOCTL_I915_GETPARAM:
296-
res = drmGetParam(va_arg(vl, drm_i915_getparam_t *));
296+
res = drmGetParam(va_arg(vl, NEO::GetParam *));
297297
break;
298298
case DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM:
299299
res = drmSetContextParam(va_arg(vl, NEO::GemContextParam *));
@@ -314,10 +314,10 @@ int ioctl(int fd, unsigned long int request, ...) throw() {
314314
res = drmVirtualMemoryDestroy(va_arg(vl, NEO::GemVmControl *));
315315
break;
316316
case DRM_IOCTL_VERSION:
317-
res = drmVersion(va_arg(vl, drm_version_t *));
317+
res = drmVersion(va_arg(vl, NEO::DrmVersion *));
318318
break;
319319
case DRM_IOCTL_I915_QUERY:
320-
res = drmQueryItem(va_arg(vl, drm_i915_query *));
320+
res = drmQueryItem(va_arg(vl, NEO::Query *));
321321
break;
322322
default:
323323
res = drmOtherRequests(request, vl);

opencl/test/unit_test/mt_tests/os_interface/linux/drm_memory_manager_mt_tests.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ TEST(DrmMemoryManagerTest, givenDrmMemoryManagerWhenSharedAllocationIsCreatedFro
2929

3030
int ioctl(unsigned long request, void *arg) override {
3131
if (request == DRM_IOCTL_PRIME_FD_TO_HANDLE) {
32-
auto *primeToHandleParams = (drm_prime_handle *)arg;
32+
auto *primeToHandleParams = static_cast<PrimeHandle *>(arg);
3333
primeToHandleParams->handle = 10;
3434
}
3535
return 0;
@@ -88,7 +88,7 @@ TEST(DrmMemoryManagerTest, givenMultipleThreadsWhenSharedAllocationIsCreatedThen
8888

8989
int ioctl(unsigned long request, void *arg) override {
9090
if (request == DRM_IOCTL_PRIME_FD_TO_HANDLE) {
91-
auto *primeToHandleParams = (drm_prime_handle *)arg;
91+
auto *primeToHandleParams = static_cast<PrimeHandle *>(arg);
9292
primeToHandleParams->handle = primeFdHandle;
9393

9494
// PrimeFdHandle should not be lower than closeHandle

shared/source/os_interface/linux/drm_buffer_object.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ void BufferObject::setAddress(uint64_t address) {
6262
}
6363

6464
bool BufferObject::close() {
65-
drm_gem_close close = {};
65+
GemClose close{};
6666
close.handle = this->handle;
6767

6868
PRINT_DEBUG_STRING(DebugManager.flags.PrintBOCreateDestroyResult.get(), stdout, "Calling gem close on handle: BO-%d\n", this->handle);

shared/source/os_interface/linux/drm_memory_manager.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -678,8 +678,8 @@ GraphicsAllocation *DrmMemoryManager::createGraphicsAllocationFromMultipleShared
678678
bool areBosSharedObjects = true;
679679

680680
for (auto handle : handles) {
681-
drm_prime_handle openFd = {0, 0, 0};
682-
openFd.fd = handle;
681+
PrimeHandle openFd = {0, 0, 0};
682+
openFd.fileDescriptor = handle;
683683

684684
auto ret = this->getDrm(properties.rootDeviceIndex).ioctl(DRM_IOCTL_PRIME_FD_TO_HANDLE, &openFd);
685685

@@ -762,8 +762,8 @@ GraphicsAllocation *DrmMemoryManager::createGraphicsAllocationFromSharedHandle(o
762762

763763
std::unique_lock<std::mutex> lock(mtx);
764764

765-
drm_prime_handle openFd = {0, 0, 0};
766-
openFd.fd = handle;
765+
PrimeHandle openFd{};
766+
openFd.fileDescriptor = handle;
767767

768768
auto &drm = this->getDrm(properties.rootDeviceIndex);
769769

@@ -1134,14 +1134,14 @@ void DrmMemoryManager::unlockResourceImpl(GraphicsAllocation &graphicsAllocation
11341134
}
11351135

11361136
int DrmMemoryManager::obtainFdFromHandle(int boHandle, uint32_t rootDeviceindex) {
1137-
drm_prime_handle openFd = {0, 0, 0};
1137+
PrimeHandle openFd{};
11381138

11391139
openFd.flags = DRM_CLOEXEC | DRM_RDWR;
11401140
openFd.handle = boHandle;
11411141

11421142
getDrm(rootDeviceindex).ioctl(DRM_IOCTL_PRIME_HANDLE_TO_FD, &openFd);
11431143

1144-
return openFd.fd;
1144+
return openFd.fileDescriptor;
11451145
}
11461146

11471147
uint32_t DrmMemoryManager::getDefaultDrmContextId(uint32_t rootDeviceIndex) const {
@@ -1878,8 +1878,8 @@ GraphicsAllocation *DrmMemoryManager::createSharedUnifiedMemoryAllocation(const
18781878
}
18791879

18801880
DrmAllocation *DrmMemoryManager::createUSMHostAllocationFromSharedHandle(osHandle handle, const AllocationProperties &properties, bool hasMappedPtr) {
1881-
drm_prime_handle openFd = {0, 0, 0};
1882-
openFd.fd = handle;
1881+
PrimeHandle openFd{};
1882+
openFd.fileDescriptor = handle;
18831883

18841884
auto &drm = this->getDrm(properties.rootDeviceIndex);
18851885
auto patIndex = drm.getPatIndex(nullptr, properties.allocationType, CacheRegion::Default, CachePolicy::WriteBack, false);

shared/source/os_interface/linux/drm_neo.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ int Drm::ioctl(unsigned long request, void *arg) {
268268
}
269269

270270
int Drm::getParamIoctl(int param, int *dstValue) {
271-
drm_i915_getparam_t getParam = {};
271+
GetParam getParam{};
272272
getParam.param = param;
273273
getParam.value = dstValue;
274274

@@ -659,10 +659,10 @@ std::vector<std::unique_ptr<HwDeviceId>> Drm::discoverDevices(ExecutionEnvironme
659659
}
660660

661661
std::string Drm::getDrmVersion(int fileDescriptor) {
662-
drm_version_t version = {};
662+
DrmVersion version = {};
663663
char name[5] = {};
664664
version.name = name;
665-
version.name_len = 5;
665+
version.nameLen = 5;
666666

667667
int ret = SysCalls::ioctl(fileDescriptor, DRM_IOCTL_VERSION, &version);
668668
if (ret) {
@@ -674,13 +674,13 @@ std::string Drm::getDrmVersion(int fileDescriptor) {
674674
}
675675

676676
std::vector<uint8_t> Drm::query(uint32_t queryId, uint32_t queryItemFlags) {
677-
drm_i915_query query{};
677+
Query query{};
678678
QueryItem queryItem{};
679679
queryItem.queryId = queryId;
680680
queryItem.length = 0; // query length first
681681
queryItem.flags = queryItemFlags;
682-
query.items_ptr = reinterpret_cast<__u64>(&queryItem);
683-
query.num_items = 1;
682+
query.itemsPtr = reinterpret_cast<uint64_t>(&queryItem);
683+
query.numItems = 1;
684684

685685
auto ret = this->ioctl(DRM_IOCTL_I915_QUERY, &query);
686686
if (ret != 0 || queryItem.length <= 0) {

shared/source/os_interface/linux/drm_wrappers.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,4 +141,33 @@ static_assert(offsetof(ResetStats, batchActive) == offsetof(drm_i915_reset_stats
141141
static_assert(offsetof(ResetStats, batchPending) == offsetof(drm_i915_reset_stats, batch_pending));
142142
static_assert(offsetof(ResetStats, reserved) == offsetof(drm_i915_reset_stats, pad));
143143

144+
static_assert(sizeof(GetParam) == sizeof(struct drm_i915_getparam));
145+
static_assert(offsetof(GetParam, param) == offsetof(struct drm_i915_getparam, param));
146+
static_assert(offsetof(GetParam, value) == offsetof(struct drm_i915_getparam, value));
147+
148+
static_assert(sizeof(Query) == sizeof(struct drm_i915_query));
149+
static_assert(offsetof(Query, numItems) == offsetof(struct drm_i915_query, num_items));
150+
static_assert(offsetof(Query, flags) == offsetof(struct drm_i915_query, flags));
151+
static_assert(offsetof(Query, itemsPtr) == offsetof(struct drm_i915_query, items_ptr));
152+
153+
static_assert(sizeof(GemClose) == sizeof(drm_gem_close));
154+
static_assert(offsetof(GemClose, handle) == offsetof(drm_gem_close, handle));
155+
static_assert(offsetof(GemClose, reserved) == offsetof(drm_gem_close, pad));
156+
157+
static_assert(sizeof(PrimeHandle) == sizeof(drm_prime_handle));
158+
static_assert(offsetof(PrimeHandle, handle) == offsetof(drm_prime_handle, handle));
159+
static_assert(offsetof(PrimeHandle, flags) == offsetof(drm_prime_handle, flags));
160+
static_assert(offsetof(PrimeHandle, fileDescriptor) == offsetof(drm_prime_handle, fd));
161+
162+
static_assert(sizeof(DrmVersion) == sizeof(drm_version));
163+
static_assert(offsetof(DrmVersion, versionMajor) == offsetof(drm_version, version_major));
164+
static_assert(offsetof(DrmVersion, versionMinor) == offsetof(drm_version, version_minor));
165+
static_assert(offsetof(DrmVersion, versionPatch) == offsetof(drm_version, version_patchlevel));
166+
static_assert(offsetof(DrmVersion, nameLen) == offsetof(drm_version, name_len));
167+
static_assert(offsetof(DrmVersion, name) == offsetof(drm_version, name));
168+
static_assert(offsetof(DrmVersion, dateLen) == offsetof(drm_version, date_len));
169+
static_assert(offsetof(DrmVersion, date) == offsetof(drm_version, date));
170+
static_assert(offsetof(DrmVersion, descLen) == offsetof(drm_version, desc_len));
171+
static_assert(offsetof(DrmVersion, desc) == offsetof(drm_version, desc));
172+
144173
} // namespace NEO

shared/source/os_interface/linux/drm_wrappers.h

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

88
#pragma once
9+
#include <cstddef>
910
#include <cstdint>
1011
namespace NEO {
1112

@@ -162,4 +163,37 @@ struct ResetStats {
162163
uint32_t reserved;
163164
};
164165

166+
struct GetParam {
167+
int32_t param;
168+
int *value;
169+
};
170+
171+
struct Query {
172+
uint32_t numItems;
173+
uint32_t flags;
174+
uint64_t itemsPtr;
175+
};
176+
177+
struct GemClose {
178+
uint32_t handle;
179+
uint32_t reserved;
180+
};
181+
182+
struct PrimeHandle {
183+
uint32_t handle;
184+
uint32_t flags;
185+
int32_t fileDescriptor;
186+
};
187+
188+
struct DrmVersion {
189+
int versionMajor;
190+
int versionMinor;
191+
int versionPatch;
192+
size_t nameLen;
193+
char *name;
194+
size_t dateLen;
195+
char *date;
196+
size_t descLen;
197+
char *desc;
198+
};
165199
} // namespace NEO

shared/source/os_interface/linux/ioctl_helper_prelim.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ IoctlHelper *IoctlHelperPrelim20::clone() {
3030

3131
bool IoctlHelperPrelim20::isVmBindAvailable(Drm *drm) {
3232
int vmBindSupported = 0;
33-
drm_i915_getparam_t getParam = {};
33+
GetParam getParam{};
3434
getParam.param = PRELIM_I915_PARAM_HAS_VM_BIND;
3535
getParam.value = &vmBindSupported;
3636
int retVal = IoctlHelper::ioctl(drm, DRM_IOCTL_I915_GETPARAM, &getParam);
@@ -322,9 +322,9 @@ uint32_t IoctlHelperPrelim20::queryDistances(Drm *drm, std::vector<QueryItem> &q
322322
queryItems[i].dataPtr = reinterpret_cast<uint64_t>(&i915Distances[i]);
323323
}
324324

325-
drm_i915_query query{};
326-
query.items_ptr = reinterpret_cast<__u64>(queryItems.data());
327-
query.num_items = static_cast<uint32_t>(queryItems.size());
325+
Query query{};
326+
query.itemsPtr = reinterpret_cast<__u64>(queryItems.data());
327+
query.numItems = static_cast<uint32_t>(queryItems.size());
328328
auto ret = IoctlHelper::ioctl(drm, DRM_IOCTL_I915_QUERY, &query);
329329
for (auto i = 0u; i < i915Distances.size(); i++) {
330330
distanceInfos[i].distance = i915Distances[i].distance;

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

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ int DrmMock::ioctl(unsigned long request, void *arg) {
2323

2424
if ((request == DRM_IOCTL_I915_GETPARAM) && (arg != nullptr)) {
2525
ioctlCount.contextGetParam++;
26-
auto gp = static_cast<drm_i915_getparam_t *>(arg);
26+
auto gp = static_cast<GetParam *>(arg);
2727
if (gp->param == I915_PARAM_EU_TOTAL) {
2828
if (0 == this->storedRetValForEUVal) {
2929
*gp->value = this->storedEUVal;
@@ -189,16 +189,16 @@ int DrmMock::ioctl(unsigned long request, void *arg) {
189189
}
190190
if (request == DRM_IOCTL_PRIME_FD_TO_HANDLE) {
191191
ioctlCount.primeFdToHandle++;
192-
auto primeToHandleParams = static_cast<drm_prime_handle *>(arg);
192+
auto primeToHandleParams = static_cast<PrimeHandle *>(arg);
193193
//return BO
194194
primeToHandleParams->handle = outputHandle;
195-
inputFd = primeToHandleParams->fd;
195+
inputFd = primeToHandleParams->fileDescriptor;
196196
return fdToHandleRetVal;
197197
}
198198
if (request == DRM_IOCTL_PRIME_HANDLE_TO_FD) {
199199
ioctlCount.handleToPrimeFd++;
200-
auto primeToFdParams = static_cast<drm_prime_handle *>(arg);
201-
primeToFdParams->fd = outputFd;
200+
auto primeToFdParams = static_cast<PrimeHandle *>(arg);
201+
primeToFdParams->fileDescriptor = outputFd;
202202
return 0;
203203
}
204204
if (request == DRM_IOCTL_I915_GEM_GET_APERTURE) {
@@ -238,8 +238,8 @@ int DrmMock::ioctl(unsigned long request, void *arg) {
238238

239239
if (request == DRM_IOCTL_I915_QUERY && arg != nullptr) {
240240
ioctlCount.query++;
241-
auto queryArg = static_cast<drm_i915_query *>(arg);
242-
auto queryItemArg = reinterpret_cast<QueryItem *>(queryArg->items_ptr);
241+
auto queryArg = static_cast<Query *>(arg);
242+
auto queryItemArg = reinterpret_cast<QueryItem *>(queryArg->itemsPtr);
243243
storedQueryItem = *queryItemArg;
244244

245245
auto realEuCount = rootDeviceEnvironment.getHardwareInfo()->gtSystemInfo.EUCount;
@@ -283,12 +283,12 @@ int DrmMockEngine::handleRemainingRequests(unsigned long request, void *arg) {
283283
return EINVAL;
284284
}
285285
i915QuerySuccessCount--;
286-
auto query = static_cast<drm_i915_query *>(arg);
287-
if (query->items_ptr == 0) {
286+
auto query = static_cast<Query *>(arg);
287+
if (query->itemsPtr == 0) {
288288
return EINVAL;
289289
}
290-
for (auto i = 0u; i < query->num_items; i++) {
291-
handleQueryItem(reinterpret_cast<QueryItem *>(query->items_ptr) + i);
290+
for (auto i = 0u; i < query->numItems; i++) {
291+
handleQueryItem(reinterpret_cast<QueryItem *>(query->itemsPtr) + i);
292292
}
293293
return 0;
294294
}

0 commit comments

Comments
 (0)