mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-12 17:33:00 +08:00
Remove DrmMockImpl and use DrmMock instead
Related-To: NEO-4914 Signed-off-by: Fabian Zwolinski <fabian.zwolinski@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
72828f62ba
commit
726b676983
@@ -20,8 +20,10 @@ const uint32_t DrmMockResources::registerResourceReturnHandle = 3;
|
||||
|
||||
int DrmMock::ioctl(unsigned long request, void *arg) {
|
||||
ioctlCallsCount++;
|
||||
ioctlCount.total++;
|
||||
|
||||
if ((request == DRM_IOCTL_I915_GETPARAM) && (arg != nullptr)) {
|
||||
ioctlCount.contextGetParam++;
|
||||
auto gp = static_cast<drm_i915_getparam_t *>(arg);
|
||||
if (gp->param == I915_PARAM_EU_TOTAL) {
|
||||
if (0 == this->storedRetValForEUVal) {
|
||||
@@ -74,8 +76,10 @@ int DrmMock::ioctl(unsigned long request, void *arg) {
|
||||
}
|
||||
|
||||
if ((request == DRM_IOCTL_I915_GEM_CONTEXT_CREATE_EXT) && (arg != nullptr)) {
|
||||
ioctlCount.contextCreate++;
|
||||
auto create = static_cast<drm_i915_gem_context_create_ext *>(arg);
|
||||
this->receivedCreateContextId = create->ctx_id;
|
||||
auto contextCreate = static_cast<drm_i915_gem_context_create *>(arg);
|
||||
contextCreate->ctx_id = this->storedDrmContextId;
|
||||
this->receivedContextCreateFlags = create->flags;
|
||||
if (create->extensions == 0) {
|
||||
return this->storedRetVal;
|
||||
@@ -91,12 +95,14 @@ int DrmMock::ioctl(unsigned long request, void *arg) {
|
||||
}
|
||||
|
||||
if ((request == DRM_IOCTL_I915_GEM_CONTEXT_DESTROY) && (arg != nullptr)) {
|
||||
ioctlCount.contextDestroy++;
|
||||
auto destroy = static_cast<drm_i915_gem_context_destroy *>(arg);
|
||||
this->receivedDestroyContextId = destroy->ctx_id;
|
||||
return this->storedRetVal;
|
||||
}
|
||||
|
||||
if ((request == DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM) && (arg != nullptr)) {
|
||||
ioctlCount.contextSetParam++;
|
||||
receivedContextParamRequestCount++;
|
||||
receivedContextParamRequest = *static_cast<drm_i915_gem_context_param *>(arg);
|
||||
if (receivedContextParamRequest.param == I915_CONTEXT_PARAM_PRIORITY) {
|
||||
@@ -124,6 +130,7 @@ int DrmMock::ioctl(unsigned long request, void *arg) {
|
||||
}
|
||||
|
||||
if ((request == DRM_IOCTL_I915_GEM_CONTEXT_GETPARAM) && (arg != nullptr)) {
|
||||
ioctlCount.contextGetParam++;
|
||||
receivedContextParamRequestCount++;
|
||||
receivedContextParamRequest = *static_cast<drm_i915_gem_context_param *>(arg);
|
||||
if (receivedContextParamRequest.param == I915_CONTEXT_PARAM_GTT_SIZE) {
|
||||
@@ -148,18 +155,24 @@ int DrmMock::ioctl(unsigned long request, void *arg) {
|
||||
}
|
||||
|
||||
if (request == DRM_IOCTL_I915_GEM_EXECBUFFER2) {
|
||||
ioctlCount.execbuffer2++;
|
||||
auto execbuf = static_cast<drm_i915_gem_execbuffer2 *>(arg);
|
||||
this->execBuffer = *execbuf;
|
||||
this->bbFlags = reinterpret_cast<drm_i915_gem_exec_object2 *>(execbuf->buffers_ptr)[execbuf->buffer_count - 1].flags;
|
||||
auto execObjects = reinterpret_cast<const drm_i915_gem_exec_object2 *>(execbuf->buffers_ptr);
|
||||
this->execBuffers.push_back(*execbuf);
|
||||
for (uint32_t i = 0; i < execbuf->buffer_count; i++) {
|
||||
this->receivedBos.push_back(execObjects[i]);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
if (request == DRM_IOCTL_I915_GEM_USERPTR) {
|
||||
ioctlCount.gemUserptr++;
|
||||
auto userPtrParams = static_cast<drm_i915_gem_userptr *>(arg);
|
||||
userPtrParams->handle = returnHandle;
|
||||
returnHandle++;
|
||||
return 0;
|
||||
}
|
||||
if (request == DRM_IOCTL_I915_GEM_CREATE) {
|
||||
ioctlCount.gemCreate++;
|
||||
auto createParams = static_cast<drm_i915_gem_create *>(arg);
|
||||
this->createParamsSize = createParams->size;
|
||||
this->createParamsHandle = createParams->handle = 1u;
|
||||
@@ -169,6 +182,7 @@ int DrmMock::ioctl(unsigned long request, void *arg) {
|
||||
return 0;
|
||||
}
|
||||
if (request == DRM_IOCTL_I915_GEM_SET_TILING) {
|
||||
ioctlCount.gemSetTiling++;
|
||||
auto setTilingParams = static_cast<drm_i915_gem_set_tiling *>(arg);
|
||||
setTilingMode = setTilingParams->tiling_mode;
|
||||
setTilingHandle = setTilingParams->handle;
|
||||
@@ -176,6 +190,7 @@ int DrmMock::ioctl(unsigned long request, void *arg) {
|
||||
return 0;
|
||||
}
|
||||
if (request == DRM_IOCTL_PRIME_FD_TO_HANDLE) {
|
||||
ioctlCount.primeFdToHandle++;
|
||||
auto primeToHandleParams = static_cast<drm_prime_handle *>(arg);
|
||||
//return BO
|
||||
primeToHandleParams->handle = outputHandle;
|
||||
@@ -183,28 +198,35 @@ int DrmMock::ioctl(unsigned long request, void *arg) {
|
||||
return fdToHandleRetVal;
|
||||
}
|
||||
if (request == DRM_IOCTL_PRIME_HANDLE_TO_FD) {
|
||||
ioctlCount.handleToPrimeFd++;
|
||||
auto primeToFdParams = static_cast<drm_prime_handle *>(arg);
|
||||
primeToFdParams->fd = outputFd;
|
||||
return 0;
|
||||
}
|
||||
if (request == DRM_IOCTL_I915_GEM_GET_APERTURE) {
|
||||
ioctlCount.gemGetAperture++;
|
||||
auto aperture = static_cast<drm_i915_gem_get_aperture *>(arg);
|
||||
aperture->aper_available_size = gpuMemSize;
|
||||
aperture->aper_size = gpuMemSize;
|
||||
return 0;
|
||||
}
|
||||
if (request == DRM_IOCTL_I915_GEM_MMAP) {
|
||||
ioctlCount.gemMmap++;
|
||||
auto mmap_arg = static_cast<drm_i915_gem_mmap *>(arg);
|
||||
mmap_arg->addr_ptr = reinterpret_cast<__u64>(lockedPtr);
|
||||
return 0;
|
||||
}
|
||||
if (request == DRM_IOCTL_I915_GEM_WAIT) {
|
||||
ioctlCount.gemWait++;
|
||||
receivedGemWait = *static_cast<drm_i915_gem_wait *>(arg);
|
||||
return 0;
|
||||
}
|
||||
if (request == DRM_IOCTL_GEM_CLOSE) {
|
||||
return 0;
|
||||
ioctlCount.gemClose++;
|
||||
return storedRetValForGemClose;
|
||||
}
|
||||
if (request == DRM_IOCTL_I915_GET_RESET_STATS && arg != nullptr) {
|
||||
ioctlCount.gemResetStats++;
|
||||
auto outResetStats = static_cast<drm_i915_reset_stats *>(arg);
|
||||
for (const auto &resetStats : resetStatsToReturn) {
|
||||
if (resetStats.ctx_id == outResetStats->ctx_id) {
|
||||
@@ -217,6 +239,7 @@ int DrmMock::ioctl(unsigned long request, void *arg) {
|
||||
}
|
||||
|
||||
if (request == DRM_IOCTL_I915_QUERY && arg != nullptr) {
|
||||
ioctlCount.query++;
|
||||
auto queryArg = static_cast<drm_i915_query *>(arg);
|
||||
auto queryItemArg = reinterpret_cast<drm_i915_query_item *>(queryArg->items_ptr);
|
||||
storedQueryItem = *queryItemArg;
|
||||
@@ -252,7 +275,6 @@ int DrmMock::ioctl(unsigned long request, void *arg) {
|
||||
|
||||
return handleRemainingRequests(request, arg);
|
||||
}
|
||||
|
||||
int DrmMock::waitUserFence(uint32_t ctxIdx, uint64_t address, uint64_t value, ValueWidth dataWidth, int64_t timeout, uint16_t flags) {
|
||||
waitUserFenceParams.push_back({ctxIdx, address, value, dataWidth, timeout, flags});
|
||||
return Drm::waitUserFence(ctxIdx, address, value, dataWidth, timeout, flags);
|
||||
|
||||
@@ -12,6 +12,9 @@
|
||||
#include "shared/source/helpers/string.h"
|
||||
#include "shared/source/os_interface/linux/drm_neo.h"
|
||||
#include "shared/test/common/helpers/default_hw_info.h"
|
||||
#include "shared/test/common/os_interface/linux/device_command_stream_fixture.h"
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
#include <cstdio>
|
||||
#include <fstream>
|
||||
@@ -63,6 +66,12 @@ class DrmMock : public Drm {
|
||||
}
|
||||
DrmMock(RootDeviceEnvironment &rootDeviceEnvironment) : DrmMock(mockFd, rootDeviceEnvironment) {}
|
||||
|
||||
~DrmMock() {
|
||||
if (expectIoctlCallsOnDestruction) {
|
||||
EXPECT_EQ(expectedIoctlCallsOnDestruction, ioctlCallsCount);
|
||||
}
|
||||
}
|
||||
|
||||
int ioctl(unsigned long request, void *arg) override;
|
||||
int getErrno() override {
|
||||
if (baseErrno) {
|
||||
@@ -177,7 +186,6 @@ class DrmMock : public Drm {
|
||||
|
||||
drm_i915_gem_context_create_ext_setparam receivedContextCreateSetParam = {};
|
||||
uint32_t receivedContextCreateFlags = 0;
|
||||
uint32_t receivedCreateContextId = 0;
|
||||
uint32_t receivedDestroyContextId = 0;
|
||||
uint32_t ioctlCallsCount = 0;
|
||||
|
||||
@@ -188,9 +196,8 @@ class DrmMock : public Drm {
|
||||
bool queryPageFaultSupportCalled = false;
|
||||
|
||||
//DRM_IOCTL_I915_GEM_EXECBUFFER2
|
||||
drm_i915_gem_execbuffer2 execBuffer = {0};
|
||||
uint64_t bbFlags;
|
||||
|
||||
std::vector<drm_i915_gem_execbuffer2> execBuffers{};
|
||||
std::vector<drm_i915_gem_exec_object2> receivedBos{};
|
||||
//DRM_IOCTL_I915_GEM_CREATE
|
||||
__u64 createParamsSize = 0;
|
||||
__u32 createParamsHandle = 0;
|
||||
@@ -211,10 +218,23 @@ class DrmMock : public Drm {
|
||||
uint64_t lockedPtr[4];
|
||||
//DRM_IOCTL_I915_QUERY
|
||||
drm_i915_query_item storedQueryItem = {};
|
||||
//DRM_IOCTL_I915_GEM_WAIT
|
||||
drm_i915_gem_wait receivedGemWait = {};
|
||||
//DRM_IOCTL_I915_GEM_CONTEXT_CREATE_EXT
|
||||
uint32_t storedDrmContextId{};
|
||||
//DRM_IOCTL_GEM_CLOSE
|
||||
int storedRetValForGemClose = 0;
|
||||
|
||||
uint64_t storedGTTSize = 1ull << 47;
|
||||
uint64_t storedParamSseu = ULONG_MAX;
|
||||
|
||||
Ioctls ioctlCount{};
|
||||
Ioctls ioctlTearDownExpected{};
|
||||
bool ioctlTearDownExpects = false;
|
||||
|
||||
bool expectIoctlCallsOnDestruction = false;
|
||||
uint32_t expectedIoctlCallsOnDestruction = 0u;
|
||||
|
||||
virtual int handleRemainingRequests(unsigned long request, void *arg) { return -1; }
|
||||
|
||||
struct WaitUserFenceParams {
|
||||
|
||||
@@ -10,13 +10,15 @@
|
||||
const int mockFd = 33;
|
||||
const char *mockPciPath = "";
|
||||
|
||||
void DrmMockCustom::Ioctls::reset() {
|
||||
void Ioctls::reset() {
|
||||
total = 0;
|
||||
query = 0;
|
||||
execbuffer2 = 0;
|
||||
gemUserptr = 0;
|
||||
gemCreate = 0;
|
||||
gemSetTiling = 0;
|
||||
gemGetTiling = 0;
|
||||
gemGetAperture = 0;
|
||||
primeFdToHandle = 0;
|
||||
handleToPrimeFd = 0;
|
||||
gemMmap = 0;
|
||||
@@ -24,9 +26,11 @@ void DrmMockCustom::Ioctls::reset() {
|
||||
gemSetDomain = 0;
|
||||
gemWait = 0;
|
||||
gemClose = 0;
|
||||
gemResetStats = 0;
|
||||
regRead = 0;
|
||||
getParam = 0;
|
||||
contextGetParam = 0;
|
||||
contextSetParam = 0;
|
||||
contextCreate = 0;
|
||||
contextDestroy = 0;
|
||||
}
|
||||
|
||||
@@ -28,12 +28,34 @@ using NEO::RootDeviceEnvironment;
|
||||
extern const int mockFd;
|
||||
extern const char *mockPciPath;
|
||||
|
||||
class DrmMockImpl : public Drm {
|
||||
class Ioctls {
|
||||
public:
|
||||
using Drm::setupIoctlHelper;
|
||||
DrmMockImpl(int fd, RootDeviceEnvironment &rootDeviceEnvironment) : Drm(std::make_unique<HwDeviceIdDrm>(fd, mockPciPath), rootDeviceEnvironment){};
|
||||
|
||||
MOCK_METHOD2(ioctl, int(unsigned long request, void *arg));
|
||||
Ioctls() {
|
||||
reset();
|
||||
}
|
||||
void reset();
|
||||
std::atomic<int32_t> total;
|
||||
std::atomic<int32_t> query;
|
||||
std::atomic<int32_t> execbuffer2;
|
||||
std::atomic<int32_t> gemUserptr;
|
||||
std::atomic<int32_t> gemCreate;
|
||||
std::atomic<int32_t> gemSetTiling;
|
||||
std::atomic<int32_t> gemGetTiling;
|
||||
std::atomic<int32_t> gemGetAperture;
|
||||
std::atomic<int32_t> primeFdToHandle;
|
||||
std::atomic<int32_t> handleToPrimeFd;
|
||||
std::atomic<int32_t> gemMmap;
|
||||
std::atomic<int32_t> gemMmapOffset;
|
||||
std::atomic<int32_t> gemSetDomain;
|
||||
std::atomic<int32_t> gemWait;
|
||||
std::atomic<int32_t> gemClose;
|
||||
std::atomic<int32_t> gemResetStats;
|
||||
std::atomic<int32_t> regRead;
|
||||
std::atomic<int32_t> getParam;
|
||||
std::atomic<int32_t> contextGetParam;
|
||||
std::atomic<int32_t> contextSetParam;
|
||||
std::atomic<int32_t> contextCreate;
|
||||
std::atomic<int32_t> contextDestroy;
|
||||
};
|
||||
|
||||
class DrmMockSuccess : public Drm {
|
||||
@@ -81,30 +103,6 @@ class DrmMockCustom : public Drm {
|
||||
IoctlResExt(int32_t no, int32_t res) : no(1u, no), res(res) {}
|
||||
};
|
||||
|
||||
class Ioctls {
|
||||
public:
|
||||
void reset();
|
||||
|
||||
std::atomic<int32_t> total;
|
||||
std::atomic<int32_t> execbuffer2;
|
||||
std::atomic<int32_t> gemUserptr;
|
||||
std::atomic<int32_t> gemCreate;
|
||||
std::atomic<int32_t> gemSetTiling;
|
||||
std::atomic<int32_t> gemGetTiling;
|
||||
std::atomic<int32_t> primeFdToHandle;
|
||||
std::atomic<int32_t> handleToPrimeFd;
|
||||
std::atomic<int32_t> gemMmap;
|
||||
std::atomic<int32_t> gemMmapOffset;
|
||||
std::atomic<int32_t> gemSetDomain;
|
||||
std::atomic<int32_t> gemWait;
|
||||
std::atomic<int32_t> gemClose;
|
||||
std::atomic<int32_t> regRead;
|
||||
std::atomic<int32_t> getParam;
|
||||
std::atomic<int32_t> contextGetParam;
|
||||
std::atomic<int32_t> contextCreate;
|
||||
std::atomic<int32_t> contextDestroy;
|
||||
};
|
||||
|
||||
struct WaitUserFenceCall {
|
||||
uint64_t address = 0u;
|
||||
uint64_t value = 0u;
|
||||
@@ -154,8 +152,8 @@ class DrmMockCustom : public Drm {
|
||||
virtual void execBufferExtensions(void *execbuf) {
|
||||
}
|
||||
|
||||
Ioctls ioctl_cnt;
|
||||
Ioctls ioctl_expected;
|
||||
Ioctls ioctl_cnt{};
|
||||
Ioctls ioctl_expected{};
|
||||
|
||||
IoctlResExt NONE = {-1, 0};
|
||||
|
||||
|
||||
@@ -124,7 +124,7 @@ class DrmMemoryManagerFixture : public MemoryManagementFixture {
|
||||
RootDeviceEnvironment *rootDeviceEnvironment = nullptr;
|
||||
DrmMockCustom::IoctlResExt ioctlResExt = {0, 0};
|
||||
AllocationData allocationData{};
|
||||
DrmMockCustom::Ioctls additionalDestroyDeviceIoctls{};
|
||||
Ioctls additionalDestroyDeviceIoctls{};
|
||||
EnvironmentWithCsrWrapper environmentWrapper;
|
||||
DebugManagerStateRestore restore;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user