feature: Add ioctl helper function to synchronize userptr allocations
Related-To: NEO-12846 Signed-off-by: Slawomir Milczarek <slawomir.milczarek@intel.com>
This commit is contained in:
parent
5862cbcb9f
commit
edaac6ce43
|
@ -456,7 +456,7 @@ DrmAllocation *DrmMemoryManager::createAllocWithAlignmentFromUserptr(const Alloc
|
|||
}
|
||||
|
||||
auto ioctlHelper = getDrm(allocationData.rootDeviceIndex).getIoctlHelper();
|
||||
std::unique_ptr<BufferObject, BufferObject::Deleter> bo(ioctlHelper->allocUserptr(*this, reinterpret_cast<uintptr_t>(res), size, allocationData.rootDeviceIndex));
|
||||
std::unique_ptr<BufferObject, BufferObject::Deleter> bo(ioctlHelper->allocUserptr(*this, allocationData, reinterpret_cast<uintptr_t>(res), size, allocationData.rootDeviceIndex));
|
||||
if (!bo) {
|
||||
alignedFreeWrapper(res);
|
||||
return nullptr;
|
||||
|
@ -605,7 +605,7 @@ GraphicsAllocation *DrmMemoryManager::allocateGraphicsMemoryForNonSvmHostPtr(con
|
|||
return nullptr;
|
||||
}
|
||||
auto ioctlHelper = getDrm(rootDeviceIndex).getIoctlHelper();
|
||||
std::unique_ptr<BufferObject, BufferObject::Deleter> bo(ioctlHelper->allocUserptr(*this, reinterpret_cast<uintptr_t>(alignedPtr), realAllocationSize, rootDeviceIndex));
|
||||
std::unique_ptr<BufferObject, BufferObject::Deleter> bo(ioctlHelper->allocUserptr(*this, allocationData, reinterpret_cast<uintptr_t>(alignedPtr), realAllocationSize, rootDeviceIndex));
|
||||
if (!bo) {
|
||||
releaseGpuRange(reinterpret_cast<void *>(gpuVirtualAddress), alignedSize, rootDeviceIndex);
|
||||
return nullptr;
|
||||
|
@ -1386,6 +1386,7 @@ void DrmMemoryManager::handleFenceCompletion(GraphicsAllocation *allocation) {
|
|||
} else {
|
||||
static_cast<DrmAllocation *>(allocation)->getBO()->wait(-1);
|
||||
}
|
||||
drm.getIoctlHelper()->syncUserptrAllocs(*this);
|
||||
}
|
||||
|
||||
GraphicsAllocation *DrmMemoryManager::createGraphicsAllocationFromExistingStorage(AllocationProperties &properties, void *ptr, MultiGraphicsAllocation &multiGraphicsAllocation) {
|
||||
|
|
|
@ -126,6 +126,7 @@ class DrmMemoryManager : public MemoryManager {
|
|||
MOCKABLE_VIRTUAL void releaseGpuRange(void *address, size_t size, uint32_t rootDeviceIndex);
|
||||
|
||||
BufferObject *allocUserptr(uintptr_t address, size_t size, uint32_t rootDeviceIndex);
|
||||
size_t getUserptrAlignment();
|
||||
|
||||
decltype(&mmap) mmapFunction = mmap;
|
||||
decltype(&munmap) munmapFunction = munmap;
|
||||
|
@ -143,7 +144,6 @@ class DrmMemoryManager : public MemoryManager {
|
|||
void emitPinningRequest(BufferObject *bo, const AllocationData &allocationData) const;
|
||||
uint32_t getDefaultDrmContextId(uint32_t rootDeviceIndex) const;
|
||||
OsContextLinux *getDefaultOsContext(uint32_t rootDeviceIndex) const;
|
||||
size_t getUserptrAlignment();
|
||||
|
||||
StorageInfo createStorageInfoFromProperties(const AllocationProperties &properties) override;
|
||||
GraphicsAllocation *createGraphicsAllocation(OsHandleStorage &handleStorage, const AllocationData &allocationData) override;
|
||||
|
|
|
@ -115,7 +115,7 @@ void IoctlHelper::registerMemoryToUnmap(DrmAllocation &allocation, void *pointer
|
|||
return allocation.registerMemoryToUnmap(pointer, size, unmapFunction);
|
||||
}
|
||||
|
||||
BufferObject *IoctlHelper::allocUserptr(DrmMemoryManager &memoryManager, uintptr_t address, size_t size, uint32_t rootDeviceIndex) {
|
||||
BufferObject *IoctlHelper::allocUserptr(DrmMemoryManager &memoryManager, const AllocationData &allocData, uintptr_t address, size_t size, uint32_t rootDeviceIndex) {
|
||||
return memoryManager.allocUserptr(address, size, rootDeviceIndex);
|
||||
}
|
||||
|
||||
|
|
|
@ -229,7 +229,8 @@ class IoctlHelper {
|
|||
virtual void *mmapFunction(DrmMemoryManager &memoryManager, void *ptr, size_t size, int prot, int flags, int fd, off_t offset);
|
||||
virtual int munmapFunction(DrmMemoryManager &memoryManager, void *ptr, size_t size);
|
||||
virtual void registerMemoryToUnmap(DrmAllocation &allocation, void *pointer, size_t size, DrmAllocation::MemoryUnmapFunction unmapFunction);
|
||||
virtual BufferObject *allocUserptr(DrmMemoryManager &memoryManager, uintptr_t address, size_t size, uint32_t rootDeviceIndex);
|
||||
virtual BufferObject *allocUserptr(DrmMemoryManager &memoryManager, const AllocationData &allocData, uintptr_t address, size_t size, uint32_t rootDeviceIndex);
|
||||
virtual void syncUserptrAllocs(DrmMemoryManager &memoryManager) { return; };
|
||||
|
||||
virtual bool queryDeviceParams(uint32_t *moduleId, uint16_t *serverType) { return false; }
|
||||
|
||||
|
|
Loading…
Reference in New Issue