get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 132463,
    "url": "https://patches.dpdk.org/api/patches/132463/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20231010143800.102459-1-aconole@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": "<20231010143800.102459-1-aconole@redhat.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20231010143800.102459-1-aconole@redhat.com",
    "date": "2023-10-10T14:38:00",
    "name": "[v2] common/mlx5: Optimize mlx5 mempool get extmem",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "ed0746888164ebfe725739480284dbf796545c44",
    "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/20231010143800.102459-1-aconole@redhat.com/mbox/",
    "series": [
        {
            "id": 29792,
            "url": "https://patches.dpdk.org/api/series/29792/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=29792",
            "date": "2023-10-10T14:38:00",
            "name": "[v2] common/mlx5: Optimize mlx5 mempool get extmem",
            "version": 2,
            "mbox": "https://patches.dpdk.org/series/29792/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/132463/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/132463/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 842024234D;\n\tTue, 10 Oct 2023 16:38:13 +0200 (CEST)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 2D8A7402C2;\n\tTue, 10 Oct 2023 16:38:13 +0200 (CEST)",
            "from us-smtp-delivery-124.mimecast.com\n (us-smtp-delivery-124.mimecast.com [170.10.133.124])\n by mails.dpdk.org (Postfix) with ESMTP id 595C740297\n for <dev@dpdk.org>; Tue, 10 Oct 2023 16:38:12 +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-104-YDxMWaZCP9mGU6Ef6T7F6w-1; Tue, 10 Oct 2023 10:38:02 -0400",
            "from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com\n [10.11.54.1])\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 B060F293248F;\n Tue, 10 Oct 2023 14:38:01 +0000 (UTC)",
            "from RHTPC1VM0NT.lan (unknown [10.22.34.140])\n by smtp.corp.redhat.com (Postfix) with ESMTP id 2B4989CC;\n Tue, 10 Oct 2023 14:38:01 +0000 (UTC)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1696948691;\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=Ishg4r6KT3dribqef+UH55fqDgvv9yOl9+P4nqFzBis=;\n b=GgKvpqDuE94Xf7VcWIIURSkH11fX35BYMnH2Lq19C4UgFpKXH9MqaWIep0G8fmDpRllYUh\n Y8aikeLdnbyObr86+3BzdBqTcUNhKSjwo1cOuzFCE8QsgqM/76LLUruyJ1fBtrMQf7iDJs\n XAx8t+8TyLClgREoU6Gm+NnJw6b1EDw=",
        "X-MC-Unique": "YDxMWaZCP9mGU6Ef6T7F6w-1",
        "From": "Aaron Conole <aconole@redhat.com>",
        "To": "dev@dpdk.org",
        "Cc": "John Romein <romein@astron.nl>, Raslan Darawsheh <rasland@nvidia.com>,\n Elena Agostini <eagostini@nvidia.com>,\n Dmitry Kozlyuk <dkozlyuk@nvidia.com>, Matan Azrad <matan@nvidia.com>,\n Viacheslav Ovsiienko <viacheslavo@nvidia.com>, Ori Kam <orika@nvidia.com>,\n Suanming Mou <suanmingm@nvidia.com>",
        "Subject": "[PATCH v2] common/mlx5: Optimize mlx5 mempool get extmem",
        "Date": "Tue, 10 Oct 2023 10:38:00 -0400",
        "Message-ID": "<20231010143800.102459-1-aconole@redhat.com>",
        "In-Reply-To": "<f7t34z0slad.fsf@redhat.com>",
        "References": "<f7t34z0slad.fsf@redhat.com>",
        "MIME-Version": "1.0",
        "X-Scanned-By": "MIMEDefang 3.4.1 on 10.11.54.1",
        "X-Mimecast-Spam-Score": "0",
        "X-Mimecast-Originator": "redhat.com",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain; charset=\"US-ASCII\"; x-default=true",
        "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: 690b2a88c2f7 (\"common/mlx5: add mempool registration facilities\")\n\nSigned-off-by: John Romein <romein@astron.nl>\n---\n drivers/common/mlx5/mlx5_common_mr.c | 69 ++++++++--------------------\n 1 file changed, 20 insertions(+), 49 deletions(-)",
    "diff": "diff --git a/drivers/common/mlx5/mlx5_common_mr.c b/drivers/common/mlx5/mlx5_common_mr.c\nindex 40ff9153bd..77b66e444b 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 int 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 int 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": [
        "v2"
    ]
}