From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id 2232856B7 for ; Mon, 15 Feb 2016 09:43:38 +0100 (CET) Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga103.jf.intel.com with ESMTP; 15 Feb 2016 00:43:38 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.22,449,1449561600"; d="scan'208";a="746543228" Received: from fmsmsx104.amr.corp.intel.com ([10.18.124.202]) by orsmga003.jf.intel.com with ESMTP; 15 Feb 2016 00:43:37 -0800 Received: from fmsmsx116.amr.corp.intel.com (10.18.116.20) by fmsmsx104.amr.corp.intel.com (10.18.124.202) with Microsoft SMTP Server (TLS) id 14.3.248.2; Mon, 15 Feb 2016 00:43:37 -0800 Received: from shsmsx101.ccr.corp.intel.com (10.239.4.153) by fmsmsx116.amr.corp.intel.com (10.18.116.20) with Microsoft SMTP Server (TLS) id 14.3.248.2; Mon, 15 Feb 2016 00:43:37 -0800 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.172]) by SHSMSX101.ccr.corp.intel.com ([169.254.1.249]) with mapi id 14.03.0248.002; Mon, 15 Feb 2016 16:43:34 +0800 From: "Lu, Wenzhuo" To: "Wang, Xiao W" , "dev@dpdk.org" Thread-Topic: [dpdk-dev] [PATCH v2] ixgbe: support multicast promiscuous mode on VF Thread-Index: AdFnzDxJLX+QRNj6QAaCzgnTbjdYlw== Date: Mon, 15 Feb 2016 08:43:34 +0000 Message-ID: <6A0DE07E22DDAD4C9103DF62FEBC09090342A9EA@shsmsx102.ccr.corp.intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v2] ixgbe: support multicast promiscuous mode on VF X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Feb 2016 08:43:39 -0000 Hi Xiao, > -----Original Message----- > From: Wang, Xiao W > Sent: Monday, February 15, 2016 4:10 PM > To: Lu, Wenzhuo; dev@dpdk.org > Subject: RE: [dpdk-dev] [PATCH v2] ixgbe: support multicast promiscuous m= ode > on VF >=20 > Hi, >=20 > Best Regards, > Wang, Xiao >=20 > > -----Original Message----- > > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Wenzhuo Lu > > Sent: Sunday, February 14, 2016 2:25 PM > > To: dev@dpdk.org > > Subject: [dpdk-dev] [PATCH v2] ixgbe: support multicast promiscuous > > mode on VF > > > > Add multicast promiscuous mode support on ixgbe VF driver. > > > > Please note if we want to use this promiscuous mode, we need both PF > > and VF driver to support it. The reason is this VF feature is configged= on PF. > > If use kernel PF driver + dpdk VF driver, make sure kernel PF driver > > support VF multicast promiscuous mode. If use dpdk PF + dpdk VF, > > better make sure PF driver is the same version as VF. > > > > V2: > > Update release note. >=20 > Maybe it's better to put change log below the "---" >=20 > > > > Signed-off-by: Wenzhuo Lu > > Acked-by: Shaopeng He > > --- > > doc/guides/rel_notes/release_16_04.rst | 11 ++++++ > > drivers/net/ixgbe/base/ixgbe_mbx.h | 4 +++ > > drivers/net/ixgbe/ixgbe_ethdev.c | 66 > > ++++++++++++++++++++++++++++++++++ > > drivers/net/ixgbe/ixgbe_pf.c | 65 > > +++++++++++++++++++++++++++++++++ > > 4 files changed, 146 insertions(+) > > > > diff --git a/doc/guides/rel_notes/release_16_04.rst > > b/doc/guides/rel_notes/release_16_04.rst > > index 27fc624..e71d316 100644 > > --- a/doc/guides/rel_notes/release_16_04.rst > > +++ b/doc/guides/rel_notes/release_16_04.rst > > @@ -39,6 +39,17 @@ This section should contain new features added in > > this release. Sample format: > > > > Enabled virtio 1.0 support for virtio pmd driver. > > > > +* **Added multicast promiscuous mode support on VF for ixgbe.** > > + > > + Added multicast promiscuous mode support on ixgbe VF driver. So all > > + the VFs can receive the multicast packets. > > + > > + Please note if we want to use this promiscuous mode, we need both > > + PF and VF driver to support it. The reason is this VF feature is con= figged on > PF. > > + If use kernel PF driver + dpdk VF driver, make sure kernel PF > > + driver support VF multicast promiscuous mode. If use dpdk PF + dpdk > > + VF, better make sure PF driver is the same version as VF. > > + > > > > Resolved Issues > > --------------- > > diff --git a/drivers/net/ixgbe/base/ixgbe_mbx.h > > b/drivers/net/ixgbe/base/ixgbe_mbx.h > > index 445df10..4a120a3 100644 > > --- a/drivers/net/ixgbe/base/ixgbe_mbx.h > > +++ b/drivers/net/ixgbe/base/ixgbe_mbx.h > > @@ -89,6 +89,7 @@ enum ixgbe_pfvf_api_rev { > > ixgbe_mbox_api_10, /* API version 1.0, linux/freebsd VF driver */ > > ixgbe_mbox_api_20, /* API version 2.0, solaris Phase1 VF driver */ > > ixgbe_mbox_api_11, /* API version 1.1, linux/freebsd VF driver */ > > + ixgbe_mbox_api_12, /* API version 1.2, linux/freebsd VF driver */ > > /* This value should always be last */ > > ixgbe_mbox_api_unknown, /* indicates that API version is not > > known */ > > }; > > @@ -107,6 +108,9 @@ enum ixgbe_pfvf_api_rev { > > /* mailbox API, version 1.1 VF requests */ > > #define IXGBE_VF_GET_QUEUES 0x09 /* get queue configuration */ > > > > +/* mailbox API, version 1.2 VF requests */ > > +#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 */ > > #define IXGBE_VF_RX_QUEUES 2 /* number of Rx queues > supported */ > > diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c > > b/drivers/net/ixgbe/ixgbe_ethdev.c > > index 3e6fe86..82ba755 100644 > > --- a/drivers/net/ixgbe/ixgbe_ethdev.c > > +++ b/drivers/net/ixgbe/ixgbe_ethdev.c > > @@ -138,6 +138,12 @@ > > > > #define IXGBE_CYCLECOUNTER_MASK 0xffffffffffffffffULL > > > > +enum ixgbevf_xcast_modes { > > + IXGBEVF_XCAST_MODE_NONE =3D 0, > > + IXGBEVF_XCAST_MODE_MULTI, > > + IXGBEVF_XCAST_MODE_ALLMULTI, > > +}; > > + > > static int eth_ixgbe_dev_init(struct rte_eth_dev *eth_dev); static > > int eth_ixgbe_dev_uninit(struct rte_eth_dev *eth_dev); static int > > ixgbe_dev_configure(struct rte_eth_dev *dev); @@ -237,6 +243,8 @@ > > static int ixgbevf_dev_rx_queue_intr_disable(struct rte_eth_dev *dev, > > static void ixgbevf_set_ivar_map(struct ixgbe_hw *hw, int8_t direction, > > uint8_t queue, uint8_t msix_vector); static > void > > ixgbevf_configure_msix(struct rte_eth_dev *dev); > > +static void ixgbevf_dev_allmulticast_enable(struct rte_eth_dev *dev); > > +static void ixgbevf_dev_allmulticast_disable(struct rte_eth_dev > > +*dev); > > > > /* For Eth VMDQ APIs support */ > > static int ixgbe_uc_hash_table_set(struct rte_eth_dev *dev, struct @@ > > -511,6 > > +519,8 @@ static const struct eth_dev_ops ixgbevf_eth_dev_ops =3D { > > .stats_reset =3D ixgbevf_dev_stats_reset, > > .xstats_reset =3D ixgbevf_dev_stats_reset, > > .dev_close =3D ixgbevf_dev_close, > > + .allmulticast_enable =3D ixgbevf_dev_allmulticast_enable, > > + .allmulticast_disable =3D ixgbevf_dev_allmulticast_disable, > > .dev_infos_get =3D ixgbevf_dev_info_get, > > .mtu_set =3D ixgbevf_dev_set_mtu, > > .vlan_filter_set =3D ixgbevf_vlan_filter_set, > > @@ -1224,6 +1234,7 @@ ixgbevf_negotiate_api(struct ixgbe_hw *hw) > > > > /* start with highest supported, proceed down */ > > static const enum ixgbe_pfvf_api_rev sup_ver[] =3D { > > + ixgbe_mbox_api_12, > > ixgbe_mbox_api_11, > > ixgbe_mbox_api_10, > > }; > > @@ -6191,6 +6202,61 @@ ixgbe_dev_get_dcb_info(struct rte_eth_dev *dev, > > return 0; > > } > > > > +/* ixgbevf_update_xcast_mode - Update Multicast mode > > + * @hw: pointer to the HW structure > > + * @netdev: pointer to net device structure > > + * @xcast_mode: new multicast mode > > + * > > + * Updates the Multicast Mode of VF. > > + */ > > +static int ixgbevf_update_xcast_mode(struct ixgbe_hw *hw, > > + int xcast_mode) > > +{ > > + struct ixgbe_mbx_info *mbx =3D &hw->mbx; > > + u32 msgbuf[2]; > > + s32 err; > > + > > + switch (hw->api_version) { > > + case ixgbe_mbox_api_12: > > + break; > > + default: > > + return -EOPNOTSUPP; > > + } > > + > > + msgbuf[0] =3D IXGBE_VF_UPDATE_XCAST_MODE; > > + msgbuf[1] =3D xcast_mode; > > + > > + err =3D mbx->ops.write_posted(hw, msgbuf, 2, 0); > > + if (err) > > + return err; > > + > > + err =3D mbx->ops.read_posted(hw, msgbuf, 2, 0); >=20 > Is it more reasonable to read a message of size 1 than 2? Pf side only wr= ite 1 > word into mbx. Thanks for the comment. But actually PF writes 16 words into the mbx, and 2= words have meaning. Word0 is used to check ack/nack. PF uses word1 to write the xcast_mode back= . I don't check the word1 because I don't see the necessary:) >=20 > > + if (err) > > + return err;