get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 24984,
    "url": "http://patches.dpdk.org/api/patches/24984/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1496331954-93915-1-git-send-email-harry.van.haaren@intel.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": "<1496331954-93915-1-git-send-email-harry.van.haaren@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1496331954-93915-1-git-send-email-harry.van.haaren@intel.com",
    "date": "2017-06-01T15:45:54",
    "name": "[dpdk-dev,v2] event/sw: fix credit tracking in port dequeue",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "06355345ca1796bdb255d790c8602326d1a13cc2",
    "submitter": {
        "id": 317,
        "url": "http://patches.dpdk.org/api/people/317/?format=api",
        "name": "Van Haaren, Harry",
        "email": "harry.van.haaren@intel.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/1496331954-93915-1-git-send-email-harry.van.haaren@intel.com/mbox/",
    "series": [],
    "comments": "http://patches.dpdk.org/api/patches/24984/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/24984/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 [IPv6:::1])\n\tby dpdk.org (Postfix) with ESMTP id 4B6B07CBF;\n\tThu,  1 Jun 2017 17:45:38 +0200 (CEST)",
            "from mga03.intel.com (mga03.intel.com [134.134.136.65])\n\tby dpdk.org (Postfix) with ESMTP id C2BE77CBB\n\tfor <dev@dpdk.org>; Thu,  1 Jun 2017 17:45:35 +0200 (CEST)",
            "from fmsmga005.fm.intel.com ([10.253.24.32])\n\tby orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t01 Jun 2017 08:45:34 -0700",
            "from silpixa00398672.ir.intel.com ([10.237.223.128])\n\tby fmsmga005.fm.intel.com with ESMTP; 01 Jun 2017 08:45:32 -0700"
        ],
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"5.39,280,1493708400\"; d=\"scan'208\";a=\"109234231\"",
        "From": "Harry van Haaren <harry.van.haaren@intel.com>",
        "To": "dev@dpdk.org",
        "Cc": "jerin.jacob@caviumnetworks.com, gage.eads@intel.com,\n\tHarry van Haaren <harry.van.haaren@intel.com>",
        "Date": "Thu,  1 Jun 2017 16:45:54 +0100",
        "Message-Id": "<1496331954-93915-1-git-send-email-harry.van.haaren@intel.com>",
        "X-Mailer": "git-send-email 2.7.4",
        "In-Reply-To": "<9184057F7FC11744A2107296B6B8EB1E01EC4180@FMSMSX108.amr.corp.intel.com>",
        "References": "<9184057F7FC11744A2107296B6B8EB1E01EC4180@FMSMSX108.amr.corp.intel.com>",
        "Subject": "[dpdk-dev] [PATCH v2] event/sw: fix credit tracking in port 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": "<http://dpdk.org/ml/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://dpdk.org/ml/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<http://dpdk.org/ml/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "Single-link optimized ports previously did not correctly track\ncredits when dequeued, and re-enqueued as a FORWARD type. This\ncould \"inflate\" the number of credits in the system.\n\nA unit test is added to reproduce and verify the issue, and the\nfixed implementation counts FORWARD packets, and reduces the\nnumber of credits the port has if it is of single-link type.\n\nFixes: 656af9180014 (\"event/sw: add worker core functions\")\n\nSigned-off-by: Harry van Haaren <harry.van.haaren@intel.com>\nAcked-by: Gage Eads <gage.eads@intel.com>\n\n---\n\nv2:\n- Remove useless stats retrieving code\n- Remove commented code\n- Added Ack\n\n---\n drivers/event/sw/sw_evdev_worker.c |  5 ++++\n test/test/test_eventdev_sw.c       | 51 +++++++++++++++++++++++++++++++++++++-\n 2 files changed, 55 insertions(+), 1 deletion(-)",
    "diff": "diff --git a/drivers/event/sw/sw_evdev_worker.c b/drivers/event/sw/sw_evdev_worker.c\nindex 9cb6bef..b738506 100644\n--- a/drivers/event/sw/sw_evdev_worker.c\n+++ b/drivers/event/sw/sw_evdev_worker.c\n@@ -87,6 +87,7 @@ sw_event_enqueue_burst(void *port, const struct rte_event ev[], uint16_t num)\n \t\t\treturn 0;\n \t}\n \n+\tuint32_t forwards = 0;\n \tfor (i = 0; i < num; i++) {\n \t\tint op = ev[i].op;\n \t\tint outstanding = p->outstanding_releases > 0;\n@@ -95,6 +96,7 @@ sw_event_enqueue_burst(void *port, const struct rte_event ev[], uint16_t num)\n \t\tp->inflight_credits -= (op == RTE_EVENT_OP_NEW);\n \t\tp->inflight_credits += (op == RTE_EVENT_OP_RELEASE) *\n \t\t\t\t\toutstanding;\n+\t\tforwards += (op == RTE_EVENT_OP_FORWARD);\n \n \t\tnew_ops[i] = sw_qe_flag_map[op];\n \t\tnew_ops[i] &= ~(invalid_qid << QE_FLAG_VALID_SHIFT);\n@@ -113,6 +115,9 @@ sw_event_enqueue_burst(void *port, const struct rte_event ev[], uint16_t num)\n \t\t}\n \t}\n \n+\t/* handle directed port forward credits */\n+\tp->inflight_credits -= forwards * p->is_directed;\n+\n \t/* returns number of events actually enqueued */\n \tuint32_t enq = qe_ring_enqueue_burst_with_ops(p->rx_worker_ring, ev, i,\n \t\t\t\t\t     new_ops);\ndiff --git a/test/test/test_eventdev_sw.c b/test/test/test_eventdev_sw.c\nindex b187d02..2cb9f59 100644\n--- a/test/test/test_eventdev_sw.c\n+++ b/test/test/test_eventdev_sw.c\n@@ -548,6 +548,50 @@ test_single_directed_packet(struct test *t)\n \treturn 0;\n }\n \n+static int\n+test_directed_forward_credits(struct test *t)\n+{\n+\tuint32_t i;\n+\tint32_t err;\n+\n+\tif (init(t, 1, 1) < 0 ||\n+\t\t\tcreate_ports(t, 1) < 0 ||\n+\t\t\tcreate_directed_qids(t, 1, t->port) < 0)\n+\t\treturn -1;\n+\n+\tif (rte_event_dev_start(evdev) < 0) {\n+\t\tprintf(\"%d: Error with start call\\n\", __LINE__);\n+\t\treturn -1;\n+\t}\n+\n+\tstruct rte_event ev = {\n+\t\t\t.op = RTE_EVENT_OP_NEW,\n+\t\t\t.queue_id = 0,\n+\t};\n+\n+\tfor (i = 0; i < 1000; i++) {\n+\t\terr = rte_event_enqueue_burst(evdev, 0, &ev, 1);\n+\t\tif (err < 0) {\n+\t\t\tprintf(\"%d: error failed to enqueue\\n\", __LINE__);\n+\t\t\treturn -1;\n+\t\t}\n+\t\trte_event_schedule(evdev);\n+\n+\t\tuint32_t deq_pkts;\n+\t\tdeq_pkts = rte_event_dequeue_burst(evdev, 0, &ev, 1, 0);\n+\t\tif (deq_pkts != 1) {\n+\t\t\tprintf(\"%d: error failed to deq\\n\", __LINE__);\n+\t\t\treturn -1;\n+\t\t}\n+\n+\t\t/* re-write event to be a forward, and continue looping it */\n+\t\tev.op = RTE_EVENT_OP_FORWARD;\n+\t}\n+\n+\tcleanup(t);\n+\treturn 0;\n+}\n+\n \n static int\n test_priority_directed(struct test *t)\n@@ -3025,13 +3069,18 @@ test_sw_eventdev(void)\n \t\t}\n \t}\n \tt->mbuf_pool = eventdev_func_mempool;\n-\n \tprintf(\"*** Running Single Directed Packet test...\\n\");\n \tret = test_single_directed_packet(t);\n \tif (ret != 0) {\n \t\tprintf(\"ERROR - Single Directed Packet test FAILED.\\n\");\n \t\treturn ret;\n \t}\n+\tprintf(\"*** Running Directed Forward Credit test...\\n\");\n+\tret = test_directed_forward_credits(t);\n+\tif (ret != 0) {\n+\t\tprintf(\"ERROR - Directed Forward Credit test FAILED.\\n\");\n+\t\treturn ret;\n+\t}\n \tprintf(\"*** Running Single Load Balanced Packet test...\\n\");\n \tret = single_packet(t);\n \tif (ret != 0) {\n",
    "prefixes": [
        "dpdk-dev",
        "v2"
    ]
}