get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 44835,
    "url": "http://patches.dpdk.org/api/patches/44835/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20180918124514.10615-9-mattias.ronnblom@ericsson.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": "<20180918124514.10615-9-mattias.ronnblom@ericsson.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20180918124514.10615-9-mattias.ronnblom@ericsson.com",
    "date": "2018-09-18T12:45:12",
    "name": "[v4,08/10] event/dsw: let DSW event device sort events on dequeue",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "2008e7e9e4e7a70af2f2d98f3011bcd4ad58ad2e",
    "submitter": {
        "id": 1077,
        "url": "http://patches.dpdk.org/api/people/1077/?format=api",
        "name": "Mattias Rönnblom",
        "email": "mattias.ronnblom@ericsson.com"
    },
    "delegate": {
        "id": 310,
        "url": "http://patches.dpdk.org/api/users/310/?format=api",
        "username": "jerin",
        "first_name": "Jerin",
        "last_name": "Jacob",
        "email": "jerinj@marvell.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20180918124514.10615-9-mattias.ronnblom@ericsson.com/mbox/",
    "series": [
        {
            "id": 1368,
            "url": "http://patches.dpdk.org/api/series/1368/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=1368",
            "date": "2018-09-18T12:45:04",
            "name": "A Distributed Software Event Device",
            "version": 4,
            "mbox": "http://patches.dpdk.org/series/1368/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/44835/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/44835/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 697545B2A;\n\tTue, 18 Sep 2018 14:45:41 +0200 (CEST)",
            "from sesbmg22.ericsson.net (sesbmg22.ericsson.net [193.180.251.48])\n\tby dpdk.org (Postfix) with ESMTP id A5FDB4F90\n\tfor <dev@dpdk.org>; Tue, 18 Sep 2018 14:45:30 +0200 (CEST)",
            "from ESESSMB501.ericsson.se (Unknown_Domain [153.88.183.119])\n\tby sesbmg22.ericsson.net (Symantec Mail Security) with SMTP id\n\t14.49.21978.A63F0AB5; Tue, 18 Sep 2018 14:45:30 +0200 (CEST)",
            "from ESESBMB503.ericsson.se (153.88.183.170) by\n\tESESSMB501.ericsson.se (153.88.183.162) with Microsoft SMTP Server\n\t(version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id\n\t15.1.1466.3; Tue, 18 Sep 2018 14:45:27 +0200",
            "from selio1a020.lmera.ericsson.se (153.88.183.153) by\n\tsmtp.internal.ericsson.com (153.88.183.186) with Microsoft SMTP\n\tServer id\n\t15.1.1466.3 via Frontend Transport; Tue, 18 Sep 2018 14:45:27 +0200",
            "from breslau.lmera.ericsson.se (breslau.lmera.ericsson.se\n\t[150.132.109.241])\n\tby selio1a020.lmera.ericsson.se (8.15.1+Sun/8.15.1) with ESMTP id\n\tw8ICjQ1b011575; Tue, 18 Sep 2018 14:45:27 +0200 (CEST)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; d=ericsson.com; s=mailgw201801;\n\tc=relaxed/simple; q=dns/txt; i=@ericsson.com; t=1537274730;\n\th=From:Sender:Reply-To:Subject:Date:Message-ID:To:CC:MIME-Version:Content-Type:\n\tContent-Transfer-Encoding:Content-ID:Content-Description:Resent-Date:Resent-From:\n\tResent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Id:\n\tList-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive;\n\tbh=woE8RAdlTcuwj+1trtSicV02p6OTcLf5DP4WVMBYYlY=;\n\tb=P1bbJoQtBkOO/zaVpDg97bmCQQtfHo/BPADPA6BlkW/S20n0DeSnXYg+a6gVPMEQ\n\tjThGn+fbfbENbZAameg5fWRxL46mZtmfHn3v9W3tWgTnas4VUZW4tDtwpsIhmATt\n\tGgm4ac9R8s7mWMHheVWD2TMNPV/zFwRWU0Ehm86kW2A=;",
        "X-AuditID": "c1b4fb30-ff9ff700000055da-e1-5ba0f36abde6",
        "From": "=?utf-8?q?Mattias_R=C3=B6nnblom?= <mattias.ronnblom@ericsson.com>",
        "To": "Jerin Jacob <jerin.jacob@caviumnetworks.com>",
        "CC": "Bruce Richardson <bruce.richardson@intel.com>, <dev@dpdk.org>,\n\t=?utf-8?q?Mattias_R=C3=B6nnblom?= <mattias.ronnblom@ericsson.com>",
        "Date": "Tue, 18 Sep 2018 14:45:12 +0200",
        "Message-ID": "<20180918124514.10615-9-mattias.ronnblom@ericsson.com>",
        "X-Mailer": "git-send-email 2.17.1",
        "In-Reply-To": "<20180918124514.10615-1-mattias.ronnblom@ericsson.com>",
        "References": "<20180918124514.10615-1-mattias.ronnblom@ericsson.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=\"UTF-8\"",
        "Content-Transfer-Encoding": "8bit",
        "X-Brightmail-Tracker": "H4sIAAAAAAAAA+NgFrrOLMWRmVeSWpSXmKPExsUyM2J7uW7W5wXRBvMn8VvcWGVv8e7TdiaL\n\tiZNMHJg9NpzoZ/X4tWApq8fiPS+ZApijuGxSUnMyy1KL9O0SuDJOHvrHVjBDsWJu13qWBsYZ\n\t0l2MnBwSAiYSjXuOMnYxcnEICRxllPjz/iGU841R4tP2bywQzkVGifd/dkBlLjNKfPw1mQ2k\n\tn03AU2Lyu24WEFtEwEBi0Zn7zCBFzAIdjBLNU/+AJYQFAiTezP8MZrMIqEocXHWUFcTmFXCS\n\taN33ix3iEHmJ1RsOMIPYnALOEp+nrmPqYuQA2uYkcXGDMkS5oMTJmU/AxjALaEq0bv/NDmHL\n\tSzRvnQ3WKiSgJXF/yRfmCYxCs5C0zELSMgtJywJG5lWMosWpxUm56UZGeqlFmcnFxfl5enmp\n\tJZsYgcF9cMtvgx2ML587HmIU4GBU4uGNfrUgWog1say4MvcQowQHs5IIL2cOUIg3JbGyKrUo\n\tP76oNCe1+BCjNAeLkjivhd/mKCGB9MSS1OzU1ILUIpgsEwenVANjtFC3tW5um+Plsl8aRSsb\n\tRL2vbM9N9tpb8HWpWtCpytyJduGbPrrO+y4xvbosQX27RIpDfape04lvsl3X3r8461fxuvxu\n\tpOqZW6W7TvUeSMnbpB+Tqz8/oGjNrV/vdBZyMxZfM8v4lBh2553ys7Mtt+et3thb/XdaglDa\n\t/Wm/tydfSyzcfDpNiaU4I9FQi7moOBEAlCBckGoCAAA=",
        "Subject": "[dpdk-dev] [PATCH v4 08/10] event/dsw: let DSW event device sort\n\tevents on dequeue",
        "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\t<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\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "With this patch, the DSW event device will (optionally) sort the event\nburst before giving it to the application. The sorting will primarily\nbe on queue id, and secondary on flow id.\n\nThe sorting is an attempt to optimize data and instruction cache usage\nfor the application, at the cost of additional event device overhead.\n\nSigned-off-by: Mattias Rönnblom <mattias.ronnblom@ericsson.com>\n---\n drivers/event/dsw/dsw_evdev.h | 11 ++++++++\n drivers/event/dsw/dsw_event.c | 23 +++++++++++++++++\n drivers/event/dsw/dsw_sort.h  | 48 +++++++++++++++++++++++++++++++++++\n 3 files changed, 82 insertions(+)\n create mode 100644 drivers/event/dsw/dsw_sort.h",
    "diff": "diff --git a/drivers/event/dsw/dsw_evdev.h b/drivers/event/dsw/dsw_evdev.h\nindex 783c418bf..f6f8f0454 100644\n--- a/drivers/event/dsw/dsw_evdev.h\n+++ b/drivers/event/dsw/dsw_evdev.h\n@@ -93,6 +93,17 @@\n  */\n #define DSW_CTL_IN_RING_SIZE ((DSW_MAX_PORTS-1)*4)\n \n+/* With DSW_SORT_DEQUEUED enabled, the scheduler will, at the point of\n+ * dequeue(), arrange events so that events with the same flow id on\n+ * the same queue forms a back-to-back \"burst\", and also so that such\n+ * bursts of different flow ids, but on the same queue, also come\n+ * consecutively. All this in an attempt to improve data and\n+ * instruction cache usage for the application, at the cost of a\n+ * scheduler overhead increase.\n+ */\n+\n+/* #define DSW_SORT_DEQUEUED */\n+\n struct dsw_queue_flow {\n \tuint8_t queue_id;\n \tuint16_t flow_hash;\ndiff --git a/drivers/event/dsw/dsw_event.c b/drivers/event/dsw/dsw_event.c\nindex f0347592d..a84b19c33 100644\n--- a/drivers/event/dsw/dsw_event.c\n+++ b/drivers/event/dsw/dsw_event.c\n@@ -4,6 +4,10 @@\n \n #include \"dsw_evdev.h\"\n \n+#ifdef DSW_SORT_DEQUEUED\n+#include \"dsw_sort.h\"\n+#endif\n+\n #include <stdbool.h>\n #include <string.h>\n \n@@ -1121,6 +1125,21 @@ dsw_port_record_seen_events(struct dsw_port *port, struct rte_event *events,\n \t\t\t\tDSW_MAX_EVENTS_RECORDED);\n }\n \n+#ifdef DSW_SORT_DEQUEUED\n+\n+#define DSW_EVENT_TO_INT(_event)\t\t\t\t\\\n+\t((int)((((_event)->queue_id)<<16)|((_event)->flow_id)))\n+\n+static inline int\n+dsw_cmp_event(const void *v_event_a, const void *v_event_b)\n+{\n+\tconst struct rte_event *event_a = v_event_a;\n+\tconst struct rte_event *event_b = v_event_b;\n+\n+\treturn DSW_EVENT_TO_INT(event_a) - DSW_EVENT_TO_INT(event_b);\n+}\n+#endif\n+\n static uint16_t\n dsw_port_dequeue_burst(struct dsw_port *port, struct rte_event *events,\n \t\t       uint16_t num)\n@@ -1191,5 +1210,9 @@ dsw_event_dequeue_burst(void *port, struct rte_event *events, uint16_t num,\n \t *\t0.\n \t */\n \n+#ifdef DSW_SORT_DEQUEUED\n+\tdsw_stable_sort(events, dequeued, sizeof(events[0]), dsw_cmp_event);\n+#endif\n+\n \treturn dequeued;\n }\ndiff --git a/drivers/event/dsw/dsw_sort.h b/drivers/event/dsw/dsw_sort.h\nnew file mode 100644\nindex 000000000..609767fdf\n--- /dev/null\n+++ b/drivers/event/dsw/dsw_sort.h\n@@ -0,0 +1,48 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(c) 2018 Ericsson AB\n+ */\n+\n+#ifndef _DSW_SORT_\n+#define _DSW_SORT_\n+\n+#include <string.h>\n+\n+#include <rte_common.h>\n+\n+#define DSW_ARY_ELEM_PTR(_ary, _idx, _elem_size)\t\\\n+\tRTE_PTR_ADD(_ary, (_idx) * (_elem_size))\n+\n+#define DSW_ARY_ELEM_SWAP(_ary, _a_idx, _b_idx, _elem_size)\t\t\\\n+\tdo {\t\t\t\t\t\t\t\t\\\n+\t\tchar tmp[_elem_size];\t\t\t\t\t\\\n+\t\tvoid *_a_ptr = DSW_ARY_ELEM_PTR(_ary, _a_idx, _elem_size); \\\n+\t\tvoid *_b_ptr = DSW_ARY_ELEM_PTR(_ary, _b_idx, _elem_size); \\\n+\t\tmemcpy(tmp, _a_ptr, _elem_size);\t\t\t\\\n+\t\tmemcpy(_a_ptr, _b_ptr, _elem_size);\t\t\t\\\n+\t\tmemcpy(_b_ptr, tmp, _elem_size);\t\t\t\\\n+\t} while (0)\n+\n+static inline void\n+dsw_insertion_sort(void *ary, uint16_t len, uint16_t elem_size,\n+\t\t   int (*cmp_fn)(const void *, const void *))\n+{\n+\tuint16_t i;\n+\n+\tfor (i = 1; i < len; i++) {\n+\t\tuint16_t j;\n+\t\tfor (j = i; j > 0 &&\n+\t\t\t     cmp_fn(DSW_ARY_ELEM_PTR(ary, j-1, elem_size),\n+\t\t\t\t    DSW_ARY_ELEM_PTR(ary, j, elem_size)) > 0;\n+\t\t     j--)\n+\t\t\tDSW_ARY_ELEM_SWAP(ary, j, j-1, elem_size);\n+\t}\n+}\n+\n+static inline void\n+dsw_stable_sort(void *ary, uint16_t len, uint16_t elem_size,\n+\t\tint (*cmp_fn)(const void *, const void *))\n+{\n+\tdsw_insertion_sort(ary, len, elem_size, cmp_fn);\n+}\n+\n+#endif\n",
    "prefixes": [
        "v4",
        "08/10"
    ]
}