get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 94534,
    "url": "https://patches.dpdk.org/api/patches/94534/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/1624067878-2130-3-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-3-git-send-email-navasile@linux.microsoft.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1624067878-2130-3-git-send-email-navasile@linux.microsoft.com",
    "date": "2021-06-19T01:57:54",
    "name": "[v2,2/6] eal: add function for control thread creation",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "238c3fd47706e15f11fba1ce04706be9559ba217",
    "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-3-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/94534/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/94534/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 36EA2A0A0C;\n\tSat, 19 Jun 2021 03:58:13 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id AB46940E32;\n\tSat, 19 Jun 2021 03:58:12 +0200 (CEST)",
            "from linux.microsoft.com (linux.microsoft.com [13.77.154.182])\n by mails.dpdk.org (Postfix) with ESMTP id 22B5940696\n for <dev@dpdk.org>; Sat, 19 Jun 2021 03:58:11 +0200 (CEST)",
            "by linux.microsoft.com (Postfix, from userid 1059)\n id 69A8520B6AEE; Fri, 18 Jun 2021 18:58:10 -0700 (PDT)"
        ],
        "DKIM-Filter": "OpenDKIM Filter v2.11.0 linux.microsoft.com 69A8520B6AEE",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com;\n s=default; t=1624067890;\n bh=JnoqRbwQvWfl6C+84wDuVi6CbkoVqD5S0VlamIV3/mc=;\n h=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n b=QRDPQPl8LvTUn8tkbNg8p0BhBgna+p8awsz1H2Z9sngPrJR7EfclPFLrbXHcjfwts\n aAmVIBJ90iNU/q9BZhzbnEcCJmQR8DZpAp05VIoTEO9Zss1X71OJqEz7LPMpsrhzo0\n ZmSlvW/vQnuk8vvOICGc3329LywVqWb61CSk6+b0=",
        "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:54 -0700",
        "Message-Id": "<1624067878-2130-3-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 2/6] eal: add function for control thread\n creation",
        "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\nThe existing rte_ctrl_thread_create() function will be replaced\nwith rte_thread_ctrl_thread_create() that uses the internal\nEAL thread API.\n\nThis patch only introduces the new control thread creation\nfunction. Replacing of the old function needs to be done according\nto the ABI change procedures, to avoid an ABI break.\n\nDepends-on: series-17402 (\"eal: Add EAL API for threading\")\n\nSigned-off-by: Narcisa Vasile <navasile@microsoft.com>\n---\n lib/eal/common/eal_common_thread.c | 81 ++++++++++++++++++++++++++++++\n lib/eal/include/rte_thread.h       | 27 ++++++++++\n lib/eal/version.map                |  1 +\n 3 files changed, 109 insertions(+)",
    "diff": "diff --git a/lib/eal/common/eal_common_thread.c b/lib/eal/common/eal_common_thread.c\nindex 1a52f42a2b..79545c67d9 100644\n--- a/lib/eal/common/eal_common_thread.c\n+++ b/lib/eal/common/eal_common_thread.c\n@@ -259,6 +259,87 @@ rte_ctrl_thread_create(pthread_t *thread, const char *name,\n \treturn -ret;\n }\n \n+struct rte_thread_ctrl_ctx {\n+\trte_thread_func start_routine;\n+\tvoid *arg;\n+\tconst char *name;\n+};\n+\n+static void *ctrl_thread_wrapper(void *arg)\n+{\n+\tstruct internal_config *conf = eal_get_internal_configuration();\n+\trte_cpuset_t *cpuset = &conf->ctrl_cpuset;\n+\tstruct rte_thread_ctrl_ctx *ctx = arg;\n+\trte_thread_func start_routine = ctx->start_routine;\n+\tvoid *routine_arg = ctx->arg;\n+\n+\t__rte_thread_init(rte_lcore_id(), cpuset);\n+\n+\tif (ctx->name != NULL) {\n+\t\tif (rte_thread_name_set(rte_thread_self(), ctx->name) < 0)\n+\t\t\tRTE_LOG(DEBUG, EAL, \"Cannot set name for ctrl thread\\n\");\n+\t}\n+\n+\tfree(arg);\n+\n+\treturn start_routine(routine_arg);\n+}\n+\n+int\n+rte_thread_ctrl_thread_create(rte_thread_t *thread, const char *name,\n+\t\trte_thread_func start_routine, void *arg)\n+{\n+\tint ret;\n+\trte_thread_attr_t attr;\n+\tstruct internal_config *conf = eal_get_internal_configuration();\n+\trte_cpuset_t *cpuset = &conf->ctrl_cpuset;\n+\tstruct rte_thread_ctrl_ctx *ctx = NULL;\n+\n+\tif (start_routine == NULL) {\n+\t\tret = EINVAL;\n+\t\tgoto cleanup;\n+\t}\n+\n+\tctx = malloc(sizeof(*ctx));\n+\tif (ctx == NULL) {\n+\t\tret = ENOMEM;\n+\t\tgoto cleanup;\n+\t}\n+\n+\tctx->start_routine = start_routine;\n+\tctx->arg = arg;\n+\tctx->name = name;\n+\n+\tret = rte_thread_attr_init(&attr);\n+\tif (ret != 0) {\n+\t\tRTE_LOG(DEBUG, EAL, \"Cannot init ctrl thread attributes\\n\");\n+\t\tgoto cleanup;\n+\t}\n+\n+\tret = rte_thread_attr_set_affinity(&attr, cpuset);\n+\tif (ret != 0) {\n+\t\tRTE_LOG(DEBUG, EAL, \"Cannot set afifnity attribute for ctrl thread\\n\");\n+\t\tgoto cleanup;\n+\t}\n+\tret = rte_thread_attr_set_priority(&attr, RTE_THREAD_PRIORITY_NORMAL);\n+\tif (ret != 0) {\n+\t\tRTE_LOG(DEBUG, EAL, \"Cannot set priority attribute for ctrl thread\\n\");\n+\t\tgoto cleanup;\n+\t}\n+\n+\tret = rte_thread_create(thread, &attr, ctrl_thread_wrapper, ctx);\n+\tif (ret != 0) {\n+\t\tRTE_LOG(DEBUG, EAL, \"Cannot create ctrl thread\\n\");\n+\t\tgoto cleanup;\n+\t}\n+\n+\treturn 0;\n+\n+cleanup:\n+\tfree(ctx);\n+\treturn ret;\n+}\n+\n int\n rte_thread_register(void)\n {\ndiff --git a/lib/eal/include/rte_thread.h b/lib/eal/include/rte_thread.h\nindex c65cfd8c9e..4da800ae27 100644\n--- a/lib/eal/include/rte_thread.h\n+++ b/lib/eal/include/rte_thread.h\n@@ -457,6 +457,33 @@ int rte_thread_barrier_destroy(rte_thread_barrier *barrier);\n __rte_experimental\n int rte_thread_name_set(rte_thread_t thread_id, const char *name);\n \n+/**\n+ * Create a control thread.\n+ *\n+ * Set affinity and thread name. The affinity of the new thread is based\n+ * on the CPU affinity retrieved at the time rte_eal_init() was called,\n+ * the dataplane and service lcores are then excluded.\n+ *\n+ * @param thread\n+ *   Filled with the thread id of the new created thread.\n+ *\n+ * @param name\n+ *   The name of the control thread (max 16 characters including '\\0').\n+ *\n+ * @param start_routine\n+ *   Function to be executed by the new thread.\n+ *\n+ * @param arg\n+ *   Argument passed to start_routine.\n+ *\n+ * @return\n+ *   On success, return 0;\n+ *   On failure, return a positive errno-style error number.\n+ */\n+__rte_experimental\n+int rte_thread_ctrl_thread_create(rte_thread_t *thread, const char *name,\n+\t\trte_thread_func start_routine, void *arg);\n+\n /**\n  * Create a TLS data key visible to all threads in the process.\n  * the created key is later used to get/set a value.\ndiff --git a/lib/eal/version.map b/lib/eal/version.map\nindex 2a566c04af..02455a1c8d 100644\n--- a/lib/eal/version.map\n+++ b/lib/eal/version.map\n@@ -444,6 +444,7 @@ EXPERIMENTAL {\n \trte_thread_barrier_wait;\n \trte_thread_barrier_destroy;\n \trte_thread_name_set;\n+\trte_thread_ctrl_thread_create;\n };\n \n INTERNAL {\n",
    "prefixes": [
        "v2",
        "2/6"
    ]
}