examples/eventdev: fix 32-bit coremask
[dpdk.git] / examples / eventdev_pipeline / main.c
index 92e08bc..4ac5821 100644 (file)
@@ -10,6 +10,8 @@
 
 #include "pipeline_common.h"
 
+struct fastpath_data *fdata;
+
 struct config_data cdata = {
        .num_packets = (1L << 25), /* do ~32M packets */
        .num_fids = 512,
@@ -79,7 +81,7 @@ parse_coremask(const char *coremask)
                val = xdigit2val(c);
                for (j = 0; j < BITS_HEX && idx < MAX_NUM_CORE; j++, idx++) {
                        if ((1 << j) & val) {
-                               mask |= (1UL << idx);
+                               mask |= (1ULL << idx);
                                count++;
                        }
                }
@@ -230,10 +232,10 @@ parse_app_args(int argc, char **argv)
                usage();
 
        for (i = 0; i < MAX_NUM_CORE; i++) {
-               fdata->rx_core[i] = !!(rx_lcore_mask & (1UL << i));
-               fdata->tx_core[i] = !!(tx_lcore_mask & (1UL << i));
-               fdata->sched_core[i] = !!(sched_lcore_mask & (1UL << i));
-               fdata->worker_core[i] = !!(worker_lcore_mask & (1UL << i));
+               fdata->rx_core[i] = !!(rx_lcore_mask & (1ULL << i));
+               fdata->tx_core[i] = !!(tx_lcore_mask & (1ULL << i));
+               fdata->sched_core[i] = !!(sched_lcore_mask & (1ULL << i));
+               fdata->worker_core[i] = !!(worker_lcore_mask & (1ULL << i));
 
                if (fdata->worker_core[i])
                        cdata.num_workers++;
@@ -242,124 +244,6 @@ parse_app_args(int argc, char **argv)
        }
 }
 
