Hi Ferruh, > -----Original Message----- > From: Yigit, Ferruh > Sent: Tuesday, September 20, 2016 1:06 AM > To: Wang, Xiao W <xiao.w.wang at intel.com>; Lu, Wenzhuo > <wenzhuo.lu at intel.com> > Cc: dev at dpdk.org > Subject: Re: [dpdk-dev] [PATCH 05/39] net/ixgbe/base: support VF multicast > promiscuous > > On 8/27/2016 4:47 PM, Xiao Wang wrote: > > Currently, VF is limited to 30 multicast addresses. In order to > > accommodate more addresses, this patch adds support for VF multicast > > promiscuous. > > It looks like functionality not changed, just > ixgbevf_update_xcast_mode() moved to ixgbe_mac_operations struct. > > Is 30 multicast address limitation remains with this patch? >
You're right, we have supported this feature in ixgbe_ethdev.c before, now shared code supports it, so it looks like just a function movement patch. I will rewrite the commit log to avoid misunderstanding. > > > > Signed-off-by: Xiao Wang <xiao.w.wang at intel.com> > > --- > > drivers/net/ixgbe/base/ixgbe_mbx.h | 2 +- > > drivers/net/ixgbe/base/ixgbe_type.h | 1 + > > drivers/net/ixgbe/base/ixgbe_vf.c | 38 > ++++++++++++++++++++++++++++++++ > > drivers/net/ixgbe/base/ixgbe_vf.h | 1 + > > drivers/net/ixgbe/ixgbe_ethdev.c | 43 > > ++----------------------------------- > > 5 files changed, 43 insertions(+), 42 deletions(-) > > > > diff --git a/drivers/net/ixgbe/base/ixgbe_mbx.h > b/drivers/net/ixgbe/base/ixgbe_mbx.h > > index d775142..c3e301f 100644 > > --- a/drivers/net/ixgbe/base/ixgbe_mbx.h > > +++ b/drivers/net/ixgbe/base/ixgbe_mbx.h > > @@ -111,7 +111,7 @@ enum ixgbe_pfvf_api_rev { > > /* mailbox API, version 1.2 VF requests */ > > #define IXGBE_VF_GET_RETA 0x0a /* VF request for RETA */ > > #define IXGBE_VF_GET_RSS_KEY 0x0b /* get RSS key */ > > -#define IXGBE_VF_UPDATE_XCAST_MODE 0x0C > > +#define IXGBE_VF_UPDATE_XCAST_MODE 0x0c > > > > /* GET_QUEUES return data indices within the mailbox */ > > #define IXGBE_VF_TX_QUEUES 1 /* number of Tx queues > supported */ > > diff --git a/drivers/net/ixgbe/base/ixgbe_type.h > b/drivers/net/ixgbe/base/ixgbe_type.h > > index b2fdfcd..96b5cbd 100644 > > --- a/drivers/net/ixgbe/base/ixgbe_type.h > > +++ b/drivers/net/ixgbe/base/ixgbe_type.h > > @@ -3883,6 +3883,7 @@ struct ixgbe_mac_operations { > > s32 (*init_uta_tables)(struct ixgbe_hw *); > > void (*set_mac_anti_spoofing)(struct ixgbe_hw *, bool, int); > > void (*set_vlan_anti_spoofing)(struct ixgbe_hw *, bool, int); > > + s32 (*update_xcast_mode)(struct ixgbe_hw *, int); > > > > /* Flow Control */ > > s32 (*fc_enable)(struct ixgbe_hw *); > > diff --git a/drivers/net/ixgbe/base/ixgbe_vf.c > b/drivers/net/ixgbe/base/ixgbe_vf.c > > index a75074a..20a739c 100644 > > --- a/drivers/net/ixgbe/base/ixgbe_vf.c > > +++ b/drivers/net/ixgbe/base/ixgbe_vf.c > > @@ -75,6 +75,7 @@ s32 ixgbe_init_ops_vf(struct ixgbe_hw *hw) > > hw->mac.ops.set_uc_addr = ixgbevf_set_uc_addr_vf; > > hw->mac.ops.init_rx_addrs = NULL; > > hw->mac.ops.update_mc_addr_list = ixgbe_update_mc_addr_list_vf; > > + hw->mac.ops.update_xcast_mode = ixgbevf_update_xcast_mode; > > hw->mac.ops.enable_mc = NULL; > > hw->mac.ops.disable_mc = NULL; > > hw->mac.ops.clear_vfta = NULL; > > @@ -419,6 +420,43 @@ s32 ixgbe_update_mc_addr_list_vf(struct ixgbe_hw > *hw, u8 *mc_addr_list, > > } > > > > /** > > + * ixgbevf_update_xcast_mode - Update Multicast mode > > + * @hw: pointer to the HW structure > > + * @xcast_mode: new multicast mode > > + * > > + * Updates the Multicast Mode of VF. > > + **/ > > +s32 ixgbevf_update_xcast_mode(struct ixgbe_hw *hw, int xcast_mode) > > +{ > > + struct ixgbe_mbx_info *mbx = &hw->mbx; > > + u32 msgbuf[2]; > > + s32 err; > > + > > + switch (hw->api_version) { > > + case ixgbe_mbox_api_12: > > + break; > > + default: > > + return IXGBE_ERR_FEATURE_NOT_SUPPORTED; > > + } > > + > > + msgbuf[0] = IXGBE_VF_UPDATE_XCAST_MODE; > > + msgbuf[1] = xcast_mode; > > + > > + err = mbx->ops.write_posted(hw, msgbuf, 2, 0); > > + if (err) > > + return err; > > + > > + err = mbx->ops.read_posted(hw, msgbuf, 2, 0); > > + if (err) > > + return err; > > + > > + msgbuf[0] &= ~IXGBE_VT_MSGTYPE_CTS; > > + if (msgbuf[0] == (IXGBE_VF_UPDATE_XCAST_MODE | > IXGBE_VT_MSGTYPE_NACK)) > > What if other flags set in msgbuf[0] > Please check 18/39 patch, which fixes something similar to this > This condition should be as (msgbuf[0] == original value of msgbuf[0] | NACK ), It's what the 18/39 patch fixes. No such issue for this function. Thanks, Xiao > > > + return IXGBE_ERR_FEATURE_NOT_SUPPORTED; > > + return IXGBE_SUCCESS; > > +} > > +