Skip to contentSkip to conversation

Bond: set {rx|tx}_offload_capa flags

PATCH In review Jia Yu 3 participants 7 messages Nov 7, 2014 – Nov 27, 2014 3 messages not in the archive

lore
Share & tools
lore

Jia Yu

author
#0 lore raw

PATCH 1/1 Bond: set {rx|tx}_offload_capa flags

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

---
 lib/librte_pmd_bond/rte_eth_bond_api.c     | 16 ++++++++++++++++
 lib/librte_pmd_bond/rte_eth_bond_pmd.c     |  5 +++++
 lib/librte_pmd_bond/rte_eth_bond_private.h |  2 ++
 3 files changed, 23 insertions(+)
lib/librte_pmd_bond/rte_eth_bond_api.c +16 -0
index 75f5694..bff1ce1 100644
@@ -226,6 +226,8 @@ rte_eth_bond_create(const char *name, uint8_t mode, uint8_t socket_id)
 	internals->link_props_set = 0;
 	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));
@@ -256,6 +258,7 @@ rte_eth_bond_slave_add(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;
 
@@ -301,6 +304,9 @@ rte_eth_bond_slave_add(uint8_t bonded_port_id, uint8_t slave_port_id)
 
 	slave_config_store(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 */
@@ -312,6 +318,10 @@ rte_eth_bond_slave_add(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 */
@@ -327,6 +337,8 @@ rte_eth_bond_slave_add(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++;
@@ -449,6 +461,10 @@ rte_eth_bond_slave_remove(uint8_t bonded_port_id, uint8_t slave_port_id)
 					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;
 
 err_del:
lib/librte_pmd_bond/rte_eth_bond_pmd.c +5 -0
index 147028b..4653184 100644
@@ -721,6 +721,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;
 
@@ -731,6 +733,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
lib/librte_pmd_bond/rte_eth_bond_private.h +2 -0
index 1db6e4d..495726d 100644
@@ -121,6 +121,8 @@ struct bond_dev_private {
 	uint8_t active_slaves[RTE_MAX_ETHPORTS];	/**< Active slave list */
 	uint8_t slaves[RTE_MAX_ETHPORTS];			/**< Slave list */
 
+	uint32_t rx_offload_capa;            /** Bond device Rx offload capability */
+	uint32_t tx_offload_capa;            /** Bond device Tx offload capability */
 	/** Persisted configuration of slaves */
 	struct slave_conf presisted_slaves_conf[RTE_MAX_ETHPORTS];
 
Signature · 1 line
1.9.1

A message that is not in the archive (sent off-list or not yet received): 1415381738-43417-1-git-send-email-jyu-pghWNbHTmq7QT0dZR+AlfA@public.gmane.org

#2 lore raw
Quoted 12 lines

-----Original Message-----
From: dev [mailto:[email protected]] On Behalf Of Jia Yu
Sent: Friday, November 7, 2014 5:36 PM
To: [email protected]
Subject: [dpdk-dev] [PATCH] Bond: set {rx|tx}_offload_capa flags

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

Quoted 6 lines
---
 lib/librte_pmd_bond/rte_eth_bond_api.c     | 16 ++++++++++++++++

.....
--
1.9.1

A message that is not in the archive (sent off-list or not yet received): 345C63BAECC1AD42A2EC8C63AFFC3ADC273E99D2-kPTMFJFq+rF9qrmMLTLiibfspsVTdybXVpNB7YpNyf8@public.gmane.org

#4 lore raw
Quoted 9 lines
Quoted 7 lines

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

Please Declan, could you rebase this patch on HEAD and send a v2?

Thanks

Signature · 1 line
Thomas
#5 lore raw

PATCH v2 1/1 bond: set {rx|tx}_offload_capa flags

In reply to a message not in the archive

v2:
rebased to HEAD

From: Jia Yu <[email protected]>

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

---
 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(-)
lib/librte_pmd_bond/rte_eth_bond_api.c +17 -1
index f146bda..5125b57 100644
@@ -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;
 }
 
lib/librte_pmd_bond/rte_eth_bond_pmd.c +5 -0
index cf2fbab..0d1a36b 100644
@@ -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
lib/librte_pmd_bond/rte_eth_bond_private.h +3 -0
index 6254c84..2096f81 100644
@@ -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;
 };
 
Signature · 1 line
1.7.12.2

A message that is not in the archive (sent off-list or not yet received): 1417123417-26444-1-git-send-email-declan.doherty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org

#7 lore raw

Re: [PATCH v2] bond: set {rx|tx}_offload_capa flags

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

Quoted 142 lines

-----Original Message-----
From: Doherty, Declan
Sent: Thursday, November 27, 2014 9:24 PM
To: [email protected]
Cc: [email protected]; [email protected]; Doherty, Declan
Subject: [PATCH v2] bond: set {rx|tx}_offload_capa flags

v2:
rebased to HEAD

From: Jia Yu <[email protected]>

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

---
 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(-)
lib/librte_pmd_bond/rte_eth_bond_api.c +2 -0
index f146bda..5125b57 100644
@@ -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));
lib/librte_pmd_bond/rte_eth_bond_api.c +4 -0
 	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
lib/librte_pmd_bond/rte_eth_bond_api.c +5 -0
 		 * 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,
lib/librte_pmd_bond/rte_eth_bond_api.c +2 -0
 		 * 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;
 	}
 
lib/librte_pmd_bond/rte_eth_bond_api.c +4 -1
 	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;
+	}
lib/librte_pmd_bond/rte_eth_bond_api.c +0 -0
 	return 0;
 }
lib/librte_pmd_bond/rte_eth_bond_pmd.c +5 -0
index cf2fbab..0d1a36b 100644
@@ -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

lib/librte_pmd_bond/rte_eth_bond_private.h +3 -1
index 6254c84..2096f81 100644
@@ -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

#8 lore raw

Re: [PATCH v2] bond: set {rx|tx}_offload_capa flags

In reply to a message not in the archive

2014-11-27 21:23, Declan Doherty:

Quoted 5 lines

v2:
rebased to HEAD

From: Jia Yu <[email protected]>

Quoted 8 lines

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

Applied

Thanks

Signature · 1 line
Thomas
#9 lore raw

Re: [PATCH v2] bond: set {rx|tx}_offload_capa flags

Thanks Thomas, was just about to send another version :)

Quoted 27 lines

-----Original Message-----
From: Thomas Monjalon [mailto:[email protected]]
Sent: Thursday, November 27, 2014 9:53 PM
To: Doherty, Declan
Cc: [email protected]; [email protected]
Subject: Re: [PATCH v2] bond: set {rx|tx}_offload_capa flags

2014-11-27 21:23, Declan Doherty:

Quoted 5 lines

v2:
rebased to HEAD

From: Jia Yu <[email protected]>

Quoted 8 lines

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

Applied

Thanks
--
Thomas