net/dpaa2: add support for firmware version get
[dpdk.git] / lib / librte_mbuf / rte_mbuf.h
index 9dd8e80..fe605c7 100644 (file)
@@ -403,7 +403,13 @@ struct rte_mbuf {
        MARKER cacheline0;
 
        void *buf_addr;           /**< Virtual address of segment buffer. */
-       phys_addr_t buf_physaddr; /**< Physical address of segment buffer. */
+       /**
+        * Physical address of segment buffer.
+        * Force alignment to 8-bytes, so as to ensure we have the exact
+        * same mbuf cacheline0 layout for 32-bit and 64-bit. This makes
+        * working on vector drivers easier.
+        */
+       phys_addr_t buf_physaddr __rte_aligned(sizeof(phys_addr_t));
 
        /* next 8 bytes are initialised on RX descriptor rearm */
        MARKER64 rearm_data;
@@ -782,6 +788,13 @@ rte_mbuf_refcnt_set(struct rte_mbuf *m, uint16_t new_value)
 void
 rte_mbuf_sanity_check(const struct rte_mbuf *m, int is_header);
 
+#define MBUF_RAW_ALLOC_CHECK(m) do {                           \
+       RTE_ASSERT(rte_mbuf_refcnt_read(m) == 1);               \
+       RTE_ASSERT((m)->next == NULL);                          \
+       RTE_ASSERT((m)->nb_segs == 1);                          \
+       __rte_mbuf_sanity_check(m, 0);                          \
+} while (0)
+
 /**
  * Allocate an unitialized mbuf from mempool *mp*.
  *
@@ -809,11 +822,7 @@ static inline struct rte_mbuf *rte_mbuf_raw_alloc(struct rte_mempool *mp)
        if (rte_mempool_get(mp, &mb) < 0)
                return NULL;
        m = (struct rte_mbuf *)mb;
-       RTE_ASSERT(rte_mbuf_refcnt_read(m) == 1);
-       RTE_ASSERT(m->next == NULL);
-       RTE_ASSERT(m->nb_segs == 1);
-       __rte_mbuf_sanity_check(m, 0);
-
+       MBUF_RAW_ALLOC_CHECK(m);
        return m;
 }
 
@@ -831,7 +840,7 @@ static inline struct rte_mbuf *rte_mbuf_raw_alloc(struct rte_mempool *mp)
  * @param m
  *   The mbuf to be freed.
  */
-static inline void __attribute__((always_inline))
+static __rte_always_inline void
 rte_mbuf_raw_free(struct rte_mbuf *m)
 {
        RTE_ASSERT(RTE_MBUF_DIRECT(m));
@@ -1146,25 +1155,25 @@ static inline int rte_pktmbuf_alloc_bulk(struct rte_mempool *pool,
        switch (count % 4) {
        case 0:
                while (idx != count) {
-                       RTE_ASSERT(rte_mbuf_refcnt_read(mbufs[idx]) == 0);
-                       rte_mbuf_refcnt_set(mbufs[idx], 1);
+                       MBUF_RAW_ALLOC_CHECK(mbufs[idx]);
                        rte_pktmbuf_reset(mbufs[idx]);
                        idx++;
+                       /* fall-through */
        case 3:
-                       RTE_ASSERT(rte_mbuf_refcnt_read(mbufs[idx]) == 0);
-                       rte_mbuf_refcnt_set(mbufs[idx], 1);
+                       MBUF_RAW_ALLOC_CHECK(mbufs[idx]);
                        rte_pktmbuf_reset(mbufs[idx]);
                        idx++;
+                       /* fall-through */
        case 2:
-                       RTE_ASSERT(rte_mbuf_refcnt_read(mbufs[idx]) == 0);
-                       rte_mbuf_refcnt_set(mbufs[idx], 1);
+                       MBUF_RAW_ALLOC_CHECK(mbufs[idx]);
                        rte_pktmbuf_reset(mbufs[idx]);
                        idx++;
+                       /* fall-through */
        case 1:
-                       RTE_ASSERT(rte_mbuf_refcnt_read(mbufs[idx]) == 0);
-                       rte_mbuf_refcnt_set(mbufs[idx], 1);
+                       MBUF_RAW_ALLOC_CHECK(mbufs[idx]);
                        rte_pktmbuf_reset(mbufs[idx]);
                        idx++;
+                       /* fall-through */
                }
        }
        return 0;
@@ -1278,8 +1287,7 @@ static inline void rte_pktmbuf_detach(struct rte_mbuf *m)
  *   - (m) if it is the last reference. It can be recycled or freed.
  *   - (NULL) if the mbuf still has remaining references on it.
  */
-__attribute__((always_inline))
-static inline struct rte_mbuf *
+static __rte_always_inline struct rte_mbuf *
 rte_pktmbuf_prefree_seg(struct rte_mbuf *m)
 {
        __rte_mbuf_sanity_check(m, 0);
@@ -1330,7 +1338,7 @@ __rte_pktmbuf_prefree_seg(struct rte_mbuf *m)
  * @param m
  *   The packet mbuf segment to be freed.
  */
-static inline void __attribute__((always_inline))
+static __rte_always_inline void
 rte_pktmbuf_free_seg(struct rte_mbuf *m)
 {
        m = rte_pktmbuf_prefree_seg(m);