From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id 47EDEC594 for ; Tue, 23 Jun 2015 03:50:51 +0200 (CEST) Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga101.fm.intel.com with ESMTP; 22 Jun 2015 18:50:50 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.13,663,1427785200"; d="scan'208";a="748546080" Received: from shvmail01.sh.intel.com ([10.239.29.42]) by fmsmga002.fm.intel.com with ESMTP; 22 Jun 2015 18:50:48 -0700 Received: from shecgisg004.sh.intel.com (shecgisg004.sh.intel.com [10.239.29.89]) by shvmail01.sh.intel.com with ESMTP id t5N1ojJd023409; Tue, 23 Jun 2015 09:50:45 +0800 Received: from shecgisg004.sh.intel.com (localhost [127.0.0.1]) by shecgisg004.sh.intel.com (8.13.6/8.13.6/SuSE Linux 0.8) with ESMTP id t5N1oggA019524; Tue, 23 Jun 2015 09:50:44 +0800 Received: (from hzhan75@localhost) by shecgisg004.sh.intel.com (8.13.6/8.13.6/Submit) id t5N1ofo9019520; Tue, 23 Jun 2015 09:50:41 +0800 From: Helin Zhang To: dev@dpdk.org Date: Tue, 23 Jun 2015 09:50:18 +0800 Message-Id: <1435024235-19483-2-git-send-email-helin.zhang@intel.com> X-Mailer: git-send-email 1.7.4.1 In-Reply-To: <1435024235-19483-1-git-send-email-helin.zhang@intel.com> References: <1434701661-9943-1-git-send-email-helin.zhang@intel.com> <1435024235-19483-1-git-send-email-helin.zhang@intel.com> Subject: [dpdk-dev] [PATCH v8 01/18] mbuf: redefine packet_type in rte_mbuf X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 23 Jun 2015 01:50:52 -0000 In order to unify the packet type, the field of 'packet_type' in 'struct rte_mbuf' needs to be extended from 16 to 32 bits. Accordingly, some fields in 'struct rte_mbuf' are re-organized to support this change for Vector PMD. As 'struct rte_kni_mbuf' for KNI should be right mapped to 'struct rte_mbuf', it should be modified accordingly. In addition, Vector PMD of ixgbe is disabled by default, as 'struct rte_mbuf' changed. To avoid breaking ABI compatibility, all the changes would be enabled by RTE_NEXT_ABI, which is disabled by default. Signed-off-by: Helin Zhang Signed-off-by: Cunming Liang --- config/common_linuxapp | 2 +- .../linuxapp/eal/include/exec-env/rte_kni_common.h | 6 +++++ lib/librte_mbuf/rte_mbuf.h | 26 ++++++++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) v2 changes: * Enlarged the packet_type field from 16 bits to 32 bits. * Redefined the packet type sub-fields. * Updated the 'struct rte_kni_mbuf' for KNI according to the mbuf changes. v3 changes: * Put the mbuf layout changes into a single patch. * Disabled vector ixgbe PMD by default, as mbuf layout changed. v5 changes: * Re-worded the commit logs. v6 changes: * Disabled the code changes for unified packet type by default, to avoid breaking ABI compatibility. v7 changes: * Renamed RTE_UNIFIED_PKT_TYPE to RTE_NEXT_ABI. * Integrated with changes of QinQ stripping/insertion. v8 changes: * Moved the field of 'vlan_tci_outer' in 'struct rte_mbuf' to the end of the 1st cache line, to avoid breaking any vectorized PMD storing. diff --git a/config/common_linuxapp b/config/common_linuxapp index 5deb55a..617d4a1 100644 --- a/config/common_linuxapp +++ b/config/common_linuxapp @@ -167,7 +167,7 @@ CONFIG_RTE_LIBRTE_IXGBE_DEBUG_TX_FREE=n CONFIG_RTE_LIBRTE_IXGBE_DEBUG_DRIVER=n CONFIG_RTE_LIBRTE_IXGBE_PF_DISABLE_STRIP_CRC=n CONFIG_RTE_LIBRTE_IXGBE_RX_ALLOW_BULK_ALLOC=y -CONFIG_RTE_IXGBE_INC_VECTOR=y +CONFIG_RTE_IXGBE_INC_VECTOR=n CONFIG_RTE_IXGBE_RX_OLFLAGS_ENABLE=y # diff --git a/lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h b/lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h index 1e55c2d..e9f38bd 100644 --- a/lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h +++ b/lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h @@ -117,9 +117,15 @@ struct rte_kni_mbuf { uint16_t data_off; /**< Start address of data in segment buffer. */ char pad1[4]; uint64_t ol_flags; /**< Offload features. */ +#ifdef RTE_NEXT_ABI + char pad2[4]; + uint32_t pkt_len; /**< Total pkt len: sum of all segment data_len. */ + uint16_t data_len; /**< Amount of data in segment buffer. */ +#else char pad2[2]; uint16_t data_len; /**< Amount of data in segment buffer. */ uint32_t pkt_len; /**< Total pkt len: sum of all segment data_len. */ +#endif /* fields on second cache line */ char pad3[8] __attribute__((__aligned__(RTE_CACHE_LINE_SIZE))); diff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/librte_mbuf/rte_mbuf.h index a0f3d3b..0315561 100644 --- a/lib/librte_mbuf/rte_mbuf.h +++ b/lib/librte_mbuf/rte_mbuf.h @@ -275,6 +275,28 @@ struct rte_mbuf { /* remaining bytes are set on RX when pulling packet from descriptor */ MARKER rx_descriptor_fields1; +#ifdef RTE_NEXT_ABI + /* + * The packet type, which is the combination of outer/inner L2, L3, L4 + * and tunnel types. + */ + union { + uint32_t packet_type; /**< L2/L3/L4 and tunnel information. */ + struct { + uint32_t l2_type:4; /**< (Outer) L2 type. */ + uint32_t l3_type:4; /**< (Outer) L3 type. */ + uint32_t l4_type:4; /**< (Outer) L4 type. */ + uint32_t tun_type:4; /**< Tunnel type. */ + uint32_t inner_l2_type:4; /**< Inner L2 type. */ + uint32_t inner_l3_type:4; /**< Inner L3 type. */ + uint32_t inner_l4_type:4; /**< Inner L4 type. */ + }; + }; + + uint32_t pkt_len; /**< Total pkt len: sum of all segments. */ + uint16_t data_len; /**< Amount of data in segment buffer. */ + uint16_t vlan_tci; /**< VLAN Tag Control Identifier (CPU order) */ +#else /* RTE_NEXT_ABI */ /** * The packet type, which is used to indicate ordinary packet and also * tunneled packet format, i.e. each number is represented a type of @@ -286,6 +308,7 @@ struct rte_mbuf { uint32_t pkt_len; /**< Total pkt len: sum of all segments. */ uint16_t vlan_tci; /**< VLAN Tag Control Identifier (CPU order) */ uint16_t vlan_tci_outer; /**< Outer VLAN Tag Control Identifier (CPU order) */ +#endif /* RTE_NEXT_ABI */ union { uint32_t rss; /**< RSS hash result if RSS enabled */ struct { @@ -306,6 +329,9 @@ struct rte_mbuf { } hash; /**< hash information */ uint32_t seqn; /**< Sequence number. See also rte_reorder_insert() */ +#ifdef RTE_NEXT_ABI + uint16_t vlan_tci_outer; /**< Outer VLAN Tag Control Identifier (CPU order) */ +#endif /* RTE_NEXT_ABI */ /* second cache line - fields only used in slow path or on TX */ MARKER cacheline1 __rte_cache_aligned; -- 1.9.3