get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 71971,
    "url": "http://patches.dpdk.org/api/patches/71971/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20200622132531.21857-4-david.marchand@redhat.com/",
    "project": {
        "id": 1,
        "url": "http://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": "<20200622132531.21857-4-david.marchand@redhat.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20200622132531.21857-4-david.marchand@redhat.com",
    "date": "2020-06-22T13:25:25",
    "name": "[v3,3/9] eal: introduce thread init helper",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "d16b4d0b31707a2427a3046c5947c0559a238e53",
    "submitter": {
        "id": 1173,
        "url": "http://patches.dpdk.org/api/people/1173/?format=api",
        "name": "David Marchand",
        "email": "david.marchand@redhat.com"
    },
    "delegate": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20200622132531.21857-4-david.marchand@redhat.com/mbox/",
    "series": [
        {
            "id": 10551,
            "url": "http://patches.dpdk.org/api/series/10551/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=10551",
            "date": "2020-06-22T13:25:22",
            "name": "Register non-EAL threads as lcore",
            "version": 3,
            "mbox": "http://patches.dpdk.org/series/10551/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/71971/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/71971/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 dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 664F3A0519;\n\tMon, 22 Jun 2020 15:26:28 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id DFC2B1D6EB;\n\tMon, 22 Jun 2020 15:26:13 +0200 (CEST)",
            "from us-smtp-delivery-1.mimecast.com (us-smtp-2.mimecast.com\n [207.211.31.81]) by dpdk.org (Postfix) with ESMTP id C7E131D6ED\n for <dev@dpdk.org>; Mon, 22 Jun 2020 15:26:11 +0200 (CEST)",
            "from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com\n [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id\n us-mta-229-p5OELwifPY64VdLBAQOT6g-1; Mon, 22 Jun 2020 09:26:05 -0400",
            "from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com\n [10.5.11.11])\n (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n (No client certificate requested)\n by mimecast-mx01.redhat.com (Postfix) with ESMTPS id B8D3F800053;\n Mon, 22 Jun 2020 13:26:03 +0000 (UTC)",
            "from dmarchan.remote.csb (unknown [10.40.193.229])\n by smtp.corp.redhat.com (Postfix) with ESMTP id 729F371671;\n Mon, 22 Jun 2020 13:26:00 +0000 (UTC)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1592832369;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=9zTPi/8u5JOSyLh9kfSFIm6TQC9+SZQeMQ3QtXTKuEE=;\n b=EuvKVS3crK9HTCSKwMYp6bq7JjE6Ehq+MkZHpK9DWs+RgOm3N6x1snGjRVlddNZ/xbVC0J\n FhSV4MKQLbCIxUCErAsM014BApZ5LD5NmvvUd4vjnSZxKPrxcbuRqY7WiqBMQuvP0ZWHE4\n QHg9tICMHaa2qRVDytUHBrFAPcS6olE=",
        "X-MC-Unique": "p5OELwifPY64VdLBAQOT6g-1",
        "From": "David Marchand <david.marchand@redhat.com>",
        "To": "dev@dpdk.org",
        "Cc": "jerinjacobk@gmail.com, bruce.richardson@intel.com, mdr@ashroe.eu,\n ktraynor@redhat.com, ian.stokes@intel.com, i.maximets@ovn.org,\n Harini Ramakrishnan <harini.ramakrishnan@microsoft.com>,\n Omar Cardona <ocardona@microsoft.com>,\n Pallavi Kadam <pallavi.kadam@intel.com>,\n Ranjit Menon <ranjit.menon@intel.com>",
        "Date": "Mon, 22 Jun 2020 15:25:25 +0200",
        "Message-Id": "<20200622132531.21857-4-david.marchand@redhat.com>",
        "In-Reply-To": "<20200622132531.21857-1-david.marchand@redhat.com>",
        "References": "<20200610144506.30505-1-david.marchand@redhat.com>\n <20200622132531.21857-1-david.marchand@redhat.com>",
        "MIME-Version": "1.0",
        "X-Scanned-By": "MIMEDefang 2.79 on 10.5.11.11",
        "X-Mimecast-Spam-Score": "0",
        "X-Mimecast-Originator": "redhat.com",
        "Content-Type": "text/plain; charset=US-ASCII",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [PATCH v3 3/9] eal: introduce thread init helper",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "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": "Introduce a helper responsible for initialising the per thread context.\nWe can then have a unified context for EAL and non-EAL threads and\nremove copy/paste'd OS-specific helpers.\n\nPer EAL thread CPU affinity setting is separated from the thread init.\nIt is to accommodate with Windows EAL where CPU affinity is not set at\nthe moment.\nBesides, having affinity set by the master lcore in FreeBSD and Linux\nwill make it possible to detect errors rather than panic in the child\nthread. But the cleanup when such an event happens is left for later.\n\nSigned-off-by: David Marchand <david.marchand@redhat.com>\n---\nChanges since v1:\n- rebased on master, removed Windows workarounds wrt gettid and traces\n  support,\n\n---\n lib/librte_eal/common/eal_common_thread.c | 51 +++++++++++++----------\n lib/librte_eal/common/eal_thread.h        |  8 ++--\n lib/librte_eal/freebsd/eal.c              | 14 ++++++-\n lib/librte_eal/freebsd/eal_thread.c       | 32 +-------------\n lib/librte_eal/linux/eal.c                | 15 ++++++-\n lib/librte_eal/linux/eal_thread.c         | 32 +-------------\n lib/librte_eal/windows/eal.c              |  3 +-\n lib/librte_eal/windows/eal_thread.c       | 10 +----\n 8 files changed, 66 insertions(+), 99 deletions(-)",
    "diff": "diff --git a/lib/librte_eal/common/eal_common_thread.c b/lib/librte_eal/common/eal_common_thread.c\nindex 280c64bb76..afb30236c5 100644\n--- a/lib/librte_eal/common/eal_common_thread.c\n+++ b/lib/librte_eal/common/eal_common_thread.c\n@@ -71,20 +71,10 @@ eal_cpuset_socket_id(rte_cpuset_t *cpusetp)\n \treturn socket_id;\n }\n \n-int\n-rte_thread_set_affinity(rte_cpuset_t *cpusetp)\n+static void\n+thread_update_affinity(rte_cpuset_t *cpusetp)\n {\n-\tint s;\n-\tunsigned lcore_id;\n-\tpthread_t tid;\n-\n-\ttid = pthread_self();\n-\n-\ts = pthread_setaffinity_np(tid, sizeof(rte_cpuset_t), cpusetp);\n-\tif (s != 0) {\n-\t\tRTE_LOG(ERR, EAL, \"pthread_setaffinity_np failed\\n\");\n-\t\treturn -1;\n-\t}\n+\tunsigned int lcore_id = rte_lcore_id();\n \n \t/* store socket_id in TLS for quick access */\n \tRTE_PER_LCORE(_socket_id) =\n@@ -94,14 +84,24 @@ rte_thread_set_affinity(rte_cpuset_t *cpusetp)\n \tmemmove(&RTE_PER_LCORE(_cpuset), cpusetp,\n \t\tsizeof(rte_cpuset_t));\n \n-\tlcore_id = rte_lcore_id();\n \tif (lcore_id != (unsigned)LCORE_ID_ANY) {\n \t\t/* EAL thread will update lcore_config */\n \t\tlcore_config[lcore_id].socket_id = RTE_PER_LCORE(_socket_id);\n \t\tmemmove(&lcore_config[lcore_id].cpuset, cpusetp,\n \t\t\tsizeof(rte_cpuset_t));\n \t}\n+}\n \n+int\n+rte_thread_set_affinity(rte_cpuset_t *cpusetp)\n+{\n+\tif (pthread_setaffinity_np(pthread_self(), sizeof(rte_cpuset_t),\n+\t\t\tcpusetp) != 0) {\n+\t\tRTE_LOG(ERR, EAL, \"pthread_setaffinity_np failed\\n\");\n+\t\treturn -1;\n+\t}\n+\n+\tthread_update_affinity(cpusetp);\n \treturn 0;\n }\n \n@@ -147,6 +147,19 @@ eal_thread_dump_affinity(char *str, unsigned size)\n \treturn ret;\n }\n \n+void\n+rte_thread_init(unsigned int lcore_id, rte_cpuset_t *cpuset)\n+{\n+\t/* set the lcore ID in per-lcore memory area */\n+\tRTE_PER_LCORE(_lcore_id) = lcore_id;\n+\n+\t/* acquire system unique id  */\n+\trte_gettid();\n+\n+\tthread_update_affinity(cpuset);\n+\n+\t__rte_trace_mem_per_thread_alloc();\n+}\n \n struct rte_thread_ctrl_params {\n \tvoid *(*start_routine)(void *);\n@@ -154,16 +167,14 @@ struct rte_thread_ctrl_params {\n \tpthread_barrier_t configured;\n };\n \n-static void *rte_thread_init(void *arg)\n+static void *ctrl_thread_init(void *arg)\n {\n \tint ret;\n-\trte_cpuset_t *cpuset = &internal_config.ctrl_cpuset;\n \tstruct rte_thread_ctrl_params *params = arg;\n \tvoid *(*start_routine)(void *) = params->start_routine;\n \tvoid *routine_arg = params->arg;\n \n-\t/* Store cpuset in TLS for quick access */\n-\tmemmove(&RTE_PER_LCORE(_cpuset), cpuset, sizeof(rte_cpuset_t));\n+\trte_thread_init(rte_lcore_id(), &internal_config.ctrl_cpuset);\n \n \tret = pthread_barrier_wait(&params->configured);\n \tif (ret == PTHREAD_BARRIER_SERIAL_THREAD) {\n@@ -171,8 +182,6 @@ static void *rte_thread_init(void *arg)\n \t\tfree(params);\n \t}\n \n-\t__rte_trace_mem_per_thread_alloc();\n-\n \treturn start_routine(routine_arg);\n }\n \n@@ -194,7 +203,7 @@ rte_ctrl_thread_create(pthread_t *thread, const char *name,\n \n \tpthread_barrier_init(&params->configured, NULL, 2);\n \n-\tret = pthread_create(thread, attr, rte_thread_init, (void *)params);\n+\tret = pthread_create(thread, attr, ctrl_thread_init, (void *)params);\n \tif (ret != 0) {\n \t\tfree(params);\n \t\treturn -ret;\ndiff --git a/lib/librte_eal/common/eal_thread.h b/lib/librte_eal/common/eal_thread.h\nindex b40ed249ed..da5e7c93ba 100644\n--- a/lib/librte_eal/common/eal_thread.h\n+++ b/lib/librte_eal/common/eal_thread.h\n@@ -16,12 +16,14 @@\n __rte_noreturn void *eal_thread_loop(void *arg);\n \n /**\n- * Init per-lcore info for master thread\n+ * Init per-lcore info in current thread.\n  *\n  * @param lcore_id\n- *   identifier of master lcore\n+ *   identifier of lcore.\n+ * @param cpuset\n+ *   CPU affinity for this thread.\n  */\n-void eal_thread_init_master(unsigned lcore_id);\n+void rte_thread_init(unsigned int lcore_id, rte_cpuset_t *cpuset);\n \n /**\n  * Get the NUMA socket id from cpu id.\ndiff --git a/lib/librte_eal/freebsd/eal.c b/lib/librte_eal/freebsd/eal.c\nindex c41f265fac..b5ea11df16 100644\n--- a/lib/librte_eal/freebsd/eal.c\n+++ b/lib/librte_eal/freebsd/eal.c\n@@ -877,7 +877,14 @@ rte_eal_init(int argc, char **argv)\n \n \teal_check_mem_on_local_socket();\n \n-\teal_thread_init_master(rte_config.master_lcore);\n+\tif (pthread_setaffinity_np(pthread_self(), sizeof(rte_cpuset_t),\n+\t\t\t&lcore_config[rte_config.master_lcore].cpuset) != 0) {\n+\t\trte_eal_init_alert(\"Cannot set affinity\");\n+\t\trte_errno = EINVAL;\n+\t\treturn -1;\n+\t}\n+\trte_thread_init(rte_config.master_lcore,\n+\t\t&lcore_config[rte_config.master_lcore].cpuset);\n \n \tret = eal_thread_dump_affinity(cpuset, sizeof(cpuset));\n \n@@ -908,6 +915,11 @@ rte_eal_init(int argc, char **argv)\n \t\tsnprintf(thread_name, sizeof(thread_name),\n \t\t\t\t\"lcore-slave-%d\", i);\n \t\trte_thread_setname(lcore_config[i].thread_id, thread_name);\n+\n+\t\tret = pthread_setaffinity_np(lcore_config[i].thread_id,\n+\t\t\tsizeof(rte_cpuset_t), &lcore_config[i].cpuset);\n+\t\tif (ret != 0)\n+\t\t\trte_panic(\"Cannot set affinity\\n\");\n \t}\n \n \t/*\ndiff --git a/lib/librte_eal/freebsd/eal_thread.c b/lib/librte_eal/freebsd/eal_thread.c\nindex 40676d9ef5..c1fb8eb2d8 100644\n--- a/lib/librte_eal/freebsd/eal_thread.c\n+++ b/lib/librte_eal/freebsd/eal_thread.c\n@@ -66,29 +66,6 @@ rte_eal_remote_launch(int (*f)(void *), void *arg, unsigned slave_id)\n \treturn rc;\n }\n \n-/* set affinity for current thread */\n-static int\n-eal_thread_set_affinity(void)\n-{\n-\tunsigned lcore_id = rte_lcore_id();\n-\n-\t/* acquire system unique id  */\n-\trte_gettid();\n-\n-\t/* update EAL thread core affinity */\n-\treturn rte_thread_set_affinity(&lcore_config[lcore_id].cpuset);\n-}\n-\n-void eal_thread_init_master(unsigned lcore_id)\n-{\n-\t/* set the lcore ID in per-lcore memory area */\n-\tRTE_PER_LCORE(_lcore_id) = lcore_id;\n-\n-\t/* set CPU affinity */\n-\tif (eal_thread_set_affinity() < 0)\n-\t\trte_panic(\"cannot set affinity\\n\");\n-}\n-\n /* main loop of threads */\n __rte_noreturn void *\n eal_thread_loop(__rte_unused void *arg)\n@@ -113,19 +90,12 @@ eal_thread_loop(__rte_unused void *arg)\n \tm2s = lcore_config[lcore_id].pipe_master2slave[0];\n \ts2m = lcore_config[lcore_id].pipe_slave2master[1];\n \n-\t/* set the lcore ID in per-lcore memory area */\n-\tRTE_PER_LCORE(_lcore_id) = lcore_id;\n-\n-\t/* set CPU affinity */\n-\tif (eal_thread_set_affinity() < 0)\n-\t\trte_panic(\"cannot set affinity\\n\");\n+\trte_thread_init(lcore_id, &lcore_config[lcore_id].cpuset);\n \n \tret = eal_thread_dump_affinity(cpuset, sizeof(cpuset));\n-\n \tRTE_LOG(DEBUG, EAL, \"lcore %u is ready (tid=%p;cpuset=[%s%s])\\n\",\n \t\tlcore_id, thread_id, cpuset, ret == 0 ? \"\" : \"...\");\n \n-\t__rte_trace_mem_per_thread_alloc();\n \trte_eal_trace_thread_lcore_ready(lcore_id, cpuset);\n \n \t/* read on our pipe to get commands */\ndiff --git a/lib/librte_eal/linux/eal.c b/lib/librte_eal/linux/eal.c\nindex f162124a37..8638376b8a 100644\n--- a/lib/librte_eal/linux/eal.c\n+++ b/lib/librte_eal/linux/eal.c\n@@ -1205,10 +1205,16 @@ rte_eal_init(int argc, char **argv)\n \n \teal_check_mem_on_local_socket();\n \n-\teal_thread_init_master(rte_config.master_lcore);\n+\tif (pthread_setaffinity_np(pthread_self(), sizeof(rte_cpuset_t),\n+\t\t\t&lcore_config[rte_config.master_lcore].cpuset) != 0) {\n+\t\trte_eal_init_alert(\"Cannot set affinity\");\n+\t\trte_errno = EINVAL;\n+\t\treturn -1;\n+\t}\n+\trte_thread_init(rte_config.master_lcore,\n+\t\t&lcore_config[rte_config.master_lcore].cpuset);\n \n \tret = eal_thread_dump_affinity(cpuset, sizeof(cpuset));\n-\n \tRTE_LOG(DEBUG, EAL, \"Master lcore %u is ready (tid=%zx;cpuset=[%s%s])\\n\",\n \t\trte_config.master_lcore, (uintptr_t)thread_id, cpuset,\n \t\tret == 0 ? \"\" : \"...\");\n@@ -1240,6 +1246,11 @@ rte_eal_init(int argc, char **argv)\n \t\tif (ret != 0)\n \t\t\tRTE_LOG(DEBUG, EAL,\n \t\t\t\t\"Cannot set name for lcore thread\\n\");\n+\n+\t\tret = pthread_setaffinity_np(lcore_config[i].thread_id,\n+\t\t\tsizeof(rte_cpuset_t), &lcore_config[i].cpuset);\n+\t\tif (ret != 0)\n+\t\t\trte_panic(\"Cannot set affinity\\n\");\n \t}\n \n \t/*\ndiff --git a/lib/librte_eal/linux/eal_thread.c b/lib/librte_eal/linux/eal_thread.c\nindex a52ebef3a4..07aec0c44d 100644\n--- a/lib/librte_eal/linux/eal_thread.c\n+++ b/lib/librte_eal/linux/eal_thread.c\n@@ -66,29 +66,6 @@ rte_eal_remote_launch(int (*f)(void *), void *arg, unsigned slave_id)\n \treturn rc;\n }\n \n-/* set affinity for current EAL thread */\n-static int\n-eal_thread_set_affinity(void)\n-{\n-\tunsigned lcore_id = rte_lcore_id();\n-\n-\t/* acquire system unique id  */\n-\trte_gettid();\n-\n-\t/* update EAL thread core affinity */\n-\treturn rte_thread_set_affinity(&lcore_config[lcore_id].cpuset);\n-}\n-\n-void eal_thread_init_master(unsigned lcore_id)\n-{\n-\t/* set the lcore ID in per-lcore memory area */\n-\tRTE_PER_LCORE(_lcore_id) = lcore_id;\n-\n-\t/* set CPU affinity */\n-\tif (eal_thread_set_affinity() < 0)\n-\t\trte_panic(\"cannot set affinity\\n\");\n-}\n-\n /* main loop of threads */\n __rte_noreturn void *\n eal_thread_loop(__rte_unused void *arg)\n@@ -113,19 +90,12 @@ eal_thread_loop(__rte_unused void *arg)\n \tm2s = lcore_config[lcore_id].pipe_master2slave[0];\n \ts2m = lcore_config[lcore_id].pipe_slave2master[1];\n \n-\t/* set the lcore ID in per-lcore memory area */\n-\tRTE_PER_LCORE(_lcore_id) = lcore_id;\n-\n-\t/* set CPU affinity */\n-\tif (eal_thread_set_affinity() < 0)\n-\t\trte_panic(\"cannot set affinity\\n\");\n+\trte_thread_init(lcore_id, &lcore_config[lcore_id].cpuset);\n \n \tret = eal_thread_dump_affinity(cpuset, sizeof(cpuset));\n-\n \tRTE_LOG(DEBUG, EAL, \"lcore %u is ready (tid=%zx;cpuset=[%s%s])\\n\",\n \t\tlcore_id, (uintptr_t)thread_id, cpuset, ret == 0 ? \"\" : \"...\");\n \n-\t__rte_trace_mem_per_thread_alloc();\n \trte_eal_trace_thread_lcore_ready(lcore_id, cpuset);\n \n \t/* read on our pipe to get commands */\ndiff --git a/lib/librte_eal/windows/eal.c b/lib/librte_eal/windows/eal.c\nindex 427a5557fa..23de12ab43 100644\n--- a/lib/librte_eal/windows/eal.c\n+++ b/lib/librte_eal/windows/eal.c\n@@ -354,7 +354,8 @@ rte_eal_init(int argc, char **argv)\n \t\treturn -1;\n \t}\n \n-\teal_thread_init_master(rte_config.master_lcore);\n+\trte_thread_init(rte_config.master_lcore,\n+\t\t&lcore_config[rte_config.master_lcore].cpuset);\n \n \tRTE_LCORE_FOREACH_SLAVE(i) {\n \ndiff --git a/lib/librte_eal/windows/eal_thread.c b/lib/librte_eal/windows/eal_thread.c\nindex f12a2ec6ad..4f01881240 100644\n--- a/lib/librte_eal/windows/eal_thread.c\n+++ b/lib/librte_eal/windows/eal_thread.c\n@@ -53,13 +53,6 @@ rte_eal_remote_launch(lcore_function_t *f, void *arg, unsigned int slave_id)\n \treturn 0;\n }\n \n-void\n-eal_thread_init_master(unsigned int lcore_id)\n-{\n-\t/* set the lcore ID in per-lcore memory area */\n-\tRTE_PER_LCORE(_lcore_id) = lcore_id;\n-}\n-\n /* main loop of threads */\n void *\n eal_thread_loop(void *arg __rte_unused)\n@@ -84,8 +77,7 @@ eal_thread_loop(void *arg __rte_unused)\n \tm2s = lcore_config[lcore_id].pipe_master2slave[0];\n \ts2m = lcore_config[lcore_id].pipe_slave2master[1];\n \n-\t/* set the lcore ID in per-lcore memory area */\n-\tRTE_PER_LCORE(_lcore_id) = lcore_id;\n+\trte_thread_init(lcore_id, &lcore_config[lcore_id].cpuset);\n \n \tRTE_LOG(DEBUG, EAL, \"lcore %u is ready (tid=%zx;cpuset=[%s])\\n\",\n \t\tlcore_id, (uintptr_t)thread_id, cpuset);\n",
    "prefixes": [
        "v3",
        "3/9"
    ]
}