get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 8495,
    "url": "https://patches.dpdk.org/api/patches/8495/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/1446307051-29283-3-git-send-email-jingjing.wu@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": "<1446307051-29283-3-git-send-email-jingjing.wu@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1446307051-29283-3-git-send-email-jingjing.wu@intel.com",
    "date": "2015-10-31T15:57:24",
    "name": "[dpdk-dev,v3,2/9] ethdev: move the multi-queue checking to specific drivers",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "192593be4c7e12e770f86c50b6d1ff3c185daa4d",
    "submitter": {
        "id": 47,
        "url": "https://patches.dpdk.org/api/people/47/?format=api",
        "name": "Jingjing Wu",
        "email": "jingjing.wu@intel.com"
    },
    "delegate": null,
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/1446307051-29283-3-git-send-email-jingjing.wu@intel.com/mbox/",
    "series": [],
    "comments": "https://patches.dpdk.org/api/patches/8495/comments/",
    "check": "pending",
    "checks": "https://patches.dpdk.org/api/patches/8495/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 2F6B88D9A;\n\tSat, 31 Oct 2015 16:57:48 +0100 (CET)",
            "from mga01.intel.com (mga01.intel.com [192.55.52.88])\n\tby dpdk.org (Postfix) with ESMTP id 528008D9A\n\tfor <dev@dpdk.org>; Sat, 31 Oct 2015 16:57:44 +0100 (CET)",
            "from orsmga001.jf.intel.com ([10.7.209.18])\n\tby fmsmga101.fm.intel.com with ESMTP; 31 Oct 2015 08:57:43 -0700",
            "from shvmail01.sh.intel.com ([10.239.29.42])\n\tby orsmga001.jf.intel.com with ESMTP; 31 Oct 2015 08:57:42 -0700",
            "from shecgisg004.sh.intel.com (shecgisg004.sh.intel.com\n\t[10.239.29.89])\n\tby shvmail01.sh.intel.com with ESMTP id t9VFveR8032714;\n\tSat, 31 Oct 2015 23:57:40 +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 t9VFvb9j029569; Sat, 31 Oct 2015 23:57:39 +0800",
            "(from wujingji@localhost)\n\tby shecgisg004.sh.intel.com (8.13.6/8.13.6/Submit) id t9VFvbOm029565; \n\tSat, 31 Oct 2015 23:57:37 +0800"
        ],
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"5.20,224,1444719600\"; d=\"scan'208\";a=\"808470653\"",
        "From": "Jingjing Wu <jingjing.wu@intel.com>",
        "To": "dev@dpdk.org",
        "Date": "Sat, 31 Oct 2015 23:57:24 +0800",
        "Message-Id": "<1446307051-29283-3-git-send-email-jingjing.wu@intel.com>",
        "X-Mailer": "git-send-email 1.7.4.1",
        "In-Reply-To": "<1446307051-29283-1-git-send-email-jingjing.wu@intel.com>",
        "References": "<1446108827-7907-1-git-send-email-jingjing.wu@intel.com>\n\t<1446307051-29283-1-git-send-email-jingjing.wu@intel.com>",
        "Subject": "[dpdk-dev] [PATCH v3 2/9] ethdev: move the multi-queue checking to\n\tspecific drivers",
        "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": "Differnet NIC has its specific constraint on the multi-queue\nconfiguration, so move the checking from ethdev lib to drivers.\n\nSigned-off-by: Jingjing Wu <jingjing.wu@intel.com>\n---\n drivers/net/e1000/igb_ethdev.c   |  84 ++++++++++++++++-\n drivers/net/ixgbe/ixgbe_ethdev.c | 171 +++++++++++++++++++++++++++++++++\n drivers/net/ixgbe/ixgbe_ethdev.h |   3 +\n lib/librte_ether/rte_ethdev.c    | 199 ---------------------------------------\n 4 files changed, 257 insertions(+), 200 deletions(-)",
    "diff": "diff --git a/drivers/net/e1000/igb_ethdev.c b/drivers/net/e1000/igb_ethdev.c\nindex 3ab082e..7a8fa93 100644\n--- a/drivers/net/e1000/igb_ethdev.c\n+++ b/drivers/net/e1000/igb_ethdev.c\n@@ -865,16 +865,98 @@ rte_igbvf_pmd_init(const char *name __rte_unused, const char *params __rte_unuse\n }\n \n static int\n+igb_check_mq_mode(struct rte_eth_dev *dev)\n+{\n+\tenum rte_eth_rx_mq_mode rx_mq_mode = dev->data->dev_conf.rxmode.mq_mode;\n+\tenum rte_eth_tx_mq_mode tx_mq_mode = dev->data->dev_conf.txmode.mq_mode;\n+\tuint16_t nb_rx_q = dev->data->nb_rx_queues;\n+\tuint16_t nb_tx_q = dev->data->nb_rx_queues;\n+\n+\tif ((rx_mq_mode & ETH_MQ_RX_DCB_FLAG) ||\n+\t    tx_mq_mode == ETH_MQ_TX_DCB ||\n+\t    tx_mq_mode == ETH_MQ_TX_VMDQ_DCB) {\n+\t\tPMD_INIT_LOG(ERR, \"DCB mode is not supported.\");\n+\t\treturn -EINVAL;\n+\t}\n+\tif (RTE_ETH_DEV_SRIOV(dev).active != 0) {\n+\t\t/* Check multi-queue mode.\n+\t\t * To no break software we accept ETH_MQ_RX_NONE as this might\n+\t\t * be used to turn off VLAN filter.\n+\t\t */\n+\n+\t\tif (rx_mq_mode == ETH_MQ_RX_NONE ||\n+\t\t    rx_mq_mode == ETH_MQ_RX_VMDQ_ONLY) {\n+\t\t\tdev->data->dev_conf.rxmode.mq_mode = ETH_MQ_RX_VMDQ_ONLY;\n+\t\t\tRTE_ETH_DEV_SRIOV(dev).nb_q_per_pool = 1;\n+\t\t} else {\n+\t\t\t/* Only support one queue on VFs.\n+\t\t\t * RSS together with SRIOV is not supported.\n+\t\t\t */\n+\t\t\tPMD_INIT_LOG(ERR, \"SRIOV is active,\"\n+\t\t\t\t\t\" wrong mq_mode rx %d.\",\n+\t\t\t\t\trx_mq_mode);\n+\t\t\treturn -EINVAL;\n+\t\t}\n+\t\t/* TX mode is not used here, so mode might be ignored.*/\n+\t\tif (tx_mq_mode != ETH_MQ_TX_VMDQ_ONLY) {\n+\t\t\t/* SRIOV only works in VMDq enable mode */\n+\t\t\tPMD_INIT_LOG(WARNING, \"SRIOV is active,\"\n+\t\t\t\t\t\" TX mode %d is not supported. \"\n+\t\t\t\t\t\" Driver will behave as %d mode.\",\n+\t\t\t\t\ttx_mq_mode, ETH_MQ_TX_VMDQ_ONLY);\n+\t\t}\n+\n+\t\t/* check valid queue number */\n+\t\tif ((nb_rx_q > 1) || (nb_tx_q > 1)) {\n+\t\t\tPMD_INIT_LOG(ERR, \"SRIOV is active,\"\n+\t\t\t\t\t\" only support one queue on VFs.\");\n+\t\t\treturn -EINVAL;\n+\t\t}\n+\t} else {\n+\t\t/* To no break software that set invalid mode, only display\n+\t\t * warning if invalid mode is used.\n+\t\t */\n+\t\tif (rx_mq_mode != ETH_MQ_RX_NONE &&\n+\t\t    rx_mq_mode != ETH_MQ_RX_VMDQ_ONLY &&\n+\t\t    rx_mq_mode != ETH_MQ_RX_RSS) {\n+\t\t\t/* RSS together with VMDq not supported*/\n+\t\t\tPMD_INIT_LOG(ERR, \"RX mode %d is not supported.\",\n+\t\t\t\t     rx_mq_mode);\n+\t\t\treturn -EINVAL;\n+\t\t}\n+\n+\t\tif (tx_mq_mode != ETH_MQ_TX_NONE &&\n+\t\t    tx_mq_mode != ETH_MQ_TX_VMDQ_ONLY) {\n+\t\t\tPMD_INIT_LOG(WARNING, \"TX mode %d is not supported.\"\n+\t\t\t\t\t\" Due to txmode is meaningless in this\"\n+\t\t\t\t\t\" driver, just ignore.\",\n+\t\t\t\t\ttx_mq_mode);\n+\t\t}\n+\t}\n+\treturn 0;\n+}\n+\n+static int\n eth_igb_configure(struct rte_eth_dev *dev)\n {\n \tstruct e1000_interrupt *intr =\n \t\tE1000_DEV_PRIVATE_TO_INTR(dev->data->dev_private);\n+\tint ret;\n \n \tPMD_INIT_FUNC_TRACE();\n+\n+\t/* multipe queue mode checking */\n+\tret  = igb_check_mq_mode(dev);\n+\tif (ret != 0) {\n+\t\tPMD_DRV_LOG(ERR, \"igb_check_mq_mode fails with %d.\",\n+\t\t\t    ret);\n+\t\treturn ret;\n+\t}\n+\n \tintr->flags |= E1000_FLAG_NEED_LINK_UPDATE;\n \tPMD_INIT_FUNC_TRACE();\n \n-\treturn (0);\n+\treturn 0;\n }\n \n static int\ndiff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c\nindex 4373661..ece2e73 100644\n--- a/drivers/net/ixgbe/ixgbe_ethdev.c\n+++ b/drivers/net/ixgbe/ixgbe_ethdev.c\n@@ -1640,14 +1640,185 @@ ixgbe_vmdq_vlan_hw_filter_enable(struct rte_eth_dev *dev)\n }\n \n static int\n+ixgbe_check_vf_rss_rxq_num(struct rte_eth_dev *dev, uint16_t nb_rx_q)\n+{\n+\tswitch (nb_rx_q) {\n+\tcase 1:\n+\tcase 2:\n+\t\tRTE_ETH_DEV_SRIOV(dev).active = ETH_64_POOLS;\n+\t\tbreak;\n+\tcase 4:\n+\t\tRTE_ETH_DEV_SRIOV(dev).active = ETH_32_POOLS;\n+\t\tbreak;\n+\tdefault:\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tRTE_ETH_DEV_SRIOV(dev).nb_q_per_pool = nb_rx_q;\n+\tRTE_ETH_DEV_SRIOV(dev).def_pool_q_idx = dev->pci_dev->max_vfs * nb_rx_q;\n+\n+\treturn 0;\n+}\n+\n+static int\n+ixgbe_check_mq_mode(struct rte_eth_dev *dev)\n+{\n+\tstruct rte_eth_conf *dev_conf = &dev->data->dev_conf;\n+\tuint16_t nb_rx_q = dev->data->nb_rx_queues;\n+\tuint16_t nb_tx_q = dev->data->nb_rx_queues;\n+\n+\tif (RTE_ETH_DEV_SRIOV(dev).active != 0) {\n+\t\t/* check multi-queue mode */\n+\t\tswitch (dev_conf->rxmode.mq_mode) {\n+\t\tcase ETH_MQ_RX_VMDQ_DCB:\n+\t\tcase ETH_MQ_RX_VMDQ_DCB_RSS:\n+\t\t\t/* DCB/RSS VMDQ in SRIOV mode, not implement yet */\n+\t\t\tPMD_INIT_LOG(ERR, \"SRIOV active,\"\n+\t\t\t\t\t\" unsupported mq_mode rx %d.\",\n+\t\t\t\t\tdev_conf->rxmode.mq_mode);\n+\t\t\treturn -EINVAL;\n+\t\tcase ETH_MQ_RX_RSS:\n+\t\tcase ETH_MQ_RX_VMDQ_RSS:\n+\t\t\tdev->data->dev_conf.rxmode.mq_mode = ETH_MQ_RX_VMDQ_RSS;\n+\t\t\tif (nb_rx_q <= RTE_ETH_DEV_SRIOV(dev).nb_q_per_pool)\n+\t\t\t\tif (ixgbe_check_vf_rss_rxq_num(dev, nb_rx_q)) {\n+\t\t\t\t\tPMD_INIT_LOG(ERR, \"SRIOV is active,\"\n+\t\t\t\t\t\t\" invalid queue number\"\n+\t\t\t\t\t\t\" for VMDQ RSS, allowed\"\n+\t\t\t\t\t\t\" value are 1, 2 or 4.\");\n+\t\t\t\t\treturn -EINVAL;\n+\t\t\t\t}\n+\t\t\tbreak;\n+\t\tcase ETH_MQ_RX_VMDQ_ONLY:\n+\t\tcase ETH_MQ_RX_NONE:\n+\t\t\t/* if nothing mq mode configure, use default scheme */\n+\t\t\tdev->data->dev_conf.rxmode.mq_mode = ETH_MQ_RX_VMDQ_ONLY;\n+\t\t\tif (RTE_ETH_DEV_SRIOV(dev).nb_q_per_pool > 1)\n+\t\t\t\tRTE_ETH_DEV_SRIOV(dev).nb_q_per_pool = 1;\n+\t\t\tbreak;\n+\t\tdefault: /* ETH_MQ_RX_DCB, ETH_MQ_RX_DCB_RSS or ETH_MQ_TX_DCB*/\n+\t\t\t/* SRIOV only works in VMDq enable mode */\n+\t\t\tPMD_INIT_LOG(ERR, \"SRIOV is active,\"\n+\t\t\t\t\t\" wrong mq_mode rx %d.\",\n+\t\t\t\t\tdev_conf->rxmode.mq_mode);\n+\t\t\treturn -EINVAL;\n+\t\t}\n+\n+\t\tswitch (dev_conf->txmode.mq_mode) {\n+\t\tcase ETH_MQ_TX_VMDQ_DCB:\n+\t\t\t/* DCB VMDQ in SRIOV mode, not implement yet */\n+\t\t\tPMD_INIT_LOG(ERR, \"SRIOV is active,\"\n+\t\t\t\t\t\" unsupported VMDQ mq_mode tx %d.\",\n+\t\t\t\t\tdev_conf->txmode.mq_mode);\n+\t\t\treturn -EINVAL;\n+\t\tdefault: /* ETH_MQ_TX_VMDQ_ONLY or ETH_MQ_TX_NONE */\n+\t\t\tdev->data->dev_conf.txmode.mq_mode = ETH_MQ_TX_VMDQ_ONLY;\n+\t\t\tbreak;\n+\t\t}\n+\n+\t\t/* check valid queue number */\n+\t\tif ((nb_rx_q > RTE_ETH_DEV_SRIOV(dev).nb_q_per_pool) ||\n+\t\t    (nb_tx_q > RTE_ETH_DEV_SRIOV(dev).nb_q_per_pool)) {\n+\t\t\tPMD_INIT_LOG(ERR, \"SRIOV is active,\"\n+\t\t\t\t\t\" queue number must less equal to %d.\",\n+\t\t\t\t\tRTE_ETH_DEV_SRIOV(dev).nb_q_per_pool);\n+\t\t\treturn -EINVAL;\n+\t\t}\n+\t} else {\n+\t\t/* check configuration for vmdb+dcb mode */\n+\t\tif (dev_conf->rxmode.mq_mode == ETH_MQ_RX_VMDQ_DCB) {\n+\t\t\tconst struct rte_eth_vmdq_dcb_conf *conf;\n+\n+\t\t\tif (nb_rx_q != IXGBE_VMDQ_DCB_NB_QUEUES) {\n+\t\t\t\tPMD_INIT_LOG(ERR, \"VMDQ+DCB, nb_rx_q != %d.\",\n+\t\t\t\t\t\tIXGBE_VMDQ_DCB_NB_QUEUES);\n+\t\t\t\treturn -EINVAL;\n+\t\t\t}\n+\t\t\tconf = &dev_conf->rx_adv_conf.vmdq_dcb_conf;\n+\t\t\tif (!(conf->nb_queue_pools == ETH_16_POOLS ||\n+\t\t\t       conf->nb_queue_pools == ETH_32_POOLS)) {\n+\t\t\t\tPMD_INIT_LOG(ERR, \"VMDQ+DCB selected,\"\n+\t\t\t\t\t\t\" nb_queue_pools must be %d or %d.\",\n+\t\t\t\t\t\tETH_16_POOLS, ETH_32_POOLS);\n+\t\t\t\treturn -EINVAL;\n+\t\t\t}\n+\t\t}\n+\t\tif (dev_conf->txmode.mq_mode == ETH_MQ_TX_VMDQ_DCB) {\n+\t\t\tconst struct rte_eth_vmdq_dcb_tx_conf *conf;\n+\n+\t\t\tif (nb_tx_q != IXGBE_VMDQ_DCB_NB_QUEUES) {\n+\t\t\t\tPMD_INIT_LOG(ERR, \"VMDQ+DCB, nb_tx_q != %d\",\n+\t\t\t\t\t\t IXGBE_VMDQ_DCB_NB_QUEUES);\n+\t\t\t\treturn -EINVAL;\n+\t\t\t}\n+\t\t\tconf = &dev_conf->tx_adv_conf.vmdq_dcb_tx_conf;\n+\t\t\tif (!(conf->nb_queue_pools == ETH_16_POOLS ||\n+\t\t\t       conf->nb_queue_pools == ETH_32_POOLS)) {\n+\t\t\t\tPMD_INIT_LOG(ERR, \"VMDQ+DCB selected,\"\n+\t\t\t\t\t\t\" nb_queue_pools != %d and\"\n+\t\t\t\t\t\t\" nb_queue_pools != %d.\",\n+\t\t\t\t\t\tETH_16_POOLS, ETH_32_POOLS);\n+\t\t\t\treturn -EINVAL;\n+\t\t\t}\n+\t\t}\n+\n+\t\t/* For DCB mode check our configuration before we go further */\n+\t\tif (dev_conf->rxmode.mq_mode == ETH_MQ_RX_DCB) {\n+\t\t\tconst struct rte_eth_dcb_rx_conf *conf;\n+\n+\t\t\tif (nb_rx_q != IXGBE_DCB_NB_QUEUES) {\n+\t\t\t\tPMD_INIT_LOG(ERR, \"DCB selected, nb_rx_q != %d.\",\n+\t\t\t\t\t\t IXGBE_DCB_NB_QUEUES);\n+\t\t\t\treturn -EINVAL;\n+\t\t\t}\n+\t\t\tconf = &dev_conf->rx_adv_conf.dcb_rx_conf;\n+\t\t\tif (!(conf->nb_tcs == ETH_4_TCS ||\n+\t\t\t       conf->nb_tcs == ETH_8_TCS)) {\n+\t\t\t\tPMD_INIT_LOG(ERR, \"DCB selected, nb_tcs != %d\"\n+\t\t\t\t\t\t\" and nb_tcs != %d.\",\n+\t\t\t\t\t\tETH_4_TCS, ETH_8_TCS);\n+\t\t\t\treturn -EINVAL;\n+\t\t\t}\n+\t\t}\n+\n+\t\tif (dev_conf->txmode.mq_mode == ETH_MQ_TX_DCB) {\n+\t\t\tconst struct rte_eth_dcb_tx_conf *conf;\n+\n+\t\t\tif (nb_tx_q != IXGBE_DCB_NB_QUEUES) {\n+\t\t\t\tPMD_INIT_LOG(ERR, \"DCB, nb_tx_q != %d.\",\n+\t\t\t\t\t\t IXGBE_DCB_NB_QUEUES);\n+\t\t\t\treturn -EINVAL;\n+\t\t\t}\n+\t\t\tconf = &dev_conf->tx_adv_conf.dcb_tx_conf;\n+\t\t\tif (!(conf->nb_tcs == ETH_4_TCS ||\n+\t\t\t       conf->nb_tcs == ETH_8_TCS)) {\n+\t\t\t\tPMD_INIT_LOG(ERR, \"DCB selected, nb_tcs != %d\"\n+\t\t\t\t\t\t\" and nb_tcs != %d.\",\n+\t\t\t\t\t\tETH_4_TCS, ETH_8_TCS);\n+\t\t\t\treturn -EINVAL;\n+\t\t\t}\n+\t\t}\n+\t}\n+\treturn 0;\n+}\n+\n+static int\n ixgbe_dev_configure(struct rte_eth_dev *dev)\n {\n \tstruct ixgbe_interrupt *intr =\n \t\tIXGBE_DEV_PRIVATE_TO_INTR(dev->data->dev_private);\n \tstruct ixgbe_adapter *adapter =\n \t\t(struct ixgbe_adapter *)dev->data->dev_private;\n+\tint ret;\n \n \tPMD_INIT_FUNC_TRACE();\n+\t/* multipe queue mode checking */\n+\tret  = ixgbe_check_mq_mode(dev);\n+\tif (ret != 0) {\n+\t\tPMD_DRV_LOG(ERR, \"ixgbe_check_mq_mode fails with %d.\",\n+\t\t\t    ret);\n+\t\treturn ret;\n+\t}\n \n \t/* set flag to update link status after init */\n \tintr->flags |= IXGBE_FLAG_NEED_LINK_UPDATE;\ndiff --git a/drivers/net/ixgbe/ixgbe_ethdev.h b/drivers/net/ixgbe/ixgbe_ethdev.h\nindex f75c6dd..ccef592 100644\n--- a/drivers/net/ixgbe/ixgbe_ethdev.h\n+++ b/drivers/net/ixgbe/ixgbe_ethdev.h\n@@ -57,6 +57,9 @@\n #define IXGBE_VFTA_SIZE 128\n #define IXGBE_VLAN_TAG_SIZE 4\n #define IXGBE_MAX_RX_QUEUE_NUM\t128\n+#define IXGBE_VMDQ_DCB_NB_QUEUES     IXGBE_MAX_RX_QUEUE_NUM\n+#define IXGBE_DCB_NB_QUEUES          IXGBE_MAX_RX_QUEUE_NUM\n+\n #ifndef NBBY\n #define NBBY\t8\t/* number of bits in a byte */\n #endif\ndiff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c\nindex f593f6e..c7247c3 100644\n--- a/lib/librte_ether/rte_ethdev.c\n+++ b/lib/librte_ether/rte_ethdev.c\n@@ -880,197 +880,6 @@ rte_eth_dev_tx_queue_config(struct rte_eth_dev *dev, uint16_t nb_queues)\n \treturn 0;\n }\n \n-static int\n-rte_eth_dev_check_vf_rss_rxq_num(uint8_t port_id, uint16_t nb_rx_q)\n-{\n-\tstruct rte_eth_dev *dev = &rte_eth_devices[port_id];\n-\n-\tswitch (nb_rx_q) {\n-\tcase 1:\n-\tcase 2:\n-\t\tRTE_ETH_DEV_SRIOV(dev).active =\n-\t\t\tETH_64_POOLS;\n-\t\tbreak;\n-\tcase 4:\n-\t\tRTE_ETH_DEV_SRIOV(dev).active =\n-\t\t\tETH_32_POOLS;\n-\t\tbreak;\n-\tdefault:\n-\t\treturn -EINVAL;\n-\t}\n-\n-\tRTE_ETH_DEV_SRIOV(dev).nb_q_per_pool = nb_rx_q;\n-\tRTE_ETH_DEV_SRIOV(dev).def_pool_q_idx =\n-\t\tdev->pci_dev->max_vfs * nb_rx_q;\n-\n-\treturn 0;\n-}\n-\n-static int\n-rte_eth_dev_check_mq_mode(uint8_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,\n-\t\t\t  const struct rte_eth_conf *dev_conf)\n-{\n-\tstruct rte_eth_dev *dev = &rte_eth_devices[port_id];\n-\n-\tif (RTE_ETH_DEV_SRIOV(dev).active != 0) {\n-\t\t/* check multi-queue mode */\n-\t\tif ((dev_conf->rxmode.mq_mode == ETH_MQ_RX_DCB) ||\n-\t\t    (dev_conf->rxmode.mq_mode == ETH_MQ_RX_DCB_RSS) ||\n-\t\t    (dev_conf->txmode.mq_mode == ETH_MQ_TX_DCB)) {\n-\t\t\t/* SRIOV only works in VMDq enable mode */\n-\t\t\tPMD_DEBUG_TRACE(\"ethdev port_id=%\" PRIu8\n-\t\t\t\t\t\" SRIOV active, \"\n-\t\t\t\t\t\"wrong VMDQ mq_mode rx %u tx %u\\n\",\n-\t\t\t\t\tport_id,\n-\t\t\t\t\tdev_conf->rxmode.mq_mode,\n-\t\t\t\t\tdev_conf->txmode.mq_mode);\n-\t\t\treturn -EINVAL;\n-\t\t}\n-\n-\t\tswitch (dev_conf->rxmode.mq_mode) {\n-\t\tcase ETH_MQ_RX_VMDQ_DCB:\n-\t\tcase ETH_MQ_RX_VMDQ_DCB_RSS:\n-\t\t\t/* DCB/RSS VMDQ in SRIOV mode, not implement yet */\n-\t\t\tPMD_DEBUG_TRACE(\"ethdev port_id=%\" PRIu8\n-\t\t\t\t\t\" SRIOV active, \"\n-\t\t\t\t\t\"unsupported VMDQ mq_mode rx %u\\n\",\n-\t\t\t\t\tport_id, dev_conf->rxmode.mq_mode);\n-\t\t\treturn -EINVAL;\n-\t\tcase ETH_MQ_RX_RSS:\n-\t\t\tPMD_DEBUG_TRACE(\"ethdev port_id=%\" PRIu8\n-\t\t\t\t\t\" SRIOV active, \"\n-\t\t\t\t\t\"Rx mq mode is changed from:\"\n-\t\t\t\t\t\"mq_mode %u into VMDQ mq_mode %u\\n\",\n-\t\t\t\t\tport_id,\n-\t\t\t\t\tdev_conf->rxmode.mq_mode,\n-\t\t\t\t\tdev->data->dev_conf.rxmode.mq_mode);\n-\t\tcase ETH_MQ_RX_VMDQ_RSS:\n-\t\t\tdev->data->dev_conf.rxmode.mq_mode = ETH_MQ_RX_VMDQ_RSS;\n-\t\t\tif (nb_rx_q <= RTE_ETH_DEV_SRIOV(dev).nb_q_per_pool)\n-\t\t\t\tif (rte_eth_dev_check_vf_rss_rxq_num(port_id, nb_rx_q) != 0) {\n-\t\t\t\t\tPMD_DEBUG_TRACE(\"ethdev port_id=%d\"\n-\t\t\t\t\t\t\t\" SRIOV active, invalid queue\"\n-\t\t\t\t\t\t\t\" number for VMDQ RSS, allowed\"\n-\t\t\t\t\t\t\t\" value are 1, 2 or 4\\n\",\n-\t\t\t\t\t\t\tport_id);\n-\t\t\t\t\treturn -EINVAL;\n-\t\t\t\t}\n-\t\t\tbreak;\n-\t\tdefault: /* ETH_MQ_RX_VMDQ_ONLY or ETH_MQ_RX_NONE */\n-\t\t\t/* if nothing mq mode configure, use default scheme */\n-\t\t\tdev->data->dev_conf.rxmode.mq_mode = ETH_MQ_RX_VMDQ_ONLY;\n-\t\t\tif (RTE_ETH_DEV_SRIOV(dev).nb_q_per_pool > 1)\n-\t\t\t\tRTE_ETH_DEV_SRIOV(dev).nb_q_per_pool = 1;\n-\t\t\tbreak;\n-\t\t}\n-\n-\t\tswitch (dev_conf->txmode.mq_mode) {\n-\t\tcase ETH_MQ_TX_VMDQ_DCB:\n-\t\t\t/* DCB VMDQ in SRIOV mode, not implement yet */\n-\t\t\tPMD_DEBUG_TRACE(\"ethdev port_id=%\" PRIu8\n-\t\t\t\t\t\" SRIOV active, \"\n-\t\t\t\t\t\"unsupported VMDQ mq_mode tx %u\\n\",\n-\t\t\t\t\tport_id, dev_conf->txmode.mq_mode);\n-\t\t\treturn -EINVAL;\n-\t\tdefault: /* ETH_MQ_TX_VMDQ_ONLY or ETH_MQ_TX_NONE */\n-\t\t\t/* if nothing mq mode configure, use default scheme */\n-\t\t\tdev->data->dev_conf.txmode.mq_mode = ETH_MQ_TX_VMDQ_ONLY;\n-\t\t\tbreak;\n-\t\t}\n-\n-\t\t/* check valid queue number */\n-\t\tif ((nb_rx_q > RTE_ETH_DEV_SRIOV(dev).nb_q_per_pool) ||\n-\t\t    (nb_tx_q > RTE_ETH_DEV_SRIOV(dev).nb_q_per_pool)) {\n-\t\t\tPMD_DEBUG_TRACE(\"ethdev port_id=%d SRIOV active, \"\n-\t\t\t\t\t\"queue number must less equal to %d\\n\",\n-\t\t\t\t\tport_id,\n-\t\t\t\t\tRTE_ETH_DEV_SRIOV(dev).nb_q_per_pool);\n-\t\t\treturn -EINVAL;\n-\t\t}\n-\t} else {\n-\t\t/* For vmdb+dcb mode check our configuration before we go further */\n-\t\tif (dev_conf->rxmode.mq_mode == ETH_MQ_RX_VMDQ_DCB) {\n-\t\t\tconst struct rte_eth_vmdq_dcb_conf *conf;\n-\n-\t\t\tif (nb_rx_q != ETH_VMDQ_DCB_NUM_QUEUES) {\n-\t\t\t\tPMD_DEBUG_TRACE(\"ethdev port_id=%d VMDQ+DCB, nb_rx_q \"\n-\t\t\t\t\t\t\"!= %d\\n\",\n-\t\t\t\t\t\tport_id, ETH_VMDQ_DCB_NUM_QUEUES);\n-\t\t\t\treturn -EINVAL;\n-\t\t\t}\n-\t\t\tconf = &(dev_conf->rx_adv_conf.vmdq_dcb_conf);\n-\t\t\tif (!(conf->nb_queue_pools == ETH_16_POOLS ||\n-\t\t\t      conf->nb_queue_pools == ETH_32_POOLS)) {\n-\t\t\t\tPMD_DEBUG_TRACE(\"ethdev port_id=%d VMDQ+DCB selected, \"\n-\t\t\t\t\t\t\"nb_queue_pools must be %d or %d\\n\",\n-\t\t\t\t\t\tport_id, ETH_16_POOLS, ETH_32_POOLS);\n-\t\t\t\treturn -EINVAL;\n-\t\t\t}\n-\t\t}\n-\t\tif (dev_conf->txmode.mq_mode == ETH_MQ_TX_VMDQ_DCB) {\n-\t\t\tconst struct rte_eth_vmdq_dcb_tx_conf *conf;\n-\n-\t\t\tif (nb_tx_q != ETH_VMDQ_DCB_NUM_QUEUES) {\n-\t\t\t\tPMD_DEBUG_TRACE(\"ethdev port_id=%d VMDQ+DCB, nb_tx_q \"\n-\t\t\t\t\t\t\"!= %d\\n\",\n-\t\t\t\t\t\tport_id, ETH_VMDQ_DCB_NUM_QUEUES);\n-\t\t\t\treturn -EINVAL;\n-\t\t\t}\n-\t\t\tconf = &(dev_conf->tx_adv_conf.vmdq_dcb_tx_conf);\n-\t\t\tif (!(conf->nb_queue_pools == ETH_16_POOLS ||\n-\t\t\t      conf->nb_queue_pools == ETH_32_POOLS)) {\n-\t\t\t\tPMD_DEBUG_TRACE(\"ethdev port_id=%d VMDQ+DCB selected, \"\n-\t\t\t\t\t\t\"nb_queue_pools != %d or nb_queue_pools \"\n-\t\t\t\t\t\t\"!= %d\\n\",\n-\t\t\t\t\t\tport_id, ETH_16_POOLS, ETH_32_POOLS);\n-\t\t\t\treturn -EINVAL;\n-\t\t\t}\n-\t\t}\n-\n-\t\t/* For DCB mode check our configuration before we go further */\n-\t\tif (dev_conf->rxmode.mq_mode == ETH_MQ_RX_DCB) {\n-\t\t\tconst struct rte_eth_dcb_rx_conf *conf;\n-\n-\t\t\tif (nb_rx_q != ETH_DCB_NUM_QUEUES) {\n-\t\t\t\tPMD_DEBUG_TRACE(\"ethdev port_id=%d DCB, nb_rx_q \"\n-\t\t\t\t\t\t\"!= %d\\n\",\n-\t\t\t\t\t\tport_id, ETH_DCB_NUM_QUEUES);\n-\t\t\t\treturn -EINVAL;\n-\t\t\t}\n-\t\t\tconf = &(dev_conf->rx_adv_conf.dcb_rx_conf);\n-\t\t\tif (!(conf->nb_tcs == ETH_4_TCS ||\n-\t\t\t      conf->nb_tcs == ETH_8_TCS)) {\n-\t\t\t\tPMD_DEBUG_TRACE(\"ethdev port_id=%d DCB selected, \"\n-\t\t\t\t\t\t\"nb_tcs != %d or nb_tcs \"\n-\t\t\t\t\t\t\"!= %d\\n\",\n-\t\t\t\t\t\tport_id, ETH_4_TCS, ETH_8_TCS);\n-\t\t\t\treturn -EINVAL;\n-\t\t\t}\n-\t\t}\n-\n-\t\tif (dev_conf->txmode.mq_mode == ETH_MQ_TX_DCB) {\n-\t\t\tconst struct rte_eth_dcb_tx_conf *conf;\n-\n-\t\t\tif (nb_tx_q != ETH_DCB_NUM_QUEUES) {\n-\t\t\t\tPMD_DEBUG_TRACE(\"ethdev port_id=%d DCB, nb_tx_q \"\n-\t\t\t\t\t\t\"!= %d\\n\",\n-\t\t\t\t\t\tport_id, ETH_DCB_NUM_QUEUES);\n-\t\t\t\treturn -EINVAL;\n-\t\t\t}\n-\t\t\tconf = &(dev_conf->tx_adv_conf.dcb_tx_conf);\n-\t\t\tif (!(conf->nb_tcs == ETH_4_TCS ||\n-\t\t\t      conf->nb_tcs == ETH_8_TCS)) {\n-\t\t\t\tPMD_DEBUG_TRACE(\"ethdev port_id=%d DCB selected, \"\n-\t\t\t\t\t\t\"nb_tcs != %d or nb_tcs \"\n-\t\t\t\t\t\t\"!= %d\\n\",\n-\t\t\t\t\t\tport_id, ETH_4_TCS, ETH_8_TCS);\n-\t\t\t\treturn -EINVAL;\n-\t\t\t}\n-\t\t}\n-\t}\n-\treturn 0;\n-}\n-\n int\n rte_eth_dev_configure(uint8_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,\n \t\t      const struct rte_eth_conf *dev_conf)\n@@ -1182,14 +991,6 @@ rte_eth_dev_configure(uint8_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,\n \t\t\t\t\t\t\tETHER_MAX_LEN;\n \t}\n \n-\t/* multiple queue mode checking */\n-\tdiag = rte_eth_dev_check_mq_mode(port_id, nb_rx_q, nb_tx_q, dev_conf);\n-\tif (diag != 0) {\n-\t\tPMD_DEBUG_TRACE(\"port%d rte_eth_dev_check_mq_mode = %d\\n\",\n-\t\t\t\tport_id, diag);\n-\t\treturn diag;\n-\t}\n-\n \t/*\n \t * Setup new number of RX/TX queues and reconfigure device.\n \t */\n",
    "prefixes": [
        "dpdk-dev",
        "v3",
        "2/9"
    ]
}