Hi, Michael > -----Original Message----- > From: Qiu, Michael > Sent: Thursday, January 29, 2015 9:56 AM > To: Wu, Jingjing; dev at dpdk.org > Subject: Re: [dpdk-dev] [PATCH 2/2] i40e: enable internal switch of pf > > On 1/29/2015 9:42 AM, Jingjing Wu wrote: > > This patch enables PF's internal switch by setting ALLOWLOOPBACK flag > > when VEB is created. With this patch, traffic from PF can be switched > > on the VEB. > > > > Signed-off-by: Jingjing Wu <jingjing.wu at intel.com> > > --- > > lib/librte_pmd_i40e/i40e_ethdev.c | 36 > > ++++++++++++++++++++++++++++++++++++ > > 1 file changed, 36 insertions(+) > > > > diff --git a/lib/librte_pmd_i40e/i40e_ethdev.c > > b/lib/librte_pmd_i40e/i40e_ethdev.c > > index fe758c2..94fd36c 100644 > > --- a/lib/librte_pmd_i40e/i40e_ethdev.c > > +++ b/lib/librte_pmd_i40e/i40e_ethdev.c > > @@ -2854,6 +2854,40 @@ i40e_vsi_dump_bw_config(struct i40e_vsi *vsi) > > return 0; > > } > > > > +/* > > + * i40e_enable_pf_lb > > + * @pf: pointer to the pf structure > > + * > > + * allow loopback on pf > > + */ > > +static inline void > > +i40e_enable_pf_lb(struct i40e_pf *pf) { > > + struct i40e_hw *hw = I40E_PF_TO_HW(pf); > > + struct i40e_vsi_context ctxt; > > + int ret; > > + > > + memset(&ctxt, 0, sizeof(ctxt)); > > + ctxt.seid = pf->main_vsi_seid; > > + ctxt.pf_num = hw->pf_id; > > + ret = i40e_aq_get_vsi_params(hw, &ctxt, NULL); > > + if (ret) { > > + PMD_DRV_LOG(ERR, "couldn't get pf vsi config, err %d, > aq_err %d", > > + ret, hw->aq.asq_last_status); > > + return; > > + } > > + ctxt.flags = I40E_AQ_VSI_TYPE_PF; > > + ctxt.info.valid_sections = > > + rte_cpu_to_le_16(I40E_AQ_VSI_PROP_SWITCH_VALID); > > Here does it need to be "|=" ? As ctxt.infowill be filled in > i40e_aq_get_vsi_params(), I don't know if it has other issue for override this > filled by "=". > > Thanks, > Michael
You can look at the following lines. What we called is i40e_aq_update_vsi_params. So we need only set the flag we want to update. Thanks Jingjing > > + ctxt.info.switch_id |= > > + rte_cpu_to_le_16(I40E_AQ_VSI_SW_ID_FLAG_ALLOW_LB); > > + > > + ret = i40e_aq_update_vsi_params(hw, &ctxt, NULL); > > + if (ret) > > + PMD_DRV_LOG(ERR, "update vsi switch failed, > aq_err=%d\n", > > + hw->aq.asq_last_status); > > +} > > + > > /* Setup a VSI */ > > struct i40e_vsi * > > i40e_vsi_setup(struct i40e_pf *pf, > > @@ -2889,6 +2923,8 @@ i40e_vsi_setup(struct i40e_pf *pf, > > PMD_DRV_LOG(ERR, "VEB setup failed"); > > return NULL; > > } > > + /* set ALLOWLOOPBACk on pf, when veb is created */ > > + i40e_enable_pf_lb(pf); > > } > > > > vsi = rte_zmalloc("i40e_vsi", sizeof(struct i40e_vsi), 0);