mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-19 06:24:51 +08:00
Revert "fix: Set vmbind user fence when makeMemoryResident"
This reverts commit 80dc4fb43a.
Signed-off-by: Compute-Runtime-Validation <compute-runtime-validation@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
635f69e54a
commit
d23249b061
@@ -98,11 +98,11 @@ void DebuggerL0::initialize() {
|
||||
|
||||
NEO::MemoryOperationsHandler *memoryOperationsIface = rootDeviceEnvironment.memoryOperationsInterface.get();
|
||||
if (memoryOperationsIface) {
|
||||
memoryOperationsIface->makeResident(device, ArrayRef<NEO::GraphicsAllocation *>(&moduleDebugArea, 1), false, false);
|
||||
memoryOperationsIface->makeResident(device, ArrayRef<NEO::GraphicsAllocation *>(&moduleDebugArea, 1), false);
|
||||
auto numSubDevices = device->getNumSubDevices();
|
||||
for (uint32_t i = 0; i < numSubDevices; i++) {
|
||||
auto subDevice = device->getSubDevice(i);
|
||||
memoryOperationsIface->makeResident(subDevice, ArrayRef<NEO::GraphicsAllocation *>(&moduleDebugArea, 1), false, false);
|
||||
memoryOperationsIface->makeResident(subDevice, ArrayRef<NEO::GraphicsAllocation *>(&moduleDebugArea, 1), false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -142,7 +142,7 @@ void DebuggerL0::notifyModuleLoadAllocations(Device *device, const StackVec<NEO:
|
||||
NEO::MemoryOperationsHandler *memoryOperationsIface = device->getRootDeviceEnvironment().memoryOperationsInterface.get();
|
||||
if (memoryOperationsIface) {
|
||||
for (auto gfxAlloc : allocs) {
|
||||
memoryOperationsIface->makeResident(device, ArrayRef<NEO::GraphicsAllocation *>(&gfxAlloc, 1), false, false);
|
||||
memoryOperationsIface->makeResident(device, ArrayRef<NEO::GraphicsAllocation *>(&gfxAlloc, 1), false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -420,7 +420,7 @@ bool DirectSubmissionHw<GfxFamily, Dispatcher>::allocateResources() {
|
||||
|
||||
template <typename GfxFamily, typename Dispatcher>
|
||||
bool DirectSubmissionHw<GfxFamily, Dispatcher>::makeResourcesResident(DirectSubmissionAllocations &allocations) {
|
||||
auto ret = memoryOperationHandler->makeResidentWithinOsContext(&this->osContext, ArrayRef<GraphicsAllocation *>(allocations), false, false) == MemoryOperationsStatus::success;
|
||||
auto ret = memoryOperationHandler->makeResidentWithinOsContext(&this->osContext, ArrayRef<GraphicsAllocation *>(allocations), false) == MemoryOperationsStatus::success;
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -1140,7 +1140,7 @@ inline GraphicsAllocation *DirectSubmissionHw<GfxFamily, Dispatcher>::switchRing
|
||||
nextAllocation = memoryManager->allocateGraphicsMemoryWithProperties(commandStreamAllocationProperties);
|
||||
this->currentRingBuffer = static_cast<uint32_t>(this->ringBuffers.size());
|
||||
this->ringBuffers.emplace_back(0ull, nextAllocation);
|
||||
auto ret = memoryOperationHandler->makeResidentWithinOsContext(&this->osContext, ArrayRef<GraphicsAllocation *>(&nextAllocation, 1u), false, false) == MemoryOperationsStatus::success;
|
||||
auto ret = memoryOperationHandler->makeResidentWithinOsContext(&this->osContext, ArrayRef<GraphicsAllocation *>(&nextAllocation, 1u), false) == MemoryOperationsStatus::success;
|
||||
UNRECOVERABLE_IF(!ret);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -153,7 +153,7 @@ GraphicsAllocation *BindlessHeapsHelper::getHeapAllocation(size_t heapSize, size
|
||||
|
||||
GraphicsAllocation *allocation = memManager->allocateGraphicsMemoryWithProperties(properties);
|
||||
MemoryOperationsHandler *memoryOperationsIface = rootDevice->getRootDeviceEnvironmentRef().memoryOperationsInterface.get();
|
||||
auto result = memoryOperationsIface->makeResident(rootDevice, ArrayRef<NEO::GraphicsAllocation *>(&allocation, 1), false, false);
|
||||
auto result = memoryOperationsIface->makeResident(rootDevice, ArrayRef<NEO::GraphicsAllocation *>(&allocation, 1), false);
|
||||
if (result != NEO::MemoryOperationsStatus::success) {
|
||||
memManager->freeGraphicsMemory(allocation);
|
||||
return nullptr;
|
||||
|
||||
@@ -20,13 +20,13 @@ class MemoryOperationsHandler {
|
||||
MemoryOperationsHandler() = default;
|
||||
virtual ~MemoryOperationsHandler() = default;
|
||||
|
||||
virtual MemoryOperationsStatus makeResident(Device *device, ArrayRef<GraphicsAllocation *> gfxAllocations, bool isDummyExecNeeded, const bool forcePagingFence) = 0;
|
||||
virtual MemoryOperationsStatus makeResident(Device *device, ArrayRef<GraphicsAllocation *> gfxAllocations, bool isDummyExecNeeded) = 0;
|
||||
virtual MemoryOperationsStatus lock(Device *device, ArrayRef<GraphicsAllocation *> gfxAllocations) = 0;
|
||||
virtual MemoryOperationsStatus evict(Device *device, GraphicsAllocation &gfxAllocation) = 0;
|
||||
virtual MemoryOperationsStatus isResident(Device *device, GraphicsAllocation &gfxAllocation) = 0;
|
||||
virtual MemoryOperationsStatus free(Device *device, GraphicsAllocation &gfxAllocation) { return MemoryOperationsStatus::success; }
|
||||
|
||||
virtual MemoryOperationsStatus makeResidentWithinOsContext(OsContext *osContext, ArrayRef<GraphicsAllocation *> gfxAllocations, bool evictable, const bool forcePagingFence) = 0;
|
||||
virtual MemoryOperationsStatus makeResidentWithinOsContext(OsContext *osContext, ArrayRef<GraphicsAllocation *> gfxAllocations, bool evictable) = 0;
|
||||
virtual MemoryOperationsStatus evictWithinOsContext(OsContext *osContext, GraphicsAllocation &gfxAllocation) = 0;
|
||||
virtual void processFlushResidency(CommandStreamReceiver *csr) {}
|
||||
};
|
||||
|
||||
@@ -26,7 +26,7 @@ AubMemoryOperationsHandler::AubMemoryOperationsHandler(aub_stream::AubManager *a
|
||||
this->aubManager = aubManager;
|
||||
}
|
||||
|
||||
MemoryOperationsStatus AubMemoryOperationsHandler::makeResident(Device *device, ArrayRef<GraphicsAllocation *> gfxAllocations, bool isDummyExecNeeded, const bool forcePagingFence) {
|
||||
MemoryOperationsStatus AubMemoryOperationsHandler::makeResident(Device *device, ArrayRef<GraphicsAllocation *> gfxAllocations, bool isDummyExecNeeded) {
|
||||
if (!aubManager) {
|
||||
return MemoryOperationsStatus::deviceUninitialized;
|
||||
}
|
||||
@@ -76,7 +76,7 @@ MemoryOperationsStatus AubMemoryOperationsHandler::makeResident(Device *device,
|
||||
}
|
||||
|
||||
MemoryOperationsStatus AubMemoryOperationsHandler::lock(Device *device, ArrayRef<GraphicsAllocation *> gfxAllocations) {
|
||||
return makeResident(device, gfxAllocations, false, false);
|
||||
return makeResident(device, gfxAllocations, false);
|
||||
}
|
||||
|
||||
MemoryOperationsStatus AubMemoryOperationsHandler::evict(Device *device, GraphicsAllocation &gfxAllocation) {
|
||||
@@ -98,8 +98,8 @@ MemoryOperationsStatus AubMemoryOperationsHandler::free(Device *device, Graphics
|
||||
return MemoryOperationsStatus::success;
|
||||
}
|
||||
|
||||
MemoryOperationsStatus AubMemoryOperationsHandler::makeResidentWithinOsContext(OsContext *osContext, ArrayRef<GraphicsAllocation *> gfxAllocations, bool evictable, const bool forcePagingFence) {
|
||||
return makeResident(nullptr, gfxAllocations, false, forcePagingFence);
|
||||
MemoryOperationsStatus AubMemoryOperationsHandler::makeResidentWithinOsContext(OsContext *osContext, ArrayRef<GraphicsAllocation *> gfxAllocations, bool evictable) {
|
||||
return makeResident(nullptr, gfxAllocations, false);
|
||||
}
|
||||
|
||||
MemoryOperationsStatus AubMemoryOperationsHandler::evictWithinOsContext(OsContext *osContext, GraphicsAllocation &gfxAllocation) {
|
||||
|
||||
@@ -22,13 +22,13 @@ class AubMemoryOperationsHandler : public MemoryOperationsHandler {
|
||||
AubMemoryOperationsHandler(aub_stream::AubManager *aubManager);
|
||||
~AubMemoryOperationsHandler() override = default;
|
||||
|
||||
MemoryOperationsStatus makeResident(Device *device, ArrayRef<GraphicsAllocation *> gfxAllocations, bool isDummyExecNeeded, const bool forcePagingFence) override;
|
||||
MemoryOperationsStatus makeResident(Device *device, ArrayRef<GraphicsAllocation *> gfxAllocations, bool isDummyExecNeeded) override;
|
||||
MemoryOperationsStatus lock(Device *device, ArrayRef<GraphicsAllocation *> gfxAllocations) override;
|
||||
MemoryOperationsStatus evict(Device *device, GraphicsAllocation &gfxAllocation) override;
|
||||
MemoryOperationsStatus isResident(Device *device, GraphicsAllocation &gfxAllocation) override;
|
||||
MemoryOperationsStatus free(Device *device, GraphicsAllocation &gfxAllocation) override;
|
||||
|
||||
MemoryOperationsStatus makeResidentWithinOsContext(OsContext *osContext, ArrayRef<GraphicsAllocation *> gfxAllocations, bool evictable, const bool forcePagingFence) override;
|
||||
MemoryOperationsStatus makeResidentWithinOsContext(OsContext *osContext, ArrayRef<GraphicsAllocation *> gfxAllocations, bool evictable) override;
|
||||
MemoryOperationsStatus evictWithinOsContext(OsContext *osContext, GraphicsAllocation &gfxAllocation) override;
|
||||
|
||||
void processFlushResidency(CommandStreamReceiver *csr) override;
|
||||
|
||||
@@ -241,11 +241,11 @@ bool DrmAllocation::prefetchBOWithChunking(Drm *drm) {
|
||||
return success;
|
||||
}
|
||||
|
||||
int DrmAllocation::makeBOsResident(OsContext *osContext, uint32_t vmHandleId, std::vector<BufferObject *> *bufferObjects, bool bind, const bool forcePagingFence) {
|
||||
int DrmAllocation::makeBOsResident(OsContext *osContext, uint32_t vmHandleId, std::vector<BufferObject *> *bufferObjects, bool bind) {
|
||||
if (this->fragmentsStorage.fragmentCount) {
|
||||
for (unsigned int f = 0; f < this->fragmentsStorage.fragmentCount; f++) {
|
||||
if (!this->fragmentsStorage.fragmentStorageData[f].residency->resident[osContext->getContextId()]) {
|
||||
int retVal = bindBO(static_cast<OsHandleLinux *>(this->fragmentsStorage.fragmentStorageData[f].osHandleStorage)->bo, osContext, vmHandleId, bufferObjects, bind, forcePagingFence);
|
||||
int retVal = bindBO(static_cast<OsHandleLinux *>(this->fragmentsStorage.fragmentStorageData[f].osHandleStorage)->bo, osContext, vmHandleId, bufferObjects, bind);
|
||||
if (retVal) {
|
||||
return retVal;
|
||||
}
|
||||
@@ -253,7 +253,7 @@ int DrmAllocation::makeBOsResident(OsContext *osContext, uint32_t vmHandleId, st
|
||||
}
|
||||
}
|
||||
} else {
|
||||
int retVal = bindBOs(osContext, vmHandleId, bufferObjects, bind, forcePagingFence);
|
||||
int retVal = bindBOs(osContext, vmHandleId, bufferObjects, bind);
|
||||
if (retVal) {
|
||||
return retVal;
|
||||
}
|
||||
@@ -262,7 +262,7 @@ int DrmAllocation::makeBOsResident(OsContext *osContext, uint32_t vmHandleId, st
|
||||
return 0;
|
||||
}
|
||||
|
||||
int DrmAllocation::bindBO(BufferObject *bo, OsContext *osContext, uint32_t vmHandleId, std::vector<BufferObject *> *bufferObjects, bool bind, const bool forcePagingFence) {
|
||||
int DrmAllocation::bindBO(BufferObject *bo, OsContext *osContext, uint32_t vmHandleId, std::vector<BufferObject *> *bufferObjects, bool bind) {
|
||||
auto retVal = 0;
|
||||
if (bo) {
|
||||
bo->requireExplicitResidency(bo->peekDrm()->hasPageFaultSupport() && !shouldAllocationPageFault(bo->peekDrm()));
|
||||
@@ -279,7 +279,7 @@ int DrmAllocation::bindBO(BufferObject *bo, OsContext *osContext, uint32_t vmHan
|
||||
|
||||
} else {
|
||||
if (bind) {
|
||||
retVal = bo->bind(osContext, vmHandleId, forcePagingFence);
|
||||
retVal = bo->bind(osContext, vmHandleId);
|
||||
} else {
|
||||
retVal = bo->unbind(osContext, vmHandleId);
|
||||
}
|
||||
@@ -288,19 +288,19 @@ int DrmAllocation::bindBO(BufferObject *bo, OsContext *osContext, uint32_t vmHan
|
||||
return retVal;
|
||||
}
|
||||
|
||||
int DrmAllocation::bindBOs(OsContext *osContext, uint32_t vmHandleId, std::vector<BufferObject *> *bufferObjects, bool bind, const bool forcePagingFence) {
|
||||
int DrmAllocation::bindBOs(OsContext *osContext, uint32_t vmHandleId, std::vector<BufferObject *> *bufferObjects, bool bind) {
|
||||
int retVal = 0;
|
||||
if (this->storageInfo.getNumBanks() > 1) {
|
||||
auto &bos = this->getBOs();
|
||||
if (this->storageInfo.tileInstanced) {
|
||||
auto bo = bos[vmHandleId];
|
||||
retVal = bindBO(bo, osContext, vmHandleId, bufferObjects, bind, forcePagingFence);
|
||||
retVal = bindBO(bo, osContext, vmHandleId, bufferObjects, bind);
|
||||
if (retVal) {
|
||||
return retVal;
|
||||
}
|
||||
} else {
|
||||
for (auto bo : bos) {
|
||||
retVal = bindBO(bo, osContext, vmHandleId, bufferObjects, bind, forcePagingFence);
|
||||
retVal = bindBO(bo, osContext, vmHandleId, bufferObjects, bind);
|
||||
if (retVal) {
|
||||
return retVal;
|
||||
}
|
||||
@@ -308,7 +308,7 @@ int DrmAllocation::bindBOs(OsContext *osContext, uint32_t vmHandleId, std::vecto
|
||||
}
|
||||
} else {
|
||||
auto bo = this->getBO();
|
||||
retVal = bindBO(bo, osContext, vmHandleId, bufferObjects, bind, forcePagingFence);
|
||||
retVal = bindBO(bo, osContext, vmHandleId, bufferObjects, bind);
|
||||
if (retVal) {
|
||||
return retVal;
|
||||
}
|
||||
|
||||
@@ -130,9 +130,9 @@ class DrmAllocation : public GraphicsAllocation {
|
||||
}
|
||||
|
||||
bool prefetchBOWithChunking(Drm *drm);
|
||||
MOCKABLE_VIRTUAL int makeBOsResident(OsContext *osContext, uint32_t vmHandleId, std::vector<BufferObject *> *bufferObjects, bool bind, const bool forcePagingFence);
|
||||
MOCKABLE_VIRTUAL int bindBO(BufferObject *bo, OsContext *osContext, uint32_t vmHandleId, std::vector<BufferObject *> *bufferObjects, bool bind, const bool forcePagingFence);
|
||||
MOCKABLE_VIRTUAL int bindBOs(OsContext *osContext, uint32_t vmHandleId, std::vector<BufferObject *> *bufferObjects, bool bind, const bool forcePagingFence);
|
||||
MOCKABLE_VIRTUAL int makeBOsResident(OsContext *osContext, uint32_t vmHandleId, std::vector<BufferObject *> *bufferObjects, bool bind);
|
||||
MOCKABLE_VIRTUAL int bindBO(BufferObject *bo, OsContext *osContext, uint32_t vmHandleId, std::vector<BufferObject *> *bufferObjects, bool bind);
|
||||
MOCKABLE_VIRTUAL int bindBOs(OsContext *osContext, uint32_t vmHandleId, std::vector<BufferObject *> *bufferObjects, bool bind);
|
||||
MOCKABLE_VIRTUAL bool prefetchBO(BufferObject *bo, uint32_t vmHandleId, uint32_t subDeviceId);
|
||||
MOCKABLE_VIRTUAL void registerBOBindExtHandle(Drm *drm);
|
||||
void addRegisteredBoBindHandle(uint32_t handle) { registeredBoBindHandles.push_back(handle); }
|
||||
|
||||
@@ -262,11 +262,11 @@ void BufferObject::printBOBindingResult(OsContext *osContext, uint32_t vmHandleI
|
||||
}
|
||||
}
|
||||
|
||||
int BufferObject::bind(OsContext *osContext, uint32_t vmHandleId, const bool forcePagingFence) {
|
||||
int BufferObject::bind(OsContext *osContext, uint32_t vmHandleId) {
|
||||
int retVal = 0;
|
||||
auto contextId = getOsContextId(osContext);
|
||||
if (!this->bindInfo[contextId][vmHandleId]) {
|
||||
retVal = this->drm->bindBufferObject(osContext, vmHandleId, this, forcePagingFence);
|
||||
retVal = this->drm->bindBufferObject(osContext, vmHandleId, this);
|
||||
if (debugManager.flags.PrintBOBindingResult.get()) {
|
||||
printBOBindingResult(osContext, vmHandleId, true, retVal);
|
||||
}
|
||||
@@ -307,13 +307,13 @@ void BufferObject::printExecutionBuffer(ExecBuffer &execbuf, const size_t &resid
|
||||
printf("%s\n", logger.str().c_str());
|
||||
}
|
||||
|
||||
int bindBOsWithinContext(BufferObject *const boToPin[], size_t numberOfBos, OsContext *osContext, uint32_t vmHandleId, const bool forcePagingFence) {
|
||||
int bindBOsWithinContext(BufferObject *const boToPin[], size_t numberOfBos, OsContext *osContext, uint32_t vmHandleId) {
|
||||
auto retVal = 0;
|
||||
|
||||
for (auto drmIterator = 0u; drmIterator < osContext->getDeviceBitfield().size(); drmIterator++) {
|
||||
if (osContext->getDeviceBitfield().test(drmIterator)) {
|
||||
for (size_t i = 0; i < numberOfBos; i++) {
|
||||
retVal |= boToPin[i]->bind(osContext, drmIterator, forcePagingFence);
|
||||
retVal |= boToPin[i]->bind(osContext, drmIterator);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -325,7 +325,7 @@ int BufferObject::pin(BufferObject *const boToPin[], size_t numberOfBos, OsConte
|
||||
auto retVal = 0;
|
||||
|
||||
if (this->drm->isVmBindAvailable()) {
|
||||
retVal = bindBOsWithinContext(boToPin, numberOfBos, osContext, vmHandleId, false);
|
||||
retVal = bindBOsWithinContext(boToPin, numberOfBos, osContext, vmHandleId);
|
||||
} else {
|
||||
StackVec<ExecObject, maxFragmentsCount + 1> execObject(numberOfBos + 1);
|
||||
retVal = this->exec(4u, 0u, 0u, false, osContext, vmHandleId, drmContextId, boToPin, numberOfBos, &execObject[0], 0, 0);
|
||||
@@ -339,7 +339,7 @@ int BufferObject::validateHostPtr(BufferObject *const boToPin[], size_t numberOf
|
||||
|
||||
if (this->drm->isVmBindAvailable()) {
|
||||
for (size_t i = 0; i < numberOfBos; i++) {
|
||||
retVal = boToPin[i]->bind(osContext, vmHandleId, false);
|
||||
retVal = boToPin[i]->bind(osContext, vmHandleId);
|
||||
if (retVal) {
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -114,7 +114,7 @@ class BufferObject {
|
||||
MOCKABLE_VIRTUAL int exec(uint32_t used, size_t startOffset, unsigned int flags, bool requiresCoherency, OsContext *osContext, uint32_t vmHandleId, uint32_t drmContextId,
|
||||
BufferObject *const residency[], size_t residencyCount, ExecObject *execObjectsStorage, uint64_t completionGpuAddress, TaskCountType completionValue);
|
||||
|
||||
int bind(OsContext *osContext, uint32_t vmHandleId, const bool forcePagingFence);
|
||||
int bind(OsContext *osContext, uint32_t vmHandleId);
|
||||
int unbind(OsContext *osContext, uint32_t vmHandleId);
|
||||
|
||||
void printExecutionBuffer(ExecBuffer &execbuf, const size_t &residencyCount, ExecObject *execObjectsStorage, BufferObject *const residency[]);
|
||||
|
||||
@@ -190,13 +190,13 @@ SubmissionStatus DrmCommandStreamReceiver<GfxFamily>::printBOsForSubmit(Residenc
|
||||
if (osContext->getDeviceBitfield().test(drmIterator)) {
|
||||
for (auto gfxAllocation = allocationsForResidency.begin(); gfxAllocation != allocationsForResidency.end(); gfxAllocation++) {
|
||||
auto drmAllocation = static_cast<DrmAllocation *>(*gfxAllocation);
|
||||
auto retCode = drmAllocation->makeBOsResident(osContext, drmIterator, &bosForSubmit, true, false);
|
||||
auto retCode = drmAllocation->makeBOsResident(osContext, drmIterator, &bosForSubmit, true);
|
||||
if (retCode) {
|
||||
return Drm::getSubmissionStatusFromReturnCode(retCode);
|
||||
}
|
||||
}
|
||||
auto drmCmdBufferAllocation = static_cast<DrmAllocation *>(&cmdBufferAllocation);
|
||||
auto retCode = drmCmdBufferAllocation->makeBOsResident(osContext, drmIterator, &bosForSubmit, true, false);
|
||||
auto retCode = drmCmdBufferAllocation->makeBOsResident(osContext, drmIterator, &bosForSubmit, true);
|
||||
if (retCode) {
|
||||
return Drm::getSubmissionStatusFromReturnCode(retCode);
|
||||
}
|
||||
@@ -260,7 +260,7 @@ SubmissionStatus DrmCommandStreamReceiver<GfxFamily>::processResidency(Residency
|
||||
int ret = 0;
|
||||
for (auto &alloc : inputAllocationsForResidency) {
|
||||
auto drmAlloc = static_cast<DrmAllocation *>(alloc);
|
||||
ret = drmAlloc->makeBOsResident(osContext, handleId, &this->residency, false, false);
|
||||
ret = drmAlloc->makeBOsResident(osContext, handleId, &this->residency, false);
|
||||
if (ret != 0) {
|
||||
break;
|
||||
}
|
||||
@@ -389,4 +389,4 @@ template <typename GfxFamily>
|
||||
bool DrmCommandStreamReceiver<GfxFamily>::isKmdWaitOnTaskCountAllowed() const {
|
||||
return this->isDirectSubmissionEnabled();
|
||||
}
|
||||
} // namespace NEO
|
||||
} // namespace NEO
|
||||
|
||||
@@ -306,7 +306,7 @@ bool DrmMemoryManager::setMemPrefetch(GraphicsAllocation *gfxAllocation, SubDevi
|
||||
|
||||
for (auto subDeviceId : subDeviceIds) {
|
||||
auto vmHandleId = subDeviceId;
|
||||
auto retVal = drmAllocation->bindBOs(osContextLinux, vmHandleId, nullptr, true, false);
|
||||
auto retVal = drmAllocation->bindBOs(osContextLinux, vmHandleId, nullptr, true);
|
||||
if (retVal != 0) {
|
||||
DEBUG_BREAK_IF(true);
|
||||
return false;
|
||||
@@ -736,7 +736,7 @@ bool DrmMemoryManager::mapPhysicalHostMemoryToVirtualMemory(RootDeviceIndicesCon
|
||||
|
||||
bo->setMmapOffset(mmapOffset);
|
||||
bo->setAddress(gpuRange);
|
||||
bo->bind(getDefaultOsContext(drmPhysicalAllocation->getRootDeviceIndex()), 0, false);
|
||||
bo->bind(getDefaultOsContext(drmPhysicalAllocation->getRootDeviceIndex()), 0);
|
||||
|
||||
auto drmAllocation = new DrmAllocation(drmPhysicalAllocation->getRootDeviceIndex(), 1u, AllocationType::bufferHostMemory, bo, addrToPtr(bo->peekAddress()), bo->peekSize(),
|
||||
static_cast<osHandle>(internalHandle), memoryPool, getGmmHelper(drmPhysicalAllocation->getRootDeviceIndex())->canonize(bo->peekAddress()));
|
||||
@@ -1669,7 +1669,7 @@ bool DrmMemoryManager::makeAllocationResident(GraphicsAllocation *allocation) {
|
||||
auto drmAllocation = static_cast<DrmAllocation *>(allocation);
|
||||
auto rootDeviceIndex = allocation->getRootDeviceIndex();
|
||||
for (uint32_t i = 0; getDrm(rootDeviceIndex).getVirtualMemoryAddressSpace(i) > 0u; i++) {
|
||||
if (drmAllocation->makeBOsResident(getDefaultOsContext(rootDeviceIndex), i, nullptr, true, false)) {
|
||||
if (drmAllocation->makeBOsResident(getDefaultOsContext(rootDeviceIndex), i, nullptr, true)) {
|
||||
return false;
|
||||
}
|
||||
getDrm(rootDeviceIndex).waitForBind(i);
|
||||
|
||||
@@ -26,12 +26,12 @@ DrmMemoryOperationsHandlerBind::DrmMemoryOperationsHandlerBind(const RootDeviceE
|
||||
|
||||
DrmMemoryOperationsHandlerBind::~DrmMemoryOperationsHandlerBind() = default;
|
||||
|
||||
MemoryOperationsStatus DrmMemoryOperationsHandlerBind::makeResident(Device *device, ArrayRef<GraphicsAllocation *> gfxAllocations, bool isDummyExecNeeded, const bool forcePagingFence) {
|
||||
MemoryOperationsStatus DrmMemoryOperationsHandlerBind::makeResident(Device *device, ArrayRef<GraphicsAllocation *> gfxAllocations, bool isDummyExecNeeded) {
|
||||
auto &engines = device->getAllEngines();
|
||||
MemoryOperationsStatus result = MemoryOperationsStatus::success;
|
||||
for (const auto &engine : engines) {
|
||||
engine.commandStreamReceiver->initializeResources(false, device->getPreemptionMode());
|
||||
result = this->makeResidentWithinOsContext(engine.osContext, gfxAllocations, false, forcePagingFence);
|
||||
result = this->makeResidentWithinOsContext(engine.osContext, gfxAllocations, false);
|
||||
if (result != MemoryOperationsStatus::success) {
|
||||
break;
|
||||
}
|
||||
@@ -43,10 +43,10 @@ MemoryOperationsStatus DrmMemoryOperationsHandlerBind::lock(Device *device, Arra
|
||||
for (auto gfxAllocation = gfxAllocations.begin(); gfxAllocation != gfxAllocations.end(); gfxAllocation++) {
|
||||
(*gfxAllocation)->setLockedMemory(true);
|
||||
}
|
||||
return makeResident(device, gfxAllocations, false, false);
|
||||
return makeResident(device, gfxAllocations, false);
|
||||
}
|
||||
|
||||
MemoryOperationsStatus DrmMemoryOperationsHandlerBind::makeResidentWithinOsContext(OsContext *osContext, ArrayRef<GraphicsAllocation *> gfxAllocations, bool evictable, const bool forcePagingFence) {
|
||||
MemoryOperationsStatus DrmMemoryOperationsHandlerBind::makeResidentWithinOsContext(OsContext *osContext, ArrayRef<GraphicsAllocation *> gfxAllocations, bool evictable) {
|
||||
auto deviceBitfield = osContext->getDeviceBitfield();
|
||||
|
||||
std::lock_guard<std::mutex> lock(mutex);
|
||||
@@ -68,8 +68,7 @@ MemoryOperationsStatus DrmMemoryOperationsHandlerBind::makeResidentWithinOsConte
|
||||
if (!bo->getBindInfo()[bo->getOsContextId(osContext)][drmIterator]) {
|
||||
bo->requireExplicitLockedMemory(drmAllocation->isLockedMemory());
|
||||
bo->requireImmediateBinding(true);
|
||||
|
||||
int result = drmAllocation->makeBOsResident(osContext, drmIterator, nullptr, true, forcePagingFence);
|
||||
int result = drmAllocation->makeBOsResident(osContext, drmIterator, nullptr, true);
|
||||
if (result) {
|
||||
return MemoryOperationsStatus::outOfMemory;
|
||||
}
|
||||
@@ -109,7 +108,7 @@ int DrmMemoryOperationsHandlerBind::evictImpl(OsContext *osContext, GraphicsAllo
|
||||
auto drmAllocation = static_cast<DrmAllocation *>(&gfxAllocation);
|
||||
for (auto drmIterator = 0u; drmIterator < deviceBitfield.size(); drmIterator++) {
|
||||
if (deviceBitfield.test(drmIterator)) {
|
||||
int retVal = drmAllocation->makeBOsResident(osContext, drmIterator, nullptr, false, false);
|
||||
int retVal = drmAllocation->makeBOsResident(osContext, drmIterator, nullptr, false);
|
||||
if (retVal) {
|
||||
return retVal;
|
||||
}
|
||||
@@ -144,11 +143,11 @@ MemoryOperationsStatus DrmMemoryOperationsHandlerBind::mergeWithResidencyContain
|
||||
auto memoryManager = static_cast<DrmMemoryManager *>(this->rootDeviceEnvironment.executionEnvironment.memoryManager.get());
|
||||
|
||||
auto allocLock = memoryManager->acquireAllocLock();
|
||||
this->makeResidentWithinOsContext(osContext, ArrayRef<GraphicsAllocation *>(memoryManager->getSysMemAllocs()), true, false);
|
||||
this->makeResidentWithinOsContext(osContext, ArrayRef<GraphicsAllocation *>(memoryManager->getLocalMemAllocs(this->rootDeviceIndex)), true, false);
|
||||
this->makeResidentWithinOsContext(osContext, ArrayRef<GraphicsAllocation *>(memoryManager->getSysMemAllocs()), true);
|
||||
this->makeResidentWithinOsContext(osContext, ArrayRef<GraphicsAllocation *>(memoryManager->getLocalMemAllocs(this->rootDeviceIndex)), true);
|
||||
}
|
||||
|
||||
auto retVal = this->makeResidentWithinOsContext(osContext, ArrayRef<GraphicsAllocation *>(residencyContainer), true, false);
|
||||
auto retVal = this->makeResidentWithinOsContext(osContext, ArrayRef<GraphicsAllocation *>(residencyContainer), true);
|
||||
if (retVal != MemoryOperationsStatus::success) {
|
||||
return retVal;
|
||||
}
|
||||
|
||||
@@ -16,8 +16,8 @@ class DrmMemoryOperationsHandlerBind : public DrmMemoryOperationsHandler {
|
||||
DrmMemoryOperationsHandlerBind(const RootDeviceEnvironment &rootDeviceEnvironment, uint32_t rootDeviceIndex);
|
||||
~DrmMemoryOperationsHandlerBind() override;
|
||||
|
||||
MemoryOperationsStatus makeResidentWithinOsContext(OsContext *osContext, ArrayRef<GraphicsAllocation *> gfxAllocations, bool evictable, const bool forcePagingFence) override;
|
||||
MemoryOperationsStatus makeResident(Device *device, ArrayRef<GraphicsAllocation *> gfxAllocations, bool isDummyExecNeeded, const bool forcePagingFence) override;
|
||||
MemoryOperationsStatus makeResidentWithinOsContext(OsContext *osContext, ArrayRef<GraphicsAllocation *> gfxAllocations, bool evictable) override;
|
||||
MemoryOperationsStatus makeResident(Device *device, ArrayRef<GraphicsAllocation *> gfxAllocations, bool isDummyExecNeeded) override;
|
||||
MemoryOperationsStatus lock(Device *device, ArrayRef<GraphicsAllocation *> gfxAllocations) override;
|
||||
MemoryOperationsStatus evict(Device *device, GraphicsAllocation &gfxAllocation) override;
|
||||
MemoryOperationsStatus evictWithinOsContext(OsContext *osContext, GraphicsAllocation &gfxAllocation) override;
|
||||
|
||||
@@ -23,15 +23,15 @@ DrmMemoryOperationsHandlerDefault::DrmMemoryOperationsHandlerDefault(uint32_t ro
|
||||
;
|
||||
DrmMemoryOperationsHandlerDefault::~DrmMemoryOperationsHandlerDefault() = default;
|
||||
|
||||
MemoryOperationsStatus DrmMemoryOperationsHandlerDefault::makeResidentWithinOsContext(OsContext *osContext, ArrayRef<GraphicsAllocation *> gfxAllocations, bool evictable, const bool forcePagingFence) {
|
||||
MemoryOperationsStatus DrmMemoryOperationsHandlerDefault::makeResidentWithinOsContext(OsContext *osContext, ArrayRef<GraphicsAllocation *> gfxAllocations, bool evictable) {
|
||||
std::lock_guard<std::mutex> lock(mutex);
|
||||
this->residency.insert(gfxAllocations.begin(), gfxAllocations.end());
|
||||
return MemoryOperationsStatus::success;
|
||||
}
|
||||
|
||||
MemoryOperationsStatus DrmMemoryOperationsHandlerDefault::makeResident(Device *device, ArrayRef<GraphicsAllocation *> gfxAllocations, bool isDummyExecNeeded, const bool forcePagingFence) {
|
||||
MemoryOperationsStatus DrmMemoryOperationsHandlerDefault::makeResident(Device *device, ArrayRef<GraphicsAllocation *> gfxAllocations, bool isDummyExecNeeded) {
|
||||
OsContext *osContext = nullptr;
|
||||
auto ret = this->makeResidentWithinOsContext(osContext, gfxAllocations, false, forcePagingFence);
|
||||
auto ret = this->makeResidentWithinOsContext(osContext, gfxAllocations, false);
|
||||
if (!isDummyExecNeeded || ret != MemoryOperationsStatus::success) {
|
||||
return ret;
|
||||
}
|
||||
@@ -53,7 +53,7 @@ MemoryOperationsStatus DrmMemoryOperationsHandlerDefault::lock(Device *device, A
|
||||
bo->requireExplicitLockedMemory(true);
|
||||
}
|
||||
}
|
||||
return this->makeResidentWithinOsContext(osContext, gfxAllocations, false, false);
|
||||
return this->makeResidentWithinOsContext(osContext, gfxAllocations, false);
|
||||
}
|
||||
|
||||
MemoryOperationsStatus DrmMemoryOperationsHandlerDefault::evictWithinOsContext(OsContext *osContext, GraphicsAllocation &gfxAllocation) {
|
||||
|
||||
@@ -19,8 +19,8 @@ class DrmMemoryOperationsHandlerDefault : public DrmMemoryOperationsHandler {
|
||||
DrmMemoryOperationsHandlerDefault(const RootDeviceEnvironment &rootDeviceEnvironment, uint32_t rootDeviceIndex) : DrmMemoryOperationsHandlerDefault(rootDeviceIndex) {}
|
||||
~DrmMemoryOperationsHandlerDefault() override;
|
||||
|
||||
MemoryOperationsStatus makeResidentWithinOsContext(OsContext *osContext, ArrayRef<GraphicsAllocation *> gfxAllocations, bool evictable, const bool forcePagingFence) override;
|
||||
MemoryOperationsStatus makeResident(Device *device, ArrayRef<GraphicsAllocation *> gfxAllocations, bool isDummyExecNeeded, const bool forcePagingFence) override;
|
||||
MemoryOperationsStatus makeResidentWithinOsContext(OsContext *osContext, ArrayRef<GraphicsAllocation *> gfxAllocations, bool evictable) override;
|
||||
MemoryOperationsStatus makeResident(Device *device, ArrayRef<GraphicsAllocation *> gfxAllocations, bool isDummyExecNeeded) override;
|
||||
MemoryOperationsStatus lock(Device *device, ArrayRef<GraphicsAllocation *> gfxAllocations) override;
|
||||
MemoryOperationsStatus isResident(Device *device, GraphicsAllocation &gfxAllocation) override;
|
||||
MemoryOperationsStatus evictWithinOsContext(OsContext *osContext, GraphicsAllocation &gfxAllocation) override;
|
||||
|
||||
@@ -36,13 +36,13 @@ class DrmMemoryOperationsHandlerWithAubDump : public BaseOperationsHandler {
|
||||
|
||||
~DrmMemoryOperationsHandlerWithAubDump() override = default;
|
||||
|
||||
MemoryOperationsStatus makeResident(Device *device, ArrayRef<GraphicsAllocation *> gfxAllocations, bool isDummyExecNeeded, const bool forcePagingFence) override {
|
||||
aubMemoryOperationsHandler->makeResident(device, gfxAllocations, isDummyExecNeeded, forcePagingFence);
|
||||
return BaseOperationsHandler::makeResident(device, gfxAllocations, isDummyExecNeeded, forcePagingFence);
|
||||
MemoryOperationsStatus makeResident(Device *device, ArrayRef<GraphicsAllocation *> gfxAllocations, bool isDummyExecNeeded) override {
|
||||
aubMemoryOperationsHandler->makeResident(device, gfxAllocations, isDummyExecNeeded);
|
||||
return BaseOperationsHandler::makeResident(device, gfxAllocations, isDummyExecNeeded);
|
||||
}
|
||||
|
||||
MemoryOperationsStatus lock(Device *device, ArrayRef<GraphicsAllocation *> gfxAllocations) override {
|
||||
aubMemoryOperationsHandler->makeResident(device, gfxAllocations, false, false);
|
||||
aubMemoryOperationsHandler->makeResident(device, gfxAllocations, false);
|
||||
return BaseOperationsHandler::lock(device, gfxAllocations);
|
||||
}
|
||||
|
||||
@@ -61,9 +61,9 @@ class DrmMemoryOperationsHandlerWithAubDump : public BaseOperationsHandler {
|
||||
return BaseOperationsHandler::isResident(device, gfxAllocation);
|
||||
}
|
||||
|
||||
MemoryOperationsStatus makeResidentWithinOsContext(OsContext *osContext, ArrayRef<GraphicsAllocation *> gfxAllocations, bool evictable, const bool forcePagingFence) override {
|
||||
aubMemoryOperationsHandler->makeResidentWithinOsContext(osContext, gfxAllocations, evictable, forcePagingFence);
|
||||
return BaseOperationsHandler::makeResidentWithinOsContext(osContext, gfxAllocations, evictable, forcePagingFence);
|
||||
MemoryOperationsStatus makeResidentWithinOsContext(OsContext *osContext, ArrayRef<GraphicsAllocation *> gfxAllocations, bool evictable) override {
|
||||
aubMemoryOperationsHandler->makeResidentWithinOsContext(osContext, gfxAllocations, evictable);
|
||||
return BaseOperationsHandler::makeResidentWithinOsContext(osContext, gfxAllocations, evictable);
|
||||
}
|
||||
|
||||
MemoryOperationsStatus evictWithinOsContext(OsContext *osContext, GraphicsAllocation &gfxAllocation) override {
|
||||
|
||||
@@ -1282,15 +1282,6 @@ void Drm::waitForBind(uint32_t vmHandleId) {
|
||||
waitUserFence(0u, fenceAddress, fenceValue, ValueWidth::u64, -1, ioctlHelper->getWaitUserFenceSoftFlag(), false, NEO::InterruptId::notUsed, nullptr);
|
||||
}
|
||||
|
||||
void Drm::waitForBindGivenFenceVal(uint32_t vmHandleId, uint64_t fenceValToWait) {
|
||||
if (*ioctlHelper->getPagingFenceAddress(vmHandleId, nullptr) >= fenceValToWait) {
|
||||
return;
|
||||
}
|
||||
|
||||
auto fenceAddress = castToUint64(ioctlHelper->getPagingFenceAddress(vmHandleId, nullptr));
|
||||
waitUserFence(0u, fenceAddress, fenceValToWait, ValueWidth::u64, -1, ioctlHelper->getWaitUserFenceSoftFlag(), false, NEO::InterruptId::notUsed, nullptr);
|
||||
}
|
||||
|
||||
bool Drm::isSetPairAvailable() {
|
||||
if (debugManager.flags.EnableSetPair.get() == 1) {
|
||||
std::call_once(checkSetPairOnce, [this]() {
|
||||
@@ -1419,7 +1410,7 @@ void programUserFence(Drm *drm, OsContext *osContext, BufferObject *bo, VmBindEx
|
||||
ioctlHelper->fillVmBindExtUserFence(vmBindExtUserFence, address, value, nextExtension);
|
||||
}
|
||||
|
||||
int changeBufferObjectBinding(Drm *drm, OsContext *osContext, uint32_t vmHandleId, BufferObject *bo, bool bind, const bool forcePagingFence) {
|
||||
int changeBufferObjectBinding(Drm *drm, OsContext *osContext, uint32_t vmHandleId, BufferObject *bo, bool bind) {
|
||||
auto vmId = drm->getVirtualMemoryAddressSpace(vmHandleId);
|
||||
auto ioctlHelper = drm->getIoctlHelper();
|
||||
|
||||
@@ -1431,9 +1422,6 @@ int changeBufferObjectBinding(Drm *drm, OsContext *osContext, uint32_t vmHandleI
|
||||
vmId = osContextLinux->getDrmVmIds()[vmHandleId];
|
||||
}
|
||||
|
||||
// Use only when debugger is disabled
|
||||
const bool guaranteePagingFence = forcePagingFence && !drm->getRootDeviceEnvironment().executionEnvironment.isDebuggingEnabled();
|
||||
|
||||
std::unique_ptr<uint8_t[]> extensions;
|
||||
if (bind) {
|
||||
bool allowUUIDsForDebug = !osContext->isInternalEngine() && !EngineHelpers::isBcs(osContext->getEngineType());
|
||||
@@ -1445,7 +1433,7 @@ int changeBufferObjectBinding(Drm *drm, OsContext *osContext, uint32_t vmHandleI
|
||||
bool bindMakeResident = false;
|
||||
bool readOnlyResource = bo->isReadOnlyGpuResource();
|
||||
|
||||
if (drm->useVMBindImmediate() || guaranteePagingFence) {
|
||||
if (drm->useVMBindImmediate()) {
|
||||
bindMakeResident = bo->isExplicitResidencyRequired();
|
||||
bindImmediate = true;
|
||||
}
|
||||
@@ -1495,12 +1483,11 @@ int changeBufferObjectBinding(Drm *drm, OsContext *osContext, uint32_t vmHandleI
|
||||
}
|
||||
|
||||
std::unique_lock<std::mutex> lock;
|
||||
|
||||
VmBindExtUserFenceT vmBindExtUserFence{};
|
||||
bool incrementFenceValue = false;
|
||||
|
||||
if (ioctlHelper->isWaitBeforeBindRequired(bind)) {
|
||||
|
||||
if (drm->useVMBindImmediate() || guaranteePagingFence) {
|
||||
if (drm->useVMBindImmediate()) {
|
||||
lock = drm->lockBindFenceMutex();
|
||||
auto nextExtension = vmBind.extensions;
|
||||
incrementFenceValue = true;
|
||||
@@ -1508,7 +1495,6 @@ int changeBufferObjectBinding(Drm *drm, OsContext *osContext, uint32_t vmHandleI
|
||||
ioctlHelper->setVmBindUserFence(vmBind, vmBindExtUserFence);
|
||||
}
|
||||
}
|
||||
|
||||
if (bind) {
|
||||
ret = ioctlHelper->vmBind(vmBind);
|
||||
if (ret) {
|
||||
@@ -1523,46 +1509,38 @@ int changeBufferObjectBinding(Drm *drm, OsContext *osContext, uint32_t vmHandleI
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
bool waitOnUserFenceAfterBindAndUnbind = false;
|
||||
if (debugManager.flags.EnableWaitOnUserFenceAfterBindAndUnbind.get() != -1) {
|
||||
waitOnUserFenceAfterBindAndUnbind = !!debugManager.flags.EnableWaitOnUserFenceAfterBindAndUnbind.get();
|
||||
}
|
||||
if (ioctlHelper->isWaitBeforeBindRequired(bind) && waitOnUserFenceAfterBindAndUnbind && drm->useVMBindImmediate()) {
|
||||
auto osContextLinux = static_cast<OsContextLinux *>(osContext);
|
||||
osContextLinux->waitForPagingFence();
|
||||
}
|
||||
if (incrementFenceValue) {
|
||||
uint64_t fenceValToWait = 0;
|
||||
|
||||
if (drm->isPerContextVMRequired()) {
|
||||
auto osContextLinux = static_cast<OsContextLinux *>(osContext);
|
||||
fenceValToWait = osContextLinux->getNextFenceVal(vmHandleId);
|
||||
osContextLinux->incFenceVal(vmHandleId);
|
||||
} else {
|
||||
fenceValToWait = drm->getNextFenceVal(vmHandleId);
|
||||
drm->incFenceVal(vmHandleId);
|
||||
}
|
||||
|
||||
lock.unlock();
|
||||
|
||||
bool waitOnUserFenceAfterBindAndUnbind = false;
|
||||
if (debugManager.flags.EnableWaitOnUserFenceAfterBindAndUnbind.get() != -1) {
|
||||
waitOnUserFenceAfterBindAndUnbind = !!debugManager.flags.EnableWaitOnUserFenceAfterBindAndUnbind.get();
|
||||
}
|
||||
if ((ioctlHelper->isWaitBeforeBindRequired(bind) && waitOnUserFenceAfterBindAndUnbind && drm->useVMBindImmediate()) || guaranteePagingFence) {
|
||||
auto osContextLinux = static_cast<OsContextLinux *>(osContext);
|
||||
osContextLinux->waitForPagingFenceGivenFenceVal(fenceValToWait);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int Drm::bindBufferObject(OsContext *osContext, uint32_t vmHandleId, BufferObject *bo, const bool forcePagingFence) {
|
||||
auto ret = changeBufferObjectBinding(this, osContext, vmHandleId, bo, true, forcePagingFence);
|
||||
int Drm::bindBufferObject(OsContext *osContext, uint32_t vmHandleId, BufferObject *bo) {
|
||||
auto ret = changeBufferObjectBinding(this, osContext, vmHandleId, bo, true);
|
||||
if (ret != 0) {
|
||||
static_cast<DrmMemoryOperationsHandlerBind *>(this->rootDeviceEnvironment.memoryOperationsInterface.get())->evictUnusedAllocations(false, false);
|
||||
ret = changeBufferObjectBinding(this, osContext, vmHandleId, bo, true, forcePagingFence);
|
||||
ret = changeBufferObjectBinding(this, osContext, vmHandleId, bo, true);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
int Drm::unbindBufferObject(OsContext *osContext, uint32_t vmHandleId, BufferObject *bo) {
|
||||
return changeBufferObjectBinding(this, osContext, vmHandleId, bo, false, false);
|
||||
return changeBufferObjectBinding(this, osContext, vmHandleId, bo, false);
|
||||
}
|
||||
|
||||
int Drm::createDrmVirtualMemory(uint32_t &drmVmId) {
|
||||
|
||||
@@ -121,7 +121,7 @@ class Drm : public DriverModel {
|
||||
bool createVirtualMemoryAddressSpace(uint32_t vmCount);
|
||||
void destroyVirtualMemoryAddressSpace();
|
||||
uint32_t getVirtualMemoryAddressSpace(uint32_t vmId) const;
|
||||
MOCKABLE_VIRTUAL int bindBufferObject(OsContext *osContext, uint32_t vmHandleId, BufferObject *bo, const bool forcePagingFence);
|
||||
MOCKABLE_VIRTUAL int bindBufferObject(OsContext *osContext, uint32_t vmHandleId, BufferObject *bo);
|
||||
MOCKABLE_VIRTUAL int unbindBufferObject(OsContext *osContext, uint32_t vmHandleId, BufferObject *bo);
|
||||
int setupHardwareInfo(const DeviceDescriptor *, bool);
|
||||
void setupSystemInfo(HardwareInfo *hwInfo, SystemInfo *sysInfo);
|
||||
@@ -218,7 +218,6 @@ class Drm : public DriverModel {
|
||||
std::string getDeviceNode() { return hwDeviceId->getDeviceNode(); }
|
||||
|
||||
void waitForBind(uint32_t vmHandleId);
|
||||
void waitForBindGivenFenceVal(uint32_t vmHandleId, uint64_t fenceValToWait);
|
||||
uint64_t getNextFenceVal(uint32_t vmHandleId) { return fenceVal[vmHandleId] + 1; }
|
||||
void incFenceVal(uint32_t vmHandleId) { fenceVal[vmHandleId]++; }
|
||||
uint64_t *getFenceAddr(uint32_t vmHandleId) { return &pagingFence[vmHandleId]; }
|
||||
|
||||
@@ -124,28 +124,6 @@ void OsContextLinux::waitForBind(uint32_t drmIterator) {
|
||||
}
|
||||
}
|
||||
|
||||
void OsContextLinux::waitForPagingFenceGivenFenceVal(uint64_t fenceValToWait) {
|
||||
for (auto drmIterator = 0u; drmIterator < this->deviceBitfield.size(); drmIterator++) {
|
||||
if (this->deviceBitfield.test(drmIterator)) {
|
||||
this->waitForBindGivenFenceVal(drmIterator, fenceValToWait);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void OsContextLinux::waitForBindGivenFenceVal(uint32_t drmIterator, uint64_t fenceValToWait) {
|
||||
if (drm.isPerContextVMRequired()) {
|
||||
if (pagingFence[drmIterator] >= fenceValToWait) {
|
||||
return;
|
||||
}
|
||||
|
||||
auto fenceAddress = castToUint64(&this->pagingFence[drmIterator]);
|
||||
drm.waitUserFence(0u, fenceAddress, fenceValToWait, Drm::ValueWidth::u64, -1, drm.getIoctlHelper()->getWaitUserFenceSoftFlag(), false, NEO::InterruptId::notUsed, nullptr);
|
||||
|
||||
} else {
|
||||
drm.waitForBindGivenFenceVal(drmIterator, fenceValToWait);
|
||||
}
|
||||
}
|
||||
|
||||
void OsContextLinux::reInitializeContext() {}
|
||||
|
||||
uint64_t OsContextLinux::getOfflineDumpContextId(uint32_t deviceIndex) const {
|
||||
|
||||
@@ -30,7 +30,6 @@ class OsContextLinux : public OsContext {
|
||||
bool isDirectSubmissionSupported() const override;
|
||||
Drm &getDrm() const;
|
||||
virtual void waitForPagingFence();
|
||||
virtual void waitForPagingFenceGivenFenceVal(uint64_t fenceValToWait);
|
||||
static OsContext *create(OSInterface *osInterface, uint32_t rootDeviceIndex, uint32_t contextId, const EngineDescriptor &engineDescriptor);
|
||||
void reInitializeContext() override;
|
||||
void setHangDetected() {
|
||||
@@ -46,7 +45,6 @@ class OsContextLinux : public OsContext {
|
||||
void incFenceVal(uint32_t deviceIndex) { fenceVal[deviceIndex]++; }
|
||||
uint64_t *getFenceAddr(uint32_t deviceIndex) { return &pagingFence[deviceIndex]; }
|
||||
void waitForBind(uint32_t drmIterator);
|
||||
void waitForBindGivenFenceVal(uint32_t drmIterator, uint64_t fenceValToWait);
|
||||
|
||||
protected:
|
||||
bool initializeContext(bool allocateInterrupt) override;
|
||||
|
||||
@@ -20,7 +20,7 @@ WddmMemoryOperationsHandler::WddmMemoryOperationsHandler(Wddm *wddm) : wddm(wddm
|
||||
|
||||
WddmMemoryOperationsHandler::~WddmMemoryOperationsHandler() = default;
|
||||
|
||||
MemoryOperationsStatus WddmMemoryOperationsHandler::makeResident(Device *device, ArrayRef<GraphicsAllocation *> gfxAllocations, bool isDummyExecNeeded, const bool forcePagingFence) {
|
||||
MemoryOperationsStatus WddmMemoryOperationsHandler::makeResident(Device *device, ArrayRef<GraphicsAllocation *> gfxAllocations, bool isDummyExecNeeded) {
|
||||
uint32_t totalHandlesCount = 0;
|
||||
constexpr uint32_t stackAllocations = 64;
|
||||
constexpr uint32_t stackHandlesCount = NEO::maxFragmentsCount * EngineLimits::maxHandleCount * stackAllocations;
|
||||
@@ -45,7 +45,7 @@ MemoryOperationsStatus WddmMemoryOperationsHandler::makeResident(Device *device,
|
||||
totalHandlesCount += wddmAllocation->getNumGmms();
|
||||
}
|
||||
}
|
||||
return residentAllocations->makeResidentResources(handlesForResidency.begin(), totalHandlesCount, totalSize, forcePagingFence);
|
||||
return residentAllocations->makeResidentResources(handlesForResidency.begin(), totalHandlesCount, totalSize);
|
||||
}
|
||||
|
||||
MemoryOperationsStatus WddmMemoryOperationsHandler::evict(Device *device, GraphicsAllocation &gfxAllocation) {
|
||||
|
||||
@@ -23,15 +23,15 @@ class WddmMemoryOperationsHandler : public MemoryOperationsHandler {
|
||||
|
||||
static std::unique_ptr<WddmMemoryOperationsHandler> create(Wddm *wddm, RootDeviceEnvironment *rootDeviceEnvironment, bool withAubDump);
|
||||
|
||||
MemoryOperationsStatus makeResident(Device *device, ArrayRef<GraphicsAllocation *> gfxAllocations, bool isDummyExecNeeded, const bool forcePagingFence) override;
|
||||
MemoryOperationsStatus makeResident(Device *device, ArrayRef<GraphicsAllocation *> gfxAllocations, bool isDummyExecNeeded) override;
|
||||
MemoryOperationsStatus evict(Device *device, GraphicsAllocation &gfxAllocation) override;
|
||||
MemoryOperationsStatus isResident(Device *device, GraphicsAllocation &gfxAllocation) override;
|
||||
|
||||
MemoryOperationsStatus lock(Device *device, ArrayRef<GraphicsAllocation *> gfxAllocations) override {
|
||||
return MemoryOperationsStatus::unsupported;
|
||||
}
|
||||
MemoryOperationsStatus makeResidentWithinOsContext(OsContext *osContext, ArrayRef<GraphicsAllocation *> gfxAllocations, bool evictable, const bool forcePagingFence) override {
|
||||
return makeResident(nullptr, gfxAllocations, false, forcePagingFence);
|
||||
MemoryOperationsStatus makeResidentWithinOsContext(OsContext *osContext, ArrayRef<GraphicsAllocation *> gfxAllocations, bool evictable) override {
|
||||
return makeResident(nullptr, gfxAllocations, false);
|
||||
}
|
||||
MemoryOperationsStatus evictWithinOsContext(OsContext *osContext, GraphicsAllocation &gfxAllocation) override {
|
||||
return evict(nullptr, gfxAllocation);
|
||||
|
||||
@@ -36,9 +36,9 @@ class WddmMemoryOperationsHandlerWithAubDump : public BaseOperationsHandler {
|
||||
|
||||
~WddmMemoryOperationsHandlerWithAubDump() override = default;
|
||||
|
||||
MemoryOperationsStatus makeResident(Device *device, ArrayRef<GraphicsAllocation *> gfxAllocations, bool isDummyExecNeeded, const bool forcePagingFence) override {
|
||||
aubMemoryOperationsHandler->makeResident(device, gfxAllocations, isDummyExecNeeded, forcePagingFence);
|
||||
return BaseOperationsHandler::makeResident(device, gfxAllocations, isDummyExecNeeded, forcePagingFence);
|
||||
MemoryOperationsStatus makeResident(Device *device, ArrayRef<GraphicsAllocation *> gfxAllocations, bool isDummyExecNeeded) override {
|
||||
aubMemoryOperationsHandler->makeResident(device, gfxAllocations, isDummyExecNeeded);
|
||||
return BaseOperationsHandler::makeResident(device, gfxAllocations, isDummyExecNeeded);
|
||||
}
|
||||
|
||||
MemoryOperationsStatus evict(Device *device, GraphicsAllocation &gfxAllocation) override {
|
||||
@@ -56,9 +56,9 @@ class WddmMemoryOperationsHandlerWithAubDump : public BaseOperationsHandler {
|
||||
return BaseOperationsHandler::isResident(device, gfxAllocation);
|
||||
}
|
||||
|
||||
MemoryOperationsStatus makeResidentWithinOsContext(OsContext *osContext, ArrayRef<GraphicsAllocation *> gfxAllocations, bool evictable, const bool forcePagingFence) override {
|
||||
aubMemoryOperationsHandler->makeResidentWithinOsContext(osContext, gfxAllocations, evictable, forcePagingFence);
|
||||
return BaseOperationsHandler::makeResidentWithinOsContext(osContext, gfxAllocations, evictable, forcePagingFence);
|
||||
MemoryOperationsStatus makeResidentWithinOsContext(OsContext *osContext, ArrayRef<GraphicsAllocation *> gfxAllocations, bool evictable) override {
|
||||
aubMemoryOperationsHandler->makeResidentWithinOsContext(osContext, gfxAllocations, evictable);
|
||||
return BaseOperationsHandler::makeResidentWithinOsContext(osContext, gfxAllocations, evictable);
|
||||
}
|
||||
|
||||
MemoryOperationsStatus evictWithinOsContext(OsContext *osContext, GraphicsAllocation &gfxAllocation) override {
|
||||
|
||||
@@ -61,10 +61,10 @@ MemoryOperationsStatus WddmResidentAllocationsContainer::evictResources(const D3
|
||||
}
|
||||
|
||||
MemoryOperationsStatus WddmResidentAllocationsContainer::makeResidentResource(const D3DKMT_HANDLE &handle, size_t size) {
|
||||
return makeResidentResources(&handle, 1u, size, false);
|
||||
return makeResidentResources(&handle, 1u, size);
|
||||
}
|
||||
|
||||
MemoryOperationsStatus WddmResidentAllocationsContainer::makeResidentResources(const D3DKMT_HANDLE *handles, const uint32_t count, size_t size, const bool forcePagingFence) {
|
||||
MemoryOperationsStatus WddmResidentAllocationsContainer::makeResidentResources(const D3DKMT_HANDLE *handles, const uint32_t count, size_t size) {
|
||||
while (!wddm->makeResident(handles, count, false, nullptr, size)) {
|
||||
if (evictAllResources() == MemoryOperationsStatus::success) {
|
||||
continue;
|
||||
@@ -80,7 +80,7 @@ MemoryOperationsStatus WddmResidentAllocationsContainer::makeResidentResources(c
|
||||
resourceHandles.push_back(handles[i]);
|
||||
}
|
||||
lock.unlock();
|
||||
wddm->waitOnPagingFenceFromCpu(forcePagingFence);
|
||||
wddm->waitOnPagingFenceFromCpu(false);
|
||||
return MemoryOperationsStatus::success;
|
||||
}
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ class WddmResidentAllocationsContainer {
|
||||
MOCKABLE_VIRTUAL MemoryOperationsStatus evictResource(const D3DKMT_HANDLE &handle);
|
||||
MemoryOperationsStatus evictResources(const D3DKMT_HANDLE *handles, const uint32_t count);
|
||||
MOCKABLE_VIRTUAL MemoryOperationsStatus makeResidentResource(const D3DKMT_HANDLE &handle, size_t size);
|
||||
MemoryOperationsStatus makeResidentResources(const D3DKMT_HANDLE *handles, const uint32_t count, size_t size, const bool forcePagingFence);
|
||||
MemoryOperationsStatus makeResidentResources(const D3DKMT_HANDLE *handles, const uint32_t count, size_t size);
|
||||
MOCKABLE_VIRTUAL void removeResource(const D3DKMT_HANDLE &handle);
|
||||
|
||||
protected:
|
||||
|
||||
Reference in New Issue
Block a user