get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 83368,
    "url": "http://patches.dpdk.org/api/patches/83368/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1604308702-7744-1-git-send-email-wangyunjian@huawei.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": "<1604308702-7744-1-git-send-email-wangyunjian@huawei.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1604308702-7744-1-git-send-email-wangyunjian@huawei.com",
    "date": "2020-11-02T09:18:22",
    "name": "[v3] ethdev: fix data type for port id",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "7161c4ef6bb0967ce474fe9dd2a0041ae02670dd",
    "submitter": {
        "id": 551,
        "url": "http://patches.dpdk.org/api/people/551/?format=api",
        "name": "Yunjian Wang",
        "email": "wangyunjian@huawei.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/1604308702-7744-1-git-send-email-wangyunjian@huawei.com/mbox/",
    "series": [
        {
            "id": 13557,
            "url": "http://patches.dpdk.org/api/series/13557/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=13557",
            "date": "2020-11-02T09:18:22",
            "name": "[v3] ethdev: fix data type for port id",
            "version": 3,
            "mbox": "http://patches.dpdk.org/series/13557/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/83368/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/83368/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 dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id D00F9A04E7;\n\tMon,  2 Nov 2020 10:18:40 +0100 (CET)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 9F357AD6F;\n\tMon,  2 Nov 2020 10:18:38 +0100 (CET)",
            "from szxga04-in.huawei.com (szxga04-in.huawei.com [45.249.212.190])\n by dpdk.org (Postfix) with ESMTP id 09B7672ED;\n Mon,  2 Nov 2020 10:18:34 +0100 (CET)",
            "from DGGEMS407-HUB.china.huawei.com (unknown [172.30.72.58])\n by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4CPnQV5p2kzkdZF;\n Mon,  2 Nov 2020 17:18:26 +0800 (CST)",
            "from localhost (10.174.187.156) by DGGEMS407-HUB.china.huawei.com\n (10.3.19.207) with Microsoft SMTP Server id 14.3.487.0; Mon, 2 Nov 2020\n 17:18:23 +0800"
        ],
        "From": "wangyunjian <wangyunjian@huawei.com>",
        "To": "<dev@dpdk.org>",
        "CC": "<thomas@monjalon.net>, <ferruh.yigit@intel.com>,\n <andrew.rybchenko@oktetlabs.ru>, <jerry.lilijun@huawei.com>,\n <xudingke@huawei.com>, Yunjian Wang <wangyunjian@huawei.com>,\n <stable@dpdk.org>",
        "Date": "Mon, 2 Nov 2020 17:18:22 +0800",
        "Message-ID": "<1604308702-7744-1-git-send-email-wangyunjian@huawei.com>",
        "X-Mailer": "git-send-email 1.9.5.msysgit.1",
        "In-Reply-To": "<1603806082-21484-1-git-send-email-wangyunjian@huawei.com>",
        "References": "<1603806082-21484-1-git-send-email-wangyunjian@huawei.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[10.174.187.156]",
        "X-CFilter-Loop": "Reflected",
        "Subject": "[dpdk-dev]  [PATCH v3] ethdev: fix data type for port id",
        "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 <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",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "From: Yunjian Wang <wangyunjian@huawei.com>\n\nThe ethdev port id is 16 bits now. This patch fixes the data type\nof the variable for 'pid', which changing from uint32_t to uint16_t.\n\nRTE_MAX_ETHPORTS is the maximum number of ports, which customized by\nthe user. To avoid 16-bit unsigned integer overflow, the valid value\nof RTE_MAX_ETHPORTS should be set from 0 to UINT16_MAX, and it is\nsafer to cut one more port from space.\n\nSo we use RTE_BUILD_BUG_ON() to ensure that RTE_MAX_ETHPORTS is less\nto UINT16_MAX.\n\nFixes: 5b7ba31148a8 (\"ethdev: add port ownership\")\nCc: stable@dpdk.org\n\nSigned-off-by: Yunjian Wang <wangyunjian@huawei.com>\n---\nv3:\n   fix code styles suggested by Thomas Monjalon and Andrew Rybchenko\nv2:\n   add RTE_BUILD_BUG_ON() check for RTE_MAX_ETHPORTS validity\n---\n lib/librte_ethdev/rte_ethdev.c | 36 +++++++++++++++++++++++++++-------\n 1 file changed, 29 insertions(+), 7 deletions(-)",
    "diff": "diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c\nindex b12bb3854d..5594855c6e 100644\n--- a/lib/librte_ethdev/rte_ethdev.c\n+++ b/lib/librte_ethdev/rte_ethdev.c\n@@ -332,6 +332,8 @@ rte_eth_iterator_cleanup(struct rte_dev_iterator *iter)\n uint16_t\n rte_eth_find_next(uint16_t port_id)\n {\n+\tRTE_BUILD_BUG_ON(RTE_MAX_ETHPORTS >= UINT16_MAX);\n+\n \twhile (port_id < RTE_MAX_ETHPORTS &&\n \t\t\trte_eth_devices[port_id].state == RTE_ETH_DEV_UNUSED)\n \t\tport_id++;\n@@ -354,6 +356,8 @@ rte_eth_find_next(uint16_t port_id)\n uint16_t\n rte_eth_find_next_of(uint16_t port_id, const struct rte_device *parent)\n {\n+\tRTE_BUILD_BUG_ON(RTE_MAX_ETHPORTS >= UINT16_MAX);\n+\n \tport_id = rte_eth_find_next(port_id);\n \twhile (port_id < RTE_MAX_ETHPORTS &&\n \t\t\trte_eth_devices[port_id].device != parent)\n@@ -411,7 +415,9 @@ eth_dev_is_allocated(const struct rte_eth_dev *ethdev)\n static struct rte_eth_dev *\n eth_dev_allocated(const char *name)\n {\n-\tunsigned i;\n+\tuint16_t i;\n+\n+\tRTE_BUILD_BUG_ON(RTE_MAX_ETHPORTS >= UINT16_MAX);\n \n \tfor (i = 0; i < RTE_MAX_ETHPORTS; i++) {\n \t\tif (rte_eth_devices[i].data != NULL &&\n@@ -440,7 +446,9 @@ rte_eth_dev_allocated(const char *name)\n static uint16_t\n eth_dev_find_free_port(void)\n {\n-\tunsigned i;\n+\tuint16_t i;\n+\n+\tRTE_BUILD_BUG_ON(RTE_MAX_ETHPORTS >= UINT16_MAX);\n \n \tfor (i = 0; i < RTE_MAX_ETHPORTS; i++) {\n \t\t/* Using shared name field to find a free port. */\n@@ -528,6 +536,8 @@ rte_eth_dev_attach_secondary(const char *name)\n \t/* Synchronize port attachment to primary port creation and release. */\n \trte_spinlock_lock(&eth_dev_shared_data->ownership_lock);\n \n+\tRTE_BUILD_BUG_ON(RTE_MAX_ETHPORTS >= UINT16_MAX);\n+\n \tfor (i = 0; i < RTE_MAX_ETHPORTS; i++) {\n \t\tif (strcmp(eth_dev_shared_data->data[i].name, name) == 0)\n \t\t\tbreak;\n@@ -609,6 +619,8 @@ eth_is_valid_owner_id(uint64_t owner_id)\n uint64_t\n rte_eth_find_next_owned_by(uint16_t port_id, const uint64_t owner_id)\n {\n+\tRTE_BUILD_BUG_ON(RTE_MAX_ETHPORTS >= UINT16_MAX);\n+\n \tport_id = rte_eth_find_next(port_id);\n \twhile (port_id < RTE_MAX_ETHPORTS &&\n \t\t\trte_eth_devices[port_id].data->owner.id != owner_id)\n@@ -713,6 +725,8 @@ rte_eth_dev_owner_delete(const uint64_t owner_id)\n \n \trte_spinlock_lock(&eth_dev_shared_data->ownership_lock);\n \n+\tRTE_BUILD_BUG_ON(RTE_MAX_ETHPORTS >= UINT16_MAX);\n+\n \tif (eth_is_valid_owner_id(owner_id)) {\n \t\tfor (port_id = 0; port_id < RTE_MAX_ETHPORTS; port_id++)\n \t\t\tif (rte_eth_devices[port_id].data->owner.id == owner_id)\n@@ -816,7 +830,7 @@ rte_eth_dev_get_name_by_port(uint16_t port_id, char *name)\n int\n rte_eth_dev_get_port_by_name(const char *name, uint16_t *port_id)\n {\n-\tuint32_t pid;\n+\tuint16_t pid;\n \n \tif (name == NULL) {\n \t\tRTE_ETHDEV_LOG(ERR, \"Null pointer is specified\\n\");\n@@ -4290,7 +4304,9 @@ rte_eth_mirror_rule_reset(uint16_t port_id, uint8_t rule_id)\n \n RTE_INIT(eth_dev_init_cb_lists)\n {\n-\tint i;\n+\tuint16_t i;\n+\n+\tRTE_BUILD_BUG_ON(RTE_MAX_ETHPORTS >= UINT16_MAX);\n \n \tfor (i = 0; i < RTE_MAX_ETHPORTS; i++)\n \t\tTAILQ_INIT(&rte_eth_devices[i].link_intr_cbs);\n@@ -4303,9 +4319,11 @@ rte_eth_dev_callback_register(uint16_t port_id,\n {\n \tstruct rte_eth_dev *dev;\n \tstruct rte_eth_dev_callback *user_cb;\n-\tuint32_t next_port; /* size is 32-bit to prevent loop wrap-around */\n+\tuint16_t next_port;\n \tuint16_t last_port;\n \n+\tRTE_BUILD_BUG_ON(RTE_MAX_ETHPORTS >= UINT16_MAX);\n+\n \tif (!cb_fn)\n \t\treturn -EINVAL;\n \n@@ -4366,9 +4384,11 @@ rte_eth_dev_callback_unregister(uint16_t port_id,\n \tint ret;\n \tstruct rte_eth_dev *dev;\n \tstruct rte_eth_dev_callback *cb, *next;\n-\tuint32_t next_port; /* size is 32-bit to prevent loop wrap-around */\n+\tuint16_t next_port;\n \tuint16_t last_port;\n \n+\tRTE_BUILD_BUG_ON(RTE_MAX_ETHPORTS >= UINT16_MAX);\n+\n \tif (!cb_fn)\n \t\treturn -EINVAL;\n \n@@ -5507,10 +5527,12 @@ static struct rte_eth_dev_switch {\n int\n rte_eth_switch_domain_alloc(uint16_t *domain_id)\n {\n-\tunsigned int i;\n+\tuint16_t i;\n \n \t*domain_id = RTE_ETH_DEV_SWITCH_DOMAIN_ID_INVALID;\n \n+\tRTE_BUILD_BUG_ON(RTE_MAX_ETHPORTS >= UINT16_MAX);\n+\n \tfor (i = 0; i < RTE_MAX_ETHPORTS; i++) {\n \t\tif (eth_dev_switch_domains[i].state ==\n \t\t\tRTE_ETH_SWITCH_DOMAIN_UNUSED) {\n",
    "prefixes": [
        "v3"
    ]
}