Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/6251/?format=api
https://patches.dpdk.org/api/patches/6251/?format=api", "web_url": "https://patches.dpdk.org/project/dpdk/patch/1436459501-14173-5-git-send-email-helin.zhang@intel.com/", "project": { "id": 1, "url": "https://patches.dpdk.org/api/projects/1/?format=api", "name": "DPDK", "link_name": "dpdk", "list_id": "dev.dpdk.org", "list_email": "dev@dpdk.org", "web_url": "http://core.dpdk.org", "scm_url": "git://dpdk.org/dpdk", "webscm_url": "http://git.dpdk.org/dpdk", "list_archive_url": "https://inbox.dpdk.org/dev", "list_archive_url_format": "https://inbox.dpdk.org/dev/{}", "commit_url_format": "" }, "msgid": "<1436459501-14173-5-git-send-email-helin.zhang@intel.com>", "list_archive_url": "https://inbox.dpdk.org/dev/1436459501-14173-5-git-send-email-helin.zhang@intel.com", "date": "2015-07-09T16:31:26", "name": "[dpdk-dev,v10,04/19] ixgbe: replace bit mask based packet type with unified packet type", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": true, "hash": "c179092f02a35ecc680dc04a461269898642cb06", "submitter": { "id": 14, "url": "https://patches.dpdk.org/api/people/14/?format=api", "name": "Zhang, Helin", "email": "helin.zhang@intel.com" }, "delegate": null, "mbox": "https://patches.dpdk.org/project/dpdk/patch/1436459501-14173-5-git-send-email-helin.zhang@intel.com/mbox/", "series": [], "comments": "https://patches.dpdk.org/api/patches/6251/comments/", "check": "pending", "checks": "https://patches.dpdk.org/api/patches/6251/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<dev-bounces@dpdk.org>", "X-Original-To": "patchwork@dpdk.org", "Delivered-To": "patchwork@dpdk.org", "Received": [ "from [92.243.14.124] (localhost [IPv6:::1])\n\tby dpdk.org (Postfix) with ESMTP id 7C28FC362;\n\tThu, 9 Jul 2015 18:32:11 +0200 (CEST)", "from mga09.intel.com (mga09.intel.com [134.134.136.24])\n\tby dpdk.org (Postfix) with ESMTP id 945BCC322\n\tfor <dev@dpdk.org>; Thu, 9 Jul 2015 18:32:04 +0200 (CEST)", "from fmsmga001.fm.intel.com ([10.253.24.23])\n\tby orsmga102.jf.intel.com with ESMTP; 09 Jul 2015 09:32:04 -0700", "from shvmail01.sh.intel.com ([10.239.29.42])\n\tby fmsmga001.fm.intel.com with ESMTP; 09 Jul 2015 09:32:00 -0700", "from shecgisg004.sh.intel.com (shecgisg004.sh.intel.com\n\t[10.239.29.89])\n\tby shvmail01.sh.intel.com with ESMTP id t69GVvhI005439;\n\tFri, 10 Jul 2015 00:31:57 +0800", "from shecgisg004.sh.intel.com (localhost [127.0.0.1])\n\tby shecgisg004.sh.intel.com (8.13.6/8.13.6/SuSE Linux 0.8) with ESMTP\n\tid t69GVroE014236; Fri, 10 Jul 2015 00:31:55 +0800", "(from hzhan75@localhost)\n\tby shecgisg004.sh.intel.com (8.13.6/8.13.6/Submit) id t69GVrD7014232; \n\tFri, 10 Jul 2015 00:31:53 +0800" ], "X-ExtLoop1": "1", "X-IronPort-AV": "E=Sophos;i=\"5.15,441,1432623600\"; d=\"scan'208\";a=\"743789670\"", "From": "Helin Zhang <helin.zhang@intel.com>", "To": "dev@dpdk.org", "Date": "Fri, 10 Jul 2015 00:31:26 +0800", "Message-Id": "<1436459501-14173-5-git-send-email-helin.zhang@intel.com>", "X-Mailer": "git-send-email 1.7.4.1", "In-Reply-To": "<1436459501-14173-1-git-send-email-helin.zhang@intel.com>", "References": "<1435912347-19499-1-git-send-email-helin.zhang@intel.com>\n\t<1436459501-14173-1-git-send-email-helin.zhang@intel.com>", "Subject": "[dpdk-dev] [PATCH v10 04/19] ixgbe: replace bit mask based packet\n\ttype with unified packet type", "X-BeenThere": "dev@dpdk.org", "X-Mailman-Version": "2.1.15", "Precedence": "list", "List-Id": "patches and discussions about DPDK <dev.dpdk.org>", "List-Unsubscribe": "<http://dpdk.org/ml/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>", "List-Archive": "<http://dpdk.org/ml/archives/dev/>", "List-Post": "<mailto:dev@dpdk.org>", "List-Help": "<mailto:dev-request@dpdk.org?subject=help>", "List-Subscribe": "<http://dpdk.org/ml/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>", "Errors-To": "dev-bounces@dpdk.org", "Sender": "\"dev\" <dev-bounces@dpdk.org>" }, "content": "To unify packet type among all PMDs, bit masks of packet type for\n'ol_flags' are replaced by unified packet type.\nTo avoid breaking ABI compatibility, all the changes would be\nenabled by RTE_NEXT_ABI, which is disabled by default.\nNote that around 2.5% performance drop (64B) was observed of doing\n4 ports (1 port per 82599 card) IO forwarding on the same SNB core.\n\nSigned-off-by: Helin Zhang <helin.zhang@intel.com>\n---\n drivers/net/ixgbe/ixgbe_rxtx.c | 163 +++++++++++++++++++++++++++++++++++++++++\n 1 file changed, 163 insertions(+)\n\nv2 changes:\n* Used redefined packet types and enlarged packet_type field in mbuf.\n\nv5 changes:\n* Re-worded the commit logs.\n\nv6 changes:\n* Disabled the code changes for unified packet type by default, to\n avoid breaking ABI compatibility.\n\nv7 changes:\n* Renamed RTE_UNIFIED_PKT_TYPE to RTE_NEXT_ABI.\n\nv9 changes:\n* Renamed MAC to ETHER in packet type names.", "diff": "diff --git a/drivers/net/ixgbe/ixgbe_rxtx.c b/drivers/net/ixgbe/ixgbe_rxtx.c\nindex b1db57f..9e99e80 100644\n--- a/drivers/net/ixgbe/ixgbe_rxtx.c\n+++ b/drivers/net/ixgbe/ixgbe_rxtx.c\n@@ -859,6 +859,110 @@ end_of_tx:\n * RX functions\n *\n **********************************************************************/\n+#ifdef RTE_NEXT_ABI\n+#define IXGBE_PACKET_TYPE_IPV4 0X01\n+#define IXGBE_PACKET_TYPE_IPV4_TCP 0X11\n+#define IXGBE_PACKET_TYPE_IPV4_UDP 0X21\n+#define IXGBE_PACKET_TYPE_IPV4_SCTP 0X41\n+#define IXGBE_PACKET_TYPE_IPV4_EXT 0X03\n+#define IXGBE_PACKET_TYPE_IPV4_EXT_SCTP 0X43\n+#define IXGBE_PACKET_TYPE_IPV6 0X04\n+#define IXGBE_PACKET_TYPE_IPV6_TCP 0X14\n+#define IXGBE_PACKET_TYPE_IPV6_UDP 0X24\n+#define IXGBE_PACKET_TYPE_IPV6_EXT 0X0C\n+#define IXGBE_PACKET_TYPE_IPV6_EXT_TCP 0X1C\n+#define IXGBE_PACKET_TYPE_IPV6_EXT_UDP 0X2C\n+#define IXGBE_PACKET_TYPE_IPV4_IPV6 0X05\n+#define IXGBE_PACKET_TYPE_IPV4_IPV6_TCP 0X15\n+#define IXGBE_PACKET_TYPE_IPV4_IPV6_UDP 0X25\n+#define IXGBE_PACKET_TYPE_IPV4_IPV6_EXT 0X0D\n+#define IXGBE_PACKET_TYPE_IPV4_IPV6_EXT_TCP 0X1D\n+#define IXGBE_PACKET_TYPE_IPV4_IPV6_EXT_UDP 0X2D\n+#define IXGBE_PACKET_TYPE_MAX 0X80\n+#define IXGBE_PACKET_TYPE_MASK 0X7F\n+#define IXGBE_PACKET_TYPE_SHIFT 0X04\n+static inline uint32_t\n+ixgbe_rxd_pkt_info_to_pkt_type(uint16_t pkt_info)\n+{\n+\tstatic const uint32_t\n+\t\tptype_table[IXGBE_PACKET_TYPE_MAX] __rte_cache_aligned = {\n+\t\t[IXGBE_PACKET_TYPE_IPV4] = RTE_PTYPE_L2_ETHER |\n+\t\t\tRTE_PTYPE_L3_IPV4,\n+\t\t[IXGBE_PACKET_TYPE_IPV4_EXT] = RTE_PTYPE_L2_ETHER |\n+\t\t\tRTE_PTYPE_L3_IPV4_EXT,\n+\t\t[IXGBE_PACKET_TYPE_IPV6] = RTE_PTYPE_L2_ETHER |\n+\t\t\tRTE_PTYPE_L3_IPV6,\n+\t\t[IXGBE_PACKET_TYPE_IPV4_IPV6] = RTE_PTYPE_L2_ETHER |\n+\t\t\tRTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP |\n+\t\t\tRTE_PTYPE_INNER_L3_IPV6,\n+\t\t[IXGBE_PACKET_TYPE_IPV6_EXT] = RTE_PTYPE_L2_ETHER |\n+\t\t\tRTE_PTYPE_L3_IPV6_EXT,\n+\t\t[IXGBE_PACKET_TYPE_IPV4_IPV6_EXT] = RTE_PTYPE_L2_ETHER |\n+\t\t\tRTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP |\n+\t\t\tRTE_PTYPE_INNER_L3_IPV6_EXT,\n+\t\t[IXGBE_PACKET_TYPE_IPV4_TCP] = RTE_PTYPE_L2_ETHER |\n+\t\t\tRTE_PTYPE_L3_IPV4 | RTE_PTYPE_L4_TCP,\n+\t\t[IXGBE_PACKET_TYPE_IPV6_TCP] = RTE_PTYPE_L2_ETHER |\n+\t\t\tRTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_TCP,\n+\t\t[IXGBE_PACKET_TYPE_IPV4_IPV6_TCP] = RTE_PTYPE_L2_ETHER |\n+\t\t\tRTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP |\n+\t\t\tRTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_TCP,\n+\t\t[IXGBE_PACKET_TYPE_IPV6_EXT_TCP] = RTE_PTYPE_L2_ETHER |\n+\t\t\tRTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_L4_TCP,\n+\t\t[IXGBE_PACKET_TYPE_IPV4_IPV6_EXT_TCP] = RTE_PTYPE_L2_ETHER |\n+\t\t\tRTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP |\n+\t\t\tRTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_TCP,\n+\t\t[IXGBE_PACKET_TYPE_IPV4_UDP] = RTE_PTYPE_L2_ETHER |\n+\t\t\tRTE_PTYPE_L3_IPV4 | RTE_PTYPE_L4_UDP,\n+\t\t[IXGBE_PACKET_TYPE_IPV6_UDP] = RTE_PTYPE_L2_ETHER |\n+\t\t\tRTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_UDP,\n+\t\t[IXGBE_PACKET_TYPE_IPV4_IPV6_UDP] = RTE_PTYPE_L2_ETHER |\n+\t\t\tRTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP |\n+\t\t\tRTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_UDP,\n+\t\t[IXGBE_PACKET_TYPE_IPV6_EXT_UDP] = RTE_PTYPE_L2_ETHER |\n+\t\t\tRTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_L4_UDP,\n+\t\t[IXGBE_PACKET_TYPE_IPV4_IPV6_EXT_UDP] = RTE_PTYPE_L2_ETHER |\n+\t\t\tRTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP |\n+\t\t\tRTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_UDP,\n+\t\t[IXGBE_PACKET_TYPE_IPV4_SCTP] = RTE_PTYPE_L2_ETHER |\n+\t\t\tRTE_PTYPE_L3_IPV4 | RTE_PTYPE_L4_SCTP,\n+\t\t[IXGBE_PACKET_TYPE_IPV4_EXT_SCTP] = RTE_PTYPE_L2_ETHER |\n+\t\t\tRTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_L4_SCTP,\n+\t};\n+\tif (unlikely(pkt_info & IXGBE_RXDADV_PKTTYPE_ETQF))\n+\t\treturn RTE_PTYPE_UNKNOWN;\n+\n+\tpkt_info = (pkt_info >> IXGBE_PACKET_TYPE_SHIFT) &\n+\t\t\t\tIXGBE_PACKET_TYPE_MASK;\n+\n+\treturn ptype_table[pkt_info];\n+}\n+\n+static inline uint64_t\n+ixgbe_rxd_pkt_info_to_pkt_flags(uint16_t pkt_info)\n+{\n+\tstatic uint64_t ip_rss_types_map[16] __rte_cache_aligned = {\n+\t\t0, PKT_RX_RSS_HASH, PKT_RX_RSS_HASH, PKT_RX_RSS_HASH,\n+\t\t0, PKT_RX_RSS_HASH, 0, PKT_RX_RSS_HASH,\n+\t\tPKT_RX_RSS_HASH, 0, 0, 0,\n+\t\t0, 0, 0, PKT_RX_FDIR,\n+\t};\n+#ifdef RTE_LIBRTE_IEEE1588\n+\tstatic uint64_t ip_pkt_etqf_map[8] = {\n+\t\t0, 0, 0, PKT_RX_IEEE1588_PTP,\n+\t\t0, 0, 0, 0,\n+\t};\n+\n+\tif (likely(pkt_info & IXGBE_RXDADV_PKTTYPE_ETQF))\n+\t\treturn ip_pkt_etqf_map[(pkt_info >> 4) & 0X07] |\n+\t\t\t\tip_rss_types_map[pkt_info & 0XF];\n+\telse\n+\t\treturn ip_rss_types_map[pkt_info & 0XF];\n+#else\n+\treturn ip_rss_types_map[pkt_info & 0XF];\n+#endif\n+}\n+#else /* RTE_NEXT_ABI */\n static inline uint64_t\n rx_desc_hlen_type_rss_to_pkt_flags(uint32_t hl_tp_rs)\n {\n@@ -894,6 +998,7 @@ rx_desc_hlen_type_rss_to_pkt_flags(uint32_t hl_tp_rs)\n #endif\n \treturn pkt_flags | ip_rss_types_map[hl_tp_rs & 0xF];\n }\n+#endif /* RTE_NEXT_ABI */\n \n static inline uint64_t\n rx_desc_status_to_pkt_flags(uint32_t rx_status)\n@@ -949,7 +1054,13 @@ ixgbe_rx_scan_hw_ring(struct ixgbe_rx_queue *rxq)\n \tstruct rte_mbuf *mb;\n \tuint16_t pkt_len;\n \tuint64_t pkt_flags;\n+#ifdef RTE_NEXT_ABI\n+\tint nb_dd;\n+\tuint32_t s[LOOK_AHEAD];\n+\tuint16_t pkt_info[LOOK_AHEAD];\n+#else\n \tint s[LOOK_AHEAD], nb_dd;\n+#endif /* RTE_NEXT_ABI */\n \tint i, j, nb_rx = 0;\n \n \n@@ -972,6 +1083,12 @@ ixgbe_rx_scan_hw_ring(struct ixgbe_rx_queue *rxq)\n \t\tfor (j = LOOK_AHEAD-1; j >= 0; --j)\n \t\t\ts[j] = rxdp[j].wb.upper.status_error;\n \n+#ifdef RTE_NEXT_ABI\n+\t\tfor (j = LOOK_AHEAD-1; j >= 0; --j)\n+\t\t\tpkt_info[j] = rxdp[j].wb.lower.lo_dword.\n+\t\t\t\t\t\ths_rss.pkt_info;\n+#endif /* RTE_NEXT_ABI */\n+\n \t\t/* Compute how many status bits were set */\n \t\tnb_dd = 0;\n \t\tfor (j = 0; j < LOOK_AHEAD; ++j)\n@@ -988,12 +1105,22 @@ ixgbe_rx_scan_hw_ring(struct ixgbe_rx_queue *rxq)\n \t\t\tmb->vlan_tci = rte_le_to_cpu_16(rxdp[j].wb.upper.vlan);\n \n \t\t\t/* convert descriptor fields to rte mbuf flags */\n+#ifdef RTE_NEXT_ABI\n+\t\t\tpkt_flags = rx_desc_status_to_pkt_flags(s[j]);\n+\t\t\tpkt_flags |= rx_desc_error_to_pkt_flags(s[j]);\n+\t\t\tpkt_flags |=\n+\t\t\t\tixgbe_rxd_pkt_info_to_pkt_flags(pkt_info[j]);\n+\t\t\tmb->ol_flags = pkt_flags;\n+\t\t\tmb->packet_type =\n+\t\t\t\tixgbe_rxd_pkt_info_to_pkt_type(pkt_info[j]);\n+#else /* RTE_NEXT_ABI */\n \t\t\tpkt_flags = rx_desc_hlen_type_rss_to_pkt_flags(\n \t\t\t\t\trxdp[j].wb.lower.lo_dword.data);\n \t\t\t/* reuse status field from scan list */\n \t\t\tpkt_flags |= rx_desc_status_to_pkt_flags(s[j]);\n \t\t\tpkt_flags |= rx_desc_error_to_pkt_flags(s[j]);\n \t\t\tmb->ol_flags = pkt_flags;\n+#endif /* RTE_NEXT_ABI */\n \n \t\t\tif (likely(pkt_flags & PKT_RX_RSS_HASH))\n \t\t\t\tmb->hash.rss = rxdp[j].wb.lower.hi_dword.rss;\n@@ -1210,7 +1337,11 @@ ixgbe_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,\n \tunion ixgbe_adv_rx_desc rxd;\n \tuint64_t dma_addr;\n \tuint32_t staterr;\n+#ifdef RTE_NEXT_ABI\n+\tuint32_t pkt_info;\n+#else\n \tuint32_t hlen_type_rss;\n+#endif\n \tuint16_t pkt_len;\n \tuint16_t rx_id;\n \tuint16_t nb_rx;\n@@ -1328,6 +1459,19 @@ ixgbe_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,\n \t\trxm->data_len = pkt_len;\n \t\trxm->port = rxq->port_id;\n \n+#ifdef RTE_NEXT_ABI\n+\t\tpkt_info = rte_le_to_cpu_32(rxd.wb.lower.lo_dword.hs_rss.\n+\t\t\t\t\t\t\t\tpkt_info);\n+\t\t/* Only valid if PKT_RX_VLAN_PKT set in pkt_flags */\n+\t\trxm->vlan_tci = rte_le_to_cpu_16(rxd.wb.upper.vlan);\n+\n+\t\tpkt_flags = rx_desc_status_to_pkt_flags(staterr);\n+\t\tpkt_flags = pkt_flags | rx_desc_error_to_pkt_flags(staterr);\n+\t\tpkt_flags = pkt_flags |\n+\t\t\tixgbe_rxd_pkt_info_to_pkt_flags(pkt_info);\n+\t\trxm->ol_flags = pkt_flags;\n+\t\trxm->packet_type = ixgbe_rxd_pkt_info_to_pkt_type(pkt_info);\n+#else /* RTE_NEXT_ABI */\n \t\thlen_type_rss = rte_le_to_cpu_32(rxd.wb.lower.lo_dword.data);\n \t\t/* Only valid if PKT_RX_VLAN_PKT set in pkt_flags */\n \t\trxm->vlan_tci = rte_le_to_cpu_16(rxd.wb.upper.vlan);\n@@ -1336,6 +1480,7 @@ ixgbe_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,\n \t\tpkt_flags = pkt_flags | rx_desc_status_to_pkt_flags(staterr);\n \t\tpkt_flags = pkt_flags | rx_desc_error_to_pkt_flags(staterr);\n \t\trxm->ol_flags = pkt_flags;\n+#endif /* RTE_NEXT_ABI */\n \n \t\tif (likely(pkt_flags & PKT_RX_RSS_HASH))\n \t\t\trxm->hash.rss = rxd.wb.lower.hi_dword.rss;\n@@ -1409,6 +1554,23 @@ ixgbe_fill_cluster_head_buf(\n \tuint8_t port_id,\n \tuint32_t staterr)\n {\n+#ifdef RTE_NEXT_ABI\n+\tuint16_t pkt_info;\n+\tuint64_t pkt_flags;\n+\n+\thead->port = port_id;\n+\n+\t/* The vlan_tci field is only valid when PKT_RX_VLAN_PKT is\n+\t * set in the pkt_flags field.\n+\t */\n+\thead->vlan_tci = rte_le_to_cpu_16(desc->wb.upper.vlan);\n+\tpkt_info = rte_le_to_cpu_32(desc->wb.lower.lo_dword.hs_rss.pkt_info);\n+\tpkt_flags = rx_desc_status_to_pkt_flags(staterr);\n+\tpkt_flags |= rx_desc_error_to_pkt_flags(staterr);\n+\tpkt_flags |= ixgbe_rxd_pkt_info_to_pkt_flags(pkt_info);\n+\thead->ol_flags = pkt_flags;\n+\thead->packet_type = ixgbe_rxd_pkt_info_to_pkt_type(pkt_info);\n+#else /* RTE_NEXT_ABI */\n \tuint32_t hlen_type_rss;\n \tuint64_t pkt_flags;\n \n@@ -1424,6 +1586,7 @@ ixgbe_fill_cluster_head_buf(\n \tpkt_flags |= rx_desc_status_to_pkt_flags(staterr);\n \tpkt_flags |= rx_desc_error_to_pkt_flags(staterr);\n \thead->ol_flags = pkt_flags;\n+#endif /* RTE_NEXT_ABI */\n \n \tif (likely(pkt_flags & PKT_RX_RSS_HASH))\n \t\thead->hash.rss = rte_le_to_cpu_32(desc->wb.lower.hi_dword.rss);\n", "prefixes": [ "dpdk-dev", "v10", "04/19" ] }{ "id": 6251, "url": "