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
next prev parent 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).