From: Narcisa Vasile <navas...@microsoft.com>

Rename pthread* with the new rte_thread* API.

Signed-off-by: Narcisa Vasile <navas...@microsoft.com>
---
 app/test/process.h                            |  8 +--
 app/test/test_lcores.c                        | 18 +++----
 app/test/test_link_bonding.c                  | 14 ++---
 app/test/test_lpm_perf.c                      | 12 ++---
 drivers/bus/dpaa/base/qbman/bman_driver.c     |  5 +-
 drivers/bus/dpaa/base/qbman/dpaa_sys.c        | 14 ++---
 drivers/bus/dpaa/base/qbman/process.c         |  6 +--
 drivers/bus/dpaa/dpaa_bus.c                   | 14 ++---
 drivers/bus/fslmc/portal/dpaa2_hw_dpio.c      | 19 ++++---
 drivers/common/dpaax/compat.h                 |  2 +-
 drivers/common/mlx5/windows/mlx5_common_os.h  |  1 +
 drivers/compress/mlx5/mlx5_compress.c         | 10 ++--
 drivers/event/dlb2/dlb2.c                     |  2 +-
 drivers/event/dlb2/pf/base/dlb2_osdep.h       |  7 ++-
 drivers/mempool/dpaa/dpaa_mempool.c           |  2 +-
 drivers/net/af_xdp/rte_eth_af_xdp.c           | 18 +++----
 drivers/net/ark/ark_ethdev.c                  |  4 +-
 drivers/net/ark/ark_pktgen.c                  |  4 +-
 drivers/net/atlantic/atl_ethdev.c             |  4 +-
 drivers/net/atlantic/atl_types.h              |  4 +-
 .../net/atlantic/hw_atl/hw_atl_utils_fw2x.c   | 26 ++++-----
 drivers/net/axgbe/axgbe_common.h              |  2 +-
 drivers/net/axgbe/axgbe_dev.c                 |  8 +--
 drivers/net/axgbe/axgbe_ethdev.c              |  8 +--
 drivers/net/axgbe/axgbe_ethdev.h              |  8 +--
 drivers/net/axgbe/axgbe_i2c.c                 |  4 +-
 drivers/net/axgbe/axgbe_mdio.c                |  8 +--
 drivers/net/axgbe/axgbe_phy_impl.c            |  6 +--
 drivers/net/bnxt/bnxt.h                       | 16 +++---
 drivers/net/bnxt/bnxt_cpr.c                   |  4 +-
 drivers/net/bnxt/bnxt_ethdev.c                | 54 +++++++++----------
 drivers/net/bnxt/bnxt_irq.c                   |  8 +--
 drivers/net/bnxt/bnxt_reps.c                  | 10 ++--
 drivers/net/bnxt/tf_ulp/bnxt_ulp.c            | 34 ++++++------
 drivers/net/bnxt/tf_ulp/bnxt_ulp.h            |  4 +-
 drivers/net/bnxt/tf_ulp/ulp_fc_mgr.c          | 28 +++++-----
 drivers/net/bnxt/tf_ulp/ulp_fc_mgr.h          |  2 +-
 drivers/net/dpaa/dpaa_ethdev.c                |  2 +-
 drivers/net/dpaa/dpaa_rxtx.c                  |  2 +-
 drivers/net/ena/base/ena_plat_dpdk.h          | 15 +++---
 drivers/net/enic/enic.h                       |  2 +-
 drivers/net/ice/ice_dcf_parent.c              |  8 +--
 drivers/net/ixgbe/ixgbe_ethdev.c              |  6 +--
 drivers/net/ixgbe/ixgbe_ethdev.h              |  2 +-
 drivers/net/mlx5/linux/mlx5_os.c              |  2 +-
 drivers/net/mlx5/mlx5.c                       | 20 +++----
 drivers/net/mlx5/mlx5.h                       |  2 +-
 drivers/net/mlx5/mlx5_txpp.c                  |  8 +--
 drivers/net/mlx5/windows/mlx5_flow_os.c       | 10 ++--
 drivers/net/mlx5/windows/mlx5_os.c            |  2 +-
 drivers/net/qede/base/bcm_osal.h              |  8 +--
 drivers/net/vhost/rte_eth_vhost.c             | 24 ++++-----
 .../net/virtio/virtio_user/virtio_user_dev.c  | 30 +++++------
 .../net/virtio/virtio_user/virtio_user_dev.h  |  2 +-
 drivers/vdpa/ifc/ifcvf_vdpa.c                 | 49 ++++++++---------
 drivers/vdpa/mlx5/mlx5_vdpa.c                 | 24 ++++-----
 drivers/vdpa/mlx5/mlx5_vdpa.h                 |  4 +-
 drivers/vdpa/mlx5/mlx5_vdpa_event.c           | 51 ++++++++----------
 examples/kni/main.c                           |  1 +
 .../pthread_shim/pthread_shim.h               |  1 +
 60 files changed, 334 insertions(+), 339 deletions(-)

diff --git a/app/test/process.h b/app/test/process.h
index a09a088477..9e4be17bad 100644
--- a/app/test/process.h
+++ b/app/test/process.h
@@ -26,7 +26,7 @@
 
 #ifdef RTE_LIB_PDUMP
 #ifdef RTE_NET_RING
-#include <pthread.h>
+#include <rte_thread.h>
 extern void *send_pkts(void *empty);
 extern uint16_t flag_for_send_pkts;
 #endif
@@ -47,7 +47,7 @@ process_dup(const char *const argv[], int numargs, const char 
*env_value)
        char path[32];
 #ifdef RTE_LIB_PDUMP
 #ifdef RTE_NET_RING
-       pthread_t thread;
+       rte_thread_t thread;
        int rc;
 #endif
 #endif
