From patchwork Wed Jun 28 23:04:01 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yongseok Koh X-Patchwork-Id: 25900 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 34FF558CB; Thu, 29 Jun 2017 01:05:28 +0200 (CEST) Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-eopbgr30070.outbound.protection.outlook.com [40.107.3.70]) by dpdk.org (Postfix) with ESMTP id 072845323 for ; Thu, 29 Jun 2017 01:05:22 +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=KlxrJnfYJmIUVwp4sJPpo/nmMgjTaUMvGOOVvgbTHPI=; b=r/4Xo8KjOsIJxCtEryxQ8KDNO4Lrp+RZOZleHnmadEI8IR0BkXoocXWQ7lEnYLo76ZI5IlAiiCN5o6RlvzFGMjIJULci/H5+P1NAj4dZke+qtcIea9OxAY1n3k+7Ga4QiQUMiO4ESs5jo0Sg0G/UoWJ1CyqwaucQnKsQ1AN6EAM= 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 AM5PR0501MB2035.eurprd05.prod.outlook.com (2603:10a6:203:1a::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1199.15; Wed, 28 Jun 2017 23:05:19 +0000 From: Yongseok Koh To: ferruh.yigit@intel.com Cc: dev@dpdk.org, adrien.mazarguil@6wind.com, nelio.laranjeiro@6wind.com, Yongseok Koh Date: Wed, 28 Jun 2017 16:04:01 -0700 Message-Id: <20170628230403.10142-4-yskoh@mellanox.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170628230403.10142-1-yskoh@mellanox.com> References: <20170628230403.10142-1-yskoh@mellanox.com> MIME-Version: 1.0 X-Originating-IP: [209.116.155.178] X-ClientProxiedBy: DM5PR21CA0024.namprd21.prod.outlook.com (2603:10b6:3:ac::34) To AM5PR0501MB2035.eurprd05.prod.outlook.com (2603:10a6:203:1a::21) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 6033816d-152b-4dcd-d6dd-08d4be7a26a0 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(300000503095)(300135400095)(48565401081)(201703131423075)(201703031133081)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:AM5PR0501MB2035; X-Microsoft-Exchange-Diagnostics: 1; AM5PR0501MB2035; 3:K3dChbIWBv0JSbEBdmza/8+SbUFvEE2+BsjM1sCWDKtgVUjMyWUpyRTxo9Q16tAVdhPqVv4qluJcqNasnM+w5PI24lSpxkr1ts0+myPloECKprmiIcDIqcuofDoTeiCYfQ8K7qVbeyWW92qrCSytDbsxW7LcWybngjqeeOY72GvOCO0kWqE1TpctDR8b7Ffrv5Kxs+K3KoZjBYmioQ67bWNPItmwSrSGdE2v1z7g/iZycggULNzf9plXpYsndnAgXdPSPG3lR+umGhFybD2T7JwlY9eqzyNndoMEmpy1yoFPCmajtrYynUIOPCCimuYIj7UPfxagSIen4ONpRSM4K2OJ5/G3oueTfyz16qEgT8RmGn5yVH0EhdBw3Afm+mwkNvMHeOBiB9CAG0iRH8omq4H00e0u5w+SG4j4HcwZJghHNOsRvMs5LMCmhIzh3EmxOeR0q0y3XQ3aWKI8K75XWs+Q9DW7+Tp6UYUCNz8JjrR6J6uOBiCf0nXPCPMymquCx49GIqRrIeVUdzWTO1R2Oz7wqKRvzH/PFjRxZ7p16l7DvmLIhlUHgVS8PdN0+paIqR1i4aOeYxXlPHmzrzcRKg9w7QHAfEfvO/s2b7cxqCkUW/L3uctXR3CiUi+C+BIcVCJ3No6P/bKhALzuFUa6MseWWVcweDjCGQFR8V+mcZqX+ah+avRgoCLc3USLs5pm/adLl7JsW5224tdCve2NViWDkLzK6Ugtxd3vZhQyMk2UlvkEr+/9LHKlKp8COFK2yr3QZfCIvGOC75R+jQJOIQ== X-MS-TrafficTypeDiagnostic: AM5PR0501MB2035: X-Microsoft-Exchange-Diagnostics: 1; AM5PR0501MB2035; 25:u8AGnA33GgzpxcNzxHm/G7eotQAV/FMBKZe4yS6sht7zk1umvm5lK97RAM3OtJqRuzQAwUFsVspDHD1jimp2c2ELH9p+Jg6oEJZIQ37Zzk2CvgqIFmsjLwZBaBrBHoZst2jeHggZJxPYoJ9t2gTUyVUiLE2tnCKTlpCizno1MWMK8ffPjXIpuMMiy9SNHONm81A/EiuJkMbkyiyK3VqX9NGjh1Ik2pUoTNWONobjCTWodEQ4EuGJn0EmlC8g7pGliEFFGUFb9OfgTzuCLq4cqyH8A71MxD2Mbke9Cjg5nounjSEErq2O/n/wd3eegvwuW5i7HmH+tjxXbCApglxBmGOm8Mt58hdi5msVc+xTFi5bEsgIjLWtqLGoA5HdgDFj3d5NwBqr9FQVOgd31bRbGxqBNvchT85rCyLEy/upgX5V+coeq0mDkCqlO2LJ7gd/HXfYOLMuBcj7f0tZ4vHArh5YpwxUfpt2t51mzxdyQGLqHtI47OjJeh6kt5UgpKX8Sdfgje4kjf0jTaKCOX4pApUfbKtPO2NkEvlfyD6yJdBCemZF74/uALqgayRxPiwMyQsIuGeDtObTYnaar+o2KD4Nsi+J8qmM3hLek0IoJm68T+RcuCSZvVf1cKQa6YKpX91MG54mUfSAHdT5XfKjzmGrdWoNo3uzf6nZfdG8KwIshx+uCrA6xh64FeCwEUhv/gzYgdlhB7f7rySMNPaAISgTR19klJf02ZeA3Qe/66GmPxFK6IkNVosf12nZkHCNGAdo+hZk9npUC+CnSQZ24egSPzm60Z3ioGiM/YmxvuOM/wvxQzsC/vbbhOdeA1FgB8LZg3sNZ3ZLmaOxsvrU1A3SHtyQEGuvalhFagalWoAr6aLaL3cji/W34cpPdxUKM7xSDzVAqvUdTH8xvItlFueEPGMpOqRuNBZfFfBzqbw= X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr X-Microsoft-Exchange-Diagnostics: 1; AM5PR0501MB2035; 31:v+0bYrcMGpJBGysGFqRGqzb3uwboWEwmtMmtYz5MY//tSQmWiCEXhJ2NU9cjc2E2h/RiRx3GzlwzS8bfvMs7wtHF6KwIlY5Lz6v4VcMlHjsYwBE/z4HdP3C9cPtJm07PazauMxnXRki0RuSV8C1sHwxh7YbyKml4UOkXdzJO5Y+DWSGyWdv+6EYBun4alhdUhhMy4yq5Yk318gkDhj6wNfowHbhykI5QUZiGCUVzgQ7akBVB5AJJ5nFb+ihON63dwljij5NNAZIVnHYX+QIFNjWhDqqKTmvbGSPyhBJdq5wmrImqDkqjk+1Pnoq4rs0JD11D2SlH78foxu2EAw37FvFRzkEK53ii17AC97S3wMCygwFVL37swIOKcbqqFf3MJuwDjGn++m0sU7tBCcnW8lsJn6cObn0wjDZ8iLHZAAI1lp8zk4ZeNaTBHTq0VhVfr7XA76S5kWdANzjl3KUv/0CjU1whmNdQlikBN1FEN5fWne5FERk7vzoB4Vi2URTXF8UqUMxJucMEUiV7ZuzUn7td2Fu7XRS1/nfLUnyMGl4HjYKBfc2hs6QkiwEalQ0GTOp7QgF87Nc10XA5v6vtzo8gOiwml9DVRPbELzYP8QWLtEuBtmuHXJQohfHTooICSwzk3UeR7wGKqdZExIlcqmldWkel3PQfZcKoafX/aRZAiR2oB9aTyeghDzY3lLPSfX3kv8JcmmOUoSAYY3CFuw== X-Microsoft-Exchange-Diagnostics: 1; AM5PR0501MB2035; 20:NUPWG9vRTGEb6hLna47VmIkI5Uk3WTcNzGWCk5r02iFLkLTgc8tcrrh7HmrGDe/09KXl3XjX5adIU5KsofN5Y7k/4js+e14QzyCmHSX/RjRXSDA2bbqrLH3Wj94gwEo8klwZdRYBZ4tfxSOda6uWE8uZZKXtorYYbl4bG+j5ILuNr65+IbIIQ/dWbE5M7PAbY4/KpEh2LX5Cw7BSxYmHMCVXlzw1k0a6FfuHc9XlHequK81k5CiFA/f166ANLNkh1hs//7/d1KL2jKased+3jm3L4k4raTg7md4YN9mUWp/m5P6c2qm61dSFuzxI1Hu5w4zaEJfe4NyzrZx4WB0RjUg81Gjd6trWduTeGuH5BPbh/bfjL6qWHVVoLOvTf2iNTluCRx0vyU6xL/v4Fuhhbc29uuVcOKOVDeVhlnPD3jrOTtY4FhuRyZtQxUicNuxk6Zs5o4tXWfldrQUB+Q5gEiOorYnHiSLT+hLMZn8EOFNZgZdoqRpqKevo8fU9z+IH 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)(10201501046)(100000703101)(100105400095)(93006095)(93001095)(3002001)(6055026)(6041248)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123560025)(20161123555025)(20161123558100)(20161123564025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:AM5PR0501MB2035; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:AM5PR0501MB2035; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM5PR0501MB2035; 4:FNozNGh+cwtMspzvFjFAN8A8LtkKDzSyZD38Ibe5?= y6OQDUhrzjWjN6H1daPEIf5+R4C628zfRv+Eq/pQgnPUxhvOF+mWOd2Rzs9eWikobjuXDpAH3vxVeHQ3wcZ1XIpkMPq6Mhsc/CRUrJLXoGJOKimSjj9VUvqWE23Zc8+ziocYrlwNXtZm9b3YTmPmLs9oIWyFkMbxukng+Cyp/V0Db3uLzm/dhORyFExy+/te11CaiSlwTis+SfmZE3PgneeDXNKz1o7eFLp9gk7XVNMr3KUynzUWP3o5Kdb7+oSPK6eVTialGio9Fgmqq/9UBa8DY6v5baZK6VxJAiRyW+mg5g0wYos/TqPvSVyjEaUBut9kmTr1KVzY6CD9PkGHzZbkQNR6ZS2C//PQrnweG3ph56wH84FmKN1gYABvrBWU9/+OE+5vW7JrbafGayRKsRZ73kw8oO2AWU/7Lsai5V1rz07hvKPcwEjYXn0vWgp/dE82YNDIrDs4+JW/uZ82Y8ZujfwFzBI4OiVVDRDkwA5OPs2yRYpfPFThxDnXsDquXe0DiClwEnStTzeEIFQMamPvqA08b6a3hR8CwZWrus0eYxVCMDr+2B3SfPm84h6yEqGCF1C8+Bouu5dhc/nIcbzL5Ul1tdCRXbN++ws9kkVFZ5OFiK5D4mH+7EqySBzx8vVBmWKuvj8NczGDOwgZ4+8Z7C8zjWvYrYf/dLCBhVpvupLUsMJ49DrIYE4mgF4rsMCO5pQHIfJVY3i4G8xVQuVSCp7sS+hHsXEWH/mL2n1q44fHVvsrDY1BkXQlcACc6PXOIyr2nCGB/41UaTi97adnIzdg1qB8+BEwha9BJfqFXtIy6gYpLf+M000xnSUiVdk9rNiaqImOeHEoReVA6ZvltBh8ipSmtazIB8bA05/Igj51FMenkTdpBi+61PxGqZ8sDV0NBnX4q00Dew6C0qgF2g9/7tGV2+YPQPyu8pNm/KYsCMcLU6Pi3/kvMzJ72y5UYq7WGloBES2qJqBm5KuS0nGof154LNW12UjMc94lKmnC0d8FAtZqAcIsMFyq45cRWkSP0SlIKjXHhqq3P1Dwf1deRXx261TDMVUvoOUyQTOcQkfhrbvOidqNOspFbj+kd83UJUKIHlSsaMmbtdJTP3MKoFATap/XzTuPHD2prEoP2coNMpBv3Dzc7W649kMRanKo8UCuOStHOC1TjxH7v6Aj/SQ06O/CdYGiRw6qRThy0+FZ9s0KRHbQa/3xuxI= X-Forefront-PRVS: 03524FBD26 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(979002)(6009001)(39850400002)(39450400003)(39410400002)(39400400002)(39840400002)(39860400002)(107886003)(38730400002)(50226002)(1076002)(3846002)(6116002)(7736002)(478600001)(4326008)(2906002)(6916009)(2950100002)(55016002)(50466002)(42186005)(6666003)(53936002)(5003940100001)(48376002)(33646002)(110136004)(2351001)(2361001)(189998001)(86362001)(50986999)(36756003)(81166006)(8676002)(305945005)(76176999)(47776003)(25786009)(5660300001)(66066001)(969003)(989001)(999001)(1009001)(1019001); DIR:OUT; SFP:1101; SCL:1; SRVR:AM5PR0501MB2035; H:mellanox.com; FPR:; SPF:None; MLV:ovrnspm; PTR:InfoNoRecords; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM5PR0501MB2035; 23:aZ/1b+oMauNNJf1UcAfa+ubVrXmOzzWU991yZcF?= 54/FGjHI69g4ryVuPobBCWTINdFtdYGGQ09FfZ2s6DhBdrGsqqYGEQutW7sCceAFvL1TpLBCAgaYUy5i2HMS8gUGf1Pvn6XUxIFYlwjsO7oIRnf4BycjdytfRIykFoi5bdfFdPV6DsQxUtSDA4Z7NCike6/XQCv9DDIPZQa+tVrTY6GeT8G31zJm1ErOHrsYdMPWvcfijHu/12diwfrWvmYD99MmYusiAAA0uE85OGm3jy6IAkeGVdvNPK5eikoMfyWX1drFbNAXgqWNxoYSsMvHcwvJFfO6j9qJjyRZi9Y/DfGTHjpT3N9HGziLSeonyHr8y8TVgpnCIhNK6OnyB/zSO8czMt2DqGCyQOTkR/PrcJ+kaCI0MxtjzKuJNjOYr13AA0/Ka5YGbYhaDtSyn8qw/d2rVXkzD8+KzfDe+ticOXxs7T73FiGfdzDXPZgYoCw/94JCQ0/IcgjZuxVuUxM3RpFccBH2dcHHn1oZ7VvYik9qQjPQLNWlxR0xSclD3EUStEYfeBOFpYfgpJve6WyCP3ZjNolBhmyYx0zqs73x6Yytel3mq/6V44upogdVXrXP2IUFys9M0FMWqNynbQsJcLTnX20kzOJuyWfm1vom4zwlOTpw/A1qgf4ozBqEHi62p5Bk060NPB6jyniSJWinUxtU9z6mgaa36ZtsKUWKzykNc3RzWoUYcayAf9KLTt1jhS6lh7PC2lZMSZ8hPb6xd337JhmFVe6CZVNSoo2S+Qu26Bxq+LzyhJwmn06qrnjZWDP4Ak2iLK0LIVqnPGUj1I5fpQWHmzXeyoZBkg9YkHtrnVjBErT89qBUWI2Ojy0y5WwphhcvsXbOhez+RZe2wpQKDNZujlKR0yklIt2+mJLTgvAp4LiLbzOD+0ddL9d3NmrIffuVQBZea6NvbJsts5bVlutpffeoTGhodGYOAMWeicnLoKHHz+mM5++lBLaF3zYFoVMZDbKCHsgUB94AWlTy/U/XCVeCWTHlzU3xHguj7GueEsGSkLyHzHUjM3hGKhZTVIOQHC0sdgq1taoazAZhY0XJlakZ43efAX7mBIGJEHQnZEHqE/h6i4mQZ3ON7oJ2xMDt2VXvJYnIevXLcHHzY4UHzLBU4KpJc0mMw2kbgUQz5+MSR0FixLsejU0A= X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM5PR0501MB2035; 6:V5oWlQipzjkWde6GzyDW+Sx5aerWD74c4BZfSpuQ?= CNINOSBov6tMntoQKpin+I7kGLHtmCqT0fpxaHDX65YKQfXl5RXQ+TAblAEQqanJ5+FozGF83q8yORP6qIxSDSREFV9iyQGgPgTQjeB19sLEUf5iECgOtoJ993iGqpLjKaS9ZkS/0kxIDMCLYl/FzLkgdFfS4lj4g+if7leFOtFAp/c+q/dePFMLaC+P0vr7TJf1WSXiOWGuiggDlOrNaX29CIMwK2aPmy89bNjPLtraFBZcBkydM5wrNr20Ezk6ZafPwsH4E22bNNxa6Ae2jvdzrn3dh2fVhhzebukgVS6zMstyNwTGGxqgJ5usbXzFyOPTxwYl+ZLBLB/qTBn7nXUzVgdvKNhvj93BHbFBDzbFf0i/SEZVRdOnYWKVLoTMkuTs3s7WpOk1qcvALWjWhk+astIB2Ybm2AOUaqQnjkNQi/3WFHnyWZnAtvkRzKUJ3kpOni4Z7mN/ArryOjmU3Tjv+HVSgPniE0czDKbklgiXBJ5lP1wCksqG1MnTVYbAjiDc3FyggOyA6d/JXc+eAyKWEFj2WwTVjQorfDrOMUxFactN1uWo5q5QZS89AAqo0F98CkRFTi0q17jljX+yNYX3R4PvQXtf6yuMFb9F7orICO8B+pBc9PDubc6IZo5ZbqId/3AqKcajgvhi0JYvVv1lF76rUU/l4Zj2C1y3nrQ/Apa51jZSUcEl8pvpfPEdPuGwDYTQqy81+95z958G/XlG9lWQTrlocvJe/DAAfO0upbtFO3akz/sE0FSLr4B71Zm1kMOodK9XErbELp+jswtx4/t3D09jqtxPO3RRB55r7KRXg36SJbciEYS8tE4h0SpPzmampYqHKrh0/A0DH7kYRABjLJNEgScG1vS0NIXv7U7VvqAhteu8Z+a19i9kFGzZ7AUctkJJZRKUhg4cmlYSMrganA2b3hY5bEKTzNMqD/ADTePZuQz06hFnbLuA3FvmOU4EEpVR44gL2IKFNHkD X-Microsoft-Exchange-Diagnostics: 1; AM5PR0501MB2035; 5:UvKAypmbKFjXwyC0DYk4ohg0atCQdFrC6UGJ3PaQtqIR7XEjZQ1EyZIAvo0PjT2IHoE9UbLAzD7lRJgKar+sjiXPi9bslwkl0K5NIFEhTEU7ln6EQdsDrRRNkTT6PfTDU8x2yEBQ6HHaehEdcGBHIbk4dT0xgjSfQ03a+B2J4NBAPHpJh8WDhAXqwTDF0WUh3W52M0tBlUWDgiu361kOt9kIp+m3LG7PqvPpXEysO5JesyPNl6ZWCcOsx3zzzhRW8ZVgnDGBCZDdjZlBK8VmgRwbHPjl18aRPyOXCMxRS/rLV+WiRtfar4W9T25egkvDm4O7g26wcvAYKoII3AeJTThtLYb6G+dGqxKxEdfkxRcfkVZpHh8B51mkx+d9LBQQC4Nkc8Gz5FxblYvpEQxkackIGHGApQPniycm8hVTsyinORTIXva3kceXbIjBbnjvUnLkVM6DIGhsBEtp01GALJn4oARgj5WREhrDZ+8NuCMqJ8w9mbmTMD+jrkiZTF3l; 24:tdvbfFDdRd+SvWukNDTLqy6U1Xbafa/8qMmyaGeyHk8oZGwZ9Ft3bEkObBRYbf1sSgbGCwtzlaM5TAH/27r+BR2k6N5iTT9rOouSTo2XlgY= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; AM5PR0501MB2035; 7:ahVkJe4306wNOLNLV1v7UJ8rwl32rhFWDwPN7+g39f2yG4/rLHhWSZJL1hTmCgbe1Biz9Kh04E8p4jhGZ96xDD5v3nLt/DhvQWbPbqnfaSwpZyHNRAG5j7v2ZgvN2GeyOpRC3ovX3PaF5IokjRh+YZ782KOULIt6AyhbszbpybA5A2itopxs5tiurAFHuUGPEpKkue4n3OD9hBDGzWkwqMe4ShgdZyNLZW7ZIVIPQJPYsQa3JdE4SqekqYGy2XRUlKr03bgU4J5kF3QmzMdMJ5TOPTg8UStWnaq5T63JSa1hMVQownZQ/5aVsRGwCS4ptcg2q5T2r1G6yn8R6kmoUc+dDSCJ1IniQoVWiB/SNJLOplSpi+HM7FvPvTvdizDgrOZVY04KWcbpa20zT8/IjOeADah0PGaRz8xSX9oogq32RouQbOVSaiQoDAEGDTZTPZZHHK7Sq7G6n0eO01ZigVSbnIe6skMQt9IuYVgt4eiMIRval2UJ/QknCl1WmkaLAXvYkS0V6FnXyzu/bxi/wvDm0/r0i7jFT6eHg5T5fm6vG0NePkca80DUAqyAORR4wFCr7W+FG0xQ9xJmk9Oq8FAUnEontqQWnnuk6FI6ivzzm3j/VPCYI5PC4q3vHwRMz2lBDIbCN0xbOLOULzf/iiHwfbh7NHU9ebUIDW6kD9dtunCg9UcMS8VHde2/FeFm3F7UeurLiYJr+rUg/6WbODFBtn9mU985R/ZV6EQ+eFQo7o1YxAMuMdVrILtdW1g/Q0Vsgls6vUtjCpTiMQHfv/UXzsZfCi/WGedDiwlLN6M= X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Jun 2017 23:05:19.8194 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0501MB2035 Subject: [dpdk-dev] [PATCH 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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 | 2 ++ drivers/net/mlx5/mlx5_rxtx.c | 37 ++++++++++++++++++++----------------- drivers/net/mlx5/mlx5_rxtx.h | 3 +++ 3 files changed, 25 insertions(+), 17 deletions(-) diff --git a/drivers/net/mlx5/mlx5_mr.c b/drivers/net/mlx5/mlx5_mr.c index 0a3638460..f2484cb06 100644 --- a/drivers/net/mlx5/mlx5_mr.c +++ b/drivers/net/mlx5/mlx5_mr.c @@ -207,6 +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].start = (uintptr_t)mr->addr; + txq_ctrl->txq.mp2mr[idx].end = (uintptr_t)mr->addr + mr->length; txq_ctrl->txq.mp2mr[idx].mp = mp; txq_ctrl->txq.mp2mr[idx].mr = mr; txq_ctrl->txq.mp2mr[idx].lkey = htonl(mr->lkey); diff --git a/drivers/net/mlx5/mlx5_rxtx.c b/drivers/net/mlx5/mlx5_rxtx.c index d81d630f7..5cc38ccb7 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); @@ -355,7 +355,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. * @@ -368,27 +368,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)) { /* 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); } /** @@ -773,7 +776,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, }; @@ -812,7 +815,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, }; @@ -1054,7 +1057,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) @@ -1300,7 +1303,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) @@ -1607,7 +1610,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) @@ -1690,7 +1693,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..a86f41abc 100644 --- a/drivers/net/mlx5/mlx5_rxtx.h +++ b/drivers/net/mlx5/mlx5_rxtx.h @@ -267,10 +267,13 @@ struct txq { volatile uint32_t *cq_db; /* Completion queue doorbell. */ volatile void *bf_reg; /* Blueflame register. */ struct { + uintptr_t start; /* Start address of MR */ + uintptr_t end; /* End address of MR */ const struct rte_mempool *mp; /* Cached Memory Pool. */ 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;