eal: add assert macro for debug
[dpdk.git] / drivers / net / bonding / rte_eth_bond_8023ad.c
index 97a828e..c0ed44d 100644 (file)
@@ -1,7 +1,7 @@
 /*-
  *   BSD LICENSE
  *
- *   Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
+ *   Copyright(c) 2010-2015 Intel Corporation. All rights reserved.
  *   All rights reserved.
  *
  *   Redistribution and use in source and binary forms, with or without
@@ -512,7 +512,7 @@ mux_machine(struct bond_dev_private *internals, uint8_t slave_id)
 
        if (!ACTOR_STATE(port, SYNCHRONIZATION)) {
                /* attach mux to aggregator */
-               RTE_VERIFY((port->actor_state & (STATE_COLLECTING |
+               RTE_ASSERT((port->actor_state & (STATE_COLLECTING |
                        STATE_DISTRIBUTING)) == 0);
 
                ACTOR_STATE_SET(port, SYNCHRONIZATION);
@@ -708,25 +708,25 @@ link_speed_key(uint16_t speed) {
        uint16_t key_speed;
 
        switch (speed) {
-       case ETH_LINK_SPEED_AUTONEG:
+       case ETH_SPEED_NUM_NONE:
                key_speed = 0x00;
                break;
-       case ETH_LINK_SPEED_10:
+       case ETH_SPEED_NUM_10M:
                key_speed = BOND_LINK_SPEED_KEY_10M;
                break;
-       case ETH_LINK_SPEED_100:
+       case ETH_SPEED_NUM_100M:
                key_speed = BOND_LINK_SPEED_KEY_100M;
                break;
-       case ETH_LINK_SPEED_1000:
+       case ETH_SPEED_NUM_1G:
                key_speed = BOND_LINK_SPEED_KEY_1000M;
                break;
-       case ETH_LINK_SPEED_10G:
+       case ETH_SPEED_NUM_10G:
                key_speed = BOND_LINK_SPEED_KEY_10G;
                break;
-       case ETH_LINK_SPEED_20G:
+       case ETH_SPEED_NUM_20G:
                key_speed = BOND_LINK_SPEED_KEY_20G;
                break;
-       case ETH_LINK_SPEED_40G:
+       case ETH_SPEED_NUM_40G:
                key_speed = BOND_LINK_SPEED_KEY_40G;
                break;
        default:
@@ -813,7 +813,7 @@ bond_mode_8023ad_periodic_cb(void *arg)
                        struct lacpdu_header *lacp;
 
                        lacp = rte_pktmbuf_mtod(lacp_pkt, struct lacpdu_header *);
-                       RTE_VERIFY(lacp->lacpdu.subtype == SLOW_SUBTYPE_LACP);
+                       RTE_ASSERT(lacp->lacpdu.subtype == SLOW_SUBTYPE_LACP);
 
                        /* This is LACP frame so pass it to rx_machine */
                        rx_machine(internals, slave_id, &lacp->lacpdu);
@@ -849,12 +849,16 @@ bond_mode_8023ad_activate_slave(struct rte_eth_dev *bond_dev, uint8_t slave_id)
        };
 
        char mem_name[RTE_ETH_NAME_MAX_LEN];
-       uint8_t socket_id;
+       int socket_id;
        unsigned element_size;
+       uint32_t total_tx_desc;
+       struct bond_tx_queue *bd_tx_q;
+       uint16_t q_id;
 
        /* Given slave mus not be in active list */
-       RTE_VERIFY(find_slave_by_id(internals->active_slaves,
+       RTE_ASSERT(find_slave_by_id(internals->active_slaves,
        internals->active_slave_count, slave_id) == internals->active_slave_count);
+       RTE_SET_USED(internals); /* used only for assert when enabled */
 
        memcpy(&port->actor, &initial, sizeof(struct port_params));
        /* Standard requires that port ID must be grater than 0.
@@ -877,21 +881,24 @@ bond_mode_8023ad_activate_slave(struct rte_eth_dev *bond_dev, uint8_t slave_id)
        if (port->mbuf_pool != NULL)
                return;
 
-       RTE_VERIFY(port->rx_ring == NULL);
-       RTE_VERIFY(port->tx_ring == NULL);
-       socket_id = rte_eth_devices[slave_id].pci_dev->numa_node;
+       RTE_ASSERT(port->rx_ring == NULL);
+       RTE_ASSERT(port->tx_ring == NULL);
+       socket_id = rte_eth_devices[slave_id].data->numa_node;
 
        element_size = sizeof(struct slow_protocol_frame) + sizeof(struct rte_mbuf)
                                + RTE_PKTMBUF_HEADROOM;
 
-        /* How big memory pool should be? If driver will not
-         * free packets quick enough there will be ENOMEM in tx_machine.
-         * For now give 511 pkts * max number of queued TX packets per slave.
-         * Hope it will be enough. */
+       /* The size of the mempool should be at least:
+        * the sum of the TX descriptors + BOND_MODE_8023AX_SLAVE_TX_PKTS */
+       total_tx_desc = BOND_MODE_8023AX_SLAVE_TX_PKTS;
+       for (q_id = 0; q_id < bond_dev->data->nb_tx_queues; q_id++) {
+               bd_tx_q = (struct bond_tx_queue*)bond_dev->data->tx_queues[q_id];
+               total_tx_desc += bd_tx_q->nb_tx_desc;
+       }
+
        snprintf(mem_name, RTE_DIM(mem_name), "slave_port%u_pool", slave_id);
        port->mbuf_pool = rte_mempool_create(mem_name,
-               BOND_MODE_8023AX_SLAVE_TX_PKTS * 512 - 1,
-               element_size,
+               total_tx_desc, element_size,
                RTE_MEMPOOL_CACHE_MAX_SIZE >= 32 ? 32 : RTE_MEMPOOL_CACHE_MAX_SIZE,
                sizeof(struct rte_pktmbuf_pool_private), rte_pktmbuf_pool_init,
                NULL, rte_pktmbuf_init, NULL, socket_id, MEMPOOL_F_NO_SPREAD);
@@ -932,12 +939,12 @@ bond_mode_8023ad_deactivate_slave(struct rte_eth_dev *bond_dev,
        struct port *port;
        uint8_t i;
 
-       /* Given slave mus be in active list */
-       RTE_VERIFY(find_slave_by_id(internals->active_slaves,
+       /* Given slave must be in active list */
+       RTE_ASSERT(find_slave_by_id(internals->active_slaves,
        internals->active_slave_count, slave_id) < internals->active_slave_count);
 
        /* Exclude slave from transmit policy. If this slave is an aggregator
-        * make all aggregated slaves unselected to force sellection logic
+        * make all aggregated slaves unselected to force selection logic
         * to select suitable aggregator for this port. */
        for (i = 0; i < internals->active_slave_count; i++) {
                port = &mode_8023ad_ports[internals->active_slaves[i]];
@@ -1013,6 +1020,7 @@ bond_mode_8023ad_conf_get(struct rte_eth_dev *dev,
        conf->aggregate_wait_timeout_ms = mode4->aggregate_wait_timeout / ms_ticks;
        conf->tx_period_ms = mode4->tx_period_timeout / ms_ticks;
        conf->update_timeout_ms = mode4->update_timeout_us / 1000;
+       conf->rx_marker_period_ms = mode4->rx_marker_timeout / ms_ticks;
 }
 
 void
@@ -1095,7 +1103,7 @@ bond_mode_8023ad_handle_slow_pkt(struct bond_dev_private *internals,
                        goto free_out;
                }
 
-               /* Setup marker timer. Do it in loop in case concurent access. */
+               /* Setup marker timer. Do it in loop in case concurrent access. */
                do {
                        old_marker_timer = port->rx_marker_timer;
                        if (!timer_is_expired(&old_marker_timer)) {