From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Zhao1, Wei" Subject: Re: [PATCH v2 2/3] net/ixgbe: enable promiscuous mode on PF host Date: Wed, 13 Feb 2019 03:42:44 +0000 Message-ID: References: <1547613775-58027-1-git-send-email-wei.zhao1@intel.com> <1547614920-59680-1-git-send-email-wei.zhao1@intel.com> <1547614920-59680-3-git-send-email-wei.zhao1@intel.com> <039ED4275CED7440929022BC67E7061153333BE7@SHSMSX103.ccr.corp.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Cc: "stable@dpdk.org" , "Lu, Wenzhuo" To: "Zhang, Qi Z" , "dev@dpdk.org" Return-path: In-Reply-To: <039ED4275CED7440929022BC67E7061153333BE7@SHSMSX103.ccr.corp.intel.com> Content-Language: en-US List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" > -----Original Message----- > From: Zhang, Qi Z > Sent: Wednesday, February 13, 2019 11:42 AM > To: Zhao1, Wei ; dev@dpdk.org > Cc: stable@dpdk.org; Lu, Wenzhuo > Subject: RE: [PATCH v2 2/3] net/ixgbe: enable promiscuous mode on PF host >=20 >=20 >=20 > > -----Original Message----- > > From: Zhao1, Wei > > Sent: Wednesday, January 16, 2019 1:02 PM > > To: dev@dpdk.org > > Cc: stable@dpdk.org; Lu, Wenzhuo ; Zhang, Qi Z > > ; Zhao1, Wei > > Subject: [PATCH v2 2/3] net/ixgbe: enable promiscuous mode on PF host > > >=20 > The title is misleading, we are going to support VF's promiscuous mode bu= t > not PF. >=20 > How about "Add VF promiscuous mode support when PF as host" Get, update in v3 >=20 > > There is need to PF host promiscuous mode enable. For ixgbe, in order > > to support VF vlan promiscuous or unicast promiscuous, we need to set > > PF host register PFVML2FLT of bit UPE and VPE. > > It also align to ixgbe kernel code version 5.5.3. > > > > Fixes: 72dec9e37a84 ("ixgbe: support multicast promiscuous mode on > > VF") >=20 > Same to previous patch, not a fix. > > > > Signed-off-by: Wei Zhao > > --- > > drivers/net/ixgbe/ixgbe_ethdev.h | 1 + > > drivers/net/ixgbe/ixgbe_pf.c | 78 > > ++++++++++++++++++++++++++++------------ > > 2 files changed, 57 insertions(+), 22 deletions(-) > > > > diff --git a/drivers/net/ixgbe/ixgbe_ethdev.h > > b/drivers/net/ixgbe/ixgbe_ethdev.h > > index d0b9396..e81f152 100644 > > --- a/drivers/net/ixgbe/ixgbe_ethdev.h > > +++ b/drivers/net/ixgbe/ixgbe_ethdev.h > > @@ -265,6 +265,7 @@ struct ixgbe_vf_info { > > uint8_t spoofchk_enabled; > > uint8_t api_version; > > uint16_t switch_domain_id; > > + uint16_t xcast_mode; > > }; > > > > /* > > diff --git a/drivers/net/ixgbe/ixgbe_pf.c > > b/drivers/net/ixgbe/ixgbe_pf.c index 4b833ff..c9d1a1c 100644 > > --- a/drivers/net/ixgbe/ixgbe_pf.c > > +++ b/drivers/net/ixgbe/ixgbe_pf.c > > @@ -408,23 +408,6 @@ ixgbe_vf_reset_msg(struct rte_eth_dev *dev, > > uint16_t > > vf) } > > > > static int > > -ixgbe_enable_vf_mc_promisc(struct rte_eth_dev *dev, uint32_t vf) -{ > > - struct ixgbe_hw *hw =3D > > IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private); > > - uint32_t vmolr; > > - > > - vmolr =3D IXGBE_READ_REG(hw, IXGBE_VMOLR(vf)); > > - > > - RTE_LOG(INFO, PMD, "VF %u: enabling multicast promiscuous\n", vf); > > - > > - vmolr |=3D IXGBE_VMOLR_MPE; > > - > > - IXGBE_WRITE_REG(hw, IXGBE_VMOLR(vf), vmolr); > > - > > - return 0; > > -} > > - > > -static int > > ixgbe_disable_vf_mc_promisc(struct rte_eth_dev *dev, uint32_t vf) { > > struct ixgbe_hw *hw =3D > > IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private); > > @@ -688,19 +671,70 @@ ixgbe_set_vf_mc_promisc(struct rte_eth_dev > *dev, > > uint32_t vf, uint32_t *msgbuf) { > > struct ixgbe_vf_info *vfinfo =3D > > *(IXGBE_DEV_PRIVATE_TO_P_VFDATA(dev->data- > >dev_private)); > > - bool enable =3D !!msgbuf[1]; /* msgbuf contains the flag to enable > */ > > + struct ixgbe_hw *hw =3D > > IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private); > > + int xcast_mode =3D msgbuf[1]; /* msgbuf contains the flag to enable > */ > > + u32 vmolr, fctrl, disable, enable; > > > > switch (vfinfo[vf].api_version) { > > case ixgbe_mbox_api_12: > > + /* promisc introduced in 1.3 version */ > > + if (xcast_mode =3D=3D IXGBEVF_XCAST_MODE_PROMISC) > > + return -EOPNOTSUPP; > > + break; > > + /* Fall threw */ > > + case ixgbe_mbox_api_13: > > break; > > default: > > return -1; > > } > > > > - if (enable) > > - return ixgbe_enable_vf_mc_promisc(dev, vf); > > - else > > - return ixgbe_disable_vf_mc_promisc(dev, vf); > > + if (vfinfo[vf].xcast_mode =3D=3D xcast_mode) > > + goto out; > > + > > + switch (xcast_mode) { > > + case IXGBEVF_XCAST_MODE_NONE: > > + disable =3D IXGBE_VMOLR_BAM | IXGBE_VMOLR_ROMPE | > > + IXGBE_VMOLR_MPE | IXGBE_VMOLR_UPE | > > IXGBE_VMOLR_VPE; > > + enable =3D 0; > > + break; > > + case IXGBEVF_XCAST_MODE_MULTI: > > + disable =3D IXGBE_VMOLR_MPE | IXGBE_VMOLR_UPE | > > IXGBE_VMOLR_VPE; > > + enable =3D IXGBE_VMOLR_BAM | IXGBE_VMOLR_ROMPE; > > + break; > > + case IXGBEVF_XCAST_MODE_ALLMULTI: > > + disable =3D IXGBE_VMOLR_UPE | IXGBE_VMOLR_VPE; > > + enable =3D IXGBE_VMOLR_BAM | IXGBE_VMOLR_ROMPE | > > IXGBE_VMOLR_MPE; > > + break; > > + case IXGBEVF_XCAST_MODE_PROMISC: > > + if (hw->mac.type <=3D ixgbe_mac_82599EB) > > + return -1; > > + > > + fctrl =3D IXGBE_READ_REG(hw, IXGBE_FCTRL); > > + if (!(fctrl & IXGBE_FCTRL_UPE)) { > > + /* VF promisc requires PF in promisc */ > > + RTE_LOG(ERR, PMD, > > + "Enabling VF promisc requires PF in promisc\n"); > > + return -1; > > + } > > + > > + disable =3D 0; > > + enable =3D IXGBE_VMOLR_BAM | IXGBE_VMOLR_ROMPE | > > + IXGBE_VMOLR_MPE | IXGBE_VMOLR_UPE | > > IXGBE_VMOLR_VPE; > > + break; > > + default: > > + return -1; > > + } > > + > > + vmolr =3D IXGBE_READ_REG(hw, IXGBE_VMOLR(vf)); > > + vmolr &=3D ~disable; > > + vmolr |=3D enable; > > + IXGBE_WRITE_REG(hw, IXGBE_VMOLR(vf), vmolr); > > + vfinfo[vf].xcast_mode =3D xcast_mode; > > + > > +out: > > + msgbuf[1] =3D xcast_mode; > > + > > + return 0; > > } > > > > static int > > -- > > 2.7.5