get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 40345,
    "url": "https://patches.dpdk.org/api/patches/40345/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20180522181347.28083-6-ajit.khaparde@broadcom.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": "<20180522181347.28083-6-ajit.khaparde@broadcom.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20180522181347.28083-6-ajit.khaparde@broadcom.com",
    "date": "2018-05-22T18:13:45",
    "name": "[dpdk-dev,v2,5/7] net/bnxt: fix VF resource allocation",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "220aeb883b34d715263b8a3480e9148bae6f982f",
    "submitter": {
        "id": 501,
        "url": "https://patches.dpdk.org/api/people/501/?format=api",
        "name": "Ajit Khaparde",
        "email": "ajit.khaparde@broadcom.com"
    },
    "delegate": {
        "id": 319,
        "url": "https://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20180522181347.28083-6-ajit.khaparde@broadcom.com/mbox/",
    "series": [],
    "comments": "https://patches.dpdk.org/api/patches/40345/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/40345/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 C20C02E8F;\n\tTue, 22 May 2018 20:14:04 +0200 (CEST)",
            "from rnd-relay.smtp.broadcom.com (rnd-relay.smtp.broadcom.com\n\t[192.19.229.170]) by dpdk.org (Postfix) with ESMTP id 1AD80231E\n\tfor <dev@dpdk.org>; Tue, 22 May 2018 20:13:55 +0200 (CEST)",
            "from nis-sj1-27.broadcom.com (nis-sj1-27.lvn.broadcom.net\n\t[10.75.144.136])\n\tby rnd-relay.smtp.broadcom.com (Postfix) with ESMTP id 6815E30C008;\n\tTue, 22 May 2018 11:13:52 -0700 (PDT)",
            "from C02VPB22HTD6.dhcp.broadcom.net (c02vpb22htd6.dhcp.broadcom.net\n\t[10.136.50.120])\n\tby nis-sj1-27.broadcom.com (Postfix) with ESMTP id 6882BAC073F;\n\tTue, 22 May 2018 11:13:52 -0700 (PDT)"
        ],
        "From": "Ajit Khaparde <ajit.khaparde@broadcom.com>",
        "To": "dev@dpdk.org",
        "Cc": "Jay Ding <jay.ding@broadcom.com>,\n\tScott Branden <scott.branden@broadcom.com>",
        "Date": "Tue, 22 May 2018 11:13:45 -0700",
        "Message-Id": "<20180522181347.28083-6-ajit.khaparde@broadcom.com>",
        "X-Mailer": "git-send-email 2.15.1 (Apple Git-101)",
        "In-Reply-To": "<20180522181347.28083-1-ajit.khaparde@broadcom.com>",
        "References": "<11202777-eae3-9004-fece-d5734cd151da@intel.com>\n\t<20180522181347.28083-1-ajit.khaparde@broadcom.com>",
        "Subject": "[dpdk-dev] [PATCH v2 5/7] net/bnxt: fix VF resource allocation",
        "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://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": "<https://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": "If the resource requirement of a VF is more than what is allotted\nto it by the FW, a VF can request to reallocate some of the resources.\n\nThis is possible only when the NIC is running the Resource Manager aware\nCHiMP FW.\n\nIf necessary, calculate Tx and Rx ring count using the new RM API.\nOtherwise use the Tx and Rx ring count as-is. Update the cp ring count\nbased on the Tx and Rx ring count.\n\nFixes: b7778e8a1c00 (\"net/bnxt: refactor to properly allocate resources for PF/VF\")\n\nSigned-off-by: Jay Ding <jay.ding@broadcom.com>\nSigned-off-by: Scott Branden <scott.branden@broadcom.com>\nReviewed-by: Ray Jui <ray.jui@broadcom.com>\nReviewed-by: Randy Schacher <stuart.schacher@broadcom.com>\nSigned-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>\n---\n drivers/net/bnxt/bnxt.h        |  1 +\n drivers/net/bnxt/bnxt_ethdev.c | 25 +++++++++++---\n drivers/net/bnxt/bnxt_hwrm.c   | 75 +++++++++++++++++++++++++++++++++++++++++-\n drivers/net/bnxt/bnxt_hwrm.h   |  2 ++\n drivers/net/bnxt/bnxt_ring.h   |  1 +\n 5 files changed, 98 insertions(+), 6 deletions(-)",
    "diff": "diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h\nindex a93fbf533..afaaf8c41 100644\n--- a/drivers/net/bnxt/bnxt.h\n+++ b/drivers/net/bnxt/bnxt.h\n@@ -220,6 +220,7 @@ struct bnxt {\n #define BNXT_FLAG_UPDATE_HASH\t(1 << 5)\n #define BNXT_FLAG_PTP_SUPPORTED\t(1 << 6)\n #define BNXT_FLAG_MULTI_HOST    (1 << 7)\n+#define BNXT_FLAG_NEW_RM\t(1 << 30)\n #define BNXT_FLAG_INIT_DONE\t(1 << 31)\n #define BNXT_PF(bp)\t\t(!((bp)->flags & BNXT_FLAG_VF))\n #define BNXT_VF(bp)\t\t((bp)->flags & BNXT_FLAG_VF)\ndiff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c\nindex 0aba9a3fc..62e02aa8a 100644\n--- a/drivers/net/bnxt/bnxt_ethdev.c\n+++ b/drivers/net/bnxt/bnxt_ethdev.c\n@@ -406,9 +406,7 @@ static void bnxt_dev_info_get_op(struct rte_eth_dev *eth_dev,\n \t/* PF/VF specifics */\n \tif (BNXT_PF(bp))\n \t\tdev_info->max_vfs = bp->pdev->max_vfs;\n-\tmax_rx_rings = RTE_MIN(bp->max_vnics, RTE_MIN(bp->max_l2_ctx,\n-\t\t\t\t\t\tRTE_MIN(bp->max_rsscos_ctx,\n-\t\t\t\t\t\tbp->max_stat_ctx)));\n+\tmax_rx_rings = RTE_MIN(bp->max_vnics, bp->max_stat_ctx);\n \t/* For the sake of symmetry, max_rx_queues = max_tx_queues */\n \tdev_info->max_rx_queues = max_rx_rings;\n \tdev_info->max_tx_queues = max_rx_rings;\n@@ -494,6 +492,25 @@ static int bnxt_dev_configure_op(struct rte_eth_dev *eth_dev)\n \n \tbp->rx_queues = (void *)eth_dev->data->rx_queues;\n \tbp->tx_queues = (void *)eth_dev->data->tx_queues;\n+\tbp->tx_nr_rings = eth_dev->data->nb_tx_queues;\n+\tbp->rx_nr_rings = eth_dev->data->nb_rx_queues;\n+\n+\tif (BNXT_VF(bp) && (bp->flags & BNXT_FLAG_NEW_RM)) {\n+\t\tint rc;\n+\n+\t\trc = bnxt_hwrm_func_reserve_vf_resc(bp);\n+\t\tif (rc) {\n+\t\t\tPMD_DRV_LOG(ERR, \"HWRM resource alloc fail:%x\\n\", rc);\n+\t\t\treturn -ENOSPC;\n+\t\t}\n+\n+\t\t/* legacy driver needs to get updated values */\n+\t\trc = bnxt_hwrm_func_qcaps(bp);\n+\t\tif (rc) {\n+\t\t\tPMD_DRV_LOG(ERR, \"hwrm func qcaps fail:%d\\n\", rc);\n+\t\t\treturn -ENOSPC;\n+\t\t}\n+\t}\n \n \t/* Inherit new configurations */\n \tif (eth_dev->data->nb_rx_queues > bp->max_rx_rings ||\n@@ -516,8 +533,6 @@ static int bnxt_dev_configure_op(struct rte_eth_dev *eth_dev)\n \t\treturn -ENOSPC;\n \t}\n \n-\tbp->rx_nr_rings = eth_dev->data->nb_rx_queues;\n-\tbp->tx_nr_rings = eth_dev->data->nb_tx_queues;\n \tbp->rx_cp_nr_rings = bp->rx_nr_rings;\n \tbp->tx_cp_nr_rings = bp->tx_nr_rings;\n \ndiff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c\nindex bf847a828..ba4ef1676 100644\n--- a/drivers/net/bnxt/bnxt_hwrm.c\n+++ b/drivers/net/bnxt/bnxt_hwrm.c\n@@ -27,6 +27,7 @@\n #include <rte_io.h>\n \n #define HWRM_CMD_TIMEOUT\t\t10000\n+#define HWRM_SPEC_CODE_1_8_3\t\t0x10803\n #define HWRM_VERSION_1_9_1\t\t0x10901\n \n struct bnxt_plcmodes_cfg {\n@@ -483,7 +484,7 @@ static int bnxt_hwrm_ptp_qcfg(struct bnxt *bp)\n \treturn 0;\n }\n \n-int bnxt_hwrm_func_qcaps(struct bnxt *bp)\n+static int __bnxt_hwrm_func_qcaps(struct bnxt *bp)\n {\n \tint rc = 0;\n \tstruct hwrm_func_qcaps_input req = {.req_type = 0 };\n@@ -573,6 +574,20 @@ int bnxt_hwrm_func_qcaps(struct bnxt *bp)\n \treturn rc;\n }\n \n+int bnxt_hwrm_func_qcaps(struct bnxt *bp)\n+{\n+\tint rc;\n+\n+\trc = __bnxt_hwrm_func_qcaps(bp);\n+\tif (!rc && bp->hwrm_spec_code >= HWRM_SPEC_CODE_1_8_3) {\n+\t\trc = bnxt_hwrm_func_resc_qcaps(bp);\n+\t\tif (!rc)\n+\t\t\tbp->flags |= BNXT_FLAG_NEW_RM;\n+\t}\n+\n+\treturn rc;\n+}\n+\n int bnxt_hwrm_func_reset(struct bnxt *bp)\n {\n \tint rc = 0;\n@@ -642,6 +657,64 @@ int bnxt_hwrm_func_driver_register(struct bnxt *bp)\n \treturn rc;\n }\n \n+int bnxt_hwrm_func_reserve_vf_resc(struct bnxt *bp)\n+{\n+\tint rc;\n+\tstruct hwrm_func_vf_cfg_output *resp = bp->hwrm_cmd_resp_addr;\n+\tstruct hwrm_func_vf_cfg_input req = {0};\n+\n+\tHWRM_PREP(req, FUNC_VF_CFG);\n+\n+\treq.enables = rte_cpu_to_le_32\n+\t\t\t(HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_RX_RINGS  |\n+\t\t\tHWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_TX_RINGS   |\n+\t\t\tHWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_STAT_CTXS  |\n+\t\t\tHWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_CMPL_RINGS |\n+\t\t\tHWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_HW_RING_GRPS);\n+\n+\treq.num_tx_rings = rte_cpu_to_le_16(bp->tx_nr_rings);\n+\treq.num_rx_rings = rte_cpu_to_le_16(bp->rx_nr_rings *\n+\t\t\t\t\t    AGG_RING_MULTIPLIER);\n+\treq.num_stat_ctxs = rte_cpu_to_le_16(bp->rx_nr_rings + bp->tx_nr_rings);\n+\treq.num_cmpl_rings = rte_cpu_to_le_16(bp->rx_nr_rings +\n+\t\t\t\t\t      bp->tx_nr_rings);\n+\treq.num_hw_ring_grps = rte_cpu_to_le_16(bp->rx_nr_rings);\n+\n+\trc = bnxt_hwrm_send_message(bp, &req, sizeof(req));\n+\n+\tHWRM_CHECK_RESULT();\n+\tHWRM_UNLOCK();\n+\treturn rc;\n+}\n+\n+int bnxt_hwrm_func_resc_qcaps(struct bnxt *bp)\n+{\n+\tint rc;\n+\tstruct hwrm_func_resource_qcaps_output *resp = bp->hwrm_cmd_resp_addr;\n+\tstruct hwrm_func_resource_qcaps_input req = {0};\n+\n+\tHWRM_PREP(req, FUNC_RESOURCE_QCAPS);\n+\treq.fid = rte_cpu_to_le_16(0xffff);\n+\n+\trc = bnxt_hwrm_send_message(bp, &req, sizeof(req));\n+\n+\tHWRM_CHECK_RESULT();\n+\n+\tif (BNXT_VF(bp)) {\n+\t\tbp->max_rsscos_ctx = rte_le_to_cpu_16(resp->max_rsscos_ctx);\n+\t\tbp->max_cp_rings = rte_le_to_cpu_16(resp->max_cmpl_rings);\n+\t\tbp->max_tx_rings = rte_le_to_cpu_16(resp->max_tx_rings);\n+\t\tbp->max_rx_rings = rte_le_to_cpu_16(resp->max_rx_rings);\n+\t\tbp->max_ring_grps = rte_le_to_cpu_32(resp->max_hw_ring_grps);\n+\t\tbp->max_l2_ctx = rte_le_to_cpu_16(resp->max_l2_ctxs);\n+\t\tbp->max_vnics = rte_le_to_cpu_16(resp->max_vnics);\n+\t\tbp->max_stat_ctx = rte_le_to_cpu_16(resp->max_stat_ctx);\n+\t}\n+\n+\tHWRM_UNLOCK();\n+\treturn rc;\n+}\n+\n int bnxt_hwrm_ver_get(struct bnxt *bp)\n {\n \tint rc = 0;\ndiff --git a/drivers/net/bnxt/bnxt_hwrm.h b/drivers/net/bnxt/bnxt_hwrm.h\nindex 4813c7fb6..60a4ab16a 100644\n--- a/drivers/net/bnxt/bnxt_hwrm.h\n+++ b/drivers/net/bnxt/bnxt_hwrm.h\n@@ -111,6 +111,8 @@ int bnxt_alloc_hwrm_resources(struct bnxt *bp);\n int bnxt_get_hwrm_link_config(struct bnxt *bp, struct rte_eth_link *link);\n int bnxt_set_hwrm_link_config(struct bnxt *bp, bool link_up);\n int bnxt_hwrm_func_qcfg(struct bnxt *bp);\n+int bnxt_hwrm_func_resc_qcaps(struct bnxt *bp);\n+int bnxt_hwrm_func_reserve_vf_resc(struct bnxt *bp);\n int bnxt_hwrm_allocate_pf_only(struct bnxt *bp);\n int bnxt_hwrm_allocate_vfs(struct bnxt *bp, int num_vfs);\n int bnxt_hwrm_func_vf_mac(struct bnxt *bp, uint16_t vf,\ndiff --git a/drivers/net/bnxt/bnxt_ring.h b/drivers/net/bnxt/bnxt_ring.h\nindex 6c86259e8..65bf3e2f5 100644\n--- a/drivers/net/bnxt/bnxt_ring.h\n+++ b/drivers/net/bnxt/bnxt_ring.h\n@@ -28,6 +28,7 @@\n \n #define BNXT_TPA_MAX\t\t64\n #define AGG_RING_SIZE_FACTOR\t2\n+#define AGG_RING_MULTIPLIER\t2\n \n /* These assume 4k pages */\n #define MAX_RX_DESC_CNT (8 * 1024)\n",
    "prefixes": [
        "dpdk-dev",
        "v2",
        "5/7"
    ]
}