* [PATCH]i40e: move the fdir_setup from dev_init to dev_configure @ 2014-12-04 15:40 Jingjing Wu [not found] ` <1417707623-25777-1-git-send-email-jingjing.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> 0 siblings, 1 reply; 5+ messages in thread From: Jingjing Wu @ 2014-12-04 15:40 UTC (permalink / raw) To: dev-VfR2kkLFssw In order not to affect the FVL's performance by default setting, this patch moves the flow director initialization from i40e_pf_setup to i40e_dev_configure according to the mode in fdir configure info. Then the resources used for flow director will be only setup if it is enabled. Signed-off-by: jingjing.wu <jingjing.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> --- app/test-pmd/cmdline.c | 4 +- lib/librte_pmd_i40e/i40e_ethdev.c | 49 ++++++++++++----------- lib/librte_pmd_i40e/i40e_fdir.c | 83 ++++++++++++++++++++------------------- 3 files changed, 72 insertions(+), 64 deletions(-) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index c61c3a0..f79ea3e 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -8546,7 +8546,7 @@ cmd_flow_director_flex_mask_parsed(void *parsed_result, } flex_mask.flow_type = str2flowtype(res->flow_type); fdir_set_flex_mask(res->port_id, &flex_mask); - cmd_reconfig_device_queue(res->port_id, 1, 0); + cmd_reconfig_device_queue(res->port_id, 1, 1); } cmdline_parse_token_string_t cmd_flow_director_flexmask = @@ -8667,7 +8667,7 @@ cmd_flow_director_flxpld_parsed(void *parsed_result, } fdir_set_flex_payload(res->port_id, &flex_cfg); - cmd_reconfig_device_queue(res->port_id, 1, 0); + cmd_reconfig_device_queue(res->port_id, 1, 1); } cmdline_parse_token_string_t cmd_flow_director_flexpayload = diff --git a/lib/librte_pmd_i40e/i40e_ethdev.c b/lib/librte_pmd_i40e/i40e_ethdev.c index 87e750a..002d4a9 100644 --- a/lib/librte_pmd_i40e/i40e_ethdev.c +++ b/lib/librte_pmd_i40e/i40e_ethdev.c @@ -546,7 +546,6 @@ eth_i40e_dev_init(__rte_unused struct eth_driver *eth_drv, err_mac_alloc: i40e_vsi_release(pf->main_vsi); err_setup_pf_switch: - i40e_fdir_teardown(pf); err_get_mac_addr: err_configure_lan_hmc: (void)i40e_shutdown_lan_hmc(hw); @@ -565,8 +564,27 @@ err_get_capabilities: static int i40e_dev_configure(struct rte_eth_dev *dev) { - int ret; + struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private); enum rte_eth_rx_mq_mode mq_mode = dev->data->dev_conf.rxmode.mq_mode; + int ret; + + if (dev->data->dev_conf.fdir_conf.mode == RTE_FDIR_MODE_PERFECT) { + ret = i40e_fdir_setup(pf); + if (ret != I40E_SUCCESS) { + PMD_DRV_LOG(ERR, "Failed to setup flow director."); + return -ENOTSUP; + } + ret = i40e_fdir_configure(dev); + if (ret < 0) { + PMD_DRV_LOG(ERR, "failed to configure fdir."); + goto err; + } + } else + i40e_fdir_teardown(pf); + + ret = i40e_dev_init_vlan(dev); + if (ret < 0) + goto err; /* VMDQ setup. * Needs to move VMDQ setting out of i40e_pf_config_mq_rx() as VMDQ and @@ -583,10 +601,12 @@ i40e_dev_configure(struct rte_eth_dev *dev) if (mq_mode & ETH_MQ_RX_VMDQ_FLAG) { ret = i40e_vmdq_setup(dev); if (ret) - return ret; + goto err; } - - return i40e_dev_init_vlan(dev); + return 0; +err: + i40e_fdir_teardown(pf); + return ret; } void @@ -837,14 +857,8 @@ i40e_dev_start(struct rte_eth_dev *dev) i40e_vsi_enable_queues_intr(pf->vmdq[i].vsi); } - ret = i40e_fdir_configure(dev); - if (ret < 0) { - PMD_DRV_LOG(ERR, "failed to configure fdir."); - goto err_up; - } - /* enable FDIR MSIX interrupt */ - if (pf->flags & I40E_FLAG_FDIR) { + if (pf->fdir.fdir_vsi) { i40e_vsi_queues_bind_intr(pf->fdir.fdir_vsi); i40e_vsi_enable_queues_intr(pf->fdir.fdir_vsi); } @@ -903,7 +917,7 @@ i40e_dev_stop(struct rte_eth_dev *dev) i40e_vsi_queues_unbind_intr(pf->vmdq[i].vsi); } - if (pf->flags & I40E_FLAG_FDIR) { + if (pf->fdir.fdir_vsi) { i40e_vsi_queues_bind_intr(pf->fdir.fdir_vsi); i40e_vsi_enable_queues_intr(pf->fdir.fdir_vsi); } @@ -3302,15 +3316,6 @@ i40e_pf_setup(struct i40e_pf *pf) } pf->main_vsi = vsi; - /* setup FDIR after main vsi created.*/ - if (pf->flags & I40E_FLAG_FDIR) { - ret = i40e_fdir_setup(pf); - if (ret != I40E_SUCCESS) { - PMD_DRV_LOG(ERR, "Failed to setup flow director."); - pf->flags &= ~I40E_FLAG_FDIR; - } - } - /* Configure filter control */ memset(&settings, 0, sizeof(settings)); if (hw->func_caps.rss_table_size == ETH_RSS_RETA_SIZE_128) diff --git a/lib/librte_pmd_i40e/i40e_fdir.c b/lib/librte_pmd_i40e/i40e_fdir.c index d75b96e..ad38803 100644 --- a/lib/librte_pmd_i40e/i40e_fdir.c +++ b/lib/librte_pmd_i40e/i40e_fdir.c @@ -196,6 +196,11 @@ i40e_fdir_setup(struct i40e_pf *pf) const struct rte_memzone *mz = NULL; struct rte_eth_dev *eth_dev = pf->adapter->eth_dev; + if ((pf->flags & I40E_FLAG_FDIR) == 0) { + PMD_INIT_LOG(ERR, "HW doesn't support FDIR"); + return I40E_NOT_SUPPORTED; + } + PMD_DRV_LOG(INFO, "FDIR HW Capabilities: num_filters_guaranteed = %u," " num_filters_best_effort = %u.", hw->func_caps.fd_filters_guaranteed, @@ -203,9 +208,8 @@ i40e_fdir_setup(struct i40e_pf *pf) vsi = pf->fdir.fdir_vsi; if (vsi) { - PMD_DRV_LOG(ERR, "FDIR vsi pointer needs " - "to be null before creation."); - return I40E_ERR_BAD_PTR; + PMD_DRV_LOG(INFO, "FDIR initialization has been done."); + return I40E_SUCCESS; } /* make new FDIR VSI */ vsi = i40e_vsi_setup(pf, I40E_VSI_FDIR, pf->main_vsi, 0); @@ -302,6 +306,8 @@ i40e_fdir_teardown(struct i40e_pf *pf) struct i40e_vsi *vsi; vsi = pf->fdir.fdir_vsi; + if (!vsi) + return; i40e_switch_tx_queue(hw, vsi->base_queue, FALSE); i40e_switch_rx_queue(hw, vsi->base_queue, FALSE); i40e_dev_rx_queue_release(pf->fdir.rxq); @@ -653,37 +659,29 @@ i40e_fdir_configure(struct rte_eth_dev *dev) } } + /* enable FDIR filter */ val = I40E_READ_REG(hw, I40E_PFQF_CTL_0); - if ((pf->flags & I40E_FLAG_FDIR) && - dev->data->dev_conf.fdir_conf.mode == RTE_FDIR_MODE_PERFECT) { - /* enable FDIR filter */ - val |= I40E_PFQF_CTL_0_FD_ENA_MASK; - I40E_WRITE_REG(hw, I40E_PFQF_CTL_0, val); + val |= I40E_PFQF_CTL_0_FD_ENA_MASK; + I40E_WRITE_REG(hw, I40E_PFQF_CTL_0, val); - i40e_init_flx_pld(pf); /* set flex config to default value */ + i40e_init_flx_pld(pf); /* set flex config to default value */ - conf = &dev->data->dev_conf.fdir_conf.flex_conf; - ret = i40e_check_fdir_flex_conf(conf); - if (ret < 0) { - PMD_DRV_LOG(ERR, " invalid configuration arguments."); - return -EINVAL; - } - /* configure flex payload */ - for (i = 0; i < conf->nb_payloads; i++) - i40e_set_flx_pld_cfg(pf, &conf->flex_set[i]); - /* configure flex mask*/ - for (i = 0; i < conf->nb_flexmasks; i++) { - pctype = i40e_flowtype_to_pctype( - conf->flex_mask[i].flow_type); - i40e_set_flex_mask_on_pctype(pf, - pctype, - &conf->flex_mask[i]); - } - } else { - /* disable FDIR filter */ - val &= ~I40E_PFQF_CTL_0_FD_ENA_MASK; - I40E_WRITE_REG(hw, I40E_PFQF_CTL_0, val); - pf->flags &= ~I40E_FLAG_FDIR; + conf = &dev->data->dev_conf.fdir_conf.flex_conf; + ret = i40e_check_fdir_flex_conf(conf); + if (ret < 0) { + PMD_DRV_LOG(ERR, " invalid configuration arguments."); + return -EINVAL; + } + /* configure flex payload */ + for (i = 0; i < conf->nb_payloads; i++) + i40e_set_flx_pld_cfg(pf, &conf->flex_set[i]); + /* configure flex mask*/ + for (i = 0; i < conf->nb_flexmasks; i++) { + pctype = i40e_flowtype_to_pctype( + conf->flex_mask[i].flow_type); + i40e_set_flex_mask_on_pctype(pf, + pctype, + &conf->flex_mask[i]); } return ret; @@ -982,10 +980,12 @@ i40e_add_del_fdir_filter(struct rte_eth_dev *dev, enum i40e_filter_pctype pctype; int ret = 0; - if (!(pf->flags & I40E_FLAG_FDIR)) { - PMD_DRV_LOG(ERR, "FDIR is not enabled."); + if (dev->data->dev_conf.fdir_conf.mode != RTE_FDIR_MODE_PERFECT) { + PMD_DRV_LOG(ERR, "FDIR is not enabled, please" + " check the mode in fdir_conf."); return -ENOTSUP; } + if (!I40E_VALID_FLOW_TYPE(filter->input.flow_type)) { PMD_DRV_LOG(ERR, "invalid flow_type input."); return -EINVAL; @@ -1263,8 +1263,11 @@ i40e_fdir_info_get(struct rte_eth_dev *dev, struct rte_eth_fdir_info *fdir) uint16_t num_flex_set = 0; uint16_t num_flex_mask = 0; - fdir->mode = (pf->flags & I40E_FLAG_FDIR) ? - RTE_FDIR_MODE_PERFECT : RTE_FDIR_MODE_NONE; + if (dev->data->dev_conf.fdir_conf.mode == RTE_FDIR_MODE_PERFECT) + fdir->mode = RTE_FDIR_MODE_PERFECT; + else + fdir->mode = RTE_FDIR_MODE_NONE; + fdir->guarant_spc = (uint32_t)hw->func_caps.fd_filters_guaranteed; fdir->best_spc = @@ -1324,11 +1327,11 @@ i40e_fdir_ctrl_func(struct rte_eth_dev *dev, struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private); int ret = 0; - if (filter_op == RTE_ETH_FILTER_NOP) { - if (!(pf->flags & I40E_FLAG_FDIR)) - ret = -ENOTSUP; - return ret; - } + if ((pf->flags & I40E_FLAG_FDIR) == 0) + return -ENOTSUP; + + if (filter_op == RTE_ETH_FILTER_NOP) + return 0; if (arg == NULL && filter_op != RTE_ETH_FILTER_FLUSH) return -EINVAL; -- 1.8.1.4 ^ permalink raw reply related [flat|nested] 5+ messages in thread
[parent not found: <1417707623-25777-1-git-send-email-jingjing.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>]
* Re: [PATCH]i40e: move the fdir_setup from dev_init to dev_configure [not found] ` <1417707623-25777-1-git-send-email-jingjing.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> @ 2014-12-04 20:28 ` Ananyev, Konstantin [not found] ` <2601191342CEEE43887BDE71AB977258213BCC1B-kPTMFJFq+rEu0RiL9chJVbfspsVTdybXVpNB7YpNyf8@public.gmane.org> 2014-12-05 0:57 ` Zhang, Helin 1 sibling, 1 reply; 5+ messages in thread From: Ananyev, Konstantin @ 2014-12-04 20:28 UTC (permalink / raw) To: Wu, Jingjing, dev-VfR2kkLFssw@public.gmane.org > -----Original Message----- > From: Wu, Jingjing > Sent: Thursday, December 04, 2014 3:40 PM > To: dev-VfR2kkLFssw@public.gmane.org > Cc: Wu, Jingjing; Zhang, Helin; Ananyev, Konstantin > Subject: [PATCH]i40e: move the fdir_setup from dev_init to dev_configure > > In order not to affect the FVL's performance by default setting, this > patch moves the flow director initialization from i40e_pf_setup to > i40e_dev_configure according to the mode in fdir configure info. > Then the resources used for flow director will be only setup if it is enabled. > > Signed-off-by: jingjing.wu <jingjing.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> > --- > app/test-pmd/cmdline.c | 4 +- > lib/librte_pmd_i40e/i40e_ethdev.c | 49 ++++++++++++----------- > lib/librte_pmd_i40e/i40e_fdir.c | 83 ++++++++++++++++++++------------------- > 3 files changed, 72 insertions(+), 64 deletions(-) > > diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c > index c61c3a0..f79ea3e 100644 > --- a/app/test-pmd/cmdline.c > +++ b/app/test-pmd/cmdline.c > @@ -8546,7 +8546,7 @@ cmd_flow_director_flex_mask_parsed(void *parsed_result, > } > flex_mask.flow_type = str2flowtype(res->flow_type); > fdir_set_flex_mask(res->port_id, &flex_mask); > - cmd_reconfig_device_queue(res->port_id, 1, 0); > + cmd_reconfig_device_queue(res->port_id, 1, 1); > } > > cmdline_parse_token_string_t cmd_flow_director_flexmask = > @@ -8667,7 +8667,7 @@ cmd_flow_director_flxpld_parsed(void *parsed_result, > } > > fdir_set_flex_payload(res->port_id, &flex_cfg); > - cmd_reconfig_device_queue(res->port_id, 1, 0); > + cmd_reconfig_device_queue(res->port_id, 1, 1); > } > > cmdline_parse_token_string_t cmd_flow_director_flexpayload = > diff --git a/lib/librte_pmd_i40e/i40e_ethdev.c b/lib/librte_pmd_i40e/i40e_ethdev.c > index 87e750a..002d4a9 100644 > --- a/lib/librte_pmd_i40e/i40e_ethdev.c > +++ b/lib/librte_pmd_i40e/i40e_ethdev.c > @@ -546,7 +546,6 @@ eth_i40e_dev_init(__rte_unused struct eth_driver *eth_drv, > err_mac_alloc: > i40e_vsi_release(pf->main_vsi); > err_setup_pf_switch: > - i40e_fdir_teardown(pf); > err_get_mac_addr: > err_configure_lan_hmc: > (void)i40e_shutdown_lan_hmc(hw); > @@ -565,8 +564,27 @@ err_get_capabilities: > static int > i40e_dev_configure(struct rte_eth_dev *dev) > { > - int ret; > + struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private); > enum rte_eth_rx_mq_mode mq_mode = dev->data->dev_conf.rxmode.mq_mode; > + int ret; > + > + if (dev->data->dev_conf.fdir_conf.mode == RTE_FDIR_MODE_PERFECT) { > + ret = i40e_fdir_setup(pf); > + if (ret != I40E_SUCCESS) { > + PMD_DRV_LOG(ERR, "Failed to setup flow director."); > + return -ENOTSUP; > + } > + ret = i40e_fdir_configure(dev); > + if (ret < 0) { > + PMD_DRV_LOG(ERR, "failed to configure fdir."); > + goto err; > + } > + } else > + i40e_fdir_teardown(pf); > + > + ret = i40e_dev_init_vlan(dev); > + if (ret < 0) > + goto err; > > /* VMDQ setup. > * Needs to move VMDQ setting out of i40e_pf_config_mq_rx() as VMDQ and > @@ -583,10 +601,12 @@ i40e_dev_configure(struct rte_eth_dev *dev) > if (mq_mode & ETH_MQ_RX_VMDQ_FLAG) { > ret = i40e_vmdq_setup(dev); > if (ret) > - return ret; > + goto err; > } > - > - return i40e_dev_init_vlan(dev); > + return 0; > +err: > + i40e_fdir_teardown(pf); > + return ret; > } > > void > @@ -837,14 +857,8 @@ i40e_dev_start(struct rte_eth_dev *dev) > i40e_vsi_enable_queues_intr(pf->vmdq[i].vsi); > } > > - ret = i40e_fdir_configure(dev); > - if (ret < 0) { > - PMD_DRV_LOG(ERR, "failed to configure fdir."); > - goto err_up; > - } > - > /* enable FDIR MSIX interrupt */ > - if (pf->flags & I40E_FLAG_FDIR) { > + if (pf->fdir.fdir_vsi) { > i40e_vsi_queues_bind_intr(pf->fdir.fdir_vsi); > i40e_vsi_enable_queues_intr(pf->fdir.fdir_vsi); > } > @@ -903,7 +917,7 @@ i40e_dev_stop(struct rte_eth_dev *dev) > i40e_vsi_queues_unbind_intr(pf->vmdq[i].vsi); > } > > - if (pf->flags & I40E_FLAG_FDIR) { > + if (pf->fdir.fdir_vsi) { > i40e_vsi_queues_bind_intr(pf->fdir.fdir_vsi); > i40e_vsi_enable_queues_intr(pf->fdir.fdir_vsi); > } > @@ -3302,15 +3316,6 @@ i40e_pf_setup(struct i40e_pf *pf) > } > pf->main_vsi = vsi; > > - /* setup FDIR after main vsi created.*/ > - if (pf->flags & I40E_FLAG_FDIR) { > - ret = i40e_fdir_setup(pf); > - if (ret != I40E_SUCCESS) { > - PMD_DRV_LOG(ERR, "Failed to setup flow director."); > - pf->flags &= ~I40E_FLAG_FDIR; > - } > - } > - > /* Configure filter control */ > memset(&settings, 0, sizeof(settings)); > if (hw->func_caps.rss_table_size == ETH_RSS_RETA_SIZE_128) > diff --git a/lib/librte_pmd_i40e/i40e_fdir.c b/lib/librte_pmd_i40e/i40e_fdir.c > index d75b96e..ad38803 100644 > --- a/lib/librte_pmd_i40e/i40e_fdir.c > +++ b/lib/librte_pmd_i40e/i40e_fdir.c > @@ -196,6 +196,11 @@ i40e_fdir_setup(struct i40e_pf *pf) > const struct rte_memzone *mz = NULL; > struct rte_eth_dev *eth_dev = pf->adapter->eth_dev; > > + if ((pf->flags & I40E_FLAG_FDIR) == 0) { > + PMD_INIT_LOG(ERR, "HW doesn't support FDIR"); > + return I40E_NOT_SUPPORTED; > + } > + > PMD_DRV_LOG(INFO, "FDIR HW Capabilities: num_filters_guaranteed = %u," > " num_filters_best_effort = %u.", > hw->func_caps.fd_filters_guaranteed, > @@ -203,9 +208,8 @@ i40e_fdir_setup(struct i40e_pf *pf) > > vsi = pf->fdir.fdir_vsi; > if (vsi) { > - PMD_DRV_LOG(ERR, "FDIR vsi pointer needs " > - "to be null before creation."); > - return I40E_ERR_BAD_PTR; > + PMD_DRV_LOG(INFO, "FDIR initialization has been done."); > + return I40E_SUCCESS; > } > /* make new FDIR VSI */ > vsi = i40e_vsi_setup(pf, I40E_VSI_FDIR, pf->main_vsi, 0); > @@ -302,6 +306,8 @@ i40e_fdir_teardown(struct i40e_pf *pf) > struct i40e_vsi *vsi; > > vsi = pf->fdir.fdir_vsi; > + if (!vsi) > + return; > i40e_switch_tx_queue(hw, vsi->base_queue, FALSE); > i40e_switch_rx_queue(hw, vsi->base_queue, FALSE); > i40e_dev_rx_queue_release(pf->fdir.rxq); > @@ -653,37 +659,29 @@ i40e_fdir_configure(struct rte_eth_dev *dev) > } > } > > + /* enable FDIR filter */ > val = I40E_READ_REG(hw, I40E_PFQF_CTL_0); > - if ((pf->flags & I40E_FLAG_FDIR) && > - dev->data->dev_conf.fdir_conf.mode == RTE_FDIR_MODE_PERFECT) { > - /* enable FDIR filter */ > - val |= I40E_PFQF_CTL_0_FD_ENA_MASK; > - I40E_WRITE_REG(hw, I40E_PFQF_CTL_0, val); > + val |= I40E_PFQF_CTL_0_FD_ENA_MASK; > + I40E_WRITE_REG(hw, I40E_PFQF_CTL_0, val); > > - i40e_init_flx_pld(pf); /* set flex config to default value */ > + i40e_init_flx_pld(pf); /* set flex config to default value */ > > - conf = &dev->data->dev_conf.fdir_conf.flex_conf; > - ret = i40e_check_fdir_flex_conf(conf); > - if (ret < 0) { > - PMD_DRV_LOG(ERR, " invalid configuration arguments."); > - return -EINVAL; > - } > - /* configure flex payload */ > - for (i = 0; i < conf->nb_payloads; i++) > - i40e_set_flx_pld_cfg(pf, &conf->flex_set[i]); > - /* configure flex mask*/ > - for (i = 0; i < conf->nb_flexmasks; i++) { > - pctype = i40e_flowtype_to_pctype( > - conf->flex_mask[i].flow_type); > - i40e_set_flex_mask_on_pctype(pf, > - pctype, > - &conf->flex_mask[i]); > - } > - } else { > - /* disable FDIR filter */ > - val &= ~I40E_PFQF_CTL_0_FD_ENA_MASK; > - I40E_WRITE_REG(hw, I40E_PFQF_CTL_0, val); > - pf->flags &= ~I40E_FLAG_FDIR; > + conf = &dev->data->dev_conf.fdir_conf.flex_conf; > + ret = i40e_check_fdir_flex_conf(conf); > + if (ret < 0) { > + PMD_DRV_LOG(ERR, " invalid configuration arguments."); > + return -EINVAL; > + } > + /* configure flex payload */ > + for (i = 0; i < conf->nb_payloads; i++) > + i40e_set_flx_pld_cfg(pf, &conf->flex_set[i]); > + /* configure flex mask*/ > + for (i = 0; i < conf->nb_flexmasks; i++) { > + pctype = i40e_flowtype_to_pctype( > + conf->flex_mask[i].flow_type); > + i40e_set_flex_mask_on_pctype(pf, > + pctype, > + &conf->flex_mask[i]); > } > > return ret; > @@ -982,10 +980,12 @@ i40e_add_del_fdir_filter(struct rte_eth_dev *dev, > enum i40e_filter_pctype pctype; > int ret = 0; > > - if (!(pf->flags & I40E_FLAG_FDIR)) { > - PMD_DRV_LOG(ERR, "FDIR is not enabled."); > + if (dev->data->dev_conf.fdir_conf.mode != RTE_FDIR_MODE_PERFECT) { > + PMD_DRV_LOG(ERR, "FDIR is not enabled, please" > + " check the mode in fdir_conf."); > return -ENOTSUP; > } > + > if (!I40E_VALID_FLOW_TYPE(filter->input.flow_type)) { > PMD_DRV_LOG(ERR, "invalid flow_type input."); > return -EINVAL; > @@ -1263,8 +1263,11 @@ i40e_fdir_info_get(struct rte_eth_dev *dev, struct rte_eth_fdir_info *fdir) > uint16_t num_flex_set = 0; > uint16_t num_flex_mask = 0; > > - fdir->mode = (pf->flags & I40E_FLAG_FDIR) ? > - RTE_FDIR_MODE_PERFECT : RTE_FDIR_MODE_NONE; > + if (dev->data->dev_conf.fdir_conf.mode == RTE_FDIR_MODE_PERFECT) > + fdir->mode = RTE_FDIR_MODE_PERFECT; > + else > + fdir->mode = RTE_FDIR_MODE_NONE; > + > fdir->guarant_spc = > (uint32_t)hw->func_caps.fd_filters_guaranteed; > fdir->best_spc = > @@ -1324,11 +1327,11 @@ i40e_fdir_ctrl_func(struct rte_eth_dev *dev, > struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private); > int ret = 0; > > - if (filter_op == RTE_ETH_FILTER_NOP) { > - if (!(pf->flags & I40E_FLAG_FDIR)) > - ret = -ENOTSUP; > - return ret; > - } > + if ((pf->flags & I40E_FLAG_FDIR) == 0) > + return -ENOTSUP; > + > + if (filter_op == RTE_ETH_FILTER_NOP) > + return 0; > > if (arg == NULL && filter_op != RTE_ETH_FILTER_FLUSH) > return -EINVAL; > -- > 1.8.1.4 Acked-by: Konstantin Ananyev <konstantin.ananyev-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> ^ permalink raw reply [flat|nested] 5+ messages in thread
[parent not found: <2601191342CEEE43887BDE71AB977258213BCC1B-kPTMFJFq+rEu0RiL9chJVbfspsVTdybXVpNB7YpNyf8@public.gmane.org>]
* Re: [PATCH]i40e: move the fdir_setup from dev_init to dev_configure [not found] ` <2601191342CEEE43887BDE71AB977258213BCC1B-kPTMFJFq+rEu0RiL9chJVbfspsVTdybXVpNB7YpNyf8@public.gmane.org> @ 2014-12-26 2:15 ` Cao, Min 0 siblings, 0 replies; 5+ messages in thread From: Cao, Min @ 2014-12-26 2:15 UTC (permalink / raw) To: Wu, Jingjing, dev-VfR2kkLFssw@public.gmane.org Tested-by: Min Cao <min.cao-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> Patch name: [dpdk-dev] [PATCH]i40e: move the fdir_setup from dev_init to dev_configure Test Flag: Tested-by Tester name: min.cao-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org Result summary: total 4 cases, 4 passed, 0 failed Test Case 1: Name: Fortville flow director with no flexible playload(IPv4/IPv6) Environment: OS: Fedora20 3.11.10-301.fc20.x86_64 gcc (GCC) 4.8.2 CPU: Intel(R) Xeon(R) CPU E5-2680 0 @ 2.70GHz NIC: Fortville eagle Test result: PASSED Test Case 2: Name: Fortville flow director with flexible playload(IPv4/IPv6) Environment: OS: Fedora20 3.11.10-301.fc20.x86_64 gcc (GCC) 4.8.2 CPU: Intel(R) Xeon(R) CPU E5-2680 0 @ 2.70GHz NIC: Fortville eagle Test result: PASSED Test Case 3: Name: Fortville flow director flush Environment: OS: Fedora20 3.11.10-301.fc20.x86_64 gcc (GCC) 4.8.2 CPU: Intel(R) Xeon(R) CPU E5-2680 0 @ 2.70GHz NIC: Fortville eagle Test result: PASSED Test Case 4: Name: Fortville flow director performance Environment: OS: Fedora20 3.11.10-301.fc20.x86_64 gcc (GCC) 4.8.2 CPU: Intel(R) Xeon(R) CPU E5-2680 0 @ 2.70GHz NIC: Fortville eagle Test result: PASSED > -----Original Message----- > From: Wu, Jingjing > Sent: Thursday, December 04, 2014 3:40 PM > To: dev-VfR2kkLFssw@public.gmane.org > Cc: Wu, Jingjing; Zhang, Helin; Ananyev, Konstantin > Subject: [PATCH]i40e: move the fdir_setup from dev_init to dev_configure > > In order not to affect the FVL's performance by default setting, this > patch moves the flow director initialization from i40e_pf_setup to > i40e_dev_configure according to the mode in fdir configure info. > Then the resources used for flow director will be only setup if it is enabled. > > Signed-off-by: jingjing.wu <jingjing.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> > --- > app/test-pmd/cmdline.c | 4 +- > lib/librte_pmd_i40e/i40e_ethdev.c | 49 ++++++++++++----------- > lib/librte_pmd_i40e/i40e_fdir.c | 83 ++++++++++++++++++++------------------- > 3 files changed, 72 insertions(+), 64 deletions(-) > > diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c > index c61c3a0..f79ea3e 100644 > --- a/app/test-pmd/cmdline.c > +++ b/app/test-pmd/cmdline.c > @@ -8546,7 +8546,7 @@ cmd_flow_director_flex_mask_parsed(void *parsed_result, > } > flex_mask.flow_type = str2flowtype(res->flow_type); > fdir_set_flex_mask(res->port_id, &flex_mask); > - cmd_reconfig_device_queue(res->port_id, 1, 0); > + cmd_reconfig_device_queue(res->port_id, 1, 1); > } > > cmdline_parse_token_string_t cmd_flow_director_flexmask = > @@ -8667,7 +8667,7 @@ cmd_flow_director_flxpld_parsed(void *parsed_result, > } > > fdir_set_flex_payload(res->port_id, &flex_cfg); > - cmd_reconfig_device_queue(res->port_id, 1, 0); > + cmd_reconfig_device_queue(res->port_id, 1, 1); > } > > cmdline_parse_token_string_t cmd_flow_director_flexpayload = > diff --git a/lib/librte_pmd_i40e/i40e_ethdev.c b/lib/librte_pmd_i40e/i40e_ethdev.c > index 87e750a..002d4a9 100644 > --- a/lib/librte_pmd_i40e/i40e_ethdev.c > +++ b/lib/librte_pmd_i40e/i40e_ethdev.c > @@ -546,7 +546,6 @@ eth_i40e_dev_init(__rte_unused struct eth_driver *eth_drv, > err_mac_alloc: > i40e_vsi_release(pf->main_vsi); > err_setup_pf_switch: > - i40e_fdir_teardown(pf); > err_get_mac_addr: > err_configure_lan_hmc: > (void)i40e_shutdown_lan_hmc(hw); > @@ -565,8 +564,27 @@ err_get_capabilities: > static int > i40e_dev_configure(struct rte_eth_dev *dev) > { > - int ret; > + struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private); > enum rte_eth_rx_mq_mode mq_mode = dev->data->dev_conf.rxmode.mq_mode; > + int ret; > + > + if (dev->data->dev_conf.fdir_conf.mode == RTE_FDIR_MODE_PERFECT) { > + ret = i40e_fdir_setup(pf); > + if (ret != I40E_SUCCESS) { > + PMD_DRV_LOG(ERR, "Failed to setup flow director."); > + return -ENOTSUP; > + } > + ret = i40e_fdir_configure(dev); > + if (ret < 0) { > + PMD_DRV_LOG(ERR, "failed to configure fdir."); > + goto err; > + } > + } else > + i40e_fdir_teardown(pf); > + > + ret = i40e_dev_init_vlan(dev); > + if (ret < 0) > + goto err; > > /* VMDQ setup. > * Needs to move VMDQ setting out of i40e_pf_config_mq_rx() as VMDQ and > @@ -583,10 +601,12 @@ i40e_dev_configure(struct rte_eth_dev *dev) > if (mq_mode & ETH_MQ_RX_VMDQ_FLAG) { > ret = i40e_vmdq_setup(dev); > if (ret) > - return ret; > + goto err; > } > - > - return i40e_dev_init_vlan(dev); > + return 0; > +err: > + i40e_fdir_teardown(pf); > + return ret; > } > > void > @@ -837,14 +857,8 @@ i40e_dev_start(struct rte_eth_dev *dev) > i40e_vsi_enable_queues_intr(pf->vmdq[i].vsi); > } > > - ret = i40e_fdir_configure(dev); > - if (ret < 0) { > - PMD_DRV_LOG(ERR, "failed to configure fdir."); > - goto err_up; > - } > - > /* enable FDIR MSIX interrupt */ > - if (pf->flags & I40E_FLAG_FDIR) { > + if (pf->fdir.fdir_vsi) { > i40e_vsi_queues_bind_intr(pf->fdir.fdir_vsi); > i40e_vsi_enable_queues_intr(pf->fdir.fdir_vsi); > } > @@ -903,7 +917,7 @@ i40e_dev_stop(struct rte_eth_dev *dev) > i40e_vsi_queues_unbind_intr(pf->vmdq[i].vsi); > } > > - if (pf->flags & I40E_FLAG_FDIR) { > + if (pf->fdir.fdir_vsi) { > i40e_vsi_queues_bind_intr(pf->fdir.fdir_vsi); > i40e_vsi_enable_queues_intr(pf->fdir.fdir_vsi); > } > @@ -3302,15 +3316,6 @@ i40e_pf_setup(struct i40e_pf *pf) > } > pf->main_vsi = vsi; > > - /* setup FDIR after main vsi created.*/ > - if (pf->flags & I40E_FLAG_FDIR) { > - ret = i40e_fdir_setup(pf); > - if (ret != I40E_SUCCESS) { > - PMD_DRV_LOG(ERR, "Failed to setup flow director."); > - pf->flags &= ~I40E_FLAG_FDIR; > - } > - } > - > /* Configure filter control */ > memset(&settings, 0, sizeof(settings)); > if (hw->func_caps.rss_table_size == ETH_RSS_RETA_SIZE_128) > diff --git a/lib/librte_pmd_i40e/i40e_fdir.c b/lib/librte_pmd_i40e/i40e_fdir.c > index d75b96e..ad38803 100644 > --- a/lib/librte_pmd_i40e/i40e_fdir.c > +++ b/lib/librte_pmd_i40e/i40e_fdir.c > @@ -196,6 +196,11 @@ i40e_fdir_setup(struct i40e_pf *pf) > const struct rte_memzone *mz = NULL; > struct rte_eth_dev *eth_dev = pf->adapter->eth_dev; > > + if ((pf->flags & I40E_FLAG_FDIR) == 0) { > + PMD_INIT_LOG(ERR, "HW doesn't support FDIR"); > + return I40E_NOT_SUPPORTED; > + } > + > PMD_DRV_LOG(INFO, "FDIR HW Capabilities: num_filters_guaranteed = %u," > " num_filters_best_effort = %u.", > hw->func_caps.fd_filters_guaranteed, > @@ -203,9 +208,8 @@ i40e_fdir_setup(struct i40e_pf *pf) > > vsi = pf->fdir.fdir_vsi; > if (vsi) { > - PMD_DRV_LOG(ERR, "FDIR vsi pointer needs " > - "to be null before creation."); > - return I40E_ERR_BAD_PTR; > + PMD_DRV_LOG(INFO, "FDIR initialization has been done."); > + return I40E_SUCCESS; > } > /* make new FDIR VSI */ > vsi = i40e_vsi_setup(pf, I40E_VSI_FDIR, pf->main_vsi, 0); > @@ -302,6 +306,8 @@ i40e_fdir_teardown(struct i40e_pf *pf) > struct i40e_vsi *vsi; > > vsi = pf->fdir.fdir_vsi; > + if (!vsi) > + return; > i40e_switch_tx_queue(hw, vsi->base_queue, FALSE); > i40e_switch_rx_queue(hw, vsi->base_queue, FALSE); > i40e_dev_rx_queue_release(pf->fdir.rxq); > @@ -653,37 +659,29 @@ i40e_fdir_configure(struct rte_eth_dev *dev) > } > } > > + /* enable FDIR filter */ > val = I40E_READ_REG(hw, I40E_PFQF_CTL_0); > - if ((pf->flags & I40E_FLAG_FDIR) && > - dev->data->dev_conf.fdir_conf.mode == RTE_FDIR_MODE_PERFECT) { > - /* enable FDIR filter */ > - val |= I40E_PFQF_CTL_0_FD_ENA_MASK; > - I40E_WRITE_REG(hw, I40E_PFQF_CTL_0, val); > + val |= I40E_PFQF_CTL_0_FD_ENA_MASK; > + I40E_WRITE_REG(hw, I40E_PFQF_CTL_0, val); > > - i40e_init_flx_pld(pf); /* set flex config to default value */ > + i40e_init_flx_pld(pf); /* set flex config to default value */ > > - conf = &dev->data->dev_conf.fdir_conf.flex_conf; > - ret = i40e_check_fdir_flex_conf(conf); > - if (ret < 0) { > - PMD_DRV_LOG(ERR, " invalid configuration arguments."); > - return -EINVAL; > - } > - /* configure flex payload */ > - for (i = 0; i < conf->nb_payloads; i++) > - i40e_set_flx_pld_cfg(pf, &conf->flex_set[i]); > - /* configure flex mask*/ > - for (i = 0; i < conf->nb_flexmasks; i++) { > - pctype = i40e_flowtype_to_pctype( > - conf->flex_mask[i].flow_type); > - i40e_set_flex_mask_on_pctype(pf, > - pctype, > - &conf->flex_mask[i]); > - } > - } else { > - /* disable FDIR filter */ > - val &= ~I40E_PFQF_CTL_0_FD_ENA_MASK; > - I40E_WRITE_REG(hw, I40E_PFQF_CTL_0, val); > - pf->flags &= ~I40E_FLAG_FDIR; > + conf = &dev->data->dev_conf.fdir_conf.flex_conf; > + ret = i40e_check_fdir_flex_conf(conf); > + if (ret < 0) { > + PMD_DRV_LOG(ERR, " invalid configuration arguments."); > + return -EINVAL; > + } > + /* configure flex payload */ > + for (i = 0; i < conf->nb_payloads; i++) > + i40e_set_flx_pld_cfg(pf, &conf->flex_set[i]); > + /* configure flex mask*/ > + for (i = 0; i < conf->nb_flexmasks; i++) { > + pctype = i40e_flowtype_to_pctype( > + conf->flex_mask[i].flow_type); > + i40e_set_flex_mask_on_pctype(pf, > + pctype, > + &conf->flex_mask[i]); > } > > return ret; > @@ -982,10 +980,12 @@ i40e_add_del_fdir_filter(struct rte_eth_dev *dev, > enum i40e_filter_pctype pctype; > int ret = 0; > > - if (!(pf->flags & I40E_FLAG_FDIR)) { > - PMD_DRV_LOG(ERR, "FDIR is not enabled."); > + if (dev->data->dev_conf.fdir_conf.mode != RTE_FDIR_MODE_PERFECT) { > + PMD_DRV_LOG(ERR, "FDIR is not enabled, please" > + " check the mode in fdir_conf."); > return -ENOTSUP; > } > + > if (!I40E_VALID_FLOW_TYPE(filter->input.flow_type)) { > PMD_DRV_LOG(ERR, "invalid flow_type input."); > return -EINVAL; > @@ -1263,8 +1263,11 @@ i40e_fdir_info_get(struct rte_eth_dev *dev, struct rte_eth_fdir_info *fdir) > uint16_t num_flex_set = 0; > uint16_t num_flex_mask = 0; > > - fdir->mode = (pf->flags & I40E_FLAG_FDIR) ? > - RTE_FDIR_MODE_PERFECT : RTE_FDIR_MODE_NONE; > + if (dev->data->dev_conf.fdir_conf.mode == RTE_FDIR_MODE_PERFECT) > + fdir->mode = RTE_FDIR_MODE_PERFECT; > + else > + fdir->mode = RTE_FDIR_MODE_NONE; > + > fdir->guarant_spc = > (uint32_t)hw->func_caps.fd_filters_guaranteed; > fdir->best_spc = > @@ -1324,11 +1327,11 @@ i40e_fdir_ctrl_func(struct rte_eth_dev *dev, > struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private); > int ret = 0; > > - if (filter_op == RTE_ETH_FILTER_NOP) { > - if (!(pf->flags & I40E_FLAG_FDIR)) > - ret = -ENOTSUP; > - return ret; > - } > + if ((pf->flags & I40E_FLAG_FDIR) == 0) > + return -ENOTSUP; > + > + if (filter_op == RTE_ETH_FILTER_NOP) > + return 0; > > if (arg == NULL && filter_op != RTE_ETH_FILTER_FLUSH) > return -EINVAL; > -- > 1.8.1.4 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH]i40e: move the fdir_setup from dev_init to dev_configure [not found] ` <1417707623-25777-1-git-send-email-jingjing.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> 2014-12-04 20:28 ` Ananyev, Konstantin @ 2014-12-05 0:57 ` Zhang, Helin [not found] ` <F35DEAC7BCE34641BA9FAC6BCA4A12E70A7CE9F6-0J0gbvR4kTg/UvCtAeCM4rfspsVTdybXVpNB7YpNyf8@public.gmane.org> 1 sibling, 1 reply; 5+ messages in thread From: Zhang, Helin @ 2014-12-05 0:57 UTC (permalink / raw) To: Wu, Jingjing, dev-VfR2kkLFssw@public.gmane.org > -----Original Message----- > From: Wu, Jingjing > Sent: Thursday, December 4, 2014 11:40 PM > To: dev-VfR2kkLFssw@public.gmane.org > Cc: Wu, Jingjing; Zhang, Helin; Ananyev, Konstantin > Subject: [PATCH]i40e: move the fdir_setup from dev_init to dev_configure > > In order not to affect the FVL's performance by default setting, this patch moves > the flow director initialization from i40e_pf_setup to i40e_dev_configure > according to the mode in fdir configure info. > Then the resources used for flow director will be only setup if it is enabled. > > Signed-off-by: jingjing.wu <jingjing.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> Acked-by: Helin Zhang <helin.zhang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> > --- > app/test-pmd/cmdline.c | 4 +- > lib/librte_pmd_i40e/i40e_ethdev.c | 49 ++++++++++++----------- > lib/librte_pmd_i40e/i40e_fdir.c | 83 > ++++++++++++++++++++------------------- > 3 files changed, 72 insertions(+), 64 deletions(-) ^ permalink raw reply [flat|nested] 5+ messages in thread
[parent not found: <F35DEAC7BCE34641BA9FAC6BCA4A12E70A7CE9F6-0J0gbvR4kTg/UvCtAeCM4rfspsVTdybXVpNB7YpNyf8@public.gmane.org>]
* Re: [PATCH]i40e: move the fdir_setup from dev_init to dev_configure [not found] ` <F35DEAC7BCE34641BA9FAC6BCA4A12E70A7CE9F6-0J0gbvR4kTg/UvCtAeCM4rfspsVTdybXVpNB7YpNyf8@public.gmane.org> @ 2014-12-05 16:13 ` Thomas Monjalon 0 siblings, 0 replies; 5+ messages in thread From: Thomas Monjalon @ 2014-12-05 16:13 UTC (permalink / raw) To: Wu, Jingjing; +Cc: dev-VfR2kkLFssw > > In order not to affect the FVL's performance by default setting, this patch moves > > the flow director initialization from i40e_pf_setup to i40e_dev_configure > > according to the mode in fdir configure info. > > Then the resources used for flow director will be only setup if it is enabled. > > > > Signed-off-by: jingjing.wu <jingjing.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> > > Acked-by: Helin Zhang <helin.zhang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> Applied A lot of commit titles need rewording. This one is a good example to explain. We don't need to see the function or structure names in a title. The global idea is a lot more interesting and easy to read. Here, I changed i40e: move the fdir_setup from dev_init to dev_configure to i40e: setup flow director only if enabled Thanks -- Thomas ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2014-12-26 2:15 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-12-04 15:40 [PATCH]i40e: move the fdir_setup from dev_init to dev_configure Jingjing Wu [not found] ` <1417707623-25777-1-git-send-email-jingjing.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> 2014-12-04 20:28 ` Ananyev, Konstantin [not found] ` <2601191342CEEE43887BDE71AB977258213BCC1B-kPTMFJFq+rEu0RiL9chJVbfspsVTdybXVpNB7YpNyf8@public.gmane.org> 2014-12-26 2:15 ` Cao, Min 2014-12-05 0:57 ` Zhang, Helin [not found] ` <F35DEAC7BCE34641BA9FAC6BCA4A12E70A7CE9F6-0J0gbvR4kTg/UvCtAeCM4rfspsVTdybXVpNB7YpNyf8@public.gmane.org> 2014-12-05 16:13 ` Thomas Monjalon
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).