New upstream version 18.08
[deb_dpdk.git] / examples / eventdev_pipeline / main.c
index 2422c18..700bc69 100644 (file)
@@ -267,7 +267,6 @@ port_init(uint8_t port, struct rte_mempool *mbuf_pool)
                .rxmode = {
                        .mq_mode = ETH_MQ_RX_RSS,
                        .max_rx_pkt_len = ETHER_MAX_LEN,
-                       .ignore_offload_bitfield = 1,
                },
                .rx_adv_conf = {
                        .rss_conf = {
@@ -285,7 +284,7 @@ port_init(uint8_t port, struct rte_mempool *mbuf_pool)
        struct rte_eth_dev_info dev_info;
        struct rte_eth_txconf txconf;
 
-       if (port >= rte_eth_dev_count())
+       if (!rte_eth_dev_is_valid_port(port))
                return -1;
 
        rte_eth_dev_info_get(port, &dev_info);
@@ -293,6 +292,17 @@ port_init(uint8_t port, struct rte_mempool *mbuf_pool)
                port_conf.txmode.offloads |=
                        DEV_TX_OFFLOAD_MBUF_FAST_FREE;
 
+       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)
@@ -307,7 +317,6 @@ port_init(uint8_t port, struct rte_mempool *mbuf_pool)
        }
 
        txconf = dev_info.default_txconf;
-       txconf.txq_flags = ETH_TXQ_FLAGS_IGNORE;
        txconf.offloads = port_conf_default.txmode.offloads;
        /* Allocate and set up 1 TX queue per Ethernet port. */
        for (q = 0; q < tx_rings; q++) {
@@ -339,10 +348,9 @@ port_init(uint8_t port, struct rte_mempool *mbuf_pool)
 }
 
 static int
-init_ports(unsigned int num_ports)
+init_ports(uint16_t num_ports)
 {
-       uint8_t portid;
-       unsigned int i;
+       uint16_t portid, i;
 
        if (!cdata.num_mbuf)
                cdata.num_mbuf = 16384 * num_ports;
@@ -354,12 +362,12 @@ init_ports(unsigned int num_ports)
                        /* data_room_size */ RTE_MBUF_DEFAULT_BUF_SIZE,
                        rte_socket_id());
 
-       for (portid = 0; portid < num_ports; portid++)
+       RTE_ETH_FOREACH_DEV(portid)
                if (port_init(portid, mp) != 0)
-                       rte_exit(EXIT_FAILURE, "Cannot init port %"PRIu8 "\n",
+                       rte_exit(EXIT_FAILURE, "Cannot init port %"PRIu16 "\n",
                                        portid);
 
-       for (i = 0; i < num_ports; i++) {
+       RTE_ETH_FOREACH_DEV(i) {
                void *userdata = (void *)(uintptr_t) i;
                fdata->tx_buf[i] =
                        rte_malloc(NULL, RTE_ETH_TX_BUFFER_SIZE(32), 0);
@@ -375,13 +383,13 @@ init_ports(unsigned int num_ports)
 }
 
 static void
-do_capability_setup(uint16_t nb_ethdev, uint8_t eventdev_id)
+do_capability_setup(uint8_t eventdev_id)
 {
-       int i;
+       uint16_t i;
        uint8_t mt_unsafe = 0;
        uint8_t burst = 0;
 
-       for (i = 0; i < nb_ethdev; i++) {
+       RTE_ETH_FOREACH_DEV(i) {
                struct rte_eth_dev_info dev_info;
                memset(&dev_info, 0, sizeof(struct rte_eth_dev_info));
 
@@ -430,7 +438,7 @@ int
 main(int argc, char **argv)
 {
        struct worker_data *worker_data;
-       unsigned int num_ports;
+       uint16_t num_ports;
        int lcore_id;
        int err;
 
@@ -452,7 +460,7 @@ main(int argc, char **argv)
        /* Parse cli options*/
        parse_app_args(argc, argv);
 
-       num_ports = rte_eth_dev_count();
+       num_ports = rte_eth_dev_count_avail();
        if (num_ports == 0)
                rte_panic("No ethernet ports found\n");
 
@@ -483,7 +491,7 @@ main(int argc, char **argv)
                fprintf(stderr, "Warning: More than one eventdev, using idx 0");
 
 
-       do_capability_setup(num_ports, 0);
+       do_capability_setup(0);
        fdata->cap.check_opt();
 
        worker_data = rte_calloc(0, cdata.num_workers,