DPDK patches and discussions
 help / color / mirror / Atom feed
From: "Doherty, Declan" <declan.doherty@intel.com>
To: "dev@dpdk.org" <dev@dpdk.org>
Subject: Re: [dpdk-dev] [PATCH v2] bond: set {rx|tx}_offload_capa flags
Date: Thu, 27 Nov 2014 21:28:37 +0000	[thread overview]
Message-ID: <345C63BAECC1AD42A2EC8C63AFFC3ADC27427632@IRSMSX101.ger.corp.intel.com> (raw)
In-Reply-To: <1417123417-26444-1-git-send-email-declan.doherty@intel.com>

Self nack, need to rebase again as mode 4 and 5 patches have been applied.

> -----Original Message-----
> From: Doherty, Declan
> Sent: Thursday, November 27, 2014 9:24 PM
> To: dev@dpdk.org
> Cc: jyu@vmware.com; thomas.monjalon@6wind.com; Doherty, Declan
> Subject: [PATCH v2] bond: set {rx|tx}_offload_capa flags
> 
> v2:
> rebased to HEAD
> 
> From: Jia Yu <jyu@vmware.com>
> 
> Before the fix, bond device's offload capabilities are unset. This fix
> takes the minimum common set of slave devices' capabilities as bond
> device's capabilities. For simplicity, we ensure all slave devices
> to have a capability before bond device can claim this capability,
> even if some slave devices are unused (i.e. linked down, standby).
> 
> Signed-off-by: Jia Yu <jyu@vmware.com>
> Signed-off-by: Declan Doherty <declan.doherty@intel.com>
> ---
>  lib/librte_pmd_bond/rte_eth_bond_api.c     | 18 +++++++++++++++++-
>  lib/librte_pmd_bond/rte_eth_bond_pmd.c     |  5 +++++
>  lib/librte_pmd_bond/rte_eth_bond_private.h |  3 +++
>  3 files changed, 25 insertions(+), 1 deletion(-)
> 
> diff --git a/lib/librte_pmd_bond/rte_eth_bond_api.c
> b/lib/librte_pmd_bond/rte_eth_bond_api.c
> index f146bda..5125b57 100644
> --- a/lib/librte_pmd_bond/rte_eth_bond_api.c
> +++ b/lib/librte_pmd_bond/rte_eth_bond_api.c
> @@ -238,6 +238,8 @@ rte_eth_bond_create(const char *name, uint8_t mode,
> uint8_t socket_id)
> 
>  	internals->slave_count = 0;
>  	internals->active_slave_count = 0;
> +	internals->rx_offload_capa = 0;
> +	internals->tx_offload_capa = 0;
> 
>  	memset(internals->active_slaves, 0, sizeof(internals->active_slaves));
>  	memset(internals->slaves, 0, sizeof(internals->slaves));
> @@ -265,6 +267,7 @@ __eth_bond_slave_add_lock_free(uint8_t
> bonded_port_id, uint8_t slave_port_id)
>  	struct bond_dev_private *internals;
>  	struct bond_dev_private *temp_internals;
>  	struct rte_eth_link link_props;
> +	struct rte_eth_dev_info dev_info;
> 
>  	int i, j;
> 
> @@ -296,6 +299,9 @@ __eth_bond_slave_add_lock_free(uint8_t
> bonded_port_id, uint8_t slave_port_id)
>  	/* Add slave details to bonded device */
>  	slave_add(internals, slave_eth_dev);
> 
> +	memset(&dev_info, 0, sizeof(dev_info));
> +	rte_eth_dev_info_get(slave_port_id, &dev_info);
> +
>  	if (internals->slave_count < 1) {
>  		/* if MAC is not user defined then use MAC of first slave add to
>  		 * bonded device */
> @@ -308,6 +314,11 @@ __eth_bond_slave_add_lock_free(uint8_t
> bonded_port_id, uint8_t slave_port_id)
> 
>  		/* Make primary slave */
>  		internals->primary_port = slave_port_id;
> +
> +		/* Take the first dev's offload capabilities */
> +		internals->rx_offload_capa = dev_info.rx_offload_capa;
> +		internals->tx_offload_capa = dev_info.tx_offload_capa;
> +
>  	} else {
>  		/* Check slave link properties are supported if props are set,
>  		 * all slaves must be the same */
> @@ -323,6 +334,8 @@ __eth_bond_slave_add_lock_free(uint8_t
> bonded_port_id, uint8_t slave_port_id)
>  			link_properties_set(bonded_eth_dev,
>  					&(slave_eth_dev->data->dev_link));
>  		}
> +		internals->rx_offload_capa &= dev_info.rx_offload_capa;
> +		internals->tx_offload_capa &= dev_info.tx_offload_capa;
>  	}
> 
>  	internals->slave_count++;
> @@ -455,7 +468,10 @@ __eth_bond_slave_remove_lock_free(uint8_t
> bonded_port_id, uint8_t slave_port_id)
>  			memset(rte_eth_devices[bonded_port_id].data-
> >mac_addrs, 0,
> 
> 	sizeof(*(rte_eth_devices[bonded_port_id].data->mac_addrs)));
>  	}
> -
> +	if (internals->slave_count == 0) {
> +		internals->rx_offload_capa = 0;
> +		internals->tx_offload_capa = 0;
> +	}
>  	return 0;
>  }
> 
> diff --git a/lib/librte_pmd_bond/rte_eth_bond_pmd.c
> b/lib/librte_pmd_bond/rte_eth_bond_pmd.c
> index cf2fbab..0d1a36b 100644
> --- a/lib/librte_pmd_bond/rte_eth_bond_pmd.c
> +++ b/lib/librte_pmd_bond/rte_eth_bond_pmd.c
> @@ -788,6 +788,8 @@ static int bond_ethdev_configure(struct rte_eth_dev
> *dev);
>  static void
>  bond_ethdev_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
>  {
> +	struct bond_dev_private *internals = dev->data->dev_private;
> +
>  	dev_info->driver_name = driver_name;
>  	dev_info->max_mac_addrs = 1;
> 
> @@ -798,6 +800,9 @@ bond_ethdev_info(struct rte_eth_dev *dev, struct
> rte_eth_dev_info *dev_info)
> 
>  	dev_info->min_rx_bufsize = 0;
>  	dev_info->pci_dev = dev->pci_dev;
> +
> +	dev_info->rx_offload_capa = internals->rx_offload_capa;
> +	dev_info->tx_offload_capa = internals->tx_offload_capa;
>  }
> 
>  static int
> diff --git a/lib/librte_pmd_bond/rte_eth_bond_private.h
> b/lib/librte_pmd_bond/rte_eth_bond_private.h
> index 6254c84..2096f81 100644
> --- a/lib/librte_pmd_bond/rte_eth_bond_private.h
> +++ b/lib/librte_pmd_bond/rte_eth_bond_private.h
> @@ -144,6 +144,9 @@ struct bond_dev_private {
>  	struct bond_slave_details slaves[RTE_MAX_ETHPORTS];
>  	/**< Arary of bonded slaves details */
> 
> +	uint32_t rx_offload_capa;            /** Rx offload capability */
> +	uint32_t tx_offload_capa;            /** Tx offload capability */
> +
>  	struct rte_kvargs *kvlist;
>  };
> 
> --
> 1.7.12.2

  reply	other threads:[~2014-11-27 21:28 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-07 17:35 [dpdk-dev] [PATCH] Bond: " Jia Yu
2014-11-11 16:48 ` Doherty, Declan
2014-11-27 17:14   ` Thomas Monjalon
2014-11-27 21:23 ` [dpdk-dev] [PATCH v2] bond: " Declan Doherty
2014-11-27 21:28   ` Doherty, Declan [this message]
2014-11-27 21:52   ` Thomas Monjalon
2014-11-27 21:56     ` Doherty, Declan

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=345C63BAECC1AD42A2EC8C63AFFC3ADC27427632@IRSMSX101.ger.corp.intel.com \
    --to=declan.doherty@intel.com \
    --cc=dev@dpdk.org \
    /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).