X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=examples%2Fl3fwd%2Fl3fwd_em.c;h=2a8ab6aab51e9c0ba8d8d6ac5f5d775687df6698;hb=c4045f34557a5ce3de2b14e997fe41b122595e29;hp=7dab29952637eb96ef6f83f15645c89636df0e81;hpb=ef5baf3486e03004b6d807f731f0d9936504511d;p=dpdk.git diff --git a/examples/l3fwd/l3fwd_em.c b/examples/l3fwd/l3fwd_em.c index 7dab299526..2a8ab6aab5 100644 --- a/examples/l3fwd/l3fwd_em.c +++ b/examples/l3fwd/l3fwd_em.c @@ -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 *