get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 68229,
    "url": "http://patches.dpdk.org/api/patches/68229/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1586740309-449310-4-git-send-email-suanmingm@mellanox.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": "<1586740309-449310-4-git-send-email-suanmingm@mellanox.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1586740309-449310-4-git-send-email-suanmingm@mellanox.com",
    "date": "2020-04-13T01:11:42",
    "name": "[03/10] net/mlx5: add trunk release for indexed pool",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "f6a0330a3c16314df855943fb1a5f2c964a2b55d",
    "submitter": {
        "id": 1358,
        "url": "http://patches.dpdk.org/api/people/1358/?format=api",
        "name": "Suanming Mou",
        "email": "suanmingm@mellanox.com"
    },
    "delegate": {
        "id": 3268,
        "url": "http://patches.dpdk.org/api/users/3268/?format=api",
        "username": "rasland",
        "first_name": "Raslan",
        "last_name": "Darawsheh",
        "email": "rasland@nvidia.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/1586740309-449310-4-git-send-email-suanmingm@mellanox.com/mbox/",
    "series": [
        {
            "id": 9321,
            "url": "http://patches.dpdk.org/api/series/9321/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=9321",
            "date": "2020-04-13T01:11:39",
            "name": "net/mlx5: optimize flow resource allocation",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/9321/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/68229/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/68229/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 745C4A0577;\n\tMon, 13 Apr 2020 03:12:28 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 46C542BFA;\n\tMon, 13 Apr 2020 03:12:04 +0200 (CEST)",
            "from git-send-mailer.rdmz.labs.mlnx (unknown [37.142.13.130])\n by dpdk.org (Postfix) with ESMTP id 7CC112BE9\n for <dev@dpdk.org>; Mon, 13 Apr 2020 03:12:01 +0200 (CEST)"
        ],
        "From": "Suanming Mou <suanmingm@mellanox.com>",
        "To": "Matan Azrad <matan@mellanox.com>, Shahaf Shuler <shahafs@mellanox.com>,\n Viacheslav Ovsiienko <viacheslavo@mellanox.com>",
        "Cc": "rasland@mellanox.com,\n\tdev@dpdk.org",
        "Date": "Mon, 13 Apr 2020 09:11:42 +0800",
        "Message-Id": "<1586740309-449310-4-git-send-email-suanmingm@mellanox.com>",
        "X-Mailer": "git-send-email 1.8.3.1",
        "In-Reply-To": "<1586740309-449310-1-git-send-email-suanmingm@mellanox.com>",
        "References": "<1586740309-449310-1-git-send-email-suanmingm@mellanox.com>",
        "Subject": "[dpdk-dev] [PATCH 03/10] net/mlx5: add trunk release for indexed\n\tpool",
        "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": "While entries are fully freed in trunk, it means the trunk is free now.\nUser may prefer the free trunk memory can be reclaimed.\n\nAdd the trunk release memory option for indexed pool in this case.\n\nSigned-off-by: Suanming Mou <suanmingm@mellanox.com>\nAcked-by: Viacheslav Ovsiienko <viacheslavo@mellanox.com>\n---\n drivers/net/mlx5/mlx5_utils.c | 37 +++++++++++++++++++++++++++++++++----\n drivers/net/mlx5/mlx5_utils.h |  1 +\n 2 files changed, 34 insertions(+), 4 deletions(-)",
    "diff": "diff --git a/drivers/net/mlx5/mlx5_utils.c b/drivers/net/mlx5/mlx5_utils.c\nindex e63921d..7683167 100644\n--- a/drivers/net/mlx5/mlx5_utils.c\n+++ b/drivers/net/mlx5/mlx5_utils.c\n@@ -254,7 +254,14 @@ struct mlx5_indexed_pool *\n \t\t\tpool->cfg.free(pool->trunks);\n \t\tpool->n_trunk += n_grow;\n \t}\n-\tidx = pool->n_trunk_valid;\n+\tif (!pool->cfg.release_mem_en) {\n+\t\tidx = pool->n_trunk_valid;\n+\t} else {\n+\t\t/* Find the first available slot in trunk list */\n+\t\tfor (idx = 0; idx < pool->n_trunk; idx++)\n+\t\t\tif (pool->trunks[idx] == NULL)\n+\t\t\t\tbreak;\n+\t}\n \ttrunk_size += sizeof(*trunk);\n \tdata_size = mlx5_trunk_size_get(pool, idx);\n \tbmp_size = rte_bitmap_get_memory_footprint(data_size);\n@@ -356,7 +363,8 @@ struct mlx5_indexed_pool *\n \tidx -= 1;\n \tmlx5_ipool_lock(pool);\n \ttrunk_idx = mlx5_trunk_idx_get(pool, idx);\n-\tif (trunk_idx >= pool->n_trunk_valid)\n+\tif ((!pool->cfg.release_mem_en && trunk_idx >= pool->n_trunk_valid) ||\n+\t    (pool->cfg.release_mem_en && trunk_idx >= pool->n_trunk))\n \t\tgoto out;\n \ttrunk = pool->trunks[trunk_idx];\n \tif (!trunk)\n@@ -367,7 +375,27 @@ struct mlx5_indexed_pool *\n \t\tgoto out;\n \trte_bitmap_set(trunk->bmp, entry_idx);\n \ttrunk->free++;\n-\tif (trunk->free == 1) {\n+\tif (pool->cfg.release_mem_en && trunk->free == mlx5_trunk_size_get\n+\t   (pool, trunk->idx)) {\n+\t\tif (pool->free_list == trunk->idx)\n+\t\t\tpool->free_list = trunk->next;\n+\t\tif (trunk->next != TRUNK_INVALID)\n+\t\t\tpool->trunks[trunk->next]->prev = trunk->prev;\n+\t\tif (trunk->prev != TRUNK_INVALID)\n+\t\t\tpool->trunks[trunk->prev]->next = trunk->next;\n+\t\tpool->cfg.free(trunk);\n+\t\tpool->trunks[trunk_idx] = NULL;\n+\t\tpool->n_trunk_valid--;\n+#ifdef POOL_DEBUG\n+\t\tpool->trunk_avail--;\n+\t\tpool->trunk_free++;\n+#endif\n+\t\tif (pool->n_trunk_valid == 0) {\n+\t\t\tpool->cfg.free(pool->trunks);\n+\t\t\tpool->trunks = NULL;\n+\t\t\tpool->n_trunk = 0;\n+\t\t}\n+\t} else if (trunk->free == 1) {\n \t\t/* Put into free trunk list head. */\n \t\tMLX5_ASSERT(pool->free_list != trunk->idx);\n \t\ttrunk->next = pool->free_list;\n@@ -400,7 +428,8 @@ struct mlx5_indexed_pool *\n \tidx -= 1;\n \tmlx5_ipool_lock(pool);\n \ttrunk_idx = mlx5_trunk_idx_get(pool, idx);\n-\tif (trunk_idx >= pool->n_trunk_valid)\n+\tif ((!pool->cfg.release_mem_en && trunk_idx >= pool->n_trunk_valid) ||\n+\t    (pool->cfg.release_mem_en && trunk_idx >= pool->n_trunk))\n \t\tgoto out;\n \ttrunk = pool->trunks[trunk_idx];\n \tif (!trunk)\ndiff --git a/drivers/net/mlx5/mlx5_utils.h b/drivers/net/mlx5/mlx5_utils.h\nindex af96a87..1051b12 100644\n--- a/drivers/net/mlx5/mlx5_utils.h\n+++ b/drivers/net/mlx5/mlx5_utils.h\n@@ -101,6 +101,7 @@ struct mlx5_indexed_pool_config {\n \t */\n \tuint32_t need_lock:1;\n \t/* Lock is needed for multiple thread usage. */\n+\tuint32_t release_mem_en:1; /* Rlease trunk when it is free. */\n \tconst char *type; /* Memory allocate type name. */\n \tvoid *(*malloc)(const char *type, size_t size, unsigned int align,\n \t\t\tint socket);\n",
    "prefixes": [
        "03/10"
    ]
}