Lock exec path if default memory operations handler is used

Signed-off-by: Lukasz Jobczyk <lukasz.jobczyk@intel.com>
This commit is contained in:
Lukasz Jobczyk
2020-11-27 12:02:43 +00:00
committed by Compute-Runtime-Automation
parent 6e805b4fde
commit 0829e4484e
7 changed files with 43 additions and 11 deletions

View File

@@ -23,7 +23,7 @@ class DrmMemoryOperationsHandler : public MemoryOperationsHandler {
virtual MemoryOperationsStatus makeResidentWithinOsContext(OsContext *osContext, ArrayRef<GraphicsAllocation *> gfxAllocations, bool evictable) = 0;
virtual MemoryOperationsStatus evictWithinOsContext(OsContext *osContext, GraphicsAllocation &gfxAllocation) = 0;
virtual void mergeWithResidencyContainer(OsContext *osContext, ResidencyContainer &residencyContainer) = 0;
virtual std::unique_lock<std::mutex> lockHandlerForExecWA() = 0;
virtual std::unique_lock<std::mutex> lockHandlerIfUsed() = 0;
static std::unique_ptr<DrmMemoryOperationsHandler> create(Drm &drm, uint32_t rootDeviceIndex);

View File

@@ -96,7 +96,7 @@ void DrmMemoryOperationsHandlerBind::mergeWithResidencyContainer(OsContext *osCo
residencyContainer.clear();
}
std::unique_lock<std::mutex> DrmMemoryOperationsHandlerBind::lockHandlerForExecWA() {
std::unique_lock<std::mutex> DrmMemoryOperationsHandlerBind::lockHandlerIfUsed() {
return std::unique_lock<std::mutex>();
}

View File

@@ -23,7 +23,7 @@ class DrmMemoryOperationsHandlerBind : public DrmMemoryOperationsHandler {
MemoryOperationsStatus isResident(Device *device, GraphicsAllocation &gfxAllocation) override;
void mergeWithResidencyContainer(OsContext *osContext, ResidencyContainer &residencyContainer) override;
std::unique_lock<std::mutex> lockHandlerForExecWA() override;
std::unique_lock<std::mutex> lockHandlerIfUsed() override;
MOCKABLE_VIRTUAL void evictUnusedAllocations();

View File

@@ -56,9 +56,10 @@ void DrmMemoryOperationsHandlerDefault::mergeWithResidencyContainer(OsContext *o
}
}
std::unique_lock<std::mutex> DrmMemoryOperationsHandlerDefault::lockHandlerForExecWA() {
if (DebugManager.flags.MakeAllBuffersResident.get()) {
return std::unique_lock<std::mutex>(this->mutex);
std::unique_lock<std::mutex> DrmMemoryOperationsHandlerDefault::lockHandlerIfUsed() {
std::unique_lock<std::mutex> lock(this->mutex);
if (this->residency.size()) {
return lock;
}
return std::unique_lock<std::mutex>();
}

View File

@@ -24,7 +24,7 @@ class DrmMemoryOperationsHandlerDefault : public DrmMemoryOperationsHandler {
MemoryOperationsStatus evict(Device *device, GraphicsAllocation &gfxAllocation) override;
void mergeWithResidencyContainer(OsContext *osContext, ResidencyContainer &residencyContainer) override;
std::unique_lock<std::mutex> lockHandlerForExecWA() override;
std::unique_lock<std::mutex> lockHandlerIfUsed() override;
protected:
std::unordered_set<GraphicsAllocation *> residency;