From: Ferruh Yigit <ferruh.yigit@intel.com>
To: Yong Wang <yongwang@vmware.com>,
Eduard Serra Miralles <eserra@vmware.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>
Subject: Re: [dpdk-dev] [PATCH] net/vmxnet3: v4 boot and guest UDP RSS configuration
Date: Tue, 16 Apr 2019 17:08:54 +0100 [thread overview]
Message-ID: <aa796ca8-8353-b47b-b799-b11f9edd11ef@intel.com> (raw)
In-Reply-To: <E972BB3A-CC1B-47B5-83C6-D6D8C94732E4@vmware.com>
On 4/12/2019 7:13 PM, Yong Wang wrote:
> -----Original Message-----
> From: Eduard Serra Miralles <eserra@vmware.com>
> Date: Wednesday, April 10, 2019 at 9:44 PM
> To: Yong Wang <yongwang@vmware.com>
> Cc: "dev@dpdk.org" <dev@dpdk.org>, Eduard Serra Miralles <eserra@vmware.com>
> Subject: [PATCH] net/vmxnet3: v4 boot and guest UDP RSS configuration
>
> From: Eduard Serra <eserra@vmware.com>
>
> This patch introduces:
> - VMxnet3 v4 negotiation and,
> - entirely guest-driven UDP RSS support.
>
> VMxnet3 v3 already has UDP RSS support, however it
> depends on hypervisor provisioning on the VM through
> ESX specific flags, which are not transparent or known
> to the guest later on.
>
> Vmxnet3 v4 introduces a new API transaction which allows
> configuring RSS entirely from the guest. This API must be
> invoked after device shared mem region init.
>
> IPv4 ESP RSS (SPI based) is also available, but currently
> there are no ESP RSS definitions on rte_eth layer to
> handle that.
>
> Signed-off-by: Eduard Serra <eserra@vmware.com>
> ---
>
> Acked-by: Yong Wang <yongwang@vmware.com>
>
> One comment below.
>
> drivers/net/vmxnet3/vmxnet3_ethdev.c | 21 +++++++++++++++++-
> drivers/net/vmxnet3/vmxnet3_ethdev.h | 8 +++++++
> drivers/net/vmxnet3/vmxnet3_rxtx.c | 41 ++++++++++++++++++++++++++++++++++++
> 3 files changed, 69 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.c b/drivers/net/vmxnet3/vmxnet3_ethdev.c
> index 93e5de9..846d7fd 100644
> --- a/drivers/net/vmxnet3/vmxnet3_ethdev.c
> +++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c
> @@ -266,7 +266,11 @@ eth_vmxnet3_dev_init(struct rte_eth_dev *eth_dev)
> ver = VMXNET3_READ_BAR1_REG(hw, VMXNET3_REG_VRRS);
> PMD_INIT_LOG(DEBUG, "Hardware version : %d", ver);
>
> - if (ver & (1 << VMXNET3_REV_3)) {
> + if (ver & (1 << VMXNET3_REV_4)) {
> + VMXNET3_WRITE_BAR1_REG(hw, VMXNET3_REG_VRRS,
> + 1 << VMXNET3_REV_4);
> + hw->version = VMXNET3_REV_4 + 1;
> + } else if (ver & (1 << VMXNET3_REV_3)) {
> VMXNET3_WRITE_BAR1_REG(hw, VMXNET3_REG_VRRS,
> 1 << VMXNET3_REV_3);
> hw->version = VMXNET3_REV_3 + 1;
> @@ -764,6 +768,15 @@ vmxnet3_dev_start(struct rte_eth_dev *dev)
> PMD_INIT_LOG(DEBUG, "Failed to setup memory region\n");
> }
>
> + if (VMXNET3_VERSION_GE_4(hw)) {
> + /* Check for additional RSS */
> + ret = vmxnet3_v4_rss_configure(dev);
> + if (ret != VMXNET3_SUCCESS) {
> + PMD_INIT_LOG(ERR, "Failed to configure v4 RSS");
> + return ret;
> + }
> + }
> +
> /* Disable interrupts */
> vmxnet3_disable_intr(hw);
>
> @@ -1141,6 +1154,8 @@ static void
> vmxnet3_dev_info_get(struct rte_eth_dev *dev __rte_unused,
> struct rte_eth_dev_info *dev_info)
> {
> + struct vmxnet3_hw *hw = dev->data->dev_private;
> +
> dev_info->max_rx_queues = VMXNET3_MAX_RX_QUEUES;
> dev_info->max_tx_queues = VMXNET3_MAX_TX_QUEUES;
> dev_info->min_rx_bufsize = 1518 + RTE_PKTMBUF_HEADROOM;
> @@ -1150,6 +1165,10 @@ vmxnet3_dev_info_get(struct rte_eth_dev *dev __rte_unused,
>
> dev_info->flow_type_rss_offloads = VMXNET3_RSS_OFFLOAD_ALL;
>
> + if (VMXNET3_VERSION_GE_4(hw)) {
> + dev_info->flow_type_rss_offloads |= VMXNET3_V4_RSS_MASK;
> + }
> +
> dev_info->rx_desc_lim = (struct rte_eth_desc_lim) {
> .nb_max = VMXNET3_RX_RING_MAX_SIZE,
> .nb_min = VMXNET3_DEF_RX_RING_SIZE,
> diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.h b/drivers/net/vmxnet3/vmxnet3_ethdev.h
> index 5bc3a84..319d739 100644
> --- a/drivers/net/vmxnet3/vmxnet3_ethdev.h
> +++ b/drivers/net/vmxnet3/vmxnet3_ethdev.h
> @@ -34,6 +34,10 @@
> ETH_RSS_IPV6 | \
> ETH_RSS_NONFRAG_IPV6_TCP)
>
> +#define VMXNET3_V4_RSS_MASK ( \
> + ETH_RSS_NONFRAG_IPV4_UDP | \
> + ETH_RSS_NONFRAG_IPV6_UDP)
> +
> /* RSS configuration structure - shared with device through GPA */
> typedef struct VMXNET3_RSSConf {
> uint16_t hashType;
> @@ -103,10 +107,12 @@ struct vmxnet3_hw {
> UPT1_RxStats snapshot_rx_stats[VMXNET3_MAX_RX_QUEUES];
> };
>
> +#define VMXNET3_REV_4 3 /* Vmxnet3 Rev. 4 */
> #define VMXNET3_REV_3 2 /* Vmxnet3 Rev. 3 */
> #define VMXNET3_REV_2 1 /* Vmxnet3 Rev. 2 */
> #define VMXNET3_REV_1 0 /* Vmxnet3 Rev. 1 */
>
> +#define VMXNET3_VERSION_GE_4(hw) ((hw)->version >= VMXNET3_REV_4 + 1)
> #define VMXNET3_VERSION_GE_3(hw) ((hw)->version >= VMXNET3_REV_3 + 1)
> #define VMXNET3_VERSION_GE_2(hw) ((hw)->version >= VMXNET3_REV_2 + 1)
>
> @@ -162,6 +168,8 @@ void vmxnet3_dev_clear_queues(struct rte_eth_dev *dev);
> void vmxnet3_dev_rx_queue_release(void *rxq);
> void vmxnet3_dev_tx_queue_release(void *txq);
>
> +int vmxnet3_v4_rss_configure(struct rte_eth_dev *dev);
> +
> int vmxnet3_dev_rx_queue_setup(struct rte_eth_dev *dev, uint16_t rx_queue_id,
> uint16_t nb_rx_desc, unsigned int socket_id,
> const struct rte_eth_rxconf *rx_conf,
> diff --git a/drivers/net/vmxnet3/vmxnet3_rxtx.c b/drivers/net/vmxnet3/vmxnet3_rxtx.c
> index d30914a..9d80646 100644
> --- a/drivers/net/vmxnet3/vmxnet3_rxtx.c
> +++ b/drivers/net/vmxnet3/vmxnet3_rxtx.c
> @@ -1292,6 +1292,47 @@ static uint8_t rss_intel_key[40] = {
> };
>
> /*
> + * Additional RSS configurations based on vmxnet v4+ APIs
> + */
> +int
> +vmxnet3_v4_rss_configure(struct rte_eth_dev *dev)
> +{
> + struct vmxnet3_hw *hw = dev->data->dev_private;
> + Vmxnet3_DriverShared *shared = hw->shared;
> + Vmxnet3_CmdInfo *cmdInfo = &shared->cu.cmdInfo;
> + struct rte_eth_rss_conf *port_rss_conf;
> + uint64_t rss_hf;
> + uint32_t ret;
> +
> + PMD_INIT_FUNC_TRACE();
> +
> + cmdInfo->setRSSFields = 0;
> + port_rss_conf = &dev->data->dev_conf.rx_adv_conf.rss_conf;
> + rss_hf = port_rss_conf->rss_hf &
> + (VMXNET3_V4_RSS_MASK | VMXNET3_RSS_OFFLOAD_ALL);
> +
> + if (rss_hf & ETH_RSS_NONFRAG_IPV4_TCP)
> + cmdInfo->setRSSFields |= VMXNET3_RSS_FIELDS_TCPIP4;
> + if (rss_hf & ETH_RSS_NONFRAG_IPV6_TCP)
> + cmdInfo->setRSSFields |= VMXNET3_RSS_FIELDS_TCPIP6;
> + if (rss_hf & ETH_RSS_NONFRAG_IPV4_UDP)
> + cmdInfo->setRSSFields |= VMXNET3_RSS_FIELDS_UDPIP4;
> + if (rss_hf & ETH_RSS_NONFRAG_IPV6_UDP)
> + cmdInfo->setRSSFields |= VMXNET3_RSS_FIELDS_UDPIP6;
> + /* TODO: ESP RSS is currently not define in rte_eth layer */
>
> Let's just remove this as it has nothing to do with this change.
Reminder that this patch is waiting for this change request.
next prev parent reply other threads:[~2019-04-16 16:08 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-04-11 4:44 Eduard Serra Miralles
2019-04-11 4:44 ` Eduard Serra Miralles
2019-04-12 18:13 ` Yong Wang
2019-04-12 18:13 ` Yong Wang
2019-04-16 16:08 ` Ferruh Yigit [this message]
2019-04-16 16:08 ` Ferruh Yigit
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=aa796ca8-8353-b47b-b799-b11f9edd11ef@intel.com \
--to=ferruh.yigit@intel.com \
--cc=dev@dpdk.org \
--cc=eserra@vmware.com \
--cc=yongwang@vmware.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).