diff options
author | Mikael Olsson <mikael.olsson@arm.com> | 2024-04-04 15:27:50 +0200 |
---|---|---|
committer | Mikael Olsson <mikael.olsson@arm.com> | 2024-04-04 15:27:50 +0200 |
commit | b2f4a2cd2de6647c9e6d6d4db9108a81d4757e33 (patch) | |
tree | c46b88b13549f1e041cf00eb49b010c6578d168b | |
parent | acbebc6963aeb2cb38341561b7788a52e49c6c3e (diff) | |
download | ethos-u-linux-driver-stack-b2f4a2cd2de6647c9e6d6d4db9108a81d4757e33.tar.gz |
Add IOCTL command names to driver library logging
Currently the driver library will log IOCTL commands as hexadecimal
values, which makes it hard to know what command is being logged unless
you know the command values. To make this easier, the driver library
will now translate the command values into their respective names when
logging.
Change-Id: I7ef2f411b0261ea7819c1a7a6825422859031a25
Signed-off-by: Mikael Olsson <mikael.olsson@arm.com>
-rw-r--r-- | driver_library/src/ethosu.cpp | 33 | ||||
-rw-r--r-- | tests/run_inference_test.cpp | 9 |
2 files changed, 33 insertions, 9 deletions
diff --git a/driver_library/src/ethosu.cpp b/driver_library/src/ethosu.cpp index c00f69f..01666d2 100644 --- a/driver_library/src/ethosu.cpp +++ b/driver_library/src/ethosu.cpp @@ -42,6 +42,34 @@ std::string driverVersionToString(const EthosU::ethosu_uapi_kernel_driver_versio return std::to_string(version.major) + "." + std::to_string(version.minor) + "." + std::to_string(version.patch); } +std::string cmdToString(unsigned long cmd) { + // Needed for the struct types in the macro expansions + using namespace EthosU; + + switch (cmd) { + case ETHOSU_IOCTL_PING: + return "PING"; + case ETHOSU_IOCTL_CAPABILITIES_REQ: + return "CAPABILITIES_REQ"; + case ETHOSU_IOCTL_DRIVER_VERSION_GET: + return "DRIVER_VERSION_GET"; + case ETHOSU_IOCTL_BUFFER_CREATE: + return "BUFFER_CREATE"; + case ETHOSU_IOCTL_NETWORK_CREATE: + return "NETWORK_CREATE"; + case ETHOSU_IOCTL_NETWORK_INFO: + return "NETWORK_INFO"; + case ETHOSU_IOCTL_INFERENCE_CREATE: + return "INFERENCE_CREATE"; + case ETHOSU_IOCTL_INFERENCE_STATUS: + return "INFERENCE_STATUS"; + case ETHOSU_IOCTL_INFERENCE_CANCEL: + return "INFERENCE_CANCEL"; + default: + return std::string("Unknown command: ").append(to_string(cmd)); + } +} + enum class Severity { Error, Warning, Info, Debug }; class Log { @@ -105,11 +133,10 @@ const SemanticVersion getLibraryVersion() { __attribute__((weak)) int eioctl(int fd, unsigned long cmd, void *data = nullptr) { int ret = ::ioctl(fd, cmd, data); if (ret < 0) { - throw EthosU::Exception(string("IOCTL cmd=").append(to_string(cmd) + " failed: " + strerror(errno)).c_str()); + throw EthosU::Exception(string("IOCTL cmd=").append(cmdToString(cmd) + " failed: " + strerror(errno)).c_str()); } - Log(Severity::Debug) << "ioctl. fd=" << fd << ", cmd=" << setw(8) << setfill('0') << hex << cmd << ", ret=" << ret - << endl; + Log(Severity::Debug) << "ioctl. fd=" << fd << ", cmd=" << cmdToString(cmd) << ", ret=" << ret << endl; return ret; } diff --git a/tests/run_inference_test.cpp b/tests/run_inference_test.cpp index 88fc691..5e529e6 100644 --- a/tests/run_inference_test.cpp +++ b/tests/run_inference_test.cpp @@ -130,8 +130,7 @@ void testNetworkInfoUnparsableBuffer(const Device &device) { } void testNetworkInvalidType(const Device &device) { - const std::string expected_error = - std::string("IOCTL cmd=") + std::to_string(ETHOSU_IOCTL_NETWORK_CREATE) + " failed: " + std::strerror(EINVAL); + const std::string expected_error = std::string("IOCTL cmd=NETWORK_CREATE") + " failed: " + std::strerror(EINVAL); struct ethosu_uapi_network_create net_req = {}; net_req.type = ETHOSU_UAPI_NETWORK_INDEX + 1; try { @@ -144,8 +143,7 @@ void testNetworkInvalidType(const Device &device) { } void testNetworkInvalidDataPtr(const Device &device) { - const std::string expected_error = - std::string("IOCTL cmd=") + std::to_string(ETHOSU_IOCTL_NETWORK_CREATE) + " failed: " + std::strerror(EINVAL); + const std::string expected_error = std::string("IOCTL cmd=NETWORK_CREATE") + " failed: " + std::strerror(EINVAL); struct ethosu_uapi_network_create net_req = {}; net_req.type = ETHOSU_UAPI_NETWORK_USER_BUFFER; net_req.network.data_ptr = 0U; @@ -160,8 +158,7 @@ void testNetworkInvalidDataPtr(const Device &device) { } void testNetworkInvalidDataSize(const Device &device) { - const std::string expected_error = - std::string("IOCTL cmd=") + std::to_string(ETHOSU_IOCTL_NETWORK_CREATE) + " failed: " + std::strerror(EINVAL); + const std::string expected_error = std::string("IOCTL cmd=NETWORK_CREATE") + " failed: " + std::strerror(EINVAL); struct ethosu_uapi_network_create net_req = {}; net_req.type = ETHOSU_UAPI_NETWORK_USER_BUFFER; net_req.network.data_ptr = reinterpret_cast<uintptr_t>(networkModelData); |