On Sep 25, 2015 11:44 AM, "Jingjing Wu" <jingjing.wu at intel.com> wrote: > > In SR-IOV mode a VF sending LFC or PFC would throttle the entire port. > The workaround is to add a filter to drop pause frames from VFs from > sending pause frames.
This is a very strange approach - this would silently disable the Tx FC while a user would think it's enabled. Wouldn't the right approach be to let the user decide weather to enable this feature or even better - allow PF to disable this feature in the VF? > > Signed-off-by: Jingjing Wu <jingjing.wu at intel.com> > --- > drivers/net/i40e/i40e_ethdev.c | 30 ++++++++++++++++++++++++++++++ > 1 file changed, 30 insertions(+) > > diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c > index 2dd9fdc..6cc2172 100644 > --- a/drivers/net/i40e/i40e_ethdev.c > +++ b/drivers/net/i40e/i40e_ethdev.c > @@ -382,6 +382,30 @@ static inline void i40e_flex_payload_reg_init(struct i40e_hw *hw) > I40E_WRITE_REG(hw, I40E_GLQF_PIT(17), 0x00007440); > } > > +#define I40E_FLOW_CONTROL_ETHERTYPE 0x8808 > + > +/* > + * Add a ethertype filter to drop all flow control frames transimited > + * from VSIs. > +*/ > +static void > +i40e_add_tx_flow_control_drop_filter(struct i40e_pf *pf) > +{ > + struct i40e_hw *hw = I40E_PF_TO_HW(pf); > + uint16_t flags = I40E_AQC_ADD_CONTROL_PACKET_FLAGS_IGNORE_MAC | > + I40E_AQC_ADD_CONTROL_PACKET_FLAGS_DROP | > + I40E_AQC_ADD_CONTROL_PACKET_FLAGS_TX; > + int ret; > + > + ret = i40e_aq_add_rem_control_packet_filter(hw, NULL, > + I40E_FLOW_CONTROL_ETHERTYPE, flags, > + pf->main_vsi_seid, 0, > + TRUE, NULL, NULL); > + if (ret) > + PMD_INIT_LOG(ERR, "Failed to add filter to drop flow control " > + " frames from VSIs."); > +} > + > static int > eth_i40e_dev_init(struct rte_eth_dev *dev) > { > @@ -584,6 +608,12 @@ eth_i40e_dev_init(struct rte_eth_dev *dev) > > /* enable uio intr after callback register */ > rte_intr_enable(&(pci_dev->intr_handle)); > + /* > + * Add a ethertype filter to drop all flow control frames transimited > + * from VSIs. This is used to workaround the issue -- in SR-IOV mode > + * where a VF sending LFC or PFC would throttle the entire port. > + */ > + i40e_add_tx_flow_control_drop_filter(pf); > > /* initialize mirror rule list */ > TAILQ_INIT(&pf->mirror_list); > -- > 2.4.0 >