[dpdk-dev] [PATCH v16 3/9] eal/windows: translate Windows errors to errno-style errors
Thomas Monjalon
thomas at monjalon.net
Tue Oct 12 18:16:19 CEST 2021
09/10/2021 09:41, Narcisa Ana Maria Vasile:
> From: Narcisa Vasile <navasile at microsoft.com>
>
> Add function to translate Windows error codes to
> errno-style error codes. The possible return values are chosen
> so that we have as much semantical compatibility between platforms as
> possible.
>
> Signed-off-by: Narcisa Vasile <navasile at microsoft.com>
> ---
> lib/eal/common/rte_thread.c | 6 +--
> lib/eal/include/rte_thread.h | 5 +-
> lib/eal/windows/rte_thread.c | 95 +++++++++++++++++++++++++++---------
> 3 files changed, 76 insertions(+), 30 deletions(-)
>
> diff --git a/lib/eal/common/rte_thread.c b/lib/eal/common/rte_thread.c
> index e1a4d7eae4..27ad1c7eb0 100644
> --- a/lib/eal/common/rte_thread.c
> +++ b/lib/eal/common/rte_thread.c
> @@ -47,7 +47,7 @@ rte_thread_attr_init(rte_thread_attr_t *attr)
>
> int
> rte_thread_attr_set_affinity(rte_thread_attr_t *thread_attr,
> - rte_cpuset_t *cpuset)
> + rte_cpuset_t *cpuset)
> {
> RTE_VERIFY(thread_attr != NULL);
> RTE_VERIFY(cpuset != NULL);
> @@ -59,7 +59,7 @@ rte_thread_attr_set_affinity(rte_thread_attr_t *thread_attr,
>
> int
> rte_thread_attr_get_affinity(rte_thread_attr_t *thread_attr,
> - rte_cpuset_t *cpuset)
> + rte_cpuset_t *cpuset)
> {
> RTE_VERIFY(thread_attr != NULL);
> RTE_VERIFY(cpuset != NULL);
> @@ -71,7 +71,7 @@ rte_thread_attr_get_affinity(rte_thread_attr_t *thread_attr,
>
> int
> rte_thread_attr_set_priority(rte_thread_attr_t *thread_attr,
> - enum rte_thread_priority priority)
> + enum rte_thread_priority priority)
Above are unrelated changes.
> --- a/lib/eal/windows/rte_thread.c
> +++ b/lib/eal/windows/rte_thread.c
> @@ -13,6 +13,54 @@ struct eal_tls_key {
> DWORD thread_index;
> };
>
> +/* Translates the most common error codes related to threads */
> +static int
> +thread_translate_win32_error(DWORD error)
So you decide to adopt POSIX error codes for the DPDK API. OK
> +{
> + 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;
> + }
> +
> + return EINVAL;
> +}
[...]
> rte_thread_key_create(rte_thread_key *key,
> __rte_unused void (*destructor)(void *))
> {
> + int ret;
> +
> *key = malloc(sizeof(**key));
> if ((*key) == NULL) {
> RTE_LOG(DEBUG, EAL, "Cannot allocate TLS key.\n");
> - rte_errno = ENOMEM;
> - return -1;
> + return ENOMEM;
> }
Why this change? rte_errno and negative error code are good.
More information about the dev
mailing list