X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fenic%2Fenic_rxtx_vec_avx2.c;h=600efff2709d5f45b63908f66bbe51d984662563;hb=9fda31c3229ca6e036cae80392578ed6e5a51119;hp=517d4092fadeaecb659bce8ecc398311b3cc90db;hpb=bbd8ecc05434a010ea5dfc5ad7b17f5927b63f06;p=dpdk.git diff --git a/drivers/net/enic/enic_rxtx_vec_avx2.c b/drivers/net/enic/enic_rxtx_vec_avx2.c index 517d4092fa..600efff270 100644 --- a/drivers/net/enic/enic_rxtx_vec_avx2.c +++ b/drivers/net/enic/enic_rxtx_vec_avx2.c @@ -4,7 +4,8 @@ */ #include -#include +#include +#include #include "enic_compat.h" #include "rq_enet_desc.h" @@ -166,21 +167,21 @@ enic_noscatter_vec_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, 0x80, 0x80, 11, 10, 0x80, 0x80, 11, 10, 0x80, 0x80, 11, 10); - /* PKT_RX_RSS_HASH is 1<<1 so fits in 8-bit integer */ + /* RTE_MBUF_F_RX_RSS_HASH is 1<<1 so fits in 8-bit integer */ const __m256i rss_shuffle = _mm256_set_epi8(/* second 128 bits */ - PKT_RX_RSS_HASH, PKT_RX_RSS_HASH, PKT_RX_RSS_HASH, - PKT_RX_RSS_HASH, PKT_RX_RSS_HASH, PKT_RX_RSS_HASH, - PKT_RX_RSS_HASH, PKT_RX_RSS_HASH, PKT_RX_RSS_HASH, - PKT_RX_RSS_HASH, PKT_RX_RSS_HASH, PKT_RX_RSS_HASH, - PKT_RX_RSS_HASH, PKT_RX_RSS_HASH, PKT_RX_RSS_HASH, + RTE_MBUF_F_RX_RSS_HASH, RTE_MBUF_F_RX_RSS_HASH, RTE_MBUF_F_RX_RSS_HASH, + RTE_MBUF_F_RX_RSS_HASH, RTE_MBUF_F_RX_RSS_HASH, RTE_MBUF_F_RX_RSS_HASH, + RTE_MBUF_F_RX_RSS_HASH, RTE_MBUF_F_RX_RSS_HASH, RTE_MBUF_F_RX_RSS_HASH, + RTE_MBUF_F_RX_RSS_HASH, RTE_MBUF_F_RX_RSS_HASH, RTE_MBUF_F_RX_RSS_HASH, + RTE_MBUF_F_RX_RSS_HASH, RTE_MBUF_F_RX_RSS_HASH, RTE_MBUF_F_RX_RSS_HASH, 0, /* rss_types = 0 */ /* first 128 bits */ - PKT_RX_RSS_HASH, PKT_RX_RSS_HASH, PKT_RX_RSS_HASH, - PKT_RX_RSS_HASH, PKT_RX_RSS_HASH, PKT_RX_RSS_HASH, - PKT_RX_RSS_HASH, PKT_RX_RSS_HASH, PKT_RX_RSS_HASH, - PKT_RX_RSS_HASH, PKT_RX_RSS_HASH, PKT_RX_RSS_HASH, - PKT_RX_RSS_HASH, PKT_RX_RSS_HASH, PKT_RX_RSS_HASH, + RTE_MBUF_F_RX_RSS_HASH, RTE_MBUF_F_RX_RSS_HASH, RTE_MBUF_F_RX_RSS_HASH, + RTE_MBUF_F_RX_RSS_HASH, RTE_MBUF_F_RX_RSS_HASH, RTE_MBUF_F_RX_RSS_HASH, + RTE_MBUF_F_RX_RSS_HASH, RTE_MBUF_F_RX_RSS_HASH, RTE_MBUF_F_RX_RSS_HASH, + RTE_MBUF_F_RX_RSS_HASH, RTE_MBUF_F_RX_RSS_HASH, RTE_MBUF_F_RX_RSS_HASH, + RTE_MBUF_F_RX_RSS_HASH, RTE_MBUF_F_RX_RSS_HASH, RTE_MBUF_F_RX_RSS_HASH, 0 /* rss_types = 0 */); /* * VLAN offload flags. @@ -190,8 +191,8 @@ enic_noscatter_vec_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, */ const __m256i vlan_shuffle = _mm256_set_epi32(0, 0, 0, 0, - PKT_RX_VLAN | PKT_RX_VLAN_STRIPPED, 0, - PKT_RX_VLAN | PKT_RX_VLAN_STRIPPED, PKT_RX_VLAN); + RTE_MBUF_F_RX_VLAN | RTE_MBUF_F_RX_VLAN_STRIPPED, 0, + RTE_MBUF_F_RX_VLAN | RTE_MBUF_F_RX_VLAN_STRIPPED, RTE_MBUF_F_RX_VLAN); /* Use the same shuffle index as vlan_shuffle */ const __m256i vlan_ptype_shuffle = _mm256_set_epi32(0, 0, 0, 0, @@ -210,39 +211,39 @@ enic_noscatter_vec_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, const __m256i csum_shuffle = _mm256_set_epi8(/* second 128 bits */ /* 1111 ip4+ip4_ok+l4+l4_ok */ - ((PKT_RX_IP_CKSUM_GOOD | PKT_RX_L4_CKSUM_GOOD) >> 1), + ((RTE_MBUF_F_RX_IP_CKSUM_GOOD | RTE_MBUF_F_RX_L4_CKSUM_GOOD) >> 1), /* 1110 ip4_ok+ip4+l4+!l4_ok */ - ((PKT_RX_IP_CKSUM_GOOD | PKT_RX_L4_CKSUM_BAD) >> 1), - (PKT_RX_IP_CKSUM_GOOD >> 1), /* 1101 ip4+ip4_ok */ - (PKT_RX_IP_CKSUM_GOOD >> 1), /* 1100 ip4_ok+ip4 */ - (PKT_RX_L4_CKSUM_GOOD >> 1), /* 1011 l4+l4_ok */ - (PKT_RX_L4_CKSUM_BAD >> 1), /* 1010 l4+!l4_ok */ + ((RTE_MBUF_F_RX_IP_CKSUM_GOOD | RTE_MBUF_F_RX_L4_CKSUM_BAD) >> 1), + (RTE_MBUF_F_RX_IP_CKSUM_GOOD >> 1), /* 1101 ip4+ip4_ok */ + (RTE_MBUF_F_RX_IP_CKSUM_GOOD >> 1), /* 1100 ip4_ok+ip4 */ + (RTE_MBUF_F_RX_L4_CKSUM_GOOD >> 1), /* 1011 l4+l4_ok */ + (RTE_MBUF_F_RX_L4_CKSUM_BAD >> 1), /* 1010 l4+!l4_ok */ 0, /* 1001 */ 0, /* 1000 */ /* 0111 !ip4_ok+ip4+l4+l4_ok */ - ((PKT_RX_IP_CKSUM_BAD | PKT_RX_L4_CKSUM_GOOD) >> 1), + ((RTE_MBUF_F_RX_IP_CKSUM_BAD | RTE_MBUF_F_RX_L4_CKSUM_GOOD) >> 1), /* 0110 !ip4_ok+ip4+l4+!l4_ok */ - ((PKT_RX_IP_CKSUM_BAD | PKT_RX_L4_CKSUM_BAD) >> 1), - (PKT_RX_IP_CKSUM_BAD >> 1), /* 0101 !ip4_ok+ip4 */ - (PKT_RX_IP_CKSUM_BAD >> 1), /* 0100 !ip4_ok+ip4 */ - (PKT_RX_L4_CKSUM_GOOD >> 1), /* 0011 l4+l4_ok */ - (PKT_RX_L4_CKSUM_BAD >> 1), /* 0010 l4+!l4_ok */ + ((RTE_MBUF_F_RX_IP_CKSUM_BAD | RTE_MBUF_F_RX_L4_CKSUM_BAD) >> 1), + (RTE_MBUF_F_RX_IP_CKSUM_BAD >> 1), /* 0101 !ip4_ok+ip4 */ + (RTE_MBUF_F_RX_IP_CKSUM_BAD >> 1), /* 0100 !ip4_ok+ip4 */ + (RTE_MBUF_F_RX_L4_CKSUM_GOOD >> 1), /* 0011 l4+l4_ok */ + (RTE_MBUF_F_RX_L4_CKSUM_BAD >> 1), /* 0010 l4+!l4_ok */ 0, /* 0001 */ 0, /* 0000 */ /* first 128 bits */ - ((PKT_RX_IP_CKSUM_GOOD | PKT_RX_L4_CKSUM_GOOD) >> 1), - ((PKT_RX_IP_CKSUM_GOOD | PKT_RX_L4_CKSUM_BAD) >> 1), - (PKT_RX_IP_CKSUM_GOOD >> 1), - (PKT_RX_IP_CKSUM_GOOD >> 1), - (PKT_RX_L4_CKSUM_GOOD >> 1), - (PKT_RX_L4_CKSUM_BAD >> 1), + ((RTE_MBUF_F_RX_IP_CKSUM_GOOD | RTE_MBUF_F_RX_L4_CKSUM_GOOD) >> 1), + ((RTE_MBUF_F_RX_IP_CKSUM_GOOD | RTE_MBUF_F_RX_L4_CKSUM_BAD) >> 1), + (RTE_MBUF_F_RX_IP_CKSUM_GOOD >> 1), + (RTE_MBUF_F_RX_IP_CKSUM_GOOD >> 1), + (RTE_MBUF_F_RX_L4_CKSUM_GOOD >> 1), + (RTE_MBUF_F_RX_L4_CKSUM_BAD >> 1), 0, 0, - ((PKT_RX_IP_CKSUM_BAD | PKT_RX_L4_CKSUM_GOOD) >> 1), - ((PKT_RX_IP_CKSUM_BAD | PKT_RX_L4_CKSUM_BAD) >> 1), - (PKT_RX_IP_CKSUM_BAD >> 1), - (PKT_RX_IP_CKSUM_BAD >> 1), - (PKT_RX_L4_CKSUM_GOOD >> 1), - (PKT_RX_L4_CKSUM_BAD >> 1), + ((RTE_MBUF_F_RX_IP_CKSUM_BAD | RTE_MBUF_F_RX_L4_CKSUM_GOOD) >> 1), + ((RTE_MBUF_F_RX_IP_CKSUM_BAD | RTE_MBUF_F_RX_L4_CKSUM_BAD) >> 1), + (RTE_MBUF_F_RX_IP_CKSUM_BAD >> 1), + (RTE_MBUF_F_RX_IP_CKSUM_BAD >> 1), + (RTE_MBUF_F_RX_L4_CKSUM_GOOD >> 1), + (RTE_MBUF_F_RX_L4_CKSUM_BAD >> 1), 0, 0); /* * Non-fragment PTYPEs. @@ -470,7 +471,7 @@ enic_noscatter_vec_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, break; /* - * Compute PKT_RX_RSS_HASH. + * Compute RTE_MBUF_F_RX_RSS_HASH. * Use 2 shifts and 1 shuffle for 8 desc: 0.375 inst/desc * RSS types in byte 0, 4, 8, 12, 16, 20, 24, 28 * Everything else is zero. @@ -478,7 +479,7 @@ enic_noscatter_vec_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, __m256i rss_types = _mm256_srli_epi32(_mm256_slli_epi32(flags0_7, 10), 28); /* - * RSS flags (PKT_RX_RSS_HASH) are in + * RSS flags (RTE_MBUF_F_RX_RSS_HASH) are in * byte 0, 4, 8, 12, 16, 20, 24, 28 * Everything else is zero. */ @@ -556,7 +557,7 @@ enic_noscatter_vec_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, vlan0_7 = _mm256_sub_epi32(zero4, vlan0_7); /* - * Compute PKT_RX_VLAN and PKT_RX_VLAN_STRIPPED. + * Compute RTE_MBUF_F_RX_VLAN and RTE_MBUF_F_RX_VLAN_STRIPPED. * Use 3 shifts, 1 or, 1 shuffle for 8 desc: 0.625 inst/desc * VLAN offload flags in byte 0, 4, 8, 12, 16, 20, 24, 28 * Everything else is zero. @@ -806,25 +807,21 @@ enic_noscatter_vec_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, } bool -enic_use_vector_rx_handler(struct enic *enic) +enic_use_vector_rx_handler(struct rte_eth_dev *eth_dev) { - struct rte_eth_dev *eth_dev; - struct rte_fdir_conf *fconf; + struct enic *enic = pmd_priv(eth_dev); - eth_dev = enic->rte_dev; /* User needs to request for the avx2 handler */ if (!enic->enable_avx2_rx) return false; /* Do not support scatter Rx */ if (!(enic->rq_count > 0 && enic->rq[0].data_queue_enable == 0)) return false; - /* Do not support fdir/flow */ - fconf = ð_dev->data->dev_conf.fdir_conf; - if (fconf->mode != RTE_FDIR_MODE_NONE) - return false; - if (rte_cpu_get_flag_enabled(RTE_CPUFLAG_AVX2)) { + if (rte_cpu_get_flag_enabled(RTE_CPUFLAG_AVX2) && + rte_vect_get_max_simd_bitwidth() >= RTE_VECT_SIMD_256) { ENICPMD_LOG(DEBUG, " use the non-scatter avx2 Rx handler"); eth_dev->rx_pkt_burst = &enic_noscatter_vec_recv_pkts; + enic->use_noscatter_vec_rx_handler = 1; return true; } return false;