From: "Wang, Xiao W" <xiao.w.wang@intel.com>
To: "Lu, Wenzhuo" <wenzhuo.lu@intel.com>, "dev@dpdk.org" <dev@dpdk.org>
Subject: Re: [dpdk-dev] [PATCH v2] ixgbe: support multicast promiscuous mode on VF
Date: Mon, 15 Feb 2016 08:09:42 +0000 [thread overview]
Message-ID: <B7F2E978279D1D49A3034B7786DACF403DBA2578@SHSMSX101.ccr.corp.intel.com> (raw)
In-Reply-To: <1455431087-27509-1-git-send-email-wenzhuo.lu@intel.com>
Hi,
Best Regards,
Wang, Xiao
> -----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.
Maybe it's better to put change log below the "---"
>
> Signed-off-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
> Acked-by: Shaopeng He <shaopeng.he@intel.com>
> ---
> 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 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.
> +
>
> 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 = 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 = {
> .stats_reset = ixgbevf_dev_stats_reset,
> .xstats_reset = ixgbevf_dev_stats_reset,
> .dev_close = ixgbevf_dev_close,
> + .allmulticast_enable = ixgbevf_dev_allmulticast_enable,
> + .allmulticast_disable = ixgbevf_dev_allmulticast_disable,
> .dev_infos_get = ixgbevf_dev_info_get,
> .mtu_set = ixgbevf_dev_set_mtu,
> .vlan_filter_set = 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[] = {
> + 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 = &hw->mbx;
> + u32 msgbuf[2];
> + s32 err;
> +
> + switch (hw->api_version) {
> + case ixgbe_mbox_api_12:
> + break;
> + default:
> + return -EOPNOTSUPP;
> + }
> +
> + 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);
Is it more reasonable to read a message of size 1 than 2? Pf side only write 1 word into mbx.
> + if (err)
> + return err;
next prev parent reply other threads:[~2016-02-15 8:09 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-04 8:07 [dpdk-dev] [PATCH] " Wenzhuo Lu
2016-02-03 3:32 ` He, Shaopeng
2016-02-08 14:02 ` Bruce Richardson
2016-02-14 1:03 ` Lu, Wenzhuo
2016-02-14 6:24 ` [dpdk-dev] [PATCH v2] " Wenzhuo Lu
2016-02-15 8:09 ` Wang, Xiao W [this message]
2016-02-15 8:43 Lu, Wenzhuo
2016-03-03 3:51 ` Wang, Xiao W
2016-03-08 13:37 ` Bruce Richardson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=B7F2E978279D1D49A3034B7786DACF403DBA2578@SHSMSX101.ccr.corp.intel.com \
--to=xiao.w.wang@intel.com \
--cc=dev@dpdk.org \
--cc=wenzhuo.lu@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).