Add a layer to translate exec buffer error to SubmissionStatus value
handle errors: EWOULDBLOCK, ENOSPC, ENOMEM, ENXIO Related-To: NEO-7144, NEO-7412 Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
parent
797f395f0e
commit
930ca001a1
|
@ -19,13 +19,7 @@ SubmissionStatus DrmCommandStreamReceiver<GfxFamily>::flushInternal(const BatchB
|
|||
|
||||
int ret = this->exec(batchBuffer, 0u, static_cast<const OsContextLinux *>(osContext)->getDrmContextIds()[0], 0);
|
||||
|
||||
if (ret) {
|
||||
if (ret == EWOULDBLOCK) {
|
||||
return SubmissionStatus::OUT_OF_HOST_MEMORY;
|
||||
}
|
||||
return SubmissionStatus::FAILED;
|
||||
}
|
||||
return SubmissionStatus::SUCCESS;
|
||||
return Drm::getSubmissionStatusFromReturnCode(ret);
|
||||
}
|
||||
|
||||
template <typename GfxFamily>
|
||||
|
|
|
@ -39,10 +39,7 @@ SubmissionStatus DrmCommandStreamReceiver<GfxFamily>::flushInternal(const BatchB
|
|||
|
||||
int ret = this->exec(batchBuffer, tileIterator, drmContextIds[contextIndex], contextIndex);
|
||||
if (ret) {
|
||||
if (ret == EWOULDBLOCK) {
|
||||
return SubmissionStatus::OUT_OF_HOST_MEMORY;
|
||||
}
|
||||
return SubmissionStatus::FAILED;
|
||||
return Drm::getSubmissionStatusFromReturnCode(ret);
|
||||
}
|
||||
|
||||
contextIndex++;
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
#include "drm_neo.h"
|
||||
|
||||
#include "shared/source/command_stream/submission_status.h"
|
||||
#include "shared/source/debug_settings/debug_settings_manager.h"
|
||||
#include "shared/source/execution_environment/execution_environment.h"
|
||||
#include "shared/source/execution_environment/root_device_environment.h"
|
||||
|
@ -51,6 +52,21 @@ Drm::Drm(std::unique_ptr<HwDeviceIdDrm> &&hwDeviceIdIn, RootDeviceEnvironment &r
|
|||
fenceVal.fill(0u);
|
||||
}
|
||||
|
||||
SubmissionStatus Drm::getSubmissionStatusFromReturnCode(int32_t retCode) {
|
||||
switch (retCode) {
|
||||
case 0:
|
||||
return SubmissionStatus::SUCCESS;
|
||||
case EWOULDBLOCK:
|
||||
case ENOMEM:
|
||||
case ENOSPC:
|
||||
return SubmissionStatus::OUT_OF_HOST_MEMORY;
|
||||
case ENXIO:
|
||||
return SubmissionStatus::OUT_OF_MEMORY;
|
||||
default:
|
||||
return SubmissionStatus::FAILED;
|
||||
}
|
||||
}
|
||||
|
||||
void Drm::queryAndSetVmBindPatIndexProgrammingSupport() {
|
||||
auto hwInfo = rootDeviceEnvironment.getHardwareInfo();
|
||||
|
||||
|
|
|
@ -42,6 +42,8 @@ namespace NEO {
|
|||
constexpr uint32_t contextPrivateParamBoost = 0x80000000;
|
||||
|
||||
enum class AllocationType;
|
||||
enum class SubmissionStatus : uint32_t;
|
||||
|
||||
class BufferObject;
|
||||
class DeviceFactory;
|
||||
class OsContext;
|
||||
|
@ -67,6 +69,8 @@ class Drm : public DriverModel {
|
|||
static constexpr DriverModelType driverModelType = DriverModelType::DRM;
|
||||
static constexpr size_t completionFenceOffset = 1024;
|
||||
|
||||
static SubmissionStatus getSubmissionStatusFromReturnCode(int32_t retCode);
|
||||
|
||||
struct QueryTopologyData {
|
||||
int sliceCount;
|
||||
int subSliceCount;
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include "shared/source/command_stream/submission_status.h"
|
||||
#include "shared/source/helpers/file_io.h"
|
||||
#include "shared/source/helpers/hw_info.h"
|
||||
#include "shared/source/os_interface/device_factory.h"
|
||||
|
@ -38,6 +39,15 @@ std::string getLinuxDevicesPath(const char *file) {
|
|||
return resultString;
|
||||
}
|
||||
|
||||
TEST(DrmTest, whenGettingSubmissionStatusFromReturnCodeThenProperValueIsReturned) {
|
||||
EXPECT_EQ(SubmissionStatus::SUCCESS, Drm::getSubmissionStatusFromReturnCode(0));
|
||||
EXPECT_EQ(SubmissionStatus::OUT_OF_HOST_MEMORY, Drm::getSubmissionStatusFromReturnCode(EWOULDBLOCK));
|
||||
EXPECT_EQ(SubmissionStatus::OUT_OF_HOST_MEMORY, Drm::getSubmissionStatusFromReturnCode(ENOSPC));
|
||||
EXPECT_EQ(SubmissionStatus::OUT_OF_HOST_MEMORY, Drm::getSubmissionStatusFromReturnCode(ENOMEM));
|
||||
EXPECT_EQ(SubmissionStatus::OUT_OF_MEMORY, Drm::getSubmissionStatusFromReturnCode(ENXIO));
|
||||
EXPECT_EQ(SubmissionStatus::FAILED, Drm::getSubmissionStatusFromReturnCode(EBUSY));
|
||||
}
|
||||
|
||||
TEST(DrmTest, GivenValidPciPathWhenGettingAdapterBdfThenCorrectValuesAreReturned) {
|
||||
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
|
||||
DrmMock drm{*executionEnvironment->rootDeviceEnvironments[0]};
|
||||
|
|
Loading…
Reference in New Issue