-/*
- * Initializes a given port using global settings and with the RX buffers
- * coming from the mbuf_pool passed as a parameter.
- */
-static inline int
-port_init(uint8_t port, struct rte_mempool *mbuf_pool)
-{
-       struct rte_eth_rxconf rx_conf;
-       static const struct rte_eth_conf port_conf_default = {
-               .rxmode = {
-                       .mq_mode = ETH_MQ_RX_RSS,
-                       .max_rx_pkt_len = ETHER_MAX_LEN,
-               },
-               .rx_adv_conf = {
-                       .rss_conf = {
-                               .rss_hf = ETH_RSS_IP |
-                                         ETH_RSS_TCP |
-                                         ETH_RSS_UDP,
-                       }
-               }
-       };
-       const uint16_t rx_rings = 1, tx_rings = 1;
-       const uint16_t rx_ring_size = 512, tx_ring_size = 512;
-       struct rte_eth_conf port_conf = port_conf_default;
-       int retval;
-       uint16_t q;
-       struct rte_eth_dev_info dev_info;
-       struct rte_eth_txconf txconf;
-
-       if (!rte_eth_dev_is_valid_port(port))
-               return -1;
-
-       rte_eth_dev_info_get(port, &dev_info);
-       if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_MBUF_FAST_FREE)
-               port_conf.txmode.offloads |=
-                       DEV_TX_OFFLOAD_MBUF_FAST_FREE;
-       rx_conf = dev_info.default_rxconf;
-       rx_conf.offloads = port_conf.rxmode.offloads;
-
-       port_conf.rx_adv_conf.rss_conf.rss_hf &=
-               dev_info.flow_type_rss_offloads;
-       if (port_conf.rx_adv_conf.rss_conf.rss_hf !=
-                       port_conf_default.rx_adv_conf.rss_conf.rss_hf) {
-               printf("Port %u modified RSS hash function based on hardware support,"
-                       "requested:%#"PRIx64" configured:%#"PRIx64"\n",
-                       port,
-                       port_conf_default.rx_adv_conf.rss_conf.rss_hf,
-                       port_conf.rx_adv_conf.rss_conf.rss_hf);
-       }
-
-       /* Configure the Ethernet device. */
-       retval = rte_eth_dev_configure(port, rx_rings, tx_rings, &port_conf);
-       if (retval != 0)
-               return retval;
-
-       /* Allocate and set up 1 RX queue per Ethernet port. */
-       for (q = 0; q < rx_rings; q++) {
-               retval = rte_eth_rx_queue_setup(port, q, rx_ring_size,
-                               rte_eth_dev_socket_id(port), &rx_conf,
-                               mbuf_pool);
-               if (retval < 0)
-                       return retval;
-       }
-
-       txconf = dev_info.default_txconf;
-       txconf.offloads = port_conf_default.txmode.offloads;
-       /* Allocate and set up 1 TX queue per Ethernet port. */
-       for (q = 0; q < tx_rings; q++) {
-               retval = rte_eth_tx_queue_setup(port, q, tx_ring_size,
-                               rte_eth_dev_socket_id(port), &txconf);
-               if (retval < 0)
-                       return retval;
-       }
-
-       /* Start the Ethernet port. */
-       retval = rte_eth_dev_start(port);
-       if (retval < 0)
-               return retval;
-
-       /* Display the port MAC address. */
-       struct ether_addr addr;
-       rte_eth_macaddr_get(port, &addr);
-       printf("Port %u MAC: %02" PRIx8 " %02" PRIx8 " %02" PRIx8
-                          " %02" PRIx8 " %02" PRIx8 " %02" PRIx8 "\n",
-                       (unsigned int)port,
-                       addr.addr_bytes[0], addr.addr_bytes[1],
-                       addr.addr_bytes[2], addr.addr_bytes[3],
-                       addr.addr_bytes[4], addr.addr_bytes[5]);
-
-       /* Enable RX in promiscuous mode for the Ethernet device. */
-       rte_eth_promiscuous_enable(port);
-
-       return 0;
-}
-
-static int
-init_ports(uint16_t num_ports)
-{
-       uint16_t portid;
-
-       if (!cdata.num_mbuf)
-               cdata.num_mbuf = 16384 * num_ports;
-
-       struct rte_mempool *mp = rte_pktmbuf_pool_create("packet_pool",
-                       /* mbufs */ cdata.num_mbuf,
-                       /* cache_size */ 512,
-                       /* priv_size*/ 0,
-                       /* data_room_size */ RTE_MBUF_DEFAULT_BUF_SIZE,
-                       rte_socket_id());
-
-       RTE_ETH_FOREACH_DEV(portid)
-               if (port_init(portid, mp) != 0)
-                       rte_exit(EXIT_FAILURE, "Cannot init port %"PRIu16 "\n",
-                                       portid);
-
-       return 0;
-}
-
 static void
 do_capability_setup(uint8_t eventdev_id)
 {
@@ -417,11 +301,6 @@ signal_handler(int signum)
 
                rte_eal_mp_wait_lcore();
 
-               RTE_ETH_FOREACH_DEV(portid) {
-                       rte_eth_dev_close(portid);
-               }
-
-               rte_event_dev_close(0);
        }
        if (signum == SIGTSTP)
                rte_event_dev_dump(0, stdout);
@@ -440,6 +319,7 @@ main(int argc, char **argv)
 {
        struct worker_data *worker_data;
        uint16_t num_ports;
+       uint16_t portid;
        int lcore_id;
        int err;
 
@@ -504,9 +384,16 @@ main(int argc, char **argv)
        if (dev_id < 0)
                rte_exit(EXIT_FAILURE, "Error setting up eventdev\n");
 
-       init_ports(num_ports);
        fdata->cap.adptr_setup(num_ports);
 
+       /* Start the Ethernet port. */
+       RTE_ETH_FOREACH_DEV(portid) {
+               err = rte_eth_dev_start(portid);
+               if (err < 0)
+                       rte_exit(EXIT_FAILURE, "Error starting ethdev %d\n",
+                                       portid);
+       }
+
        int worker_idx = 0;
        RTE_LCORE_FOREACH_SLAVE(lcore_id) {
                if (lcore_id >= MAX_NUM_CORE)
@@ -576,5 +463,14 @@ main(int argc, char **argv)
 
        }
 
+       RTE_ETH_FOREACH_DEV(portid) {
+               rte_eth_dev_close(portid);
+       }
+
+       rte_event_dev_stop(0);
+       rte_event_dev_close(0);
+
+       rte_eal_cleanup();
+
        return 0;
 }