@@ -128,7 +128,7 @@ process_dup(const char *const argv[], int numargs, const 
char *env_value)
 #ifdef RTE_LIB_PDUMP
 #ifdef RTE_NET_RING
        if ((strcmp(env_value, "run_pdump_server_tests") == 0)) {
-               rc = pthread_create(&thread, NULL, &send_pkts, NULL);
+               rc = rte_thread_create(&thread, NULL, &send_pkts, NULL);
                if (rc != 0) {
                        rte_panic("Cannot start send pkts thread: %s\n",
                                  strerror(rc));
@@ -143,7 +143,7 @@ process_dup(const char *const argv[], int numargs, const 
char *env_value)
 #ifdef RTE_NET_RING
        if ((strcmp(env_value, "run_pdump_server_tests") == 0)) {
                flag_for_send_pkts = 0;
-               pthread_join(thread, NULL);
+               rte_thread_join(thread, NULL);
        }
 #endif
 #endif
diff --git a/app/test/test_lcores.c b/app/test/test_lcores.c
index 19a7ab9fce..accdd858a6 100644
--- a/app/test/test_lcores.c
+++ b/app/test/test_lcores.c
@@ -2,7 +2,7 @@
  * Copyright (c) 2020 Red Hat, Inc.
  */
 
-#include <pthread.h>
+#include <rte_thread.h>
 #include <string.h>
 
 #include <rte_common.h>
@@ -14,7 +14,7 @@
 struct thread_context {
        enum { INIT, ERROR, DONE } state;
        bool lcore_id_any;
-       pthread_t id;
+       rte_thread_t id;
        unsigned int *registered_count;
 };
 
@@ -77,7 +77,7 @@ test_non_eal_lcores(unsigned int eal_threads_count)
                t->state = INIT;
                t->registered_count = &registered_count;
                t->lcore_id_any = false;
-               if (pthread_create(&t->id, NULL, thread_loop, t) != 0)
+               if (rte_thread_create(&t->id, NULL, thread_loop, t) != 0)
                        break;
                non_eal_threads_count++;
        }
@@ -96,7 +96,7 @@ test_non_eal_lcores(unsigned int eal_threads_count)
        t->state = INIT;
        t->registered_count = &registered_count;
        t->lcore_id_any = true;
-       if (pthread_create(&t->id, NULL, thread_loop, t) == 0) {
+       if (rte_thread_create(&t->id, NULL, thread_loop, t) == 0) {
                non_eal_threads_count++;
                printf("non-EAL threads count: %u\n", non_eal_threads_count);
                while (__atomic_load_n(&registered_count, __ATOMIC_ACQUIRE) !=
@@ -110,7 +110,7 @@ test_non_eal_lcores(unsigned int eal_threads_count)
        ret = 0;
        for (i = 0; i < non_eal_threads_count; i++) {
                t = &thread_contexts[i];
-               pthread_join(t->id, NULL);
+               rte_thread_join(t->id, NULL);
                if (t->state != DONE)
                        ret = -1;
        }
@@ -262,7 +262,7 @@ test_non_eal_lcores_callback(unsigned int eal_threads_count)
        t->state = INIT;
        t->registered_count = &registered_count;
        t->lcore_id_any = false;
-       if (pthread_create(&t->id, NULL, thread_loop, t) != 0)
+       if (rte_thread_create(&t->id, NULL, thread_loop, t) != 0)
                goto cleanup_threads;
        non_eal_threads_count++;
        while (__atomic_load_n(&registered_count, __ATOMIC_ACQUIRE) !=
@@ -285,7 +285,7 @@ test_non_eal_lcores_callback(unsigned int eal_threads_count)
        t->state = INIT;
        t->registered_count = &registered_count;
        t->lcore_id_any = true;
-       if (pthread_create(&t->id, NULL, thread_loop, t) != 0)
+       if (rte_thread_create(&t->id, NULL, thread_loop, t) != 0)
                goto cleanup_threads;
        non_eal_threads_count++;
        while (__atomic_load_n(&registered_count, __ATOMIC_ACQUIRE) !=
@@ -309,7 +309,7 @@ test_non_eal_lcores_callback(unsigned int eal_threads_count)
        ret = 0;
        for (i = 0; i < non_eal_threads_count; i++) {
                t = &thread_contexts[i];
-               pthread_join(t->id, NULL);
+               rte_thread_join(t->id, NULL);
                if (t->state != DONE)
                        ret = -1;
        }
@@ -330,7 +330,7 @@ test_non_eal_lcores_callback(unsigned int eal_threads_count)
        __atomic_store_n(&registered_count, 0, __ATOMIC_RELEASE);
        for (i = 0; i < non_eal_threads_count; i++) {
                t = &thread_contexts[i];
-               pthread_join(t->id, NULL);
+               rte_thread_join(t->id, NULL);
        }
 error:
        if (handle[1] != NULL)
diff --git a/app/test/test_link_bonding.c b/app/test/test_link_bonding.c
index 8a5c8310a8..a22189a656 100644
--- a/app/test/test_link_bonding.c
+++ b/app/test/test_link_bonding.c
@@ -3,6 +3,7 @@
  */
 
 #include "unistd.h"
+#include <pthread.h>
 #include <string.h>
 #include <stdarg.h>
 #include <stdio.h>
@@ -203,7 +204,7 @@ configure_ethdev(uint16_t port_id, uint8_t start, uint8_t 
en_isr)
 static int slaves_initialized;
 static int mac_slaves_initialized;
 
-static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
+RTE_STATIC_MUTEX(mutex)
 static pthread_cond_t cvar = PTHREAD_COND_INITIALIZER;
 
 
@@ -1191,11 +1192,11 @@ test_bonding_lsc_event_callback(uint16_t port_id 
__rte_unused,
                void *param __rte_unused,
                void *ret_param __rte_unused)
 {
-       pthread_mutex_lock(&mutex);
+       rte_thread_mutex_lock(&mutex);
        test_lsc_interrupt_count++;
 
        pthread_cond_signal(&cvar);
-       pthread_mutex_unlock(&mutex);
+       rte_thread_mutex_unlock(&mutex);
 
        return 0;
 }
@@ -1220,11 +1221,12 @@ lsc_timeout(int wait_us)
                ts.tv_sec += 1;
        }
 
-       pthread_mutex_lock(&mutex);
+       rte_thread_mutex_lock(&mutex);
        if (test_lsc_interrupt_count < 1)
-               retval = pthread_cond_timedwait(&cvar, &mutex, &ts);
+               retval = pthread_cond_timedwait(&cvar,
+                               (pthread_mutex_t *)mutex.mutex_id, &ts);
 
-       pthread_mutex_unlock(&mutex);
+       rte_thread_mutex_unlock(&mutex);
 
        if (retval == 0 && test_lsc_interrupt_count < 1)
                return -1;
diff --git a/app/test/test_lpm_perf.c b/app/test/test_lpm_perf.c
index 2bed00d064..e4cfcdb504 100644
--- a/app/test/test_lpm_perf.c
+++ b/app/test/test_lpm_perf.c
@@ -25,7 +25,7 @@ static volatile uint32_t thr_id;
 static uint64_t gwrite_cycles;
 static uint32_t num_writers;
 /* LPM APIs are not thread safe, use mutex to provide thread safety */
-static pthread_mutex_t lpm_mutex = PTHREAD_MUTEX_INITIALIZER;
+RTE_STATIC_MUTEX(lpm_mutex)
 
 /* Report quiescent state interval every 1024 lookups. Larger critical
  * sections in reader will result in writer polling multiple times.
@@ -443,7 +443,7 @@ test_lpm_rcu_qsbr_writer(void *arg)
                /* Add all the entries */
                for (j = si; j < ei; j++) {
                        if (num_writers > 1)
-                               pthread_mutex_lock(&lpm_mutex);
+                               rte_thread_mutex_lock(&lpm_mutex);
                        if (rte_lpm_add(lpm, large_ldepth_route_table[j].ip,
                                        large_ldepth_route_table[j].depth,
                                        next_hop_add) != 0) {
@@ -452,13 +452,13 @@ test_lpm_rcu_qsbr_writer(void *arg)
                                goto error;
                        }
                        if (num_writers > 1)
-                               pthread_mutex_unlock(&lpm_mutex);
+                               rte_thread_mutex_unlock(&lpm_mutex);
                }
 
                /* Delete all the entries */
                for (j = si; j < ei; j++) {
                        if (num_writers > 1)
-                               pthread_mutex_lock(&lpm_mutex);
+                               rte_thread_mutex_lock(&lpm_mutex);
                        if (rte_lpm_delete(lpm, large_ldepth_route_table[j].ip,
                                large_ldepth_route_table[j].depth) != 0) {
                                printf("Failed to delete iteration %d, route# 
%d\n",
@@ -466,7 +466,7 @@ test_lpm_rcu_qsbr_writer(void *arg)
                                goto error;
                        }
                        if (num_writers > 1)
-                               pthread_mutex_unlock(&lpm_mutex);
+                               rte_thread_mutex_unlock(&lpm_mutex);
                }
        }
 
@@ -478,7 +478,7 @@ test_lpm_rcu_qsbr_writer(void *arg)
 
 error:
        if (num_writers > 1)
-               pthread_mutex_unlock(&lpm_mutex);
+               rte_thread_mutex_unlock(&lpm_mutex);
        return -1;
 }
 
diff --git a/drivers/bus/dpaa/base/qbman/bman_driver.c 
b/drivers/bus/dpaa/base/qbman/bman_driver.c
index ee35e03da1..25be077c6f 100644
--- a/drivers/bus/dpaa/base/qbman/bman_driver.c
+++ b/drivers/bus/dpaa/base/qbman/bman_driver.c
@@ -38,11 +38,10 @@ static int fsl_bman_portal_init(uint32_t idx, int is_shared)
        struct dpaa_ioctl_irq_map irq_map;
 
        /* Verify the thread's cpu-affinity */
-       ret = pthread_getaffinity_np(pthread_self(), sizeof(cpu_set_t),
-                                    &cpuset);
+       ret = rte_thread_set_affinity_by_id(rte_thread_self(), &cpuset);
        if (ret) {
                errno = ret;
-               err(0, "pthread_getaffinity_np()");
+               err(0, "rte_thread_set_affinity_by_id()");
                return ret;
        }
        pcfg.cpu = -1;
diff --git a/drivers/bus/dpaa/base/qbman/dpaa_sys.c 
b/drivers/bus/dpaa/base/qbman/dpaa_sys.c
index 9d6bfd40a2..14aeb5e07d 100644
--- a/drivers/bus/dpaa/base/qbman/dpaa_sys.c
+++ b/drivers/bus/dpaa/base/qbman/dpaa_sys.c
@@ -18,16 +18,16 @@ struct process_interrupt {
 };
 
 static COMPAT_LIST_HEAD(process_irq_list);
-static pthread_mutex_t process_irq_lock = PTHREAD_MUTEX_INITIALIZER;
+RTE_STATIC_MUTEX(process_irq_lock)
 
 static void process_interrupt_install(struct process_interrupt *irq)
 {
        int ret;
        /* Add the irq to the end of the list */
-       ret = pthread_mutex_lock(&process_irq_lock);
+       ret = rte_thread_mutex_lock(&process_irq_lock);
        assert(!ret);
        list_add_tail(&irq->node, &process_irq_list);
-       ret = pthread_mutex_unlock(&process_irq_lock);
+       ret = rte_thread_mutex_unlock(&process_irq_lock);
        assert(!ret);
 }
 
@@ -35,10 +35,10 @@ static void process_interrupt_remove(struct 
process_interrupt *irq)
 {
        int ret;
 
-       ret = pthread_mutex_lock(&process_irq_lock);
+       ret = rte_thread_mutex_lock(&process_irq_lock);
        assert(!ret);
        list_del(&irq->node);
-       ret = pthread_mutex_unlock(&process_irq_lock);
+       ret = rte_thread_mutex_unlock(&process_irq_lock);
        assert(!ret);
 }
 
@@ -47,14 +47,14 @@ static struct process_interrupt *process_interrupt_find(int 
irq_num)
        int ret;
        struct process_interrupt *i = NULL;
 
-       ret = pthread_mutex_lock(&process_irq_lock);
+       ret = rte_thread_mutex_lock(&process_irq_lock);
        assert(!ret);
        list_for_each_entry(i, &process_irq_list, node) {
                if (i->irq == irq_num)
                        goto done;
        }
 done:
-       ret = pthread_mutex_unlock(&process_irq_lock);
+       ret = rte_thread_mutex_unlock(&process_irq_lock);
        assert(!ret);
        return i;
 }
diff --git a/drivers/bus/dpaa/base/qbman/process.c 
b/drivers/bus/dpaa/base/qbman/process.c
index 9bc92681cd..da157b8426 100644
--- a/drivers/bus/dpaa/base/qbman/process.c
+++ b/drivers/bus/dpaa/base/qbman/process.c
@@ -21,7 +21,7 @@
  * what the lock is for.
  */
 static int fd = -1;
-static pthread_mutex_t fd_init_lock = PTHREAD_MUTEX_INITIALIZER;
+RTE_STATIC_MUTEX(fd_init_lock)
 
 static int check_fd(void)
 {
@@ -29,12 +29,12 @@ static int check_fd(void)
 
        if (fd >= 0)
                return 0;
-       ret = pthread_mutex_lock(&fd_init_lock);
+       ret = rte_thread_mutex_lock(&fd_init_lock);
        assert(!ret);
        /* check again with the lock held */
        if (fd < 0)
                fd = open(PROCESS_PATH, O_RDWR);
-       ret = pthread_mutex_unlock(&fd_init_lock);
+       ret = rte_thread_mutex_unlock(&fd_init_lock);
        assert(!ret);
        return (fd >= 0) ? 0 : -ENODEV;
 }
diff --git a/drivers/bus/dpaa/dpaa_bus.c b/drivers/bus/dpaa/dpaa_bus.c
index 2f48d4036b..bd83cab577 100644
--- a/drivers/bus/dpaa/dpaa_bus.c
+++ b/drivers/bus/dpaa/dpaa_bus.c
@@ -10,7 +10,7 @@
 #include <limits.h>
 #include <sched.h>
 #include <signal.h>
-#include <pthread.h>
+#include <rte_thread.h>
 #include <sys/types.h>
 #include <sys/syscall.h>
 #include <sys/eventfd.h>
@@ -48,7 +48,7 @@ static struct rte_dpaa_bus rte_dpaa_bus;
 struct netcfg_info *dpaa_netcfg;
 
 /* define a variable to hold the portal_key, once created.*/
-static pthread_key_t dpaa_portal_key;
+static rte_thread_key dpaa_portal_key;
 
 unsigned int dpaa_svr_family;
 
@@ -316,10 +316,10 @@ int rte_dpaa_portal_init(void *arg)
        DPAA_PER_LCORE_PORTAL->bman_idx = bman_get_portal_index();
        DPAA_PER_LCORE_PORTAL->tid = syscall(SYS_gettid);
 
-       ret = pthread_setspecific(dpaa_portal_key,
+       ret = rte_thread_value_set(dpaa_portal_key,
                                  (void *)DPAA_PER_LCORE_PORTAL);
        if (ret) {
-               DPAA_BUS_LOG(ERR, "pthread_setspecific failed on core %u"
+               DPAA_BUS_LOG(ERR, "rte_thread_value_set failed on core %u"
                             " (lcore=%u) with ret: %d", cpu, lcore, ret);
                dpaa_portal_finish(NULL);
 
@@ -377,7 +377,7 @@ dpaa_portal_finish(void *arg)
        bman_thread_finish();
        qman_thread_finish();
 
-       pthread_setspecific(dpaa_portal_key, NULL);
+       rte_thread_value_set(dpaa_portal_key, NULL);
 
        rte_free(dpaa_io_portal);
        dpaa_io_portal = NULL;
@@ -453,9 +453,9 @@ rte_dpaa_bus_scan(void)
        /* create the key, supplying a function that'll be invoked
         * when a portal affined thread will be deleted.
         */
-       ret = pthread_key_create(&dpaa_portal_key, dpaa_portal_finish);
+       ret = rte_thread_key_create(&dpaa_portal_key, dpaa_portal_finish);
        if (ret) {
-               DPAA_BUS_LOG(DEBUG, "Unable to create pthread key. (%d)", ret);
+               DPAA_BUS_LOG(DEBUG, "Unable to create thread key. (%d)", ret);
                dpaa_clean_device_list();
                return ret;
        }
diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c 
b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c
index c6f8312a1d..dffbdff666 100644
--- a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c
+++ b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c
@@ -13,7 +13,7 @@
 #include <stdarg.h>
 #include <inttypes.h>
 #include <signal.h>
-#include <pthread.h>
+#include <rte_thread.h>
 #include <sys/types.h>
 #include <sys/queue.h>
 #include <sys/ioctl.h>
@@ -59,7 +59,7 @@ uint8_t dpaa2_dqrr_size;
 uint8_t dpaa2_eqcr_size;
 
 /* Variable to hold the portal_key, once created.*/
-static pthread_key_t dpaa2_portal_key;
+static rte_thread_key dpaa2_portal_key;
 
 /*Stashing Macros default for LS208x*/
 static int dpaa2_core_cluster_base = 0x04;
@@ -92,10 +92,9 @@ dpaa2_get_core_id(void)
        rte_cpuset_t cpuset;
        int i, ret, cpu_id = -1;
 
-       ret = pthread_getaffinity_np(pthread_self(), sizeof(cpu_set_t),
-               &cpuset);
+       ret = rte_thread_get_affinity_by_id(rte_thread_self(), &cpuset);
        if (ret) {
-               DPAA2_BUS_ERR("pthread_getaffinity_np() failed");
+               DPAA2_BUS_ERR("rte_thread_get_affinity_by_id() failed");
                return ret;
        }
 
@@ -296,9 +295,9 @@ static struct dpaa2_dpio_dev *dpaa2_get_qbman_swp(void)
                }
        }
 
-       ret = pthread_setspecific(dpaa2_portal_key, (void *)dpio_dev);
+       ret = rte_thread_value_set(dpaa2_portal_key, (void *)dpio_dev);
        if (ret) {
-               DPAA2_BUS_ERR("pthread_setspecific failed with ret: %d", ret);
+               DPAA2_BUS_ERR("rte_thread_value_set failed with ret: %d", ret);
                dpaa2_put_qbman_swp(dpio_dev);
                return NULL;
        }
@@ -357,7 +356,7 @@ static void dpaa2_portal_finish(void *arg)
        dpaa2_put_qbman_swp(RTE_PER_LCORE(_dpaa2_io).dpio_dev);
        dpaa2_put_qbman_swp(RTE_PER_LCORE(_dpaa2_io).ethrx_dpio_dev);
 
-       pthread_setspecific(dpaa2_portal_key, NULL);
+       rte_thread_value_set(dpaa2_portal_key, NULL);
 }
 
 static int
@@ -515,10 +514,10 @@ dpaa2_create_dpio_device(int vdev_fd,
                /* create the key, supplying a function that'll be invoked
                 * when a portal affined thread will be deleted.
                 */
-               ret = pthread_key_create(&dpaa2_portal_key,
+               ret = rte_thread_key_create(&dpaa2_portal_key,
                                         dpaa2_portal_finish);
                if (ret) {
-                       DPAA2_BUS_DEBUG("Unable to create pthread key (%d)",
+                       DPAA2_BUS_DEBUG("Unable to create thread key (%d)",
                                        ret);
                        goto err;
                }
diff --git a/drivers/common/dpaax/compat.h b/drivers/common/dpaax/compat.h
index 7166f8cceb..8d53ee4dfc 100644
--- a/drivers/common/dpaax/compat.h
+++ b/drivers/common/dpaax/compat.h
@@ -16,7 +16,7 @@
 #include <stdio.h>
 #include <errno.h>
 #include <string.h>
-#include <pthread.h>
+#include <rte_thread.h>
 #include <linux/types.h>
 #include <stdbool.h>
 #include <ctype.h>
diff --git a/drivers/common/mlx5/windows/mlx5_common_os.h 
b/drivers/common/mlx5/windows/mlx5_common_os.h
index 3756e1959b..295ef872c0 100644
--- a/drivers/common/mlx5/windows/mlx5_common_os.h
+++ b/drivers/common/mlx5/windows/mlx5_common_os.h
@@ -8,6 +8,7 @@
 #include <stdio.h>
 #include <sys/types.h>
 
+#include <rte_windows.h>
 #include <rte_errno.h>
 
 #include "mlx5_autoconf.h"
diff --git a/drivers/compress/mlx5/mlx5_compress.c 
b/drivers/compress/mlx5/mlx5_compress.c
index 80c564f10b..8f4dbfdbc9 100644
--- a/drivers/compress/mlx5/mlx5_compress.c
+++ b/drivers/compress/mlx5/mlx5_compress.c
@@ -72,7 +72,7 @@ struct mlx5_compress_qp {
 
 TAILQ_HEAD(mlx5_compress_privs, mlx5_compress_priv) mlx5_compress_priv_list =
                                TAILQ_HEAD_INITIALIZER(mlx5_compress_priv_list);
-static pthread_mutex_t priv_list_lock = PTHREAD_MUTEX_INITIALIZER;
+RTE_STATIC_MUTEX(priv_list_lock)
 
 int mlx5_compress_logtype;
 
@@ -804,9 +804,9 @@ mlx5_compress_pci_probe(struct rte_pci_driver *pci_drv,
        }
        priv->mr_scache.reg_mr_cb = mlx5_common_verbs_reg_mr;
        priv->mr_scache.dereg_mr_cb = mlx5_common_verbs_dereg_mr;
-       pthread_mutex_lock(&priv_list_lock);
+       rte_thread_mutex_lock(&priv_list_lock);
        TAILQ_INSERT_TAIL(&mlx5_compress_priv_list, priv, next);
-       pthread_mutex_unlock(&priv_list_lock);
+       rte_thread_mutex_unlock(&priv_list_lock);
        return 0;
 }
 
@@ -826,13 +826,13 @@ mlx5_compress_pci_remove(struct rte_pci_device *pdev)
 {
        struct mlx5_compress_priv *priv = NULL;
 
-       pthread_mutex_lock(&priv_list_lock);
+       rte_thread_mutex_lock(&priv_list_lock);
        TAILQ_FOREACH(priv, &mlx5_compress_priv_list, next)
                if (rte_pci_addr_cmp(&priv->pci_dev->addr, &pdev->addr) != 0)
                        break;
        if (priv)
                TAILQ_REMOVE(&mlx5_compress_priv_list, priv, next);
-       pthread_mutex_unlock(&priv_list_lock);
+       rte_thread_mutex_unlock(&priv_list_lock);
        if (priv) {
                mlx5_mr_release_cache(&priv->mr_scache);
                mlx5_compress_hw_global_release(priv);
diff --git a/drivers/event/dlb2/dlb2.c b/drivers/event/dlb2/dlb2.c
index eca183753f..bcbf379843 100644
--- a/drivers/event/dlb2/dlb2.c
+++ b/drivers/event/dlb2/dlb2.c
@@ -5,7 +5,7 @@
 #include <assert.h>
 #include <errno.h>
 #include <nmmintrin.h>
-#include <pthread.h>
+#include <rte_thread.h>
 #include <stdint.h>
 #include <stdbool.h>
 #include <stdio.h>
diff --git a/drivers/event/dlb2/pf/base/dlb2_osdep.h 
b/drivers/event/dlb2/pf/base/dlb2_osdep.h
index cffe22f3c5..82e0c71734 100644
--- a/drivers/event/dlb2/pf/base/dlb2_osdep.h
+++ b/drivers/event/dlb2/pf/base/dlb2_osdep.h
@@ -8,7 +8,7 @@
 #include <string.h>
 #include <time.h>
 #include <unistd.h>
-#include <pthread.h>
+#include <rte_thread.h>
 
 #include <rte_string_fns.h>
 #include <rte_cycles.h>
@@ -194,14 +194,13 @@ static void *dlb2_complete_queue_map_unmap(void *__args)
 static inline void os_schedule_work(struct dlb2_hw *hw)
 {
        struct dlb2_dev *dlb2_dev;
-       pthread_t complete_queue_map_unmap_thread;
+       rte_thread_t complete_queue_map_unmap_thread;
        int ret;
 
        dlb2_dev = container_of(hw, struct dlb2_dev, hw);
 
-       ret = rte_ctrl_thread_create(&complete_queue_map_unmap_thread,
+       ret = rte_thread_ctrl_thread_create(&complete_queue_map_unmap_thread,
                                     "dlb_queue_unmap_waiter",
-                                    NULL,
                                     dlb2_complete_queue_map_unmap,
                                     dlb2_dev);
        if (ret)
diff --git a/drivers/mempool/dpaa/dpaa_mempool.c 
b/drivers/mempool/dpaa/dpaa_mempool.c
index f02056982c..34a1d2b28d 100644
--- a/drivers/mempool/dpaa/dpaa_mempool.c
+++ b/drivers/mempool/dpaa/dpaa_mempool.c
@@ -11,7 +11,7 @@
 #include <limits.h>
 #include <sched.h>
 #include <signal.h>
-#include <pthread.h>
+#include <rte_thread.h>
 #include <sys/types.h>
 #include <sys/syscall.h>
 
diff --git a/drivers/net/af_xdp/rte_eth_af_xdp.c 
b/drivers/net/af_xdp/rte_eth_af_xdp.c
index eb5660a3dc..0f0837426e 100644
--- a/drivers/net/af_xdp/rte_eth_af_xdp.c
+++ b/drivers/net/af_xdp/rte_eth_af_xdp.c
@@ -178,7 +178,7 @@ TAILQ_HEAD(internal_list_head, internal_list);
 static struct internal_list_head internal_list =
        TAILQ_HEAD_INITIALIZER(internal_list);
 
-static pthread_mutex_t internal_list_lock = PTHREAD_MUTEX_INITIALIZER;
+RTE_STATIC_MUTEX(internal_list_lock)
 
 #if defined(XDP_UMEM_UNALIGNED_CHUNK_FLAG)
 static inline int
@@ -676,7 +676,7 @@ find_internal_resource(struct pmd_internals *port_int)
        if (port_int == NULL)
                return NULL;
 
-       pthread_mutex_lock(&internal_list_lock);
+       rte_thread_mutex_lock(&internal_list_lock);
 
        TAILQ_FOREACH(list, &internal_list, next) {
                struct pmd_internals *list_int =
@@ -687,7 +687,7 @@ find_internal_resource(struct pmd_internals *port_int)
                }
        }
 
-       pthread_mutex_unlock(&internal_list_lock);
+       rte_thread_mutex_unlock(&internal_list_lock);
 
        if (!found)
                return NULL;
@@ -725,7 +725,7 @@ get_shared_umem(struct pkt_rx_queue *rxq, const char 
*ifname,
        if (mb_pool == NULL)
                return ret;
 
-       pthread_mutex_lock(&internal_list_lock);
+       rte_thread_mutex_lock(&internal_list_lock);
 
        TAILQ_FOREACH(list, &internal_list, next) {
                internals = list->eth_dev->data->dev_private;
@@ -751,7 +751,7 @@ get_shared_umem(struct pkt_rx_queue *rxq, const char 
*ifname,
        }
 
 out:
-       pthread_mutex_unlock(&internal_list_lock);
+       rte_thread_mutex_unlock(&internal_list_lock);
 
        return ret;
 }
@@ -780,9 +780,9 @@ eth_dev_configure(struct rte_eth_dev *dev)
                        return -1;
 
                list->eth_dev = dev;
-               pthread_mutex_lock(&internal_list_lock);
+               rte_thread_mutex_lock(&internal_list_lock);
                TAILQ_INSERT_TAIL(&internal_list, list, next);
-               pthread_mutex_unlock(&internal_list_lock);
+               rte_thread_mutex_unlock(&internal_list_lock);
        }
 
        return 0;
@@ -948,9 +948,9 @@ eth_dev_close(struct rte_eth_dev *dev)
                /* Remove ethdev from list used to track and share UMEMs */
                list = find_internal_resource(internals);
                if (list) {
-                       pthread_mutex_lock(&internal_list_lock);
+                       rte_thread_mutex_lock(&internal_list_lock);
                        TAILQ_REMOVE(&internal_list, list, next);
-                       pthread_mutex_unlock(&internal_list_lock);
+                       rte_thread_mutex_unlock(&internal_list_lock);
                        rte_free(list);
                }
        }
diff --git a/drivers/net/ark/ark_ethdev.c b/drivers/net/ark/ark_ethdev.c
index 377299b14c..51856f66d1 100644
--- a/drivers/net/ark/ark_ethdev.c
+++ b/drivers/net/ark/ark_ethdev.c
@@ -563,12 +563,12 @@ eth_ark_dev_start(struct rte_eth_dev *dev)
                ark_pktchkr_run(ark->pc);
 
        if (ark->start_pg && (dev->data->port_id == 0)) {
-               pthread_t thread;
+               rte_thread_t thread;
 
                /* Delay packet generatpr start allow the hardware to be ready
                 * This is only used for sanity checking with internal generator
                 */
-               if (rte_ctrl_thread_create(&thread, "ark-delay-pg", NULL,
+               if (rte_thread_ctrl_thread_create(&thread, "ark-delay-pg",
                                           ark_pktgen_delay_start, ark->pg)) {
                        ARK_PMD_LOG(ERR, "Could not create pktgen "
                                    "starter thread\n");
diff --git a/drivers/net/ark/ark_pktgen.c b/drivers/net/ark/ark_pktgen.c
index 515bfe461c..58ff65b5d5 100644
--- a/drivers/net/ark/ark_pktgen.c
+++ b/drivers/net/ark/ark_pktgen.c
@@ -3,7 +3,7 @@
  */
 
 #include <unistd.h>
-#include <pthread.h>
+#include <rte_thread.h>
 
 #include <rte_string_fns.h>
 #include <rte_malloc.h>
@@ -475,7 +475,7 @@ ark_pktgen_delay_start(void *arg)
         * perform a blind sleep here to ensure that the external test
         * application has time to setup the test before we generate packets
         */
-       pthread_detach(pthread_self());
+       rte_thread_detach(rte_thread_self());
        usleep(100000);
        ark_pktgen_run(inst);
        return NULL;
diff --git a/drivers/net/atlantic/atl_ethdev.c 
b/drivers/net/atlantic/atl_ethdev.c
index 0ce35eb519..2b86f01a25 100644
--- a/drivers/net/atlantic/atl_ethdev.c
+++ b/drivers/net/atlantic/atl_ethdev.c
@@ -405,7 +405,7 @@ eth_atl_dev_init(struct rte_eth_dev *eth_dev)
 
        hw->aq_nic_cfg = &adapter->hw_cfg;
 
-       pthread_mutex_init(&hw->mbox_mutex, NULL);
+       rte_thread_mutex_init(&hw->mbox_mutex);
 
        /* disable interrupt */
        atl_disable_intr(hw);
@@ -712,7 +712,7 @@ atl_dev_close(struct rte_eth_dev *dev)
        rte_intr_callback_unregister(intr_handle,
                                     atl_dev_interrupt_handler, dev);
 
-       pthread_mutex_destroy(&hw->mbox_mutex);
+       rte_thread_mutex_destroy(&hw->mbox_mutex);
 
        return ret;
 }
diff --git a/drivers/net/atlantic/atl_types.h b/drivers/net/atlantic/atl_types.h
index e813d9f326..d99aa5fad0 100644
--- a/drivers/net/atlantic/atl_types.h
+++ b/drivers/net/atlantic/atl_types.h
@@ -10,7 +10,7 @@
 #include <string.h>
 #include <stdbool.h>
 #include <netinet/in.h>
-#include <pthread.h>
+#include <rte_thread.h>
 
 #include <rte_common.h>
 
@@ -141,7 +141,7 @@ struct aq_hw_s {
        u32 rpc_tid;
        struct hw_aq_atl_utils_fw_rpc rpc;
 
-       pthread_mutex_t mbox_mutex;
+       rte_thread_mutex mbox_mutex;
 };
 
 struct aq_fw_ops {
diff --git a/drivers/net/atlantic/hw_atl/hw_atl_utils_fw2x.c 
b/drivers/net/atlantic/hw_atl/hw_atl_utils_fw2x.c
index 3a7faf405c..15b80584f8 100644
--- a/drivers/net/atlantic/hw_atl/hw_atl_utils_fw2x.c
+++ b/drivers/net/atlantic/hw_atl/hw_atl_utils_fw2x.c
@@ -6,7 +6,7 @@
  */
 
 #include <rte_ether.h>
-#include <pthread.h>
+#include <rte_thread.h>
 #include "../atl_hw_regs.h"
 
 #include "../atl_types.h"
@@ -218,7 +218,7 @@ int aq_fw2x_get_mac_permanent(struct aq_hw_s *self, u8 *mac)
        u32 mac_addr[2] = { 0 };
        u32 efuse_addr = aq_hw_read_reg(self, HW_ATL_FW2X_MPI_EFUSE_ADDR);
 
-       pthread_mutex_lock(&self->mbox_mutex);
+       rte_thread_mutex_lock(&self->mbox_mutex);
 
        if (efuse_addr != 0) {
                err = hw_atl_utils_fw_downld_dwords(self,
@@ -257,7 +257,7 @@ int aq_fw2x_get_mac_permanent(struct aq_hw_s *self, u8 *mac)
        }
 
 exit:
-       pthread_mutex_unlock(&self->mbox_mutex);
+       rte_thread_mutex_unlock(&self->mbox_mutex);
 
        return err;
 }
@@ -269,7 +269,7 @@ static int aq_fw2x_update_stats(struct aq_hw_s *self)
        u32 orig_stats_val = mpi_opts & BIT(CAPS_HI_STATISTICS);
 
 
-       pthread_mutex_lock(&self->mbox_mutex);
+       rte_thread_mutex_lock(&self->mbox_mutex);
 
        /* Toggle statistics bit for FW to update */
        mpi_opts = mpi_opts ^ BIT(CAPS_HI_STATISTICS);
@@ -286,7 +286,7 @@ static int aq_fw2x_update_stats(struct aq_hw_s *self)
        err = hw_atl_utils_update_stats(self);
 
 exit:
-       pthread_mutex_unlock(&self->mbox_mutex);
+       rte_thread_mutex_unlock(&self->mbox_mutex);
 
        return err;
 
@@ -299,7 +299,7 @@ static int aq_fw2x_get_temp(struct aq_hw_s *self, int *temp)
        u32 temp_val = mpi_opts & BIT(CAPS_HI_TEMPERATURE);
        u32 temp_res;
 
-       pthread_mutex_lock(&self->mbox_mutex);
+       rte_thread_mutex_lock(&self->mbox_mutex);
 
        /* Toggle statistics bit for FW to 0x36C.18 (CAPS_HI_TEMPERATURE) */
        mpi_opts = mpi_opts ^ BIT(CAPS_HI_TEMPERATURE);
@@ -317,7 +317,7 @@ static int aq_fw2x_get_temp(struct aq_hw_s *self, int *temp)
                                sizeof(temp_res) / sizeof(u32));
 
 
-       pthread_mutex_unlock(&self->mbox_mutex);
+       rte_thread_mutex_unlock(&self->mbox_mutex);
 
        if (err)
                return err;
@@ -536,7 +536,7 @@ static int aq_fw2x_get_eeprom(struct aq_hw_s *self, int 
dev_addr,
        if ((self->caps_lo & BIT(CAPS_LO_SMBUS_READ)) == 0)
                return -EOPNOTSUPP;
 
-       pthread_mutex_lock(&self->mbox_mutex);
+       rte_thread_mutex_lock(&self->mbox_mutex);
 
        request.msg_id = 0;
        request.device_id = dev_addr;
@@ -605,7 +605,7 @@ static int aq_fw2x_get_eeprom(struct aq_hw_s *self, int 
dev_addr,
        }
 
 exit:
-       pthread_mutex_unlock(&self->mbox_mutex);
+       rte_thread_mutex_unlock(&self->mbox_mutex);
 
        return err;
 }
@@ -626,7 +626,7 @@ static int aq_fw2x_set_eeprom(struct aq_hw_s *self, int 
dev_addr,
        request.address = offset;
        request.length = len;
 
-       pthread_mutex_lock(&self->mbox_mutex);
+       rte_thread_mutex_lock(&self->mbox_mutex);
 
        /* Write SMBUS request to cfg memory */
        err = hw_atl_utils_fw_upload_dwords(self, self->rpc_addr,
@@ -694,7 +694,7 @@ static int aq_fw2x_set_eeprom(struct aq_hw_s *self, int 
dev_addr,
        }
 
 exit:
-       pthread_mutex_unlock(&self->mbox_mutex);
+       rte_thread_mutex_unlock(&self->mbox_mutex);
 
        return err;
 }
@@ -712,7 +712,7 @@ static int aq_fw2x_send_macsec_request(struct aq_hw_s *self,
        if ((self->caps_lo & BIT(CAPS_LO_MACSEC)) == 0)
                return -EOPNOTSUPP;
 
-       pthread_mutex_lock(&self->mbox_mutex);
+       rte_thread_mutex_lock(&self->mbox_mutex);
 
        /* Write macsec request to cfg memory */
        err = hw_atl_utils_fw_upload_dwords(self, self->rpc_addr,
@@ -742,7 +742,7 @@ static int aq_fw2x_send_macsec_request(struct aq_hw_s *self,
                RTE_ALIGN(sizeof(*response) / sizeof(u32), sizeof(u32)));
 
 exit:
-       pthread_mutex_unlock(&self->mbox_mutex);
+       rte_thread_mutex_unlock(&self->mbox_mutex);
 
        return err;
 }
diff --git a/drivers/net/axgbe/axgbe_common.h b/drivers/net/axgbe/axgbe_common.h
index df0aa21a9b..a7b892b806 100644
--- a/drivers/net/axgbe/axgbe_common.h
+++ b/drivers/net/axgbe/axgbe_common.h
@@ -19,7 +19,7 @@
 #include <stdarg.h>
 #include <unistd.h>
 #include <inttypes.h>
-#include <pthread.h>
+#include <rte_thread.h>
 
 #include <rte_bitops.h>
 #include <rte_byteorder.h>
diff --git a/drivers/net/axgbe/axgbe_dev.c b/drivers/net/axgbe/axgbe_dev.c
index 786288a7b0..197c722901 100644
--- a/drivers/net/axgbe/axgbe_dev.c
+++ b/drivers/net/axgbe/axgbe_dev.c
@@ -167,12 +167,12 @@ static int axgbe_read_mmd_regs_v2(struct axgbe_port 
*pdata,
        index = mmd_address & ~pdata->xpcs_window_mask;
        offset = pdata->xpcs_window + (mmd_address & pdata->xpcs_window_mask);
 
-       pthread_mutex_lock(&pdata->xpcs_mutex);
+       rte_thread_mutex_lock(&pdata->xpcs_mutex);
 
        XPCS32_IOWRITE(pdata, pdata->xpcs_window_sel_reg, index);
        mmd_data = XPCS16_IOREAD(pdata, offset);
 
-       pthread_mutex_unlock(&pdata->xpcs_mutex);
+       rte_thread_mutex_unlock(&pdata->xpcs_mutex);
 
        return mmd_data;
 }
@@ -201,12 +201,12 @@ static void axgbe_write_mmd_regs_v2(struct axgbe_port 
*pdata,
        index = mmd_address & ~pdata->xpcs_window_mask;
        offset = pdata->xpcs_window + (mmd_address & pdata->xpcs_window_mask);
 
-       pthread_mutex_lock(&pdata->xpcs_mutex);
+       rte_thread_mutex_lock(&pdata->xpcs_mutex);
 
        XPCS32_IOWRITE(pdata, pdata->xpcs_window_sel_reg, index);
        XPCS16_IOWRITE(pdata, offset, mmd_data);
 
-       pthread_mutex_unlock(&pdata->xpcs_mutex);
+       rte_thread_mutex_unlock(&pdata->xpcs_mutex);
 }
 
 static int axgbe_read_mmd_regs(struct axgbe_port *pdata, int prtad,
diff --git a/drivers/net/axgbe/axgbe_ethdev.c b/drivers/net/axgbe/axgbe_ethdev.c
index 9cb4818af1..caf5a4476f 100644
--- a/drivers/net/axgbe/axgbe_ethdev.c
+++ b/drivers/net/axgbe/axgbe_ethdev.c
@@ -2311,10 +2311,10 @@ eth_axgbe_dev_init(struct rte_eth_dev *eth_dev)
 
        pdata->tx_desc_count = AXGBE_MAX_RING_DESC;
        pdata->rx_desc_count = AXGBE_MAX_RING_DESC;
-       pthread_mutex_init(&pdata->xpcs_mutex, NULL);
-       pthread_mutex_init(&pdata->i2c_mutex, NULL);
-       pthread_mutex_init(&pdata->an_mutex, NULL);
-       pthread_mutex_init(&pdata->phy_mutex, NULL);
+       rte_thread_mutex_init(&pdata->xpcs_mutex);
+       rte_thread_mutex_init(&pdata->i2c_mutex);
+       rte_thread_mutex_init(&pdata->an_mutex);
+       rte_thread_mutex_init(&pdata->phy_mutex);
 
        ret = pdata->phy_if.phy_init(pdata);
        if (ret) {
diff --git a/drivers/net/axgbe/axgbe_ethdev.h b/drivers/net/axgbe/axgbe_ethdev.h
index a6226729fe..f2929d57ab 100644
--- a/drivers/net/axgbe/axgbe_ethdev.h
+++ b/drivers/net/axgbe/axgbe_ethdev.h
@@ -602,10 +602,10 @@ struct axgbe_port {
        int phy_link;
        int phy_speed;
 
-       pthread_mutex_t xpcs_mutex;
-       pthread_mutex_t i2c_mutex;
-       pthread_mutex_t an_mutex;
-       pthread_mutex_t phy_mutex;
+       rte_thread_mutex xpcs_mutex;
+       rte_thread_mutex i2c_mutex;
+       rte_thread_mutex an_mutex;
+       rte_thread_mutex phy_mutex;
 
        /* Flow control settings */
        unsigned int pause_autoneg;
diff --git a/drivers/net/axgbe/axgbe_i2c.c b/drivers/net/axgbe/axgbe_i2c.c
index ab3738a12e..c17f9a8b9e 100644
--- a/drivers/net/axgbe/axgbe_i2c.c
+++ b/drivers/net/axgbe/axgbe_i2c.c
@@ -229,7 +229,7 @@ static int axgbe_i2c_xfer(struct axgbe_port *pdata, struct 
axgbe_i2c_op *op)
        int ret;
        uint64_t timeout;
 
-       pthread_mutex_lock(&pdata->i2c_mutex);
+       rte_thread_mutex_lock(&pdata->i2c_mutex);
        ret = axgbe_i2c_disable(pdata);
        if (ret) {
                PMD_DRV_LOG(ERR, "failed to disable i2c master\n");
@@ -282,7 +282,7 @@ static int axgbe_i2c_xfer(struct axgbe_port *pdata, struct 
axgbe_i2c_op *op)
        }
 
 unlock:
-       pthread_mutex_unlock(&pdata->i2c_mutex);
+       rte_thread_mutex_unlock(&pdata->i2c_mutex);
        return ret;
 }
 
diff --git a/drivers/net/axgbe/axgbe_mdio.c b/drivers/net/axgbe/axgbe_mdio.c
index 4f98e695ae..5f3d9b360e 100644
--- a/drivers/net/axgbe/axgbe_mdio.c
+++ b/drivers/net/axgbe/axgbe_mdio.c
@@ -686,9 +686,9 @@ static void axgbe_an73_isr(struct axgbe_port *pdata)
        if (pdata->an_int) {
                /* Clear the interrupt(s) that fired and process them */
                XMDIO_WRITE(pdata, MDIO_MMD_AN, MDIO_AN_INT, ~pdata->an_int);
-               pthread_mutex_lock(&pdata->an_mutex);
+               rte_thread_mutex_lock(&pdata->an_mutex);
                axgbe_an73_state_machine(pdata);
-               pthread_mutex_unlock(&pdata->an_mutex);
+               rte_thread_mutex_unlock(&pdata->an_mutex);
        } else {
                /* Enable AN interrupts */
                axgbe_an73_enable_interrupts(pdata);
@@ -977,7 +977,7 @@ static int axgbe_phy_config_aneg(struct axgbe_port *pdata)
 {
        int ret;
 
-       pthread_mutex_lock(&pdata->an_mutex);
+       rte_thread_mutex_lock(&pdata->an_mutex);
 
        ret = __axgbe_phy_config_aneg(pdata);
        if (ret)
@@ -985,7 +985,7 @@ static int axgbe_phy_config_aneg(struct axgbe_port *pdata)
        else
                rte_bit_relaxed_clear32(AXGBE_LINK_ERR, &pdata->dev_state);
 
-       pthread_mutex_unlock(&pdata->an_mutex);
+       rte_thread_mutex_unlock(&pdata->an_mutex);
 
        return ret;
 }
diff --git a/drivers/net/axgbe/axgbe_phy_impl.c 
b/drivers/net/axgbe/axgbe_phy_impl.c
index 02236ec192..1e1d6358d8 100644
--- a/drivers/net/axgbe/axgbe_phy_impl.c
+++ b/drivers/net/axgbe/axgbe_phy_impl.c
@@ -403,7 +403,7 @@ static void axgbe_phy_put_comm_ownership(struct axgbe_port 
*pdata)
 
        phy_data->comm_owned = 0;
 
-       pthread_mutex_unlock(&pdata->phy_mutex);
+       rte_thread_mutex_unlock(&pdata->phy_mutex);
 }
 
 static int axgbe_phy_get_comm_ownership(struct axgbe_port *pdata)
@@ -416,7 +416,7 @@ static int axgbe_phy_get_comm_ownership(struct axgbe_port 
*pdata)
         * the driver needs to take the software mutex and then the hardware
         * mutexes before being able to use the busses.
         */
-       pthread_mutex_lock(&pdata->phy_mutex);
+       rte_thread_mutex_lock(&pdata->phy_mutex);
 
        if (phy_data->comm_owned)
                return 0;
@@ -447,7 +447,7 @@ static int axgbe_phy_get_comm_ownership(struct axgbe_port 
*pdata)
                return 0;
        }
 
-       pthread_mutex_unlock(&pdata->phy_mutex);
+       rte_thread_mutex_unlock(&pdata->phy_mutex);
 
        PMD_DRV_LOG(ERR, "unable to obtain hardware mutexes\n");
 
diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h
index db67bff127..656ee70f66 100644
--- a/drivers/net/bnxt/bnxt.h
+++ b/drivers/net/bnxt/bnxt.h
@@ -534,8 +534,8 @@ struct bnxt_mark_info {
 
 struct bnxt_rep_info {
        struct rte_eth_dev      *vfr_eth_dev;
-       pthread_mutex_t         vfr_lock;
-       pthread_mutex_t         vfr_start_lock;
+       rte_thread_mutex                vfr_lock;
+       rte_thread_mutex                vfr_start_lock;
        bool                    conduit_valid;
 };
 
@@ -687,7 +687,7 @@ struct bnxt {
 #define BNXT_FW_CAP_ADV_FLOW_COUNTERS  BIT(6)
 #define BNXT_FW_CAP_LINK_ADMIN         BIT(7)
 
-       pthread_mutex_t         flow_lock;
+       rte_thread_mutex         flow_lock;
 
        uint32_t                vnic_cap_flags;
 #define BNXT_VNIC_CAP_COS_CLASSIFY     BIT(0)
@@ -741,18 +741,18 @@ struct bnxt {
        rte_iova_t                      hwrm_short_cmd_req_dma_addr;
        rte_spinlock_t                  hwrm_lock;
        /* synchronize between dev_configure_op and int handler */
-       pthread_mutex_t                 def_cp_lock;
+       rte_thread_mutex                def_cp_lock;
        /* synchronize between dev_start_op and async evt handler
         * Locking sequence in async evt handler will be
         * def_cp_lock
         * health_check_lock
         */
-       pthread_mutex_t                 health_check_lock;
+       rte_thread_mutex                health_check_lock;
        /* synchronize between dev_stop/dev_close_op and
         * error recovery thread triggered as part of
         * HWRM_ASYNC_EVENT_CMPL_EVENT_ID_RESET_NOTIFY
         */
-       pthread_mutex_t                 err_recovery_lock;
+       rte_thread_mutex                err_recovery_lock;
        uint16_t                        max_req_len;
        uint16_t                        max_resp_len;
        uint16_t                        hwrm_max_ext_req_len;
@@ -944,10 +944,10 @@ uint16_t bnxt_dummy_xmit_pkts(void *tx_queue, struct 
rte_mbuf **tx_pkts,
 extern const struct rte_flow_ops bnxt_flow_ops;
 
 #define bnxt_acquire_flow_lock(bp) \
-       pthread_mutex_lock(&(bp)->flow_lock)
+       rte_thread_mutex_lock(&(bp)->flow_lock)
 
 #define bnxt_release_flow_lock(bp) \
-       pthread_mutex_unlock(&(bp)->flow_lock)
+       rte_thread_mutex_unlock(&(bp)->flow_lock)
 
 #define BNXT_VALID_VNIC_OR_RET(bp, vnic_id) do { \
        if ((vnic_id) >= (bp)->max_vnics) { \
diff --git a/drivers/net/bnxt/bnxt_cpr.c b/drivers/net/bnxt/bnxt_cpr.c
index 2c7fd78c3d..a50511047c 100644
--- a/drivers/net/bnxt/bnxt_cpr.c
+++ b/drivers/net/bnxt/bnxt_cpr.c
@@ -135,7 +135,7 @@ void bnxt_handle_async_event(struct bnxt *bp,
                        return;
                }
 
-               pthread_mutex_lock(&bp->err_recovery_lock);
+               rte_thread_mutex_lock(&bp->err_recovery_lock);
                event_data = rte_le_to_cpu_32(async_cmp->event_data1);
                /* timestamp_lo/hi values are in units of 100ms */
                bp->fw_reset_max_msecs = async_cmp->timestamp_hi ?
@@ -157,7 +157,7 @@ void bnxt_handle_async_event(struct bnxt *bp,
                }
 
                bp->flags |= BNXT_FLAG_FW_RESET;
-               pthread_mutex_unlock(&bp->err_recovery_lock);
+               rte_thread_mutex_unlock(&bp->err_recovery_lock);
                rte_eal_alarm_set(US_PER_MS, bnxt_dev_reset_and_resume,
                                  (void *)bp);
                break;
diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
index 3778e28cca..ae355f4a36 100644
--- a/drivers/net/bnxt/bnxt_ethdev.c
+++ b/drivers/net/bnxt/bnxt_ethdev.c
@@ -1049,7 +1049,7 @@ static int bnxt_dev_configure_op(struct rte_eth_dev 
*eth_dev)
                 * are calculated correctly.
                 */
 
-               pthread_mutex_lock(&bp->def_cp_lock);
+               rte_thread_mutex_lock(&bp->def_cp_lock);
 
                if (!BNXT_HAS_NQ(bp) && bp->async_cp_ring) {
                        bnxt_disable_int(bp);
@@ -1059,20 +1059,20 @@ static int bnxt_dev_configure_op(struct rte_eth_dev 
*eth_dev)
                rc = bnxt_hwrm_func_reserve_vf_resc(bp, false);
                if (rc) {
                        PMD_DRV_LOG(ERR, "HWRM resource alloc fail:%x\n", rc);
-                       pthread_mutex_unlock(&bp->def_cp_lock);
+                       rte_thread_mutex_unlock(&bp->def_cp_lock);
                        return -ENOSPC;
                }
 
                if (!BNXT_HAS_NQ(bp) && bp->async_cp_ring) {
                        rc = bnxt_alloc_async_cp_ring(bp);
                        if (rc) {
-                               pthread_mutex_unlock(&bp->def_cp_lock);
+                               rte_thread_mutex_unlock(&bp->def_cp_lock);
                                return rc;
                        }
                        bnxt_enable_int(bp);
                }
 
-               pthread_mutex_unlock(&bp->def_cp_lock);
+               rte_thread_mutex_unlock(&bp->def_cp_lock);
        }
 
        /* Inherit new configurations */
@@ -1456,14 +1456,14 @@ static int bnxt_dev_stop_op(struct rte_eth_dev *eth_dev)
 {
        struct bnxt *bp = eth_dev->data->dev_private;
 
-       pthread_mutex_lock(&bp->err_recovery_lock);
+       rte_thread_mutex_lock(&bp->err_recovery_lock);
        if (bp->flags & BNXT_FLAG_FW_RESET) {
                PMD_DRV_LOG(ERR,
                            "Adapter recovering from error..Please retry\n");
-               pthread_mutex_unlock(&bp->err_recovery_lock);
+               rte_thread_mutex_unlock(&bp->err_recovery_lock);
                return -EAGAIN;
        }
-       pthread_mutex_unlock(&bp->err_recovery_lock);
+       rte_thread_mutex_unlock(&bp->err_recovery_lock);
 
        return bnxt_dev_stop(eth_dev);
 }
@@ -1545,13 +1545,13 @@ static int bnxt_dev_start_op(struct rte_eth_dev 
*eth_dev)
 static void
 bnxt_uninit_locks(struct bnxt *bp)
 {
-       pthread_mutex_destroy(&bp->flow_lock);
-       pthread_mutex_destroy(&bp->def_cp_lock);
-       pthread_mutex_destroy(&bp->health_check_lock);
-       pthread_mutex_destroy(&bp->err_recovery_lock);
+       rte_thread_mutex_destroy(&bp->flow_lock);
+       rte_thread_mutex_destroy(&bp->def_cp_lock);
+       rte_thread_mutex_destroy(&bp->health_check_lock);
+       rte_thread_mutex_destroy(&bp->err_recovery_lock);
        if (bp->rep_info) {
-               pthread_mutex_destroy(&bp->rep_info->vfr_lock);
-               pthread_mutex_destroy(&bp->rep_info->vfr_start_lock);
+               rte_thread_mutex_destroy(&bp->rep_info->vfr_lock);
+               rte_thread_mutex_destroy(&bp->rep_info->vfr_start_lock);
        }
 }
 
@@ -1583,14 +1583,14 @@ static int bnxt_dev_close_op(struct rte_eth_dev 
*eth_dev)
        if (rte_eal_process_type() != RTE_PROC_PRIMARY)
                return 0;
 
-       pthread_mutex_lock(&bp->err_recovery_lock);
+       rte_thread_mutex_lock(&bp->err_recovery_lock);
        if (bp->flags & BNXT_FLAG_FW_RESET) {
                PMD_DRV_LOG(ERR,
                            "Adapter recovering from error...Please retry\n");
-               pthread_mutex_unlock(&bp->err_recovery_lock);
+               rte_thread_mutex_unlock(&bp->err_recovery_lock);
                return -EAGAIN;
        }
-       pthread_mutex_unlock(&bp->err_recovery_lock);
+       rte_thread_mutex_unlock(&bp->err_recovery_lock);
 
        /* cancel the recovery handler before remove dev */
        rte_eal_alarm_cancel(bnxt_dev_reset_and_resume, (void *)bp);
@@ -4073,7 +4073,7 @@ static void bnxt_dev_recover(void *arg)
        struct bnxt *bp = arg;
        int rc = 0;
 
-       pthread_mutex_lock(&bp->err_recovery_lock);
+       rte_thread_mutex_lock(&bp->err_recovery_lock);
 
        if (!bp->fw_reset_min_msecs) {
                rc = bnxt_check_fw_reset_done(bp);
@@ -4108,7 +4108,7 @@ static void bnxt_dev_recover(void *arg)
                goto err_start;
 
        PMD_DRV_LOG(INFO, "Recovered from FW reset\n");
-       pthread_mutex_unlock(&bp->err_recovery_lock);
+       rte_thread_mutex_unlock(&bp->err_recovery_lock);
 
        return;
 err_start:
@@ -4116,7 +4116,7 @@ static void bnxt_dev_recover(void *arg)
 err:
        bp->flags |= BNXT_FLAG_FATAL_ERROR;
        bnxt_uninit_resources(bp, false);
-       pthread_mutex_unlock(&bp->err_recovery_lock);
+       rte_thread_mutex_unlock(&bp->err_recovery_lock);
        PMD_DRV_LOG(ERR, "Failed to recover from FW reset\n");
 }
 
@@ -4292,7 +4292,7 @@ void bnxt_schedule_fw_health_check(struct bnxt *bp)
 {
        uint32_t polling_freq;
 
-       pthread_mutex_lock(&bp->health_check_lock);
+       rte_thread_mutex_lock(&bp->health_check_lock);
 
        if (!bnxt_is_recovery_enabled(bp))
                goto done;
@@ -4307,7 +4307,7 @@ void bnxt_schedule_fw_health_check(struct bnxt *bp)
        bp->flags |= BNXT_FLAG_FW_HEALTH_CHECK_SCHEDULED;
 
 done:
-       pthread_mutex_unlock(&bp->health_check_lock);
+       rte_thread_mutex_unlock(&bp->health_check_lock);
 }
 
 static void bnxt_cancel_fw_health_check(struct bnxt *bp)
@@ -5093,25 +5093,25 @@ bnxt_init_locks(struct bnxt *bp)
 {
        int err;
 
-       err = pthread_mutex_init(&bp->flow_lock, NULL);
+       err = rte_thread_mutex_init(&bp->flow_lock);
        if (err) {
                PMD_DRV_LOG(ERR, "Unable to initialize flow_lock\n");
                return err;
        }
 
-       err = pthread_mutex_init(&bp->def_cp_lock, NULL);
+       err = rte_thread_mutex_init(&bp->def_cp_lock);
        if (err) {
                PMD_DRV_LOG(ERR, "Unable to initialize def_cp_lock\n");
                return err;
        }
 
-       err = pthread_mutex_init(&bp->health_check_lock, NULL);
+       err = rte_thread_mutex_init(&bp->health_check_lock);
        if (err) {
                PMD_DRV_LOG(ERR, "Unable to initialize health_check_lock\n");
                return err;
        }
 
-       err = pthread_mutex_init(&bp->err_recovery_lock, NULL);
+       err = rte_thread_mutex_init(&bp->err_recovery_lock);
        if (err)
                PMD_DRV_LOG(ERR, "Unable to initialize err_recovery_lock\n");
 
@@ -5894,14 +5894,14 @@ static int bnxt_init_rep_info(struct bnxt *bp)
        for (i = 0; i < BNXT_MAX_CFA_CODE; i++)
                bp->cfa_code_map[i] = BNXT_VF_IDX_INVALID;
 
-       rc = pthread_mutex_init(&bp->rep_info->vfr_lock, NULL);
+       rc = rte_thread_mutex_init(&bp->rep_info->vfr_lock);
        if (rc) {
                PMD_DRV_LOG(ERR, "Unable to initialize vfr_lock\n");
                bnxt_free_rep_info(bp);
                return rc;
        }
 
-       rc = pthread_mutex_init(&bp->rep_info->vfr_start_lock, NULL);
+       rc = rte_thread_mutex_init(&bp->rep_info->vfr_start_lock);
        if (rc) {
                PMD_DRV_LOG(ERR, "Unable to initialize vfr_start_lock\n");
                bnxt_free_rep_info(bp);
diff --git a/drivers/net/bnxt/bnxt_irq.c b/drivers/net/bnxt/bnxt_irq.c
index 8abbadb3d1..e1d980cf91 100644
--- a/drivers/net/bnxt/bnxt_irq.c
+++ b/drivers/net/bnxt/bnxt_irq.c
@@ -30,15 +30,15 @@ void bnxt_int_handler(void *param)
                return;
 
        raw_cons = cpr->cp_raw_cons;
-       pthread_mutex_lock(&bp->def_cp_lock);
+       rte_thread_mutex_lock(&bp->def_cp_lock);
        while (1) {
                if (!cpr || !cpr->cp_ring_struct || !cpr->cp_db.doorbell) {
-                       pthread_mutex_unlock(&bp->def_cp_lock);
+                       rte_thread_mutex_unlock(&bp->def_cp_lock);
                        return;
                }
 
                if (is_bnxt_in_error(bp)) {
-                       pthread_mutex_unlock(&bp->def_cp_lock);
+                       rte_thread_mutex_unlock(&bp->def_cp_lock);
                        return;
                }
 
@@ -58,7 +58,7 @@ void bnxt_int_handler(void *param)
        else
                B_CP_DB_REARM(cpr, cpr->cp_raw_cons);
 
-       pthread_mutex_unlock(&bp->def_cp_lock);
+       rte_thread_mutex_unlock(&bp->def_cp_lock);
 }
 
 int bnxt_free_int(struct bnxt *bp)
diff --git a/drivers/net/bnxt/bnxt_reps.c b/drivers/net/bnxt/bnxt_reps.c
index bdbad53b7d..49d3ec66bc 100644
--- a/drivers/net/bnxt/bnxt_reps.c
+++ b/drivers/net/bnxt/bnxt_reps.c
@@ -120,7 +120,7 @@ bnxt_rep_tx_burst(void *tx_queue,
        qid = vfr_txq->txq->queue_id;
        vf_rep_bp = vfr_txq->bp;
        parent = vf_rep_bp->parent_dev->data->dev_private;
-       pthread_mutex_lock(&parent->rep_info->vfr_lock);
+       rte_thread_mutex_lock(&parent->rep_info->vfr_lock);
        ptxq = parent->tx_queues[qid];
 
        ptxq->vfr_tx_cfa_action = vf_rep_bp->vfr_tx_cfa_action;
@@ -132,7 +132,7 @@ bnxt_rep_tx_burst(void *tx_queue,
 
        rc = bnxt_xmit_pkts(ptxq, tx_pkts, nb_pkts);
        ptxq->vfr_tx_cfa_action = 0;
-       pthread_mutex_unlock(&parent->rep_info->vfr_lock);
+       rte_thread_mutex_unlock(&parent->rep_info->vfr_lock);
 
        return rc;
 }
@@ -407,15 +407,15 @@ int bnxt_rep_dev_start_op(struct rte_eth_dev *eth_dev)
        rep_info = &parent_bp->rep_info[rep_bp->vf_id];
 
        BNXT_TF_DBG(DEBUG, "BNXT Port:%d VFR start\n", eth_dev->data->port_id);
-       pthread_mutex_lock(&rep_info->vfr_start_lock);
+       rte_thread_mutex_lock(&rep_info->vfr_start_lock);
        if (!rep_info->conduit_valid) {
                rc = bnxt_get_dflt_vnic_svif(parent_bp, rep_bp);
                if (rc || !rep_info->conduit_valid) {
-                       pthread_mutex_unlock(&rep_info->vfr_start_lock);
+                       rte_thread_mutex_unlock(&rep_info->vfr_start_lock);
                        return rc;
                }
        }
-       pthread_mutex_unlock(&rep_info->vfr_start_lock);
+       rte_thread_mutex_unlock(&rep_info->vfr_start_lock);
 
        rc = bnxt_vfr_alloc(eth_dev);
        if (rc) {
diff --git a/drivers/net/bnxt/tf_ulp/bnxt_ulp.c 
b/drivers/net/bnxt/tf_ulp/bnxt_ulp.c
index 5c805eef97..6691fc2fd7 100644
--- a/drivers/net/bnxt/tf_ulp/bnxt_ulp.c
+++ b/drivers/net/bnxt/tf_ulp/bnxt_ulp.c
@@ -28,7 +28,7 @@ STAILQ_HEAD(, bnxt_ulp_session_state) bnxt_ulp_session_list =
                        STAILQ_HEAD_INITIALIZER(bnxt_ulp_session_list);
 
 /* Mutex to synchronize bnxt_ulp_session_list operations. */
-static pthread_mutex_t bnxt_ulp_global_mutex = PTHREAD_MUTEX_INITIALIZER;
+RTE_STATIC_MUTEX(bnxt_ulp_global_mutex)
 
 /*
  * Allow the deletion of context only for the bnxt device that
@@ -640,7 +640,7 @@ ulp_ctx_detach(struct bnxt *bp)
 static void
 ulp_context_initialized(struct bnxt_ulp_session_state *session, bool *init)
 {
-       pthread_mutex_lock(&session->bnxt_ulp_mutex);
+       rte_thread_mutex_lock(&session->bnxt_ulp_mutex);
 
        if (!session->bnxt_ulp_init) {
                session->bnxt_ulp_init = true;
@@ -649,7 +649,7 @@ ulp_context_initialized(struct bnxt_ulp_session_state 
*session, bool *init)
                *init = true;
        }
 
-       pthread_mutex_unlock(&session->bnxt_ulp_mutex);
+       rte_thread_mutex_unlock(&session->bnxt_ulp_mutex);
 }
 
 /*
@@ -690,7 +690,7 @@ ulp_session_init(struct bnxt *bp,
        pci_dev = RTE_DEV_TO_PCI(bp->eth_dev->device);
        pci_addr = &pci_dev->addr;
 
-       pthread_mutex_lock(&bnxt_ulp_global_mutex);
+       rte_thread_mutex_lock(&bnxt_ulp_global_mutex);
 
        session = ulp_get_session(pci_addr);
        if (!session) {
@@ -701,17 +701,17 @@ ulp_session_init(struct bnxt *bp,
                if (!session) {
                        BNXT_TF_DBG(ERR,
                                    "Allocation failed for bnxt_ulp_session\n");
-                       pthread_mutex_unlock(&bnxt_ulp_global_mutex);
+                       rte_thread_mutex_unlock(&bnxt_ulp_global_mutex);
                        return NULL;
 
                } else {
                        /* Add it to the queue */
                        session->pci_info.domain = pci_addr->domain;
                        session->pci_info.bus = pci_addr->bus;
-                       rc = pthread_mutex_init(&session->bnxt_ulp_mutex, NULL);
+                       rc = rte_thread_mutex_init(&session->bnxt_ulp_mutex);
                        if (rc) {
                                BNXT_TF_DBG(ERR, "mutex create failed\n");
-                               pthread_mutex_unlock(&bnxt_ulp_global_mutex);
+                               rte_thread_mutex_unlock(&bnxt_ulp_global_mutex);
                                return NULL;
                        }
                        STAILQ_INSERT_TAIL(&bnxt_ulp_session_list,
@@ -719,7 +719,7 @@ ulp_session_init(struct bnxt *bp,
                }
        }
        ulp_context_initialized(session, init);
-       pthread_mutex_unlock(&bnxt_ulp_global_mutex);
+       rte_thread_mutex_unlock(&bnxt_ulp_global_mutex);
        return session;
 }
 
@@ -734,12 +734,12 @@ ulp_session_deinit(struct bnxt_ulp_session_state *session)
                return;
 
        if (!session->cfg_data) {
-               pthread_mutex_lock(&bnxt_ulp_global_mutex);
+               rte_thread_mutex_lock(&bnxt_ulp_global_mutex);
                STAILQ_REMOVE(&bnxt_ulp_session_list, session,
                              bnxt_ulp_session_state, next);
-               pthread_mutex_destroy(&session->bnxt_ulp_mutex);
+               rte_thread_mutex_destroy(&session->bnxt_ulp_mutex);
                rte_free(session);
-               pthread_mutex_unlock(&bnxt_ulp_global_mutex);
+               rte_thread_mutex_unlock(&bnxt_ulp_global_mutex);
        }
 }
 
@@ -892,7 +892,7 @@ bnxt_ulp_deinit(struct bnxt *bp,
                                         BNXT_ULP_NAT_OUTER_MOST_FLAGS, 0);
 
        /* free the flow db lock */
-       pthread_mutex_destroy(&bp->ulp_ctx->cfg_data->flow_db_lock);
+       rte_thread_mutex_destroy(&bp->ulp_ctx->cfg_data->flow_db_lock);
 
        /* Delete the ulp context and tf session and free the ulp context */
        ulp_ctx_deinit(bp, session);
@@ -917,7 +917,7 @@ bnxt_ulp_init(struct bnxt *bp,
                goto jump_to_error;
        }
 
-       rc = pthread_mutex_init(&bp->ulp_ctx->cfg_data->flow_db_lock, NULL);
+       rc = rte_thread_mutex_init(&bp->ulp_ctx->cfg_data->flow_db_lock);
        if (rc) {
                BNXT_TF_DBG(ERR, "Unable to initialize flow db lock\n");
                goto jump_to_error;
@@ -1117,9 +1117,9 @@ bnxt_ulp_port_deinit(struct bnxt *bp)
        /* Get the session details  */
        pci_dev = RTE_DEV_TO_PCI(bp->eth_dev->device);
        pci_addr = &pci_dev->addr;
-       pthread_mutex_lock(&bnxt_ulp_global_mutex);
+       rte_thread_mutex_lock(&bnxt_ulp_global_mutex);
        session = ulp_get_session(pci_addr);
-       pthread_mutex_unlock(&bnxt_ulp_global_mutex);
+       rte_thread_mutex_unlock(&bnxt_ulp_global_mutex);
 
        /* session not found then just exit */
        if (!session) {
@@ -1451,7 +1451,7 @@ bnxt_ulp_cntxt_acquire_fdb_lock(struct bnxt_ulp_context   
*ulp_ctx)
        if (!ulp_ctx || !ulp_ctx->cfg_data)
                return -1;
 
-       if (pthread_mutex_lock(&ulp_ctx->cfg_data->flow_db_lock)) {
+       if (rte_thread_mutex_lock(&ulp_ctx->cfg_data->flow_db_lock)) {
                BNXT_TF_DBG(ERR, "unable to acquire fdb lock\n");
                return -1;
        }
@@ -1465,5 +1465,5 @@ bnxt_ulp_cntxt_release_fdb_lock(struct bnxt_ulp_context   
*ulp_ctx)
        if (!ulp_ctx || !ulp_ctx->cfg_data)
                return;
 
-       pthread_mutex_unlock(&ulp_ctx->cfg_data->flow_db_lock);
+       rte_thread_mutex_unlock(&ulp_ctx->cfg_data->flow_db_lock);
 }
diff --git a/drivers/net/bnxt/tf_ulp/bnxt_ulp.h 
b/drivers/net/bnxt/tf_ulp/bnxt_ulp.h
index 330965061a..86680f2f46 100644
--- a/drivers/net/bnxt/tf_ulp/bnxt_ulp.h
+++ b/drivers/net/bnxt/tf_ulp/bnxt_ulp.h
@@ -49,7 +49,7 @@ struct bnxt_ulp_data {
        uint32_t                        dev_id; /* Hardware device id */
        uint32_t                        ref_cnt;
        struct bnxt_ulp_flow_db         *flow_db;
-       pthread_mutex_t                 flow_db_lock;
+       rte_thread_mutex                flow_db_lock;
        void                            *mapper_data;
        struct bnxt_ulp_port_db         *port_db;
        struct bnxt_ulp_fc_info         *fc_info;
@@ -75,7 +75,7 @@ struct bnxt_ulp_pci_info {
 struct bnxt_ulp_session_state {
        STAILQ_ENTRY(bnxt_ulp_session_state)    next;
        bool                                    bnxt_ulp_init;
-       pthread_mutex_t                         bnxt_ulp_mutex;
+       rte_thread_mutex                        bnxt_ulp_mutex;
        struct bnxt_ulp_pci_info                pci_info;
        struct bnxt_ulp_data                    *cfg_data;
        struct tf                               *g_tfp;
diff --git a/drivers/net/bnxt/tf_ulp/ulp_fc_mgr.c 
b/drivers/net/bnxt/tf_ulp/ulp_fc_mgr.c
index 3eddbd6831..94fe39d7a3 100644
--- a/drivers/net/bnxt/tf_ulp/ulp_fc_mgr.c
+++ b/drivers/net/bnxt/tf_ulp/ulp_fc_mgr.c
@@ -3,6 +3,7 @@
  * All rights reserved.
  */
 
+#include <pthread.h>
 #include <rte_common.h>
 #include <rte_cycles.h>
 #include <rte_malloc.h>
@@ -84,7 +85,7 @@ ulp_fc_mgr_init(struct bnxt_ulp_context *ctxt)
        if (!ulp_fc_info)
                goto error;
 
-       rc = pthread_mutex_init(&ulp_fc_info->fc_lock, NULL);
+       rc = rte_thread_mutex_init(&ulp_fc_info->fc_lock);
        if (rc) {
                PMD_DRV_LOG(ERR, "Failed to initialize fc mutex\n");
                goto error;
@@ -141,7 +142,7 @@ ulp_fc_mgr_deinit(struct bnxt_ulp_context *ctxt)
 
        ulp_fc_mgr_thread_cancel(ctxt);
 
-       pthread_mutex_destroy(&ulp_fc_info->fc_lock);
+       rte_thread_mutex_destroy(&ulp_fc_info->fc_lock);
 
        for (i = 0; i < TF_DIR_MAX; i++)
                rte_free(ulp_fc_info->sw_acc_tbl[i]);
@@ -379,11 +380,12 @@ ulp_fc_mgr_alarm_cb(void *arg)
         * Take the fc_lock to ensure no flow is destroyed
         * during the bulk get
         */
-       if (pthread_mutex_trylock(&ulp_fc_info->fc_lock))
+       if (pthread_mutex_trylock((pthread_mutex_t *)
+                       &ulp_fc_info->fc_lock.mutex_id))
                goto out;
 
        if (!ulp_fc_info->num_entries) {
-               pthread_mutex_unlock(&ulp_fc_info->fc_lock);
+               rte_thread_mutex_unlock(&ulp_fc_info->fc_lock);
                ulp_fc_mgr_thread_cancel(ctxt);
                return;
        }
@@ -414,7 +416,7 @@ ulp_fc_mgr_alarm_cb(void *arg)
                }
        }
 
-       pthread_mutex_unlock(&ulp_fc_info->fc_lock);
+       rte_thread_mutex_unlock(&ulp_fc_info->fc_lock);
 
        /*
         * If cmd fails once, no need of
@@ -503,12 +505,12 @@ int32_t ulp_fc_mgr_cntr_set(struct bnxt_ulp_context 
*ctxt, enum tf_dir dir,
        if (!ulp_fc_info)
                return -EIO;
 
-       pthread_mutex_lock(&ulp_fc_info->fc_lock);
+       rte_thread_mutex_lock(&ulp_fc_info->fc_lock);
        sw_cntr_idx = hw_cntr_id - ulp_fc_info->shadow_hw_tbl[dir].start_idx;
        ulp_fc_info->sw_acc_tbl[dir][sw_cntr_idx].valid = true;
        ulp_fc_info->sw_acc_tbl[dir][sw_cntr_idx].hw_cntr_id = hw_cntr_id;
        ulp_fc_info->num_entries++;
-       pthread_mutex_unlock(&ulp_fc_info->fc_lock);
+       rte_thread_mutex_unlock(&ulp_fc_info->fc_lock);
 
        return 0;
 }
@@ -535,14 +537,14 @@ int32_t ulp_fc_mgr_cntr_reset(struct bnxt_ulp_context 
*ctxt, enum tf_dir dir,
        if (!ulp_fc_info)
                return -EIO;
 
-       pthread_mutex_lock(&ulp_fc_info->fc_lock);
+       rte_thread_mutex_lock(&ulp_fc_info->fc_lock);
        sw_cntr_idx = hw_cntr_id - ulp_fc_info->shadow_hw_tbl[dir].start_idx;
        ulp_fc_info->sw_acc_tbl[dir][sw_cntr_idx].valid = false;
        ulp_fc_info->sw_acc_tbl[dir][sw_cntr_idx].hw_cntr_id = 0;
        ulp_fc_info->sw_acc_tbl[dir][sw_cntr_idx].pkt_count = 0;
        ulp_fc_info->sw_acc_tbl[dir][sw_cntr_idx].byte_count = 0;
        ulp_fc_info->num_entries--;
-       pthread_mutex_unlock(&ulp_fc_info->fc_lock);
+       rte_thread_mutex_unlock(&ulp_fc_info->fc_lock);
 
        return 0;
 }
@@ -607,7 +609,7 @@ int ulp_fc_mgr_query_count_get(struct bnxt_ulp_context 
*ctxt,
        hw_cntr_id = params.resource_hndl;
        if (params.resource_sub_type ==
                        BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_INT_COUNT) {
-               pthread_mutex_lock(&ulp_fc_info->fc_lock);
+               rte_thread_mutex_lock(&ulp_fc_info->fc_lock);
                sw_cntr_idx = hw_cntr_id -
                        ulp_fc_info->shadow_hw_tbl[dir].start_idx;
                sw_acc_tbl_entry = &ulp_fc_info->sw_acc_tbl[dir][sw_cntr_idx];
@@ -621,7 +623,7 @@ int ulp_fc_mgr_query_count_get(struct bnxt_ulp_context 
*ctxt,
                        sw_acc_tbl_entry->pkt_count = 0;
                        sw_acc_tbl_entry->byte_count = 0;
                }
-               pthread_mutex_unlock(&ulp_fc_info->fc_lock);
+               rte_thread_mutex_unlock(&ulp_fc_info->fc_lock);
        } else if (params.resource_sub_type ==
                        BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_INT_COUNT_ACC) {
                /* Get stats from the parent child table */
@@ -663,7 +665,7 @@ int32_t ulp_fc_mgr_cntr_parent_flow_set(struct 
bnxt_ulp_context *ctxt,
        if (!ulp_fc_info)
                return -EIO;
 
-       pthread_mutex_lock(&ulp_fc_info->fc_lock);
+       rte_thread_mutex_lock(&ulp_fc_info->fc_lock);
        sw_cntr_idx = hw_cntr_id - ulp_fc_info->shadow_hw_tbl[dir].start_idx;
        if (ulp_fc_info->sw_acc_tbl[dir][sw_cntr_idx].valid) {
                ulp_fc_info->sw_acc_tbl[dir][sw_cntr_idx].parent_flow_id = fid;
@@ -672,7 +674,7 @@ int32_t ulp_fc_mgr_cntr_parent_flow_set(struct 
bnxt_ulp_context *ctxt,
                            hw_cntr_id, fid);
                rc = -ENOENT;
        }
-       pthread_mutex_unlock(&ulp_fc_info->fc_lock);
+       rte_thread_mutex_unlock(&ulp_fc_info->fc_lock);
 
        return rc;
 }
diff --git a/drivers/net/bnxt/tf_ulp/ulp_fc_mgr.h 
b/drivers/net/bnxt/tf_ulp/ulp_fc_mgr.h
index 04cb86bea2..cfc8ea29d8 100644
--- a/drivers/net/bnxt/tf_ulp/ulp_fc_mgr.h
+++ b/drivers/net/bnxt/tf_ulp/ulp_fc_mgr.h
@@ -47,7 +47,7 @@ struct bnxt_ulp_fc_info {
        struct hw_fc_mem_info   shadow_hw_tbl[TF_DIR_MAX];
        uint32_t                flags;
        uint32_t                num_entries;
-       pthread_mutex_t         fc_lock;
+       rte_thread_mutex        fc_lock;
 };
 
 int32_t
diff --git a/drivers/net/dpaa/dpaa_ethdev.c b/drivers/net/dpaa/dpaa_ethdev.c
index 27d670f843..0983630f5e 100644
--- a/drivers/net/dpaa/dpaa_ethdev.c
+++ b/drivers/net/dpaa/dpaa_ethdev.c
@@ -11,7 +11,7 @@
 #include <limits.h>
 #include <sched.h>
 #include <signal.h>
-#include <pthread.h>
+#include <rte_thread.h>
 #include <sys/types.h>
 #include <sys/syscall.h>
 
diff --git a/drivers/net/dpaa/dpaa_rxtx.c b/drivers/net/dpaa/dpaa_rxtx.c
index 423de40e95..55eb14af5f 100644
--- a/drivers/net/dpaa/dpaa_rxtx.c
+++ b/drivers/net/dpaa/dpaa_rxtx.c
@@ -11,7 +11,7 @@
 #include <stdio.h>
 #include <limits.h>
 #include <sched.h>
-#include <pthread.h>
+#include <rte_thread.h>
 
 #include <rte_byteorder.h>
 #include <rte_common.h>
diff --git a/drivers/net/ena/base/ena_plat_dpdk.h 
b/drivers/net/ena/base/ena_plat_dpdk.h
index f66df95591..7ddcbc1ac4 100644
--- a/drivers/net/ena/base/ena_plat_dpdk.h
+++ b/drivers/net/ena/base/ena_plat_dpdk.h
@@ -9,6 +9,7 @@
 #include <stdbool.h>
 #include <stdlib.h>
 #include <pthread.h>
+#include <rte_thread.h>
 #include <stdint.h>
 #include <inttypes.h>
 #include <string.h>
@@ -148,14 +149,14 @@ extern int ena_logtype_com;
 
 typedef struct {
        pthread_cond_t cond;
-       pthread_mutex_t mutex;
+       rte_thread_mutex mutex;
        uint8_t flag;
 } ena_wait_event_t;
 
 #define ENA_WAIT_EVENT_INIT(waitevent)                                        \
        do {                                                                   \
                ena_wait_event_t *_we = &(waitevent);                          \
-               pthread_mutex_init(&_we->mutex, NULL);                         \
+               rte_thread_mutex_init(&_we->mutex);                            \
                pthread_cond_init(&_we->cond, NULL);                           \
                _we->flag = 0;                                                 \
        } while (0)
@@ -172,10 +173,10 @@ typedef struct {
                wait.tv_sec = now.tv_sec + _tmo / 1000000UL;                   \
                timeout_us = _tmo % 1000000UL;                                 \
                wait.tv_nsec = (now.tv_usec + timeout_us) * 1000UL;            \
-               pthread_mutex_lock(&_we->mutex);                               \
+               rte_thread_mutex_lock(&_we->mutex);                            \
                while (ret == 0 && !_we->flag) {                               \
                        ret = pthread_cond_timedwait(&_we->cond,               \
-                               &_we->mutex, &wait);                           \
+                               _we->mutex.mutex_id, &wait);                   \
                }                                                              \
                /* Asserts only if not working on ena_wait_event_t */          \
                if (unlikely(ret != 0 && ret != ETIMEDOUT))                    \
@@ -185,15 +186,15 @@ typedef struct {
                        ena_trc_err(NULL,                                      \
                                "Timeout waiting for " #waitevent "\n");       \
                _we->flag = 0;                                                 \
-               pthread_mutex_unlock(&_we->mutex);                             \
+               rte_thread_mutex_unlock(&_we->mutex);                          \
        } while (0)
 #define ENA_WAIT_EVENT_SIGNAL(waitevent)                                      \
        do {                                                                   \
                ena_wait_event_t *_we = &(waitevent);                          \
-               pthread_mutex_lock(&_we->mutex);                               \
+               rte_thread_mutex_lock(&_we->mutex);                            \
                _we->flag = 1;                                                 \
                pthread_cond_signal(&_we->cond);                               \
-               pthread_mutex_unlock(&_we->mutex);                             \
+               rte_thread_mutex_unlock(&_we->mutex);                          \
        } while (0)
 /* pthread condition doesn't need to be rearmed after usage */
 #define ENA_WAIT_EVENT_CLEAR(...)
diff --git a/drivers/net/enic/enic.h b/drivers/net/enic/enic.h
index 47bfdac2cf..db07c589b9 100644
--- a/drivers/net/enic/enic.h
+++ b/drivers/net/enic/enic.h
@@ -107,7 +107,7 @@ struct enic {
        int iommu_groupid;
        int eventfd;
        uint8_t mac_addr[RTE_ETHER_ADDR_LEN];
-       pthread_t err_intr_thread;
+       rte_thread_t err_intr_thread;
        int promisc;
        int allmulti;
        uint8_t ig_vlan_strip_en;
diff --git a/drivers/net/ice/ice_dcf_parent.c b/drivers/net/ice/ice_dcf_parent.c
index 1d7aa8bc87..5fd769a82d 100644
--- a/drivers/net/ice/ice_dcf_parent.c
+++ b/drivers/net/ice/ice_dcf_parent.c
@@ -3,7 +3,7 @@
  */
 #include <sys/types.h>
 #include <sys/stat.h>
-#include <pthread.h>
+#include <rte_thread.h>
 #include <unistd.h>
 
 #include <rte_spinlock.h>
@@ -121,7 +121,7 @@ ice_dcf_vsi_update_service_handler(void *param)
        struct ice_dcf_hw *hw = reset_param->dcf_hw;
        struct ice_dcf_adapter *adapter;
 
-       pthread_detach(pthread_self());
+       rte_thread_detach(rte_thread_self());
 
        rte_delay_us(ICE_DCF_VSI_UPDATE_SERVICE_INTERVAL);
 
@@ -156,7 +156,7 @@ start_vsi_reset_thread(struct ice_dcf_hw *dcf_hw, bool vfr, 
uint16_t vf_id)
 #define THREAD_NAME_LEN        16
        struct ice_dcf_reset_event_param *param;
        char name[THREAD_NAME_LEN];
-       pthread_t thread;
+       rte_thread_t thread;
        int ret;
 
        param = malloc(sizeof(*param));
@@ -170,7 +170,7 @@ start_vsi_reset_thread(struct ice_dcf_hw *dcf_hw, bool vfr, 
uint16_t vf_id)
        param->vf_id = vf_id;
 
        snprintf(name, sizeof(name), "ice-reset-%u", vf_id);
-       ret = rte_ctrl_thread_create(&thread, name, NULL,
+       ret = rte_thread_ctrl_thread_create(&thread, name,
                                     ice_dcf_vsi_update_service_handler, param);
        if (ret != 0) {
                PMD_DRV_LOG(ERR, "Failed to start the thread for reset 
handling");
diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
index b5371568b5..cf7b19edc0 100644
--- a/drivers/net/ixgbe/ixgbe_ethdev.c
+++ b/drivers/net/ixgbe/ixgbe_ethdev.c
@@ -4156,7 +4156,7 @@ ixgbe_dev_setup_link_thread_handler(void *param)
        u32 speed;
        bool autoneg = false;
 
-       pthread_detach(pthread_self());
+       rte_thread_detach(rte_thread_self());
        speed = hw->phy.autoneg_advertised;
        if (!speed)
                ixgbe_get_link_capabilities(hw, &speed, &autoneg);
@@ -4264,9 +4264,9 @@ ixgbe_dev_link_update_share(struct rte_eth_dev *dev,
                                 * when there is no link thread running.
                                 */
                                intr->flags |= IXGBE_FLAG_NEED_LINK_CONFIG;
-                               if (rte_ctrl_thread_create(&ad->link_thread_tid,
+                               if (rte_thread_ctrl_thread_create
+                                       (&ad->link_thread_tid,
                                        "ixgbe-link-handler",
-                                       NULL,
                                        ixgbe_dev_setup_link_thread_handler,
                                        dev) < 0) {
                                        PMD_DRV_LOG(ERR,
diff --git a/drivers/net/ixgbe/ixgbe_ethdev.h b/drivers/net/ixgbe/ixgbe_ethdev.h
index a0ce18ca24..272fdcfb8d 100644
--- a/drivers/net/ixgbe/ixgbe_ethdev.h
+++ b/drivers/net/ixgbe/ixgbe_ethdev.h
@@ -516,7 +516,7 @@ struct ixgbe_adapter {
        uint8_t pflink_fullchk;
        uint8_t mac_ctrl_frame_fwd;
        rte_atomic32_t link_thread_running;
-       pthread_t link_thread_tid;
+       rte_thread_t link_thread_tid;
 };
 
 struct ixgbe_vf_representor {
diff --git a/drivers/net/mlx5/linux/mlx5_os.c b/drivers/net/mlx5/linux/mlx5_os.c
index 534a56a555..15080bbc1c 100644
--- a/drivers/net/mlx5/linux/mlx5_os.c
+++ b/drivers/net/mlx5/linux/mlx5_os.c
@@ -2557,7 +2557,7 @@ mlx5_os_open_device(const struct mlx5_dev_spawn_data 
*spawn,
        int err = 0;
 
        sh->numa_node = spawn->pci_dev->device.numa_node;
-       pthread_mutex_init(&sh->txpp.mutex, NULL);
+       rte_thread_mutex_init(&sh->txpp.mutex);
        /*
         * Configure environment variable "MLX5_BF_SHUT_UP"
         * before the device creation. The rdma_core library
diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c
index cf1815cb74..375fcde4df 100644
--- a/drivers/net/mlx5/mlx5.c
+++ b/drivers/net/mlx5/mlx5.c
@@ -183,7 +183,7 @@ int mlx5_logtype;
 
 static LIST_HEAD(, mlx5_dev_ctx_shared) mlx5_dev_ctx_list =
                                                LIST_HEAD_INITIALIZER();
-static pthread_mutex_t mlx5_dev_ctx_list_mutex;
+static rte_thread_mutex mlx5_dev_ctx_list_mutex;
 static const struct mlx5_indexed_pool_config mlx5_ipool_cfg[] = {
 #if defined(HAVE_IBV_FLOW_DV_SUPPORT) || !defined(HAVE_INFINIBAND_VERBS_H)
        [MLX5_IPOOL_DECAP_ENCAP] = {
@@ -1088,7 +1088,7 @@ mlx5_alloc_shared_dev_ctx(const struct 
mlx5_dev_spawn_data *spawn,
        MLX5_ASSERT(spawn);
        /* Secondary process should not create the shared context. */
        MLX5_ASSERT(rte_eal_process_type() == RTE_PROC_PRIMARY);
-       pthread_mutex_lock(&mlx5_dev_ctx_list_mutex);
+       rte_thread_mutex_lock(&mlx5_dev_ctx_list_mutex);
        /* Search for IB context by device name. */
        LIST_FOREACH(sh, &mlx5_dev_ctx_list, next) {
                if (!strcmp(sh->ibdev_name,
@@ -1215,11 +1215,11 @@ mlx5_alloc_shared_dev_ctx(const struct 
mlx5_dev_spawn_data *spawn,
        LIST_INSERT_HEAD(&mlx5_dev_ctx_list, sh, next);
        rte_spinlock_init(&sh->geneve_tlv_opt_sl);
 exit:
-       pthread_mutex_unlock(&mlx5_dev_ctx_list_mutex);
+       rte_thread_mutex_unlock(&mlx5_dev_ctx_list_mutex);
        return sh;
 error:
-       pthread_mutex_destroy(&sh->txpp.mutex);
-       pthread_mutex_unlock(&mlx5_dev_ctx_list_mutex);
+       rte_thread_mutex_destroy(&sh->txpp.mutex);
+       rte_thread_mutex_unlock(&mlx5_dev_ctx_list_mutex);
        MLX5_ASSERT(sh);
        if (sh->cnt_id_tbl)
                mlx5_l3t_destroy(sh->cnt_id_tbl);
@@ -1251,7 +1251,7 @@ mlx5_alloc_shared_dev_ctx(const struct 
mlx5_dev_spawn_data *spawn,
 void
 mlx5_free_shared_dev_ctx(struct mlx5_dev_ctx_shared *sh)
 {
-       pthread_mutex_lock(&mlx5_dev_ctx_list_mutex);
+       rte_thread_mutex_lock(&mlx5_dev_ctx_list_mutex);
 #ifdef RTE_LIBRTE_MLX5_DEBUG
        /* Check the object presence in the list. */
        struct mlx5_dev_ctx_shared *lctx;
@@ -1282,7 +1282,7 @@ mlx5_free_shared_dev_ctx(struct mlx5_dev_ctx_shared *sh)
        /* Release flow workspaces objects on the last device. */
        if (LIST_EMPTY(&mlx5_dev_ctx_list))
                mlx5_flow_os_release_workspace();
-       pthread_mutex_unlock(&mlx5_dev_ctx_list_mutex);
+       rte_thread_mutex_unlock(&mlx5_dev_ctx_list_mutex);
        /*
         *  Ensure there is no async event handler installed.
         *  Only primary process handles async device events.
@@ -1315,11 +1315,11 @@ mlx5_free_shared_dev_ctx(struct mlx5_dev_ctx_shared *sh)
        if (sh->ctx)
                claim_zero(mlx5_glue->close_device(sh->ctx));
        MLX5_ASSERT(sh->geneve_tlv_option_resource == NULL);
-       pthread_mutex_destroy(&sh->txpp.mutex);
+       rte_thread_mutex_destroy(&sh->txpp.mutex);
        mlx5_free(sh);
        return;
 exit:
-       pthread_mutex_unlock(&mlx5_dev_ctx_list_mutex);
+       rte_thread_mutex_unlock(&mlx5_dev_ctx_list_mutex);
 }
 
 /**
@@ -2450,7 +2450,7 @@ RTE_LOG_REGISTER_DEFAULT(mlx5_logtype, NOTICE)
  */
 RTE_INIT(rte_mlx5_pmd_init)
 {
-       pthread_mutex_init(&mlx5_dev_ctx_list_mutex, NULL);
+       rte_thread_mutex_init(&mlx5_dev_ctx_list_mutex);
        mlx5_common_init();
        /* Build the static tables for Verbs conversion. */
        mlx5_set_ptype_table();
diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h
index 32b2817bf2..ecc4ed204a 100644
--- a/drivers/net/mlx5/mlx5.h
+++ b/drivers/net/mlx5/mlx5.h
@@ -949,7 +949,7 @@ struct mlx5_txpp_ts {
 
 /* Tx packet pacing structure. */
 struct mlx5_dev_txpp {
-       pthread_mutex_t mutex; /* Pacing create/destroy mutex. */
+       rte_thread_mutex mutex; /* Pacing create/destroy mutex. */
        uint32_t refcnt; /* Pacing reference counter. */
        uint32_t freq; /* Timestamp frequency, Hz. */
        uint32_t tick; /* Completion tick duration in nanoseconds. */
diff --git a/drivers/net/mlx5/mlx5_txpp.c b/drivers/net/mlx5/mlx5_txpp.c
index d90399afb5..e308c5e599 100644
--- a/drivers/net/mlx5/mlx5_txpp.c
+++ b/drivers/net/mlx5/mlx5_txpp.c
@@ -905,7 +905,7 @@ mlx5_txpp_start(struct rte_eth_dev *dev)
                if (ret < 0)
                        return 0;
        }
-       ret = pthread_mutex_lock(&sh->txpp.mutex);
+       ret = rte_thread_mutex_lock(&sh->txpp.mutex);
        MLX5_ASSERT(!ret);
        RTE_SET_USED(ret);
        if (sh->txpp.refcnt) {
@@ -921,7 +921,7 @@ mlx5_txpp_start(struct rte_eth_dev *dev)
                        rte_errno = -err;
                }
        }
-       ret = pthread_mutex_unlock(&sh->txpp.mutex);
+       ret = rte_thread_mutex_unlock(&sh->txpp.mutex);
        MLX5_ASSERT(!ret);
        RTE_SET_USED(ret);
        return err;
@@ -948,7 +948,7 @@ mlx5_txpp_stop(struct rte_eth_dev *dev)
                return;
        }
        priv->txpp_en = 0;
-       ret = pthread_mutex_lock(&sh->txpp.mutex);
+       ret = rte_thread_mutex_lock(&sh->txpp.mutex);
        MLX5_ASSERT(!ret);
        RTE_SET_USED(ret);
        MLX5_ASSERT(sh->txpp.refcnt);
@@ -956,7 +956,7 @@ mlx5_txpp_stop(struct rte_eth_dev *dev)
                return;
        /* No references any more, do actual destroy. */
        mlx5_txpp_destroy(sh);
-       ret = pthread_mutex_unlock(&sh->txpp.mutex);
+       ret = rte_thread_mutex_unlock(&sh->txpp.mutex);
        MLX5_ASSERT(!ret);
        RTE_SET_USED(ret);
 }
diff --git a/drivers/net/mlx5/windows/mlx5_flow_os.c 
b/drivers/net/mlx5/windows/mlx5_flow_os.c
index c4d5790726..ccdb0184a9 100644
--- a/drivers/net/mlx5/windows/mlx5_flow_os.c
+++ b/drivers/net/mlx5/windows/mlx5_flow_os.c
@@ -253,7 +253,7 @@ struct mlx5_workspace_thread {
 static struct mlx5_workspace_thread *curr;
 static struct mlx5_workspace_thread *first;
 rte_thread_key ws_tls_index;
-static pthread_mutex_t lock_thread_list;
+RTE_STATIC_MUTEX(lock_thread_list)
 
 static bool
 mlx5_is_thread_alive(HANDLE thread_handle)
@@ -330,7 +330,7 @@ mlx5_flow_os_release_workspace(void)
                free(first);
        }
        rte_thread_key_delete(ws_tls_index);
-       pthread_mutex_destroy(&lock_thread_list);
+       rte_thread_mutex_destroy(&lock_thread_list);
 }
 
 static int
@@ -352,7 +352,7 @@ mlx5_add_workspace_to_list(struct mlx5_flow_workspace *data)
        }
        temp->mlx5_ws = data;
        temp->thread_handle = curr_thread;
-       pthread_mutex_lock(&lock_thread_list);
+       rte_thread_mutex_lock(&lock_thread_list);
        mlx5_clear_thread_list();
        if (!first) {
                first = temp;
@@ -361,7 +361,7 @@ mlx5_add_workspace_to_list(struct mlx5_flow_workspace *data)
                curr->next = temp;
                curr = curr->next;
        }
-       pthread_mutex_unlock(&lock_thread_list);
+       rte_thread_mutex_unlock(&lock_thread_list);
        return 0;
 }
 
@@ -374,7 +374,7 @@ mlx5_flow_os_init_workspace_once(void)
                DRV_LOG(ERR, "Can't create flow workspace data thread key.");
                return err;
        }
-       pthread_mutex_init(&lock_thread_list, NULL);
+       rte_thread_mutex_init(&lock_thread_list);
        return 0;
 }
 
diff --git a/drivers/net/mlx5/windows/mlx5_os.c 
b/drivers/net/mlx5/windows/mlx5_os.c
index 3fe3f55f49..e37e16d70f 100644
--- a/drivers/net/mlx5/windows/mlx5_os.c
+++ b/drivers/net/mlx5/windows/mlx5_os.c
@@ -228,7 +228,7 @@ mlx5_os_open_device(const struct mlx5_dev_spawn_data *spawn,
        int err = 0;
        struct mlx5_context *mlx5_ctx;
 
-       pthread_mutex_init(&sh->txpp.mutex, NULL);
+       rte_thread_mutex_init(&sh->txpp.mutex);
        /* Set numa node from pci probe */
        sh->numa_node = spawn->pci_dev->device.numa_node;
 
diff --git a/drivers/net/qede/base/bcm_osal.h b/drivers/net/qede/base/bcm_osal.h
index c5b5399282..c9011d964b 100644
--- a/drivers/net/qede/base/bcm_osal.h
+++ b/drivers/net/qede/base/bcm_osal.h
@@ -153,10 +153,10 @@ void osal_dma_free_mem(struct ecore_dev *edev, dma_addr_t 
phys);
 
 /* Mutexes */
 
-typedef pthread_mutex_t osal_mutex_t;
-#define OSAL_MUTEX_RELEASE(lock) pthread_mutex_unlock(lock)
-#define OSAL_MUTEX_INIT(lock) pthread_mutex_init(lock, NULL)
-#define OSAL_MUTEX_ACQUIRE(lock) pthread_mutex_lock(lock)
+typedef rte_thread_mutex osal_mutex_t;
+#define OSAL_MUTEX_RELEASE(lock) rte_thread_mutex_unlock(lock)
+#define OSAL_MUTEX_INIT(lock) rte_thread_mutex_init(lock)
+#define OSAL_MUTEX_ACQUIRE(lock) rte_thread_mutex_lock(lock)
 #define OSAL_MUTEX_ALLOC(hwfn, lock) nothing
 #define OSAL_MUTEX_DEALLOC(lock) nothing
 
diff --git a/drivers/net/vhost/rte_eth_vhost.c 
b/drivers/net/vhost/rte_eth_vhost.c
index a202931e9a..484b647a62 100644
--- a/drivers/net/vhost/rte_eth_vhost.c
+++ b/drivers/net/vhost/rte_eth_vhost.c
@@ -3,7 +3,7 @@
  * Copyright(c) 2016-2018 Intel Corporation
  */
 #include <unistd.h>
-#include <pthread.h>
+#include <rte_thread.h>
 #include <stdbool.h>
 #include <sys/epoll.h>
 
@@ -121,7 +121,7 @@ TAILQ_HEAD(internal_list_head, internal_list);
 static struct internal_list_head internal_list =
        TAILQ_HEAD_INITIALIZER(internal_list);
 
-static pthread_mutex_t internal_list_lock = PTHREAD_MUTEX_INITIALIZER;
+RTE_STATIC_MUTEX(internal_list_lock)
 
 static struct rte_eth_link pmd_link = {
                .link_speed = 10000,
@@ -507,7 +507,7 @@ find_internal_resource(char *ifname)
        if (ifname == NULL)
                return NULL;
 
-       pthread_mutex_lock(&internal_list_lock);
+       rte_thread_mutex_lock(&internal_list_lock);
 
        TAILQ_FOREACH(list, &internal_list, next) {
                internal = list->eth_dev->data->dev_private;
@@ -517,7 +517,7 @@ find_internal_resource(char *ifname)
                }
        }
 
-       pthread_mutex_unlock(&internal_list_lock);
+       rte_thread_mutex_unlock(&internal_list_lock);
 
        if (!found)
                return NULL;
@@ -1001,9 +1001,9 @@ vhost_driver_setup(struct rte_eth_dev *eth_dev)
                goto free_list;
 
        list->eth_dev = eth_dev;
-       pthread_mutex_lock(&internal_list_lock);
+       rte_thread_mutex_lock(&internal_list_lock);
        TAILQ_INSERT_TAIL(&internal_list, list, next);
-       pthread_mutex_unlock(&internal_list_lock);
+       rte_thread_mutex_unlock(&internal_list_lock);
 
        rte_spinlock_init(&vring_state->lock);
        vring_states[eth_dev->data->port_id] = vring_state;
@@ -1035,9 +1035,9 @@ vhost_driver_setup(struct rte_eth_dev *eth_dev)
        rte_vhost_driver_unregister(internal->iface_name);
 list_remove:
        vring_states[eth_dev->data->port_id] = NULL;
-       pthread_mutex_lock(&internal_list_lock);
+       rte_thread_mutex_lock(&internal_list_lock);
        TAILQ_REMOVE(&internal_list, list, next);
-       pthread_mutex_unlock(&internal_list_lock);
+       rte_thread_mutex_unlock(&internal_list_lock);
        rte_free(vring_state);
 free_list:
        rte_free(list);
@@ -1093,7 +1093,7 @@ rte_eth_vhost_get_vid_from_port_id(uint16_t port_id)
        if (!rte_eth_dev_is_valid_port(port_id))
                return -1;
 
-       pthread_mutex_lock(&internal_list_lock);
+       rte_thread_mutex_lock(&internal_list_lock);
 
        TAILQ_FOREACH(list, &internal_list, next) {
                eth_dev = list->eth_dev;
@@ -1106,7 +1106,7 @@ rte_eth_vhost_get_vid_from_port_id(uint16_t port_id)
                }
        }
 
-       pthread_mutex_unlock(&internal_list_lock);
+       rte_thread_mutex_unlock(&internal_list_lock);
 
        return vid;
 }
@@ -1184,9 +1184,9 @@ eth_dev_close(struct rte_eth_dev *dev)
        list = find_internal_resource(internal->iface_name);
        if (list) {
                rte_vhost_driver_unregister(internal->iface_name);
-               pthread_mutex_lock(&internal_list_lock);
+               rte_thread_mutex_lock(&internal_list_lock);
                TAILQ_REMOVE(&internal_list, list, next);
-               pthread_mutex_unlock(&internal_list_lock);
+               rte_thread_mutex_unlock(&internal_list_lock);
                rte_free(list);
        }
 
diff --git a/drivers/net/virtio/virtio_user/virtio_user_dev.c 
b/drivers/net/virtio/virtio_user/virtio_user_dev.c
index 364f43e21c..9231da676b 100644
--- a/drivers/net/virtio/virtio_user/virtio_user_dev.c
+++ b/drivers/net/virtio/virtio_user/virtio_user_dev.c
@@ -143,7 +143,7 @@ virtio_user_dev_set_features(struct virtio_user_dev *dev)
        uint64_t features;
        int ret = -1;
 
-       pthread_mutex_lock(&dev->mutex);
+       rte_thread_mutex_lock(&dev->mutex);
 
        /* Step 0: tell vhost to create queues */
        if (virtio_user_queue_setup(dev, virtio_user_create_queue) < 0)
@@ -161,7 +161,7 @@ virtio_user_dev_set_features(struct virtio_user_dev *dev)
                goto error;
        PMD_DRV_LOG(INFO, "(%s) set features: 0x%" PRIx64, dev->path, features);
 error:
-       pthread_mutex_unlock(&dev->mutex);
+       rte_thread_mutex_unlock(&dev->mutex);
 
        return ret;
 }
@@ -185,7 +185,7 @@ virtio_user_start_device(struct virtio_user_dev *dev)
         * memory subsystem in the future.
         */
        rte_mcfg_mem_read_lock();
-       pthread_mutex_lock(&dev->mutex);
+       rte_thread_mutex_lock(&dev->mutex);
 
        /* Step 2: share memory regions */
        ret = dev->ops->set_memory_table(dev);
@@ -206,12 +206,12 @@ virtio_user_start_device(struct virtio_user_dev *dev)
 
        dev->started = true;
 
-       pthread_mutex_unlock(&dev->mutex);
+       rte_thread_mutex_unlock(&dev->mutex);
        rte_mcfg_mem_read_unlock();
 
        return 0;
 error:
-       pthread_mutex_unlock(&dev->mutex);
+       rte_thread_mutex_unlock(&dev->mutex);
        rte_mcfg_mem_read_unlock();
 
        PMD_INIT_LOG(ERR, "(%s) Failed to start device\n", dev->path);
@@ -226,7 +226,7 @@ int virtio_user_stop_device(struct virtio_user_dev *dev)
        uint32_t i;
        int ret;
 
-       pthread_mutex_lock(&dev->mutex);
+       rte_thread_mutex_lock(&dev->mutex);
        if (!dev->started)
                goto out;
 
@@ -249,11 +249,11 @@ int virtio_user_stop_device(struct virtio_user_dev *dev)
        dev->started = false;
 
 out:
-       pthread_mutex_unlock(&dev->mutex);
+       rte_thread_mutex_unlock(&dev->mutex);
 
        return 0;
 err:
-       pthread_mutex_unlock(&dev->mutex);
+       rte_thread_mutex_unlock(&dev->mutex);
 
        PMD_INIT_LOG(ERR, "(%s) Failed to stop device\n", dev->path);
 
@@ -380,7 +380,7 @@ virtio_user_mem_event_cb(enum rte_mem_event type 
__rte_unused,
        if (msl->external)
                return;
 
-       pthread_mutex_lock(&dev->mutex);
+       rte_thread_mutex_lock(&dev->mutex);
 
        if (dev->started == false)
                goto exit;
@@ -405,7 +405,7 @@ virtio_user_mem_event_cb(enum rte_mem_event type 
__rte_unused,
        }
 
 exit:
-       pthread_mutex_unlock(&dev->mutex);
+       rte_thread_mutex_unlock(&dev->mutex);
 
        if (ret < 0)
                PMD_DRV_LOG(ERR, "(%s) Failed to update memory table\n", 
dev->path);
@@ -491,7 +491,7 @@ virtio_user_dev_init(struct virtio_user_dev *dev, char 
*path, int queues,
        uint64_t backend_features;
        int i;
 
-       pthread_mutex_init(&dev->mutex, NULL);
+       rte_thread_mutex_init(&dev->mutex);
        strlcpy(dev->path, path, PATH_MAX);
 
        for (i = 0; i < VIRTIO_MAX_VIRTQUEUES; i++) {
@@ -796,13 +796,13 @@ virtio_user_dev_set_status(struct virtio_user_dev *dev, 
uint8_t status)
 {
        int ret;
 
-       pthread_mutex_lock(&dev->mutex);
+       rte_thread_mutex_lock(&dev->mutex);
        dev->status = status;
        ret = dev->ops->set_status(dev, status);
        if (ret && ret != -ENOTSUP)
                PMD_INIT_LOG(ERR, "(%s) Failed to set backend status\n", 
dev->path);
 
-       pthread_mutex_unlock(&dev->mutex);
+       rte_thread_mutex_unlock(&dev->mutex);
        return ret;
 }
 
@@ -812,7 +812,7 @@ virtio_user_dev_update_status(struct virtio_user_dev *dev)
        int ret;
        uint8_t status;
 
-       pthread_mutex_lock(&dev->mutex);
+       rte_thread_mutex_lock(&dev->mutex);
 
        ret = dev->ops->get_status(dev, &status);
        if (!ret) {
@@ -837,7 +837,7 @@ virtio_user_dev_update_status(struct virtio_user_dev *dev)
                PMD_INIT_LOG(ERR, "(%s) Failed to get backend status\n", 
dev->path);
        }
 
-       pthread_mutex_unlock(&dev->mutex);
+       rte_thread_mutex_unlock(&dev->mutex);
        return ret;
 }
 
diff --git a/drivers/net/virtio/virtio_user/virtio_user_dev.h 
b/drivers/net/virtio/virtio_user/virtio_user_dev.h
index 58ad5198b6..9de8f5e67b 100644
--- a/drivers/net/virtio/virtio_user/virtio_user_dev.h
+++ b/drivers/net/virtio/virtio_user/virtio_user_dev.h
@@ -55,7 +55,7 @@ struct virtio_user_dev {
        bool            qp_enabled[VIRTIO_MAX_VIRTQUEUE_PAIRS];
 
        struct virtio_user_backend_ops *ops;
-       pthread_mutex_t mutex;
+       rte_thread_mutex        mutex;
        bool            started;
 
        void *backend_data;
diff --git a/drivers/vdpa/ifc/ifcvf_vdpa.c b/drivers/vdpa/ifc/ifcvf_vdpa.c
index 1dc813d0a3..81ff6c2d58 100644
--- a/drivers/vdpa/ifc/ifcvf_vdpa.c
+++ b/drivers/vdpa/ifc/ifcvf_vdpa.c
@@ -23,6 +23,7 @@
 #include <rte_log.h>
 #include <rte_kvargs.h>
 #include <rte_devargs.h>
+#include <rte_thread.h>
 
 #include "base/ifcvf.h"
 
@@ -52,7 +53,7 @@ struct ifcvf_internal {
        int vfio_container_fd;
        int vfio_group_fd;
        int vfio_dev_fd;
-       pthread_t tid;  /* thread for notify relay */
+       rte_thread_t tid;       /* thread for notify relay */
        int epfd;
        int vid;
        struct rte_vdpa_device *vdev;
@@ -79,7 +80,7 @@ TAILQ_HEAD(internal_list_head, internal_list);
 static struct internal_list_head internal_list =
        TAILQ_HEAD_INITIALIZER(internal_list);
 
-static pthread_mutex_t internal_list_lock = PTHREAD_MUTEX_INITIALIZER;
+RTE_STATIC_MUTEX(internal_list_lock)
 
 static void update_used_ring(struct ifcvf_internal *internal, uint16_t qid);
 
@@ -89,7 +90,7 @@ find_internal_resource_by_vdev(struct rte_vdpa_device *vdev)
        int found = 0;
        struct internal_list *list;
 
-       pthread_mutex_lock(&internal_list_lock);
+       rte_thread_mutex_lock(&internal_list_lock);
 
        TAILQ_FOREACH(list, &internal_list, next) {
                if (vdev == list->internal->vdev) {
@@ -98,7 +99,7 @@ find_internal_resource_by_vdev(struct rte_vdpa_device *vdev)
                }
        }
 
-       pthread_mutex_unlock(&internal_list_lock);
+       rte_thread_mutex_unlock(&internal_list_lock);
 
        if (!found)
                return NULL;
@@ -112,7 +113,7 @@ find_internal_resource_by_dev(struct rte_pci_device *pdev)
        int found = 0;
        struct internal_list *list;
 
-       pthread_mutex_lock(&internal_list_lock);
+       rte_thread_mutex_lock(&internal_list_lock);
 
        TAILQ_FOREACH(list, &internal_list, next) {
                if (!rte_pci_addr_cmp(&pdev->addr,
@@ -122,7 +123,7 @@ find_internal_resource_by_dev(struct rte_pci_device *pdev)
                }
        }
 
-       pthread_mutex_unlock(&internal_list_lock);
+       rte_thread_mutex_unlock(&internal_list_lock);
 
        if (!found)
                return NULL;
@@ -500,10 +501,10 @@ setup_notify_relay(struct ifcvf_internal *internal)
        int ret;
 
        snprintf(name, sizeof(name), "ifc-notify-%d", internal->vid);
-       ret = rte_ctrl_thread_create(&internal->tid, name, NULL, notify_relay,
+       ret = rte_thread_ctrl_thread_create(&internal->tid, name, notify_relay,
                                     (void *)internal);
        if (ret != 0) {
-               DRV_LOG(ERR, "failed to create notify relay pthread.");
+               DRV_LOG(ERR, "failed to create notify relay thread.");
                return -1;
        }
 
@@ -513,13 +514,11 @@ setup_notify_relay(struct ifcvf_internal *internal)
 static int
 unset_notify_relay(struct ifcvf_internal *internal)
 {
-       void *status;
-
-       if (internal->tid) {
-               pthread_cancel(internal->tid);
-               pthread_join(internal->tid, &status);
+       if (internal->tid.opaque_id) {
+               pthread_cancel(internal->tid.opaque_id);
+               rte_thread_join(internal->tid, NULL);
        }
-       internal->tid = 0;
+       internal->tid.opaque_id = 0;
 
        if (internal->epfd >= 0)
                close(internal->epfd);
@@ -806,10 +805,10 @@ setup_vring_relay(struct ifcvf_internal *internal)
        int ret;
 
        snprintf(name, sizeof(name), "ifc-vring-%d", internal->vid);
-       ret = rte_ctrl_thread_create(&internal->tid, name, NULL, vring_relay,
+       ret = rte_thread_ctrl_thread_create(&internal->tid, name, vring_relay,
                                     (void *)internal);
        if (ret != 0) {
-               DRV_LOG(ERR, "failed to create ring relay pthread.");
+               DRV_LOG(ERR, "failed to create ring relay thread.");
                return -1;
        }
 
@@ -819,13 +818,11 @@ setup_vring_relay(struct ifcvf_internal *internal)
 static int
 unset_vring_relay(struct ifcvf_internal *internal)
 {
-       void *status;
-
-       if (internal->tid) {
-               pthread_cancel(internal->tid);
-               pthread_join(internal->tid, &status);
+       if (internal->tid.opaque_id) {
+               pthread_cancel(internal->tid.opaque_id);
+               rte_thread_join(internal->tid, NULL);
        }
-       internal->tid = 0;
+       internal->tid.opaque_id = 0;
 
        if (internal->epfd >= 0)
                close(internal->epfd);
@@ -1253,9 +1250,9 @@ ifcvf_pci_probe(struct rte_pci_driver *pci_drv 
__rte_unused,
                goto error;
        }
 
-       pthread_mutex_lock(&internal_list_lock);
+       rte_thread_mutex_lock(&internal_list_lock);
        TAILQ_INSERT_TAIL(&internal_list, list, next);
-       pthread_mutex_unlock(&internal_list_lock);
+       rte_thread_mutex_unlock(&internal_list_lock);
 
        rte_atomic32_set(&internal->started, 1);
        update_datapath(internal);
@@ -1293,9 +1290,9 @@ ifcvf_pci_remove(struct rte_pci_device *pci_dev)
        rte_vfio_container_destroy(internal->vfio_container_fd);
        rte_vdpa_unregister_device(internal->vdev);
 
-       pthread_mutex_lock(&internal_list_lock);
+       rte_thread_mutex_lock(&internal_list_lock);
        TAILQ_REMOVE(&internal_list, list, next);
-       pthread_mutex_unlock(&internal_list_lock);
+       rte_thread_mutex_unlock(&internal_list_lock);
 
        rte_free(list);
        rte_free(internal);
diff --git a/drivers/vdpa/mlx5/mlx5_vdpa.c b/drivers/vdpa/mlx5/mlx5_vdpa.c
index e5e03e6582..c7a6fee2c7 100644
--- a/drivers/vdpa/mlx5/mlx5_vdpa.c
+++ b/drivers/vdpa/mlx5/mlx5_vdpa.c
@@ -48,7 +48,7 @@
 
 TAILQ_HEAD(mlx5_vdpa_privs, mlx5_vdpa_priv) priv_list =
                                              TAILQ_HEAD_INITIALIZER(priv_list);
-static pthread_mutex_t priv_list_lock = PTHREAD_MUTEX_INITIALIZER;
+RTE_STATIC_MUTEX(priv_list_lock)
 
 static struct mlx5_vdpa_priv *
 mlx5_vdpa_find_priv_resource_by_vdev(struct rte_vdpa_device *vdev)
@@ -56,14 +56,14 @@ mlx5_vdpa_find_priv_resource_by_vdev(struct rte_vdpa_device 
*vdev)
        struct mlx5_vdpa_priv *priv;
        int found = 0;
 
-       pthread_mutex_lock(&priv_list_lock);
+       rte_thread_mutex_lock(&priv_list_lock);
        TAILQ_FOREACH(priv, &priv_list, next) {
                if (vdev == priv->vdev) {
                        found = 1;
                        break;
                }
        }
-       pthread_mutex_unlock(&priv_list_lock);
+       rte_thread_mutex_unlock(&priv_list_lock);
        if (!found) {
                DRV_LOG(ERR, "Invalid vDPA device: %s.", vdev->device->name);
                rte_errno = EINVAL;
@@ -143,9 +143,9 @@ mlx5_vdpa_set_vring_state(int vid, int vring, int state)
                DRV_LOG(ERR, "Too big vring id: %d.", vring);
                return -E2BIG;
        }
-       pthread_mutex_lock(&priv->vq_config_lock);
+       rte_thread_mutex_lock(&priv->vq_config_lock);
        ret = mlx5_vdpa_virtq_enable(priv, vring, state);
-       pthread_mutex_unlock(&priv->vq_config_lock);
+       rte_thread_mutex_unlock(&priv->vq_config_lock);
        return ret;
 }
 
@@ -296,7 +296,7 @@ mlx5_vdpa_dev_close(int vid)
        priv->configured = 0;
        priv->vid = 0;
        /* The mutex may stay locked after event thread cancel - initiate it. */
-       pthread_mutex_init(&priv->vq_config_lock, NULL);
+       rte_thread_mutex_init(&priv->vq_config_lock);
        DRV_LOG(INFO, "vDPA device %d was closed.", vid);
        return ret;
 }
@@ -736,10 +736,10 @@ mlx5_vdpa_pci_probe(struct rte_pci_driver *pci_drv 
__rte_unused,
        }
        mlx5_vdpa_config_get(pci_dev->device.devargs, priv);
        SLIST_INIT(&priv->mr_list);
-       pthread_mutex_init(&priv->vq_config_lock, NULL);
-       pthread_mutex_lock(&priv_list_lock);
+       rte_thread_mutex_init(&priv->vq_config_lock);
+       rte_thread_mutex_lock(&priv_list_lock);
        TAILQ_INSERT_TAIL(&priv_list, priv, next);
-       pthread_mutex_unlock(&priv_list_lock);
+       rte_thread_mutex_unlock(&priv_list_lock);
        return 0;
 
 error:
@@ -770,7 +770,7 @@ mlx5_vdpa_pci_remove(struct rte_pci_device *pci_dev)
        struct mlx5_vdpa_priv *priv = NULL;
        int found = 0;
 
-       pthread_mutex_lock(&priv_list_lock);
+       rte_thread_mutex_lock(&priv_list_lock);
        TAILQ_FOREACH(priv, &priv_list, next) {
                if (!rte_pci_addr_cmp(&priv->pci_dev->addr, &pci_dev->addr)) {
                        found = 1;
@@ -779,7 +779,7 @@ mlx5_vdpa_pci_remove(struct rte_pci_device *pci_dev)
        }
        if (found)
                TAILQ_REMOVE(&priv_list, priv, next);
-       pthread_mutex_unlock(&priv_list_lock);
+       rte_thread_mutex_unlock(&priv_list_lock);
        if (found) {
                if (priv->configured)
                        mlx5_vdpa_dev_close(priv->vid);
@@ -790,7 +790,7 @@ mlx5_vdpa_pci_remove(struct rte_pci_device *pci_dev)
                if (priv->vdev)
                        rte_vdpa_unregister_device(priv->vdev);
                mlx5_glue->close_device(priv->ctx);
-               pthread_mutex_destroy(&priv->vq_config_lock);
+               rte_thread_mutex_destroy(&priv->vq_config_lock);
                rte_free(priv);
        }
        return 0;
diff --git a/drivers/vdpa/mlx5/mlx5_vdpa.h b/drivers/vdpa/mlx5/mlx5_vdpa.h
index 722c72b65e..e44125ec3f 100644
--- a/drivers/vdpa/mlx5/mlx5_vdpa.h
+++ b/drivers/vdpa/mlx5/mlx5_vdpa.h
@@ -119,9 +119,9 @@ enum {
 struct mlx5_vdpa_priv {
        TAILQ_ENTRY(mlx5_vdpa_priv) next;
        uint8_t configured;
-       pthread_mutex_t vq_config_lock;
+       rte_thread_mutex vq_config_lock;
        uint64_t no_traffic_counter;
-       pthread_t timer_tid;
+       rte_thread_t timer_tid;
        int event_mode;
        int event_core; /* Event thread cpu affinity core. */
        uint32_t event_us;
diff --git a/drivers/vdpa/mlx5/mlx5_vdpa_event.c 
b/drivers/vdpa/mlx5/mlx5_vdpa_event.c
index 88f6a4256d..992dcd9702 100644
--- a/drivers/vdpa/mlx5/mlx5_vdpa_event.c
+++ b/drivers/vdpa/mlx5/mlx5_vdpa_event.c
@@ -285,7 +285,7 @@ mlx5_vdpa_event_handle(void *arg)
        case MLX5_VDPA_EVENT_MODE_FIXED_TIMER:
                priv->timer_delay_us = priv->event_us;
                while (1) {
-                       pthread_mutex_lock(&priv->vq_config_lock);
+                       rte_thread_mutex_lock(&priv->vq_config_lock);
                        max = mlx5_vdpa_queues_complete(priv);
                        if (max == 0 && priv->no_traffic_counter++ >=
                            priv->no_traffic_max) {
@@ -293,10 +293,10 @@ mlx5_vdpa_event_handle(void *arg)
                                        priv->vdev->device->name);
                                mlx5_vdpa_arm_all_cqs(priv);
                                do {
-                                       pthread_mutex_unlock
+                                       rte_thread_mutex_unlock
                                                        (&priv->vq_config_lock);
                                        cq = mlx5_vdpa_event_wait(priv);
-                                       pthread_mutex_lock
+                                       rte_thread_mutex_lock
                                                        (&priv->vq_config_lock);
                                        if (cq == NULL ||
                                               mlx5_vdpa_queue_complete(cq) > 0)
@@ -307,7 +307,7 @@ mlx5_vdpa_event_handle(void *arg)
                        } else if (max != 0) {
                                priv->no_traffic_counter = 0;
                        }
-                       pthread_mutex_unlock(&priv->vq_config_lock);
+                       rte_thread_mutex_unlock(&priv->vq_config_lock);
                        mlx5_vdpa_timer_sleep(priv, max);
                }
                return NULL;
@@ -315,10 +315,10 @@ mlx5_vdpa_event_handle(void *arg)
                do {
                        cq = mlx5_vdpa_event_wait(priv);
                        if (cq != NULL) {
-                               pthread_mutex_lock(&priv->vq_config_lock);
+                               rte_thread_mutex_lock(&priv->vq_config_lock);
                                if (mlx5_vdpa_queue_complete(cq) > 0)
                                        mlx5_vdpa_cq_arm(priv, cq);
-                               pthread_mutex_unlock(&priv->vq_config_lock);
+                               rte_thread_mutex_unlock(&priv->vq_config_lock);
                        }
                } while (1);
                return NULL;
@@ -340,7 +340,7 @@ mlx5_vdpa_err_interrupt_handler(void *cb_arg __rte_unused)
        struct mlx5_vdpa_virtq *virtq;
        uint64_t sec;
 
-       pthread_mutex_lock(&priv->vq_config_lock);
+       rte_thread_mutex_lock(&priv->vq_config_lock);
        while (mlx5_glue->devx_get_event(priv->err_chnl, &out.event_resp,
                                         sizeof(out.buf)) >=
                                       (ssize_t)sizeof(out.event_resp.cookie)) {
@@ -386,7 +386,7 @@ mlx5_vdpa_err_interrupt_handler(void *cb_arg __rte_unused)
                        virtq->err_time[i - 1] = virtq->err_time[i];
                virtq->err_time[RTE_DIM(virtq->err_time) - 1] = rte_rdtsc();
        }
-       pthread_mutex_unlock(&priv->vq_config_lock);
+       rte_thread_mutex_unlock(&priv->vq_config_lock);
 #endif
 }
 
@@ -473,28 +473,23 @@ mlx5_vdpa_cqe_event_setup(struct mlx5_vdpa_priv *priv)
 {
        int ret;
        rte_cpuset_t cpuset;
-       pthread_attr_t attr;
+       rte_thread_attr_t attr;
        char name[16];
-       const struct sched_param sp = {
-               .sched_priority = sched_get_priority_max(SCHED_RR),
-       };
 
        if (!priv->eventc)
                /* All virtqs are in poll mode. */
                return 0;
-       pthread_attr_init(&attr);
-       ret = pthread_attr_setschedpolicy(&attr, SCHED_RR);
-       if (ret) {
-               DRV_LOG(ERR, "Failed to set thread sched policy = RR.");
-               return -1;
-       }
-       ret = pthread_attr_setschedparam(&attr, &sp);
+
+       rte_thread_attr_init(&attr);
+       ret = rte_thread_attr_set_priority(&attr,
+                       RTE_THREAD_PRIORITY_REALTIME_CRITICAL);
        if (ret) {
                DRV_LOG(ERR, "Failed to set thread priority.");
                return -1;
        }
-       ret = pthread_create(&priv->timer_tid, &attr, mlx5_vdpa_event_handle,
-                            (void *)priv);
+
+       ret = rte_thread_create(&priv->timer_tid, &attr, mlx5_vdpa_event_handle,
+                       (void *)priv);
        if (ret) {
                DRV_LOG(ERR, "Failed to create timer thread.");
                return -1;
@@ -504,13 +499,13 @@ mlx5_vdpa_cqe_event_setup(struct mlx5_vdpa_priv *priv)
                CPU_SET(priv->event_core, &cpuset);
        else
                cpuset = rte_lcore_cpuset(rte_get_main_lcore());
-       ret = pthread_setaffinity_np(priv->timer_tid, sizeof(cpuset), &cpuset);
+       ret = rte_thread_set_affinity_by_id(priv->timer_tid, &cpuset);
        if (ret) {
                DRV_LOG(ERR, "Failed to set thread affinity.");
                return -1;
        }
        snprintf(name, sizeof(name), "vDPA-mlx5-%d", priv->vid);
-       ret = rte_thread_setname(priv->timer_tid, name);
+       ret = rte_thread_name_set(priv->timer_tid, name);
        if (ret)
                DRV_LOG(DEBUG, "Cannot set timer thread name.");
        return 0;
@@ -519,13 +514,11 @@ mlx5_vdpa_cqe_event_setup(struct mlx5_vdpa_priv *priv)
 void
 mlx5_vdpa_cqe_event_unset(struct mlx5_vdpa_priv *priv)
 {
-       void *status;
-
-       if (priv->timer_tid) {
-               pthread_cancel(priv->timer_tid);
-               pthread_join(priv->timer_tid, &status);
+       if (priv->timer_tid.opaque_id) {
+               pthread_cancel(priv->timer_tid.opaque_id);
+               rte_thread_join(priv->timer_tid, NULL);
        }
-       priv->timer_tid = 0;
+       priv->timer_tid.opaque_id = 0;
 }
 
 void
diff --git a/examples/kni/main.c b/examples/kni/main.c
index beabb3c848..601c9838a2 100644
--- a/examples/kni/main.c
+++ b/examples/kni/main.c
@@ -16,6 +16,7 @@
 #include <linux/if.h>
 #include <linux/if_tun.h>
 #include <fcntl.h>
+#include <pthread.h>
 #include <sys/ioctl.h>
 #include <unistd.h>
 #include <signal.h>
diff --git a/examples/performance-thread/pthread_shim/pthread_shim.h 
b/examples/performance-thread/pthread_shim/pthread_shim.h
index e90fb15fc1..9979cc6cdb 100644
--- a/examples/performance-thread/pthread_shim/pthread_shim.h
+++ b/examples/performance-thread/pthread_shim/pthread_shim.h
@@ -6,6 +6,7 @@
 #define _PTHREAD_SHIM_H_
 
 #include <rte_lcore.h>
+#include <pthread.h>
 
 /*
  * This pthread shim is an example that demonstrates how legacy code
-- 
2.31.0.vfs.0.1

Reply via email to