From 998e0a5833b587322f88828fd8b70f1ae5991897 Mon Sep 17 00:00:00 2001 From: "Zhang, Winston" Date: Thu, 27 Jul 2023 22:16:58 +0000 Subject: [PATCH] feature: zeDriverGetLastErrorDescription error messages (cmdlist) When there is a PRINT_DEBUG_STRING message in cmdlist that is applicable to the user, it is now also set to Driver::zeDriverGetLastErrorDescription. Related-To: LOCI-4652 Signed-off-by: Zhang, Winston --- level_zero/core/source/cmdlist/cmdlist_hw.inl | 17 ++++++++++++++++- .../source/cmdlist/cmdlist_hw_skl_to_tgllp.inl | 3 +++ .../cmdlist/cmdlist_hw_xehp_and_later.inl | 3 +++ .../test_cmdlist_append_launch_kernel_2.cpp | 4 ++++ 4 files changed, 26 insertions(+), 1 deletion(-) diff --git a/level_zero/core/source/cmdlist/cmdlist_hw.inl b/level_zero/core/source/cmdlist/cmdlist_hw.inl index 6779d27c42..6c9b61151b 100644 --- a/level_zero/core/source/cmdlist/cmdlist_hw.inl +++ b/level_zero/core/source/cmdlist/cmdlist_hw.inl @@ -42,6 +42,7 @@ #include "level_zero/core/source/cmdqueue/cmdqueue_imp.h" #include "level_zero/core/source/device/device.h" #include "level_zero/core/source/device/device_imp.h" +#include "level_zero/core/source/driver/driver_handle.h" #include "level_zero/core/source/driver/driver_handle_imp.h" #include "level_zero/core/source/event/event.h" #include "level_zero/core/source/gfx_core_helpers/l0_gfx_core_helper.h" @@ -646,6 +647,8 @@ ze_result_t CommandListCoreFamily::appendImageCopyFromMemory(ze_i } if (pDstRegion->width % groupSizeX || pDstRegion->height % groupSizeY || pDstRegion->depth % groupSizeZ) { + driverHandle->setErrorDescription("Invalid group size {%d, %d, %d} specified\n", + groupSizeX, groupSizeY, groupSizeZ); PRINT_DEBUG_STRING(NEO::DebugManager.flags.PrintDebugMessages.get(), stderr, "Invalid group size {%d, %d, %d} specified\n", groupSizeX, groupSizeY, groupSizeZ); DEBUG_BREAK_IF(true); @@ -740,6 +743,7 @@ ze_result_t CommandListCoreFamily::appendImageCopyToMemory(void * switch (bytesPerPixel) { default: + driverHandle->setErrorDescription("invalid bytesPerPixel of size: %u\n", bytesPerPixel); PRINT_DEBUG_STRING(NEO::DebugManager.flags.PrintDebugMessages.get(), stderr, "invalid bytesPerPixel of size: %u\n", bytesPerPixel); UNRECOVERABLE_IF(true); break; @@ -797,6 +801,8 @@ ze_result_t CommandListCoreFamily::appendImageCopyToMemory(void * } if (pSrcRegion->width % groupSizeX || pSrcRegion->height % groupSizeY || pSrcRegion->depth % groupSizeZ) { + driverHandle->setErrorDescription("Invalid group size {%d, %d, %d} specified\n", + groupSizeX, groupSizeY, groupSizeZ); PRINT_DEBUG_STRING(NEO::DebugManager.flags.PrintDebugMessages.get(), stderr, "Invalid group size {%d, %d, %d} specified\n", groupSizeX, groupSizeY, groupSizeZ); DEBUG_BREAK_IF(true); @@ -939,6 +945,8 @@ ze_result_t CommandListCoreFamily::appendImageCopyRegion(ze_image } if (srcRegion.width % groupSizeX || srcRegion.height % groupSizeY || srcRegion.depth % groupSizeZ) { + driverHandle->setErrorDescription("Invalid group size {%d, %d, %d} specified\n", + groupSizeX, groupSizeY, groupSizeZ); PRINT_DEBUG_STRING(NEO::DebugManager.flags.PrintDebugMessages.get(), stderr, "Invalid group size {%d, %d, %d} specified\n", groupSizeX, groupSizeY, groupSizeZ); DEBUG_BREAK_IF(true); @@ -1520,6 +1528,7 @@ ze_result_t CommandListCoreFamily::appendMemoryCopyKernel3d(Align ze_event_handle_t *phWaitEvents, bool relaxedOrderingDispatch) { auto lock = device->getBuiltinFunctionsLib()->obtainUniqueOwnership(); + const auto driverHandle = static_cast(device->getDriverHandle()); auto builtinKernel = device->getBuiltinFunctionsLib()->getFunction(builtin); @@ -1541,6 +1550,8 @@ ze_result_t CommandListCoreFamily::appendMemoryCopyKernel3d(Align } if (srcRegion->width % groupSizeX || srcRegion->height % groupSizeY || srcRegion->depth % groupSizeZ) { + driverHandle->setErrorDescription("Invalid group size {%d, %d, %d} specified\n", + groupSizeX, groupSizeY, groupSizeZ); PRINT_DEBUG_STRING(NEO::DebugManager.flags.PrintDebugMessages.get(), stderr, "Invalid group size {%d, %d, %d} specified\n", groupSizeX, groupSizeY, groupSizeZ); DEBUG_BREAK_IF(true); @@ -1587,6 +1598,7 @@ ze_result_t CommandListCoreFamily::appendMemoryCopyKernel2d(Align ze_event_handle_t *phWaitEvents, bool relaxedOrderingDispatch) { auto lock = device->getBuiltinFunctionsLib()->obtainUniqueOwnership(); + const auto driverHandle = static_cast(device->getDriverHandle()); auto builtinKernel = device->getBuiltinFunctionsLib()->getFunction(builtin); @@ -1608,6 +1620,8 @@ ze_result_t CommandListCoreFamily::appendMemoryCopyKernel2d(Align } if (srcRegion->width % groupSizeX || srcRegion->height % groupSizeY) { + driverHandle->setErrorDescription("Invalid group size {%d, %d}\n", + groupSizeX, groupSizeY); PRINT_DEBUG_STRING(NEO::DebugManager.flags.PrintDebugMessages.get(), stderr, "Invalid group size {%d, %d}\n", groupSizeX, groupSizeY); DEBUG_BREAK_IF(true); @@ -2016,9 +2030,10 @@ template inline uint64_t CommandListCoreFamily::getInputBufferSize(NEO::ImageType imageType, uint64_t bytesPerPixel, const ze_image_region_t *region) { - + const auto driverHandle = static_cast(device->getDriverHandle()); switch (imageType) { default: + driverHandle->setErrorDescription("invalid imageType: %d\n", imageType); PRINT_DEBUG_STRING(NEO::DebugManager.flags.PrintDebugMessages.get(), stderr, "invalid imageType: %d\n", imageType); UNRECOVERABLE_IF(true); break; diff --git a/level_zero/core/source/cmdlist/cmdlist_hw_skl_to_tgllp.inl b/level_zero/core/source/cmdlist/cmdlist_hw_skl_to_tgllp.inl index 5c1270cbb5..e11878a49c 100644 --- a/level_zero/core/source/cmdlist/cmdlist_hw_skl_to_tgllp.inl +++ b/level_zero/core/source/cmdlist/cmdlist_hw_skl_to_tgllp.inl @@ -20,6 +20,7 @@ #include "shared/source/unified_memory/unified_memory.h" #include "shared/source/utilities/software_tags_manager.h" +#include "level_zero/core/source/driver/driver_handle_imp.h" #include "level_zero/core/source/kernel/kernel_imp.h" #include "encode_surface_state_args.h" @@ -44,6 +45,7 @@ ze_result_t CommandListCoreFamily::appendLaunchKernelWithParams(K Event *event, const CmdListKernelLaunchParams &launchParams) { UNRECOVERABLE_IF(kernel == nullptr); + const auto driverHandle = static_cast(device->getDriverHandle()); const auto &kernelDescriptor = kernel->getKernelDescriptor(); if (kernelDescriptor.kernelAttributes.flags.isInvalid) { return ZE_RESULT_ERROR_INVALID_ARGUMENT; @@ -142,6 +144,7 @@ ze_result_t CommandListCoreFamily::appendLaunchKernelWithParams(K auto localMemSize = static_cast(neoDevice->getDeviceInfo().localMemSize); auto slmTotalSize = kernelImp->getSlmTotalSize(); if (slmTotalSize > 0 && localMemSize < slmTotalSize) { + driverHandle->setErrorDescription("Size of SLM (%u) larger than available (%u)\n", slmTotalSize, localMemSize); PRINT_DEBUG_STRING(NEO::DebugManager.flags.PrintDebugMessages.get(), stderr, "Size of SLM (%u) larger than available (%u)\n", slmTotalSize, localMemSize); return ZE_RESULT_ERROR_OUT_OF_DEVICE_MEMORY; } diff --git a/level_zero/core/source/cmdlist/cmdlist_hw_xehp_and_later.inl b/level_zero/core/source/cmdlist/cmdlist_hw_xehp_and_later.inl index 7cb52f6980..45688d8971 100644 --- a/level_zero/core/source/cmdlist/cmdlist_hw_xehp_and_later.inl +++ b/level_zero/core/source/cmdlist/cmdlist_hw_xehp_and_later.inl @@ -24,6 +24,7 @@ #include "shared/source/xe_hp_core/hw_info.h" #include "level_zero/core/source/cmdlist/cmdlist_hw.h" +#include "level_zero/core/source/driver/driver_handle_imp.h" #include "level_zero/core/source/gfx_core_helpers/l0_gfx_core_helper.h" #include "level_zero/core/source/kernel/kernel_imp.h" #include "level_zero/core/source/module/module.h" @@ -85,6 +86,7 @@ ze_result_t CommandListCoreFamily::appendLaunchKernelWithParams(K NEO::MemorySynchronizationCommands::addSingleBarrier(*commandContainer.getCommandStream(), args); } NEO::Device *neoDevice = device->getNEODevice(); + const auto deviceHandle = static_cast(device->getDriverHandle()); UNRECOVERABLE_IF(kernel == nullptr); const auto kernelImmutableData = kernel->getImmutableData(); @@ -249,6 +251,7 @@ ze_result_t CommandListCoreFamily::appendLaunchKernelWithParams(K auto localMemSize = static_cast(neoDevice->getDeviceInfo().localMemSize); auto slmTotalSize = kernelImp->getSlmTotalSize(); if (slmTotalSize > 0 && localMemSize < slmTotalSize) { + deviceHandle->setErrorDescription("Size of SLM (%u) larger than available (%u)\n", slmTotalSize, localMemSize); PRINT_DEBUG_STRING(NEO::DebugManager.flags.PrintDebugMessages.get(), stderr, "Size of SLM (%u) larger than available (%u)\n", slmTotalSize, localMemSize); return ZE_RESULT_ERROR_OUT_OF_DEVICE_MEMORY; } diff --git a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_launch_kernel_2.cpp b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_launch_kernel_2.cpp index 198babc594..12b27c1093 100644 --- a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_launch_kernel_2.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_launch_kernel_2.cpp @@ -1362,6 +1362,10 @@ HWTEST2_F(CommandListAppendLaunchKernel, givenKernelWithSlmSizeExceedingLocalMem ::testing::internal::CaptureStderr(); result = pCommandList->appendLaunchKernelWithParams(&kernel, &groupCount, nullptr, launchParams); + const char *pStr = nullptr; + std::string emptyString = ""; + zeDriverGetLastErrorDescription(device->getDriverHandle(), &pStr); + EXPECT_NE(0, strcmp(pStr, emptyString.c_str())); EXPECT_EQ(ZE_RESULT_ERROR_OUT_OF_DEVICE_MEMORY, result); output = testing::internal::GetCapturedStderr();