app/testpmd: add command to print representor info
[dpdk.git] / examples / l3fwd / l3fwd_em.c
index 7dab299..2a8ab6a 100644 (file)
@@ -28,7 +28,7 @@
 #include "l3fwd.h"
 #include "l3fwd_event.h"
 
-#if defined(RTE_ARCH_X86) || defined(RTE_MACHINE_CPUFLAG_CRC32)
+#if defined(RTE_ARCH_X86) || defined(__ARM_FEATURE_CRC32)
 #define EM_HASH_CRC 1
 #endif
 
@@ -215,7 +215,7 @@ static rte_xmm_t mask0;
 static rte_xmm_t mask1;
 static rte_xmm_t mask2;
 
-#if defined(RTE_MACHINE_CPUFLAG_SSE2)
+#if defined(__SSE2__)
 static inline xmm_t
 em_mask_key(void *key, xmm_t mask)
 {
@@ -223,7 +223,7 @@ em_mask_key(void *key, xmm_t mask)
 
        return _mm_and_si128(data, mask);
 }
-#elif defined(RTE_MACHINE_CPUFLAG_NEON)
+#elif defined(__ARM_NEON)
 static inline xmm_t
 em_mask_key(void *key, xmm_t mask)
 {
@@ -231,7 +231,7 @@ em_mask_key(void *key, xmm_t mask)
 
        return vandq_s32(data, mask);
 }
-#elif defined(RTE_MACHINE_CPUFLAG_ALTIVEC)
+#elif defined(__ALTIVEC__)
 static inline xmm_t
 em_mask_key(void *key, xmm_t mask)
 {
@@ -243,6 +243,7 @@ em_mask_key(void *key, xmm_t mask)
 #error No vector engine (SSE, NEON, ALTIVEC) available, check your toolchain
 #endif
 
+/* Performing hash-based lookups. 8< */
 static inline uint16_t
 em_get_ipv4_dst_port(void *ipv4_hdr, uint16_t portid, void *lookup_struct)
 {
@@ -264,6 +265,7 @@ em_get_ipv4_dst_port(void *ipv4_hdr, uint16_t portid, void *lookup_struct)
        ret = rte_hash_lookup(ipv4_l3fwd_lookup_struct, (const void *)&key);
        return (ret < 0) ? portid : ipv4_l3fwd_out_if[ret];
 }
+/* >8 End of performing hash-based lookups. */
 
 static inline uint16_t
 em_get_ipv6_dst_port(void *ipv6_hdr, uint16_t portid, void *lookup_struct)
@@ -303,7 +305,7 @@ em_get_ipv6_dst_port(void *ipv6_hdr, uint16_t portid, void *lookup_struct)
        return (ret < 0) ? portid : ipv6_l3fwd_out_if[ret];
 }
 
-#if defined RTE_ARCH_X86 || defined RTE_MACHINE_CPUFLAG_NEON
+#if defined RTE_ARCH_X86 || defined __ARM_NEON
 #if defined(NO_HASH_MULTI_LOOKUP)
 #include "l3fwd_em_sequential.h"
 #else
