get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 131984,
    "url": "https://patches.dpdk.org/api/patches/131984/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/f7t34z0slad.fsf@redhat.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": "<f7t34z0slad.fsf@redhat.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/f7t34z0slad.fsf@redhat.com",
    "date": "2023-09-26T20:59:38",
    "name": "common/mlx5: Optimize mlx5 mempool get extmem",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "5bbb13fc5b9e1dd1f9150165874356d5efb4c51a",
    "submitter": {
        "id": 332,
        "url": "https://patches.dpdk.org/api/people/332/?format=api",
        "name": "Aaron Conole",
        "email": "aconole@redhat.com"
    },
    "delegate": {
        "id": 3268,
        "url": "https://patches.dpdk.org/api/users/3268/?format=api",
        "username": "rasland",
        "first_name": "Raslan",
        "last_name": "Darawsheh",
        "email": "rasland@nvidia.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/f7t34z0slad.fsf@redhat.com/mbox/",
    "series": [
        {
            "id": 29648,
            "url": "https://patches.dpdk.org/api/series/29648/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=29648",
            "date": "2023-09-26T20:59:38",
            "name": "common/mlx5: Optimize mlx5 mempool get extmem",
            "version": 1,
            "mbox": "https://patches.dpdk.org/series/29648/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/131984/comments/",
    "check": "warning",
    "checks": "https://patches.dpdk.org/api/patches/131984/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 0034542649;\n\tTue, 26 Sep 2023 22:59:45 +0200 (CEST)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id C5CC340269;\n\tTue, 26 Sep 2023 22:59:45 +0200 (CEST)",
            "from us-smtp-delivery-124.mimecast.com\n (us-smtp-delivery-124.mimecast.com [170.10.129.124])\n by mails.dpdk.org (Postfix) with ESMTP id 3454F400D5\n for <dev@dpdk.org>; Tue, 26 Sep 2023 22:59:44 +0200 (CEST)",
            "from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73])\n by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n us-mta-423-gGZyMP2MORis4P261GeMUg-1; Tue, 26 Sep 2023 16:59:39 -0400",
            "from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com\n [10.11.54.2])\n (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n (No client certificate requested)\n by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 6B2843C11C66;\n Tue, 26 Sep 2023 20:59:39 +0000 (UTC)",
            "from RHTPC1VM0NT (unknown [10.22.8.239])\n by smtp.corp.redhat.com (Postfix) with ESMTPS id B847040C6EA8;\n Tue, 26 Sep 2023 20:59:38 +0000 (UTC)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1695761983;\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 bh=3oBfIH7lf2gkJKp9uVcpCIFOBO7krwYQ1UtRLslWVwQ=;\n b=FxTgJjqpZVJLiMOhsgBtE3fJOy9ZTcfItuw1kW7D6T9PbI4IFVhaMeJGLfbb/gPbyM2ZX5\n UCPDd9HFB81gATmza+PxX2udQpFLO5lRjo9Z7MBBvMyWGc6yWAdWo/b1AFW/VbB8P+PwGF\n t9puvPa3wIjj9UpajbEOiMPxFE5h7qI=",
        "X-MC-Unique": "gGZyMP2MORis4P261GeMUg-1",
        "From": "Aaron Conole <aconole@redhat.com>",
        "To": "dev@dpdk.org",
        "Cc": "John Romein <romein@astron.nl>, Dmitry Kozlyuk <dkozlyuk@nvidia.com>,\n Matan Azrad <matan@nvidia.com>, Viacheslav Ovsiienko\n <viacheslavo@nvidia.com>, Ori Kam <orika@nvidia.com>, Suanming Mou\n <suanmingm@nvidia.com>",
        "Subject": "[PATCH] common/mlx5: Optimize mlx5 mempool get extmem",
        "Date": "Tue, 26 Sep 2023 16:59:38 -0400",
        "Message-ID": "<f7t34z0slad.fsf@redhat.com>",
        "User-Agent": "Gnus/5.13 (Gnus v5.13) Emacs/28.2 (gnu/linux)",
        "MIME-Version": "1.0",
        "X-Scanned-By": "MIMEDefang 3.1 on 10.11.54.2",
        "X-Mimecast-Spam-Score": "0",
        "X-Mimecast-Originator": "redhat.com",
        "Content-Type": "text/plain",
        "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: John Romein <romein@astron.nl>\n\nThis patch reduces the time to allocate and register tens of gigabytes\nof GPU memory from hours to seconds, by sorting the heap only once\ninstead of for each object in the mempool.\n\nFixes: 690b2a8 (\"common/mlx5: add mempool registration facilities\")\n\nSigned-off-by: John Romein <romein@astron.nl>\n---\nNOTE: this is a post of https://github.com/DPDK/dpdk/pull/70 to the\n      mailing list.\n\n drivers/common/mlx5/mlx5_common_mr.c | 69 ++++++++--------------------\n 1 file changed, 20 insertions(+), 49 deletions(-)\n\n---\n2.40.1",
    "diff": "diff --git a/drivers/common/mlx5/mlx5_common_mr.c b/drivers/common/mlx5/mlx5_common_mr.c\nindex 40ff9153bd8..3f95438045f 100644\n--- a/drivers/common/mlx5/mlx5_common_mr.c\n+++ b/drivers/common/mlx5/mlx5_common_mr.c\n@@ -1389,63 +1389,23 @@ mlx5_mempool_get_chunks(struct rte_mempool *mp, struct mlx5_range **out,\n \treturn 0;\n }\n \n-struct mlx5_mempool_get_extmem_data {\n-\tstruct mlx5_range *heap;\n-\tunsigned int heap_size;\n-\tint ret;\n-};\n-\n static void\n mlx5_mempool_get_extmem_cb(struct rte_mempool *mp, void *opaque,\n \t\t\t   void *obj, unsigned int obj_idx)\n {\n-\tstruct mlx5_mempool_get_extmem_data *data = opaque;\n+\tstruct mlx5_range *heap = opaque;\n \tstruct rte_mbuf *mbuf = obj;\n \tuintptr_t addr = (uintptr_t)mbuf->buf_addr;\n-\tstruct mlx5_range *seg, *heap;\n \tstruct rte_memseg_list *msl;\n \tsize_t page_size;\n \tuintptr_t page_start;\n-\tunsigned int pos = 0, len = data->heap_size, delta;\n \n \tRTE_SET_USED(mp);\n-\tRTE_SET_USED(obj_idx);\n-\tif (data->ret < 0)\n-\t\treturn;\n-\t/* Binary search for an already visited page. */\n-\twhile (len > 1) {\n-\t\tdelta = len / 2;\n-\t\tif (addr < data->heap[pos + delta].start) {\n-\t\t\tlen = delta;\n-\t\t} else {\n-\t\t\tpos += delta;\n-\t\t\tlen -= delta;\n-\t\t}\n-\t}\n-\tif (data->heap != NULL) {\n-\t\tseg = &data->heap[pos];\n-\t\tif (seg->start <= addr && addr < seg->end)\n-\t\t\treturn;\n-\t}\n-\t/* Determine the page boundaries and remember them. */\n-\theap = realloc(data->heap, sizeof(heap[0]) * (data->heap_size + 1));\n-\tif (heap == NULL) {\n-\t\tfree(data->heap);\n-\t\tdata->heap = NULL;\n-\t\tdata->ret = -1;\n-\t\treturn;\n-\t}\n-\tdata->heap = heap;\n-\tdata->heap_size++;\n-\tseg = &heap[data->heap_size - 1];\n \tmsl = rte_mem_virt2memseg_list((void *)addr);\n \tpage_size = msl != NULL ? msl->page_sz : rte_mem_page_size();\n \tpage_start = RTE_PTR_ALIGN_FLOOR(addr, page_size);\n-\tseg->start = page_start;\n-\tseg->end = page_start + page_size;\n-\t/* Maintain the heap order. */\n-\tqsort(data->heap, data->heap_size, sizeof(heap[0]),\n-\t      mlx5_range_compare_start);\n+\theap[obj_idx].start = page_start;\n+\theap[obj_idx].end = page_start + page_size;\n }\n \n /**\n@@ -1457,15 +1417,26 @@ static int\n mlx5_mempool_get_extmem(struct rte_mempool *mp, struct mlx5_range **out,\n \t\t\tunsigned int *out_n)\n {\n-\tstruct mlx5_mempool_get_extmem_data data;\n+\tunsigned out_size = 1;\n+\tstruct mlx5_range *heap;\n \n \tDRV_LOG(DEBUG, \"Recovering external pinned pages of mempool %s\",\n \t\tmp->name);\n-\tmemset(&data, 0, sizeof(data));\n-\trte_mempool_obj_iter(mp, mlx5_mempool_get_extmem_cb, &data);\n-\t*out = data.heap;\n-\t*out_n = data.heap_size;\n-\treturn data.ret;\n+\theap = malloc(mp->size * sizeof(struct mlx5_range));\n+\tif (heap == NULL)\n+\t\treturn -1;\n+\trte_mempool_obj_iter(mp, mlx5_mempool_get_extmem_cb, heap);\n+\tqsort(heap, mp->size, sizeof heap[0], mlx5_range_compare_start);\n+\t/* remove duplicates */\n+\tfor (unsigned i = 1; i < mp->size; i ++)\n+\t\tif (heap[out_size - 1].start != heap[i].start)\n+\t\t\theap[out_size ++] = heap[i];\n+\theap = realloc(heap, out_size * sizeof(struct mlx5_range));\n+\tif (heap == NULL)\n+\t\treturn -1;\n+\t*out = heap;\n+\t*out_n = out_size;\n+\treturn 0;\n }\n \n /**\n",
    "prefixes": []
}