get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 45189,
    "url": "https://patches.dpdk.org/api/patches/45189/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20180924082333.12812-2-harry.van.haaren@intel.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": "<20180924082333.12812-2-harry.van.haaren@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20180924082333.12812-2-harry.van.haaren@intel.com",
    "date": "2018-09-24T08:23:32",
    "name": "[v3,2/3] event/sw: implement unlinks in progress function",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "3c55deb1296fb395a715365d78e4e01274b9a90e",
    "submitter": {
        "id": 317,
        "url": "https://patches.dpdk.org/api/people/317/?format=api",
        "name": "Van Haaren, Harry",
        "email": "harry.van.haaren@intel.com"
    },
    "delegate": {
        "id": 310,
        "url": "https://patches.dpdk.org/api/users/310/?format=api",
        "username": "jerin",
        "first_name": "Jerin",
        "last_name": "Jacob",
        "email": "jerinj@marvell.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20180924082333.12812-2-harry.van.haaren@intel.com/mbox/",
    "series": [
        {
            "id": 1459,
            "url": "https://patches.dpdk.org/api/series/1459/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=1459",
            "date": "2018-09-24T08:23:31",
            "name": "[v3,1/3] event: add function for reading unlink in progress",
            "version": 3,
            "mbox": "https://patches.dpdk.org/series/1459/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/45189/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/45189/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 D9C674C8D;\n\tMon, 24 Sep 2018 10:25:04 +0200 (CEST)",
            "from mga01.intel.com (mga01.intel.com [192.55.52.88])\n\tby dpdk.org (Postfix) with ESMTP id 449221AFF\n\tfor <dev@dpdk.org>; Mon, 24 Sep 2018 10:25:00 +0200 (CEST)",
            "from fmsmga005.fm.intel.com ([10.253.24.32])\n\tby fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t24 Sep 2018 01:25:00 -0700",
            "from silpixa00399779.ir.intel.com (HELO\n\tsilpixa00399779.ger.corp.intel.com) ([10.237.223.187])\n\tby fmsmga005.fm.intel.com with ESMTP; 24 Sep 2018 01:24:59 -0700"
        ],
        "X-Amp-Result": "SKIPPED(no attachment in message)",
        "X-Amp-File-Uploaded": "False",
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"5.54,297,1534834800\"; d=\"scan'208\";a=\"265170299\"",
        "From": "Harry van Haaren <harry.van.haaren@intel.com>",
        "To": "dev@dpdk.org",
        "Cc": "jerin.jacob@caviumnetworks.com,\n\tHarry van Haaren <harry.van.haaren@intel.com>",
        "Date": "Mon, 24 Sep 2018 09:23:32 +0100",
        "Message-Id": "<20180924082333.12812-2-harry.van.haaren@intel.com>",
        "X-Mailer": "git-send-email 2.17.1",
        "In-Reply-To": "<20180924082333.12812-1-harry.van.haaren@intel.com>",
        "References": "<20180920112251.47854-1-harry.van.haaren@intel.com>\n\t<20180924082333.12812-1-harry.van.haaren@intel.com>",
        "Subject": "[dpdk-dev] [PATCH v3 2/3] event/sw: implement unlinks in progress\n\tfunction",
        "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": "This commit adds a counter to each port, which counts the\nnumber of unlinks that have been performed. When the scheduler\nthread starts its scheduling routine, it \"acks\" all unlinks that\nhave been requested, and the application is gauranteed that no\nmore events will be scheduled to the port from the unlinked queue.\n\nSigned-off-by: Harry van Haaren <harry.van.haaren@intel.com>\n\n---\n\nv3:\n- Move RTE_SET_USED() to correct patch (Jerin)\n\nv2:\n- Fix unused \"dev\" variable (Jerin)\n---\n drivers/event/sw/sw_evdev.c           | 13 +++++++++++++\n drivers/event/sw/sw_evdev.h           |  8 ++++++++\n drivers/event/sw/sw_evdev_scheduler.c |  7 ++++++-\n 3 files changed, 27 insertions(+), 1 deletion(-)",
    "diff": "diff --git a/drivers/event/sw/sw_evdev.c b/drivers/event/sw/sw_evdev.c\nindex a6bb91388..1175d6cdb 100644\n--- a/drivers/event/sw/sw_evdev.c\n+++ b/drivers/event/sw/sw_evdev.c\n@@ -113,9 +113,21 @@ sw_port_unlink(struct rte_eventdev *dev, void *port, uint8_t queues[],\n \t\t\t}\n \t\t}\n \t}\n+\n+\tp->unlinks_in_progress += unlinked;\n+\trte_smp_mb();\n+\n \treturn unlinked;\n }\n \n+static int\n+sw_port_unlinks_in_progress(struct rte_eventdev *dev, void *port)\n+{\n+\tRTE_SET_USED(dev);\n+\tstruct sw_port *p = port;\n+\treturn p->unlinks_in_progress;\n+}\n+\n static int\n sw_port_setup(struct rte_eventdev *dev, uint8_t port_id,\n \t\tconst struct rte_event_port_conf *conf)\n@@ -925,6 +937,7 @@ sw_probe(struct rte_vdev_device *vdev)\n \t\t\t.port_release = sw_port_release,\n \t\t\t.port_link = sw_port_link,\n \t\t\t.port_unlink = sw_port_unlink,\n+\t\t\t.port_unlinks_in_progress = sw_port_unlinks_in_progress,\n \n \t\t\t.eth_rx_adapter_caps_get = sw_eth_rx_adapter_caps_get,\n \ndiff --git a/drivers/event/sw/sw_evdev.h b/drivers/event/sw/sw_evdev.h\nindex d90b96d4b..7c77b2495 100644\n--- a/drivers/event/sw/sw_evdev.h\n+++ b/drivers/event/sw/sw_evdev.h\n@@ -148,6 +148,14 @@ struct sw_port {\n \t/* A numeric ID for the port */\n \tuint8_t id;\n \n+\t/* An atomic counter for when the port has been unlinked, and the\n+\t * scheduler has not yet acked this unlink - hence there may still be\n+\t * events in the buffers going to the port. When the unlinks in\n+\t * progress is read by the scheduler, no more events will be pushed to\n+\t * the port - hence the scheduler core can just assign zero.\n+\t */\n+\tuint8_t unlinks_in_progress;\n+\n \tint16_t is_directed; /** Takes from a single directed QID */\n \t/**\n \t * For loadbalanced we can optimise pulling packets from\ndiff --git a/drivers/event/sw/sw_evdev_scheduler.c b/drivers/event/sw/sw_evdev_scheduler.c\nindex e3a41e02f..9b54d5ce7 100644\n--- a/drivers/event/sw/sw_evdev_scheduler.c\n+++ b/drivers/event/sw/sw_evdev_scheduler.c\n@@ -517,13 +517,18 @@ sw_event_schedule(struct rte_eventdev *dev)\n \t\t/* Pull from rx_ring for ports */\n \t\tdo {\n \t\t\tin_pkts = 0;\n-\t\t\tfor (i = 0; i < sw->port_count; i++)\n+\t\t\tfor (i = 0; i < sw->port_count; i++) {\n+\t\t\t\t/* ack the unlinks in progress as done */\n+\t\t\t\tif (sw->ports[i].unlinks_in_progress)\n+\t\t\t\t\tsw->ports[i].unlinks_in_progress = 0;\n+\n \t\t\t\tif (sw->ports[i].is_directed)\n \t\t\t\t\tin_pkts += sw_schedule_pull_port_dir(sw, i);\n \t\t\t\telse if (sw->ports[i].num_ordered_qids > 0)\n \t\t\t\t\tin_pkts += sw_schedule_pull_port_lb(sw, i);\n \t\t\t\telse\n \t\t\t\t\tin_pkts += sw_schedule_pull_port_no_reorder(sw, i);\n+\t\t\t}\n \n \t\t\t/* QID scan for re-ordered */\n \t\t\tin_pkts += sw_schedule_reorder(sw, 0,\n",
    "prefixes": [
        "v3",
        "2/3"
    ]
}