get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 117363,
    "url": "http://patches.dpdk.org/api/patches/117363/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/tencent_EDCE05CA1D5F6381B2FABD643B6FB936C909@qq.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": "<tencent_EDCE05CA1D5F6381B2FABD643B6FB936C909@qq.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/tencent_EDCE05CA1D5F6381B2FABD643B6FB936C909@qq.com",
    "date": "2022-10-05T04:09:51",
    "name": "[v5,09/10] memarea: detect memory corruption based on magic",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "20b0265a45084bc52b1b5ff80f735b93110025a7",
    "submitter": {
        "id": 2867,
        "url": "http://patches.dpdk.org/api/people/2867/?format=api",
        "name": "datshan",
        "email": "datshan@qq.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/tencent_EDCE05CA1D5F6381B2FABD643B6FB936C909@qq.com/mbox/",
    "series": [
        {
            "id": 24981,
            "url": "http://patches.dpdk.org/api/series/24981/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=24981",
            "date": "2022-10-05T04:09:43",
            "name": "[v5,01/10] memarea: introduce memarea library",
            "version": 5,
            "mbox": "http://patches.dpdk.org/series/24981/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/117363/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/117363/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 90958A0542;\n\tWed,  5 Oct 2022 06:10:43 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id B05D542B82;\n\tWed,  5 Oct 2022 06:10:11 +0200 (CEST)",
            "from out203-205-221-242.mail.qq.com (out203-205-221-242.mail.qq.com\n [203.205.221.242])\n by mails.dpdk.org (Postfix) with ESMTP id 672CC42B7B\n for <dev@dpdk.org>; Wed,  5 Oct 2022 06:10:09 +0200 (CEST)",
            "from qq.com ([120.229.93.179])\n by newxmesmtplogicsvrsza31.qq.com (NewEsmtp) with SMTP\n id 27598E97; Wed, 05 Oct 2022 12:09:53 +0800"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=qq.com; s=s201512;\n t=1664943007; bh=iFfQNb9bU7wXQev4mmnqW4n48Bba+VmYFGn37TYZ/jY=;\n h=From:To:Cc:Subject:Date:In-Reply-To:References;\n b=csmAdfAhRuPIh01onNMo6MBN3mxzMPzFLr6ZAZlcK+3ItS/278jy3SRqnX+zBL+Kv\n JbxVUAX2r5ASqpnuCfkUwoUCbonvuOAfCBuUPWm19Zr4YY7IVwsHWIwzPgf0N9bdog\n Q//i+1Gw0MG+xlRGohlewL38h0dcZz/iB+khBLK8=",
        "X-QQ-mid": "xmsmtpt1664943006tm17swfej",
        "Message-ID": "<tencent_EDCE05CA1D5F6381B2FABD643B6FB936C909@qq.com>",
        "X-QQ-XMAILINFO": "MGSlRwRrdVfImC/86xI5e+cn/NEdcA2RP/Hscp5pboW5yyk3m4MeSUpo1Dfnsr\n szFcorIuf09BW7dOc9nT84g2vG36slR4HDSv9ZwMn36akNq/8QIDs9t2NG5e4MR4crxT+meEfcX7\n UPes8ga+S06KVAj6hbXhwSpNNs1SuAPZJmeAXr5iZ/oMrfk24sQdh/2xGqDX2+iKEDpXusPhoUc7\n XD4Gd+1jZ5HzSfoPzK4y2qZhO42Q/tYycFn+4UkA3Jt2F3Q/2LyX+KKGIsTtnTESPdIqHZtv2x9g\n kW/bRBF3Z6nYbjfoHbwhIeLNeAWRUUuIijhDwtGNCgAQU9gDqbNLYLvnOErP/X6c6hMT9YGMn2/A\n cixubLkjoDTKQsF1HvKu9iPHe+L/hOAi4UuCgCT/8IFr80HYrjch5gmbqam5v3VGk8R+NAABu77C\n +GllXvRIAZo7j4oqHEXecvkL3sH/bufflz2cpXvW3ZX0730GBwGpavyB4sIpo1wV7rUZ2ZZsCeTy\n CvTWDD4Yzf5qkItaubxRjbuNrRRAsNxFXk4EGJDaJvAv8DSGfpKmh4BJlCbF6gGHY6aOqr//yZ6x\n TINLRU46N13o8D1QHK5YH+3UtO/IbIGQonoO83//AtMIibG2IRGgyio6mlTHquVDJzvRIrztX/sT\n roEPmnTn5kF+U5COY36oVfE1mhB+FPxjhzg5DmqT3ZjKrIbkQZwzNss6zesbSCPkDvZPYUB0veSL\n SKlRYArEM18B05alPbv79sKCSUj5FOblhIDTKdv474MNcIV5zx/obFVGZMV3E66VX1E9CADqwtjy\n cS/ZASRwWgIqTS6K5LiYFeS+nBXkYK2TRkwv4Z12OySHHkOWHDWvcU0av2wgm4QLMQ9PgPxsEiEZ\n n437ojjY+mdoP75hJU0CSjbGSX6SjKLKE4PEjuf3eHnrxG8alTmSy1wdCyVyCarjaN54dBsbPhMc\n xhJi8Y/6ZoZBaCKJkXrllz25iuuagr8fOGuaYJHzczJEZ9lRYFEGuVIQ2qBYWlwv+eKiDo9Czeiz\n u3hKHpOEmM23/zxammohI5wC5C/dF7N2HVYJxWPjYxgnUXch0z5k40471hWLQ=",
        "From": "datshan <datshan@qq.com>",
        "To": "david.marchand@redhat.com, mb@smartsharesystems.com,\n anatoly.burakov@intel.com, dmitry.kozliuk@gmail.com, jerinjacobk@gmail.com",
        "Cc": "thomas@monjalon.net, dev@dpdk.org, Chengwen Feng <fengchengwen@huawei.com>",
        "Subject": "[PATCH v5 09/10] memarea: detect memory corruption based on magic",
        "Date": "Wed,  5 Oct 2022 12:09:51 +0800",
        "X-OQ-MSGID": "<20221005040952.8166-10-datshan@qq.com>",
        "X-Mailer": "git-send-email 2.34.1",
        "In-Reply-To": "<20221005040952.8166-1-datshan@qq.com>",
        "References": "<20220721044648.6817-1-fengchengwen@huawei.com>\n <20221005040952.8166-1-datshan@qq.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "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"
    },
    "content": "From: Chengwen Feng <fengchengwen@huawei.com>\n\nThis patch provides lightweight mechanism for detecting memory\ncorruption which based on magic field in each element node.\n\nSigned-off-by: Chengwen Feng <fengchengwen@huawei.com>\n---\n lib/memarea/memarea_private.h |  2 ++\n lib/memarea/rte_memarea.c     | 29 ++++++++++++++++++++++++++---\n 2 files changed, 28 insertions(+), 3 deletions(-)",
    "diff": "diff --git a/lib/memarea/memarea_private.h b/lib/memarea/memarea_private.h\nindex 08735ca81f..4f5393e6f9 100644\n--- a/lib/memarea/memarea_private.h\n+++ b/lib/memarea/memarea_private.h\n@@ -7,10 +7,12 @@\n \n #include <rte_memarea.h>\n \n+#define MEMAREA_ELEM_MAGIC_NUM\t\t0xbeef1234\n #define MEMAREA_FREE_ELEM_COOKIE\t0xFFFFFFFF\n \n struct memarea_elem {\n \tsize_t   size;\n+\tuint32_t magic;\n \tuint32_t cookie;\n \tint32_t  refcnt; /* Non-zero indicates that it has been allocated */\n \tTAILQ_ENTRY(memarea_elem) elem_node;\ndiff --git a/lib/memarea/rte_memarea.c b/lib/memarea/rte_memarea.c\nindex f45191aa7f..6290e3449a 100644\n--- a/lib/memarea/rte_memarea.c\n+++ b/lib/memarea/rte_memarea.c\n@@ -135,6 +135,7 @@ rte_memarea_create(const struct rte_memarea_param *init)\n \tma->top_addr = (void *)((uintptr_t)addr + init->total_sz - 1);\n \telem = addr;\n \telem->size = init->total_sz - sizeof(struct memarea_elem);\n+\telem->magic = MEMAREA_ELEM_MAGIC_NUM;\n \telem->cookie = MEMAREA_FREE_ELEM_COOKIE;\n \telem->refcnt = 0;\n \tTAILQ_INSERT_TAIL(&ma->elem_list, elem, elem_node);\n@@ -194,6 +195,7 @@ memarea_add_node(struct rte_memarea *ma, struct memarea_elem *elem, size_t need_\n \tnew_elem = (struct memarea_elem *)((uintptr_t)elem + sizeof(struct memarea_elem) +\n \t\t\t\t\t   align_size);\n \tnew_elem->size = elem->size - align_size - sizeof(struct memarea_elem);\n+\tnew_elem->magic = MEMAREA_ELEM_MAGIC_NUM;\n \tnew_elem->cookie = MEMAREA_FREE_ELEM_COOKIE;\n \tnew_elem->refcnt = 0;\n \tTAILQ_INSERT_AFTER(&ma->elem_list, elem, new_elem, elem_node);\n@@ -221,6 +223,8 @@ rte_memarea_alloc(struct rte_memarea *ma, size_t size, uint32_t cookie)\n \n \tmemarea_lock(ma);\n \tTAILQ_FOREACH(elem, &ma->free_list, free_node) {\n+\t\tif (unlikely(elem->magic != MEMAREA_ELEM_MAGIC_NUM))\n+\t\t\tbreak;\n \t\tif (elem->size < size)\n \t\t\tcontinue;\n \t\tif (memarea_whether_add_node(elem->size, size))\n@@ -253,6 +257,7 @@ memarea_merge_node(struct rte_memarea *ma, struct memarea_elem *curr,\n {\n \tcurr->size += next->size + sizeof(struct memarea_elem);\n \tnext->size = 0;\n+\tnext->magic = ~MEMAREA_ELEM_MAGIC_NUM;\n \tnext->cookie = 0;\n \tTAILQ_REMOVE(&ma->elem_list, next, elem_node);\n \tif (del_next_from_free)\n@@ -295,6 +300,13 @@ rte_memarea_update_refcnt(struct rte_memarea *ma, void *ptr, int16_t value)\n \t\treturn;\n \n \tmemarea_lock(ma);\n+\tif (unlikely(elem->magic != MEMAREA_ELEM_MAGIC_NUM)) {\n+\t\tRTE_LOG(ERR, MEMAREA, \"memarea: %s magic: 0x%x check fail!\\n\",\n+\t\t\tma->init.name, elem->magic);\n+\t\tmemarea_unlock(ma);\n+\t\treturn;\n+\t}\n+\n \tif (ptr < ma->area_addr || ptr > ma->top_addr) {\n \t\trte_memarea_update_refcnt(ma->init.bak_memarea, ptr, value);\n \t\tmemarea_unlock(ma);\n@@ -348,8 +360,11 @@ memarea_elem_list_num(struct rte_memarea *ma)\n \tstruct memarea_elem *elem;\n \tuint32_t num = 0;\n \n-\tTAILQ_FOREACH(elem, &ma->elem_list, elem_node)\n+\tTAILQ_FOREACH(elem, &ma->elem_list, elem_node) {\n+\t\tif (elem->magic != MEMAREA_ELEM_MAGIC_NUM)\n+\t\t\tbreak;\n \t\tnum++;\n+\t}\n \n \treturn num;\n }\n@@ -360,8 +375,11 @@ memarea_free_list_num(struct rte_memarea *ma)\n \tstruct memarea_elem *elem;\n \tuint32_t num = 0;\n \n-\tTAILQ_FOREACH(elem, &ma->free_list, free_node)\n+\tTAILQ_FOREACH(elem, &ma->free_list, free_node) {\n+\t\tif (elem->magic != MEMAREA_ELEM_MAGIC_NUM)\n+\t\t\tbreak;\n \t\tnum++;\n+\t}\n \n \treturn num;\n }\n@@ -372,9 +390,14 @@ memarea_dump_all(struct rte_memarea *ma, FILE *f)\n \tstruct memarea_elem *elem;\n \n \tfprintf(f, \"  regions:\\n\");\n-\tTAILQ_FOREACH(elem, &ma->elem_list, elem_node)\n+\tTAILQ_FOREACH(elem, &ma->elem_list, elem_node) {\n+\t\tif (elem->magic != MEMAREA_ELEM_MAGIC_NUM) {\n+\t\t\tfprintf(f, \"    magic: 0x%x check fail!\\n\", elem->magic);\n+\t\t\tbreak;\n+\t\t}\n \t\tfprintf(f, \"    size: 0x%zx cookie: 0x%x refcnt: %d\\n\",\n \t\t\telem->size, elem->cookie, elem->refcnt);\n+\t}\n }\n \n int\n",
    "prefixes": [
        "v5",
        "09/10"
    ]
}