@@ -579,8 +581,7 @@ em_parse_ptype(struct rte_mbuf *m)
        l3 = (uint8_t *)eth_hdr + sizeof(struct rte_ether_hdr);
        if (ether_type == rte_cpu_to_be_16(RTE_ETHER_TYPE_IPV4)) {
                ipv4_hdr = (struct rte_ipv4_hdr *)l3;
-               hdr_len = (ipv4_hdr->version_ihl & RTE_IPV4_HDR_IHL_MASK) *
-                         RTE_IPV4_IHL_MULTIPLIER;
+               hdr_len = rte_ipv4_hdr_len(ipv4_hdr);
                if (hdr_len == sizeof(struct rte_ipv4_hdr)) {
                        packet_type |= RTE_PTYPE_L3_IPV4;
                        if (ipv4_hdr->next_proto_id == IPPROTO_TCP)
@@ -618,7 +619,7 @@ em_cb_parse_ptype(uint16_t port __rte_unused, uint16_t queue __rte_unused,
 
 /* main processing loop */
 int
-em_main_loop(__attribute__((unused)) void *dummy)
+em_main_loop(__rte_unused void *dummy)
 {
        struct rte_mbuf *pkts_burst[MAX_PKT_BURST];
        unsigned lcore_id;
@@ -630,19 +631,19 @@ em_main_loop(__attribute__((unused)) void *dummy)
        const uint64_t drain_tsc = (rte_get_tsc_hz() + US_PER_S - 1) /
                US_PER_S * BURST_TX_DRAIN_US;
 
-       prev_tsc = 0;
-
        lcore_id = rte_lcore_id();
        qconf = &lcore_conf[lcore_id];
 
-       if (qconf->n_rx_queue == 0) {
+       const uint16_t n_rx_q = qconf->n_rx_queue;
+       const uint16_t n_tx_p = qconf->n_tx_port;
+       if (n_rx_q == 0) {
                RTE_LOG(INFO, L3FWD, "lcore %u has nothing to do\n", lcore_id);
                return 0;
        }
 
        RTE_LOG(INFO, L3FWD, "entering main loop on lcore %u\n", lcore_id);
 
-       for (i = 0; i < qconf->n_rx_queue; i++) {
+       for (i = 0; i < n_rx_q; i++) {
 
                portid = qconf->rx_queue_list[i].port_id;
                queueid = qconf->rx_queue_list[i].queue_id;
@@ -651,9 +652,10 @@ em_main_loop(__attribute__((unused)) void *dummy)
                        lcore_id, portid, queueid);
        }
 
-       while (!force_quit) {
+       cur_tsc = rte_rdtsc();
+       prev_tsc = cur_tsc;
 
-               cur_tsc = rte_rdtsc();
+       while (!force_quit) {
 
                /*
                 * TX burst queue drain
@@ -661,7 +663,7 @@ em_main_loop(__attribute__((unused)) void *dummy)
                diff_tsc = cur_tsc - prev_tsc;
                if (unlikely(diff_tsc > drain_tsc)) {
 
-                       for (i = 0; i < qconf->n_tx_port; ++i) {
+                       for (i = 0; i < n_tx_p; ++i) {
                                portid = qconf->tx_port_id[i];
                                if (qconf->tx_mbufs[portid].len == 0)
                                        continue;
@@ -677,7 +679,7 @@ em_main_loop(__attribute__((unused)) void *dummy)
                /*
                 * Read packet from RX queues
                 */
-               for (i = 0; i < qconf->n_rx_queue; ++i) {
+               for (i = 0; i < n_rx_q; ++i) {
                        portid = qconf->rx_queue_list[i].port_id;
                        queueid = qconf->rx_queue_list[i].queue_id;
                        nb_rx = rte_eth_rx_burst(portid, queueid, pkts_burst,
@@ -685,7 +687,7 @@ em_main_loop(__attribute__((unused)) void *dummy)
                        if (nb_rx == 0)
                                continue;
 
-#if defined RTE_ARCH_X86 || defined RTE_MACHINE_CPUFLAG_NEON
+#if defined RTE_ARCH_X86 || defined __ARM_NEON
                        l3fwd_em_send_packets(nb_rx, pkts_burst,
                                                        portid, qconf);
 #else
@@ -693,6 +695,8 @@ em_main_loop(__attribute__((unused)) void *dummy)
                                                        portid, qconf);
 #endif
                }
+
+               cur_tsc = rte_rdtsc();
        }
 
        return 0;
@@ -723,7 +727,7 @@ em_event_loop_single(struct l3fwd_event_resources *evt_rsrc,
 
                struct rte_mbuf *mbuf = ev.mbuf;
 
-#if defined RTE_ARCH_X86 || defined RTE_MACHINE_CPUFLAG_NEON
+#if defined RTE_ARCH_X86 || defined __ARM_NEON
                mbuf->port = em_get_dst_port(lconf, mbuf, mbuf->port);
                process_packet(mbuf, &mbuf->port);
 #else
@@ -784,7 +788,7 @@ em_event_loop_burst(struct l3fwd_event_resources *evt_rsrc,
                        continue;
                }
 
-#if defined RTE_ARCH_X86 || defined RTE_MACHINE_CPUFLAG_NEON
+#if defined RTE_ARCH_X86 || defined __ARM_NEON
                l3fwd_em_process_events(nb_deq, (struct rte_event **)&events,
                                        lconf);
 #else
@@ -835,7 +839,7 @@ em_event_loop(struct l3fwd_event_resources *evt_rsrc,
 }
 
 int __rte_noinline
-em_event_main_loop_tx_d(__attribute__((unused)) void *dummy)
+em_event_main_loop_tx_d(__rte_unused void *dummy)
 {
        struct l3fwd_event_resources *evt_rsrc =
                                        l3fwd_get_eventdev_rsrc();
@@ -845,7 +849,7 @@ em_event_main_loop_tx_d(__attribute__((unused)) void *dummy)
 }
 
 int __rte_noinline
-em_event_main_loop_tx_d_burst(__attribute__((unused)) void *dummy)
+em_event_main_loop_tx_d_burst(__rte_unused void *dummy)
 {
        struct l3fwd_event_resources *evt_rsrc =
                                        l3fwd_get_eventdev_rsrc();
@@ -855,7 +859,7 @@ em_event_main_loop_tx_d_burst(__attribute__((unused)) void *dummy)
 }
 
 int __rte_noinline
-em_event_main_loop_tx_q(__attribute__((unused)) void *dummy)
+em_event_main_loop_tx_q(__rte_unused void *dummy)
 {
        struct l3fwd_event_resources *evt_rsrc =
                                        l3fwd_get_eventdev_rsrc();
@@ -865,7 +869,7 @@ em_event_main_loop_tx_q(__attribute__((unused)) void *dummy)
 }
 
 int __rte_noinline
-em_event_main_loop_tx_q_burst(__attribute__((unused)) void *dummy)
+em_event_main_loop_tx_q_burst(__rte_unused void *dummy)
 {
        struct l3fwd_event_resources *evt_rsrc =
                                        l3fwd_get_eventdev_rsrc();
@@ -874,9 +878,7 @@ em_event_main_loop_tx_q_burst(__attribute__((unused)) void *dummy)
        return 0;
 }
 
-/*
- * Initialize exact match (hash) parameters.
- */
+/* Initialize exact match (hash) parameters. 8< */
 void
 setup_hash(const int socketid)
 {
@@ -951,6 +953,7 @@ setup_hash(const int socketid)
                }
        }
 }
+/* >8 End of initialization of hash parameters. */
 
 /* Return ipv4/ipv6 em fwd lookup struct. */
 void *