get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/94538/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 94538,
    "url": "https://patches.dpdk.org/api/patches/94538/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/1624067878-2130-4-git-send-email-navasile@linux.microsoft.com/",
    "project": {
        "id": 1,
        "url": "https://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<1624067878-2130-4-git-send-email-navasile@linux.microsoft.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1624067878-2130-4-git-send-email-navasile@linux.microsoft.com",
    "date": "2021-06-19T01:57:55",
    "name": "[v2,3/6] Enable the new EAL thread API in app, drivers and examples",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "78d3797f79f34e6828ec4fbb139e6e3219e67e48",
    "submitter": {
        "id": 1668,
        "url": "https://patches.dpdk.org/api/people/1668/?format=api",
        "name": "Narcisa Ana Maria Vasile",
        "email": "navasile@linux.microsoft.com"
    },
    "delegate": {
        "id": 24651,
        "url": "https://patches.dpdk.org/api/users/24651/?format=api",
        "username": "dmarchand",
        "first_name": "David",
        "last_name": "Marchand",
        "email": "david.marchand@redhat.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/1624067878-2130-4-git-send-email-navasile@linux.microsoft.com/mbox/",
    "series": [
        {
            "id": 17404,
            "url": "https://patches.dpdk.org/api/series/17404/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=17404",
            "date": "2021-06-19T01:57:54",
            "name": "Enable the internal EAL thread API",
            "version": 2,
            "mbox": "https://patches.dpdk.org/series/17404/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/94538/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/94538/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 9A890A0A0C;\n\tSat, 19 Jun 2021 03:58:37 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 361D941141;\n\tSat, 19 Jun 2021 03:58:17 +0200 (CEST)",
            "from linux.microsoft.com (linux.microsoft.com [13.77.154.182])\n by mails.dpdk.org (Postfix) with ESMTP id 4B607410DE\n for <dev@dpdk.org>; Sat, 19 Jun 2021 03:58:11 +0200 (CEST)",
            "by linux.microsoft.com (Postfix, from userid 1059)\n id 7525120B83DE; Fri, 18 Jun 2021 18:58:10 -0700 (PDT)"
        ],
        "DKIM-Filter": "OpenDKIM Filter v2.11.0 linux.microsoft.com 7525120B83DE",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com;\n s=default; t=1624067890;\n bh=vvGryTJ15SSOGbD+e0Ne15D2/KpW2vvnzgaXSPWSXsg=;\n h=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n b=MhWicto/yYq4c0J5R8z/0L5I1Mg8/AUSYaBQO6lGMD9SdQKgkSMVVjh1Qoi6ISSoW\n fxMQiNUKVdEtpCO35qQDeoZKmBBhtJnFAfIf8DgVbxl3Q8mjsVqoGbCmgxajxFmAIb\n JGteb8hBXvpk0Gr589UMmTSSbBr5ftONZZxyu+fs=",
        "From": "Narcisa Ana Maria Vasile <navasile@linux.microsoft.com>",
        "To": "dev@dpdk.org, thomas@monjalon.net, dmitry.kozliuk@gmail.com,\n khot@microsoft.com, navasile@microsoft.com, dmitrym@microsoft.com,\n roretzla@microsoft.com, talshn@nvidia.com, ocardona@microsoft.com",
        "Cc": "bruce.richardson@intel.com, david.marchand@redhat.com,\n pallavi.kadam@intel.com",
        "Date": "Fri, 18 Jun 2021 18:57:55 -0700",
        "Message-Id": "<1624067878-2130-4-git-send-email-navasile@linux.microsoft.com>",
        "X-Mailer": "git-send-email 1.8.3.1",
        "In-Reply-To": "<1624067878-2130-1-git-send-email-navasile@linux.microsoft.com>",
        "References": "<1624053294-31255-1-git-send-email-navasile@linux.microsoft.com>\n <1624067878-2130-1-git-send-email-navasile@linux.microsoft.com>",
        "Subject": "[dpdk-dev] [PATCH v2 3/6] Enable the new EAL thread API in app,\n drivers and examples",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "From: Narcisa Vasile <navasile@microsoft.com>\n\nRename pthread* with the new rte_thread* API.\n\nDepends-on: series-17402 (\"eal: Add EAL API for threading\")\n\nSigned-off-by: Narcisa Vasile <navasile@microsoft.com>\n---\n app/test/process.h                            |  8 +--\n app/test/test_lcores.c                        | 18 +++----\n app/test/test_link_bonding.c                  | 14 ++---\n app/test/test_lpm_perf.c                      | 12 ++---\n drivers/bus/dpaa/base/qbman/bman_driver.c     |  5 +-\n drivers/bus/dpaa/base/qbman/dpaa_sys.c        | 14 ++---\n drivers/bus/dpaa/base/qbman/process.c         |  6 +--\n drivers/bus/dpaa/dpaa_bus.c                   | 14 ++---\n drivers/bus/fslmc/portal/dpaa2_hw_dpio.c      | 19 ++++---\n drivers/common/dpaax/compat.h                 |  2 +-\n drivers/common/mlx5/windows/mlx5_common_os.h  |  1 +\n drivers/compress/mlx5/mlx5_compress.c         | 10 ++--\n drivers/event/dlb2/dlb2.c                     |  2 +-\n drivers/event/dlb2/pf/base/dlb2_osdep.h       |  7 ++-\n drivers/mempool/dpaa/dpaa_mempool.c           |  2 +-\n drivers/net/af_xdp/rte_eth_af_xdp.c           | 18 +++----\n drivers/net/ark/ark_ethdev.c                  |  4 +-\n drivers/net/ark/ark_pktgen.c                  |  4 +-\n drivers/net/atlantic/atl_ethdev.c             |  4 +-\n drivers/net/atlantic/atl_types.h              |  4 +-\n .../net/atlantic/hw_atl/hw_atl_utils_fw2x.c   | 26 ++++-----\n drivers/net/axgbe/axgbe_common.h              |  2 +-\n drivers/net/axgbe/axgbe_dev.c                 |  8 +--\n drivers/net/axgbe/axgbe_ethdev.c              |  8 +--\n drivers/net/axgbe/axgbe_ethdev.h              |  8 +--\n drivers/net/axgbe/axgbe_i2c.c                 |  4 +-\n drivers/net/axgbe/axgbe_mdio.c                |  8 +--\n drivers/net/axgbe/axgbe_phy_impl.c            |  6 +--\n drivers/net/bnxt/bnxt.h                       | 16 +++---\n drivers/net/bnxt/bnxt_cpr.c                   |  4 +-\n drivers/net/bnxt/bnxt_ethdev.c                | 54 +++++++++----------\n drivers/net/bnxt/bnxt_irq.c                   |  8 +--\n drivers/net/bnxt/bnxt_reps.c                  | 10 ++--\n drivers/net/bnxt/tf_ulp/bnxt_ulp.c            | 34 ++++++------\n drivers/net/bnxt/tf_ulp/bnxt_ulp.h            |  4 +-\n drivers/net/bnxt/tf_ulp/ulp_fc_mgr.c          | 28 +++++-----\n drivers/net/bnxt/tf_ulp/ulp_fc_mgr.h          |  2 +-\n drivers/net/dpaa/dpaa_ethdev.c                |  2 +-\n drivers/net/dpaa/dpaa_rxtx.c                  |  2 +-\n drivers/net/ena/base/ena_plat_dpdk.h          | 15 +++---\n drivers/net/enic/enic.h                       |  2 +-\n drivers/net/ice/ice_dcf_parent.c              |  8 +--\n drivers/net/ixgbe/ixgbe_ethdev.c              |  6 +--\n drivers/net/ixgbe/ixgbe_ethdev.h              |  2 +-\n drivers/net/mlx5/linux/mlx5_os.c              |  2 +-\n drivers/net/mlx5/mlx5.c                       | 20 +++----\n drivers/net/mlx5/mlx5.h                       |  2 +-\n drivers/net/mlx5/mlx5_txpp.c                  |  8 +--\n drivers/net/mlx5/windows/mlx5_flow_os.c       | 10 ++--\n drivers/net/mlx5/windows/mlx5_os.c            |  2 +-\n drivers/net/qede/base/bcm_osal.h              |  8 +--\n drivers/net/vhost/rte_eth_vhost.c             | 24 ++++-----\n .../net/virtio/virtio_user/virtio_user_dev.c  | 30 +++++------\n .../net/virtio/virtio_user/virtio_user_dev.h  |  2 +-\n drivers/vdpa/ifc/ifcvf_vdpa.c                 | 49 ++++++++---------\n drivers/vdpa/mlx5/mlx5_vdpa.c                 | 24 ++++-----\n drivers/vdpa/mlx5/mlx5_vdpa.h                 |  4 +-\n drivers/vdpa/mlx5/mlx5_vdpa_event.c           | 51 ++++++++----------\n examples/kni/main.c                           |  1 +\n .../pthread_shim/pthread_shim.h               |  1 +\n 60 files changed, 334 insertions(+), 339 deletions(-)",
    "diff": "diff --git a/app/test/process.h b/app/test/process.h\nindex a09a088477..9e4be17bad 100644\n--- a/app/test/process.h\n+++ b/app/test/process.h\n@@ -26,7 +26,7 @@\n \n #ifdef RTE_LIB_PDUMP\n #ifdef RTE_NET_RING\n-#include <pthread.h>\n+#include <rte_thread.h>\n extern void *send_pkts(void *empty);\n extern uint16_t flag_for_send_pkts;\n #endif\n@@ -47,7 +47,7 @@ process_dup(const char *const argv[], int numargs, const char *env_value)\n \tchar path[32];\n #ifdef RTE_LIB_PDUMP\n #ifdef RTE_NET_RING\n-\tpthread_t thread;\n+\trte_thread_t thread;\n \tint rc;\n #endif\n #endif\n@@ -128,7 +128,7 @@ process_dup(const char *const argv[], int numargs, const char *env_value)\n #ifdef RTE_LIB_PDUMP\n #ifdef RTE_NET_RING\n \tif ((strcmp(env_value, \"run_pdump_server_tests\") == 0)) {\n-\t\trc = pthread_create(&thread, NULL, &send_pkts, NULL);\n+\t\trc = rte_thread_create(&thread, NULL, &send_pkts, NULL);\n \t\tif (rc != 0) {\n \t\t\trte_panic(\"Cannot start send pkts thread: %s\\n\",\n \t\t\t\t  strerror(rc));\n@@ -143,7 +143,7 @@ process_dup(const char *const argv[], int numargs, const char *env_value)\n #ifdef RTE_NET_RING\n \tif ((strcmp(env_value, \"run_pdump_server_tests\") == 0)) {\n \t\tflag_for_send_pkts = 0;\n-\t\tpthread_join(thread, NULL);\n+\t\trte_thread_join(thread, NULL);\n \t}\n #endif\n #endif\ndiff --git a/app/test/test_lcores.c b/app/test/test_lcores.c\nindex 19a7ab9fce..accdd858a6 100644\n--- a/app/test/test_lcores.c\n+++ b/app/test/test_lcores.c\n@@ -2,7 +2,7 @@\n  * Copyright (c) 2020 Red Hat, Inc.\n  */\n \n-#include <pthread.h>\n+#include <rte_thread.h>\n #include <string.h>\n \n #include <rte_common.h>\n@@ -14,7 +14,7 @@\n struct thread_context {\n \tenum { INIT, ERROR, DONE } state;\n \tbool lcore_id_any;\n-\tpthread_t id;\n+\trte_thread_t id;\n \tunsigned int *registered_count;\n };\n \n@@ -77,7 +77,7 @@ test_non_eal_lcores(unsigned int eal_threads_count)\n \t\tt->state = INIT;\n \t\tt->registered_count = &registered_count;\n \t\tt->lcore_id_any = false;\n-\t\tif (pthread_create(&t->id, NULL, thread_loop, t) != 0)\n+\t\tif (rte_thread_create(&t->id, NULL, thread_loop, t) != 0)\n \t\t\tbreak;\n \t\tnon_eal_threads_count++;\n \t}\n@@ -96,7 +96,7 @@ test_non_eal_lcores(unsigned int eal_threads_count)\n \tt->state = INIT;\n \tt->registered_count = &registered_count;\n \tt->lcore_id_any = true;\n-\tif (pthread_create(&t->id, NULL, thread_loop, t) == 0) {\n+\tif (rte_thread_create(&t->id, NULL, thread_loop, t) == 0) {\n \t\tnon_eal_threads_count++;\n \t\tprintf(\"non-EAL threads count: %u\\n\", non_eal_threads_count);\n \t\twhile (__atomic_load_n(&registered_count, __ATOMIC_ACQUIRE) !=\n@@ -110,7 +110,7 @@ test_non_eal_lcores(unsigned int eal_threads_count)\n \tret = 0;\n \tfor (i = 0; i < non_eal_threads_count; i++) {\n \t\tt = &thread_contexts[i];\n-\t\tpthread_join(t->id, NULL);\n+\t\trte_thread_join(t->id, NULL);\n \t\tif (t->state != DONE)\n \t\t\tret = -1;\n \t}\n@@ -262,7 +262,7 @@ test_non_eal_lcores_callback(unsigned int eal_threads_count)\n \tt->state = INIT;\n \tt->registered_count = &registered_count;\n \tt->lcore_id_any = false;\n-\tif (pthread_create(&t->id, NULL, thread_loop, t) != 0)\n+\tif (rte_thread_create(&t->id, NULL, thread_loop, t) != 0)\n \t\tgoto cleanup_threads;\n \tnon_eal_threads_count++;\n \twhile (__atomic_load_n(&registered_count, __ATOMIC_ACQUIRE) !=\n@@ -285,7 +285,7 @@ test_non_eal_lcores_callback(unsigned int eal_threads_count)\n \tt->state = INIT;\n \tt->registered_count = &registered_count;\n \tt->lcore_id_any = true;\n-\tif (pthread_create(&t->id, NULL, thread_loop, t) != 0)\n+\tif (rte_thread_create(&t->id, NULL, thread_loop, t) != 0)\n \t\tgoto cleanup_threads;\n \tnon_eal_threads_count++;\n \twhile (__atomic_load_n(&registered_count, __ATOMIC_ACQUIRE) !=\n@@ -309,7 +309,7 @@ test_non_eal_lcores_callback(unsigned int eal_threads_count)\n \tret = 0;\n \tfor (i = 0; i < non_eal_threads_count; i++) {\n \t\tt = &thread_contexts[i];\n-\t\tpthread_join(t->id, NULL);\n+\t\trte_thread_join(t->id, NULL);\n \t\tif (t->state != DONE)\n \t\t\tret = -1;\n \t}\n@@ -330,7 +330,7 @@ test_non_eal_lcores_callback(unsigned int eal_threads_count)\n \t__atomic_store_n(&registered_count, 0, __ATOMIC_RELEASE);\n \tfor (i = 0; i < non_eal_threads_count; i++) {\n \t\tt = &thread_contexts[i];\n-\t\tpthread_join(t->id, NULL);\n+\t\trte_thread_join(t->id, NULL);\n \t}\n error:\n \tif (handle[1] != NULL)\ndiff --git a/app/test/test_link_bonding.c b/app/test/test_link_bonding.c\nindex 8a5c8310a8..a22189a656 100644\n--- a/app/test/test_link_bonding.c\n+++ b/app/test/test_link_bonding.c\n@@ -3,6 +3,7 @@\n  */\n \n #include \"unistd.h\"\n+#include <pthread.h>\n #include <string.h>\n #include <stdarg.h>\n #include <stdio.h>\n@@ -203,7 +204,7 @@ configure_ethdev(uint16_t port_id, uint8_t start, uint8_t en_isr)\n static int slaves_initialized;\n static int mac_slaves_initialized;\n \n-static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;\n+RTE_STATIC_MUTEX(mutex)\n static pthread_cond_t cvar = PTHREAD_COND_INITIALIZER;\n \n \n@@ -1191,11 +1192,11 @@ test_bonding_lsc_event_callback(uint16_t port_id __rte_unused,\n \t\tvoid *param __rte_unused,\n \t\tvoid *ret_param __rte_unused)\n {\n-\tpthread_mutex_lock(&mutex);\n+\trte_thread_mutex_lock(&mutex);\n \ttest_lsc_interrupt_count++;\n \n \tpthread_cond_signal(&cvar);\n-\tpthread_mutex_unlock(&mutex);\n+\trte_thread_mutex_unlock(&mutex);\n \n \treturn 0;\n }\n@@ -1220,11 +1221,12 @@ lsc_timeout(int wait_us)\n \t\tts.tv_sec += 1;\n \t}\n \n-\tpthread_mutex_lock(&mutex);\n+\trte_thread_mutex_lock(&mutex);\n \tif (test_lsc_interrupt_count < 1)\n-\t\tretval = pthread_cond_timedwait(&cvar, &mutex, &ts);\n+\t\tretval = pthread_cond_timedwait(&cvar,\n+\t\t\t\t(pthread_mutex_t *)mutex.mutex_id, &ts);\n \n-\tpthread_mutex_unlock(&mutex);\n+\trte_thread_mutex_unlock(&mutex);\n \n \tif (retval == 0 && test_lsc_interrupt_count < 1)\n \t\treturn -1;\ndiff --git a/app/test/test_lpm_perf.c b/app/test/test_lpm_perf.c\nindex 2bed00d064..e4cfcdb504 100644\n--- a/app/test/test_lpm_perf.c\n+++ b/app/test/test_lpm_perf.c\n@@ -25,7 +25,7 @@ static volatile uint32_t thr_id;\n static uint64_t gwrite_cycles;\n static uint32_t num_writers;\n /* LPM APIs are not thread safe, use mutex to provide thread safety */\n-static pthread_mutex_t lpm_mutex = PTHREAD_MUTEX_INITIALIZER;\n+RTE_STATIC_MUTEX(lpm_mutex)\n \n /* Report quiescent state interval every 1024 lookups. Larger critical\n  * sections in reader will result in writer polling multiple times.\n@@ -443,7 +443,7 @@ test_lpm_rcu_qsbr_writer(void *arg)\n \t\t/* Add all the entries */\n \t\tfor (j = si; j < ei; j++) {\n \t\t\tif (num_writers > 1)\n-\t\t\t\tpthread_mutex_lock(&lpm_mutex);\n+\t\t\t\trte_thread_mutex_lock(&lpm_mutex);\n \t\t\tif (rte_lpm_add(lpm, large_ldepth_route_table[j].ip,\n \t\t\t\t\tlarge_ldepth_route_table[j].depth,\n \t\t\t\t\tnext_hop_add) != 0) {\n@@ -452,13 +452,13 @@ test_lpm_rcu_qsbr_writer(void *arg)\n \t\t\t\tgoto error;\n \t\t\t}\n \t\t\tif (num_writers > 1)\n-\t\t\t\tpthread_mutex_unlock(&lpm_mutex);\n+\t\t\t\trte_thread_mutex_unlock(&lpm_mutex);\n \t\t}\n \n \t\t/* Delete all the entries */\n \t\tfor (j = si; j < ei; j++) {\n \t\t\tif (num_writers > 1)\n-\t\t\t\tpthread_mutex_lock(&lpm_mutex);\n+\t\t\t\trte_thread_mutex_lock(&lpm_mutex);\n \t\t\tif (rte_lpm_delete(lpm, large_ldepth_route_table[j].ip,\n \t\t\t\tlarge_ldepth_route_table[j].depth) != 0) {\n \t\t\t\tprintf(\"Failed to delete iteration %d, route# %d\\n\",\n@@ -466,7 +466,7 @@ test_lpm_rcu_qsbr_writer(void *arg)\n \t\t\t\tgoto error;\n \t\t\t}\n \t\t\tif (num_writers > 1)\n-\t\t\t\tpthread_mutex_unlock(&lpm_mutex);\n+\t\t\t\trte_thread_mutex_unlock(&lpm_mutex);\n \t\t}\n \t}\n \n@@ -478,7 +478,7 @@ test_lpm_rcu_qsbr_writer(void *arg)\n \n error:\n \tif (num_writers > 1)\n-\t\tpthread_mutex_unlock(&lpm_mutex);\n+\t\trte_thread_mutex_unlock(&lpm_mutex);\n \treturn -1;\n }\n \ndiff --git a/drivers/bus/dpaa/base/qbman/bman_driver.c b/drivers/bus/dpaa/base/qbman/bman_driver.c\nindex ee35e03da1..25be077c6f 100644\n--- a/drivers/bus/dpaa/base/qbman/bman_driver.c\n+++ b/drivers/bus/dpaa/base/qbman/bman_driver.c\n@@ -38,11 +38,10 @@ static int fsl_bman_portal_init(uint32_t idx, int is_shared)\n \tstruct dpaa_ioctl_irq_map irq_map;\n \n \t/* Verify the thread's cpu-affinity */\n-\tret = pthread_getaffinity_np(pthread_self(), sizeof(cpu_set_t),\n-\t\t\t\t     &cpuset);\n+\tret = rte_thread_set_affinity_by_id(rte_thread_self(), &cpuset);\n \tif (ret) {\n \t\terrno = ret;\n-\t\terr(0, \"pthread_getaffinity_np()\");\n+\t\terr(0, \"rte_thread_set_affinity_by_id()\");\n \t\treturn ret;\n \t}\n \tpcfg.cpu = -1;\ndiff --git a/drivers/bus/dpaa/base/qbman/dpaa_sys.c b/drivers/bus/dpaa/base/qbman/dpaa_sys.c\nindex 9d6bfd40a2..14aeb5e07d 100644\n--- a/drivers/bus/dpaa/base/qbman/dpaa_sys.c\n+++ b/drivers/bus/dpaa/base/qbman/dpaa_sys.c\n@@ -18,16 +18,16 @@ struct process_interrupt {\n };\n \n static COMPAT_LIST_HEAD(process_irq_list);\n-static pthread_mutex_t process_irq_lock = PTHREAD_MUTEX_INITIALIZER;\n+RTE_STATIC_MUTEX(process_irq_lock)\n \n static void process_interrupt_install(struct process_interrupt *irq)\n {\n \tint ret;\n \t/* Add the irq to the end of the list */\n-\tret = pthread_mutex_lock(&process_irq_lock);\n+\tret = rte_thread_mutex_lock(&process_irq_lock);\n \tassert(!ret);\n \tlist_add_tail(&irq->node, &process_irq_list);\n-\tret = pthread_mutex_unlock(&process_irq_lock);\n+\tret = rte_thread_mutex_unlock(&process_irq_lock);\n \tassert(!ret);\n }\n \n@@ -35,10 +35,10 @@ static void process_interrupt_remove(struct process_interrupt *irq)\n {\n \tint ret;\n \n-\tret = pthread_mutex_lock(&process_irq_lock);\n+\tret = rte_thread_mutex_lock(&process_irq_lock);\n \tassert(!ret);\n \tlist_del(&irq->node);\n-\tret = pthread_mutex_unlock(&process_irq_lock);\n+\tret = rte_thread_mutex_unlock(&process_irq_lock);\n \tassert(!ret);\n }\n \n@@ -47,14 +47,14 @@ static struct process_interrupt *process_interrupt_find(int irq_num)\n \tint ret;\n \tstruct process_interrupt *i = NULL;\n \n-\tret = pthread_mutex_lock(&process_irq_lock);\n+\tret = rte_thread_mutex_lock(&process_irq_lock);\n \tassert(!ret);\n \tlist_for_each_entry(i, &process_irq_list, node) {\n \t\tif (i->irq == irq_num)\n \t\t\tgoto done;\n \t}\n done:\n-\tret = pthread_mutex_unlock(&process_irq_lock);\n+\tret = rte_thread_mutex_unlock(&process_irq_lock);\n \tassert(!ret);\n \treturn i;\n }\ndiff --git a/drivers/bus/dpaa/base/qbman/process.c b/drivers/bus/dpaa/base/qbman/process.c\nindex 9bc92681cd..da157b8426 100644\n--- a/drivers/bus/dpaa/base/qbman/process.c\n+++ b/drivers/bus/dpaa/base/qbman/process.c\n@@ -21,7 +21,7 @@\n  * what the lock is for.\n  */\n static int fd = -1;\n-static pthread_mutex_t fd_init_lock = PTHREAD_MUTEX_INITIALIZER;\n+RTE_STATIC_MUTEX(fd_init_lock)\n \n static int check_fd(void)\n {\n@@ -29,12 +29,12 @@ static int check_fd(void)\n \n \tif (fd >= 0)\n \t\treturn 0;\n-\tret = pthread_mutex_lock(&fd_init_lock);\n+\tret = rte_thread_mutex_lock(&fd_init_lock);\n \tassert(!ret);\n \t/* check again with the lock held */\n \tif (fd < 0)\n \t\tfd = open(PROCESS_PATH, O_RDWR);\n-\tret = pthread_mutex_unlock(&fd_init_lock);\n+\tret = rte_thread_mutex_unlock(&fd_init_lock);\n \tassert(!ret);\n \treturn (fd >= 0) ? 0 : -ENODEV;\n }\ndiff --git a/drivers/bus/dpaa/dpaa_bus.c b/drivers/bus/dpaa/dpaa_bus.c\nindex 2f48d4036b..bd83cab577 100644\n--- a/drivers/bus/dpaa/dpaa_bus.c\n+++ b/drivers/bus/dpaa/dpaa_bus.c\n@@ -10,7 +10,7 @@\n #include <limits.h>\n #include <sched.h>\n #include <signal.h>\n-#include <pthread.h>\n+#include <rte_thread.h>\n #include <sys/types.h>\n #include <sys/syscall.h>\n #include <sys/eventfd.h>\n@@ -48,7 +48,7 @@ static struct rte_dpaa_bus rte_dpaa_bus;\n struct netcfg_info *dpaa_netcfg;\n \n /* define a variable to hold the portal_key, once created.*/\n-static pthread_key_t dpaa_portal_key;\n+static rte_thread_key dpaa_portal_key;\n \n unsigned int dpaa_svr_family;\n \n@@ -316,10 +316,10 @@ int rte_dpaa_portal_init(void *arg)\n \tDPAA_PER_LCORE_PORTAL->bman_idx = bman_get_portal_index();\n \tDPAA_PER_LCORE_PORTAL->tid = syscall(SYS_gettid);\n \n-\tret = pthread_setspecific(dpaa_portal_key,\n+\tret = rte_thread_value_set(dpaa_portal_key,\n \t\t\t\t  (void *)DPAA_PER_LCORE_PORTAL);\n \tif (ret) {\n-\t\tDPAA_BUS_LOG(ERR, \"pthread_setspecific failed on core %u\"\n+\t\tDPAA_BUS_LOG(ERR, \"rte_thread_value_set failed on core %u\"\n \t\t\t     \" (lcore=%u) with ret: %d\", cpu, lcore, ret);\n \t\tdpaa_portal_finish(NULL);\n \n@@ -377,7 +377,7 @@ dpaa_portal_finish(void *arg)\n \tbman_thread_finish();\n \tqman_thread_finish();\n \n-\tpthread_setspecific(dpaa_portal_key, NULL);\n+\trte_thread_value_set(dpaa_portal_key, NULL);\n \n \trte_free(dpaa_io_portal);\n \tdpaa_io_portal = NULL;\n@@ -453,9 +453,9 @@ rte_dpaa_bus_scan(void)\n \t/* create the key, supplying a function that'll be invoked\n \t * when a portal affined thread will be deleted.\n \t */\n-\tret = pthread_key_create(&dpaa_portal_key, dpaa_portal_finish);\n+\tret = rte_thread_key_create(&dpaa_portal_key, dpaa_portal_finish);\n \tif (ret) {\n-\t\tDPAA_BUS_LOG(DEBUG, \"Unable to create pthread key. (%d)\", ret);\n+\t\tDPAA_BUS_LOG(DEBUG, \"Unable to create thread key. (%d)\", ret);\n \t\tdpaa_clean_device_list();\n \t\treturn ret;\n \t}\ndiff --git a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c\nindex c6f8312a1d..dffbdff666 100644\n--- a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c\n+++ b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c\n@@ -13,7 +13,7 @@\n #include <stdarg.h>\n #include <inttypes.h>\n #include <signal.h>\n-#include <pthread.h>\n+#include <rte_thread.h>\n #include <sys/types.h>\n #include <sys/queue.h>\n #include <sys/ioctl.h>\n@@ -59,7 +59,7 @@ uint8_t dpaa2_dqrr_size;\n uint8_t dpaa2_eqcr_size;\n \n /* Variable to hold the portal_key, once created.*/\n-static pthread_key_t dpaa2_portal_key;\n+static rte_thread_key dpaa2_portal_key;\n \n /*Stashing Macros default for LS208x*/\n static int dpaa2_core_cluster_base = 0x04;\n@@ -92,10 +92,9 @@ dpaa2_get_core_id(void)\n \trte_cpuset_t cpuset;\n \tint i, ret, cpu_id = -1;\n \n-\tret = pthread_getaffinity_np(pthread_self(), sizeof(cpu_set_t),\n-\t\t&cpuset);\n+\tret = rte_thread_get_affinity_by_id(rte_thread_self(), &cpuset);\n \tif (ret) {\n-\t\tDPAA2_BUS_ERR(\"pthread_getaffinity_np() failed\");\n+\t\tDPAA2_BUS_ERR(\"rte_thread_get_affinity_by_id() failed\");\n \t\treturn ret;\n \t}\n \n@@ -296,9 +295,9 @@ static struct dpaa2_dpio_dev *dpaa2_get_qbman_swp(void)\n \t\t}\n \t}\n \n-\tret = pthread_setspecific(dpaa2_portal_key, (void *)dpio_dev);\n+\tret = rte_thread_value_set(dpaa2_portal_key, (void *)dpio_dev);\n \tif (ret) {\n-\t\tDPAA2_BUS_ERR(\"pthread_setspecific failed with ret: %d\", ret);\n+\t\tDPAA2_BUS_ERR(\"rte_thread_value_set failed with ret: %d\", ret);\n \t\tdpaa2_put_qbman_swp(dpio_dev);\n \t\treturn NULL;\n \t}\n@@ -357,7 +356,7 @@ static void dpaa2_portal_finish(void *arg)\n \tdpaa2_put_qbman_swp(RTE_PER_LCORE(_dpaa2_io).dpio_dev);\n \tdpaa2_put_qbman_swp(RTE_PER_LCORE(_dpaa2_io).ethrx_dpio_dev);\n \n-\tpthread_setspecific(dpaa2_portal_key, NULL);\n+\trte_thread_value_set(dpaa2_portal_key, NULL);\n }\n \n static int\n@@ -515,10 +514,10 @@ dpaa2_create_dpio_device(int vdev_fd,\n \t\t/* create the key, supplying a function that'll be invoked\n \t\t * when a portal affined thread will be deleted.\n \t\t */\n-\t\tret = pthread_key_create(&dpaa2_portal_key,\n+\t\tret = rte_thread_key_create(&dpaa2_portal_key,\n \t\t\t\t\t dpaa2_portal_finish);\n \t\tif (ret) {\n-\t\t\tDPAA2_BUS_DEBUG(\"Unable to create pthread key (%d)\",\n+\t\t\tDPAA2_BUS_DEBUG(\"Unable to create thread key (%d)\",\n \t\t\t\t\tret);\n \t\t\tgoto err;\n \t\t}\ndiff --git a/drivers/common/dpaax/compat.h b/drivers/common/dpaax/compat.h\nindex 7166f8cceb..8d53ee4dfc 100644\n--- a/drivers/common/dpaax/compat.h\n+++ b/drivers/common/dpaax/compat.h\n@@ -16,7 +16,7 @@\n #include <stdio.h>\n #include <errno.h>\n #include <string.h>\n-#include <pthread.h>\n+#include <rte_thread.h>\n #include <linux/types.h>\n #include <stdbool.h>\n #include <ctype.h>\ndiff --git a/drivers/common/mlx5/windows/mlx5_common_os.h b/drivers/common/mlx5/windows/mlx5_common_os.h\nindex 3756e1959b..295ef872c0 100644\n--- a/drivers/common/mlx5/windows/mlx5_common_os.h\n+++ b/drivers/common/mlx5/windows/mlx5_common_os.h\n@@ -8,6 +8,7 @@\n #include <stdio.h>\n #include <sys/types.h>\n \n+#include <rte_windows.h>\n #include <rte_errno.h>\n \n #include \"mlx5_autoconf.h\"\ndiff --git a/drivers/compress/mlx5/mlx5_compress.c b/drivers/compress/mlx5/mlx5_compress.c\nindex 80c564f10b..8f4dbfdbc9 100644\n--- a/drivers/compress/mlx5/mlx5_compress.c\n+++ b/drivers/compress/mlx5/mlx5_compress.c\n@@ -72,7 +72,7 @@ struct mlx5_compress_qp {\n \n TAILQ_HEAD(mlx5_compress_privs, mlx5_compress_priv) mlx5_compress_priv_list =\n \t\t\t\tTAILQ_HEAD_INITIALIZER(mlx5_compress_priv_list);\n-static pthread_mutex_t priv_list_lock = PTHREAD_MUTEX_INITIALIZER;\n+RTE_STATIC_MUTEX(priv_list_lock)\n \n int mlx5_compress_logtype;\n \n@@ -804,9 +804,9 @@ mlx5_compress_pci_probe(struct rte_pci_driver *pci_drv,\n \t}\n \tpriv->mr_scache.reg_mr_cb = mlx5_common_verbs_reg_mr;\n \tpriv->mr_scache.dereg_mr_cb = mlx5_common_verbs_dereg_mr;\n-\tpthread_mutex_lock(&priv_list_lock);\n+\trte_thread_mutex_lock(&priv_list_lock);\n \tTAILQ_INSERT_TAIL(&mlx5_compress_priv_list, priv, next);\n-\tpthread_mutex_unlock(&priv_list_lock);\n+\trte_thread_mutex_unlock(&priv_list_lock);\n \treturn 0;\n }\n \n@@ -826,13 +826,13 @@ mlx5_compress_pci_remove(struct rte_pci_device *pdev)\n {\n \tstruct mlx5_compress_priv *priv = NULL;\n \n-\tpthread_mutex_lock(&priv_list_lock);\n+\trte_thread_mutex_lock(&priv_list_lock);\n \tTAILQ_FOREACH(priv, &mlx5_compress_priv_list, next)\n \t\tif (rte_pci_addr_cmp(&priv->pci_dev->addr, &pdev->addr) != 0)\n \t\t\tbreak;\n \tif (priv)\n \t\tTAILQ_REMOVE(&mlx5_compress_priv_list, priv, next);\n-\tpthread_mutex_unlock(&priv_list_lock);\n+\trte_thread_mutex_unlock(&priv_list_lock);\n \tif (priv) {\n \t\tmlx5_mr_release_cache(&priv->mr_scache);\n \t\tmlx5_compress_hw_global_release(priv);\ndiff --git a/drivers/event/dlb2/dlb2.c b/drivers/event/dlb2/dlb2.c\nindex eca183753f..bcbf379843 100644\n--- a/drivers/event/dlb2/dlb2.c\n+++ b/drivers/event/dlb2/dlb2.c\n@@ -5,7 +5,7 @@\n #include <assert.h>\n #include <errno.h>\n #include <nmmintrin.h>\n-#include <pthread.h>\n+#include <rte_thread.h>\n #include <stdint.h>\n #include <stdbool.h>\n #include <stdio.h>\ndiff --git a/drivers/event/dlb2/pf/base/dlb2_osdep.h b/drivers/event/dlb2/pf/base/dlb2_osdep.h\nindex cffe22f3c5..82e0c71734 100644\n--- a/drivers/event/dlb2/pf/base/dlb2_osdep.h\n+++ b/drivers/event/dlb2/pf/base/dlb2_osdep.h\n@@ -8,7 +8,7 @@\n #include <string.h>\n #include <time.h>\n #include <unistd.h>\n-#include <pthread.h>\n+#include <rte_thread.h>\n \n #include <rte_string_fns.h>\n #include <rte_cycles.h>\n@@ -194,14 +194,13 @@ static void *dlb2_complete_queue_map_unmap(void *__args)\n static inline void os_schedule_work(struct dlb2_hw *hw)\n {\n \tstruct dlb2_dev *dlb2_dev;\n-\tpthread_t complete_queue_map_unmap_thread;\n+\trte_thread_t complete_queue_map_unmap_thread;\n \tint ret;\n \n \tdlb2_dev = container_of(hw, struct dlb2_dev, hw);\n \n-\tret = rte_ctrl_thread_create(&complete_queue_map_unmap_thread,\n+\tret = rte_thread_ctrl_thread_create(&complete_queue_map_unmap_thread,\n \t\t\t\t     \"dlb_queue_unmap_waiter\",\n-\t\t\t\t     NULL,\n \t\t\t\t     dlb2_complete_queue_map_unmap,\n \t\t\t\t     dlb2_dev);\n \tif (ret)\ndiff --git a/drivers/mempool/dpaa/dpaa_mempool.c b/drivers/mempool/dpaa/dpaa_mempool.c\nindex f02056982c..34a1d2b28d 100644\n--- a/drivers/mempool/dpaa/dpaa_mempool.c\n+++ b/drivers/mempool/dpaa/dpaa_mempool.c\n@@ -11,7 +11,7 @@\n #include <limits.h>\n #include <sched.h>\n #include <signal.h>\n-#include <pthread.h>\n+#include <rte_thread.h>\n #include <sys/types.h>\n #include <sys/syscall.h>\n \ndiff --git a/drivers/net/af_xdp/rte_eth_af_xdp.c b/drivers/net/af_xdp/rte_eth_af_xdp.c\nindex eb5660a3dc..0f0837426e 100644\n--- a/drivers/net/af_xdp/rte_eth_af_xdp.c\n+++ b/drivers/net/af_xdp/rte_eth_af_xdp.c\n@@ -178,7 +178,7 @@ TAILQ_HEAD(internal_list_head, internal_list);\n static struct internal_list_head internal_list =\n \tTAILQ_HEAD_INITIALIZER(internal_list);\n \n-static pthread_mutex_t internal_list_lock = PTHREAD_MUTEX_INITIALIZER;\n+RTE_STATIC_MUTEX(internal_list_lock)\n \n #if defined(XDP_UMEM_UNALIGNED_CHUNK_FLAG)\n static inline int\n@@ -676,7 +676,7 @@ find_internal_resource(struct pmd_internals *port_int)\n \tif (port_int == NULL)\n \t\treturn NULL;\n \n-\tpthread_mutex_lock(&internal_list_lock);\n+\trte_thread_mutex_lock(&internal_list_lock);\n \n \tTAILQ_FOREACH(list, &internal_list, next) {\n \t\tstruct pmd_internals *list_int =\n@@ -687,7 +687,7 @@ find_internal_resource(struct pmd_internals *port_int)\n \t\t}\n \t}\n \n-\tpthread_mutex_unlock(&internal_list_lock);\n+\trte_thread_mutex_unlock(&internal_list_lock);\n \n \tif (!found)\n \t\treturn NULL;\n@@ -725,7 +725,7 @@ get_shared_umem(struct pkt_rx_queue *rxq, const char *ifname,\n \tif (mb_pool == NULL)\n \t\treturn ret;\n \n-\tpthread_mutex_lock(&internal_list_lock);\n+\trte_thread_mutex_lock(&internal_list_lock);\n \n \tTAILQ_FOREACH(list, &internal_list, next) {\n \t\tinternals = list->eth_dev->data->dev_private;\n@@ -751,7 +751,7 @@ get_shared_umem(struct pkt_rx_queue *rxq, const char *ifname,\n \t}\n \n out:\n-\tpthread_mutex_unlock(&internal_list_lock);\n+\trte_thread_mutex_unlock(&internal_list_lock);\n \n \treturn ret;\n }\n@@ -780,9 +780,9 @@ eth_dev_configure(struct rte_eth_dev *dev)\n \t\t\treturn -1;\n \n \t\tlist->eth_dev = dev;\n-\t\tpthread_mutex_lock(&internal_list_lock);\n+\t\trte_thread_mutex_lock(&internal_list_lock);\n \t\tTAILQ_INSERT_TAIL(&internal_list, list, next);\n-\t\tpthread_mutex_unlock(&internal_list_lock);\n+\t\trte_thread_mutex_unlock(&internal_list_lock);\n \t}\n \n \treturn 0;\n@@ -948,9 +948,9 @@ eth_dev_close(struct rte_eth_dev *dev)\n \t\t/* Remove ethdev from list used to track and share UMEMs */\n \t\tlist = find_internal_resource(internals);\n \t\tif (list) {\n-\t\t\tpthread_mutex_lock(&internal_list_lock);\n+\t\t\trte_thread_mutex_lock(&internal_list_lock);\n \t\t\tTAILQ_REMOVE(&internal_list, list, next);\n-\t\t\tpthread_mutex_unlock(&internal_list_lock);\n+\t\t\trte_thread_mutex_unlock(&internal_list_lock);\n \t\t\trte_free(list);\n \t\t}\n \t}\ndiff --git a/drivers/net/ark/ark_ethdev.c b/drivers/net/ark/ark_ethdev.c\nindex 377299b14c..51856f66d1 100644\n--- a/drivers/net/ark/ark_ethdev.c\n+++ b/drivers/net/ark/ark_ethdev.c\n@@ -563,12 +563,12 @@ eth_ark_dev_start(struct rte_eth_dev *dev)\n \t\tark_pktchkr_run(ark->pc);\n \n \tif (ark->start_pg && (dev->data->port_id == 0)) {\n-\t\tpthread_t thread;\n+\t\trte_thread_t thread;\n \n \t\t/* Delay packet generatpr start allow the hardware to be ready\n \t\t * This is only used for sanity checking with internal generator\n \t\t */\n-\t\tif (rte_ctrl_thread_create(&thread, \"ark-delay-pg\", NULL,\n+\t\tif (rte_thread_ctrl_thread_create(&thread, \"ark-delay-pg\",\n \t\t\t\t\t   ark_pktgen_delay_start, ark->pg)) {\n \t\t\tARK_PMD_LOG(ERR, \"Could not create pktgen \"\n \t\t\t\t    \"starter thread\\n\");\ndiff --git a/drivers/net/ark/ark_pktgen.c b/drivers/net/ark/ark_pktgen.c\nindex 515bfe461c..58ff65b5d5 100644\n--- a/drivers/net/ark/ark_pktgen.c\n+++ b/drivers/net/ark/ark_pktgen.c\n@@ -3,7 +3,7 @@\n  */\n \n #include <unistd.h>\n-#include <pthread.h>\n+#include <rte_thread.h>\n \n #include <rte_string_fns.h>\n #include <rte_malloc.h>\n@@ -475,7 +475,7 @@ ark_pktgen_delay_start(void *arg)\n \t * perform a blind sleep here to ensure that the external test\n \t * application has time to setup the test before we generate packets\n \t */\n-\tpthread_detach(pthread_self());\n+\trte_thread_detach(rte_thread_self());\n \tusleep(100000);\n \tark_pktgen_run(inst);\n \treturn NULL;\ndiff --git a/drivers/net/atlantic/atl_ethdev.c b/drivers/net/atlantic/atl_ethdev.c\nindex 0ce35eb519..2b86f01a25 100644\n--- a/drivers/net/atlantic/atl_ethdev.c\n+++ b/drivers/net/atlantic/atl_ethdev.c\n@@ -405,7 +405,7 @@ eth_atl_dev_init(struct rte_eth_dev *eth_dev)\n \n \thw->aq_nic_cfg = &adapter->hw_cfg;\n \n-\tpthread_mutex_init(&hw->mbox_mutex, NULL);\n+\trte_thread_mutex_init(&hw->mbox_mutex);\n \n \t/* disable interrupt */\n \tatl_disable_intr(hw);\n@@ -712,7 +712,7 @@ atl_dev_close(struct rte_eth_dev *dev)\n \trte_intr_callback_unregister(intr_handle,\n \t\t\t\t     atl_dev_interrupt_handler, dev);\n \n-\tpthread_mutex_destroy(&hw->mbox_mutex);\n+\trte_thread_mutex_destroy(&hw->mbox_mutex);\n \n \treturn ret;\n }\ndiff --git a/drivers/net/atlantic/atl_types.h b/drivers/net/atlantic/atl_types.h\nindex e813d9f326..d99aa5fad0 100644\n--- a/drivers/net/atlantic/atl_types.h\n+++ b/drivers/net/atlantic/atl_types.h\n@@ -10,7 +10,7 @@\n #include <string.h>\n #include <stdbool.h>\n #include <netinet/in.h>\n-#include <pthread.h>\n+#include <rte_thread.h>\n \n #include <rte_common.h>\n \n@@ -141,7 +141,7 @@ struct aq_hw_s {\n \tu32 rpc_tid;\n \tstruct hw_aq_atl_utils_fw_rpc rpc;\n \n-\tpthread_mutex_t mbox_mutex;\n+\trte_thread_mutex mbox_mutex;\n };\n \n struct aq_fw_ops {\ndiff --git a/drivers/net/atlantic/hw_atl/hw_atl_utils_fw2x.c b/drivers/net/atlantic/hw_atl/hw_atl_utils_fw2x.c\nindex 3a7faf405c..15b80584f8 100644\n--- a/drivers/net/atlantic/hw_atl/hw_atl_utils_fw2x.c\n+++ b/drivers/net/atlantic/hw_atl/hw_atl_utils_fw2x.c\n@@ -6,7 +6,7 @@\n  */\n \n #include <rte_ether.h>\n-#include <pthread.h>\n+#include <rte_thread.h>\n #include \"../atl_hw_regs.h\"\n \n #include \"../atl_types.h\"\n@@ -218,7 +218,7 @@ int aq_fw2x_get_mac_permanent(struct aq_hw_s *self, u8 *mac)\n \tu32 mac_addr[2] = { 0 };\n \tu32 efuse_addr = aq_hw_read_reg(self, HW_ATL_FW2X_MPI_EFUSE_ADDR);\n \n-\tpthread_mutex_lock(&self->mbox_mutex);\n+\trte_thread_mutex_lock(&self->mbox_mutex);\n \n \tif (efuse_addr != 0) {\n \t\terr = hw_atl_utils_fw_downld_dwords(self,\n@@ -257,7 +257,7 @@ int aq_fw2x_get_mac_permanent(struct aq_hw_s *self, u8 *mac)\n \t}\n \n exit:\n-\tpthread_mutex_unlock(&self->mbox_mutex);\n+\trte_thread_mutex_unlock(&self->mbox_mutex);\n \n \treturn err;\n }\n@@ -269,7 +269,7 @@ static int aq_fw2x_update_stats(struct aq_hw_s *self)\n \tu32 orig_stats_val = mpi_opts & BIT(CAPS_HI_STATISTICS);\n \n \n-\tpthread_mutex_lock(&self->mbox_mutex);\n+\trte_thread_mutex_lock(&self->mbox_mutex);\n \n \t/* Toggle statistics bit for FW to update */\n \tmpi_opts = mpi_opts ^ BIT(CAPS_HI_STATISTICS);\n@@ -286,7 +286,7 @@ static int aq_fw2x_update_stats(struct aq_hw_s *self)\n \terr = hw_atl_utils_update_stats(self);\n \n exit:\n-\tpthread_mutex_unlock(&self->mbox_mutex);\n+\trte_thread_mutex_unlock(&self->mbox_mutex);\n \n \treturn err;\n \n@@ -299,7 +299,7 @@ static int aq_fw2x_get_temp(struct aq_hw_s *self, int *temp)\n \tu32 temp_val = mpi_opts & BIT(CAPS_HI_TEMPERATURE);\n \tu32 temp_res;\n \n-\tpthread_mutex_lock(&self->mbox_mutex);\n+\trte_thread_mutex_lock(&self->mbox_mutex);\n \n \t/* Toggle statistics bit for FW to 0x36C.18 (CAPS_HI_TEMPERATURE) */\n \tmpi_opts = mpi_opts ^ BIT(CAPS_HI_TEMPERATURE);\n@@ -317,7 +317,7 @@ static int aq_fw2x_get_temp(struct aq_hw_s *self, int *temp)\n \t\t\t\tsizeof(temp_res) / sizeof(u32));\n \n \n-\tpthread_mutex_unlock(&self->mbox_mutex);\n+\trte_thread_mutex_unlock(&self->mbox_mutex);\n \n \tif (err)\n \t\treturn err;\n@@ -536,7 +536,7 @@ static int aq_fw2x_get_eeprom(struct aq_hw_s *self, int dev_addr,\n \tif ((self->caps_lo & BIT(CAPS_LO_SMBUS_READ)) == 0)\n \t\treturn -EOPNOTSUPP;\n \n-\tpthread_mutex_lock(&self->mbox_mutex);\n+\trte_thread_mutex_lock(&self->mbox_mutex);\n \n \trequest.msg_id = 0;\n \trequest.device_id = dev_addr;\n@@ -605,7 +605,7 @@ static int aq_fw2x_get_eeprom(struct aq_hw_s *self, int dev_addr,\n \t}\n \n exit:\n-\tpthread_mutex_unlock(&self->mbox_mutex);\n+\trte_thread_mutex_unlock(&self->mbox_mutex);\n \n \treturn err;\n }\n@@ -626,7 +626,7 @@ static int aq_fw2x_set_eeprom(struct aq_hw_s *self, int dev_addr,\n \trequest.address = offset;\n \trequest.length = len;\n \n-\tpthread_mutex_lock(&self->mbox_mutex);\n+\trte_thread_mutex_lock(&self->mbox_mutex);\n \n \t/* Write SMBUS request to cfg memory */\n \terr = hw_atl_utils_fw_upload_dwords(self, self->rpc_addr,\n@@ -694,7 +694,7 @@ static int aq_fw2x_set_eeprom(struct aq_hw_s *self, int dev_addr,\n \t}\n \n exit:\n-\tpthread_mutex_unlock(&self->mbox_mutex);\n+\trte_thread_mutex_unlock(&self->mbox_mutex);\n \n \treturn err;\n }\n@@ -712,7 +712,7 @@ static int aq_fw2x_send_macsec_request(struct aq_hw_s *self,\n \tif ((self->caps_lo & BIT(CAPS_LO_MACSEC)) == 0)\n \t\treturn -EOPNOTSUPP;\n \n-\tpthread_mutex_lock(&self->mbox_mutex);\n+\trte_thread_mutex_lock(&self->mbox_mutex);\n \n \t/* Write macsec request to cfg memory */\n \terr = hw_atl_utils_fw_upload_dwords(self, self->rpc_addr,\n@@ -742,7 +742,7 @@ static int aq_fw2x_send_macsec_request(struct aq_hw_s *self,\n \t\tRTE_ALIGN(sizeof(*response) / sizeof(u32), sizeof(u32)));\n \n exit:\n-\tpthread_mutex_unlock(&self->mbox_mutex);\n+\trte_thread_mutex_unlock(&self->mbox_mutex);\n \n \treturn err;\n }\ndiff --git a/drivers/net/axgbe/axgbe_common.h b/drivers/net/axgbe/axgbe_common.h\nindex df0aa21a9b..a7b892b806 100644\n--- a/drivers/net/axgbe/axgbe_common.h\n+++ b/drivers/net/axgbe/axgbe_common.h\n@@ -19,7 +19,7 @@\n #include <stdarg.h>\n #include <unistd.h>\n #include <inttypes.h>\n-#include <pthread.h>\n+#include <rte_thread.h>\n \n #include <rte_bitops.h>\n #include <rte_byteorder.h>\ndiff --git a/drivers/net/axgbe/axgbe_dev.c b/drivers/net/axgbe/axgbe_dev.c\nindex 786288a7b0..197c722901 100644\n--- a/drivers/net/axgbe/axgbe_dev.c\n+++ b/drivers/net/axgbe/axgbe_dev.c\n@@ -167,12 +167,12 @@ static int axgbe_read_mmd_regs_v2(struct axgbe_port *pdata,\n \tindex = mmd_address & ~pdata->xpcs_window_mask;\n \toffset = pdata->xpcs_window + (mmd_address & pdata->xpcs_window_mask);\n \n-\tpthread_mutex_lock(&pdata->xpcs_mutex);\n+\trte_thread_mutex_lock(&pdata->xpcs_mutex);\n \n \tXPCS32_IOWRITE(pdata, pdata->xpcs_window_sel_reg, index);\n \tmmd_data = XPCS16_IOREAD(pdata, offset);\n \n-\tpthread_mutex_unlock(&pdata->xpcs_mutex);\n+\trte_thread_mutex_unlock(&pdata->xpcs_mutex);\n \n \treturn mmd_data;\n }\n@@ -201,12 +201,12 @@ static void axgbe_write_mmd_regs_v2(struct axgbe_port *pdata,\n \tindex = mmd_address & ~pdata->xpcs_window_mask;\n \toffset = pdata->xpcs_window + (mmd_address & pdata->xpcs_window_mask);\n \n-\tpthread_mutex_lock(&pdata->xpcs_mutex);\n+\trte_thread_mutex_lock(&pdata->xpcs_mutex);\n \n \tXPCS32_IOWRITE(pdata, pdata->xpcs_window_sel_reg, index);\n \tXPCS16_IOWRITE(pdata, offset, mmd_data);\n \n-\tpthread_mutex_unlock(&pdata->xpcs_mutex);\n+\trte_thread_mutex_unlock(&pdata->xpcs_mutex);\n }\n \n static int axgbe_read_mmd_regs(struct axgbe_port *pdata, int prtad,\ndiff --git a/drivers/net/axgbe/axgbe_ethdev.c b/drivers/net/axgbe/axgbe_ethdev.c\nindex 9cb4818af1..caf5a4476f 100644\n--- a/drivers/net/axgbe/axgbe_ethdev.c\n+++ b/drivers/net/axgbe/axgbe_ethdev.c\n@@ -2311,10 +2311,10 @@ eth_axgbe_dev_init(struct rte_eth_dev *eth_dev)\n \n \tpdata->tx_desc_count = AXGBE_MAX_RING_DESC;\n \tpdata->rx_desc_count = AXGBE_MAX_RING_DESC;\n-\tpthread_mutex_init(&pdata->xpcs_mutex, NULL);\n-\tpthread_mutex_init(&pdata->i2c_mutex, NULL);\n-\tpthread_mutex_init(&pdata->an_mutex, NULL);\n-\tpthread_mutex_init(&pdata->phy_mutex, NULL);\n+\trte_thread_mutex_init(&pdata->xpcs_mutex);\n+\trte_thread_mutex_init(&pdata->i2c_mutex);\n+\trte_thread_mutex_init(&pdata->an_mutex);\n+\trte_thread_mutex_init(&pdata->phy_mutex);\n \n \tret = pdata->phy_if.phy_init(pdata);\n \tif (ret) {\ndiff --git a/drivers/net/axgbe/axgbe_ethdev.h b/drivers/net/axgbe/axgbe_ethdev.h\nindex a6226729fe..f2929d57ab 100644\n--- a/drivers/net/axgbe/axgbe_ethdev.h\n+++ b/drivers/net/axgbe/axgbe_ethdev.h\n@@ -602,10 +602,10 @@ struct axgbe_port {\n \tint phy_link;\n \tint phy_speed;\n \n-\tpthread_mutex_t xpcs_mutex;\n-\tpthread_mutex_t i2c_mutex;\n-\tpthread_mutex_t an_mutex;\n-\tpthread_mutex_t phy_mutex;\n+\trte_thread_mutex xpcs_mutex;\n+\trte_thread_mutex i2c_mutex;\n+\trte_thread_mutex an_mutex;\n+\trte_thread_mutex phy_mutex;\n \n \t/* Flow control settings */\n \tunsigned int pause_autoneg;\ndiff --git a/drivers/net/axgbe/axgbe_i2c.c b/drivers/net/axgbe/axgbe_i2c.c\nindex ab3738a12e..c17f9a8b9e 100644\n--- a/drivers/net/axgbe/axgbe_i2c.c\n+++ b/drivers/net/axgbe/axgbe_i2c.c\n@@ -229,7 +229,7 @@ static int axgbe_i2c_xfer(struct axgbe_port *pdata, struct axgbe_i2c_op *op)\n \tint ret;\n \tuint64_t timeout;\n \n-\tpthread_mutex_lock(&pdata->i2c_mutex);\n+\trte_thread_mutex_lock(&pdata->i2c_mutex);\n \tret = axgbe_i2c_disable(pdata);\n \tif (ret) {\n \t\tPMD_DRV_LOG(ERR, \"failed to disable i2c master\\n\");\n@@ -282,7 +282,7 @@ static int axgbe_i2c_xfer(struct axgbe_port *pdata, struct axgbe_i2c_op *op)\n \t}\n \n unlock:\n-\tpthread_mutex_unlock(&pdata->i2c_mutex);\n+\trte_thread_mutex_unlock(&pdata->i2c_mutex);\n \treturn ret;\n }\n \ndiff --git a/drivers/net/axgbe/axgbe_mdio.c b/drivers/net/axgbe/axgbe_mdio.c\nindex 4f98e695ae..5f3d9b360e 100644\n--- a/drivers/net/axgbe/axgbe_mdio.c\n+++ b/drivers/net/axgbe/axgbe_mdio.c\n@@ -686,9 +686,9 @@ static void axgbe_an73_isr(struct axgbe_port *pdata)\n \tif (pdata->an_int) {\n \t\t/* Clear the interrupt(s) that fired and process them */\n \t\tXMDIO_WRITE(pdata, MDIO_MMD_AN, MDIO_AN_INT, ~pdata->an_int);\n-\t\tpthread_mutex_lock(&pdata->an_mutex);\n+\t\trte_thread_mutex_lock(&pdata->an_mutex);\n \t\taxgbe_an73_state_machine(pdata);\n-\t\tpthread_mutex_unlock(&pdata->an_mutex);\n+\t\trte_thread_mutex_unlock(&pdata->an_mutex);\n \t} else {\n \t\t/* Enable AN interrupts */\n \t\taxgbe_an73_enable_interrupts(pdata);\n@@ -977,7 +977,7 @@ static int axgbe_phy_config_aneg(struct axgbe_port *pdata)\n {\n \tint ret;\n \n-\tpthread_mutex_lock(&pdata->an_mutex);\n+\trte_thread_mutex_lock(&pdata->an_mutex);\n \n \tret = __axgbe_phy_config_aneg(pdata);\n \tif (ret)\n@@ -985,7 +985,7 @@ static int axgbe_phy_config_aneg(struct axgbe_port *pdata)\n \telse\n \t\trte_bit_relaxed_clear32(AXGBE_LINK_ERR, &pdata->dev_state);\n \n-\tpthread_mutex_unlock(&pdata->an_mutex);\n+\trte_thread_mutex_unlock(&pdata->an_mutex);\n \n \treturn ret;\n }\ndiff --git a/drivers/net/axgbe/axgbe_phy_impl.c b/drivers/net/axgbe/axgbe_phy_impl.c\nindex 02236ec192..1e1d6358d8 100644\n--- a/drivers/net/axgbe/axgbe_phy_impl.c\n+++ b/drivers/net/axgbe/axgbe_phy_impl.c\n@@ -403,7 +403,7 @@ static void axgbe_phy_put_comm_ownership(struct axgbe_port *pdata)\n \n \tphy_data->comm_owned = 0;\n \n-\tpthread_mutex_unlock(&pdata->phy_mutex);\n+\trte_thread_mutex_unlock(&pdata->phy_mutex);\n }\n \n static int axgbe_phy_get_comm_ownership(struct axgbe_port *pdata)\n@@ -416,7 +416,7 @@ static int axgbe_phy_get_comm_ownership(struct axgbe_port *pdata)\n \t * the driver needs to take the software mutex and then the hardware\n \t * mutexes before being able to use the busses.\n \t */\n-\tpthread_mutex_lock(&pdata->phy_mutex);\n+\trte_thread_mutex_lock(&pdata->phy_mutex);\n \n \tif (phy_data->comm_owned)\n \t\treturn 0;\n@@ -447,7 +447,7 @@ static int axgbe_phy_get_comm_ownership(struct axgbe_port *pdata)\n \t\treturn 0;\n \t}\n \n-\tpthread_mutex_unlock(&pdata->phy_mutex);\n+\trte_thread_mutex_unlock(&pdata->phy_mutex);\n \n \tPMD_DRV_LOG(ERR, \"unable to obtain hardware mutexes\\n\");\n \ndiff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h\nindex db67bff127..656ee70f66 100644\n--- a/drivers/net/bnxt/bnxt.h\n+++ b/drivers/net/bnxt/bnxt.h\n@@ -534,8 +534,8 @@ struct bnxt_mark_info {\n \n struct bnxt_rep_info {\n \tstruct rte_eth_dev\t*vfr_eth_dev;\n-\tpthread_mutex_t\t\tvfr_lock;\n-\tpthread_mutex_t\t\tvfr_start_lock;\n+\trte_thread_mutex\t\tvfr_lock;\n+\trte_thread_mutex\t\tvfr_start_lock;\n \tbool\t\t\tconduit_valid;\n };\n \n@@ -687,7 +687,7 @@ struct bnxt {\n #define BNXT_FW_CAP_ADV_FLOW_COUNTERS\tBIT(6)\n #define BNXT_FW_CAP_LINK_ADMIN\t\tBIT(7)\n \n-\tpthread_mutex_t         flow_lock;\n+\trte_thread_mutex         flow_lock;\n \n \tuint32_t\t\tvnic_cap_flags;\n #define BNXT_VNIC_CAP_COS_CLASSIFY\tBIT(0)\n@@ -741,18 +741,18 @@ struct bnxt {\n \trte_iova_t\t\t\thwrm_short_cmd_req_dma_addr;\n \trte_spinlock_t\t\t\thwrm_lock;\n \t/* synchronize between dev_configure_op and int handler */\n-\tpthread_mutex_t\t\t\tdef_cp_lock;\n+\trte_thread_mutex\t\tdef_cp_lock;\n \t/* synchronize between dev_start_op and async evt handler\n \t * Locking sequence in async evt handler will be\n \t * def_cp_lock\n \t * health_check_lock\n \t */\n-\tpthread_mutex_t\t\t\thealth_check_lock;\n+\trte_thread_mutex\t\thealth_check_lock;\n \t/* synchronize between dev_stop/dev_close_op and\n \t * error recovery thread triggered as part of\n \t * HWRM_ASYNC_EVENT_CMPL_EVENT_ID_RESET_NOTIFY\n \t */\n-\tpthread_mutex_t\t\t\terr_recovery_lock;\n+\trte_thread_mutex\t\terr_recovery_lock;\n \tuint16_t\t\t\tmax_req_len;\n \tuint16_t\t\t\tmax_resp_len;\n \tuint16_t                        hwrm_max_ext_req_len;\n@@ -944,10 +944,10 @@ uint16_t bnxt_dummy_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,\n extern const struct rte_flow_ops bnxt_flow_ops;\n \n #define bnxt_acquire_flow_lock(bp) \\\n-\tpthread_mutex_lock(&(bp)->flow_lock)\n+\trte_thread_mutex_lock(&(bp)->flow_lock)\n \n #define bnxt_release_flow_lock(bp) \\\n-\tpthread_mutex_unlock(&(bp)->flow_lock)\n+\trte_thread_mutex_unlock(&(bp)->flow_lock)\n \n #define BNXT_VALID_VNIC_OR_RET(bp, vnic_id) do { \\\n \tif ((vnic_id) >= (bp)->max_vnics) { \\\ndiff --git a/drivers/net/bnxt/bnxt_cpr.c b/drivers/net/bnxt/bnxt_cpr.c\nindex 2c7fd78c3d..a50511047c 100644\n--- a/drivers/net/bnxt/bnxt_cpr.c\n+++ b/drivers/net/bnxt/bnxt_cpr.c\n@@ -135,7 +135,7 @@ void bnxt_handle_async_event(struct bnxt *bp,\n \t\t\treturn;\n \t\t}\n \n-\t\tpthread_mutex_lock(&bp->err_recovery_lock);\n+\t\trte_thread_mutex_lock(&bp->err_recovery_lock);\n \t\tevent_data = rte_le_to_cpu_32(async_cmp->event_data1);\n \t\t/* timestamp_lo/hi values are in units of 100ms */\n \t\tbp->fw_reset_max_msecs = async_cmp->timestamp_hi ?\n@@ -157,7 +157,7 @@ void bnxt_handle_async_event(struct bnxt *bp,\n \t\t}\n \n \t\tbp->flags |= BNXT_FLAG_FW_RESET;\n-\t\tpthread_mutex_unlock(&bp->err_recovery_lock);\n+\t\trte_thread_mutex_unlock(&bp->err_recovery_lock);\n \t\trte_eal_alarm_set(US_PER_MS, bnxt_dev_reset_and_resume,\n \t\t\t\t  (void *)bp);\n \t\tbreak;\ndiff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c\nindex 3778e28cca..ae355f4a36 100644\n--- a/drivers/net/bnxt/bnxt_ethdev.c\n+++ b/drivers/net/bnxt/bnxt_ethdev.c\n@@ -1049,7 +1049,7 @@ static int bnxt_dev_configure_op(struct rte_eth_dev *eth_dev)\n \t\t * are calculated correctly.\n \t\t */\n \n-\t\tpthread_mutex_lock(&bp->def_cp_lock);\n+\t\trte_thread_mutex_lock(&bp->def_cp_lock);\n \n \t\tif (!BNXT_HAS_NQ(bp) && bp->async_cp_ring) {\n \t\t\tbnxt_disable_int(bp);\n@@ -1059,20 +1059,20 @@ static int bnxt_dev_configure_op(struct rte_eth_dev *eth_dev)\n \t\trc = bnxt_hwrm_func_reserve_vf_resc(bp, false);\n \t\tif (rc) {\n \t\t\tPMD_DRV_LOG(ERR, \"HWRM resource alloc fail:%x\\n\", rc);\n-\t\t\tpthread_mutex_unlock(&bp->def_cp_lock);\n+\t\t\trte_thread_mutex_unlock(&bp->def_cp_lock);\n \t\t\treturn -ENOSPC;\n \t\t}\n \n \t\tif (!BNXT_HAS_NQ(bp) && bp->async_cp_ring) {\n \t\t\trc = bnxt_alloc_async_cp_ring(bp);\n \t\t\tif (rc) {\n-\t\t\t\tpthread_mutex_unlock(&bp->def_cp_lock);\n+\t\t\t\trte_thread_mutex_unlock(&bp->def_cp_lock);\n \t\t\t\treturn rc;\n \t\t\t}\n \t\t\tbnxt_enable_int(bp);\n \t\t}\n \n-\t\tpthread_mutex_unlock(&bp->def_cp_lock);\n+\t\trte_thread_mutex_unlock(&bp->def_cp_lock);\n \t}\n \n \t/* Inherit new configurations */\n@@ -1456,14 +1456,14 @@ static int bnxt_dev_stop_op(struct rte_eth_dev *eth_dev)\n {\n \tstruct bnxt *bp = eth_dev->data->dev_private;\n \n-\tpthread_mutex_lock(&bp->err_recovery_lock);\n+\trte_thread_mutex_lock(&bp->err_recovery_lock);\n \tif (bp->flags & BNXT_FLAG_FW_RESET) {\n \t\tPMD_DRV_LOG(ERR,\n \t\t\t    \"Adapter recovering from error..Please retry\\n\");\n-\t\tpthread_mutex_unlock(&bp->err_recovery_lock);\n+\t\trte_thread_mutex_unlock(&bp->err_recovery_lock);\n \t\treturn -EAGAIN;\n \t}\n-\tpthread_mutex_unlock(&bp->err_recovery_lock);\n+\trte_thread_mutex_unlock(&bp->err_recovery_lock);\n \n \treturn bnxt_dev_stop(eth_dev);\n }\n@@ -1545,13 +1545,13 @@ static int bnxt_dev_start_op(struct rte_eth_dev *eth_dev)\n static void\n bnxt_uninit_locks(struct bnxt *bp)\n {\n-\tpthread_mutex_destroy(&bp->flow_lock);\n-\tpthread_mutex_destroy(&bp->def_cp_lock);\n-\tpthread_mutex_destroy(&bp->health_check_lock);\n-\tpthread_mutex_destroy(&bp->err_recovery_lock);\n+\trte_thread_mutex_destroy(&bp->flow_lock);\n+\trte_thread_mutex_destroy(&bp->def_cp_lock);\n+\trte_thread_mutex_destroy(&bp->health_check_lock);\n+\trte_thread_mutex_destroy(&bp->err_recovery_lock);\n \tif (bp->rep_info) {\n-\t\tpthread_mutex_destroy(&bp->rep_info->vfr_lock);\n-\t\tpthread_mutex_destroy(&bp->rep_info->vfr_start_lock);\n+\t\trte_thread_mutex_destroy(&bp->rep_info->vfr_lock);\n+\t\trte_thread_mutex_destroy(&bp->rep_info->vfr_start_lock);\n \t}\n }\n \n@@ -1583,14 +1583,14 @@ static int bnxt_dev_close_op(struct rte_eth_dev *eth_dev)\n \tif (rte_eal_process_type() != RTE_PROC_PRIMARY)\n \t\treturn 0;\n \n-\tpthread_mutex_lock(&bp->err_recovery_lock);\n+\trte_thread_mutex_lock(&bp->err_recovery_lock);\n \tif (bp->flags & BNXT_FLAG_FW_RESET) {\n \t\tPMD_DRV_LOG(ERR,\n \t\t\t    \"Adapter recovering from error...Please retry\\n\");\n-\t\tpthread_mutex_unlock(&bp->err_recovery_lock);\n+\t\trte_thread_mutex_unlock(&bp->err_recovery_lock);\n \t\treturn -EAGAIN;\n \t}\n-\tpthread_mutex_unlock(&bp->err_recovery_lock);\n+\trte_thread_mutex_unlock(&bp->err_recovery_lock);\n \n \t/* cancel the recovery handler before remove dev */\n \trte_eal_alarm_cancel(bnxt_dev_reset_and_resume, (void *)bp);\n@@ -4073,7 +4073,7 @@ static void bnxt_dev_recover(void *arg)\n \tstruct bnxt *bp = arg;\n \tint rc = 0;\n \n-\tpthread_mutex_lock(&bp->err_recovery_lock);\n+\trte_thread_mutex_lock(&bp->err_recovery_lock);\n \n \tif (!bp->fw_reset_min_msecs) {\n \t\trc = bnxt_check_fw_reset_done(bp);\n@@ -4108,7 +4108,7 @@ static void bnxt_dev_recover(void *arg)\n \t\tgoto err_start;\n \n \tPMD_DRV_LOG(INFO, \"Recovered from FW reset\\n\");\n-\tpthread_mutex_unlock(&bp->err_recovery_lock);\n+\trte_thread_mutex_unlock(&bp->err_recovery_lock);\n \n \treturn;\n err_start:\n@@ -4116,7 +4116,7 @@ static void bnxt_dev_recover(void *arg)\n err:\n \tbp->flags |= BNXT_FLAG_FATAL_ERROR;\n \tbnxt_uninit_resources(bp, false);\n-\tpthread_mutex_unlock(&bp->err_recovery_lock);\n+\trte_thread_mutex_unlock(&bp->err_recovery_lock);\n \tPMD_DRV_LOG(ERR, \"Failed to recover from FW reset\\n\");\n }\n \n@@ -4292,7 +4292,7 @@ void bnxt_schedule_fw_health_check(struct bnxt *bp)\n {\n \tuint32_t polling_freq;\n \n-\tpthread_mutex_lock(&bp->health_check_lock);\n+\trte_thread_mutex_lock(&bp->health_check_lock);\n \n \tif (!bnxt_is_recovery_enabled(bp))\n \t\tgoto done;\n@@ -4307,7 +4307,7 @@ void bnxt_schedule_fw_health_check(struct bnxt *bp)\n \tbp->flags |= BNXT_FLAG_FW_HEALTH_CHECK_SCHEDULED;\n \n done:\n-\tpthread_mutex_unlock(&bp->health_check_lock);\n+\trte_thread_mutex_unlock(&bp->health_check_lock);\n }\n \n static void bnxt_cancel_fw_health_check(struct bnxt *bp)\n@@ -5093,25 +5093,25 @@ bnxt_init_locks(struct bnxt *bp)\n {\n \tint err;\n \n-\terr = pthread_mutex_init(&bp->flow_lock, NULL);\n+\terr = rte_thread_mutex_init(&bp->flow_lock);\n \tif (err) {\n \t\tPMD_DRV_LOG(ERR, \"Unable to initialize flow_lock\\n\");\n \t\treturn err;\n \t}\n \n-\terr = pthread_mutex_init(&bp->def_cp_lock, NULL);\n+\terr = rte_thread_mutex_init(&bp->def_cp_lock);\n \tif (err) {\n \t\tPMD_DRV_LOG(ERR, \"Unable to initialize def_cp_lock\\n\");\n \t\treturn err;\n \t}\n \n-\terr = pthread_mutex_init(&bp->health_check_lock, NULL);\n+\terr = rte_thread_mutex_init(&bp->health_check_lock);\n \tif (err) {\n \t\tPMD_DRV_LOG(ERR, \"Unable to initialize health_check_lock\\n\");\n \t\treturn err;\n \t}\n \n-\terr = pthread_mutex_init(&bp->err_recovery_lock, NULL);\n+\terr = rte_thread_mutex_init(&bp->err_recovery_lock);\n \tif (err)\n \t\tPMD_DRV_LOG(ERR, \"Unable to initialize err_recovery_lock\\n\");\n \n@@ -5894,14 +5894,14 @@ static int bnxt_init_rep_info(struct bnxt *bp)\n \tfor (i = 0; i < BNXT_MAX_CFA_CODE; i++)\n \t\tbp->cfa_code_map[i] = BNXT_VF_IDX_INVALID;\n \n-\trc = pthread_mutex_init(&bp->rep_info->vfr_lock, NULL);\n+\trc = rte_thread_mutex_init(&bp->rep_info->vfr_lock);\n \tif (rc) {\n \t\tPMD_DRV_LOG(ERR, \"Unable to initialize vfr_lock\\n\");\n \t\tbnxt_free_rep_info(bp);\n \t\treturn rc;\n \t}\n \n-\trc = pthread_mutex_init(&bp->rep_info->vfr_start_lock, NULL);\n+\trc = rte_thread_mutex_init(&bp->rep_info->vfr_start_lock);\n \tif (rc) {\n \t\tPMD_DRV_LOG(ERR, \"Unable to initialize vfr_start_lock\\n\");\n \t\tbnxt_free_rep_info(bp);\ndiff --git a/drivers/net/bnxt/bnxt_irq.c b/drivers/net/bnxt/bnxt_irq.c\nindex 8abbadb3d1..e1d980cf91 100644\n--- a/drivers/net/bnxt/bnxt_irq.c\n+++ b/drivers/net/bnxt/bnxt_irq.c\n@@ -30,15 +30,15 @@ void bnxt_int_handler(void *param)\n \t\treturn;\n \n \traw_cons = cpr->cp_raw_cons;\n-\tpthread_mutex_lock(&bp->def_cp_lock);\n+\trte_thread_mutex_lock(&bp->def_cp_lock);\n \twhile (1) {\n \t\tif (!cpr || !cpr->cp_ring_struct || !cpr->cp_db.doorbell) {\n-\t\t\tpthread_mutex_unlock(&bp->def_cp_lock);\n+\t\t\trte_thread_mutex_unlock(&bp->def_cp_lock);\n \t\t\treturn;\n \t\t}\n \n \t\tif (is_bnxt_in_error(bp)) {\n-\t\t\tpthread_mutex_unlock(&bp->def_cp_lock);\n+\t\t\trte_thread_mutex_unlock(&bp->def_cp_lock);\n \t\t\treturn;\n \t\t}\n \n@@ -58,7 +58,7 @@ void bnxt_int_handler(void *param)\n \telse\n \t\tB_CP_DB_REARM(cpr, cpr->cp_raw_cons);\n \n-\tpthread_mutex_unlock(&bp->def_cp_lock);\n+\trte_thread_mutex_unlock(&bp->def_cp_lock);\n }\n \n int bnxt_free_int(struct bnxt *bp)\ndiff --git a/drivers/net/bnxt/bnxt_reps.c b/drivers/net/bnxt/bnxt_reps.c\nindex bdbad53b7d..49d3ec66bc 100644\n--- a/drivers/net/bnxt/bnxt_reps.c\n+++ b/drivers/net/bnxt/bnxt_reps.c\n@@ -120,7 +120,7 @@ bnxt_rep_tx_burst(void *tx_queue,\n \tqid = vfr_txq->txq->queue_id;\n \tvf_rep_bp = vfr_txq->bp;\n \tparent = vf_rep_bp->parent_dev->data->dev_private;\n-\tpthread_mutex_lock(&parent->rep_info->vfr_lock);\n+\trte_thread_mutex_lock(&parent->rep_info->vfr_lock);\n \tptxq = parent->tx_queues[qid];\n \n \tptxq->vfr_tx_cfa_action = vf_rep_bp->vfr_tx_cfa_action;\n@@ -132,7 +132,7 @@ bnxt_rep_tx_burst(void *tx_queue,\n \n \trc = bnxt_xmit_pkts(ptxq, tx_pkts, nb_pkts);\n \tptxq->vfr_tx_cfa_action = 0;\n-\tpthread_mutex_unlock(&parent->rep_info->vfr_lock);\n+\trte_thread_mutex_unlock(&parent->rep_info->vfr_lock);\n \n \treturn rc;\n }\n@@ -407,15 +407,15 @@ int bnxt_rep_dev_start_op(struct rte_eth_dev *eth_dev)\n \trep_info = &parent_bp->rep_info[rep_bp->vf_id];\n \n \tBNXT_TF_DBG(DEBUG, \"BNXT Port:%d VFR start\\n\", eth_dev->data->port_id);\n-\tpthread_mutex_lock(&rep_info->vfr_start_lock);\n+\trte_thread_mutex_lock(&rep_info->vfr_start_lock);\n \tif (!rep_info->conduit_valid) {\n \t\trc = bnxt_get_dflt_vnic_svif(parent_bp, rep_bp);\n \t\tif (rc || !rep_info->conduit_valid) {\n-\t\t\tpthread_mutex_unlock(&rep_info->vfr_start_lock);\n+\t\t\trte_thread_mutex_unlock(&rep_info->vfr_start_lock);\n \t\t\treturn rc;\n \t\t}\n \t}\n-\tpthread_mutex_unlock(&rep_info->vfr_start_lock);\n+\trte_thread_mutex_unlock(&rep_info->vfr_start_lock);\n \n \trc = bnxt_vfr_alloc(eth_dev);\n \tif (rc) {\ndiff --git a/drivers/net/bnxt/tf_ulp/bnxt_ulp.c b/drivers/net/bnxt/tf_ulp/bnxt_ulp.c\nindex 5c805eef97..6691fc2fd7 100644\n--- a/drivers/net/bnxt/tf_ulp/bnxt_ulp.c\n+++ b/drivers/net/bnxt/tf_ulp/bnxt_ulp.c\n@@ -28,7 +28,7 @@ STAILQ_HEAD(, bnxt_ulp_session_state) bnxt_ulp_session_list =\n \t\t\tSTAILQ_HEAD_INITIALIZER(bnxt_ulp_session_list);\n \n /* Mutex to synchronize bnxt_ulp_session_list operations. */\n-static pthread_mutex_t bnxt_ulp_global_mutex = PTHREAD_MUTEX_INITIALIZER;\n+RTE_STATIC_MUTEX(bnxt_ulp_global_mutex)\n \n /*\n  * Allow the deletion of context only for the bnxt device that\n@@ -640,7 +640,7 @@ ulp_ctx_detach(struct bnxt *bp)\n static void\n ulp_context_initialized(struct bnxt_ulp_session_state *session, bool *init)\n {\n-\tpthread_mutex_lock(&session->bnxt_ulp_mutex);\n+\trte_thread_mutex_lock(&session->bnxt_ulp_mutex);\n \n \tif (!session->bnxt_ulp_init) {\n \t\tsession->bnxt_ulp_init = true;\n@@ -649,7 +649,7 @@ ulp_context_initialized(struct bnxt_ulp_session_state *session, bool *init)\n \t\t*init = true;\n \t}\n \n-\tpthread_mutex_unlock(&session->bnxt_ulp_mutex);\n+\trte_thread_mutex_unlock(&session->bnxt_ulp_mutex);\n }\n \n /*\n@@ -690,7 +690,7 @@ ulp_session_init(struct bnxt *bp,\n \tpci_dev = RTE_DEV_TO_PCI(bp->eth_dev->device);\n \tpci_addr = &pci_dev->addr;\n \n-\tpthread_mutex_lock(&bnxt_ulp_global_mutex);\n+\trte_thread_mutex_lock(&bnxt_ulp_global_mutex);\n \n \tsession = ulp_get_session(pci_addr);\n \tif (!session) {\n@@ -701,17 +701,17 @@ ulp_session_init(struct bnxt *bp,\n \t\tif (!session) {\n \t\t\tBNXT_TF_DBG(ERR,\n \t\t\t\t    \"Allocation failed for bnxt_ulp_session\\n\");\n-\t\t\tpthread_mutex_unlock(&bnxt_ulp_global_mutex);\n+\t\t\trte_thread_mutex_unlock(&bnxt_ulp_global_mutex);\n \t\t\treturn NULL;\n \n \t\t} else {\n \t\t\t/* Add it to the queue */\n \t\t\tsession->pci_info.domain = pci_addr->domain;\n \t\t\tsession->pci_info.bus = pci_addr->bus;\n-\t\t\trc = pthread_mutex_init(&session->bnxt_ulp_mutex, NULL);\n+\t\t\trc = rte_thread_mutex_init(&session->bnxt_ulp_mutex);\n \t\t\tif (rc) {\n \t\t\t\tBNXT_TF_DBG(ERR, \"mutex create failed\\n\");\n-\t\t\t\tpthread_mutex_unlock(&bnxt_ulp_global_mutex);\n+\t\t\t\trte_thread_mutex_unlock(&bnxt_ulp_global_mutex);\n \t\t\t\treturn NULL;\n \t\t\t}\n \t\t\tSTAILQ_INSERT_TAIL(&bnxt_ulp_session_list,\n@@ -719,7 +719,7 @@ ulp_session_init(struct bnxt *bp,\n \t\t}\n \t}\n \tulp_context_initialized(session, init);\n-\tpthread_mutex_unlock(&bnxt_ulp_global_mutex);\n+\trte_thread_mutex_unlock(&bnxt_ulp_global_mutex);\n \treturn session;\n }\n \n@@ -734,12 +734,12 @@ ulp_session_deinit(struct bnxt_ulp_session_state *session)\n \t\treturn;\n \n \tif (!session->cfg_data) {\n-\t\tpthread_mutex_lock(&bnxt_ulp_global_mutex);\n+\t\trte_thread_mutex_lock(&bnxt_ulp_global_mutex);\n \t\tSTAILQ_REMOVE(&bnxt_ulp_session_list, session,\n \t\t\t      bnxt_ulp_session_state, next);\n-\t\tpthread_mutex_destroy(&session->bnxt_ulp_mutex);\n+\t\trte_thread_mutex_destroy(&session->bnxt_ulp_mutex);\n \t\trte_free(session);\n-\t\tpthread_mutex_unlock(&bnxt_ulp_global_mutex);\n+\t\trte_thread_mutex_unlock(&bnxt_ulp_global_mutex);\n \t}\n }\n \n@@ -892,7 +892,7 @@ bnxt_ulp_deinit(struct bnxt *bp,\n \t\t\t\t\t BNXT_ULP_NAT_OUTER_MOST_FLAGS, 0);\n \n \t/* free the flow db lock */\n-\tpthread_mutex_destroy(&bp->ulp_ctx->cfg_data->flow_db_lock);\n+\trte_thread_mutex_destroy(&bp->ulp_ctx->cfg_data->flow_db_lock);\n \n \t/* Delete the ulp context and tf session and free the ulp context */\n \tulp_ctx_deinit(bp, session);\n@@ -917,7 +917,7 @@ bnxt_ulp_init(struct bnxt *bp,\n \t\tgoto jump_to_error;\n \t}\n \n-\trc = pthread_mutex_init(&bp->ulp_ctx->cfg_data->flow_db_lock, NULL);\n+\trc = rte_thread_mutex_init(&bp->ulp_ctx->cfg_data->flow_db_lock);\n \tif (rc) {\n \t\tBNXT_TF_DBG(ERR, \"Unable to initialize flow db lock\\n\");\n \t\tgoto jump_to_error;\n@@ -1117,9 +1117,9 @@ bnxt_ulp_port_deinit(struct bnxt *bp)\n \t/* Get the session details  */\n \tpci_dev = RTE_DEV_TO_PCI(bp->eth_dev->device);\n \tpci_addr = &pci_dev->addr;\n-\tpthread_mutex_lock(&bnxt_ulp_global_mutex);\n+\trte_thread_mutex_lock(&bnxt_ulp_global_mutex);\n \tsession = ulp_get_session(pci_addr);\n-\tpthread_mutex_unlock(&bnxt_ulp_global_mutex);\n+\trte_thread_mutex_unlock(&bnxt_ulp_global_mutex);\n \n \t/* session not found then just exit */\n \tif (!session) {\n@@ -1451,7 +1451,7 @@ bnxt_ulp_cntxt_acquire_fdb_lock(struct bnxt_ulp_context\t*ulp_ctx)\n \tif (!ulp_ctx || !ulp_ctx->cfg_data)\n \t\treturn -1;\n \n-\tif (pthread_mutex_lock(&ulp_ctx->cfg_data->flow_db_lock)) {\n+\tif (rte_thread_mutex_lock(&ulp_ctx->cfg_data->flow_db_lock)) {\n \t\tBNXT_TF_DBG(ERR, \"unable to acquire fdb lock\\n\");\n \t\treturn -1;\n \t}\n@@ -1465,5 +1465,5 @@ bnxt_ulp_cntxt_release_fdb_lock(struct bnxt_ulp_context\t*ulp_ctx)\n \tif (!ulp_ctx || !ulp_ctx->cfg_data)\n \t\treturn;\n \n-\tpthread_mutex_unlock(&ulp_ctx->cfg_data->flow_db_lock);\n+\trte_thread_mutex_unlock(&ulp_ctx->cfg_data->flow_db_lock);\n }\ndiff --git a/drivers/net/bnxt/tf_ulp/bnxt_ulp.h b/drivers/net/bnxt/tf_ulp/bnxt_ulp.h\nindex 330965061a..86680f2f46 100644\n--- a/drivers/net/bnxt/tf_ulp/bnxt_ulp.h\n+++ b/drivers/net/bnxt/tf_ulp/bnxt_ulp.h\n@@ -49,7 +49,7 @@ struct bnxt_ulp_data {\n \tuint32_t\t\t\tdev_id; /* Hardware device id */\n \tuint32_t\t\t\tref_cnt;\n \tstruct bnxt_ulp_flow_db\t\t*flow_db;\n-\tpthread_mutex_t\t\t\tflow_db_lock;\n+\trte_thread_mutex\t\tflow_db_lock;\n \tvoid\t\t\t\t*mapper_data;\n \tstruct bnxt_ulp_port_db\t\t*port_db;\n \tstruct bnxt_ulp_fc_info\t\t*fc_info;\n@@ -75,7 +75,7 @@ struct bnxt_ulp_pci_info {\n struct bnxt_ulp_session_state {\n \tSTAILQ_ENTRY(bnxt_ulp_session_state)\tnext;\n \tbool\t\t\t\t\tbnxt_ulp_init;\n-\tpthread_mutex_t\t\t\t\tbnxt_ulp_mutex;\n+\trte_thread_mutex\t\t\tbnxt_ulp_mutex;\n \tstruct bnxt_ulp_pci_info\t\tpci_info;\n \tstruct bnxt_ulp_data\t\t\t*cfg_data;\n \tstruct tf\t\t\t\t*g_tfp;\ndiff --git a/drivers/net/bnxt/tf_ulp/ulp_fc_mgr.c b/drivers/net/bnxt/tf_ulp/ulp_fc_mgr.c\nindex 3eddbd6831..94fe39d7a3 100644\n--- a/drivers/net/bnxt/tf_ulp/ulp_fc_mgr.c\n+++ b/drivers/net/bnxt/tf_ulp/ulp_fc_mgr.c\n@@ -3,6 +3,7 @@\n  * All rights reserved.\n  */\n \n+#include <pthread.h>\n #include <rte_common.h>\n #include <rte_cycles.h>\n #include <rte_malloc.h>\n@@ -84,7 +85,7 @@ ulp_fc_mgr_init(struct bnxt_ulp_context *ctxt)\n \tif (!ulp_fc_info)\n \t\tgoto error;\n \n-\trc = pthread_mutex_init(&ulp_fc_info->fc_lock, NULL);\n+\trc = rte_thread_mutex_init(&ulp_fc_info->fc_lock);\n \tif (rc) {\n \t\tPMD_DRV_LOG(ERR, \"Failed to initialize fc mutex\\n\");\n \t\tgoto error;\n@@ -141,7 +142,7 @@ ulp_fc_mgr_deinit(struct bnxt_ulp_context *ctxt)\n \n \tulp_fc_mgr_thread_cancel(ctxt);\n \n-\tpthread_mutex_destroy(&ulp_fc_info->fc_lock);\n+\trte_thread_mutex_destroy(&ulp_fc_info->fc_lock);\n \n \tfor (i = 0; i < TF_DIR_MAX; i++)\n \t\trte_free(ulp_fc_info->sw_acc_tbl[i]);\n@@ -379,11 +380,12 @@ ulp_fc_mgr_alarm_cb(void *arg)\n \t * Take the fc_lock to ensure no flow is destroyed\n \t * during the bulk get\n \t */\n-\tif (pthread_mutex_trylock(&ulp_fc_info->fc_lock))\n+\tif (pthread_mutex_trylock((pthread_mutex_t *)\n+\t\t\t&ulp_fc_info->fc_lock.mutex_id))\n \t\tgoto out;\n \n \tif (!ulp_fc_info->num_entries) {\n-\t\tpthread_mutex_unlock(&ulp_fc_info->fc_lock);\n+\t\trte_thread_mutex_unlock(&ulp_fc_info->fc_lock);\n \t\tulp_fc_mgr_thread_cancel(ctxt);\n \t\treturn;\n \t}\n@@ -414,7 +416,7 @@ ulp_fc_mgr_alarm_cb(void *arg)\n \t\t}\n \t}\n \n-\tpthread_mutex_unlock(&ulp_fc_info->fc_lock);\n+\trte_thread_mutex_unlock(&ulp_fc_info->fc_lock);\n \n \t/*\n \t * If cmd fails once, no need of\n@@ -503,12 +505,12 @@ int32_t ulp_fc_mgr_cntr_set(struct bnxt_ulp_context *ctxt, enum tf_dir dir,\n \tif (!ulp_fc_info)\n \t\treturn -EIO;\n \n-\tpthread_mutex_lock(&ulp_fc_info->fc_lock);\n+\trte_thread_mutex_lock(&ulp_fc_info->fc_lock);\n \tsw_cntr_idx = hw_cntr_id - ulp_fc_info->shadow_hw_tbl[dir].start_idx;\n \tulp_fc_info->sw_acc_tbl[dir][sw_cntr_idx].valid = true;\n \tulp_fc_info->sw_acc_tbl[dir][sw_cntr_idx].hw_cntr_id = hw_cntr_id;\n \tulp_fc_info->num_entries++;\n-\tpthread_mutex_unlock(&ulp_fc_info->fc_lock);\n+\trte_thread_mutex_unlock(&ulp_fc_info->fc_lock);\n \n \treturn 0;\n }\n@@ -535,14 +537,14 @@ int32_t ulp_fc_mgr_cntr_reset(struct bnxt_ulp_context *ctxt, enum tf_dir dir,\n \tif (!ulp_fc_info)\n \t\treturn -EIO;\n \n-\tpthread_mutex_lock(&ulp_fc_info->fc_lock);\n+\trte_thread_mutex_lock(&ulp_fc_info->fc_lock);\n \tsw_cntr_idx = hw_cntr_id - ulp_fc_info->shadow_hw_tbl[dir].start_idx;\n \tulp_fc_info->sw_acc_tbl[dir][sw_cntr_idx].valid = false;\n \tulp_fc_info->sw_acc_tbl[dir][sw_cntr_idx].hw_cntr_id = 0;\n \tulp_fc_info->sw_acc_tbl[dir][sw_cntr_idx].pkt_count = 0;\n \tulp_fc_info->sw_acc_tbl[dir][sw_cntr_idx].byte_count = 0;\n \tulp_fc_info->num_entries--;\n-\tpthread_mutex_unlock(&ulp_fc_info->fc_lock);\n+\trte_thread_mutex_unlock(&ulp_fc_info->fc_lock);\n \n \treturn 0;\n }\n@@ -607,7 +609,7 @@ int ulp_fc_mgr_query_count_get(struct bnxt_ulp_context *ctxt,\n \thw_cntr_id = params.resource_hndl;\n \tif (params.resource_sub_type ==\n \t\t\tBNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_INT_COUNT) {\n-\t\tpthread_mutex_lock(&ulp_fc_info->fc_lock);\n+\t\trte_thread_mutex_lock(&ulp_fc_info->fc_lock);\n \t\tsw_cntr_idx = hw_cntr_id -\n \t\t\tulp_fc_info->shadow_hw_tbl[dir].start_idx;\n \t\tsw_acc_tbl_entry = &ulp_fc_info->sw_acc_tbl[dir][sw_cntr_idx];\n@@ -621,7 +623,7 @@ int ulp_fc_mgr_query_count_get(struct bnxt_ulp_context *ctxt,\n \t\t\tsw_acc_tbl_entry->pkt_count = 0;\n \t\t\tsw_acc_tbl_entry->byte_count = 0;\n \t\t}\n-\t\tpthread_mutex_unlock(&ulp_fc_info->fc_lock);\n+\t\trte_thread_mutex_unlock(&ulp_fc_info->fc_lock);\n \t} else if (params.resource_sub_type ==\n \t\t\tBNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_INT_COUNT_ACC) {\n \t\t/* Get stats from the parent child table */\n@@ -663,7 +665,7 @@ int32_t ulp_fc_mgr_cntr_parent_flow_set(struct bnxt_ulp_context *ctxt,\n \tif (!ulp_fc_info)\n \t\treturn -EIO;\n \n-\tpthread_mutex_lock(&ulp_fc_info->fc_lock);\n+\trte_thread_mutex_lock(&ulp_fc_info->fc_lock);\n \tsw_cntr_idx = hw_cntr_id - ulp_fc_info->shadow_hw_tbl[dir].start_idx;\n \tif (ulp_fc_info->sw_acc_tbl[dir][sw_cntr_idx].valid) {\n \t\tulp_fc_info->sw_acc_tbl[dir][sw_cntr_idx].parent_flow_id = fid;\n@@ -672,7 +674,7 @@ int32_t ulp_fc_mgr_cntr_parent_flow_set(struct bnxt_ulp_context *ctxt,\n \t\t\t    hw_cntr_id, fid);\n \t\trc = -ENOENT;\n \t}\n-\tpthread_mutex_unlock(&ulp_fc_info->fc_lock);\n+\trte_thread_mutex_unlock(&ulp_fc_info->fc_lock);\n \n \treturn rc;\n }\ndiff --git a/drivers/net/bnxt/tf_ulp/ulp_fc_mgr.h b/drivers/net/bnxt/tf_ulp/ulp_fc_mgr.h\nindex 04cb86bea2..cfc8ea29d8 100644\n--- a/drivers/net/bnxt/tf_ulp/ulp_fc_mgr.h\n+++ b/drivers/net/bnxt/tf_ulp/ulp_fc_mgr.h\n@@ -47,7 +47,7 @@ struct bnxt_ulp_fc_info {\n \tstruct hw_fc_mem_info\tshadow_hw_tbl[TF_DIR_MAX];\n \tuint32_t\t\tflags;\n \tuint32_t\t\tnum_entries;\n-\tpthread_mutex_t\t\tfc_lock;\n+\trte_thread_mutex\tfc_lock;\n };\n \n int32_t\ndiff --git a/drivers/net/dpaa/dpaa_ethdev.c b/drivers/net/dpaa/dpaa_ethdev.c\nindex 27d670f843..0983630f5e 100644\n--- a/drivers/net/dpaa/dpaa_ethdev.c\n+++ b/drivers/net/dpaa/dpaa_ethdev.c\n@@ -11,7 +11,7 @@\n #include <limits.h>\n #include <sched.h>\n #include <signal.h>\n-#include <pthread.h>\n+#include <rte_thread.h>\n #include <sys/types.h>\n #include <sys/syscall.h>\n \ndiff --git a/drivers/net/dpaa/dpaa_rxtx.c b/drivers/net/dpaa/dpaa_rxtx.c\nindex 423de40e95..55eb14af5f 100644\n--- a/drivers/net/dpaa/dpaa_rxtx.c\n+++ b/drivers/net/dpaa/dpaa_rxtx.c\n@@ -11,7 +11,7 @@\n #include <stdio.h>\n #include <limits.h>\n #include <sched.h>\n-#include <pthread.h>\n+#include <rte_thread.h>\n \n #include <rte_byteorder.h>\n #include <rte_common.h>\ndiff --git a/drivers/net/ena/base/ena_plat_dpdk.h b/drivers/net/ena/base/ena_plat_dpdk.h\nindex f66df95591..7ddcbc1ac4 100644\n--- a/drivers/net/ena/base/ena_plat_dpdk.h\n+++ b/drivers/net/ena/base/ena_plat_dpdk.h\n@@ -9,6 +9,7 @@\n #include <stdbool.h>\n #include <stdlib.h>\n #include <pthread.h>\n+#include <rte_thread.h>\n #include <stdint.h>\n #include <inttypes.h>\n #include <string.h>\n@@ -148,14 +149,14 @@ extern int ena_logtype_com;\n \n typedef struct {\n \tpthread_cond_t cond;\n-\tpthread_mutex_t mutex;\n+\trte_thread_mutex mutex;\n \tuint8_t flag;\n } ena_wait_event_t;\n \n #define ENA_WAIT_EVENT_INIT(waitevent)\t\t\t\t\t       \\\n \tdo {\t\t\t\t\t\t\t\t       \\\n \t\tena_wait_event_t *_we = &(waitevent);\t\t\t       \\\n-\t\tpthread_mutex_init(&_we->mutex, NULL);\t\t\t       \\\n+\t\trte_thread_mutex_init(&_we->mutex);\t\t\t       \\\n \t\tpthread_cond_init(&_we->cond, NULL);\t\t\t       \\\n \t\t_we->flag = 0;\t\t\t\t\t\t       \\\n \t} while (0)\n@@ -172,10 +173,10 @@ typedef struct {\n \t\twait.tv_sec = now.tv_sec + _tmo / 1000000UL;\t\t       \\\n \t\ttimeout_us = _tmo % 1000000UL;\t\t\t\t       \\\n \t\twait.tv_nsec = (now.tv_usec + timeout_us) * 1000UL;\t       \\\n-\t\tpthread_mutex_lock(&_we->mutex);\t\t\t       \\\n+\t\trte_thread_mutex_lock(&_we->mutex);\t\t\t       \\\n \t\twhile (ret == 0 && !_we->flag) {\t\t\t       \\\n \t\t\tret = pthread_cond_timedwait(&_we->cond,\t       \\\n-\t\t\t\t&_we->mutex, &wait);\t\t\t       \\\n+\t\t\t\t_we->mutex.mutex_id, &wait);\t\t       \\\n \t\t}\t\t\t\t\t\t\t       \\\n \t\t/* Asserts only if not working on ena_wait_event_t */\t       \\\n \t\tif (unlikely(ret != 0 && ret != ETIMEDOUT))\t\t       \\\n@@ -185,15 +186,15 @@ typedef struct {\n \t\t\tena_trc_err(NULL,\t\t\t\t       \\\n \t\t\t\t\"Timeout waiting for \" #waitevent \"\\n\");       \\\n \t\t_we->flag = 0;\t\t\t\t\t\t       \\\n-\t\tpthread_mutex_unlock(&_we->mutex);\t\t\t       \\\n+\t\trte_thread_mutex_unlock(&_we->mutex);\t\t\t       \\\n \t} while (0)\n #define ENA_WAIT_EVENT_SIGNAL(waitevent)\t\t\t\t       \\\n \tdo {\t\t\t\t\t\t\t\t       \\\n \t\tena_wait_event_t *_we = &(waitevent);\t\t\t       \\\n-\t\tpthread_mutex_lock(&_we->mutex);\t\t\t       \\\n+\t\trte_thread_mutex_lock(&_we->mutex);\t\t\t       \\\n \t\t_we->flag = 1;\t\t\t\t\t\t       \\\n \t\tpthread_cond_signal(&_we->cond);\t\t\t       \\\n-\t\tpthread_mutex_unlock(&_we->mutex);\t\t\t       \\\n+\t\trte_thread_mutex_unlock(&_we->mutex);\t\t\t       \\\n \t} while (0)\n /* pthread condition doesn't need to be rearmed after usage */\n #define ENA_WAIT_EVENT_CLEAR(...)\ndiff --git a/drivers/net/enic/enic.h b/drivers/net/enic/enic.h\nindex 47bfdac2cf..db07c589b9 100644\n--- a/drivers/net/enic/enic.h\n+++ b/drivers/net/enic/enic.h\n@@ -107,7 +107,7 @@ struct enic {\n \tint iommu_groupid;\n \tint eventfd;\n \tuint8_t mac_addr[RTE_ETHER_ADDR_LEN];\n-\tpthread_t err_intr_thread;\n+\trte_thread_t err_intr_thread;\n \tint promisc;\n \tint allmulti;\n \tuint8_t ig_vlan_strip_en;\ndiff --git a/drivers/net/ice/ice_dcf_parent.c b/drivers/net/ice/ice_dcf_parent.c\nindex 1d7aa8bc87..5fd769a82d 100644\n--- a/drivers/net/ice/ice_dcf_parent.c\n+++ b/drivers/net/ice/ice_dcf_parent.c\n@@ -3,7 +3,7 @@\n  */\n #include <sys/types.h>\n #include <sys/stat.h>\n-#include <pthread.h>\n+#include <rte_thread.h>\n #include <unistd.h>\n \n #include <rte_spinlock.h>\n@@ -121,7 +121,7 @@ ice_dcf_vsi_update_service_handler(void *param)\n \tstruct ice_dcf_hw *hw = reset_param->dcf_hw;\n \tstruct ice_dcf_adapter *adapter;\n \n-\tpthread_detach(pthread_self());\n+\trte_thread_detach(rte_thread_self());\n \n \trte_delay_us(ICE_DCF_VSI_UPDATE_SERVICE_INTERVAL);\n \n@@ -156,7 +156,7 @@ start_vsi_reset_thread(struct ice_dcf_hw *dcf_hw, bool vfr, uint16_t vf_id)\n #define THREAD_NAME_LEN\t16\n \tstruct ice_dcf_reset_event_param *param;\n \tchar name[THREAD_NAME_LEN];\n-\tpthread_t thread;\n+\trte_thread_t thread;\n \tint ret;\n \n \tparam = malloc(sizeof(*param));\n@@ -170,7 +170,7 @@ start_vsi_reset_thread(struct ice_dcf_hw *dcf_hw, bool vfr, uint16_t vf_id)\n \tparam->vf_id = vf_id;\n \n \tsnprintf(name, sizeof(name), \"ice-reset-%u\", vf_id);\n-\tret = rte_ctrl_thread_create(&thread, name, NULL,\n+\tret = rte_thread_ctrl_thread_create(&thread, name,\n \t\t\t\t     ice_dcf_vsi_update_service_handler, param);\n \tif (ret != 0) {\n \t\tPMD_DRV_LOG(ERR, \"Failed to start the thread for reset handling\");\ndiff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c\nindex b5371568b5..cf7b19edc0 100644\n--- a/drivers/net/ixgbe/ixgbe_ethdev.c\n+++ b/drivers/net/ixgbe/ixgbe_ethdev.c\n@@ -4156,7 +4156,7 @@ ixgbe_dev_setup_link_thread_handler(void *param)\n \tu32 speed;\n \tbool autoneg = false;\n \n-\tpthread_detach(pthread_self());\n+\trte_thread_detach(rte_thread_self());\n \tspeed = hw->phy.autoneg_advertised;\n \tif (!speed)\n \t\tixgbe_get_link_capabilities(hw, &speed, &autoneg);\n@@ -4264,9 +4264,9 @@ ixgbe_dev_link_update_share(struct rte_eth_dev *dev,\n \t\t\t\t * when there is no link thread running.\n \t\t\t\t */\n \t\t\t\tintr->flags |= IXGBE_FLAG_NEED_LINK_CONFIG;\n-\t\t\t\tif (rte_ctrl_thread_create(&ad->link_thread_tid,\n+\t\t\t\tif (rte_thread_ctrl_thread_create\n+\t\t\t\t\t(&ad->link_thread_tid,\n \t\t\t\t\t\"ixgbe-link-handler\",\n-\t\t\t\t\tNULL,\n \t\t\t\t\tixgbe_dev_setup_link_thread_handler,\n \t\t\t\t\tdev) < 0) {\n \t\t\t\t\tPMD_DRV_LOG(ERR,\ndiff --git a/drivers/net/ixgbe/ixgbe_ethdev.h b/drivers/net/ixgbe/ixgbe_ethdev.h\nindex a0ce18ca24..272fdcfb8d 100644\n--- a/drivers/net/ixgbe/ixgbe_ethdev.h\n+++ b/drivers/net/ixgbe/ixgbe_ethdev.h\n@@ -516,7 +516,7 @@ struct ixgbe_adapter {\n \tuint8_t pflink_fullchk;\n \tuint8_t mac_ctrl_frame_fwd;\n \trte_atomic32_t link_thread_running;\n-\tpthread_t link_thread_tid;\n+\trte_thread_t link_thread_tid;\n };\n \n struct ixgbe_vf_representor {\ndiff --git a/drivers/net/mlx5/linux/mlx5_os.c b/drivers/net/mlx5/linux/mlx5_os.c\nindex 534a56a555..15080bbc1c 100644\n--- a/drivers/net/mlx5/linux/mlx5_os.c\n+++ b/drivers/net/mlx5/linux/mlx5_os.c\n@@ -2557,7 +2557,7 @@ mlx5_os_open_device(const struct mlx5_dev_spawn_data *spawn,\n \tint err = 0;\n \n \tsh->numa_node = spawn->pci_dev->device.numa_node;\n-\tpthread_mutex_init(&sh->txpp.mutex, NULL);\n+\trte_thread_mutex_init(&sh->txpp.mutex);\n \t/*\n \t * Configure environment variable \"MLX5_BF_SHUT_UP\"\n \t * before the device creation. The rdma_core library\ndiff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c\nindex cf1815cb74..375fcde4df 100644\n--- a/drivers/net/mlx5/mlx5.c\n+++ b/drivers/net/mlx5/mlx5.c\n@@ -183,7 +183,7 @@ int mlx5_logtype;\n \n static LIST_HEAD(, mlx5_dev_ctx_shared) mlx5_dev_ctx_list =\n \t\t\t\t\t\tLIST_HEAD_INITIALIZER();\n-static pthread_mutex_t mlx5_dev_ctx_list_mutex;\n+static rte_thread_mutex mlx5_dev_ctx_list_mutex;\n static const struct mlx5_indexed_pool_config mlx5_ipool_cfg[] = {\n #if defined(HAVE_IBV_FLOW_DV_SUPPORT) || !defined(HAVE_INFINIBAND_VERBS_H)\n \t[MLX5_IPOOL_DECAP_ENCAP] = {\n@@ -1088,7 +1088,7 @@ mlx5_alloc_shared_dev_ctx(const struct mlx5_dev_spawn_data *spawn,\n \tMLX5_ASSERT(spawn);\n \t/* Secondary process should not create the shared context. */\n \tMLX5_ASSERT(rte_eal_process_type() == RTE_PROC_PRIMARY);\n-\tpthread_mutex_lock(&mlx5_dev_ctx_list_mutex);\n+\trte_thread_mutex_lock(&mlx5_dev_ctx_list_mutex);\n \t/* Search for IB context by device name. */\n \tLIST_FOREACH(sh, &mlx5_dev_ctx_list, next) {\n \t\tif (!strcmp(sh->ibdev_name,\n@@ -1215,11 +1215,11 @@ mlx5_alloc_shared_dev_ctx(const struct mlx5_dev_spawn_data *spawn,\n \tLIST_INSERT_HEAD(&mlx5_dev_ctx_list, sh, next);\n \trte_spinlock_init(&sh->geneve_tlv_opt_sl);\n exit:\n-\tpthread_mutex_unlock(&mlx5_dev_ctx_list_mutex);\n+\trte_thread_mutex_unlock(&mlx5_dev_ctx_list_mutex);\n \treturn sh;\n error:\n-\tpthread_mutex_destroy(&sh->txpp.mutex);\n-\tpthread_mutex_unlock(&mlx5_dev_ctx_list_mutex);\n+\trte_thread_mutex_destroy(&sh->txpp.mutex);\n+\trte_thread_mutex_unlock(&mlx5_dev_ctx_list_mutex);\n \tMLX5_ASSERT(sh);\n \tif (sh->cnt_id_tbl)\n \t\tmlx5_l3t_destroy(sh->cnt_id_tbl);\n@@ -1251,7 +1251,7 @@ mlx5_alloc_shared_dev_ctx(const struct mlx5_dev_spawn_data *spawn,\n void\n mlx5_free_shared_dev_ctx(struct mlx5_dev_ctx_shared *sh)\n {\n-\tpthread_mutex_lock(&mlx5_dev_ctx_list_mutex);\n+\trte_thread_mutex_lock(&mlx5_dev_ctx_list_mutex);\n #ifdef RTE_LIBRTE_MLX5_DEBUG\n \t/* Check the object presence in the list. */\n \tstruct mlx5_dev_ctx_shared *lctx;\n@@ -1282,7 +1282,7 @@ mlx5_free_shared_dev_ctx(struct mlx5_dev_ctx_shared *sh)\n \t/* Release flow workspaces objects on the last device. */\n \tif (LIST_EMPTY(&mlx5_dev_ctx_list))\n \t\tmlx5_flow_os_release_workspace();\n-\tpthread_mutex_unlock(&mlx5_dev_ctx_list_mutex);\n+\trte_thread_mutex_unlock(&mlx5_dev_ctx_list_mutex);\n \t/*\n \t *  Ensure there is no async event handler installed.\n \t *  Only primary process handles async device events.\n@@ -1315,11 +1315,11 @@ mlx5_free_shared_dev_ctx(struct mlx5_dev_ctx_shared *sh)\n \tif (sh->ctx)\n \t\tclaim_zero(mlx5_glue->close_device(sh->ctx));\n \tMLX5_ASSERT(sh->geneve_tlv_option_resource == NULL);\n-\tpthread_mutex_destroy(&sh->txpp.mutex);\n+\trte_thread_mutex_destroy(&sh->txpp.mutex);\n \tmlx5_free(sh);\n \treturn;\n exit:\n-\tpthread_mutex_unlock(&mlx5_dev_ctx_list_mutex);\n+\trte_thread_mutex_unlock(&mlx5_dev_ctx_list_mutex);\n }\n \n /**\n@@ -2450,7 +2450,7 @@ RTE_LOG_REGISTER_DEFAULT(mlx5_logtype, NOTICE)\n  */\n RTE_INIT(rte_mlx5_pmd_init)\n {\n-\tpthread_mutex_init(&mlx5_dev_ctx_list_mutex, NULL);\n+\trte_thread_mutex_init(&mlx5_dev_ctx_list_mutex);\n \tmlx5_common_init();\n \t/* Build the static tables for Verbs conversion. */\n \tmlx5_set_ptype_table();\ndiff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h\nindex 32b2817bf2..ecc4ed204a 100644\n--- a/drivers/net/mlx5/mlx5.h\n+++ b/drivers/net/mlx5/mlx5.h\n@@ -949,7 +949,7 @@ struct mlx5_txpp_ts {\n \n /* Tx packet pacing structure. */\n struct mlx5_dev_txpp {\n-\tpthread_mutex_t mutex; /* Pacing create/destroy mutex. */\n+\trte_thread_mutex mutex; /* Pacing create/destroy mutex. */\n \tuint32_t refcnt; /* Pacing reference counter. */\n \tuint32_t freq; /* Timestamp frequency, Hz. */\n \tuint32_t tick; /* Completion tick duration in nanoseconds. */\ndiff --git a/drivers/net/mlx5/mlx5_txpp.c b/drivers/net/mlx5/mlx5_txpp.c\nindex d90399afb5..e308c5e599 100644\n--- a/drivers/net/mlx5/mlx5_txpp.c\n+++ b/drivers/net/mlx5/mlx5_txpp.c\n@@ -905,7 +905,7 @@ mlx5_txpp_start(struct rte_eth_dev *dev)\n \t\tif (ret < 0)\n \t\t\treturn 0;\n \t}\n-\tret = pthread_mutex_lock(&sh->txpp.mutex);\n+\tret = rte_thread_mutex_lock(&sh->txpp.mutex);\n \tMLX5_ASSERT(!ret);\n \tRTE_SET_USED(ret);\n \tif (sh->txpp.refcnt) {\n@@ -921,7 +921,7 @@ mlx5_txpp_start(struct rte_eth_dev *dev)\n \t\t\trte_errno = -err;\n \t\t}\n \t}\n-\tret = pthread_mutex_unlock(&sh->txpp.mutex);\n+\tret = rte_thread_mutex_unlock(&sh->txpp.mutex);\n \tMLX5_ASSERT(!ret);\n \tRTE_SET_USED(ret);\n \treturn err;\n@@ -948,7 +948,7 @@ mlx5_txpp_stop(struct rte_eth_dev *dev)\n \t\treturn;\n \t}\n \tpriv->txpp_en = 0;\n-\tret = pthread_mutex_lock(&sh->txpp.mutex);\n+\tret = rte_thread_mutex_lock(&sh->txpp.mutex);\n \tMLX5_ASSERT(!ret);\n \tRTE_SET_USED(ret);\n \tMLX5_ASSERT(sh->txpp.refcnt);\n@@ -956,7 +956,7 @@ mlx5_txpp_stop(struct rte_eth_dev *dev)\n \t\treturn;\n \t/* No references any more, do actual destroy. */\n \tmlx5_txpp_destroy(sh);\n-\tret = pthread_mutex_unlock(&sh->txpp.mutex);\n+\tret = rte_thread_mutex_unlock(&sh->txpp.mutex);\n \tMLX5_ASSERT(!ret);\n \tRTE_SET_USED(ret);\n }\ndiff --git a/drivers/net/mlx5/windows/mlx5_flow_os.c b/drivers/net/mlx5/windows/mlx5_flow_os.c\nindex c4d5790726..ccdb0184a9 100644\n--- a/drivers/net/mlx5/windows/mlx5_flow_os.c\n+++ b/drivers/net/mlx5/windows/mlx5_flow_os.c\n@@ -253,7 +253,7 @@ struct mlx5_workspace_thread {\n static struct mlx5_workspace_thread *curr;\n static struct mlx5_workspace_thread *first;\n rte_thread_key ws_tls_index;\n-static pthread_mutex_t lock_thread_list;\n+RTE_STATIC_MUTEX(lock_thread_list)\n \n static bool\n mlx5_is_thread_alive(HANDLE thread_handle)\n@@ -330,7 +330,7 @@ mlx5_flow_os_release_workspace(void)\n \t\tfree(first);\n \t}\n \trte_thread_key_delete(ws_tls_index);\n-\tpthread_mutex_destroy(&lock_thread_list);\n+\trte_thread_mutex_destroy(&lock_thread_list);\n }\n \n static int\n@@ -352,7 +352,7 @@ mlx5_add_workspace_to_list(struct mlx5_flow_workspace *data)\n \t}\n \ttemp->mlx5_ws = data;\n \ttemp->thread_handle = curr_thread;\n-\tpthread_mutex_lock(&lock_thread_list);\n+\trte_thread_mutex_lock(&lock_thread_list);\n \tmlx5_clear_thread_list();\n \tif (!first) {\n \t\tfirst = temp;\n@@ -361,7 +361,7 @@ mlx5_add_workspace_to_list(struct mlx5_flow_workspace *data)\n \t\tcurr->next = temp;\n \t\tcurr = curr->next;\n \t}\n-\tpthread_mutex_unlock(&lock_thread_list);\n+\trte_thread_mutex_unlock(&lock_thread_list);\n \treturn 0;\n }\n \n@@ -374,7 +374,7 @@ mlx5_flow_os_init_workspace_once(void)\n \t\tDRV_LOG(ERR, \"Can't create flow workspace data thread key.\");\n \t\treturn err;\n \t}\n-\tpthread_mutex_init(&lock_thread_list, NULL);\n+\trte_thread_mutex_init(&lock_thread_list);\n \treturn 0;\n }\n \ndiff --git a/drivers/net/mlx5/windows/mlx5_os.c b/drivers/net/mlx5/windows/mlx5_os.c\nindex 3fe3f55f49..e37e16d70f 100644\n--- a/drivers/net/mlx5/windows/mlx5_os.c\n+++ b/drivers/net/mlx5/windows/mlx5_os.c\n@@ -228,7 +228,7 @@ mlx5_os_open_device(const struct mlx5_dev_spawn_data *spawn,\n \tint err = 0;\n \tstruct mlx5_context *mlx5_ctx;\n \n-\tpthread_mutex_init(&sh->txpp.mutex, NULL);\n+\trte_thread_mutex_init(&sh->txpp.mutex);\n \t/* Set numa node from pci probe */\n \tsh->numa_node = spawn->pci_dev->device.numa_node;\n \ndiff --git a/drivers/net/qede/base/bcm_osal.h b/drivers/net/qede/base/bcm_osal.h\nindex c5b5399282..c9011d964b 100644\n--- a/drivers/net/qede/base/bcm_osal.h\n+++ b/drivers/net/qede/base/bcm_osal.h\n@@ -153,10 +153,10 @@ void osal_dma_free_mem(struct ecore_dev *edev, dma_addr_t phys);\n \n /* Mutexes */\n \n-typedef pthread_mutex_t osal_mutex_t;\n-#define OSAL_MUTEX_RELEASE(lock) pthread_mutex_unlock(lock)\n-#define OSAL_MUTEX_INIT(lock) pthread_mutex_init(lock, NULL)\n-#define OSAL_MUTEX_ACQUIRE(lock) pthread_mutex_lock(lock)\n+typedef rte_thread_mutex osal_mutex_t;\n+#define OSAL_MUTEX_RELEASE(lock) rte_thread_mutex_unlock(lock)\n+#define OSAL_MUTEX_INIT(lock) rte_thread_mutex_init(lock)\n+#define OSAL_MUTEX_ACQUIRE(lock) rte_thread_mutex_lock(lock)\n #define OSAL_MUTEX_ALLOC(hwfn, lock) nothing\n #define OSAL_MUTEX_DEALLOC(lock) nothing\n \ndiff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c\nindex a202931e9a..484b647a62 100644\n--- a/drivers/net/vhost/rte_eth_vhost.c\n+++ b/drivers/net/vhost/rte_eth_vhost.c\n@@ -3,7 +3,7 @@\n  * Copyright(c) 2016-2018 Intel Corporation\n  */\n #include <unistd.h>\n-#include <pthread.h>\n+#include <rte_thread.h>\n #include <stdbool.h>\n #include <sys/epoll.h>\n \n@@ -121,7 +121,7 @@ TAILQ_HEAD(internal_list_head, internal_list);\n static struct internal_list_head internal_list =\n \tTAILQ_HEAD_INITIALIZER(internal_list);\n \n-static pthread_mutex_t internal_list_lock = PTHREAD_MUTEX_INITIALIZER;\n+RTE_STATIC_MUTEX(internal_list_lock)\n \n static struct rte_eth_link pmd_link = {\n \t\t.link_speed = 10000,\n@@ -507,7 +507,7 @@ find_internal_resource(char *ifname)\n \tif (ifname == NULL)\n \t\treturn NULL;\n \n-\tpthread_mutex_lock(&internal_list_lock);\n+\trte_thread_mutex_lock(&internal_list_lock);\n \n \tTAILQ_FOREACH(list, &internal_list, next) {\n \t\tinternal = list->eth_dev->data->dev_private;\n@@ -517,7 +517,7 @@ find_internal_resource(char *ifname)\n \t\t}\n \t}\n \n-\tpthread_mutex_unlock(&internal_list_lock);\n+\trte_thread_mutex_unlock(&internal_list_lock);\n \n \tif (!found)\n \t\treturn NULL;\n@@ -1001,9 +1001,9 @@ vhost_driver_setup(struct rte_eth_dev *eth_dev)\n \t\tgoto free_list;\n \n \tlist->eth_dev = eth_dev;\n-\tpthread_mutex_lock(&internal_list_lock);\n+\trte_thread_mutex_lock(&internal_list_lock);\n \tTAILQ_INSERT_TAIL(&internal_list, list, next);\n-\tpthread_mutex_unlock(&internal_list_lock);\n+\trte_thread_mutex_unlock(&internal_list_lock);\n \n \trte_spinlock_init(&vring_state->lock);\n \tvring_states[eth_dev->data->port_id] = vring_state;\n@@ -1035,9 +1035,9 @@ vhost_driver_setup(struct rte_eth_dev *eth_dev)\n \trte_vhost_driver_unregister(internal->iface_name);\n list_remove:\n \tvring_states[eth_dev->data->port_id] = NULL;\n-\tpthread_mutex_lock(&internal_list_lock);\n+\trte_thread_mutex_lock(&internal_list_lock);\n \tTAILQ_REMOVE(&internal_list, list, next);\n-\tpthread_mutex_unlock(&internal_list_lock);\n+\trte_thread_mutex_unlock(&internal_list_lock);\n \trte_free(vring_state);\n free_list:\n \trte_free(list);\n@@ -1093,7 +1093,7 @@ rte_eth_vhost_get_vid_from_port_id(uint16_t port_id)\n \tif (!rte_eth_dev_is_valid_port(port_id))\n \t\treturn -1;\n \n-\tpthread_mutex_lock(&internal_list_lock);\n+\trte_thread_mutex_lock(&internal_list_lock);\n \n \tTAILQ_FOREACH(list, &internal_list, next) {\n \t\teth_dev = list->eth_dev;\n@@ -1106,7 +1106,7 @@ rte_eth_vhost_get_vid_from_port_id(uint16_t port_id)\n \t\t}\n \t}\n \n-\tpthread_mutex_unlock(&internal_list_lock);\n+\trte_thread_mutex_unlock(&internal_list_lock);\n \n \treturn vid;\n }\n@@ -1184,9 +1184,9 @@ eth_dev_close(struct rte_eth_dev *dev)\n \tlist = find_internal_resource(internal->iface_name);\n \tif (list) {\n \t\trte_vhost_driver_unregister(internal->iface_name);\n-\t\tpthread_mutex_lock(&internal_list_lock);\n+\t\trte_thread_mutex_lock(&internal_list_lock);\n \t\tTAILQ_REMOVE(&internal_list, list, next);\n-\t\tpthread_mutex_unlock(&internal_list_lock);\n+\t\trte_thread_mutex_unlock(&internal_list_lock);\n \t\trte_free(list);\n \t}\n \ndiff --git a/drivers/net/virtio/virtio_user/virtio_user_dev.c b/drivers/net/virtio/virtio_user/virtio_user_dev.c\nindex 364f43e21c..9231da676b 100644\n--- a/drivers/net/virtio/virtio_user/virtio_user_dev.c\n+++ b/drivers/net/virtio/virtio_user/virtio_user_dev.c\n@@ -143,7 +143,7 @@ virtio_user_dev_set_features(struct virtio_user_dev *dev)\n \tuint64_t features;\n \tint ret = -1;\n \n-\tpthread_mutex_lock(&dev->mutex);\n+\trte_thread_mutex_lock(&dev->mutex);\n \n \t/* Step 0: tell vhost to create queues */\n \tif (virtio_user_queue_setup(dev, virtio_user_create_queue) < 0)\n@@ -161,7 +161,7 @@ virtio_user_dev_set_features(struct virtio_user_dev *dev)\n \t\tgoto error;\n \tPMD_DRV_LOG(INFO, \"(%s) set features: 0x%\" PRIx64, dev->path, features);\n error:\n-\tpthread_mutex_unlock(&dev->mutex);\n+\trte_thread_mutex_unlock(&dev->mutex);\n \n \treturn ret;\n }\n@@ -185,7 +185,7 @@ virtio_user_start_device(struct virtio_user_dev *dev)\n \t * memory subsystem in the future.\n \t */\n \trte_mcfg_mem_read_lock();\n-\tpthread_mutex_lock(&dev->mutex);\n+\trte_thread_mutex_lock(&dev->mutex);\n \n \t/* Step 2: share memory regions */\n \tret = dev->ops->set_memory_table(dev);\n@@ -206,12 +206,12 @@ virtio_user_start_device(struct virtio_user_dev *dev)\n \n \tdev->started = true;\n \n-\tpthread_mutex_unlock(&dev->mutex);\n+\trte_thread_mutex_unlock(&dev->mutex);\n \trte_mcfg_mem_read_unlock();\n \n \treturn 0;\n error:\n-\tpthread_mutex_unlock(&dev->mutex);\n+\trte_thread_mutex_unlock(&dev->mutex);\n \trte_mcfg_mem_read_unlock();\n \n \tPMD_INIT_LOG(ERR, \"(%s) Failed to start device\\n\", dev->path);\n@@ -226,7 +226,7 @@ int virtio_user_stop_device(struct virtio_user_dev *dev)\n \tuint32_t i;\n \tint ret;\n \n-\tpthread_mutex_lock(&dev->mutex);\n+\trte_thread_mutex_lock(&dev->mutex);\n \tif (!dev->started)\n \t\tgoto out;\n \n@@ -249,11 +249,11 @@ int virtio_user_stop_device(struct virtio_user_dev *dev)\n \tdev->started = false;\n \n out:\n-\tpthread_mutex_unlock(&dev->mutex);\n+\trte_thread_mutex_unlock(&dev->mutex);\n \n \treturn 0;\n err:\n-\tpthread_mutex_unlock(&dev->mutex);\n+\trte_thread_mutex_unlock(&dev->mutex);\n \n \tPMD_INIT_LOG(ERR, \"(%s) Failed to stop device\\n\", dev->path);\n \n@@ -380,7 +380,7 @@ virtio_user_mem_event_cb(enum rte_mem_event type __rte_unused,\n \tif (msl->external)\n \t\treturn;\n \n-\tpthread_mutex_lock(&dev->mutex);\n+\trte_thread_mutex_lock(&dev->mutex);\n \n \tif (dev->started == false)\n \t\tgoto exit;\n@@ -405,7 +405,7 @@ virtio_user_mem_event_cb(enum rte_mem_event type __rte_unused,\n \t}\n \n exit:\n-\tpthread_mutex_unlock(&dev->mutex);\n+\trte_thread_mutex_unlock(&dev->mutex);\n \n \tif (ret < 0)\n \t\tPMD_DRV_LOG(ERR, \"(%s) Failed to update memory table\\n\", dev->path);\n@@ -491,7 +491,7 @@ virtio_user_dev_init(struct virtio_user_dev *dev, char *path, int queues,\n \tuint64_t backend_features;\n \tint i;\n \n-\tpthread_mutex_init(&dev->mutex, NULL);\n+\trte_thread_mutex_init(&dev->mutex);\n \tstrlcpy(dev->path, path, PATH_MAX);\n \n \tfor (i = 0; i < VIRTIO_MAX_VIRTQUEUES; i++) {\n@@ -796,13 +796,13 @@ virtio_user_dev_set_status(struct virtio_user_dev *dev, uint8_t status)\n {\n \tint ret;\n \n-\tpthread_mutex_lock(&dev->mutex);\n+\trte_thread_mutex_lock(&dev->mutex);\n \tdev->status = status;\n \tret = dev->ops->set_status(dev, status);\n \tif (ret && ret != -ENOTSUP)\n \t\tPMD_INIT_LOG(ERR, \"(%s) Failed to set backend status\\n\", dev->path);\n \n-\tpthread_mutex_unlock(&dev->mutex);\n+\trte_thread_mutex_unlock(&dev->mutex);\n \treturn ret;\n }\n \n@@ -812,7 +812,7 @@ virtio_user_dev_update_status(struct virtio_user_dev *dev)\n \tint ret;\n \tuint8_t status;\n \n-\tpthread_mutex_lock(&dev->mutex);\n+\trte_thread_mutex_lock(&dev->mutex);\n \n \tret = dev->ops->get_status(dev, &status);\n \tif (!ret) {\n@@ -837,7 +837,7 @@ virtio_user_dev_update_status(struct virtio_user_dev *dev)\n \t\tPMD_INIT_LOG(ERR, \"(%s) Failed to get backend status\\n\", dev->path);\n \t}\n \n-\tpthread_mutex_unlock(&dev->mutex);\n+\trte_thread_mutex_unlock(&dev->mutex);\n \treturn ret;\n }\n \ndiff --git a/drivers/net/virtio/virtio_user/virtio_user_dev.h b/drivers/net/virtio/virtio_user/virtio_user_dev.h\nindex 58ad5198b6..9de8f5e67b 100644\n--- a/drivers/net/virtio/virtio_user/virtio_user_dev.h\n+++ b/drivers/net/virtio/virtio_user/virtio_user_dev.h\n@@ -55,7 +55,7 @@ struct virtio_user_dev {\n \tbool\t\tqp_enabled[VIRTIO_MAX_VIRTQUEUE_PAIRS];\n \n \tstruct virtio_user_backend_ops *ops;\n-\tpthread_mutex_t\tmutex;\n+\trte_thread_mutex\tmutex;\n \tbool\t\tstarted;\n \n \tvoid *backend_data;\ndiff --git a/drivers/vdpa/ifc/ifcvf_vdpa.c b/drivers/vdpa/ifc/ifcvf_vdpa.c\nindex 1dc813d0a3..81ff6c2d58 100644\n--- a/drivers/vdpa/ifc/ifcvf_vdpa.c\n+++ b/drivers/vdpa/ifc/ifcvf_vdpa.c\n@@ -23,6 +23,7 @@\n #include <rte_log.h>\n #include <rte_kvargs.h>\n #include <rte_devargs.h>\n+#include <rte_thread.h>\n \n #include \"base/ifcvf.h\"\n \n@@ -52,7 +53,7 @@ struct ifcvf_internal {\n \tint vfio_container_fd;\n \tint vfio_group_fd;\n \tint vfio_dev_fd;\n-\tpthread_t tid;\t/* thread for notify relay */\n+\trte_thread_t tid;\t/* thread for notify relay */\n \tint epfd;\n \tint vid;\n \tstruct rte_vdpa_device *vdev;\n@@ -79,7 +80,7 @@ TAILQ_HEAD(internal_list_head, internal_list);\n static struct internal_list_head internal_list =\n \tTAILQ_HEAD_INITIALIZER(internal_list);\n \n-static pthread_mutex_t internal_list_lock = PTHREAD_MUTEX_INITIALIZER;\n+RTE_STATIC_MUTEX(internal_list_lock)\n \n static void update_used_ring(struct ifcvf_internal *internal, uint16_t qid);\n \n@@ -89,7 +90,7 @@ find_internal_resource_by_vdev(struct rte_vdpa_device *vdev)\n \tint found = 0;\n \tstruct internal_list *list;\n \n-\tpthread_mutex_lock(&internal_list_lock);\n+\trte_thread_mutex_lock(&internal_list_lock);\n \n \tTAILQ_FOREACH(list, &internal_list, next) {\n \t\tif (vdev == list->internal->vdev) {\n@@ -98,7 +99,7 @@ find_internal_resource_by_vdev(struct rte_vdpa_device *vdev)\n \t\t}\n \t}\n \n-\tpthread_mutex_unlock(&internal_list_lock);\n+\trte_thread_mutex_unlock(&internal_list_lock);\n \n \tif (!found)\n \t\treturn NULL;\n@@ -112,7 +113,7 @@ find_internal_resource_by_dev(struct rte_pci_device *pdev)\n \tint found = 0;\n \tstruct internal_list *list;\n \n-\tpthread_mutex_lock(&internal_list_lock);\n+\trte_thread_mutex_lock(&internal_list_lock);\n \n \tTAILQ_FOREACH(list, &internal_list, next) {\n \t\tif (!rte_pci_addr_cmp(&pdev->addr,\n@@ -122,7 +123,7 @@ find_internal_resource_by_dev(struct rte_pci_device *pdev)\n \t\t}\n \t}\n \n-\tpthread_mutex_unlock(&internal_list_lock);\n+\trte_thread_mutex_unlock(&internal_list_lock);\n \n \tif (!found)\n \t\treturn NULL;\n@@ -500,10 +501,10 @@ setup_notify_relay(struct ifcvf_internal *internal)\n \tint ret;\n \n \tsnprintf(name, sizeof(name), \"ifc-notify-%d\", internal->vid);\n-\tret = rte_ctrl_thread_create(&internal->tid, name, NULL, notify_relay,\n+\tret = rte_thread_ctrl_thread_create(&internal->tid, name, notify_relay,\n \t\t\t\t     (void *)internal);\n \tif (ret != 0) {\n-\t\tDRV_LOG(ERR, \"failed to create notify relay pthread.\");\n+\t\tDRV_LOG(ERR, \"failed to create notify relay thread.\");\n \t\treturn -1;\n \t}\n \n@@ -513,13 +514,11 @@ setup_notify_relay(struct ifcvf_internal *internal)\n static int\n unset_notify_relay(struct ifcvf_internal *internal)\n {\n-\tvoid *status;\n-\n-\tif (internal->tid) {\n-\t\tpthread_cancel(internal->tid);\n-\t\tpthread_join(internal->tid, &status);\n+\tif (internal->tid.opaque_id) {\n+\t\tpthread_cancel(internal->tid.opaque_id);\n+\t\trte_thread_join(internal->tid, NULL);\n \t}\n-\tinternal->tid = 0;\n+\tinternal->tid.opaque_id = 0;\n \n \tif (internal->epfd >= 0)\n \t\tclose(internal->epfd);\n@@ -806,10 +805,10 @@ setup_vring_relay(struct ifcvf_internal *internal)\n \tint ret;\n \n \tsnprintf(name, sizeof(name), \"ifc-vring-%d\", internal->vid);\n-\tret = rte_ctrl_thread_create(&internal->tid, name, NULL, vring_relay,\n+\tret = rte_thread_ctrl_thread_create(&internal->tid, name, vring_relay,\n \t\t\t\t     (void *)internal);\n \tif (ret != 0) {\n-\t\tDRV_LOG(ERR, \"failed to create ring relay pthread.\");\n+\t\tDRV_LOG(ERR, \"failed to create ring relay thread.\");\n \t\treturn -1;\n \t}\n \n@@ -819,13 +818,11 @@ setup_vring_relay(struct ifcvf_internal *internal)\n static int\n unset_vring_relay(struct ifcvf_internal *internal)\n {\n-\tvoid *status;\n-\n-\tif (internal->tid) {\n-\t\tpthread_cancel(internal->tid);\n-\t\tpthread_join(internal->tid, &status);\n+\tif (internal->tid.opaque_id) {\n+\t\tpthread_cancel(internal->tid.opaque_id);\n+\t\trte_thread_join(internal->tid, NULL);\n \t}\n-\tinternal->tid = 0;\n+\tinternal->tid.opaque_id = 0;\n \n \tif (internal->epfd >= 0)\n \t\tclose(internal->epfd);\n@@ -1253,9 +1250,9 @@ ifcvf_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,\n \t\tgoto error;\n \t}\n \n-\tpthread_mutex_lock(&internal_list_lock);\n+\trte_thread_mutex_lock(&internal_list_lock);\n \tTAILQ_INSERT_TAIL(&internal_list, list, next);\n-\tpthread_mutex_unlock(&internal_list_lock);\n+\trte_thread_mutex_unlock(&internal_list_lock);\n \n \trte_atomic32_set(&internal->started, 1);\n \tupdate_datapath(internal);\n@@ -1293,9 +1290,9 @@ ifcvf_pci_remove(struct rte_pci_device *pci_dev)\n \trte_vfio_container_destroy(internal->vfio_container_fd);\n \trte_vdpa_unregister_device(internal->vdev);\n \n-\tpthread_mutex_lock(&internal_list_lock);\n+\trte_thread_mutex_lock(&internal_list_lock);\n \tTAILQ_REMOVE(&internal_list, list, next);\n-\tpthread_mutex_unlock(&internal_list_lock);\n+\trte_thread_mutex_unlock(&internal_list_lock);\n \n \trte_free(list);\n \trte_free(internal);\ndiff --git a/drivers/vdpa/mlx5/mlx5_vdpa.c b/drivers/vdpa/mlx5/mlx5_vdpa.c\nindex e5e03e6582..c7a6fee2c7 100644\n--- a/drivers/vdpa/mlx5/mlx5_vdpa.c\n+++ b/drivers/vdpa/mlx5/mlx5_vdpa.c\n@@ -48,7 +48,7 @@\n \n TAILQ_HEAD(mlx5_vdpa_privs, mlx5_vdpa_priv) priv_list =\n \t\t\t\t\t      TAILQ_HEAD_INITIALIZER(priv_list);\n-static pthread_mutex_t priv_list_lock = PTHREAD_MUTEX_INITIALIZER;\n+RTE_STATIC_MUTEX(priv_list_lock)\n \n static struct mlx5_vdpa_priv *\n mlx5_vdpa_find_priv_resource_by_vdev(struct rte_vdpa_device *vdev)\n@@ -56,14 +56,14 @@ mlx5_vdpa_find_priv_resource_by_vdev(struct rte_vdpa_device *vdev)\n \tstruct mlx5_vdpa_priv *priv;\n \tint found = 0;\n \n-\tpthread_mutex_lock(&priv_list_lock);\n+\trte_thread_mutex_lock(&priv_list_lock);\n \tTAILQ_FOREACH(priv, &priv_list, next) {\n \t\tif (vdev == priv->vdev) {\n \t\t\tfound = 1;\n \t\t\tbreak;\n \t\t}\n \t}\n-\tpthread_mutex_unlock(&priv_list_lock);\n+\trte_thread_mutex_unlock(&priv_list_lock);\n \tif (!found) {\n \t\tDRV_LOG(ERR, \"Invalid vDPA device: %s.\", vdev->device->name);\n \t\trte_errno = EINVAL;\n@@ -143,9 +143,9 @@ mlx5_vdpa_set_vring_state(int vid, int vring, int state)\n \t\tDRV_LOG(ERR, \"Too big vring id: %d.\", vring);\n \t\treturn -E2BIG;\n \t}\n-\tpthread_mutex_lock(&priv->vq_config_lock);\n+\trte_thread_mutex_lock(&priv->vq_config_lock);\n \tret = mlx5_vdpa_virtq_enable(priv, vring, state);\n-\tpthread_mutex_unlock(&priv->vq_config_lock);\n+\trte_thread_mutex_unlock(&priv->vq_config_lock);\n \treturn ret;\n }\n \n@@ -296,7 +296,7 @@ mlx5_vdpa_dev_close(int vid)\n \tpriv->configured = 0;\n \tpriv->vid = 0;\n \t/* The mutex may stay locked after event thread cancel - initiate it. */\n-\tpthread_mutex_init(&priv->vq_config_lock, NULL);\n+\trte_thread_mutex_init(&priv->vq_config_lock);\n \tDRV_LOG(INFO, \"vDPA device %d was closed.\", vid);\n \treturn ret;\n }\n@@ -736,10 +736,10 @@ mlx5_vdpa_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,\n \t}\n \tmlx5_vdpa_config_get(pci_dev->device.devargs, priv);\n \tSLIST_INIT(&priv->mr_list);\n-\tpthread_mutex_init(&priv->vq_config_lock, NULL);\n-\tpthread_mutex_lock(&priv_list_lock);\n+\trte_thread_mutex_init(&priv->vq_config_lock);\n+\trte_thread_mutex_lock(&priv_list_lock);\n \tTAILQ_INSERT_TAIL(&priv_list, priv, next);\n-\tpthread_mutex_unlock(&priv_list_lock);\n+\trte_thread_mutex_unlock(&priv_list_lock);\n \treturn 0;\n \n error:\n@@ -770,7 +770,7 @@ mlx5_vdpa_pci_remove(struct rte_pci_device *pci_dev)\n \tstruct mlx5_vdpa_priv *priv = NULL;\n \tint found = 0;\n \n-\tpthread_mutex_lock(&priv_list_lock);\n+\trte_thread_mutex_lock(&priv_list_lock);\n \tTAILQ_FOREACH(priv, &priv_list, next) {\n \t\tif (!rte_pci_addr_cmp(&priv->pci_dev->addr, &pci_dev->addr)) {\n \t\t\tfound = 1;\n@@ -779,7 +779,7 @@ mlx5_vdpa_pci_remove(struct rte_pci_device *pci_dev)\n \t}\n \tif (found)\n \t\tTAILQ_REMOVE(&priv_list, priv, next);\n-\tpthread_mutex_unlock(&priv_list_lock);\n+\trte_thread_mutex_unlock(&priv_list_lock);\n \tif (found) {\n \t\tif (priv->configured)\n \t\t\tmlx5_vdpa_dev_close(priv->vid);\n@@ -790,7 +790,7 @@ mlx5_vdpa_pci_remove(struct rte_pci_device *pci_dev)\n \t\tif (priv->vdev)\n \t\t\trte_vdpa_unregister_device(priv->vdev);\n \t\tmlx5_glue->close_device(priv->ctx);\n-\t\tpthread_mutex_destroy(&priv->vq_config_lock);\n+\t\trte_thread_mutex_destroy(&priv->vq_config_lock);\n \t\trte_free(priv);\n \t}\n \treturn 0;\ndiff --git a/drivers/vdpa/mlx5/mlx5_vdpa.h b/drivers/vdpa/mlx5/mlx5_vdpa.h\nindex 722c72b65e..e44125ec3f 100644\n--- a/drivers/vdpa/mlx5/mlx5_vdpa.h\n+++ b/drivers/vdpa/mlx5/mlx5_vdpa.h\n@@ -119,9 +119,9 @@ enum {\n struct mlx5_vdpa_priv {\n \tTAILQ_ENTRY(mlx5_vdpa_priv) next;\n \tuint8_t configured;\n-\tpthread_mutex_t vq_config_lock;\n+\trte_thread_mutex vq_config_lock;\n \tuint64_t no_traffic_counter;\n-\tpthread_t timer_tid;\n+\trte_thread_t timer_tid;\n \tint event_mode;\n \tint event_core; /* Event thread cpu affinity core. */\n \tuint32_t event_us;\ndiff --git a/drivers/vdpa/mlx5/mlx5_vdpa_event.c b/drivers/vdpa/mlx5/mlx5_vdpa_event.c\nindex 88f6a4256d..992dcd9702 100644\n--- a/drivers/vdpa/mlx5/mlx5_vdpa_event.c\n+++ b/drivers/vdpa/mlx5/mlx5_vdpa_event.c\n@@ -285,7 +285,7 @@ mlx5_vdpa_event_handle(void *arg)\n \tcase MLX5_VDPA_EVENT_MODE_FIXED_TIMER:\n \t\tpriv->timer_delay_us = priv->event_us;\n \t\twhile (1) {\n-\t\t\tpthread_mutex_lock(&priv->vq_config_lock);\n+\t\t\trte_thread_mutex_lock(&priv->vq_config_lock);\n \t\t\tmax = mlx5_vdpa_queues_complete(priv);\n \t\t\tif (max == 0 && priv->no_traffic_counter++ >=\n \t\t\t    priv->no_traffic_max) {\n@@ -293,10 +293,10 @@ mlx5_vdpa_event_handle(void *arg)\n \t\t\t\t\tpriv->vdev->device->name);\n \t\t\t\tmlx5_vdpa_arm_all_cqs(priv);\n \t\t\t\tdo {\n-\t\t\t\t\tpthread_mutex_unlock\n+\t\t\t\t\trte_thread_mutex_unlock\n \t\t\t\t\t\t\t(&priv->vq_config_lock);\n \t\t\t\t\tcq = mlx5_vdpa_event_wait(priv);\n-\t\t\t\t\tpthread_mutex_lock\n+\t\t\t\t\trte_thread_mutex_lock\n \t\t\t\t\t\t\t(&priv->vq_config_lock);\n \t\t\t\t\tif (cq == NULL ||\n \t\t\t\t\t       mlx5_vdpa_queue_complete(cq) > 0)\n@@ -307,7 +307,7 @@ mlx5_vdpa_event_handle(void *arg)\n \t\t\t} else if (max != 0) {\n \t\t\t\tpriv->no_traffic_counter = 0;\n \t\t\t}\n-\t\t\tpthread_mutex_unlock(&priv->vq_config_lock);\n+\t\t\trte_thread_mutex_unlock(&priv->vq_config_lock);\n \t\t\tmlx5_vdpa_timer_sleep(priv, max);\n \t\t}\n \t\treturn NULL;\n@@ -315,10 +315,10 @@ mlx5_vdpa_event_handle(void *arg)\n \t\tdo {\n \t\t\tcq = mlx5_vdpa_event_wait(priv);\n \t\t\tif (cq != NULL) {\n-\t\t\t\tpthread_mutex_lock(&priv->vq_config_lock);\n+\t\t\t\trte_thread_mutex_lock(&priv->vq_config_lock);\n \t\t\t\tif (mlx5_vdpa_queue_complete(cq) > 0)\n \t\t\t\t\tmlx5_vdpa_cq_arm(priv, cq);\n-\t\t\t\tpthread_mutex_unlock(&priv->vq_config_lock);\n+\t\t\t\trte_thread_mutex_unlock(&priv->vq_config_lock);\n \t\t\t}\n \t\t} while (1);\n \t\treturn NULL;\n@@ -340,7 +340,7 @@ mlx5_vdpa_err_interrupt_handler(void *cb_arg __rte_unused)\n \tstruct mlx5_vdpa_virtq *virtq;\n \tuint64_t sec;\n \n-\tpthread_mutex_lock(&priv->vq_config_lock);\n+\trte_thread_mutex_lock(&priv->vq_config_lock);\n \twhile (mlx5_glue->devx_get_event(priv->err_chnl, &out.event_resp,\n \t\t\t\t\t sizeof(out.buf)) >=\n \t\t\t\t       (ssize_t)sizeof(out.event_resp.cookie)) {\n@@ -386,7 +386,7 @@ mlx5_vdpa_err_interrupt_handler(void *cb_arg __rte_unused)\n \t\t\tvirtq->err_time[i - 1] = virtq->err_time[i];\n \t\tvirtq->err_time[RTE_DIM(virtq->err_time) - 1] = rte_rdtsc();\n \t}\n-\tpthread_mutex_unlock(&priv->vq_config_lock);\n+\trte_thread_mutex_unlock(&priv->vq_config_lock);\n #endif\n }\n \n@@ -473,28 +473,23 @@ mlx5_vdpa_cqe_event_setup(struct mlx5_vdpa_priv *priv)\n {\n \tint ret;\n \trte_cpuset_t cpuset;\n-\tpthread_attr_t attr;\n+\trte_thread_attr_t attr;\n \tchar name[16];\n-\tconst struct sched_param sp = {\n-\t\t.sched_priority = sched_get_priority_max(SCHED_RR),\n-\t};\n \n \tif (!priv->eventc)\n \t\t/* All virtqs are in poll mode. */\n \t\treturn 0;\n-\tpthread_attr_init(&attr);\n-\tret = pthread_attr_setschedpolicy(&attr, SCHED_RR);\n-\tif (ret) {\n-\t\tDRV_LOG(ERR, \"Failed to set thread sched policy = RR.\");\n-\t\treturn -1;\n-\t}\n-\tret = pthread_attr_setschedparam(&attr, &sp);\n+\n+\trte_thread_attr_init(&attr);\n+\tret = rte_thread_attr_set_priority(&attr,\n+\t\t\tRTE_THREAD_PRIORITY_REALTIME_CRITICAL);\n \tif (ret) {\n \t\tDRV_LOG(ERR, \"Failed to set thread priority.\");\n \t\treturn -1;\n \t}\n-\tret = pthread_create(&priv->timer_tid, &attr, mlx5_vdpa_event_handle,\n-\t\t\t     (void *)priv);\n+\n+\tret = rte_thread_create(&priv->timer_tid, &attr, mlx5_vdpa_event_handle,\n+\t\t\t(void *)priv);\n \tif (ret) {\n \t\tDRV_LOG(ERR, \"Failed to create timer thread.\");\n \t\treturn -1;\n@@ -504,13 +499,13 @@ mlx5_vdpa_cqe_event_setup(struct mlx5_vdpa_priv *priv)\n \t\tCPU_SET(priv->event_core, &cpuset);\n \telse\n \t\tcpuset = rte_lcore_cpuset(rte_get_main_lcore());\n-\tret = pthread_setaffinity_np(priv->timer_tid, sizeof(cpuset), &cpuset);\n+\tret = rte_thread_set_affinity_by_id(priv->timer_tid, &cpuset);\n \tif (ret) {\n \t\tDRV_LOG(ERR, \"Failed to set thread affinity.\");\n \t\treturn -1;\n \t}\n \tsnprintf(name, sizeof(name), \"vDPA-mlx5-%d\", priv->vid);\n-\tret = rte_thread_setname(priv->timer_tid, name);\n+\tret = rte_thread_name_set(priv->timer_tid, name);\n \tif (ret)\n \t\tDRV_LOG(DEBUG, \"Cannot set timer thread name.\");\n \treturn 0;\n@@ -519,13 +514,11 @@ mlx5_vdpa_cqe_event_setup(struct mlx5_vdpa_priv *priv)\n void\n mlx5_vdpa_cqe_event_unset(struct mlx5_vdpa_priv *priv)\n {\n-\tvoid *status;\n-\n-\tif (priv->timer_tid) {\n-\t\tpthread_cancel(priv->timer_tid);\n-\t\tpthread_join(priv->timer_tid, &status);\n+\tif (priv->timer_tid.opaque_id) {\n+\t\tpthread_cancel(priv->timer_tid.opaque_id);\n+\t\trte_thread_join(priv->timer_tid, NULL);\n \t}\n-\tpriv->timer_tid = 0;\n+\tpriv->timer_tid.opaque_id = 0;\n }\n \n void\ndiff --git a/examples/kni/main.c b/examples/kni/main.c\nindex beabb3c848..601c9838a2 100644\n--- a/examples/kni/main.c\n+++ b/examples/kni/main.c\n@@ -16,6 +16,7 @@\n #include <linux/if.h>\n #include <linux/if_tun.h>\n #include <fcntl.h>\n+#include <pthread.h>\n #include <sys/ioctl.h>\n #include <unistd.h>\n #include <signal.h>\ndiff --git a/examples/performance-thread/pthread_shim/pthread_shim.h b/examples/performance-thread/pthread_shim/pthread_shim.h\nindex e90fb15fc1..9979cc6cdb 100644\n--- a/examples/performance-thread/pthread_shim/pthread_shim.h\n+++ b/examples/performance-thread/pthread_shim/pthread_shim.h\n@@ -6,6 +6,7 @@\n #define _PTHREAD_SHIM_H_\n \n #include <rte_lcore.h>\n+#include <pthread.h>\n \n /*\n  * This pthread shim is an example that demonstrates how legacy code\n",
    "prefixes": [
        "v2",
        "3/6"
    ]
}