From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR03-VE1-obe.outbound.protection.outlook.com (mail-eopbgr50043.outbound.protection.outlook.com [40.107.5.43]) by dpdk.org (Postfix) with ESMTP id 8B8375587 for ; Fri, 30 Jun 2017 21:23: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=3wKTsNmuyHncC6tLGZppDwVRdZOHrwcPT0kdNePtxDA=; b=uCfT05YJzZaWH48OJmh+3pyaXW3sjim3HiXBM0CGWHo95aKNbWMpCesfjripFQgaSJT9WPIuNc2c3IPECb4h1p5dxUwXkQruWD0UBWAu6YuuiEzoyOyTM2gcnPvWJGx69iUc4MBSwuUB0j3nwZ4VI7JzjAe8KHEfh/0uYCzKT3U= Authentication-Results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=mellanox.com; Received: from mellanox.com (209.116.155.178) by DB6PR0501MB2038.eurprd05.prod.outlook.com (2603:10a6:4:6::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1220.11; Fri, 30 Jun 2017 19:23:47 +0000 From: Yongseok Koh To: ferruh.yigit@intel.com Cc: dev@dpdk.org, adrien.mazarguil@6wind.com, nelio.laranjeiro@6wind.com, Yongseok Koh Date: Fri, 30 Jun 2017 12:23:31 -0700 Message-Id: <1342e608a5a7c45b7af17e9228d6ce643e7ae40e.1498850005.git.yskoh@mellanox.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: References: <20170628230403.10142-1-yskoh@mellanox.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [209.116.155.178] X-ClientProxiedBy: DM5PR06CA0066.namprd06.prod.outlook.com (2603:10b6:3:37::28) To DB6PR0501MB2038.eurprd05.prod.outlook.com (2603:10a6:4:6::20) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 4fd6d4a4-5121-4976-3318-08d4bfed8873 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:DB6PR0501MB2038; X-Microsoft-Exchange-Diagnostics: 1; DB6PR0501MB2038; 3:rsSg2Pj/2N6+RWz3OKVtYIsYAc4t50Qq7uhuxlo1KwjtCLbuiZ8mA7LsjThtNO5l4E1MRy14G0+ZkNTLFqi/7W8DX/VVb8LPC2NZfaI3wshym4aQgz+fSzaIh/5/D6Pz0xjA5y7/cWq0Ep4JAy3OJOrAzGW12EvefR9d1cGL0xKji9zMI5JB7cuLbx/n3ejMWe1w0etyXNTZRiTClUlEE2whflwsVl/94TrFxAG79HuL45wJlIBDybfa87dB8kNIP+CQ0ug6Ne5jN9g+p9kVzO9Roo3uAOpJkV+2v2Qqy/0Mewzgxs/gp5ffPJRuYMX1lWTpCaN6IBxlg4JEYRym9tf9Nd9QgCXHD0hEJJxEukBFFl6xor/tmVI5QTaT5/npRzl+4yR23FHt4Oe9V8R87dbS+LA6TrSBrWCkOxpHGSImTcNR3/28V9zx2cB98lHb46dMKC4PqM0syPri0V9CdlOGPGGbQFMXIi5qBJnSBhshhFz+bMmzEh57pEwV6wxjwRhKO9azxJyjKqM45eSNaq7OH3mewFxo9h+q3SPeAYF9g/r9hFHYPE8grdI4mlXGOLUGjJ3DWrhrJl6MmlUeKH4adFtOTnX53jl/F3Gw2m/akSQ54DqxKeEfN9dobaZRgy1+guCLh3WGyjMOjlHKVeHmg2M14GFvRWVU2KluZkWqsjNynoKEzo+x0378N+iI8DmoQsZNmsyj1ylzvugBqpWwZT1oHhOt4elw+I88hET5Zw5dzwGllk6PTqpUyac7J1XGRIMt5JYqSQor2nC0OA== X-MS-TrafficTypeDiagnostic: DB6PR0501MB2038: X-Microsoft-Exchange-Diagnostics: 1; DB6PR0501MB2038; 25:GgpUDSWa+chRzBKwSqd0qFgbifbr7xY77EhVUJIsekUbiSbVPEXdv8TMAwISVlVkiVnOrXpxedi2z1NTLSnxkXrUe3RK+OkQ7uu1G3M+sHb9HMdiv3QA5O7McVkfYe214A+IOP4dZuTg0MEwWSvgZx/wVaCHhBK1rozNYXdJ1ic5VjKFxJnzOqWTVqDyxxqZoqVDDAJNtpZTdlDe221z0YIN9NYNdgJCbTOZhjsbXSawPmttn5L15HI8CldsTJnK/EfZBGMLYwBRAt99Dy7WIFmA3YN+asGuXaqs18oFNo3+W/vGnnH36pCnad+sik6jgfHQUnIae26KQuOQcPYJt4Ytqb3D7ScOXDGUCsKV7sZnI6ggF6DIlcPyr389+FPtPLj+E17JdFpzPpHvmz3DcTnCcdc6EIos/kYOz+tNySu5j4rqXBe+ctP3NgBRIoviV0vDRDsjJ7gq0iayLGkXS+VQwtdKhFO4tB2x7gx9poR+stfB84jMET0+RmaNW45VA7HAKEONFMPmS5Tnv/I4RFOeJraaxsirJUrls8wF7sUCrJhhY6dl7Ln9Gf3ImeBNycno0z9YoDEnth2OfAzQNf1JrTVVG2OfAdA468GU8j7b5eQvZReTkxh0sWal/IvkPOUY+j5dJkAYoAzPchlDcaMHAmaAFdSAMCtMTIEoHbVt88ZcSe+2bSpnTnkB1NMXNCFa4+I6bs+ln2UzPnnJONboNCXPW5UqdrULk7n8baV2CWhR73uvxuB32CZSB7SsXxTVkevQCpI8y5YMUkdmllRHp/SLFLnU/c8gHNJbbh3qMjx7uj0xsoS+NxR6OR+ONoplquGJ1o6L6MfnBDdme39etd0UOganl7Gd/QwUI9TZ3pMlfcDKf585iXeD2r2G6CzFlbb/WHg05B8GT+S4yI26ROwWiNSS7VR+lwvMlq4= X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr X-Microsoft-Exchange-Diagnostics: 1; DB6PR0501MB2038; 31:tlDS8c78pNrZXCpUXHZ2hhiQezHb+aSdNzg81C+PcCSpG/cxTFxMd4ciHMNmHL0ljACuZdCC84/5vGnuY2emGpT7XWnpis6Kgn5ksKbSxOSb/dI+FTs8gC7b8CfoS1ueSpWTfI+iLLde/OnX/7iZOLrMqk504jGDunv7Dx7s3ACwK8c1iXN5+/08AaOn10WqiWpo8IOxxDEGPCpiSQ3W+w6ZXIvIXbaUTjze4x8UAoMetJ4C4hK2eOGVh87WfBd6c/alfmzB/HnG4e4HX0tOc5i1myNGYZUlYaaWW2j8R8d944K7oijAY8LQ2f21Mhhf7xIwEwZK7daEa3isqVPGLqaanse3xaTQyvPgXUJ7JI1iQkajQkZY59QLlU3t8rOWtsSEPC0sNVKj2ttApNAXOy31+X2aB8071m86GbJNTWmP1zI7AVj2i9BfCJY3H1FjXvEoEv33deOhAR7W3DCvb7pjpBP/7RpLw+lrEo99ZDgiWHSEBP7X92Dt+JzEg1h+Ciy8rvu76TxTq6zqEKezymEbH2dpu9wod9nCqOdQ2UWD4anRI4rGZ2Y6y76/446mH9fxEgBnbf0Pw/zr8MHsc6LpSNtx3wOwA8pNzg3lWTzMkTtdThv9T60pn73TD/8w0773hpz5WhOUMp3m/pIq4rBciU5RLoq19caAJXKFbFvTxSVO8cJVaDq2sWc1bpYzNf2od/RDpCVFI7zh+ldSK3NsafZhT7CMAa3ZHoBhyzU= X-Microsoft-Exchange-Diagnostics: 1; DB6PR0501MB2038; 20:swu1vspGz/Z4k8Od1xzX9p+8n4oCdu4lEXxj7WpkM9rbetkc7XABumbo6bIz2o17q6+0RXJvxjC+jtD9uMf3X90m42JfNJML0xW9UCOH7bNoo/i7rtLCf/BvQK0ofzSFOoQQpcsir1VUrwvxeFm6pZ33B3ef+YAhV6gpnt8+TB/NkwBoTIIokQF4SI5wE13zLRu/WskRjYfRs3ldLVXzxXtDgUkgyvL7kT3nHhnKvKam9wnME4LsxNCpXEgabnAs44ku9t0G/VNA6OqJWOJk3a1Bo+lKHOpMConDdSMAt1YFMGZIJhTOPQzRLiIZlzJzM1bE9vZKPgbHR+Zpi4MusRRHO9VrK3YOrUrH/KFWnJNNghUcPMXpxCBdRlIuLv9GufayyH+X9nQYvKja4zushh2FEJXKhCkHTOAjdCxW+voyfqtpn4DFqRG6QhTDrdLk5j2yJgfyH8SFV6Y2KZeMGvw3Szcpg3ca81d52ys+Mblfc36mYb3zEfHTd1PxhjSf X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(236129657087228)(148574349560750); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(93006095)(93001095)(100000703101)(100105400095)(10201501046)(3002001)(6055026)(6041248)(20161123558100)(20161123555025)(20161123560025)(20161123562025)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6072148)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:DB6PR0501MB2038; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:DB6PR0501MB2038; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB6PR0501MB2038; 4:989iwC9x6OUuntBkTySsHpLnzPbX6GBZjBCtM9zb?= =?us-ascii?Q?gavoS9NZ5Vvs/FT/+2c/LHZsQwGW33UDepdDagoUaSjFRB5xiQhB8oT3UnDb?= =?us-ascii?Q?FDCTfkf2P3PJAPQuUCz+1Q/4X9WzWpyVxIAYMaqDQoV26kU/FSsRIQqwgk1u?= =?us-ascii?Q?5s56DjFJcxtlmzE8JKWrwbHp3u6jmmOLlnI56ZyE6rcpzxbQfysDu33gBFy1?= =?us-ascii?Q?3xhapqBa67LwOWD+J0hCkyv/RMYrycH0MQ2UwBptvAN7YQd010wFeev1md9T?= =?us-ascii?Q?J4kG+pjysoAPA/8AKlZBKX8h3rSVDjPMh0KLyO7PR6Lggn/LFlNG/KOBh1lC?= =?us-ascii?Q?eSLjxisfoD1BEAiy8VSDzMTGfGRCg8rIXumLvnXwddhUKst0pyGV6XpjxO1g?= =?us-ascii?Q?/Jh6IdqrwC3HCkmdOR/SftCfZKsuWRY5zMEs+0Ky/7NqLJquVMidVXetALLV?= =?us-ascii?Q?tABBL1+UtCL9j/vD8jVFvDUCiwPJoLG5zrPH51kY6YEleHFlZwpQmEi0iCc9?= =?us-ascii?Q?qVoIGkHGriY0hAkIATH3w9QClTctuTJ5nByDqbnir6e7MyoFmCGRY0J4YZnw?= =?us-ascii?Q?FFDYyzZv8h43A4rrKBcLbY6Jqi7x2gDzexTJpm9Y2P2g8VqdTWpA/7w9qgPx?= =?us-ascii?Q?HRul1jSrjWKJNg4aJs0WFyoUrPpEBW2oLoZDr07AIbTNTH6uFf3jVSh9ehki?= =?us-ascii?Q?GnvROGsbK9juVNj/11x2Zsocr5e+9cUNd3TTBivZFn7j3P0fpxaD0mEgPERW?= =?us-ascii?Q?tCZX2xGcsQaVYhqwCSqm5KLQOs+5NMJPNiC3CHUnpxFp0mohcoNSPhiw1avr?= =?us-ascii?Q?Fere9T4FH6NMHQ6ZqPwp0veD6AE9DDhMTj47/1rlB77iRJj4LfogUZj3OtP8?= =?us-ascii?Q?RwT0euz9bFT3PCiaoYa9qNfRGTYpA3t75U7VcBHW6hgLTg5QpBIKXc641YZa?= =?us-ascii?Q?hmkRT8iaz3VZof77BOycK8Pcl1X06ci0zGmeB6REO6L+moZt4LItUxbhYqcZ?= =?us-ascii?Q?N+HkaiQ7IW1XP7OG5SMZheOlwI2jMrRc7OzXZKoZcY06yRwNgZ89zTbHIAER?= =?us-ascii?Q?k2sCUtDIRl5nddQ9k4yszxoOK+hUiL8dB+CV1HhbXtbH3BO+buEAstgsut0X?= =?us-ascii?Q?6lop1AjdP22Xo1hfKTVilMvc1spyqOAeRJEAYocZ4IIbNDHjeoqMdtngoBg2?= =?us-ascii?Q?nC9F0fHHOu85da+jLrPpBfVj2PikyntbKogAM55W2FD2jIdawvhCf7zVMA7I?= =?us-ascii?Q?S1o0zfdcePz6iOF3F70=3D?= X-Forefront-PRVS: 0354B4BED2 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(979002)(6009001)(39400400002)(39410400002)(39860400002)(39450400003)(39850400002)(39840400002)(50226002)(118296001)(3846002)(6916009)(6116002)(305945005)(2906002)(38730400002)(8676002)(53936002)(48376002)(107886003)(55016002)(33646002)(4326008)(5660300001)(86362001)(50466002)(81166006)(110136004)(5003940100001)(2361001)(2351001)(7736002)(189998001)(25786009)(66066001)(50986999)(76176999)(2950100002)(36756003)(478600001)(6666003)(47776003)(42186005)(969003)(989001)(999001)(1009001)(1019001); DIR:OUT; SFP:1101; SCL:1; SRVR:DB6PR0501MB2038; H:mellanox.com; FPR:; SPF:None; MLV:ovrnspm; PTR:InfoNoRecords; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB6PR0501MB2038; 23:EvPs12oC26KD+Lf1UOcmK/h2mFmY1iZ/qmsQ7k4?= =?us-ascii?Q?+wDkpXVPY7klnxO3D0XqcM4NszSvyrv6+DymVh8jXyzm3IiaLI4ohOV0gHhS?= =?us-ascii?Q?sTVIyoECVIPEgnB4vS5C+F4481sIaVgbDP4PAC+YErvvii1dUcE6hWfSLEJX?= =?us-ascii?Q?v95aeQ80Gj4WcpU0xTEzCPyejVhpI7Yl/5PDVMW0g4mZ67o4nXtt7KHQOOYM?= =?us-ascii?Q?0S9xNhAFIfv9BTrhGmRI8WLGeAovMvwGLI9461+zkubZ4+CjdAYIhGL487YF?= =?us-ascii?Q?jnQoCT7FJXQsUzTJtf0hnqsgak9w+wqopwYbmhUBvHvstaQPG0Lzk9aky6z3?= =?us-ascii?Q?vtvROpuy9faaA7tCvCKEEOjzMB51dzdGW5J9n7/eSOulPxZN9Nzp051KKuYX?= =?us-ascii?Q?rSmlNA4Wktw1ClEuN+uPTKxKK+yD9hzTKA9ecXmbR+c3WScxpCEW7TwDrCSw?= =?us-ascii?Q?HsaMEzOoRUg3sDSIMLMRk9/n4gFzHUMVDPT26g5vwdn+BG0T/IuGl05aRkwZ?= =?us-ascii?Q?VRMCmgJgyfXjxbkuCH/n1PPVW0QzfRYciyRFteoPv6OwuTaGk0nhwq3dQmWE?= =?us-ascii?Q?tIsY4yRGUEBEuEb5I2fM/a3j60Vr9d6oGgusb/MBJRfom/T/OdRthXLIJqKy?= =?us-ascii?Q?MbpvPmQNCN24jLA6oFVO3tJvdC6wfLW/wQb73/aL+KvfPJhp8zlve5YSV0A1?= =?us-ascii?Q?EcF/XNOQRXZaEdNSfnAfMCuI62Xc2LDUVq13x9vuPaMM/f5OVWY88clwD5KY?= =?us-ascii?Q?fYMhHDDAgj8zRfhVdOuPhzUzwmfCEPo65nfxqqSukc8kb2rZR0gvBuvsV0Yp?= =?us-ascii?Q?ZTDentWZb8Biq/+cZ+d74wfKwvsoMbcXw7WZqP9pFjSoil1ylHXr1SeDWJ7T?= =?us-ascii?Q?umHwXal8Ty6qswkhfPSXNztldFGgumxtQY9RkG3IaqtAwQwbpHUeTazrQLOS?= =?us-ascii?Q?fv0ng3qt5Vc4op7x7A68w/L3bhsuVx0R2OdZkqRajbdV3ek5i2RGGyHGJemy?= =?us-ascii?Q?l2kldTIk8+n99D4G6S0v/7c1d6qStXJY38fD5/YWv450x5HaDONK5bhthHS6?= =?us-ascii?Q?ZiM62cnDix2OMiZKgN+mbT1PECMbZpe9/h+WcAAeDIn4RFI8n9dE6hQOMGXi?= =?us-ascii?Q?j8TK35JZLEdixwqolT/nmbT4vTjTKo/QB88bNGoqUoxcrKPbejTkgNdIe08p?= =?us-ascii?Q?nL1avQtnk/9vBgtBh0/Zo7PCDfTTUXtJkRCYh?= X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB6PR0501MB2038; 6:euFm30WvcSpILdzf8vR2slx6fARMEfeurhMil+mU?= =?us-ascii?Q?HzSyTsR00Iw0pt2vbT/n+B7MUfuuZzTxWLQ3HH4C8vF218S/2QTlzY6xuMtX?= =?us-ascii?Q?yOUs2wNjkUl18k5DQ2FuL+bNXqXd4yzywuXtF/ejUaV1lYaAPVKSP2o0mSMj?= =?us-ascii?Q?NQ6VgNV3H69S4oa09ZAJWLWZHa3uHsTA7j1EAZwNwJk9hobGNDuppWal4o+i?= =?us-ascii?Q?Yw60gFizglz5Z35XcL6rWSFxrJuFbDFvixgcQREYibn2ywbhpfi5QLh7rkzL?= =?us-ascii?Q?MRBZLIEB9ZgG3Vpl/I7L7rsc/hNAK+UdbdFuqLbeARKewwQzQwlavDc/IgkY?= =?us-ascii?Q?3mF9cG8+bJmf7gtMGtUFGqU1l8Z353Iv1ZgGOJnbESztiqD70YQwrbEBQAxG?= =?us-ascii?Q?cLELJnwC0FZJUpkWHCO1vTcHAwiV6cgf+Db91zaC5BXzBRyW6fceju+R/XSz?= =?us-ascii?Q?55Flh/E2dfmjGEihEBiOy1SY3povXJD7uuX8Q0EYwXTQt6oy4HnhAsOcnb9F?= =?us-ascii?Q?G/FU7D7kL7rXNSHY+3IUDKNEPg2mLY6hB3vVI+UDDCQ4bod2hvaN+eVWWLI4?= =?us-ascii?Q?JBkBc6U1i0ou1Ne54IJy4mZMaWU6QoDAC6h7wdjktR6fo+RW6wuMb4Q8yXrx?= =?us-ascii?Q?1bgR1ivlf8oBUdPdpDbMMm9FY9sIW16ce6pb85bivI4+SdJ6Rl+fQX5p85jg?= =?us-ascii?Q?p+nO+DCNLBDJgjf0MkQv942Zqp0s4vnQ4EOUE5lge867/s5dtveUYQrY1JIs?= =?us-ascii?Q?Y2kFaTAVkh79r0NnbRu6KK+vJxSB8+sZqb3SceMp3N3nEDQ3pFUAlVmA7HGi?= =?us-ascii?Q?ROhlLljaeWunKgHnMb0aU4g9fZr9h2L4X3beA65+ZnMjex7QrcFHNja4xRqS?= =?us-ascii?Q?2pkYtNL/4TfZW2LqKXgQSrQg+jWWHSnkwRAJPPnp6hxrCHsWwa+20GAXu1mR?= =?us-ascii?Q?di5kguwCBH4TyCTyHAK8ZBdlt2lSSY+7h59+XrXbBTIyV3WtpP3nS57uIpfF?= =?us-ascii?Q?5DcotVuEAEKrj9ap9JxcbrG4?= X-Microsoft-Exchange-Diagnostics: 1; DB6PR0501MB2038; 5:iNZaFKrQmx2W9YuzI4IKMnYeRgq8/K6m0eE+0HqvGlj6llnllN86kyn+NBNcewemSJbhN7x+L1sV8pU+HtPP6JU+J/uza88XfpuASYAVLofPOjsJI5GK8X86zdwYCcIyfVMylWV7yh7271FZnYgbtBVnKJKSsE5mmjdUcTGilkm2mAnV+NWxE1BmyT/ToXqgSjv744nD2gVCw9HdJCLmrDm89yXg6f3aycaFGc+wlkjwDzf+XiEd0/uhpXlINTkNucrczYlUO5lhzj5AKiIbe/3YnLXIrq7khOnsLc4vsYQI+GujKwSiZSudvEc3jffwiJkuIvqbUi4vIMEM7rukR6K/XfQsK+0i/yCYc2cnp7tthUjBDYx3LImm1eHdVE7rGXb0ZeXf5kuslLAGvKCY5yrefBQqdknmDtKBlCZzR4JGEEfwy5mqPQmSk1nW667Mrqev8/kVCFlKGFXcQWXjUUVGCvbOLTYRBtY/fVKEdmEQG+L7Zb4/DQpe1HkxDBzN; 24:zEXmH4GOo1HDRevcQmB22HAevgpkRoSIqfFq0N1Z1Zt5kWdRSnY+5RfU7pRFA9dvj27LNSuZDBBlp3CTpRsTyBGgp+9fBKyZVlG4lqRYoqg= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DB6PR0501MB2038; 7:XDNzNJouqyRbryv50IvRfOefigzDbb1c1lujLKv5wrk8FIhlW1KeNTZ/SvVqWVzlehcbEfjCyAwpAvGCun8pi7LOF6XS2V7A5JHcLP7YYuPlE1megAk8uKE4W8YiRtnH5V0iVC1qta0B2rT9u+IzdQjfaxJW+XHg1pVajry50KUEfQRBusxZHUe9BdWwq7ztCtyEJ6V5Tp/5OD8xne4WbfZDH9C7lF6lcVqLy5gPRHaB4OsADnxl5feGu944AQibNnjna1V1ycJDw6DC4fXWDspxnG/Kl2se9xqknqSwxcHokKyHmrbFPX9Q58qhnFqMh+TU5v7WYFa/RZGb6KDv4jfyUDuuwSPRmxTduzrIoaWROpkC6nHpw9hMF8Q8tG6OMPHusuytDuyrrlWzGW7BgRu/RHSgQzIPa5TTXVtHZd9oSLjlbmzEGRwZo9up9H7QWZn7BMrMy7RWYSqPebHsMpc7PQaJ4xKENokYlVpoyXbWmJwK9wHVG5HzRyarhGExp3luKDMUgeTAzYl/bvZFiykbfUHxCi1t+W2Z3ZfP1IKWmumGcli6QTf/qBq1FkOAoxdytImsLOcNMQYgcJA3cn4dJzcgtdGPFolUXskmZo8vhoIJx9CgPGyoNCZEwXWSSfHOP2OJ0EGyddYPHgVYANLNQzM65zMKCJ9gTXadiWPEU5vZ2mEil07wGW/NqdZIsj4kw+tJ+GlrRnPciF3vnakEc4WA0bhlc7RXTEnnwgYCHur1/Bx1TQYNZjuaoy9YSAatuUzZvXJgMe6i9YNUqODnpMbHPv8nkGidWb7bBv4= X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Jun 2017 19:23:47.3028 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0501MB2038 Subject: [dpdk-dev] [PATCH v2 3/5] net/mlx5: use buffer address for LKEY search 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: , X-List-Received-Date: Fri, 30 Jun 2017 19:23:50 -0000 When searching LKEY, if search key is mempool pointer, the 2nd cacheline has to be accessed and it even requires to check whether a buffer is indirect per every search. Instead, using address for search key can reduce cycles taken. And caching the last hit entry is beneficial as well. Signed-off-by: Yongseok Koh --- drivers/net/mlx5/mlx5_mr.c | 17 ++++++++++++++--- drivers/net/mlx5/mlx5_rxtx.c | 39 +++++++++++++++++++++------------------ drivers/net/mlx5/mlx5_rxtx.h | 4 +++- drivers/net/mlx5/mlx5_txq.c | 3 +-- 4 files changed, 39 insertions(+), 24 deletions(-) diff --git a/drivers/net/mlx5/mlx5_mr.c b/drivers/net/mlx5/mlx5_mr.c index 0a3638460..287335179 100644 --- a/drivers/net/mlx5/mlx5_mr.c +++ b/drivers/net/mlx5/mlx5_mr.c @@ -207,7 +207,8 @@ txq_mp2mr_reg(struct txq *txq, struct rte_mempool *mp, unsigned int idx) sizeof(txq_ctrl->txq.mp2mr[0]))); } /* Store the new entry. */ - txq_ctrl->txq.mp2mr[idx].mp = mp; + txq_ctrl->txq.mp2mr[idx].start = (uintptr_t)mr->addr; + txq_ctrl->txq.mp2mr[idx].end = (uintptr_t)mr->addr + mr->length; txq_ctrl->txq.mp2mr[idx].mr = mr; txq_ctrl->txq.mp2mr[idx].lkey = htonl(mr->lkey); DEBUG("%p: new MR lkey for MP \"%s\" (%p): 0x%08" PRIu32, @@ -265,18 +266,28 @@ txq_mp2mr_iter(struct rte_mempool *mp, void *arg) struct txq_mp2mr_mbuf_check_data data = { .ret = 0, }; + uintptr_t start; + uintptr_t end; unsigned int i; /* Register mempool only if the first element looks like a mbuf. */ if (rte_mempool_obj_iter(mp, txq_mp2mr_mbuf_check, &data) == 0 || data.ret == -1) return; + if (mlx5_check_mempool(mp, &start, &end) != 0) { + ERROR("mempool %p: not virtually contiguous", + (void *)mp); + return; + } for (i = 0; (i != RTE_DIM(txq_ctrl->txq.mp2mr)); ++i) { - if (unlikely(txq_ctrl->txq.mp2mr[i].mp == NULL)) { + struct ibv_mr *mr = txq_ctrl->txq.mp2mr[i].mr; + + if (unlikely(mr == NULL)) { /* Unknown MP, add a new MR for it. */ break; } - if (txq_ctrl->txq.mp2mr[i].mp == mp) + if (start >= (uintptr_t)mr->addr && + end <= (uintptr_t)mr->addr + mr->length) return; } txq_mp2mr_reg(&txq_ctrl->txq, mp, i); diff --git a/drivers/net/mlx5/mlx5_rxtx.c b/drivers/net/mlx5/mlx5_rxtx.c index 66593679f..688ee9028 100644 --- a/drivers/net/mlx5/mlx5_rxtx.c +++ b/drivers/net/mlx5/mlx5_rxtx.c @@ -77,7 +77,7 @@ static __rte_always_inline void txq_complete(struct txq *txq); static __rte_always_inline uint32_t -txq_mp2mr(struct txq *txq, struct rte_mempool *mp); +txq_mb2mr(struct txq *txq, struct rte_mbuf *mb); static __rte_always_inline void mlx5_tx_dbrec(struct txq *txq, volatile struct mlx5_wqe *wqe); @@ -352,7 +352,7 @@ txq_mb2mp(struct rte_mbuf *buf) } /** - * Get Memory Region (MR) <-> Memory Pool (MP) association from txq->mp2mr[]. + * Get Memory Region (MR) <-> rte_mbuf association from txq->mp2mr[]. * Add MP to txq->mp2mr[] if it's not registered yet. If mp2mr[] is full, * remove an entry first. * @@ -365,27 +365,30 @@ txq_mb2mp(struct rte_mbuf *buf) * mr->lkey on success, (uint32_t)-1 on failure. */ static inline uint32_t -txq_mp2mr(struct txq *txq, struct rte_mempool *mp) +txq_mb2mr(struct txq *txq, struct rte_mbuf *mb) { - unsigned int i; - uint32_t lkey = (uint32_t)-1; + uint16_t i = txq->mr_cache_idx; + uintptr_t addr = rte_pktmbuf_mtod(mb, uintptr_t); + assert(i < RTE_DIM(txq->mp2mr)); + if (likely(txq->mp2mr[i].start <= addr && txq->mp2mr[i].end >= addr)) + return txq->mp2mr[i].lkey; for (i = 0; (i != RTE_DIM(txq->mp2mr)); ++i) { - if (unlikely(txq->mp2mr[i].mp == NULL)) { + if (unlikely(txq->mp2mr[i].mr == NULL)) { /* Unknown MP, add a new MR for it. */ break; } - if (txq->mp2mr[i].mp == mp) { + if (txq->mp2mr[i].start <= addr && + txq->mp2mr[i].end >= addr) { assert(txq->mp2mr[i].lkey != (uint32_t)-1); assert(htonl(txq->mp2mr[i].mr->lkey) == txq->mp2mr[i].lkey); - lkey = txq->mp2mr[i].lkey; - break; + txq->mr_cache_idx = i; + return txq->mp2mr[i].lkey; } } - if (unlikely(lkey == (uint32_t)-1)) - lkey = txq_mp2mr_reg(txq, mp, i); - return lkey; + txq->mr_cache_idx = 0; + return txq_mp2mr_reg(txq, txq_mb2mp(mb), i); } /** @@ -770,7 +773,7 @@ mlx5_tx_burst(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n) naddr = htonll(addr); *dseg = (rte_v128u32_t){ htonl(length), - txq_mp2mr(txq, txq_mb2mp(buf)), + txq_mb2mr(txq, buf), naddr, naddr >> 32, }; @@ -809,7 +812,7 @@ mlx5_tx_burst(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n) naddr = htonll(rte_pktmbuf_mtod(buf, uintptr_t)); *dseg = (rte_v128u32_t){ htonl(length), - txq_mp2mr(txq, txq_mb2mp(buf)), + txq_mb2mr(txq, buf), naddr, naddr >> 32, }; @@ -1051,7 +1054,7 @@ mlx5_tx_burst_mpw(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n) addr = rte_pktmbuf_mtod(buf, uintptr_t); *dseg = (struct mlx5_wqe_data_seg){ .byte_count = htonl(DATA_LEN(buf)), - .lkey = txq_mp2mr(txq, txq_mb2mp(buf)), + .lkey = txq_mb2mr(txq, buf), .addr = htonll(addr), }; #if defined(MLX5_PMD_SOFT_COUNTERS) || !defined(NDEBUG) @@ -1297,7 +1300,7 @@ mlx5_tx_burst_mpw_inline(void *dpdk_txq, struct rte_mbuf **pkts, addr = rte_pktmbuf_mtod(buf, uintptr_t); *dseg = (struct mlx5_wqe_data_seg){ .byte_count = htonl(DATA_LEN(buf)), - .lkey = txq_mp2mr(txq, txq_mb2mp(buf)), + .lkey = txq_mb2mr(txq, buf), .addr = htonll(addr), }; #if defined(MLX5_PMD_SOFT_COUNTERS) || !defined(NDEBUG) @@ -1604,7 +1607,7 @@ mlx5_tx_burst_empw(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n) addr = rte_pktmbuf_mtod(buf, uintptr_t); *dseg = (struct mlx5_wqe_data_seg){ .byte_count = htonl(DATA_LEN(buf)), - .lkey = txq_mp2mr(txq, txq_mb2mp(buf)), + .lkey = txq_mb2mr(txq, buf), .addr = htonll(addr), }; #if defined(MLX5_PMD_SOFT_COUNTERS) || !defined(NDEBUG) @@ -1687,7 +1690,7 @@ mlx5_tx_burst_empw(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n) naddr = htonll(addr); *dseg = (rte_v128u32_t) { htonl(length), - txq_mp2mr(txq, txq_mb2mp(buf)), + txq_mb2mr(txq, buf), naddr, naddr >> 32, }; diff --git a/drivers/net/mlx5/mlx5_rxtx.h b/drivers/net/mlx5/mlx5_rxtx.h index f9b738b4e..51e258a15 100644 --- a/drivers/net/mlx5/mlx5_rxtx.h +++ b/drivers/net/mlx5/mlx5_rxtx.h @@ -267,10 +267,12 @@ struct txq { volatile uint32_t *cq_db; /* Completion queue doorbell. */ volatile void *bf_reg; /* Blueflame register. */ struct { - const struct rte_mempool *mp; /* Cached Memory Pool. */ + uintptr_t start; /* Start address of MR */ + uintptr_t end; /* End address of MR */ struct ibv_mr *mr; /* Memory Region (for mp). */ uint32_t lkey; /* htonl(mr->lkey) */ } mp2mr[MLX5_PMD_TX_MP_CACHE]; /* MP to MR translation table. */ + uint16_t mr_cache_idx; /* Index of last hit entry. */ struct rte_mbuf *(*elts)[]; /* TX elements. */ struct mlx5_txq_stats stats; /* TX queue counters. */ } __rte_cache_aligned; diff --git a/drivers/net/mlx5/mlx5_txq.c b/drivers/net/mlx5/mlx5_txq.c index f0729a2a8..ac9dfc5f0 100644 --- a/drivers/net/mlx5/mlx5_txq.c +++ b/drivers/net/mlx5/mlx5_txq.c @@ -149,9 +149,8 @@ txq_cleanup(struct txq_ctrl *txq_ctrl) if (txq_ctrl->cq != NULL) claim_zero(ibv_destroy_cq(txq_ctrl->cq)); for (i = 0; (i != RTE_DIM(txq_ctrl->txq.mp2mr)); ++i) { - if (txq_ctrl->txq.mp2mr[i].mp == NULL) + if (txq_ctrl->txq.mp2mr[i].mr == NULL) break; - assert(txq_ctrl->txq.mp2mr[i].mr != NULL); claim_zero(ibv_dereg_mr(txq_ctrl->txq.mp2mr[i].mr)); } memset(txq_ctrl, 0, sizeof(*txq_ctrl)); -- 2.11.0