mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-20 17:00:59 +08:00
Return error code from BufferObject::bind
Change-Id: I12df63a651c8b0aa0a0b296ae0c8732ddf789a98 Signed-off-by: Lukasz Jobczyk <lukasz.jobczyk@intel.com>
This commit is contained in:
@@ -56,11 +56,13 @@ void DrmAllocation::bindBO(BufferObject *bo, OsContext *osContext, uint32_t vmHa
|
||||
bufferObjects->push_back(bo);
|
||||
|
||||
} else {
|
||||
auto retVal = 0;
|
||||
if (bind) {
|
||||
bo->bind(osContext, vmHandleId);
|
||||
retVal = bo->bind(osContext, vmHandleId);
|
||||
} else {
|
||||
bo->unbind(osContext, vmHandleId);
|
||||
retVal = bo->unbind(osContext, vmHandleId);
|
||||
}
|
||||
UNRECOVERABLE_IF(retVal);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -149,26 +149,32 @@ int BufferObject::exec(uint32_t used, size_t startOffset, unsigned int flags, bo
|
||||
return err;
|
||||
}
|
||||
|
||||
void BufferObject::bind(OsContext *osContext, uint32_t vmHandleId) {
|
||||
int BufferObject::bind(OsContext *osContext, uint32_t vmHandleId) {
|
||||
int retVal = 0;
|
||||
auto contextId = getOsContextId(osContext);
|
||||
if (!this->bindInfo[contextId][vmHandleId]) {
|
||||
auto ret = this->drm->bindBufferObject(osContext, vmHandleId, this);
|
||||
retVal = this->drm->bindBufferObject(osContext, vmHandleId, this);
|
||||
auto err = this->drm->getErrno();
|
||||
PRINT_DEBUG_STRING(DebugManager.flags.PrintBOBindingResult.get(), stderr, "bind BO-%d to VM %u, range: %llx - %llx, size: %lld, result: %d, errno: %d(%s)\n", this->handle, vmHandleId, this->gpuAddress, ptrOffset(this->gpuAddress, this->size), this->size, ret, err, strerror(err));
|
||||
UNRECOVERABLE_IF(ret != 0);
|
||||
this->bindInfo[contextId][vmHandleId] = true;
|
||||
PRINT_DEBUG_STRING(DebugManager.flags.PrintBOBindingResult.get(), stderr, "bind BO-%d to VM %u, range: %llx - %llx, size: %lld, result: %d, errno: %d(%s)\n", this->handle, vmHandleId, this->gpuAddress, ptrOffset(this->gpuAddress, this->size), this->size, retVal, err, strerror(err));
|
||||
if (!retVal) {
|
||||
this->bindInfo[contextId][vmHandleId] = true;
|
||||
}
|
||||
}
|
||||
return retVal;
|
||||
}
|
||||
|
||||
void BufferObject::unbind(OsContext *osContext, uint32_t vmHandleId) {
|
||||
int BufferObject::unbind(OsContext *osContext, uint32_t vmHandleId) {
|
||||
int retVal = 0;
|
||||
auto contextId = getOsContextId(osContext);
|
||||
if (this->bindInfo[contextId][vmHandleId]) {
|
||||
auto ret = this->drm->unbindBufferObject(osContext, vmHandleId, this);
|
||||
retVal = this->drm->unbindBufferObject(osContext, vmHandleId, this);
|
||||
auto err = this->drm->getErrno();
|
||||
PRINT_DEBUG_STRING(DebugManager.flags.PrintBOBindingResult.get(), stderr, "unbind BO-%d from VM %u, range: %llx - %llx, size: %lld, result: %d, errno: %d(%s)\n", this->handle, vmHandleId, this->gpuAddress, ptrOffset(this->gpuAddress, this->size), this->size, ret, err, strerror(err));
|
||||
UNRECOVERABLE_IF(ret != 0);
|
||||
this->bindInfo[contextId][vmHandleId] = false;
|
||||
PRINT_DEBUG_STRING(DebugManager.flags.PrintBOBindingResult.get(), stderr, "unbind BO-%d from VM %u, range: %llx - %llx, size: %lld, result: %d, errno: %d(%s)\n", this->handle, vmHandleId, this->gpuAddress, ptrOffset(this->gpuAddress, this->size), this->size, retVal, err, strerror(err));
|
||||
if (!retVal) {
|
||||
this->bindInfo[contextId][vmHandleId] = false;
|
||||
}
|
||||
}
|
||||
return retVal;
|
||||
}
|
||||
|
||||
void BufferObject::printExecutionBuffer(drm_i915_gem_execbuffer2 &execbuf, const size_t &residencyCount, drm_i915_gem_exec_object2 *execObjectsStorage, BufferObject *const residency[]) {
|
||||
@@ -207,11 +213,7 @@ int BufferObject::pin(BufferObject *const boToPin[], size_t numberOfBos, OsConte
|
||||
for (auto drmIterator = 0u; drmIterator < osContext->getDeviceBitfield().size(); drmIterator++) {
|
||||
if (osContext->getDeviceBitfield().test(drmIterator)) {
|
||||
for (size_t i = 0; i < numberOfBos; i++) {
|
||||
retVal |= this->drm->bindBufferObject(osContext, drmIterator, boToPin[i]);
|
||||
if (!retVal) {
|
||||
auto contextId = getOsContextId(osContext);
|
||||
boToPin[i]->bindInfo[contextId][drmIterator] = true;
|
||||
}
|
||||
retVal |= boToPin[i]->bind(osContext, drmIterator);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,8 +47,8 @@ class BufferObject {
|
||||
|
||||
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, drm_i915_gem_exec_object2 *execObjectsStorage);
|
||||
|
||||
void bind(OsContext *osContext, uint32_t vmHandleId);
|
||||
void unbind(OsContext *osContext, uint32_t vmHandleId);
|
||||
int bind(OsContext *osContext, uint32_t vmHandleId);
|
||||
int unbind(OsContext *osContext, uint32_t vmHandleId);
|
||||
|
||||
void printExecutionBuffer(drm_i915_gem_execbuffer2 &execbuf, const size_t &residencyCount, drm_i915_gem_exec_object2 *execObjectsStorage, BufferObject *const residency[]);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user