mbuf: remove the rte_pktmbuf structure
[dpdk.git] / lib / librte_pmd_ixgbe / ixgbe_rxtx_vec.c
index 09e19a3..bafb215 100644 (file)
 #include "ixgbe_ethdev.h"
 #include "ixgbe_rxtx.h"
 
-#include <nmmintrin.h>
+#include <tmmintrin.h>
 
 #ifndef __INTEL_COMPILER
 #pragma GCC diagnostic ignored "-Wcast-qual"
 #endif
 
-static struct rte_mbuf mb_def = {
-
-       .ol_flags = 0,
-       {
-               .pkt = {
-                       .data_len = 0,
-                       .pkt_len = 0,
-
-                       .vlan_macip = {
-                               .data = 0,
-                       },
-                       .hash = {
-                               .rss = 0,
-                       },
-
-                       .nb_segs = 1,
-                       .in_port = 0,
-
-                       .next = NULL,
-                       .data = NULL,
-               },
-       },
-};
-
 static inline void
 ixgbe_rxq_rearm(struct igb_rx_queue *rxq)
 {
+       static const struct rte_mbuf mb_def = {
+               .nb_segs = 1,
+       };
        int i;
        uint16_t rx_id;
        volatile union ixgbe_adv_rx_desc *rxdp;
@@ -87,7 +66,7 @@ ixgbe_rxq_rearm(struct igb_rx_queue *rxq)
 
        rxdp = rxq->rx_ring + rxq->rxrearm_start;
 
-       def_low = _mm_load_si128((__m128i *)&(mb_def.pkt));
+       def_low = _mm_load_si128((__m128i *)&(mb_def.next));
 
        /* Initialize the mbufs in vector, process 2 mbufs in one loop */
        for (i = 0; i < RTE_IXGBE_RXQ_REARM_THRESH; i += 2, rxep += 2) {
@@ -118,8 +97,8 @@ ixgbe_rxq_rearm(struct igb_rx_queue *rxq)
                _mm_store_si128((__m128i *)&rxdp++->read, dma_addr1);
 
                /* flush mbuf with pkt template */
-               _mm_store_si128((__m128i *)&mb0->pkt, vaddr0);
-               _mm_store_si128((__m128i *)&mb1->pkt, vaddr1);
+               _mm_store_si128((__m128i *)&mb0->next, vaddr0);
+               _mm_store_si128((__m128i *)&mb1->next, vaddr1);
 
                /* update refcnt per pkt */
                rte_mbuf_refcnt_set(mb0, 1);
@@ -277,7 +256,7 @@ ixgbe_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,
                descs[3] = _mm_loadu_si128((__m128i *)(rxdp + 3));
 
                /* B.2 copy 2 mbuf point into rx_pkts  */
-               _mm_store_si128((__m128i *)&rx_pkts[pos], mbp1);
+               _mm_storeu_si128((__m128i *)&rx_pkts[pos], mbp1);
 
                /* B.1 load 1 mbuf point */
                mbp2 = _mm_loadu_si128((__m128i *)&sw_ring[pos+2]);
@@ -288,7 +267,7 @@ ixgbe_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,
                descs[0] = _mm_loadu_si128((__m128i *)(rxdp));
 
                /* B.2 copy 2 mbuf point into rx_pkts  */
-               _mm_store_si128((__m128i *)&rx_pkts[pos+2], mbp2);
+               _mm_storeu_si128((__m128i *)&rx_pkts[pos+2], mbp2);
 
                /* avoid compiler reorder optimization */
                rte_compiler_barrier();
@@ -318,9 +297,9 @@ ixgbe_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,
                staterr = _mm_unpacklo_epi32(sterr_tmp1, sterr_tmp2);
 
                /* D.3 copy final 3,4 data to rx_pkts */
-               _mm_storeu_si128((__m128i *)&(rx_pkts[pos+3]->pkt.data_len),
+               _mm_storeu_si128((__m128i *)&(rx_pkts[pos+3]->data_len),
                                pkt_mb4);
-               _mm_storeu_si128((__m128i *)&(rx_pkts[pos+2]->pkt.data_len),
+               _mm_storeu_si128((__m128i *)&(rx_pkts[pos+2]->data_len),
                                pkt_mb3);
 
                /* D.2 pkt 1,2 set in_port/nb_seg and remove crc */
@@ -332,13 +311,13 @@ ixgbe_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,
                staterr = _mm_packs_epi32(staterr, zero);
 
                /* D.3 copy final 1,2 data to rx_pkts */
-               _mm_storeu_si128((__m128i *)&(rx_pkts[pos+1]->pkt.data_len),
+               _mm_storeu_si128((__m128i *)&(rx_pkts[pos+1]->data_len),
                                pkt_mb2);
-               _mm_storeu_si128((__m128i *)&(rx_pkts[pos]->pkt.data_len),
+               _mm_storeu_si128((__m128i *)&(rx_pkts[pos]->data_len),
                                pkt_mb1);
 
                /* C.4 calc avaialbe number of desc */
-               var = _mm_popcnt_u64(_mm_cvtsi128_si64(staterr));
+               var = __builtin_popcountll(_mm_cvtsi128_si64(staterr));
                nb_pkts_recd += var;
                if (likely(var != RTE_IXGBE_DESCS_PER_LOOP))
                        break;
@@ -361,7 +340,7 @@ vtx1(volatile union ixgbe_adv_tx_desc *txdp,
        /* load buf_addr/buf_physaddr in t0 */
        t0 = _mm_loadu_si128((__m128i *)&(pkt->buf_addr));
        /* load data, ... pkt_len in t1 */
-       t1 = _mm_loadu_si128((__m128i *)&(pkt->pkt.data));
+       t1 = _mm_loadu_si128((__m128i *)&(pkt->data));
 
        /* calc offset = (data - buf_adr) */
        offset = _mm_sub_epi64(t1, t0);
@@ -404,7 +383,7 @@ ixgbe_tx_free_bufs(struct igb_tx_queue *txq)
        struct igb_tx_entry_seq *txsp;
        uint32_t status;
        uint32_t n, k;
-#ifdef RTE_MBUF_SCATTER_GATHER
+#ifdef RTE_MBUF_REFCNT
        uint32_t i;
        int nb_free = 0;
        struct rte_mbuf *m, *free[RTE_IXGBE_TX_MAX_FREE_BUF_SZ];
@@ -427,7 +406,7 @@ ixgbe_tx_free_bufs(struct igb_tx_queue *txq)
 
        while (n > 0) {
                k = RTE_MIN(n, txsp[n-1].same_pool);
-#ifdef RTE_MBUF_SCATTER_GATHER
+#ifdef RTE_MBUF_REFCNT
                for (i = 0; i < k; i++) {
                        m = __rte_pktmbuf_prefree_seg((txep+n-k+i)->mbuf);
                        if (m != NULL)