get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 1163,
    "url": "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"
    ]
}