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 at dpdk.org
> Cc: jyu at vmware.com; thomas.monjalon at 6wind.com; Doherty, Declan
> Subject: [PATCH v2] bond: set {rx|tx}_offload_capa flags
> 
> v2:
> rebased to HEAD
> 
> From: Jia Yu <jyu at 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 at vmware.com>
> Signed-off-by: Declan Doherty <declan.doherty at 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 via email to