[dpdk-dev] [PATCH v5 03/10] windows/eal: translate Windows errors to errno-style errors
Tal Shnaiderman
talshn at nvidia.com
Wed Mar 31 15:56:09 CEST 2021
> Subject: [PATCH v5 03/10] windows/eal: translate Windows errors to errno-
> style errors
>
> External email: Use caution opening links or attachments
>
>
> From: Narcisa Vasile <navasile at microsoft.com>
>
> Add function to translate Windows error codes to errno-style error codes.
>
> Signed-off-by: Narcisa Vasile <navasile at microsoft.com>
> ---
> lib/librte_eal/windows/rte_thread.c | 65 ++++++++++++++++++++++-------
> 1 file changed, 50 insertions(+), 15 deletions(-)
>
> diff --git a/lib/librte_eal/windows/rte_thread.c
> b/lib/librte_eal/windows/rte_thread.c
> index b29336cbd..e9181b47f 100644
> --- a/lib/librte_eal/windows/rte_thread.c
> +++ b/lib/librte_eal/windows/rte_thread.c
> @@ -12,6 +12,47 @@ struct eal_tls_key {
> DWORD thread_index;
> };
>
> +/* Translates the most common error codes related to threads */ static
> +int rte_thread_translate_win32_error(DWORD error) {
This DWORD error will always the output of GetLastError()? If so can we move it inside the function?
Also, I don't think this is a thread specific function, other implementations can use it in the future, maybe move it to rte_windows.h?
> + switch (error) {
> + case ERROR_SUCCESS:
> + return 0;
> +
> + case ERROR_INVALID_PARAMETER:
> + return EINVAL;
> +
> + case ERROR_INVALID_HANDLE:
> + return EFAULT;
> +
> + case ERROR_NOT_ENOUGH_MEMORY:
> + /* FALLTHROUGH */
> + case ERROR_NO_SYSTEM_RESOURCES:
> + return ENOMEM;
> +
> + case ERROR_PRIVILEGE_NOT_HELD:
> + /* FALLTHROUGH */
> + case ERROR_ACCESS_DENIED:
> + return EACCES;
> +
> + case ERROR_ALREADY_EXISTS:
> + return EEXIST;
> +
> + case ERROR_POSSIBLE_DEADLOCK:
> + return EDEADLK;
> +
> + case ERROR_INVALID_FUNCTION:
> + /* FALLTHROUGH */
> + case ERROR_CALL_NOT_IMPLEMENTED:
> + return ENOSYS;
> +
> + default:
> + return EINVAL;
> + }
> +
> + return EINVAL;
> +}
> +
> rte_thread_t
> rte_thread_self(void)
> {
> @@ -87,15 +128,13 @@ rte_thread_key_create(rte_thread_key *key,
> *key = malloc(sizeof(**key));
> if ((*key) == NULL) {
> RTE_LOG(DEBUG, EAL, "Cannot allocate TLS key.\n");
> - rte_errno = ENOMEM;
> - return -1;
> + return ENOMEM;
> }
> (*key)->thread_index = TlsAlloc();
> if ((*key)->thread_index == TLS_OUT_OF_INDEXES) {
> RTE_LOG_WIN32_ERR("TlsAlloc()");
> free(*key);
> - rte_errno = ENOEXEC;
> - return -1;
> + return rte_thread_translate_win32_error(GetLastError());
> }
> return 0;
> }
> @@ -103,16 +142,14 @@ rte_thread_key_create(rte_thread_key *key, int
> rte_thread_key_delete(rte_thread_key key) {
> - if (!key) {
> + if (key == NULL) {
> RTE_LOG(DEBUG, EAL, "Invalid TLS key.\n");
> - rte_errno = EINVAL;
> - return -1;
> + return EINVAL;
> }
> if (!TlsFree(key->thread_index)) {
> RTE_LOG_WIN32_ERR("TlsFree()");
> free(key);
> - rte_errno = ENOEXEC;
> - return -1;
> + return rte_thread_translate_win32_error(GetLastError());
> }
> free(key);
> return 0;
> @@ -123,17 +160,15 @@ rte_thread_value_set(rte_thread_key key, const
> void *value) {
> char *p;
>
> - if (!key) {
> + if (key == NULL) {
> RTE_LOG(DEBUG, EAL, "Invalid TLS key.\n");
> - rte_errno = EINVAL;
> - return -1;
> + return EINVAL;
> }
> /* discard const qualifier */
> p = (char *) (uintptr_t) value;
> if (!TlsSetValue(key->thread_index, p)) {
> RTE_LOG_WIN32_ERR("TlsSetValue()");
> - rte_errno = ENOEXEC;
> - return -1;
> + return rte_thread_translate_win32_error(GetLastError());
> }
> return 0;
> }
> @@ -143,7 +178,7 @@ rte_thread_value_get(rte_thread_key key) {
> void *output;
>
This function is missing the change to rte_thread_translate_win32_error.
Aldo need to change function docu.
> - if (!key) {
> + if (key == NULL) {
> RTE_LOG(DEBUG, EAL, "Invalid TLS key.\n");
> rte_errno = EINVAL;
> return NULL;
> --
> 2.30.0.vfs.0.2
More information about the dev
mailing list