Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/1163/?format=api
http://patches.dpdk.org/api/patches/1163/?format=api", "web_url": "http://patches.dpdk.org/project/dpdk/patch/1415278430-17920-6-git-send-email-helin.zhang@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": "<1415278430-17920-6-git-send-email-helin.zhang@intel.com>", "list_archive_url": "https://inbox.dpdk.org/dev/1415278430-17920-6-git-send-email-helin.zhang@intel.com", "date": "2014-11-06T12:53:50", "name": "[dpdk-dev,v3,5/5] i40e: support of configurable VF crc stripping", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": true, "hash": "af7ce6359b125b1fb922c17bd89a0d508cc6888b", "submitter": { "id": 14, "url": "http://patches.dpdk.org/api/people/14/?format=api", "name": "Zhang, Helin", "email": "helin.zhang@intel.com" }, "delegate": null, "mbox": "http://patches.dpdk.org/project/dpdk/patch/1415278430-17920-6-git-send-email-helin.zhang@intel.com/mbox/", "series": [], "comments": "http://patches.dpdk.org/api/patches/1163/comments/", "check": "pending", "checks": "http://patches.dpdk.org/api/patches/1163/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 E99C47F54;\n\tThu, 6 Nov 2014 13:44:55 +0100 (CET)", "from mga02.intel.com (mga02.intel.com [134.134.136.20])\n\tby dpdk.org (Postfix) with ESMTP id B8C2F7E75\n\tfor <dev@dpdk.org>; Thu, 6 Nov 2014 13:44:51 +0100 (CET)", "from orsmga002.jf.intel.com ([10.7.209.21])\n\tby orsmga101.jf.intel.com with ESMTP; 06 Nov 2014 04:54:11 -0800", "from shvmail01.sh.intel.com ([10.239.29.42])\n\tby orsmga002.jf.intel.com with ESMTP; 06 Nov 2014 04:54:11 -0800", "from shecgisg004.sh.intel.com (shecgisg004.sh.intel.com\n\t[10.239.29.89])\n\tby shvmail01.sh.intel.com with ESMTP id sA6Cs8Sh011197;\n\tThu, 6 Nov 2014 20:54:08 +0800", "from shecgisg004.sh.intel.com (localhost [127.0.0.1])\n\tby shecgisg004.sh.intel.com (8.13.6/8.13.6/SuSE Linux 0.8) with ESMTP\n\tid sA6Cs6MI017989; Thu, 6 Nov 2014 20:54:08 +0800", "(from hzhan75@localhost)\n\tby shecgisg004.sh.intel.com (8.13.6/8.13.6/Submit) id sA6Cs64C017985; \n\tThu, 6 Nov 2014 20:54:06 +0800" ], "X-ExtLoop1": "1", "X-IronPort-AV": "E=Sophos;i=\"5.07,325,1413270000\"; d=\"scan'208\";a=\"632601727\"", "From": "Helin Zhang <helin.zhang@intel.com>", "To": "dev@dpdk.org", "Date": "Thu, 6 Nov 2014 20:53:50 +0800", "Message-Id": "<1415278430-17920-6-git-send-email-helin.zhang@intel.com>", "X-Mailer": "git-send-email 1.7.4.1", "In-Reply-To": "<1415278430-17920-1-git-send-email-helin.zhang@intel.com>", "References": "<1410706109-30448-1-git-send-email-helin.zhang@intel.com>\n\t<1415278430-17920-1-git-send-email-helin.zhang@intel.com>", "Subject": "[dpdk-dev] [PATCH v3 5/5] i40e: support of configurable VF crc\n\tstripping", "X-BeenThere": "dev@dpdk.org", "X-Mailman-Version": "2.1.15", "Precedence": "list", "List-Id": "patches and discussions about DPDK <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": "Configurable CRC stripping needs to be supported in VF,\nand the configuration should be finally set in relevant\nRX queue context with PF host support.\n\nSigned-off-by: Helin Zhang <helin.zhang@intel.com>\n---\n lib/librte_pmd_i40e/i40e_ethdev_vf.c | 155 +++++++++++++++++++++++++----------\n lib/librte_pmd_i40e/i40e_pf.c | 83 +++++++++++++++++--\n lib/librte_pmd_i40e/i40e_pf.h | 28 +++++++\n 3 files changed, 218 insertions(+), 48 deletions(-)\n\nv2 changes:\n* Put setting the crc stripping of PF host into a single patch.\n* Put configuring crc stripping in VF into a single patch.\n\nv3 changes:\n* Put configuring crc stripping of both PF host and VF\n into a single patch.\n* Defined below new structures for the configuring specifically.\n - struct i40e_virtchnl_rxq_ext_info;\n - struct i40e_virtchnl_queue_pair_ext_info;\n - struct i40e_virtchnl_vsi_queue_config_ext_info;\n* Renamed 'I40E_VIRTCHNL_OP_CONFIG_VSI_QUEUES_EX' to\n 'I40E_VIRTCHNL_OP_CONFIG_VSI_QUEUES_EXT'.", "diff": "diff --git a/lib/librte_pmd_i40e/i40e_ethdev_vf.c b/lib/librte_pmd_i40e/i40e_ethdev_vf.c\nindex 9a8cdc8..554d9d7 100644\n--- a/lib/librte_pmd_i40e/i40e_ethdev_vf.c\n+++ b/lib/librte_pmd_i40e/i40e_ethdev_vf.c\n@@ -533,8 +533,46 @@ i40evf_config_vlan_pvid(struct rte_eth_dev *dev,\n \treturn err;\n }\n \n+static void\n+i40evf_fill_virtchnl_vsi_txq_info(struct i40e_virtchnl_txq_info *txq_info,\n+\t\t\t\t uint16_t vsi_id,\n+\t\t\t\t uint16_t queue_id,\n+\t\t\t\t uint16_t nb_txq,\n+\t\t\t\t struct i40e_tx_queue *txq)\n+{\n+\ttxq_info->vsi_id = vsi_id;\n+\ttxq_info->queue_id = queue_id;\n+\tif (queue_id < nb_txq) {\n+\t\ttxq_info->ring_len = txq->nb_tx_desc;\n+\t\ttxq_info->dma_ring_addr = txq->tx_ring_phys_addr;\n+\t}\n+}\n+\n+static void\n+i40evf_fill_virtchnl_vsi_rxq_info(struct i40e_virtchnl_rxq_info *rxq_info,\n+\t\t\t\t uint16_t vsi_id,\n+\t\t\t\t uint16_t queue_id,\n+\t\t\t\t uint16_t nb_rxq,\n+\t\t\t\t uint32_t max_pkt_size,\n+\t\t\t\t struct i40e_rx_queue *rxq)\n+{\n+\trxq_info->vsi_id = vsi_id;\n+\trxq_info->queue_id = queue_id;\n+\trxq_info->max_pkt_size = max_pkt_size;\n+\tif (queue_id < nb_rxq) {\n+\t\tstruct rte_pktmbuf_pool_private *mbp_priv;\n+\n+\t\trxq_info->ring_len = rxq->nb_rx_desc;\n+\t\trxq_info->dma_ring_addr = rxq->rx_ring_phys_addr;\n+\t\tmbp_priv = rte_mempool_get_priv(rxq->mp);\n+\t\trxq_info->databuffer_size =\n+\t\t\tmbp_priv->mbuf_data_room_size - RTE_PKTMBUF_HEADROOM;\n+\t}\n+}\n+\n+/* It configures VSI queues to co-work with Linux PF host */\n static int\n-i40evf_configure_queues(struct rte_eth_dev *dev)\n+i40evf_configure_vsi_queues(struct rte_eth_dev *dev)\n {\n \tstruct i40e_vf *vf = I40EVF_DEV_PRIVATE_TO_VF(dev->data->dev_private);\n \tstruct i40e_rx_queue **rxq =\n@@ -554,47 +592,14 @@ i40evf_configure_queues(struct rte_eth_dev *dev)\n \tvc_vqci = (struct i40e_virtchnl_vsi_queue_config_info *)buff;\n \tvc_vqci->vsi_id = vf->vsi_res->vsi_id;\n \tvc_vqci->num_queue_pairs = nb_qp;\n-\tvc_qpi = vc_vqci->qpair;\n-\n-\t/*\n-\t * PF host driver required to configure queues in pairs, which means\n-\t * rxq_num should equals to txq_num. The actual usage won't always\n-\t * work that way. The solution is fills 0 with HW ring option in case\n-\t * they are not equal.\n-\t */\n-\tfor (i = 0; i < nb_qp; i++) {\n-\t\t/*Fill TX info */\n-\t\tvc_qpi->txq.vsi_id = vc_vqci->vsi_id;\n-\t\tvc_qpi->txq.queue_id = i;\n-\t\tif (i < dev->data->nb_tx_queues) {\n-\t\t\tvc_qpi->txq.ring_len = txq[i]->nb_tx_desc;\n-\t\t\tvc_qpi->txq.dma_ring_addr = txq[i]->tx_ring_phys_addr;\n-\t\t} else {\n-\t\t\tvc_qpi->txq.ring_len = 0;\n-\t\t\tvc_qpi->txq.dma_ring_addr = 0;\n-\t\t}\n \n-\t\t/* Fill RX info */\n-\t\tvc_qpi->rxq.vsi_id = vc_vqci->vsi_id;\n-\t\tvc_qpi->rxq.queue_id = i;\n-\t\tvc_qpi->rxq.max_pkt_size = vf->max_pkt_len;\n-\t\tif (i < dev->data->nb_rx_queues) {\n-\t\t\tstruct rte_pktmbuf_pool_private *mbp_priv =\n-\t\t\t\trte_mempool_get_priv(rxq[i]->mp);\n-\n-\t\t\tvc_qpi->rxq.databuffer_size =\n-\t\t\t\tmbp_priv->mbuf_data_room_size -\n-\t\t\t\t\tRTE_PKTMBUF_HEADROOM;\n-\t\t\tvc_qpi->rxq.ring_len = rxq[i]->nb_rx_desc;\n-\t\t\tvc_qpi->rxq.dma_ring_addr = rxq[i]->rx_ring_phys_addr;\n-\t\t} else {\n-\t\t\tvc_qpi->rxq.ring_len = 0;\n-\t\t\tvc_qpi->rxq.dma_ring_addr = 0;\n-\t\t\tvc_qpi->rxq.databuffer_size = 0;\n-\t\t}\n-\t\tvc_qpi++;\n+\tfor (i = 0, vc_qpi = vc_vqci->qpair; i < nb_qp; i++, vc_qpi++) {\n+\t\ti40evf_fill_virtchnl_vsi_txq_info(&vc_qpi->txq,\n+\t\t\tvc_vqci->vsi_id, i, dev->data->nb_tx_queues, txq[i]);\n+\t\ti40evf_fill_virtchnl_vsi_rxq_info(&vc_qpi->rxq,\n+\t\t\tvc_vqci->vsi_id, i, dev->data->nb_rx_queues,\n+\t\t\t\t\tvf->max_pkt_len, rxq[i]);\n \t}\n-\n \tmemset(&args, 0, sizeof(args));\n \targs.ops = I40E_VIRTCHNL_OP_CONFIG_VSI_QUEUES;\n \targs.in_args = (uint8_t *)vc_vqci;\n@@ -603,13 +608,79 @@ i40evf_configure_queues(struct rte_eth_dev *dev)\n \targs.out_size = I40E_AQ_BUF_SZ;\n \tret = i40evf_execute_vf_cmd(dev, &args);\n \tif (ret)\n-\t\tPMD_DRV_LOG(ERR, \"fail to execute command \"\n-\t\t\t \"OP_CONFIG_VSI_QUEUES\");\n+\t\tPMD_DRV_LOG(ERR, \"Failed to execute command of \"\n+\t\t\t\"I40E_VIRTCHNL_OP_CONFIG_VSI_QUEUES\\n\");\n+\n+\treturn ret;\n+}\n+\n+/* It configures VSI queues to co-work with DPDK PF host */\n+static int\n+i40evf_configure_vsi_queues_ext(struct rte_eth_dev *dev)\n+{\n+\tstruct i40e_vf *vf = I40EVF_DEV_PRIVATE_TO_VF(dev->data->dev_private);\n+\tstruct i40e_rx_queue **rxq =\n+\t\t(struct i40e_rx_queue **)dev->data->rx_queues;\n+\tstruct i40e_tx_queue **txq =\n+\t\t(struct i40e_tx_queue **)dev->data->tx_queues;\n+\tstruct i40e_virtchnl_vsi_queue_config_ext_info *vc_vqcei;\n+\tstruct i40e_virtchnl_queue_pair_ext_info *vc_qpei;\n+\tstruct vf_cmd_info args;\n+\tuint16_t i, nb_qp = vf->num_queue_pairs;\n+\tconst uint32_t size =\n+\t\tI40E_VIRTCHNL_CONFIG_VSI_QUEUES_SIZE(vc_vqcei, nb_qp);\n+\tuint8_t buff[size];\n+\tint ret;\n+\n+\tmemset(buff, 0, sizeof(buff));\n+\tvc_vqcei = (struct i40e_virtchnl_vsi_queue_config_ext_info *)buff;\n+\tvc_vqcei->vsi_id = vf->vsi_res->vsi_id;\n+\tvc_vqcei->num_queue_pairs = nb_qp;\n+\tvc_qpei = vc_vqcei->qpair;\n+\tfor (i = 0; i < nb_qp; i++, vc_qpei++) {\n+\t\ti40evf_fill_virtchnl_vsi_txq_info(&vc_qpei->txq,\n+\t\t\tvc_vqcei->vsi_id, i, dev->data->nb_tx_queues, txq[i]);\n+\t\ti40evf_fill_virtchnl_vsi_rxq_info(&vc_qpei->rxq,\n+\t\t\tvc_vqcei->vsi_id, i, dev->data->nb_rx_queues,\n+\t\t\t\t\tvf->max_pkt_len, rxq[i]);\n+\t\tif (i < dev->data->nb_rx_queues)\n+\t\t\t/*\n+\t\t\t * It adds extra info for configuring VSI queues, which\n+\t\t\t * is needed to enable the configurable crc stripping\n+\t\t\t * in VF.\n+\t\t\t */\n+\t\t\tvc_qpei->rxq_ext.crcstrip =\n+\t\t\t\tdev->data->dev_conf.rxmode.hw_strip_crc;\n+\t}\n+\tmemset(&args, 0, sizeof(args));\n+\targs.ops =\n+\t\t(enum i40e_virtchnl_ops)I40E_VIRTCHNL_OP_CONFIG_VSI_QUEUES_EXT;\n+\targs.in_args = (uint8_t *)vc_vqcei;\n+\targs.in_args_size = size;\n+\targs.out_buffer = cmd_result_buffer;\n+\targs.out_size = I40E_AQ_BUF_SZ;\n+\tret = i40evf_execute_vf_cmd(dev, &args);\n+\tif (ret)\n+\t\tPMD_DRV_LOG(ERR, \"Failed to execute command of \"\n+\t\t\t\"I40E_VIRTCHNL_OP_CONFIG_VSI_QUEUES_EXT\\n\");\n \n \treturn ret;\n }\n \n static int\n+i40evf_configure_queues(struct rte_eth_dev *dev)\n+{\n+\tstruct i40e_vf *vf = I40EVF_DEV_PRIVATE_TO_VF(dev->data->dev_private);\n+\n+\tif (vf->version_major == I40E_DPDK_VERSION_MAJOR)\n+\t\t/* To support DPDK PF host */\n+\t\treturn i40evf_configure_vsi_queues_ext(dev);\n+\telse\n+\t\t/* To support Linux PF host */\n+\t\treturn i40evf_configure_vsi_queues(dev);\n+}\n+\n+static int\n i40evf_config_irq_map(struct rte_eth_dev *dev)\n {\n \tstruct i40e_vf *vf = I40EVF_DEV_PRIVATE_TO_VF(dev->data->dev_private);\ndiff --git a/lib/librte_pmd_i40e/i40e_pf.c b/lib/librte_pmd_i40e/i40e_pf.c\nindex 7f98636..cbb2dcc 100644\n--- a/lib/librte_pmd_i40e/i40e_pf.c\n+++ b/lib/librte_pmd_i40e/i40e_pf.c\n@@ -421,9 +421,11 @@ i40e_pf_host_process_cmd_config_vsi_queues(struct i40e_pf_vf *vf,\n \tstruct i40e_virtchnl_queue_pair_info *vc_qpi;\n \tint i, ret = I40E_SUCCESS;\n \n-\tif (msg == NULL || msglen <= sizeof(*vc_vqci) ||\n-\t\tvc_vqci->num_queue_pairs > vsi->nb_qps) {\n-\t\tPMD_DRV_LOG(ERR, \"vsi_queue_config_info argument wrong\");\n+\tif (!msg || vc_vqci->num_queue_pairs > vsi->nb_qps ||\n+\t\tvc_vqci->num_queue_pairs > I40E_MAX_VSI_QP ||\n+\t\tmsglen < I40E_VIRTCHNL_CONFIG_VSI_QUEUES_SIZE(vc_vqci,\n+\t\t\t\t\tvc_vqci->num_queue_pairs)) {\n+\t\tPMD_DRV_LOG(ERR, \"vsi_queue_config_info argument wrong\\n\");\n \t\tret = I40E_ERR_PARAM;\n \t\tgoto send_msg;\n \t}\n@@ -436,7 +438,13 @@ i40e_pf_host_process_cmd_config_vsi_queues(struct i40e_pf_vf *vf,\n \t\t\tgoto send_msg;\n \t\t}\n \n-\t\t/* Apply VF RX queue setting to HMC */\n+\t\t/*\n+\t\t * Apply VF RX queue setting to HMC.\n+\t\t * If the opcode is I40E_VIRTCHNL_OP_CONFIG_VSI_QUEUES_EXT,\n+\t\t * then the extra information of\n+\t\t * 'struct i40e_virtchnl_queue_pair_extra_info' is needed,\n+\t\t * otherwise set the last parameter to NULL.\n+\t\t */\n \t\tif (i40e_pf_host_hmc_config_rxq(hw, vf, &vc_qpi[i].rxq,\n \t\t\tI40E_CFG_CRCSTRIP_DEFAULT) != I40E_SUCCESS) {\n \t\t\tPMD_DRV_LOG(ERR, \"Configure RX queue HMC failed\");\n@@ -445,8 +453,8 @@ i40e_pf_host_process_cmd_config_vsi_queues(struct i40e_pf_vf *vf,\n \t\t}\n \n \t\t/* Apply VF TX queue setting to HMC */\n-\t\tif (i40e_pf_host_hmc_config_txq(hw, vf, &vc_qpi[i].txq)\n-\t\t\t!= I40E_SUCCESS) {\n+\t\tif (i40e_pf_host_hmc_config_txq(hw, vf,\n+\t\t\t&vc_qpi[i].txq) != I40E_SUCCESS) {\n \t\t\tPMD_DRV_LOG(ERR, \"Configure TX queue HMC failed\");\n \t\t\tret = I40E_ERR_PARAM;\n \t\t\tgoto send_msg;\n@@ -461,6 +469,64 @@ send_msg:\n }\n \n static int\n+i40e_pf_host_process_cmd_config_vsi_queues_ext(struct i40e_pf_vf *vf,\n+\t\t\t\t\t uint8_t *msg,\n+\t\t\t\t\t uint16_t msglen)\n+{\n+\tstruct i40e_hw *hw = I40E_PF_TO_HW(vf->pf);\n+\tstruct i40e_vsi *vsi = vf->vsi;\n+\tstruct i40e_virtchnl_vsi_queue_config_ext_info *vc_vqcei =\n+\t\t(struct i40e_virtchnl_vsi_queue_config_ext_info *)msg;\n+\tstruct i40e_virtchnl_queue_pair_ext_info *vc_qpei;\n+\tint i, ret = I40E_SUCCESS;\n+\n+\tif (!msg || vc_vqcei->num_queue_pairs > vsi->nb_qps ||\n+\t\tvc_vqcei->num_queue_pairs > I40E_MAX_VSI_QP ||\n+\t\tmsglen < I40E_VIRTCHNL_CONFIG_VSI_QUEUES_SIZE(vc_vqcei,\n+\t\t\t\t\tvc_vqcei->num_queue_pairs)) {\n+\t\tPMD_DRV_LOG(ERR, \"vsi_queue_config_ext_info argument wrong\\n\");\n+\t\tret = I40E_ERR_PARAM;\n+\t\tgoto send_msg;\n+\t}\n+\n+\tvc_qpei = vc_vqcei->qpair;\n+\tfor (i = 0; i < vc_vqcei->num_queue_pairs; i++) {\n+\t\tif (vc_qpei[i].rxq.queue_id > vsi->nb_qps - 1 ||\n+\t\t\tvc_qpei[i].txq.queue_id > vsi->nb_qps - 1) {\n+\t\t\tret = I40E_ERR_PARAM;\n+\t\t\tgoto send_msg;\n+\t\t}\n+\t\t/*\n+\t\t * Apply VF RX queue setting to HMC.\n+\t\t * If the opcode is I40E_VIRTCHNL_OP_CONFIG_VSI_QUEUES_EXT,\n+\t\t * then the extra information of\n+\t\t * 'struct i40e_virtchnl_queue_pair_ext_info' is needed,\n+\t\t * otherwise set the last parameter to NULL.\n+\t\t */\n+\t\tif (i40e_pf_host_hmc_config_rxq(hw, vf, &vc_qpei[i].rxq,\n+\t\t\tvc_qpei[i].rxq_ext.crcstrip) != I40E_SUCCESS) {\n+\t\t\tPMD_DRV_LOG(ERR, \"Configure RX queue HMC failed\");\n+\t\t\tret = I40E_ERR_PARAM;\n+\t\t\tgoto send_msg;\n+\t\t}\n+\n+\t\t/* Apply VF TX queue setting to HMC */\n+\t\tif (i40e_pf_host_hmc_config_txq(hw, vf, &vc_qpei[i].txq) !=\n+\t\t\t\t\t\t\tI40E_SUCCESS) {\n+\t\t\tPMD_DRV_LOG(ERR, \"Configure TX queue HMC failed\");\n+\t\t\tret = I40E_ERR_PARAM;\n+\t\t\tgoto send_msg;\n+\t\t}\n+\t}\n+\n+send_msg:\n+\ti40e_pf_host_send_msg_to_vf(vf, I40E_VIRTCHNL_OP_CONFIG_VSI_QUEUES_EXT,\n+\t\t\t\t\t\t\t\tret, NULL, 0);\n+\n+\treturn ret;\n+}\n+\n+static int\n i40e_pf_host_process_cmd_config_irq_map(struct i40e_pf_vf *vf,\n \t\t\t\t\tuint8_t *msg, uint16_t msglen)\n {\n@@ -878,6 +944,11 @@ i40e_pf_host_handle_vf_msg(struct rte_eth_dev *dev,\n \t\tPMD_DRV_LOG(INFO, \"OP_CONFIG_VSI_QUEUES received\");\n \t\ti40e_pf_host_process_cmd_config_vsi_queues(vf, msg, msglen);\n \t\tbreak;\n+\tcase I40E_VIRTCHNL_OP_CONFIG_VSI_QUEUES_EXT:\n+\t\tPMD_DRV_LOG(INFO, \"OP_CONFIG_VSI_QUEUES_EXT received\");\n+\t\ti40e_pf_host_process_cmd_config_vsi_queues_ext(vf, msg,\n+\t\t\t\t\t\t\t\tmsglen);\n+\t\tbreak;\n \tcase I40E_VIRTCHNL_OP_CONFIG_IRQ_MAP:\n \t\tPMD_DRV_LOG(INFO, \"OP_CONFIG_IRQ_MAP received\");\n \t\ti40e_pf_host_process_cmd_config_irq_map(vf, msg, msglen);\ndiff --git a/lib/librte_pmd_i40e/i40e_pf.h b/lib/librte_pmd_i40e/i40e_pf.h\nindex ce5a978..8bf83c2 100644\n--- a/lib/librte_pmd_i40e/i40e_pf.h\n+++ b/lib/librte_pmd_i40e/i40e_pf.h\n@@ -63,6 +63,34 @@ enum i40e_virtchnl_ops_dpdk {\n \t\t\t\t\t\tI40E_DPDK_OFFSET,\n \tI40E_VIRTCHNL_OP_CFG_VLAN_OFFLOAD,\n \tI40E_VIRTCHNL_OP_CFG_VLAN_PVID,\n+\tI40E_VIRTCHNL_OP_CONFIG_VSI_QUEUES_EXT,\n+};\n+\n+/* A structure to support extended info of a receive queue. */\n+struct i40e_virtchnl_rxq_ext_info {\n+\tuint8_t crcstrip;\n+};\n+\n+/*\n+ * A structure to support extended info of queue pairs, an additional field\n+ * is added, comparing to original 'struct i40e_virtchnl_queue_pair_info'.\n+ */\n+struct i40e_virtchnl_queue_pair_ext_info {\n+\t/* vsi_id and queue_id should be identical for both rx and tx queues.*/\n+\tstruct i40e_virtchnl_txq_info txq;\n+\tstruct i40e_virtchnl_rxq_info rxq;\n+\tstruct i40e_virtchnl_rxq_ext_info rxq_ext;\n+};\n+\n+/*\n+ * A structure to support extended info of VSI queue pairs,\n+ * 'struct i40e_virtchnl_queue_pair_ext_info' is used, see its original\n+ * of 'struct i40e_virtchnl_queue_pair_info'.\n+ */\n+struct i40e_virtchnl_vsi_queue_config_ext_info {\n+\tuint16_t vsi_id;\n+\tuint16_t num_queue_pairs;\n+\tstruct i40e_virtchnl_queue_pair_ext_info qpair[0];\n };\n \n struct i40e_virtchnl_vlan_offload_info {\n", "prefixes": [ "dpdk-dev", "v3", "5/5" ] }{ "id": 1163, "url": "