mbuf: move l2_len and l3_len to second cache line
[dpdk.git] / lib / librte_mbuf / rte_mbuf.h
index 34900d4..1c6e115 100644 (file)
@@ -159,13 +159,7 @@ struct rte_mbuf {
        uint16_t reserved2;       /**< Unused field. Required for padding */
        uint16_t data_len;        /**< Amount of data in segment buffer. */
        uint32_t pkt_len;         /**< Total pkt len: sum of all segments. */
-       union {
-               uint16_t l2_l3_len; /**< combined l2/l3 lengths as single var */
-               struct {
-                       uint16_t l3_len:9;      /**< L3 (IP) Header Length. */
-                       uint16_t l2_len:7;      /**< L2 (MAC) Header Length. */
-               };
-       };
+       uint16_t reserved;
        uint16_t vlan_tci;        /**< VLAN Tag Control Identifier (CPU order) */
        union {
                uint32_t rss;     /**< RSS hash result if RSS enabled */
@@ -176,10 +170,19 @@ struct rte_mbuf {
                uint32_t sched;   /**< Hierarchical scheduler */
        } hash;                   /**< hash information */
 
-       /* fields only used in slow path or on TX */
+       /* second cache line - fields only used in slow path or on TX */
+       MARKER cacheline1 __rte_cache_aligned;
        struct rte_mempool *pool; /**< Pool from which mbuf was allocated. */
        struct rte_mbuf *next;    /**< Next segment of scattered packet. */
 
+       /* fields to support TX offloads */
+       union {
+               uint16_t l2_l3_len; /**< combined l2/l3 lengths as single var */
+               struct {
+                       uint16_t l3_len:9;      /**< L3 (IP) Header Length. */
+                       uint16_t l2_len:7;      /**< L2 (MAC) Header Length. */
+               };
+       };
 } __rte_cache_aligned;
 
 /**