Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/127077/?format=api
https://patches.dpdk.org/api/patches/127077/?format=api", "web_url": "https://patches.dpdk.org/project/dpdk/patch/20230519051055.106893-6-beilei.xing@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": "<20230519051055.106893-6-beilei.xing@intel.com>", "list_archive_url": "https://inbox.dpdk.org/dev/20230519051055.106893-6-beilei.xing@intel.com", "date": "2023-05-19T05:10:49", "name": "[v2,04/10] net/cpfl: add haipin queue group during vpotr init", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": true, "hash": "a68c615dd881f2e2ef560d1e2ed6bc6fb24f9316", "submitter": { "id": 410, "url": "https://patches.dpdk.org/api/people/410/?format=api", "name": "Xing, Beilei", "email": "beilei.xing@intel.com" }, "delegate": null, "mbox": "https://patches.dpdk.org/project/dpdk/patch/20230519051055.106893-6-beilei.xing@intel.com/mbox/", "series": [ { "id": 28079, "url": "https://patches.dpdk.org/api/series/28079/?format=api", "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=28079", "date": "2023-05-19T05:10:49", "name": null, "version": 2, "mbox": "https://patches.dpdk.org/series/28079/mbox/" } ], "comments": "https://patches.dpdk.org/api/patches/127077/comments/", "check": "warning", "checks": "https://patches.dpdk.org/api/patches/127077/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 mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id A8A8042B43;\n\tFri, 19 May 2023 07:35:39 +0200 (CEST)", "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 2CE0142D3D;\n\tFri, 19 May 2023 07:35:31 +0200 (CEST)", "from mga05.intel.com (mga05.intel.com [192.55.52.43])\n by mails.dpdk.org (Postfix) with ESMTP id E617D4161A\n for <dev@dpdk.org>; Fri, 19 May 2023 07:35:29 +0200 (CEST)", "from fmsmga007.fm.intel.com ([10.253.24.52])\n by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 18 May 2023 22:35:07 -0700", "from dpdk-beileix-3.sh.intel.com ([10.67.110.253])\n by fmsmga007.fm.intel.com with ESMTP; 18 May 2023 22:35:06 -0700" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple;\n d=intel.com; i=@intel.com; q=dns/txt; s=Intel;\n t=1684474530; x=1716010530;\n h=from:to:cc:subject:date:message-id:in-reply-to:\n references:mime-version:content-transfer-encoding;\n bh=c0jXvzr9Ws9xKewpNgd4Km2rXEnU7D5cgC7CyIce33g=;\n b=H0p54Rwa0h5pWhJJ5lSiXPTIaTIfPuaSGL1eCGBi24h3Ey9zh5aG5XAX\n JGeXKubsQEYowH2U1Bq6GMXMBy1rZ53SbKMtzUG48I8j8p/j3CGRp1hwb\n 7aIqtLVqEE3cc0fmtWFTJZ3R/cnuu9Yx6BicHTUSnxKlpLJlULRp0bNfU\n xZHgQM4FxgnpedM1DrUzxNpYBsYi9CSc6Di6ELyx3gjt0BhFrx31Ty+x+\n viDcULAG09K+vwYiLZ8NFR7AMYCjLuUJXB7MdbU12hjDgAZk/tnGvOprK\n nY9mw74/aHTqDOiVD2IfOGSplUhlXKbs/8jnVq9ccRzJWDwPF5ASUt29G g==;", "X-IronPort-AV": [ "E=McAfee;i=\"6600,9927,10714\"; a=\"438639515\"", "E=Sophos;i=\"6.00,175,1681196400\"; d=\"scan'208\";a=\"438639515\"", "E=McAfee;i=\"6600,9927,10714\"; a=\"705462399\"", "E=Sophos;i=\"6.00,175,1681196400\"; d=\"scan'208\";a=\"705462399\"" ], "X-ExtLoop1": "1", "From": "beilei.xing@intel.com", "To": "jingjing.wu@intel.com", "Cc": "dev@dpdk.org, mingxia.liu@intel.com, Beilei Xing <beilei.xing@intel.com>", "Subject": "[PATCH v2 04/10] net/cpfl: add haipin queue group during vpotr init", "Date": "Fri, 19 May 2023 05:10:49 +0000", "Message-Id": "<20230519051055.106893-6-beilei.xing@intel.com>", "X-Mailer": "git-send-email 2.26.2", "In-Reply-To": "<20230519051055.106893-1-beilei.xing@intel.com>", "References": "<20230421065048.106899-1-beilei.xing@intel.com>\n <20230519051055.106893-1-beilei.xing@intel.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "X-BeenThere": "dev@dpdk.org", "X-Mailman-Version": "2.1.29", "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" }, "content": "From: Beilei Xing <beilei.xing@intel.com>\n\nThis patch adds haipin queue group during vpotr init.\n\nSigned-off-by: Mingxia Liu <mingxia.liu@intel.com>\nSigned-off-by: Beilei Xing <beilei.xing@intel.com>\n---\n drivers/net/cpfl/cpfl_ethdev.c | 130 +++++++++++++++++++++++++++++++++\n drivers/net/cpfl/cpfl_ethdev.h | 18 +++++\n drivers/net/cpfl/cpfl_rxtx.h | 4 +\n 3 files changed, 152 insertions(+)", "diff": "diff --git a/drivers/net/cpfl/cpfl_ethdev.c b/drivers/net/cpfl/cpfl_ethdev.c\nindex 114fc18f5f..7ba425f533 100644\n--- a/drivers/net/cpfl/cpfl_ethdev.c\n+++ b/drivers/net/cpfl/cpfl_ethdev.c\n@@ -856,6 +856,20 @@ cpfl_dev_stop(struct rte_eth_dev *dev)\n \treturn 0;\n }\n \n+static int\n+cpfl_p2p_queue_grps_del(struct idpf_vport *vport)\n+{\n+\tstruct virtchnl2_queue_group_id qg_ids[CPFL_P2P_NB_QUEUE_GRPS] = {0};\n+\tint ret = 0;\n+\n+\tqg_ids[0].queue_group_id = CPFL_P2P_QUEUE_GRP_ID;\n+\tqg_ids[0].queue_group_type = VIRTCHNL2_QUEUE_GROUP_P2P;\n+\tret = idpf_vc_queue_grps_del(vport, CPFL_P2P_NB_QUEUE_GRPS, qg_ids);\n+\tif (ret)\n+\t\tPMD_DRV_LOG(ERR, \"Failed to delete p2p queue groups\");\n+\treturn ret;\n+}\n+\n static int\n cpfl_dev_close(struct rte_eth_dev *dev)\n {\n@@ -864,6 +878,10 @@ cpfl_dev_close(struct rte_eth_dev *dev)\n \tstruct cpfl_adapter_ext *adapter = CPFL_ADAPTER_TO_EXT(vport->adapter);\n \n \tcpfl_dev_stop(dev);\n+\n+\tif (!adapter->base.is_rx_singleq && !adapter->base.is_tx_singleq)\n+\t\tcpfl_p2p_queue_grps_del(vport);\n+\n \tidpf_vport_deinit(vport);\n \n \tadapter->cur_vports &= ~RTE_BIT32(vport->devarg_id);\n@@ -1350,6 +1368,96 @@ cpfl_vport_idx_alloc(struct cpfl_adapter_ext *adapter)\n \treturn vport_idx;\n }\n \n+static int\n+cpfl_p2p_q_grps_add(struct idpf_vport *vport,\n+\t\t struct virtchnl2_add_queue_groups *p2p_queue_grps_info,\n+\t\t uint8_t *p2p_q_vc_out_info)\n+{\n+\tint ret;\n+\n+\tp2p_queue_grps_info->vport_id = vport->vport_id;\n+\tp2p_queue_grps_info->qg_info.num_queue_groups = CPFL_P2P_NB_QUEUE_GRPS;\n+\tp2p_queue_grps_info->qg_info.groups[0].num_rx_q = CPFL_MAX_P2P_NB_QUEUES;\n+\tp2p_queue_grps_info->qg_info.groups[0].num_rx_bufq = CPFL_P2P_NB_RX_BUFQ;\n+\tp2p_queue_grps_info->qg_info.groups[0].num_tx_q = CPFL_MAX_P2P_NB_QUEUES;\n+\tp2p_queue_grps_info->qg_info.groups[0].num_tx_complq = CPFL_P2P_NB_TX_COMPLQ;\n+\tp2p_queue_grps_info->qg_info.groups[0].qg_id.queue_group_id = CPFL_P2P_QUEUE_GRP_ID;\n+\tp2p_queue_grps_info->qg_info.groups[0].qg_id.queue_group_type = VIRTCHNL2_QUEUE_GROUP_P2P;\n+\tp2p_queue_grps_info->qg_info.groups[0].rx_q_grp_info.rss_lut_size = 0;\n+\tp2p_queue_grps_info->qg_info.groups[0].tx_q_grp_info.tx_tc = 0;\n+\tp2p_queue_grps_info->qg_info.groups[0].tx_q_grp_info.priority = 0;\n+\tp2p_queue_grps_info->qg_info.groups[0].tx_q_grp_info.is_sp = 0;\n+\tp2p_queue_grps_info->qg_info.groups[0].tx_q_grp_info.pir_weight = 0;\n+\n+\tret = idpf_vc_queue_grps_add(vport, p2p_queue_grps_info, p2p_q_vc_out_info);\n+\tif (ret != 0) {\n+\t\tPMD_DRV_LOG(ERR, \"Failed to add p2p queue groups.\");\n+\t\treturn ret;\n+\t}\n+\n+\treturn ret;\n+}\n+\n+static int\n+cpfl_p2p_queue_info_init(struct cpfl_vport *cpfl_vport,\n+\t\t\t struct virtchnl2_add_queue_groups *p2p_q_vc_out_info)\n+{\n+\tstruct p2p_queue_chunks_info *p2p_q_chunks_info = &cpfl_vport->p2p_q_chunks_info;\n+\tstruct virtchnl2_queue_reg_chunks *vc_chunks_out;\n+\tint i, type;\n+\n+\tif (p2p_q_vc_out_info->qg_info.groups[0].qg_id.queue_group_type !=\n+\t VIRTCHNL2_QUEUE_GROUP_P2P) {\n+\t\tPMD_DRV_LOG(ERR, \"Add queue group response mismatch.\");\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tvc_chunks_out = &p2p_q_vc_out_info->qg_info.groups[0].chunks;\n+\n+\tfor (i = 0; i < vc_chunks_out->num_chunks; i++) {\n+\t\ttype = vc_chunks_out->chunks[i].type;\n+\t\tswitch (type) {\n+\t\tcase VIRTCHNL2_QUEUE_TYPE_TX:\n+\t\t\tp2p_q_chunks_info->tx_start_qid =\n+\t\t\t\tvc_chunks_out->chunks[i].start_queue_id;\n+\t\t\tp2p_q_chunks_info->tx_qtail_start =\n+\t\t\t\tvc_chunks_out->chunks[i].qtail_reg_start;\n+\t\t\tp2p_q_chunks_info->tx_qtail_spacing =\n+\t\t\t\tvc_chunks_out->chunks[i].qtail_reg_spacing;\n+\t\t\tbreak;\n+\t\tcase VIRTCHNL2_QUEUE_TYPE_RX:\n+\t\t\tp2p_q_chunks_info->rx_start_qid =\n+\t\t\t\tvc_chunks_out->chunks[i].start_queue_id;\n+\t\t\tp2p_q_chunks_info->rx_qtail_start =\n+\t\t\t\tvc_chunks_out->chunks[i].qtail_reg_start;\n+\t\t\tp2p_q_chunks_info->rx_qtail_spacing =\n+\t\t\t\tvc_chunks_out->chunks[i].qtail_reg_spacing;\n+\t\t\tbreak;\n+\t\tcase VIRTCHNL2_QUEUE_TYPE_TX_COMPLETION:\n+\t\t\tp2p_q_chunks_info->tx_compl_start_qid =\n+\t\t\t\tvc_chunks_out->chunks[i].start_queue_id;\n+\t\t\tp2p_q_chunks_info->tx_compl_qtail_start =\n+\t\t\t\tvc_chunks_out->chunks[i].qtail_reg_start;\n+\t\t\tp2p_q_chunks_info->tx_compl_qtail_spacing =\n+\t\t\t\tvc_chunks_out->chunks[i].qtail_reg_spacing;\n+\t\t\tbreak;\n+\t\tcase VIRTCHNL2_QUEUE_TYPE_RX_BUFFER:\n+\t\t\tp2p_q_chunks_info->rx_buf_start_qid =\n+\t\t\t\tvc_chunks_out->chunks[i].start_queue_id;\n+\t\t\tp2p_q_chunks_info->rx_buf_qtail_start =\n+\t\t\t\tvc_chunks_out->chunks[i].qtail_reg_start;\n+\t\t\tp2p_q_chunks_info->rx_buf_qtail_spacing =\n+\t\t\t\tvc_chunks_out->chunks[i].qtail_reg_spacing;\n+\t\t\tbreak;\n+\t\tdefault:\n+\t\t\tPMD_DRV_LOG(ERR, \"Unsupported queue type\");\n+\t\t\tbreak;\n+\t\t}\n+\t}\n+\n+\treturn 0;\n+}\n+\n static int\n cpfl_dev_vport_init(struct rte_eth_dev *dev, void *init_params)\n {\n@@ -1359,6 +1467,8 @@ cpfl_dev_vport_init(struct rte_eth_dev *dev, void *init_params)\n \tstruct cpfl_adapter_ext *adapter = param->adapter;\n \t/* for sending create vport virtchnl msg prepare */\n \tstruct virtchnl2_create_vport create_vport_info;\n+\tstruct virtchnl2_add_queue_groups p2p_queue_grps_info;\n+\tuint8_t p2p_q_vc_out_info[IDPF_DFLT_MBX_BUF_SIZE] = {0};\n \tint ret = 0;\n \n \tdev->dev_ops = &cpfl_eth_dev_ops;\n@@ -1394,8 +1504,28 @@ cpfl_dev_vport_init(struct rte_eth_dev *dev, void *init_params)\n \trte_ether_addr_copy((struct rte_ether_addr *)vport->default_mac_addr,\n \t\t\t &dev->data->mac_addrs[0]);\n \n+\tif (!adapter->base.is_rx_singleq && !adapter->base.is_tx_singleq) {\n+\t\tmemset(&p2p_queue_grps_info, 0, sizeof(p2p_queue_grps_info));\n+\t\tret = cpfl_p2p_q_grps_add(vport, &p2p_queue_grps_info, p2p_q_vc_out_info);\n+\t\tif (ret != 0) {\n+\t\t\tPMD_INIT_LOG(ERR, \"Failed to add p2p queue group.\");\n+\t\t\tgoto err_q_grps_add;\n+\t\t}\n+\t\tret = cpfl_p2p_queue_info_init(cpfl_vport,\n+\t\t\t\t (struct virtchnl2_add_queue_groups *)p2p_q_vc_out_info);\n+\t\tif (ret != 0) {\n+\t\t\tPMD_INIT_LOG(ERR, \"Failed to init p2p queue info.\");\n+\t\t\tgoto err_p2p_qinfo_init;\n+\t\t}\n+\t}\n+\n \treturn 0;\n \n+err_p2p_qinfo_init:\n+\tcpfl_p2p_queue_grps_del(vport);\n+err_q_grps_add:\n+\trte_free(dev->data->mac_addrs);\n+\tdev->data->mac_addrs = NULL;\n err_mac_addrs:\n \tadapter->vports[param->idx] = NULL; /* reset */\n \tidpf_vport_deinit(vport);\ndiff --git a/drivers/net/cpfl/cpfl_ethdev.h b/drivers/net/cpfl/cpfl_ethdev.h\nindex 81fe9ac4c3..65c9a195b2 100644\n--- a/drivers/net/cpfl/cpfl_ethdev.h\n+++ b/drivers/net/cpfl/cpfl_ethdev.h\n@@ -56,6 +56,7 @@\n \n /* Device IDs */\n #define IDPF_DEV_ID_CPF\t\t\t0x1453\n+#define VIRTCHNL2_QUEUE_GROUP_P2P\t0x100\n \n struct cpfl_vport_param {\n \tstruct cpfl_adapter_ext *adapter;\n@@ -69,8 +70,25 @@ struct cpfl_devargs {\n \tuint16_t req_vport_nb;\n };\n \n+struct p2p_queue_chunks_info {\n+\tuint32_t tx_start_qid;\n+\tuint32_t rx_start_qid;\n+\tuint32_t tx_compl_start_qid;\n+\tuint32_t rx_buf_start_qid;\n+\n+\tuint64_t tx_qtail_start;\n+\tuint32_t tx_qtail_spacing;\n+\tuint64_t rx_qtail_start;\n+\tuint32_t rx_qtail_spacing;\n+\tuint64_t tx_compl_qtail_start;\n+\tuint32_t tx_compl_qtail_spacing;\n+\tuint64_t rx_buf_qtail_start;\n+\tuint32_t rx_buf_qtail_spacing;\n+};\n+\n struct cpfl_vport {\n \tstruct idpf_vport base;\n+\tstruct p2p_queue_chunks_info p2p_q_chunks_info;\n };\n \n struct cpfl_adapter_ext {\ndiff --git a/drivers/net/cpfl/cpfl_rxtx.h b/drivers/net/cpfl/cpfl_rxtx.h\nindex b2b3537d10..3a87a1f4b3 100644\n--- a/drivers/net/cpfl/cpfl_rxtx.h\n+++ b/drivers/net/cpfl/cpfl_rxtx.h\n@@ -17,6 +17,10 @@\n #define CPFL_MAX_HAIRPINQ_TX_2_RX\t1\n #define CPFL_MAX_HAIRPINQ_NB_DESC\t1024\n #define CPFL_MAX_P2P_NB_QUEUES\t\t16\n+#define CPFL_P2P_NB_RX_BUFQ\t\t1\n+#define CPFL_P2P_NB_TX_COMPLQ\t\t1\n+#define CPFL_P2P_NB_QUEUE_GRPS\t\t1\n+#define CPFL_P2P_QUEUE_GRP_ID\t\t1\n /* Base address of the HW descriptor ring should be 128B aligned. */\n #define CPFL_RING_BASE_ALIGN\t128\n \n", "prefixes": [ "v2", "04/10" ] }{ "id": 127077, "url": "