- Turn off mbuf pool caching to avoid mbufs lingering in pool caches.
  At most, we transmit one LACPDU per second, per port.
- Fix calculation of ring sizes, taking into account that a ring of
  size N holds up to N-1 items.

Signed-off-by: Robert Sanford <rsanf...@akamai.com>
---
 drivers/net/bonding/rte_eth_bond_8023ad.c | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/drivers/net/bonding/rte_eth_bond_8023ad.c 
b/drivers/net/bonding/rte_eth_bond_8023ad.c
index 43231bc..83d3938 100644
--- a/drivers/net/bonding/rte_eth_bond_8023ad.c
+++ b/drivers/net/bonding/rte_eth_bond_8023ad.c
@@ -1101,9 +1101,7 @@ bond_mode_8023ad_activate_slave(struct rte_eth_dev 
*bond_dev,
        }
 
        snprintf(mem_name, RTE_DIM(mem_name), "slave_port%u_pool", slave_id);
-       port->mbuf_pool = rte_pktmbuf_pool_create(mem_name, total_tx_desc,
-               RTE_MEMPOOL_CACHE_MAX_SIZE >= 32 ?
-                       32 : RTE_MEMPOOL_CACHE_MAX_SIZE,
+       port->mbuf_pool = rte_pktmbuf_pool_create(mem_name, total_tx_desc, 0,
                0, element_size, socket_id);
 
        /* Any memory allocation failure in initialization is critical because
@@ -1113,19 +1111,23 @@ bond_mode_8023ad_activate_slave(struct rte_eth_dev 
*bond_dev,
                        slave_id, mem_name, rte_strerror(rte_errno));
        }
 
+       /* Add one extra because ring reserves one. */
        snprintf(mem_name, RTE_DIM(mem_name), "slave_%u_rx", slave_id);
        port->rx_ring = rte_ring_create(mem_name,
-                       rte_align32pow2(BOND_MODE_8023AX_SLAVE_RX_PKTS), 
socket_id, 0);
+                       rte_align32pow2(BOND_MODE_8023AX_SLAVE_RX_PKTS + 1),
+                       socket_id, 0);
 
        if (port->rx_ring == NULL) {
                rte_panic("Slave %u: Failed to create rx ring '%s': %s\n", 
slave_id,
                        mem_name, rte_strerror(rte_errno));
        }
 
-       /* TX ring is at least one pkt longer to make room for marker packet. */
+       /* TX ring is at least one pkt longer to make room for marker packet.
+        * Add one extra because ring reserves one. */
        snprintf(mem_name, RTE_DIM(mem_name), "slave_%u_tx", slave_id);
        port->tx_ring = rte_ring_create(mem_name,
-                       rte_align32pow2(BOND_MODE_8023AX_SLAVE_TX_PKTS + 1), 
socket_id, 0);
+                       rte_align32pow2(BOND_MODE_8023AX_SLAVE_TX_PKTS + 2),
+                       socket_id, 0);
 
        if (port->tx_ring == NULL) {
                rte_panic("Slave %u: Failed to create tx ring '%s': %s\n", 
slave_id,
-- 
2.7.4

Reply via email to