DPDK patches and discussions
 help / color / mirror / Atom feed
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.

  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).