* [dpdk-dev] [PATCH 1/4] net/ixgbe: fix multi-queue mode check in SRIOV mode @ 2017-02-28 6:26 Jingjing Wu 2017-02-28 6:26 ` [dpdk-dev] [PATCH 2/4] app/testpmd: fix init config for multi-queue mode Jingjing Wu ` (3 more replies) 0 siblings, 4 replies; 5+ messages in thread From: Jingjing Wu @ 2017-02-28 6:26 UTC (permalink / raw) To: dev; +Cc: jingjing.wu, helin.zhang, wenzhuo.lu, stable In SRIOV case, ETH_MQ_RX_VMDQ_DCB and ETH_MQ_RX_DCB should be considered as the same meaning, due to the multi-queue mapping is the same SRIOV and VMDq in ixgbe. Fixes: 27b609cbd1c6 ("ethdev: move the multi-queue mode check to specific drivers") Cc: stable@dpdk.org Signed-off-by: Jingjing Wu <jingjing.wu@intel.com> --- drivers/net/ixgbe/ixgbe_rxtx.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/net/ixgbe/ixgbe_rxtx.c b/drivers/net/ixgbe/ixgbe_rxtx.c index 9502432..72327bc 100644 --- a/drivers/net/ixgbe/ixgbe_rxtx.c +++ b/drivers/net/ixgbe/ixgbe_rxtx.c @@ -4135,9 +4135,8 @@ ixgbe_dev_mq_rx_configure(struct rte_eth_dev *dev) break; } } else { - /* - * SRIOV active scheme - * Support RSS together with VMDq & SRIOV + /* SRIOV active scheme + * Support RSS together with SRIOV. */ switch (dev->data->dev_conf.rxmode.mq_mode) { case ETH_MQ_RX_RSS: @@ -4145,10 +4144,13 @@ ixgbe_dev_mq_rx_configure(struct rte_eth_dev *dev) ixgbe_config_vf_rss(dev); break; case ETH_MQ_RX_VMDQ_DCB: + case ETH_MQ_RX_DCB: + /* In SRIOV, the configuration is the same as VMDq case */ ixgbe_vmdq_dcb_configure(dev); break; - /* FIXME if support DCB/RSS together with VMDq & SRIOV */ + /* DCB/RSS together with SRIOV is not supported */ case ETH_MQ_RX_VMDQ_DCB_RSS: + case ETH_MQ_RX_DCB_RSS: PMD_INIT_LOG(ERR, "Could not support DCB/RSS with VMDq & SRIOV"); return -1; -- 2.4.11 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [dpdk-dev] [PATCH 2/4] app/testpmd: fix init config for multi-queue mode 2017-02-28 6:26 [dpdk-dev] [PATCH 1/4] net/ixgbe: fix multi-queue mode check in SRIOV mode Jingjing Wu @ 2017-02-28 6:26 ` Jingjing Wu 2017-02-28 6:26 ` [dpdk-dev] [PATCH 3/4] app/testpmd: fix TC mapping in DCB init config Jingjing Wu ` (2 subsequent siblings) 3 siblings, 0 replies; 5+ messages in thread From: Jingjing Wu @ 2017-02-28 6:26 UTC (permalink / raw) To: dev; +Cc: jingjing.wu, helin.zhang, wenzhuo.lu, stable In SRIOV mode, the mq_mode of rte_eth_rxmode should not carry VMDQ info without rx_adv_conf setting. Fixes: a30979f6ad7f ("app/testpmd: set Rx VMDq RSS mode") Cc: stable@dpdk.org Signed-off-by: Jingjing Wu <jingjing.wu@intel.com> --- app/test-pmd/testpmd.c | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index bfb2f8e..f695807 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -1835,24 +1835,13 @@ init_port_config(void) port->dev_conf.rx_adv_conf.rss_conf.rss_hf = 0; } - if (port->dcb_flag == 0 && port->dev_info.max_vfs == 0) { + if (port->dcb_flag == 0) { if( port->dev_conf.rx_adv_conf.rss_conf.rss_hf != 0) port->dev_conf.rxmode.mq_mode = ETH_MQ_RX_RSS; else port->dev_conf.rxmode.mq_mode = ETH_MQ_RX_NONE; } - if (port->dev_info.max_vfs != 0) { - if (port->dev_conf.rx_adv_conf.rss_conf.rss_hf != 0) - port->dev_conf.rxmode.mq_mode = - ETH_MQ_RX_VMDQ_RSS; - else - port->dev_conf.rxmode.mq_mode = - ETH_MQ_RX_NONE; - - port->dev_conf.txmode.mq_mode = ETH_MQ_TX_NONE; - } - rxtx_port_config(port); rte_eth_macaddr_get(pid, &port->eth_addr); -- 2.4.11 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [dpdk-dev] [PATCH 3/4] app/testpmd: fix TC mapping in DCB init config 2017-02-28 6:26 [dpdk-dev] [PATCH 1/4] net/ixgbe: fix multi-queue mode check in SRIOV mode Jingjing Wu 2017-02-28 6:26 ` [dpdk-dev] [PATCH 2/4] app/testpmd: fix init config for multi-queue mode Jingjing Wu @ 2017-02-28 6:26 ` Jingjing Wu 2017-02-28 6:26 ` [dpdk-dev] [PATCH 4/4] net/i40e: enable DCB on SRIOV VFs Jingjing Wu 2017-03-06 18:12 ` [dpdk-dev] [dpdk-stable] [PATCH 1/4] net/ixgbe: fix multi-queue mode check in SRIOV mode Ferruh Yigit 3 siblings, 0 replies; 5+ messages in thread From: Jingjing Wu @ 2017-02-28 6:26 UTC (permalink / raw) To: dev; +Cc: jingjing.wu, helin.zhang, wenzhuo.lu, stable Fix the UP and TC mapping to divide multiple UPs to TCs instead of mapping the UPs who are lager than num_tcs to TC0. Fixes: 1a572499beb6 ("app/testpmd: setup DCB forwarding based on traffic class") Cc: stable@dpdk.org Signed-off-by: Jingjing Wu <jingjing.wu@intel.com> --- app/test-pmd/testpmd.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index f695807..fa19f8f 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -1933,9 +1933,9 @@ get_eth_dcb_conf(struct rte_eth_conf *eth_conf, rx_conf->nb_tcs = num_tcs; tx_conf->nb_tcs = num_tcs; - for (i = 0; i < num_tcs; i++) { - rx_conf->dcb_tc[i] = i; - tx_conf->dcb_tc[i] = i; + for (i = 0; i < ETH_DCB_NUM_USER_PRIORITIES; i++) { + rx_conf->dcb_tc[i] = i % num_tcs; + tx_conf->dcb_tc[i] = i % num_tcs; } eth_conf->rxmode.mq_mode = ETH_MQ_RX_DCB_RSS; eth_conf->rx_adv_conf.rss_conf.rss_hf = rss_hf; -- 2.4.11 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [dpdk-dev] [PATCH 4/4] net/i40e: enable DCB on SRIOV VFs 2017-02-28 6:26 [dpdk-dev] [PATCH 1/4] net/ixgbe: fix multi-queue mode check in SRIOV mode Jingjing Wu 2017-02-28 6:26 ` [dpdk-dev] [PATCH 2/4] app/testpmd: fix init config for multi-queue mode Jingjing Wu 2017-02-28 6:26 ` [dpdk-dev] [PATCH 3/4] app/testpmd: fix TC mapping in DCB init config Jingjing Wu @ 2017-02-28 6:26 ` Jingjing Wu 2017-03-06 18:12 ` [dpdk-dev] [dpdk-stable] [PATCH 1/4] net/ixgbe: fix multi-queue mode check in SRIOV mode Ferruh Yigit 3 siblings, 0 replies; 5+ messages in thread From: Jingjing Wu @ 2017-02-28 6:26 UTC (permalink / raw) To: dev; +Cc: jingjing.wu, helin.zhang, wenzhuo.lu enable DCB on SRIOV VFs, including - UP and TC mapping according to dcb_tc in struct rte_eth_dcb_rx_conf. - TC and queue mapping: queues are divided equally for each TC. - UP insert when sending packet according to the TC the Tx queue belongs to. Signed-off-by: Jingjing Wu <jingjing.wu@intel.com> --- drivers/net/i40e/i40e_ethdev.c | 28 ++++++++++++++++++---------- drivers/net/i40e/i40e_pf.c | 32 +++++++++++++++++++++++++++++--- 2 files changed, 47 insertions(+), 13 deletions(-) diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c index 303027b..07d9625 100644 --- a/drivers/net/i40e/i40e_ethdev.c +++ b/drivers/net/i40e/i40e_ethdev.c @@ -1235,6 +1235,15 @@ eth_i40e_dev_init(struct rte_eth_dev *dev) ether_addr_copy((struct ether_addr *)hw->mac.perm_addr, &dev->data->mac_addrs[0]); + /* Init dcb to sw mode by default */ + ret = i40e_dcb_init_configure(dev, TRUE); + if (ret != I40E_SUCCESS) { + PMD_INIT_LOG(INFO, "Failed to init dcb."); + pf->flags &= ~I40E_FLAG_DCB; + } + /* Update HW struct after DCB configuration */ + i40e_get_cap(hw); + /* initialize pf host driver to setup SRIOV resource if applicable */ i40e_pf_host_init(dev); @@ -1263,13 +1272,6 @@ eth_i40e_dev_init(struct rte_eth_dev *dev) /* initialize mirror rule list */ TAILQ_INIT(&pf->mirror_list); - /* Init dcb to sw mode by default */ - ret = i40e_dcb_init_configure(dev, TRUE); - if (ret != I40E_SUCCESS) { - PMD_INIT_LOG(INFO, "Failed to init dcb."); - pf->flags &= ~I40E_FLAG_DCB; - } - ret = i40e_init_ethtype_filter_list(dev); if (ret < 0) goto err_init_ethtype_filter_list; @@ -4835,13 +4837,14 @@ i40e_vsi_setup(struct i40e_pf *pf, rte_cpu_to_le_16(I40E_AQ_VSI_PROP_VLAN_VALID); ctxt.info.port_vlan_flags |= I40E_AQ_VSI_PVLAN_MODE_ALL; ret = i40e_vsi_config_tc_queue_mapping(vsi, &ctxt.info, - I40E_DEFAULT_TCMAP); + hw->func_caps.enabled_tcmap); if (ret != I40E_SUCCESS) { PMD_DRV_LOG(ERR, "Failed to configure TC queue mapping"); goto fail_msix_alloc; } - ctxt.info.up_enable_bits = I40E_DEFAULT_TCMAP; + + ctxt.info.up_enable_bits = hw->func_caps.enabled_tcmap; ctxt.info.valid_sections |= rte_cpu_to_le_16(I40E_AQ_VSI_PROP_SCHED_VALID); /** @@ -9863,7 +9866,7 @@ i40e_dcb_init_configure(struct rte_eth_dev *dev, bool sw_dcb) { struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private); struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data->dev_private); - int ret = 0; + int i, ret = 0; if ((pf->flags & I40E_FLAG_DCB) == 0) { PMD_INIT_LOG(ERR, "HW doesn't support DCB"); @@ -9890,11 +9893,16 @@ i40e_dcb_init_configure(struct rte_eth_dev *dev, bool sw_dcb) hw->local_dcbx_config.etscfg.tcbwtable[0] = 100; hw->local_dcbx_config.etscfg.tsatable[0] = I40E_IEEE_TSA_ETS; + /* all UPs mapping to TC0 */ + for (i = 0; i < I40E_MAX_USER_PRIORITY; i++) + hw->local_dcbx_config.etscfg.prioritytable[i] = 0; hw->local_dcbx_config.etsrec = hw->local_dcbx_config.etscfg; hw->local_dcbx_config.pfc.willing = 0; hw->local_dcbx_config.pfc.pfccap = I40E_MAX_TRAFFIC_CLASS; + hw->local_dcbx_config.pfc.pfcenable = + I40E_DEFAULT_TCMAP; /* FW needs one App to configure HW */ hw->local_dcbx_config.numapps = 1; hw->local_dcbx_config.app[0].selector = diff --git a/drivers/net/i40e/i40e_pf.c b/drivers/net/i40e/i40e_pf.c index f771dfb..b474b71 100644 --- a/drivers/net/i40e/i40e_pf.c +++ b/drivers/net/i40e/i40e_pf.c @@ -405,6 +405,29 @@ i40e_pf_host_hmc_config_rxq(struct i40e_hw *hw, return err; } +static inline uint8_t +i40e_vsi_get_tc_of_queue(struct i40e_vsi *vsi, + uint16_t queue_id) +{ + struct i40e_aqc_vsi_properties_data *info = &vsi->info; + uint16_t bsf, qp_idx; + uint8_t i; + + for (i = 0; i < I40E_MAX_TRAFFIC_CLASS; i++) { + if (vsi->enabled_tc & (1 << i)) { + qp_idx = rte_le_to_cpu_16((info->tc_mapping[i] & + I40E_AQ_VSI_TC_QUE_OFFSET_MASK) >> + I40E_AQ_VSI_TC_QUE_OFFSET_SHIFT); + bsf = rte_le_to_cpu_16((info->tc_mapping[i] & + I40E_AQ_VSI_TC_QUE_NUMBER_MASK) >> + I40E_AQ_VSI_TC_QUE_NUMBER_SHIFT); + if (queue_id >= qp_idx && queue_id < qp_idx + (1 << bsf)) + return i; + } + } + return 0; +} + static int i40e_pf_host_hmc_config_txq(struct i40e_hw *hw, struct i40e_pf_vf *vf, @@ -412,15 +435,17 @@ i40e_pf_host_hmc_config_txq(struct i40e_hw *hw, { int err = I40E_SUCCESS; struct i40e_hmc_obj_txq tx_ctx; + struct i40e_vsi *vsi = vf->vsi; uint32_t qtx_ctl; - uint16_t abs_queue_id = vf->vsi->base_queue + txq->queue_id; - + uint16_t abs_queue_id = vsi->base_queue + txq->queue_id; + uint8_t dcb_tc; /* clear the context structure first */ memset(&tx_ctx, 0, sizeof(tx_ctx)); tx_ctx.base = txq->dma_ring_addr / I40E_QUEUE_BASE_ADDR_UNIT; tx_ctx.qlen = txq->ring_len; - tx_ctx.rdylist = rte_le_to_cpu_16(vf->vsi->info.qs_handle[0]); + dcb_tc = i40e_vsi_get_tc_of_queue(vsi, txq->queue_id); + tx_ctx.rdylist = rte_le_to_cpu_16(vsi->info.qs_handle[dcb_tc]); tx_ctx.head_wb_ena = txq->headwb_enabled; tx_ctx.head_wb_addr = txq->dma_headwb_addr; @@ -1352,6 +1377,7 @@ i40e_pf_host_init(struct rte_eth_dev *dev) eth_random_addr(pf->vfs[i].mac_addr.addr_bytes); } + RTE_ETH_DEV_SRIOV(dev).active = pf->vf_num; /* restore irq0 */ i40e_pf_enable_irq0(hw); -- 2.4.11 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [dpdk-dev] [dpdk-stable] [PATCH 1/4] net/ixgbe: fix multi-queue mode check in SRIOV mode 2017-02-28 6:26 [dpdk-dev] [PATCH 1/4] net/ixgbe: fix multi-queue mode check in SRIOV mode Jingjing Wu ` (2 preceding siblings ...) 2017-02-28 6:26 ` [dpdk-dev] [PATCH 4/4] net/i40e: enable DCB on SRIOV VFs Jingjing Wu @ 2017-03-06 18:12 ` Ferruh Yigit 3 siblings, 0 replies; 5+ messages in thread From: Ferruh Yigit @ 2017-03-06 18:12 UTC (permalink / raw) To: Jingjing Wu, dev; +Cc: helin.zhang, wenzhuo.lu, stable On 2/28/2017 6:26 AM, Jingjing Wu wrote: > In SRIOV case, ETH_MQ_RX_VMDQ_DCB and ETH_MQ_RX_DCB should be considered as > the same meaning, due to the multi-queue mapping is the same SRIOV and VMDq > in ixgbe. > > Fixes: 27b609cbd1c6 ("ethdev: move the multi-queue mode check to specific drivers") > Cc: stable@dpdk.org > Signed-off-by: Jingjing Wu <jingjing.wu@intel.com> Series applied to dpdk-next-net/master, thanks. ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2017-03-06 18:12 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2017-02-28 6:26 [dpdk-dev] [PATCH 1/4] net/ixgbe: fix multi-queue mode check in SRIOV mode Jingjing Wu 2017-02-28 6:26 ` [dpdk-dev] [PATCH 2/4] app/testpmd: fix init config for multi-queue mode Jingjing Wu 2017-02-28 6:26 ` [dpdk-dev] [PATCH 3/4] app/testpmd: fix TC mapping in DCB init config Jingjing Wu 2017-02-28 6:26 ` [dpdk-dev] [PATCH 4/4] net/i40e: enable DCB on SRIOV VFs Jingjing Wu 2017-03-06 18:12 ` [dpdk-dev] [dpdk-stable] [PATCH 1/4] net/ixgbe: fix multi-queue mode check in SRIOV mode Ferruh Yigit
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).