From patchwork Wed Jul 26 19:29:33 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yongseok Koh X-Patchwork-Id: 27234 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id C37CB7D4F; Wed, 26 Jul 2017 21:29:56 +0200 (CEST) Received: from EUR02-HE1-obe.outbound.protection.outlook.com (mail-eopbgr10060.outbound.protection.outlook.com [40.107.1.60]) by dpdk.org (Postfix) with ESMTP id 8ADB17D31 for ; Wed, 26 Jul 2017 21:29:49 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=x/GSR7a+R0sJ39a8rripI3EEZ2xK9f3ICTHyWLaEam0=; b=d6aneEy0HLNsYBTuUNJ+msa1MRhE30ssfqRLJrb7eXw7Sv18qHC/J7PZMZmlbGiOKz0YuY6p8VcQDTQws+Cbu6Hy4bU/kSJ5SfavMhV3HPzyc2/orihW0D9uVtqwNjA0qQ4tDVfio+JwyZQM9VUO0ZXzthpZqVVuTSK3uyJietA= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=yskoh@mellanox.com; Received: from mellanox.com (209.116.155.178) by HE1PR0501MB2044.eurprd05.prod.outlook.com (2603:10a6:3:35::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1282.10; Wed, 26 Jul 2017 19:29:46 +0000 From: Yongseok Koh To: adrien.mazarguil@6wind.com, nelio.laranjeiro@6wind.com Cc: dev@dpdk.org, Yongseok Koh Date: Wed, 26 Jul 2017 12:29:33 -0700 Message-Id: <20170726192933.22207-3-yskoh@mellanox.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170726192933.22207-1-yskoh@mellanox.com> References: <20170726192933.22207-1-yskoh@mellanox.com> MIME-Version: 1.0 X-Originating-IP: [209.116.155.178] X-ClientProxiedBy: BN6PR16CA0018.namprd16.prod.outlook.com (2603:10b6:404:f5::28) To HE1PR0501MB2044.eurprd05.prod.outlook.com (2603:10a6:3:35::22) X-MS-Office365-Filtering-Correlation-Id: 48fa4542-3a67-47a3-a173-08d4d45cad19 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(48565401081)(300000503095)(300135400095)(201703131423075)(201703031133081)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:HE1PR0501MB2044; X-Microsoft-Exchange-Diagnostics: 1; HE1PR0501MB2044; 3:WWBMg0U8deleocImDynJCyNBRmFSs0ZWzx1PAWsG3IqaYRD8AHm598/WwBXYrKfNxf4PM/IH8QDNoJsBw4iMfy1R60PsFZlI7TirhviWlNkuYAN3umf+1+3g0w6GWS/tqGQiVwJAthDpuGP32wa6dJaoRzfcFyooM9edzz677kBT4GTbGBh1HfByAEbQh+A5NWemfcQAwrBIMe0UjBxysat/+5NCRMFNu1ugIc8f0dq6kNcDhtlGghOmVQNTtVUNDcpPZVRg0g8KgfTpXtTzTZjHGr/W9psWPVHpUicSbxfpEjwbr8qTy6K1kU/vNbpD2uXlsn+Mt/iIHBBIi/EkglpTr88h31JkWcgfofdlngHCfobWfdbUtjng/Z156TPiMD89CLw4YfxZY0IlXtz9dM2xFDs7WTDibJC2+ZKN4mcV1msOR3Y3fcYNJYKQYPZAIZSs46Q/DmQIfDSUeAlFTFsa9jq65M0jjiiebyOGXJCAImlGVbTATe2dgfGJwkNTQsUIa/rU6udoF6sjT0nsO5kmaVxIhlq5YIE+siCyjeXxuy656yNTx8UDyGnHKN3kWCsiZr/YRcu1eRU/ZUIb6JLbCJR37/g7Ophpst9aIBqOwSxifNh8Q8M/LrgqdTgI4YUxrYR4LR7u3eD0Cqj32VEFwfF6GezAh8A5ohp7SSw4ed3JvuZDBUyaQw/+Ors870yKCtfUslQYNA6l3S7ft9XEvLJhew2dgitOylDDZOZoepV1g36lYMpwF1gkKlpODen5xQ5Py94MTMKPilKQ+g== X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: HE1PR0501MB2044: X-Microsoft-Exchange-Diagnostics: 1; HE1PR0501MB2044; 25:A8Mn9gWUJzCRuotTRbP3AqW8d+6iF6uZD5rEPjPYLwrIh2enrAwxSuxUX2kHEoUoaPPAHb5WEaROHwF+5WXAiE6/Ta6UlPN5FbznTeqSAx0JiT099tB7EDMMpjNxD6izySq6OslMRYL5fqUoO29GKKSLyA5nKxW5ikpgBeweJ567jdLaRIlIJ2KcEIwWiGaSVYBa8rAHaDWMIvQA5TzbAiM3hcXMNbQWPO44l6kuhGfMwlzfypqdlt6Y9GPpsNvcRi1cPfvReFI9bpaJr2w5w5+OaCpjaMArAOvjElXVrVuIbbTQnafgtokCv99Dz38qDy7oAxhOoSHJRB1vVTGpsUmxG+Khy9hvlQEUKgp0xWovxrLyruPk46u/CHJIwfw7o+JwfwdcteN8xcKs5ygwOiO3ZFTfgkmQeExQT0FK6xqZw5xmTswL7y3QLeSbk9i2qUngZZt+CghtvSlt0LwXMGyKtQwuDzpsd4IfRBV6e0q6T81XegwwnjmkF9v8J+8pefsWFeeiau+dqYVbG1ftWZ6tlfVFMSKwKSEdvjFJwvIhdZ65QN5Yr+vx22KAE41B82xuAM7WlLGFueFtSwLfQIMrWTSc9EzsqEIRKM6WQUVkyRxr1EYR1+R4/86ES9020mxMfE9JaGEIRExzbYlEKQqbvCwerQoC9XlYg20p10uKOhyQ1zX5yNEXZ6+UGsfS6A8XDXcmJYhb0cZEDqXhkVv+4Abp23647VaP5jZmt0brPBX3N8TFaEEpTkRfNak3w4zpQD5y4vi31pifX17hepoXYt/seX7tNEs9Wjs2QMPcz+IMLAWeGEUDMh9YNzXlS/pZcHxV2IdyzctGXq3hRO1Z1DuqmhJm7pA8oyN6Qpikp4pzvXEs85uxvg+HaDaFuWiIcOMomvsrH5o8zJ5pvBUTUUoXwkep8QdxeMt+RoU= X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr X-Microsoft-Exchange-Diagnostics: 1; HE1PR0501MB2044; 31:SfmOdZN1ek7i2dbe/eCOGJy9AWvr6sjufp2v3ZxDgHbv1aiSS0bJnEsDDFwJcbK2eNIl3deww6PF0gfv+o64gnD36T6hUU+h/+zBShpVd56PTqj2VNG3hj7RTXN66/DWvzRZD8dIUW/oDXc0uwFOn05491nIXWkjEPlYJC1S9Fp52kDB5okp53b+phJDZOuRrF1LnfIiwwGIahvkUlfXZKitXLURGihlN1/g2gQEkXqluQmL3KXi67OZJBNzSDeH90Zn0Yf9bmXJMFBP4Qb9L47JUhdyCMrdnaqrmFN/KmaQvWw8gtPSTNLBc4h7a918P8mM6ZwLsS/FxvWld2dN8E8VlsHoSs9dpgNc5VYDtQJWY3S+b3m8uRw4hged9Nv5wGsqZNWYrv6LMBKYDPyN7jIVXvSQ3i+lbEGclvad0vUP7XY/l06fOPsinHHSdmwfk586EojxvQ7AfgaVxSeCpLj8DyviCmiBeNV+FjjHES94VysiAi3pIRS1twbokm2Js4wnNh9x330zq1Yl2ecuolWGBbRVQe2PRaMeGGWFPmpfMyvrWEbsSc+yiStpms2UKcflNWuXFJH1uVcq2v0l0/00zfC+cmT+aNd5S0onoJRvSXispHeRgh+8PlzoAra+IVoLSBOKbU93V1FQA9uncgDztiLzlnd622B7wzYFBT9aJ/U6DAnDt19cbHlGjW1s9V0BqzOSN0r7f8qSNHlCkA== X-Microsoft-Exchange-Diagnostics: 1; HE1PR0501MB2044; 20:ZXWHxoGSl3xaWXSJgV32FFTJhN6DzY03UIcE63m3cYZPcbxxNoqlC7U7Y92QP2HlJ4Mm1MwE6e/+Lqsn4fEK97YE8BHTLJ5UIXCxQ14dY0E5E/HlmBsEsOMIHDyFRllPpQY8URN3B8jkODUCBu1Q7JRznN8nO+clE45VsSXhhXfHbZHQvE5H1+jAqpmCaE1ZnHQTOKw9E8471QigewEhq+gQFTtSkWh6BCWO480RSh4xNNYQQfpYbFmiKCihLsdgqBNZDaAHlZ3APphZD6mi5Ykad8mbzN/pkODhCcySXujgqxud9ci7SQKlO+SFnh1QiJN4TYaPQCWJS3Pf3lAm7vg4+/1O9FA3UdLLUYt1j3WsLjK5sgTTvq2gSefld0ybvonkXAy1GTcpH6qNjtpwB1ouwDGJ/DKGwJdrAifViKvfRui5J/ZzAJXkN1oVnGm0VoWH23KqgFvPI1zSq+JyGK/BabahPXfWYYzS37Cub0X5tI+Om409hbgeJ2DXFPOS X-Exchange-Antispam-Report-Test: UriScan:; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(100000703101)(100105400095)(10201501046)(6055026)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123564025)(20161123560025)(20161123555025)(20161123558100)(6072148)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:HE1PR0501MB2044; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:HE1PR0501MB2044; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0501MB2044; 4:Cl4FmjBr4IHAklDMIdf1ttjm0wYkguSqQeYKTzuh?= 2IK5w7VunmUK0wa67azawkoUi8A2xSt3QHk7rwHr5lyOR25SSAsZs6NA1rFWO86nW32OqPCbOY4rbxYa+lTeCp0/8lA8hIMhznUva9cDYLQm4EDNF4/lp6F40hhJZjznGS2NYrvKAs0CdaJ7x06lzomEPke0QZiU6e52E3g+q/yEsQHOjKtOZcszsWU6dGcAIk8e7IAIOCf8s9/HD9qyYC3tW4c5VHhYWpKVjG0o/JXP6vcWiUYufHcfzkVGXXMbnxkcuk4aQ24AOt3/Tqjc7emLQwzXou6DnX9YM6a32bN5UQBS3wqOsvdkD4BUqYnjSsLItoAQ5ZZKA34Nh7YbzXII5AHkOzYCRbvUU42aDQN/BO8ki2CFOOhRk2mZzFC6pyk9jZEJmCTJ9mxN+IHsaIcsnKcs7j7/C4Iveg7gpQqtSWgfFWh/BoJ/doHCtTiIIBgLjePtZlor1IIY1S2C9yIBdTpEeo87kUAd5Etb5LY7iTV5xlf1rJvCsBhYoivE+5LqBHMxWr7y740Tz6XJ3WbI+B+d8QD0gm0yrs6nTd3fFyetQawp/3V6dcr5hlZChsO+809JfzeQNbCkZ/eYEX0vgizbiL+sek1fNErKpBbJeWlFnj/6n78t0uH054wXl47BAm7T1AdEFQD75iwonxaFs1Gxapn53j0NYLUVGt6tcyHFDrP3jSRuwmtlLE8J3ZZoxAngNswbWAN1q8kNKWD7+rtertyvYxccmPIB5vgcLD1UjgcWw6+k73anJnRDmhl9FBBrUy05Y4jgXcPq+xEf4O5hnC5r2oTKV5MqJjFYwvb8Ex+elgt6p1fQFqP9INGKVFXnbfp87FiUbkxNGEFqtxUJ+B0TIzrMAH01y/4uewe/Mj8j/tOMcCOINTqNGZZHjMD+RTi0LOVyCOk7qjtcoo+LMvm1Ydza59s0PjFC5TumHTXeDy8KUOSdZ+A6H31AT9g3cf2yeGjYuqiNapnxA3FP40hEF17o8xEN68XAmP/jIrHb7lVtc2tUDGN+vk8ZBxP4oaus9VZ9c0X4Lgbz4UWmOHGu934HCSv23uEM9SwCsZ1HhOOl58vgZGvQibsCoQ1MqmlVIw5ap41a1slw74mAGa9KPrcqqMtLtCdfag== X-Forefront-PRVS: 038002787A X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(7370300001)(6009001)(39850400002)(39840400002)(39400400002)(39860400002)(39450400003)(39410400002)(199003)(189002)(305945005)(7350300001)(106356001)(478600001)(4326008)(101416001)(42186005)(76176999)(50986999)(25786009)(105586002)(50226002)(47776003)(2950100002)(66066001)(69596002)(8676002)(81166006)(33646002)(53936002)(81156014)(6666003)(3846002)(6116002)(50466002)(5003940100001)(107886003)(110136004)(86362001)(48376002)(1076002)(21086003)(38730400002)(575784001)(36756003)(97736004)(7736002)(55016002)(5660300001)(68736007)(189998001)(2906002); DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR0501MB2044; H:mellanox.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0501MB2044; 23:OYlZUcesTB9txk7ac93JXcqyhT+kGixsq97DZuC?= /0fT+HXPblFOZnSXqwUoCMLLVvfxHwWLYthZVAzpGfWyQ/O3WV2ZIgqV0SLskerm26Ve/w3HzPQsE3CsNSIKDgiJpxkZAxxZ8qtEjhxw+v2WFbc9r8OnaovHq4VdF+wpoagMeuRmjJZykt6SCyA3jL4zTiImplVCk+jitKYjkKS7F6V83Ax0vR1cP0jW0YSvLHhHii/7Bc3x9e0R5fX4EpXOX5P/QPY0W26TjEEk1XGkRsjZmNPHiqqr14MiNAXPpLlJEicFz7vYV76fRV/ZpTw5NSPeJmRI9fEUn1atDGhYgpFkzBU5WiSB3WE+PTt48OAdk1W9gALgourjk/goq4YO54VBZyamVczoe0J/nXmf827WqDiBaiYsiDd7A/pUQ6DqVfyFssIQBFpyiYoV4oGFnydxBEC9Ktf/Yj3TYABAN3WTaJo1uA1df636JN5qDlMyPj+o6Ox5nOjlguf3Ix2O8pXBIYB5dWuUaF2XAoJrNPLaDSQ40CpEvTta4ldhSVTc5lcDrUb4fs+mYFp6QZRC2E2PhUqm0UUSsXuVsWiQOpwvdtaO6MDAyYtN0btSif2Q7bozE/PRT1D/ueILTv1QNrUIJPNaA9oUVViy7euX9EDNu49ECHBZnzmNtZxxqBUgy6FKyNroVZxp11y7S2WaVlsOKf8fw2elol9VQRkLEDxS5ym0wFgRJ7aEG9FYlakNsiK0jkP1kLj/gpf/4vmtTnt75NviIY+vdYkgYFdzmbRUymlwX3hi37XjAaU2VudrtQ+XR53SI/KAEuaLN/iYfvdhujE1lMzumnEQ3wsHY8xNhhFiDmj3l55rtGwaRqO3K7OLgVDUdlikCcRo3xbddSCTXXknFX5Go8BvczTsCqKoWMKBvVPzMO1vftf4JpTgOmKy0GYntlSoeZibMVxQw4UCeCjeixpLDsXcE/S2PISOgBDDjr/HD60HO6+Vlacfw08i6hmKbwwjYu57w0zB+lwQWeuUgbU6nDRFacVy7T/8FTqy9Hc4GlW2h7BbVczbQmXb3NhEar/eSnAUA4knSq7rD06Mj919YPgED0d4nntf7dwV35YOeDa2dkh2O27Gm1S0ghaiU8keuGLZVUCpfpjwrStmBpbq9VRnvJny9H2LjN2zRwuYBd32MRx8rQHqXhXbjobBoN6yWjP6RiZ8nBgkgM/BfIUWQlYMKGoSAD12UzgdR8OLEpuz+Mv7KN5DCTgi04cCa8RHiwtm61TGQ2s/tbaIUaz+GZ5kftTpbS2563DiHs/al9cNupPx0oQY= X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0501MB2044; 6:8oHvwRFh802vl85gtehfvdRaCIQv5gr7UVxabbRp?= PBQY2MMwL5GaBFAmIO0DOVgXEWw1c/DXVAg1Xf5tKjx8bcQc9xDR8pZtxLO96a3Xs4qgbwzAYdIc0w/fnki7jFGb+a0NDYgKLazM0EXQ2cfExZatB5IXNkuz6LNayud2p5hLrWQf5L6Ybmt+5DTqcoOBg2BOx+hnOaU9pa4hwVTLziqtK8GDczxs/FF5G26Urk+mRQ4o4F6PfZvLtdAGGJi+japgoZjuWJVfXDU+Htu+HDynBdrNPa28cgpqRlTXpeXvHJi4PqeFWWtuXsU65Xou1/hLV2r0VBPBszmhGIGimYuZFxzSPTESg2OHgako69DkOqvkgWBtSDsvl3FQwhrcnWpkRxSV5qSn9a+PgVAirrzNojZhrbD4WF/7WarnQHvTLFK4Cgu4IpQUarXcEH19AR7+FLSNc0C/v9KCL/z2pphPgIJgY0umS/QUZlKxERmEMsH8Am1Ko62p8V2Gs1M/gMAEZlJSNyW7sXLLHrRcO4j4dKoQY4C5hc+oXzL59kGnY74uNCVWQhUR23mUJ553QLAad+6n9ReFSmzWuHnTHwnavNbX99rnBGUpn02nnt8pOCpilOyzSi9aTsY7ANGlYnrTs9c7+LN5elEa4v0lO3lmCVu6FqmdHhaqsqOVqJyh5VkUtAuX8EcbmLD2AyHdzON6Icg0psWxLcRN33/6h2RQrxzRr8qVXBU+GVlEw+/jjKcwOnNdAVEEN+nQx8SOLskJGG3D7r9nqOTEl0XSQkbJWdZLBjmKD/wUQNzwrXEBAxcPd+l8Up12h6PE/h2ImMztG+qXIGk9rpEO8Yie+2SOpo4x0FJI3nTmCvDOcR6SCacuOTWQkCpNB+dHRX8wK764z+wvNbkNCi4SWNq0g4Dqc8GrrY403t8DbbyBZPNGMv8E6Wqjkz3lr7NVk9fJSRS3fo+kdORXjE7oNIUZPTq91F5ysdUluC/De93VxgVYY9piK5nGD66cGsoO62uu X-Microsoft-Exchange-Diagnostics: 1; HE1PR0501MB2044; 5:mQSeUxJ6PhIqrNPlH/AhxbYcWulj+yhbXajuUQ1M/wwoRxLiBuXmvlzQ30LAw4J2Vtov6WsbWyaFGAHs0717Z14L9Ih2HN97jfsWh1HPJ8TBBerzS9moFDFRLbE4GuKYCE1fJADezpeMsX3VeTLSM/tM9hpdz5RcgY6himH4If/BtL+w+8uvJ+SMP9mX+OThu3hJZMvTM2g9TQ5bG3+vR3RmLx+PYXhaqOrQoOJOkyR+rdlXArg3kU8HSf/hrS9Axrdue/DffRgwGzSf5H5Wg7vOZ51FITFV6SJBdFr2KaPHmTT+lyQhkQw8seE+8yNlAYDw9FuYhmPdI0OPJ7s60G+o/FrQ20CExY94hIEabBEZYWiSAPKoDcD4YKdSktE0VqT/VrrwGfWZWRmPVWVCzKVslrZDmLCqPt5Ha0jm5H1o1BOu2kIYsJR8P9y7u6MTRzo0nBePpxwytCFN3mHqRCxZs/jGz3rAIVMyE2qGzbYvni8yWHkMyBmuK0Ldbh/b; 24:649RCj7ePd8oUvj0BOI6DA+iPez8QEdB1AR5j12axOSeTpL9VusVR5gwXihfOWLzAySI+n63etzTV6sH9QrTVjgxEwgaAanY78pzo5gQX18= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; HE1PR0501MB2044; 7:ET2xKW9W7eJu8VzQOzzRajQOqksNANLbM3qLcmThClvuYnvSrshzhsqUQrmRbrqCRnZi7bZSYpKYzQ8RqCgF85SBj67XhWsyCbfoNDPztYBfM8qE97Dsq7jLO5rxG6C9CAHoyCRNprCd7M1d2TvtaKH7z4KSOMqlJ02b6TXbE0pyVD/iWc0BndXTJhnNPa+o7OTqpln/VX+2aV5wXtzZWu8FnsQjI0ZiLB2GTaB1gEfGeeiD2FTQlrekskg1pwPetHeocaaAXpzee0B3bbQPCz/QJB0MrQrKvQvnfFmbAB6UCR/knXXMP2ro2hOZ5WrmSeBpf01hffcFoMkaFm8KGGfD5tKwqBC+jY0ivNkdNKrr9gc57SRYjJcxc5+9ikkR5P1xJvXcfHOMDV6f8acCNCy+Jf086wcCSaV8tFhe3cFC8RhgwVNJlV2WvIdXy91dQIydm6HXZbVtj9q0TjxpZ/WBGaH4xA0A18bGMqmmE8XrNKo8GCNkRfo8nMTQ1sAagbbhBHqMoxC8++gFkJ4jRpfioJHAvZYMBJ3Erb8ff+kfI8CCduMe+sPQP55Uv+uxB6Flu4Z/JfTZtYW/cZPj/3QI1USNpXjJJhemRZBDkBPXomgUBJB4KV8nzKgwPBHj5NwqaU/buzoTt9TzO/qZ6FePmZNzTk+XTU97QUSh/DAeEsUhNkMWpoSoKJnB7HomOCl4ByWjNOZtBdaZJmdd/2/+/Wg9clxeTKr45yh/36fBu4nZH3VOgIvX1GrC3HCjsuOVB0UfQmqZCyLPDsU8u+CNB1VPl6fmh7WWPsO3whE= X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Jul 2017 19:29:46.1362 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0501MB2044 Subject: [dpdk-dev] [PATCH 2/2] net/mlx5: fix L4 packet type support X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" TCP/UDP/NONFRAG/FRAG flags aren't counted for both outer and inner header even though device supports it. Fixes: 0603df73a077 ("net/mlx5: fix Rx packet validation and type") Fixes: 6cb559d67b83 ("net/mlx5: add vectorized Rx/Tx burst for x86") Signed-off-by: Yongseok Koh Acked-by: Adrien Mazarguil Reviewed-by: Sagi Grimberg --- drivers/net/mlx5/mlx5.c | 2 + drivers/net/mlx5/mlx5_ethdev.c | 10 +- drivers/net/mlx5/mlx5_rxtx.c | 172 ++++++++++++++++++++++++++--------- drivers/net/mlx5/mlx5_rxtx.h | 3 +- drivers/net/mlx5/mlx5_rxtx_vec_sse.c | 17 ++-- 5 files changed, 151 insertions(+), 53 deletions(-) diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c index 49d4dba2a..1f438476a 100644 --- a/drivers/net/mlx5/mlx5.c +++ b/drivers/net/mlx5/mlx5.c @@ -887,6 +887,8 @@ RTE_INIT(rte_mlx5_pmd_init); static void rte_mlx5_pmd_init(void) { + /* Build the static table for ptype conversion. */ + mlx5_set_ptype_table(); /* * RDMAV_HUGEPAGES_SAFE tells ibv_fork_init() we intend to use * huge pages. Calling ibv_fork_init() during init allows diff --git a/drivers/net/mlx5/mlx5_ethdev.c b/drivers/net/mlx5/mlx5_ethdev.c index b70b7b9a9..d1ad61c20 100644 --- a/drivers/net/mlx5/mlx5_ethdev.c +++ b/drivers/net/mlx5/mlx5_ethdev.c @@ -715,12 +715,20 @@ mlx5_dev_supported_ptypes_get(struct rte_eth_dev *dev) { static const uint32_t ptypes[] = { /* refers to rxq_cq_to_pkt_type() */ + RTE_PTYPE_L2_ETHER, RTE_PTYPE_L3_IPV4_EXT_UNKNOWN, RTE_PTYPE_L3_IPV6_EXT_UNKNOWN, + RTE_PTYPE_L4_NONFRAG, + RTE_PTYPE_L4_FRAG, + RTE_PTYPE_L4_TCP, + RTE_PTYPE_L4_UDP, RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN, RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN, + RTE_PTYPE_INNER_L4_NONFRAG, + RTE_PTYPE_INNER_L4_FRAG, + RTE_PTYPE_INNER_L4_TCP, + RTE_PTYPE_INNER_L4_UDP, RTE_PTYPE_UNKNOWN - }; if (dev->rx_pkt_burst == mlx5_rx_burst || diff --git a/drivers/net/mlx5/mlx5_rxtx.c b/drivers/net/mlx5/mlx5_rxtx.c index 5a24e15ea..2572a1652 100644 --- a/drivers/net/mlx5/mlx5_rxtx.c +++ b/drivers/net/mlx5/mlx5_rxtx.c @@ -79,31 +79,123 @@ mlx5_rx_poll_len(struct rxq *rxq, volatile struct mlx5_cqe *cqe, static __rte_always_inline uint32_t rxq_cq_to_ol_flags(struct rxq *rxq, volatile struct mlx5_cqe *cqe); -/* - * The index to the array should have: - * bit[1:0] = l3_hdr_type, bit[2] = tunneled, bit[3] = outer_l3_type - */ -const uint32_t mlx5_ptype_table[] = { - RTE_PTYPE_UNKNOWN, - RTE_PTYPE_L3_IPV6_EXT_UNKNOWN, /* b0001 */ - RTE_PTYPE_L3_IPV4_EXT_UNKNOWN, /* b0010 */ - RTE_PTYPE_UNKNOWN, RTE_PTYPE_UNKNOWN, - RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | - RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN, /* b0101 */ - RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | - RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN, /* b0110 */ - RTE_PTYPE_UNKNOWN, RTE_PTYPE_UNKNOWN, - RTE_PTYPE_L3_IPV6_EXT_UNKNOWN, /* b1001 */ - RTE_PTYPE_L3_IPV4_EXT_UNKNOWN, /* b1010 */ - RTE_PTYPE_UNKNOWN, RTE_PTYPE_UNKNOWN, - RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | - RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN, /* b1101 */ - RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | - RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN, /* b1110 */ - RTE_PTYPE_ALL_MASK /* b1111 */ +uint32_t mlx5_ptype_table[] __rte_cache_aligned = { + [0xff] = RTE_PTYPE_ALL_MASK, /* Last entry for errored packet. */ }; /** + * Build a table to translate Rx completion flags to packet type. + * + * @note: fix mlx5_dev_supported_ptypes_get() if any change here. + */ +void +mlx5_set_ptype_table(void) +{ + unsigned int i; + uint32_t (*p)[RTE_DIM(mlx5_ptype_table)] = &mlx5_ptype_table; + + for (i = 0; i < RTE_DIM(mlx5_ptype_table); ++i) + (*p)[i] = RTE_PTYPE_UNKNOWN; + /* + * The index to the array should have: + * bit[1:0] = l3_hdr_type + * bit[4:2] = l4_hdr_type + * bit[5] = ip_frag + * bit[6] = tunneled + * bit[7] = outer_l3_type + */ + /* L3 */ + (*p)[0x01] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_L4_NONFRAG; + (*p)[0x02] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_L4_NONFRAG; + /* Fragmented */ + (*p)[0x21] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_L4_FRAG; + (*p)[0x22] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_L4_FRAG; + /* TCP */ + (*p)[0x05] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_L4_TCP; + (*p)[0x06] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_L4_TCP; + /* UDP */ + (*p)[0x09] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_L4_UDP; + (*p)[0x0a] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_L4_UDP; + /* Repeat with outer_l3_type being set. Just in case. */ + (*p)[0x81] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_L4_NONFRAG; + (*p)[0x82] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_L4_NONFRAG; + (*p)[0xa1] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_L4_FRAG; + (*p)[0xa2] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_L4_FRAG; + (*p)[0x85] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_L4_TCP; + (*p)[0x86] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_L4_TCP; + (*p)[0x89] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_L4_UDP; + (*p)[0x8a] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_L4_UDP; + /* Tunneled - L3 */ + (*p)[0x41] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_INNER_L4_NONFRAG; + (*p)[0x42] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_INNER_L4_NONFRAG; + (*p)[0xc1] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_INNER_L4_NONFRAG; + (*p)[0xc2] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_INNER_L4_NONFRAG; + /* Tunneled - Fragmented */ + (*p)[0x61] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_INNER_L4_FRAG; + (*p)[0x62] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_INNER_L4_FRAG; + (*p)[0xe1] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_INNER_L4_FRAG; + (*p)[0xe2] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_INNER_L4_FRAG; + /* Tunneled - TCP */ + (*p)[0x45] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_L4_TCP; + (*p)[0x46] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_L4_TCP; + (*p)[0xc5] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_L4_TCP; + (*p)[0xc6] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_L4_TCP; + /* Tunneled - UDP */ + (*p)[0x49] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_L4_UDP; + (*p)[0x4a] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_L4_UDP; + (*p)[0xc9] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_L4_UDP; + (*p)[0xca] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_L4_UDP; +} + +/** * Return the size of tailroom of WQ. * * @param txq @@ -1501,30 +1593,20 @@ mlx5_tx_burst_empw(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n) static inline uint32_t rxq_cq_to_pkt_type(volatile struct mlx5_cqe *cqe) { - uint32_t pkt_type; - uint16_t flags = ntohs(cqe->hdr_type_etc); + uint8_t idx; + uint8_t pinfo = cqe->pkt_info; + uint16_t ptype = cqe->hdr_type_etc; - if (cqe->pkt_info & MLX5_CQE_RX_TUNNEL_PACKET) { - pkt_type = - TRANSPOSE(flags, - MLX5_CQE_RX_IPV4_PACKET, - RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN) | - TRANSPOSE(flags, - MLX5_CQE_RX_IPV6_PACKET, - RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN); - pkt_type |= ((cqe->pkt_info & MLX5_CQE_RX_OUTER_PACKET) ? - RTE_PTYPE_L3_IPV6_EXT_UNKNOWN : - RTE_PTYPE_L3_IPV4_EXT_UNKNOWN); - } else { - pkt_type = - TRANSPOSE(flags, - MLX5_CQE_L3_HDR_TYPE_IPV6, - RTE_PTYPE_L3_IPV6_EXT_UNKNOWN) | - TRANSPOSE(flags, - MLX5_CQE_L3_HDR_TYPE_IPV4, - RTE_PTYPE_L3_IPV4_EXT_UNKNOWN); - } - return pkt_type; + /* + * The index to the array should have: + * bit[1:0] = l3_hdr_type + * bit[4:2] = l4_hdr_type + * bit[5] = ip_frag + * bit[6] = tunneled + * bit[7] = outer_l3_type + */ + idx = ((pinfo & 0x3) << 6) | ((ptype & 0xfc00) >> 10); + return mlx5_ptype_table[idx]; } /** diff --git a/drivers/net/mlx5/mlx5_rxtx.h b/drivers/net/mlx5/mlx5_rxtx.h index 534aaeb46..09882e173 100644 --- a/drivers/net/mlx5/mlx5_rxtx.h +++ b/drivers/net/mlx5/mlx5_rxtx.h @@ -334,8 +334,9 @@ uint16_t mlx5_tx_burst_secondary_setup(void *, struct rte_mbuf **, uint16_t); /* mlx5_rxtx.c */ -extern const uint32_t mlx5_ptype_table[]; +extern uint32_t mlx5_ptype_table[]; +void mlx5_set_ptype_table(void); uint16_t mlx5_tx_burst(void *, struct rte_mbuf **, uint16_t); uint16_t mlx5_tx_burst_mpw(void *, struct rte_mbuf **, uint16_t); uint16_t mlx5_tx_burst_mpw_inline(void *, struct rte_mbuf **, uint16_t); diff --git a/drivers/net/mlx5/mlx5_rxtx_vec_sse.c b/drivers/net/mlx5/mlx5_rxtx_vec_sse.c index 95e96baa2..d43ab51d0 100644 --- a/drivers/net/mlx5/mlx5_rxtx_vec_sse.c +++ b/drivers/net/mlx5/mlx5_rxtx_vec_sse.c @@ -756,7 +756,7 @@ rxq_cq_to_ptype_oflags_v(struct rxq *rxq, __m128i cqes[4], __m128i op_err, __m128i cv_flags; const __m128i zero = _mm_setzero_si128(); const __m128i ptype_mask = - _mm_set_epi32(0xd06, 0xd06, 0xd06, 0xd06); + _mm_set_epi32(0xfd06, 0xfd06, 0xfd06, 0xfd06); const __m128i ptype_ol_mask = _mm_set_epi32(0x106, 0x106, 0x106, 0x106); const __m128i pinfo_mask = @@ -817,18 +817,23 @@ rxq_cq_to_ptype_oflags_v(struct rxq *rxq, __m128i cqes[4], __m128i op_err, } /* * Merge the two fields to generate the following: - * bit[1] = l3_ok, bit[2] = l4_ok - * bit[8] = cv, bit[11:10] = l3_hdr_type - * bit[12] = tunneled, bit[13] = outer_l3_type + * bit[1] = l3_ok + * bit[2] = l4_ok + * bit[8] = cv + * bit[11:10] = l3_hdr_type + * bit[14:12] = l4_hdr_type + * bit[15] = ip_frag + * bit[16] = tunneled + * bit[17] = outer_l3_type */ ptype = _mm_and_si128(ptype, ptype_mask); pinfo = _mm_and_si128(pinfo, pinfo_mask); - pinfo = _mm_slli_epi32(pinfo, 12); + pinfo = _mm_slli_epi32(pinfo, 16); ptype = _mm_or_si128(ptype, pinfo); ptype = _mm_srli_epi32(ptype, 10); ptype = _mm_packs_epi32(ptype, zero); /* Errored packets will have RTE_PTYPE_ALL_MASK. */ - op_err = _mm_srli_epi16(op_err, 12); + op_err = _mm_srli_epi16(op_err, 8); ptype = _mm_or_si128(ptype, op_err); pkts[0]->packet_type = mlx5_ptype_table[_mm_extract_epi8(ptype, 0)]; pkts[1]->packet_type = mlx5_ptype_table[_mm_extract_epi8(ptype, 2)];