feature: Add support for importing OpaqueFd external semaphore
Related-To: NEO-14676 Signed-off-by: Raiyan Latif <raiyan.latif@intel.com>
This commit is contained in:
parent
145c11e9de
commit
0e0cf3f742
|
@ -202,6 +202,13 @@ struct PrimeHandle {
|
||||||
int32_t fileDescriptor;
|
int32_t fileDescriptor;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct SyncObjHandle {
|
||||||
|
uint32_t handle;
|
||||||
|
uint32_t flags;
|
||||||
|
int32_t fd;
|
||||||
|
uint32_t pad;
|
||||||
|
};
|
||||||
|
|
||||||
struct PrimaryContextHandle {
|
struct PrimaryContextHandle {
|
||||||
uint32_t handle;
|
uint32_t handle;
|
||||||
int32_t fd;
|
int32_t fd;
|
||||||
|
@ -271,6 +278,7 @@ enum class DrmIoctl {
|
||||||
gemClose,
|
gemClose,
|
||||||
primeFdToHandle,
|
primeFdToHandle,
|
||||||
primeHandleToFd,
|
primeHandleToFd,
|
||||||
|
syncObjFdToHandle,
|
||||||
gemVmBind,
|
gemVmBind,
|
||||||
gemVmUnbind,
|
gemVmUnbind,
|
||||||
gemWaitUserFence,
|
gemWaitUserFence,
|
||||||
|
|
|
@ -5,12 +5,71 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "shared/source/os_interface/linux/external_semaphore_linux.h"
|
||||||
|
|
||||||
#include "shared/source/os_interface/external_semaphore.h"
|
#include "shared/source/os_interface/external_semaphore.h"
|
||||||
|
#include "shared/source/os_interface/linux/drm_neo.h"
|
||||||
|
#include "shared/source/os_interface/linux/drm_wrappers.h"
|
||||||
|
#include "shared/source/os_interface/linux/ioctl_helper.h"
|
||||||
|
|
||||||
namespace NEO {
|
namespace NEO {
|
||||||
|
|
||||||
std::unique_ptr<ExternalSemaphore> ExternalSemaphore::create(OSInterface *osInterface, ExternalSemaphore::Type type, void *handle, int fd, const char *name) {
|
std::unique_ptr<ExternalSemaphore> ExternalSemaphore::create(OSInterface *osInterface, ExternalSemaphore::Type type, void *handle, int fd, const char *name) {
|
||||||
|
if (!osInterface) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto externalSemaphore = ExternalSemaphoreLinux::create(osInterface);
|
||||||
|
|
||||||
|
bool result = externalSemaphore->importSemaphore(nullptr, fd, 0, nullptr, type, false);
|
||||||
|
if (result == false) {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
return externalSemaphore;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::unique_ptr<ExternalSemaphoreLinux> ExternalSemaphoreLinux::create(OSInterface *osInterface) {
|
||||||
|
auto externalSemaphoreLinux = std::make_unique<ExternalSemaphoreLinux>();
|
||||||
|
externalSemaphoreLinux->osInterface = osInterface;
|
||||||
|
externalSemaphoreLinux->state = SemaphoreState::Initial;
|
||||||
|
|
||||||
|
return externalSemaphoreLinux;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ExternalSemaphoreLinux::importSemaphore(void *extHandle, int fd, uint32_t flags, const char *name, Type type, bool isNative) {
|
||||||
|
switch (type) {
|
||||||
|
case ExternalSemaphore::OpaqueFd:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
DEBUG_BREAK_IF(true);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto drm = this->osInterface->getDriverModel()->as<Drm>();
|
||||||
|
|
||||||
|
struct SyncObjHandle args = {};
|
||||||
|
args.fd = fd;
|
||||||
|
args.handle = 0;
|
||||||
|
|
||||||
|
auto ioctlHelper = drm->getIoctlHelper();
|
||||||
|
|
||||||
|
int ret = ioctlHelper->ioctl(DrmIoctl::syncObjFdToHandle, &args);
|
||||||
|
if (ret != 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
this->syncHandle = args.handle;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ExternalSemaphoreLinux::enqueueWait(uint64_t *fenceValue) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ExternalSemaphoreLinux::enqueueSignal(uint64_t *fenceValue) {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace NEO
|
} // namespace NEO
|
|
@ -0,0 +1,36 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2025 Intel Corporation
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "shared/source/device/device.h"
|
||||||
|
#include "shared/source/helpers/debug_helpers.h"
|
||||||
|
#include "shared/source/helpers/non_copyable_or_moveable.h"
|
||||||
|
#include "shared/source/os_interface/external_semaphore.h"
|
||||||
|
#include "shared/source/os_interface/os_interface.h"
|
||||||
|
|
||||||
|
#include <limits>
|
||||||
|
#include <memory>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
namespace NEO {
|
||||||
|
|
||||||
|
class ExternalSemaphoreLinux : public ExternalSemaphore {
|
||||||
|
public:
|
||||||
|
static std::unique_ptr<ExternalSemaphoreLinux> create(OSInterface *osInterface);
|
||||||
|
|
||||||
|
~ExternalSemaphoreLinux() override{};
|
||||||
|
|
||||||
|
bool importSemaphore(void *extHandle, int fd, uint32_t flags, const char *name, Type type, bool isNative) override;
|
||||||
|
|
||||||
|
bool enqueueWait(uint64_t *fenceValue) override;
|
||||||
|
bool enqueueSignal(uint64_t *fenceValue) override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
uint32_t syncHandle;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace NEO
|
|
@ -94,6 +94,8 @@ unsigned int IoctlHelper::getIoctlRequestValueBase(DrmIoctl ioctlRequest) const
|
||||||
return DRM_IOCTL_PRIME_FD_TO_HANDLE;
|
return DRM_IOCTL_PRIME_FD_TO_HANDLE;
|
||||||
case DrmIoctl::primeHandleToFd:
|
case DrmIoctl::primeHandleToFd:
|
||||||
return DRM_IOCTL_PRIME_HANDLE_TO_FD;
|
return DRM_IOCTL_PRIME_HANDLE_TO_FD;
|
||||||
|
case DrmIoctl::syncObjFdToHandle:
|
||||||
|
return DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE;
|
||||||
default:
|
default:
|
||||||
UNRECOVERABLE_IF(true);
|
UNRECOVERABLE_IF(true);
|
||||||
return 0u;
|
return 0u;
|
||||||
|
@ -108,6 +110,8 @@ std::string IoctlHelper::getIoctlStringBase(DrmIoctl ioctlRequest) const {
|
||||||
return "DRM_IOCTL_PRIME_FD_TO_HANDLE";
|
return "DRM_IOCTL_PRIME_FD_TO_HANDLE";
|
||||||
case DrmIoctl::primeHandleToFd:
|
case DrmIoctl::primeHandleToFd:
|
||||||
return "DRM_IOCTL_PRIME_HANDLE_TO_FD";
|
return "DRM_IOCTL_PRIME_HANDLE_TO_FD";
|
||||||
|
case DrmIoctl::syncObjFdToHandle:
|
||||||
|
return "DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE";
|
||||||
default:
|
default:
|
||||||
UNRECOVERABLE_IF(true);
|
UNRECOVERABLE_IF(true);
|
||||||
return "";
|
return "";
|
||||||
|
|
|
@ -1790,6 +1790,8 @@ unsigned int IoctlHelperXe::getIoctlRequestValue(DrmIoctl ioctlRequest) const {
|
||||||
RETURN_ME(DRM_IOCTL_PRIME_FD_TO_HANDLE);
|
RETURN_ME(DRM_IOCTL_PRIME_FD_TO_HANDLE);
|
||||||
case DrmIoctl::primeHandleToFd:
|
case DrmIoctl::primeHandleToFd:
|
||||||
RETURN_ME(DRM_IOCTL_PRIME_HANDLE_TO_FD);
|
RETURN_ME(DRM_IOCTL_PRIME_HANDLE_TO_FD);
|
||||||
|
case DrmIoctl::syncObjFdToHandle:
|
||||||
|
RETURN_ME(DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE);
|
||||||
case DrmIoctl::getResetStats:
|
case DrmIoctl::getResetStats:
|
||||||
RETURN_ME(DRM_IOCTL_XE_EXEC_QUEUE_GET_PROPERTY);
|
RETURN_ME(DRM_IOCTL_XE_EXEC_QUEUE_GET_PROPERTY);
|
||||||
case DrmIoctl::debuggerOpen:
|
case DrmIoctl::debuggerOpen:
|
||||||
|
@ -1839,6 +1841,8 @@ std::string IoctlHelperXe::getIoctlString(DrmIoctl ioctlRequest) const {
|
||||||
STRINGIFY_ME(DRM_IOCTL_PRIME_FD_TO_HANDLE);
|
STRINGIFY_ME(DRM_IOCTL_PRIME_FD_TO_HANDLE);
|
||||||
case DrmIoctl::primeHandleToFd:
|
case DrmIoctl::primeHandleToFd:
|
||||||
STRINGIFY_ME(DRM_IOCTL_PRIME_HANDLE_TO_FD);
|
STRINGIFY_ME(DRM_IOCTL_PRIME_HANDLE_TO_FD);
|
||||||
|
case DrmIoctl::syncObjFdToHandle:
|
||||||
|
STRINGIFY_ME(DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE);
|
||||||
case DrmIoctl::debuggerOpen:
|
case DrmIoctl::debuggerOpen:
|
||||||
STRINGIFY_ME(DRM_IOCTL_XE_EUDEBUG_CONNECT);
|
STRINGIFY_ME(DRM_IOCTL_XE_EUDEBUG_CONNECT);
|
||||||
case DrmIoctl::metadataCreate:
|
case DrmIoctl::metadataCreate:
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2021-2024 Intel Corporation
|
* Copyright (C) 2021-2025 Intel Corporation
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*
|
*
|
||||||
|
@ -140,6 +140,12 @@ int DrmMockCustom::ioctl(DrmIoctl request, void *arg) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
|
case DrmIoctl::syncObjFdToHandle: {
|
||||||
|
ioctlCnt.syncObjFdToHandle++;
|
||||||
|
if (failOnSyncObjFdToHandle == true) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
} break;
|
||||||
case DrmIoctl::gemSetDomain: {
|
case DrmIoctl::gemSetDomain: {
|
||||||
auto setDomainParams = static_cast<NEO::GemSetDomain *>(arg);
|
auto setDomainParams = static_cast<NEO::GemSetDomain *>(arg);
|
||||||
setDomainHandle = setDomainParams->handle;
|
setDomainHandle = setDomainParams->handle;
|
||||||
|
|
|
@ -45,6 +45,7 @@ class Ioctls {
|
||||||
std::atomic<int32_t> gemVmDestroy;
|
std::atomic<int32_t> gemVmDestroy;
|
||||||
std::atomic<int32_t> primeFdToHandle;
|
std::atomic<int32_t> primeFdToHandle;
|
||||||
std::atomic<int32_t> handleToPrimeFd;
|
std::atomic<int32_t> handleToPrimeFd;
|
||||||
|
std::atomic<int32_t> syncObjFdToHandle;
|
||||||
std::atomic<int32_t> gemMmapOffset;
|
std::atomic<int32_t> gemMmapOffset;
|
||||||
std::atomic<int32_t> gemSetDomain;
|
std::atomic<int32_t> gemSetDomain;
|
||||||
std::atomic<int32_t> gemWait;
|
std::atomic<int32_t> gemWait;
|
||||||
|
@ -276,6 +277,7 @@ struct DrmMockCustom : public Drm {
|
||||||
bool failOnPrimeFdToHandle = false;
|
bool failOnPrimeFdToHandle = false;
|
||||||
bool failOnSecondPrimeFdToHandle = false;
|
bool failOnSecondPrimeFdToHandle = false;
|
||||||
bool failOnPrimeHandleToFd = false;
|
bool failOnPrimeHandleToFd = false;
|
||||||
|
bool failOnSyncObjFdToHandle = false;
|
||||||
|
|
||||||
// DRM_IOCTL_I915_GEM_CREATE_EXT
|
// DRM_IOCTL_I915_GEM_CREATE_EXT
|
||||||
uint64_t createExtSize = 0;
|
uint64_t createExtSize = 0;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2021-2024 Intel Corporation
|
* Copyright (C) 2021-2025 Intel Corporation
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*
|
*
|
||||||
|
@ -124,6 +124,7 @@ DG1TEST_F(IoctlHelperTestsDg1, whenGettingIoctlRequestStringThenProperStringIsRe
|
||||||
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::query).c_str(), "DRM_IOCTL_I915_QUERY");
|
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::query).c_str(), "DRM_IOCTL_I915_QUERY");
|
||||||
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::primeFdToHandle).c_str(), "DRM_IOCTL_PRIME_FD_TO_HANDLE");
|
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::primeFdToHandle).c_str(), "DRM_IOCTL_PRIME_FD_TO_HANDLE");
|
||||||
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::primeHandleToFd).c_str(), "DRM_IOCTL_PRIME_HANDLE_TO_FD");
|
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::primeHandleToFd).c_str(), "DRM_IOCTL_PRIME_HANDLE_TO_FD");
|
||||||
|
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::syncObjFdToHandle).c_str(), "DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE");
|
||||||
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::gemContextCreateExt).c_str(), "DRM_IOCTL_I915_GEM_CONTEXT_CREATE_EXT");
|
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::gemContextCreateExt).c_str(), "DRM_IOCTL_I915_GEM_CONTEXT_CREATE_EXT");
|
||||||
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::gemMmapOffset).c_str(), "DRM_IOCTL_I915_GEM_MMAP_OFFSET");
|
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::gemMmapOffset).c_str(), "DRM_IOCTL_I915_GEM_MMAP_OFFSET");
|
||||||
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::gemVmCreate).c_str(), "DRM_IOCTL_I915_GEM_VM_CREATE");
|
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::gemVmCreate).c_str(), "DRM_IOCTL_I915_GEM_VM_CREATE");
|
||||||
|
@ -152,6 +153,7 @@ DG1TEST_F(IoctlHelperTestsDg1, whenGettingIoctlRequestValueThenPropertValueIsRet
|
||||||
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::query), static_cast<unsigned int>(DRM_IOCTL_I915_QUERY));
|
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::query), static_cast<unsigned int>(DRM_IOCTL_I915_QUERY));
|
||||||
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::primeFdToHandle), static_cast<unsigned int>(DRM_IOCTL_PRIME_FD_TO_HANDLE));
|
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::primeFdToHandle), static_cast<unsigned int>(DRM_IOCTL_PRIME_FD_TO_HANDLE));
|
||||||
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::primeHandleToFd), static_cast<unsigned int>(DRM_IOCTL_PRIME_HANDLE_TO_FD));
|
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::primeHandleToFd), static_cast<unsigned int>(DRM_IOCTL_PRIME_HANDLE_TO_FD));
|
||||||
|
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::syncObjFdToHandle), static_cast<unsigned int>(DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE));
|
||||||
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::gemContextCreateExt), static_cast<unsigned int>(DRM_IOCTL_I915_GEM_CONTEXT_CREATE_EXT));
|
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::gemContextCreateExt), static_cast<unsigned int>(DRM_IOCTL_I915_GEM_CONTEXT_CREATE_EXT));
|
||||||
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::gemMmapOffset), static_cast<unsigned int>(DRM_IOCTL_I915_GEM_MMAP_OFFSET));
|
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::gemMmapOffset), static_cast<unsigned int>(DRM_IOCTL_I915_GEM_MMAP_OFFSET));
|
||||||
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::gemVmCreate), static_cast<unsigned int>(DRM_IOCTL_I915_GEM_VM_CREATE));
|
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::gemVmCreate), static_cast<unsigned int>(DRM_IOCTL_I915_GEM_VM_CREATE));
|
||||||
|
|
|
@ -73,6 +73,7 @@ TEST_F(IoctlPrelimHelperTests, whenGettingIoctlRequestValueThenPropertValueIsRet
|
||||||
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::query), static_cast<unsigned int>(DRM_IOCTL_I915_QUERY));
|
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::query), static_cast<unsigned int>(DRM_IOCTL_I915_QUERY));
|
||||||
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::primeFdToHandle), static_cast<unsigned int>(DRM_IOCTL_PRIME_FD_TO_HANDLE));
|
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::primeFdToHandle), static_cast<unsigned int>(DRM_IOCTL_PRIME_FD_TO_HANDLE));
|
||||||
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::primeHandleToFd), static_cast<unsigned int>(DRM_IOCTL_PRIME_HANDLE_TO_FD));
|
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::primeHandleToFd), static_cast<unsigned int>(DRM_IOCTL_PRIME_HANDLE_TO_FD));
|
||||||
|
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::syncObjFdToHandle), static_cast<unsigned int>(DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE));
|
||||||
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::gemVmBind), static_cast<unsigned int>(PRELIM_DRM_IOCTL_I915_GEM_VM_BIND));
|
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::gemVmBind), static_cast<unsigned int>(PRELIM_DRM_IOCTL_I915_GEM_VM_BIND));
|
||||||
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::gemVmUnbind), static_cast<unsigned int>(PRELIM_DRM_IOCTL_I915_GEM_VM_UNBIND));
|
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::gemVmUnbind), static_cast<unsigned int>(PRELIM_DRM_IOCTL_I915_GEM_VM_UNBIND));
|
||||||
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::gemWaitUserFence), static_cast<unsigned int>(PRELIM_DRM_IOCTL_I915_GEM_WAIT_USER_FENCE));
|
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::gemWaitUserFence), static_cast<unsigned int>(PRELIM_DRM_IOCTL_I915_GEM_WAIT_USER_FENCE));
|
||||||
|
@ -125,6 +126,7 @@ TEST_F(IoctlPrelimHelperTests, whenGettingIoctlRequestStringThenProperStringIsRe
|
||||||
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::query).c_str(), "DRM_IOCTL_I915_QUERY");
|
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::query).c_str(), "DRM_IOCTL_I915_QUERY");
|
||||||
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::primeFdToHandle).c_str(), "DRM_IOCTL_PRIME_FD_TO_HANDLE");
|
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::primeFdToHandle).c_str(), "DRM_IOCTL_PRIME_FD_TO_HANDLE");
|
||||||
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::primeHandleToFd).c_str(), "DRM_IOCTL_PRIME_HANDLE_TO_FD");
|
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::primeHandleToFd).c_str(), "DRM_IOCTL_PRIME_HANDLE_TO_FD");
|
||||||
|
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::syncObjFdToHandle).c_str(), "DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE");
|
||||||
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::gemVmBind).c_str(), "PRELIM_DRM_IOCTL_I915_GEM_VM_BIND");
|
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::gemVmBind).c_str(), "PRELIM_DRM_IOCTL_I915_GEM_VM_BIND");
|
||||||
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::gemVmUnbind).c_str(), "PRELIM_DRM_IOCTL_I915_GEM_VM_UNBIND");
|
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::gemVmUnbind).c_str(), "PRELIM_DRM_IOCTL_I915_GEM_VM_UNBIND");
|
||||||
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::gemWaitUserFence).c_str(), "PRELIM_DRM_IOCTL_I915_GEM_WAIT_USER_FENCE");
|
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::gemWaitUserFence).c_str(), "PRELIM_DRM_IOCTL_I915_GEM_WAIT_USER_FENCE");
|
||||||
|
|
|
@ -178,6 +178,7 @@ TEST(IoctlHelperUpstreamTest, whenGettingIoctlRequestStringThenProperStringIsRet
|
||||||
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::query).c_str(), "DRM_IOCTL_I915_QUERY");
|
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::query).c_str(), "DRM_IOCTL_I915_QUERY");
|
||||||
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::primeFdToHandle).c_str(), "DRM_IOCTL_PRIME_FD_TO_HANDLE");
|
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::primeFdToHandle).c_str(), "DRM_IOCTL_PRIME_FD_TO_HANDLE");
|
||||||
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::primeHandleToFd).c_str(), "DRM_IOCTL_PRIME_HANDLE_TO_FD");
|
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::primeHandleToFd).c_str(), "DRM_IOCTL_PRIME_HANDLE_TO_FD");
|
||||||
|
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::syncObjFdToHandle).c_str(), "DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE");
|
||||||
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::gemCreateExt).c_str(), "DRM_IOCTL_I915_GEM_CREATE_EXT");
|
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::gemCreateExt).c_str(), "DRM_IOCTL_I915_GEM_CREATE_EXT");
|
||||||
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::gemMmapOffset).c_str(), "DRM_IOCTL_I915_GEM_MMAP_OFFSET");
|
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::gemMmapOffset).c_str(), "DRM_IOCTL_I915_GEM_MMAP_OFFSET");
|
||||||
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::gemVmCreate).c_str(), "DRM_IOCTL_I915_GEM_VM_CREATE");
|
EXPECT_STREQ(ioctlHelper.getIoctlString(DrmIoctl::gemVmCreate).c_str(), "DRM_IOCTL_I915_GEM_VM_CREATE");
|
||||||
|
@ -211,6 +212,7 @@ TEST(IoctlHelperUpstreamTest, whenGettingIoctlRequestValueThenProperValueIsRetur
|
||||||
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::query), static_cast<unsigned int>(DRM_IOCTL_I915_QUERY));
|
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::query), static_cast<unsigned int>(DRM_IOCTL_I915_QUERY));
|
||||||
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::primeFdToHandle), static_cast<unsigned int>(DRM_IOCTL_PRIME_FD_TO_HANDLE));
|
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::primeFdToHandle), static_cast<unsigned int>(DRM_IOCTL_PRIME_FD_TO_HANDLE));
|
||||||
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::primeHandleToFd), static_cast<unsigned int>(DRM_IOCTL_PRIME_HANDLE_TO_FD));
|
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::primeHandleToFd), static_cast<unsigned int>(DRM_IOCTL_PRIME_HANDLE_TO_FD));
|
||||||
|
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::syncObjFdToHandle), static_cast<unsigned int>(DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE));
|
||||||
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::gemCreateExt), static_cast<unsigned int>(DRM_IOCTL_I915_GEM_CREATE_EXT));
|
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::gemCreateExt), static_cast<unsigned int>(DRM_IOCTL_I915_GEM_CREATE_EXT));
|
||||||
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::gemMmapOffset), static_cast<unsigned int>(DRM_IOCTL_I915_GEM_MMAP_OFFSET));
|
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::gemMmapOffset), static_cast<unsigned int>(DRM_IOCTL_I915_GEM_MMAP_OFFSET));
|
||||||
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::gemVmCreate), static_cast<unsigned int>(DRM_IOCTL_I915_GEM_VM_CREATE));
|
EXPECT_EQ(ioctlHelper.getIoctlRequestValue(DrmIoctl::gemVmCreate), static_cast<unsigned int>(DRM_IOCTL_I915_GEM_VM_CREATE));
|
||||||
|
|
|
@ -522,6 +522,7 @@ TEST_F(IoctlHelperXeTest, givenIoctlHelperXeWhenCallingAnyMethodThenDummyValueIs
|
||||||
verifyIoctlString(DrmIoctl::gemWaitUserFence, "DRM_IOCTL_XE_WAIT_USER_FENCE");
|
verifyIoctlString(DrmIoctl::gemWaitUserFence, "DRM_IOCTL_XE_WAIT_USER_FENCE");
|
||||||
verifyIoctlString(DrmIoctl::primeFdToHandle, "DRM_IOCTL_PRIME_FD_TO_HANDLE");
|
verifyIoctlString(DrmIoctl::primeFdToHandle, "DRM_IOCTL_PRIME_FD_TO_HANDLE");
|
||||||
verifyIoctlString(DrmIoctl::primeHandleToFd, "DRM_IOCTL_PRIME_HANDLE_TO_FD");
|
verifyIoctlString(DrmIoctl::primeHandleToFd, "DRM_IOCTL_PRIME_HANDLE_TO_FD");
|
||||||
|
verifyIoctlString(DrmIoctl::syncObjFdToHandle, "DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE");
|
||||||
verifyIoctlString(DrmIoctl::getResetStats, "DRM_IOCTL_XE_EXEC_QUEUE_GET_PROPERTY");
|
verifyIoctlString(DrmIoctl::getResetStats, "DRM_IOCTL_XE_EXEC_QUEUE_GET_PROPERTY");
|
||||||
|
|
||||||
EXPECT_TRUE(xeIoctlHelper->completionFenceExtensionSupported(true));
|
EXPECT_TRUE(xeIoctlHelper->completionFenceExtensionSupported(true));
|
||||||
|
@ -583,6 +584,7 @@ TEST_F(IoctlHelperXeTest, whenGettingIoctlRequestValueThenPropertValueIsReturned
|
||||||
verifyIoctlRequestValue(DRM_IOCTL_XE_EXEC_QUEUE_DESTROY, DrmIoctl::gemContextDestroy);
|
verifyIoctlRequestValue(DRM_IOCTL_XE_EXEC_QUEUE_DESTROY, DrmIoctl::gemContextDestroy);
|
||||||
verifyIoctlRequestValue(DRM_IOCTL_PRIME_FD_TO_HANDLE, DrmIoctl::primeFdToHandle);
|
verifyIoctlRequestValue(DRM_IOCTL_PRIME_FD_TO_HANDLE, DrmIoctl::primeFdToHandle);
|
||||||
verifyIoctlRequestValue(DRM_IOCTL_PRIME_HANDLE_TO_FD, DrmIoctl::primeHandleToFd);
|
verifyIoctlRequestValue(DRM_IOCTL_PRIME_HANDLE_TO_FD, DrmIoctl::primeHandleToFd);
|
||||||
|
verifyIoctlRequestValue(DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE, DrmIoctl::syncObjFdToHandle);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(IoctlHelperXeTest, verifyPublicFunctions) {
|
TEST_F(IoctlHelperXeTest, verifyPublicFunctions) {
|
||||||
|
|
|
@ -16,11 +16,49 @@
|
||||||
|
|
||||||
namespace NEO {
|
namespace NEO {
|
||||||
|
|
||||||
using DrmExternalSemaphoreTest = Test<DrmMemoryManagerFixture>;
|
using DrmExternalSemaphoreTest = Test<DrmMemoryManagerFixtureWithoutQuietIoctlExpectation>;
|
||||||
|
|
||||||
TEST_F(DrmExternalSemaphoreTest, givenNullOsInterfaceWhenCreateExternalSemaphoreIsCalledThenNullptrIsReturned) {
|
TEST_F(DrmExternalSemaphoreTest, givenNullOsInterfaceWhenCreateExternalSemaphoreIsCalledThenNullptrIsReturned) {
|
||||||
auto externalSemaphore = ExternalSemaphore::create(nullptr, ExternalSemaphore::Type::OpaqueFd, nullptr, 0u, nullptr);
|
auto externalSemaphore = ExternalSemaphore::create(nullptr, ExternalSemaphore::Type::OpaqueFd, nullptr, 0u, nullptr);
|
||||||
EXPECT_EQ(externalSemaphore, nullptr);
|
EXPECT_EQ(externalSemaphore, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(DrmExternalSemaphoreTest, givenInvalidLinuxSemaphoreTypeWhenCreateExternalSemaphoreIsCalledThenNullptrIsReturned) {
|
||||||
|
auto externalSemaphore = ExternalSemaphore::create(executionEnvironment->rootDeviceEnvironments[0]->osInterface.get(), ExternalSemaphore::Type::OpaqueWin32, nullptr, 0u, nullptr);
|
||||||
|
EXPECT_EQ(externalSemaphore, nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(DrmExternalSemaphoreTest, givenOpaqueFdSemaphoreTypeWhenCreateExternalSemaphoreIsCalledThenNonNullptrIsReturned) {
|
||||||
|
auto externalSemaphore = ExternalSemaphore::create(executionEnvironment->rootDeviceEnvironments[0]->osInterface.get(), ExternalSemaphore::Type::OpaqueFd, nullptr, 0u, nullptr);
|
||||||
|
EXPECT_NE(externalSemaphore, nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(DrmExternalSemaphoreTest, givenIoctlFailsWhenCreateExternalSemaphoreIsCalledThenNullptrIsReturned) {
|
||||||
|
auto mockDrm = static_cast<DrmMockCustom *>(executionEnvironment->rootDeviceEnvironments[0]->osInterface->getDriverModel()->as<Drm>());
|
||||||
|
mockDrm->failOnSyncObjFdToHandle = true;
|
||||||
|
EXPECT_EQ(mockDrm->ioctlCnt.syncObjFdToHandle, 0);
|
||||||
|
|
||||||
|
auto externalSemaphore = ExternalSemaphore::create(executionEnvironment->rootDeviceEnvironments[0]->osInterface.get(), ExternalSemaphore::Type::OpaqueFd, nullptr, 0u, nullptr);
|
||||||
|
EXPECT_EQ(externalSemaphore, nullptr);
|
||||||
|
EXPECT_EQ(mockDrm->ioctlCnt.syncObjFdToHandle, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(DrmExternalSemaphoreTest, givenOpaqueFdSemaphoreWhenEnqueueSignalIsCalledThenFalseIsReturned) {
|
||||||
|
auto externalSemaphore = ExternalSemaphore::create(executionEnvironment->rootDeviceEnvironments[0]->osInterface.get(), ExternalSemaphore::Type::OpaqueFd, nullptr, 0u, nullptr);
|
||||||
|
EXPECT_NE(externalSemaphore, nullptr);
|
||||||
|
|
||||||
|
uint64_t fenceValue = 1u;
|
||||||
|
auto result = externalSemaphore->enqueueSignal(&fenceValue);
|
||||||
|
EXPECT_EQ(result, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(DrmExternalSemaphoreTest, givenOpaqueFdSemaphoreWhenEnqueueWaitIsCalledThenFalseIsReturned) {
|
||||||
|
auto externalSemaphore = ExternalSemaphore::create(executionEnvironment->rootDeviceEnvironments[0]->osInterface.get(), ExternalSemaphore::Type::OpaqueFd, nullptr, 0u, nullptr);
|
||||||
|
EXPECT_NE(externalSemaphore, nullptr);
|
||||||
|
|
||||||
|
uint64_t fenceValue = 1u;
|
||||||
|
auto result = externalSemaphore->enqueueWait(&fenceValue);
|
||||||
|
EXPECT_EQ(result, false);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace NEO
|
} // namespace NEO
|
Loading…
Reference in New Issue