From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <Santosh.Shukla@cavium.com>
Received: from NAM02-CY1-obe.outbound.protection.outlook.com
 (mail-cys01nam02on0075.outbound.protection.outlook.com [104.47.37.75])
 by dpdk.org (Postfix) with ESMTP id 636622B84
 for <dev@dpdk.org>; Tue,  4 Jul 2017 14:33:39 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version;
 bh=2XcJbceFz4ihf88lZfA6q0m32CKB644rqsj5dhBk2us=;
 b=KjbPcw5Bw+O86Lp6a2DitjbcbmpTi07WEIHPHz5oUl8NIo/6ewb0Q0KgKdNvCmRCVmX8JUX4S37wWDmxy6A1RCzsNerH0NbYQy6iW2zhlSwoZe9WzGF6XtWkiU6XG77PZUGnPhMPGVt+S5o+Te/4jvOk1z/LSGILcviEs5/oGM0=
Authentication-Results: caviumnetworks.com; dkim=none (message not signed)
 header.d=none;caviumnetworks.com; dmarc=none action=none
 header.from=caviumnetworks.com;
Received: from [192.168.1.101] (106.209.135.7) by
 BN6PR07MB3089.namprd07.prod.outlook.com (10.172.105.7) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id
 15.1.1220.11; Tue, 4 Jul 2017 12:33:36 +0000
To: Olivier Matz <olivier.matz@6wind.com>
References: <20170601080559.10684-1-santosh.shukla@caviumnetworks.com>
 <20170601080559.10684-2-santosh.shukla@caviumnetworks.com>
 <20170630161254.36730e2a@platinum>
Cc: dev@dpdk.org, hemant.agrawal@nxp.com, jerin.jacob@caviumnetworks.com
From: santosh <santosh.shukla@caviumnetworks.com>
Message-ID: <cc652b91-5b7a-8b04-a6b0-eda04c1d3b0c@caviumnetworks.com>
Date: Tue, 4 Jul 2017 18:03:20 +0530
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
 Thunderbird/45.5.1
MIME-Version: 1.0
In-Reply-To: <20170630161254.36730e2a@platinum>
Content-Type: text/plain; charset=windows-1252
Content-Transfer-Encoding: 7bit
X-Originating-IP: [106.209.135.7]
X-ClientProxiedBy: PN1PR01CA0081.INDPRD01.PROD.OUTLOOK.COM (10.174.144.149) To
 BN6PR07MB3089.namprd07.prod.outlook.com (10.172.105.7)
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 7bbb0ab9-347a-41ac-3c74-08d4c2d8e505
X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0;
 RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(300000503095)(300135400095)(201703131423075)(201703031133081)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);
 SRVR:BN6PR07MB3089; 
X-Microsoft-Exchange-Diagnostics: 1; BN6PR07MB3089;
 3:OWQGPKp5+k771oRlKD9XleWxzURhpL+JgJ+3MAh+poVtyvlnSFn9EPbDqUKMDDvKhPYWWbQbsoaONqeL7wfhLlGW3sQIw7jV6ZQhwBVQNmQlSqpPnQoyAUfy87LZ8+fNbb8B7qtrcvl1EL17jS/1JMeNrW6waUqsb/IB8shDFNNRJIMe0Hp8+1yS2jf4RnN3ylzwT4ZxzUb3tw0f1fDPvm3vcRbNWANYFSpYRR5wzD7FyZtcXm3rxJTHpt+jszylwqY2b1zr9B7Tat9rg8kFWwTf7v+MU0qwhT7LgJI58Pt+5VSSKH/NVF5LPfghc9zaPS3Z3kHazUMLZSUQ3un4zefc7CeigQrGyFeGdr3gbQAWWAHCnWRsbpOxnFIdERNF4PuDhGx26uzfGH5rNpEBnoA+1f0TsBnz3GumuI1s2D7LHj27exS2igV1VpQNuCfkvIZT3J3yBEj2AtSjIsskD3Zh3/2bEvNNac7oXHDVoznctKGQJ3w50MGwmkTaUY+oVTh7hQC1gSftCScT28YWQwT1vylRCdRZjHOAMyCT44m5TViB30uVFiw7vaed3LiyJNoKZ3F8DdU7kNAGgd3E0zUGykLYUqRVZTaOmIVQrb5H2k57+/MyxVUT2IG4R+3avHZnTHjyvyafmBRsN4erje6+KcjgI9nBXujcr4nF3ejLTK0lNQStH0GZ/dVMmo1itma91NEz+xUgo0opNADqTBGW4CpzvHkZL9y1yxesu208CbFBt56sfTzPQbj2kFpI
X-MS-TrafficTypeDiagnostic: BN6PR07MB3089:
X-Microsoft-Exchange-Diagnostics: 1; BN6PR07MB3089;
 25:UJinvAjQFSWQKVPHZ6mAO+2FsPT78oy+9507OM79KNUva8ALvoeaCIJdWn//G5SC9ClM5NoOuyxOIx5cbTgYZbFq4H8xuc9KzXttMK+jJdhvzKmCm6RBTUOotIaHC9cEzU+I1n4Ouw30kPixHoUu1D33PLcjHTHEKCBc7QOHlfgrZ5nBm0UlpDsXfGCE2R3VlJQP6E6/BmxuEQyYGg2NFR2tTX+4zYVnrGA6iJqNEUNF80OlA8KIROndGqAeSbEh1MzfDogCZDcPgU8VVq7hj/LHtSFl3nXwY6GTevnvQYB6FUL/bM8jOdo8dhpoC9BmZ9eiS2BNUghNVxWRydfxI+4UL6H3FImP7FRDc7+OMnbnOUiYXB2k7soV6HYWUfkss9osrhX1BjJgDQMPkeJ5rV2Vq0YOukp9Y26mX+H34bEqLHqf4rH3rxd0r241BAoIhgomyaps8d0+X8Cw3B2klu08pz8ckYI6Dn3e/IbDI+mOiOkBmpHtuD/bPb6TCHV5gddiAqAYcYwJG2QBz8FS8ps2GWAswDEdqNPLmfPc9ag7LNmcG6/9pdZWJcb/1/V8SYE1Mi9odG9Wy2BStOFQ74XMvFSY/0EREiLzlVSGPgzdYTthNCaURKpVinJCxxW+NG5+WOFiy/12LoDd7IIM94VlFoYDAX3P+aux3yCyQSUd9Y/g+KZxqh71D795vo1D/1xtR4FZmB7eV5Sj02nnT6FOGcf99QfCvBRWRFYxXS7HGPi06Y8NVIl+icz7HQB+OC0NrKpqDAe8FoGIhcw1UM83QOJzvUbfy7stJInjx8oVXsbuxYVPK5jMhxh1XdVXAdSG90sAHwINOSMpLR9aFEevtADJTCEdeOoRB7/3658Ahwzn/kqv/TwB1jQj693g9MT00TrWtaM/Gs/hwV68A7pqg7nC4Uq1Y/bM9ud4FiM=
X-Microsoft-Exchange-Diagnostics: 1; BN6PR07MB3089;
 31:qhNpGOffpbEcbTVTjy2zQ0IKwHU5QuFt2tdHGuTCGKMqo9FxWKIfnHkkrII54i5i2XrHo9kquZ9a/3ARuOSnumc/r9AEuS8d/03NLwLw32kpFzu7D46FJV7CuL/o4BBezn0oWCHjh+gn/Z60ylPBxMkamGMWwD+sH/KmQBMvlthhEwKKuA4glktGrPMh9PiaPxK+MAhnd6OTdKf5EQXCN33quBJC4jUthZZelqsB84VHKmBD2YAsadURhME+9skWhMo747+neBLckR95Cgw1f4tdANNCmgea77f8ODDqUaUVdVAgQ4mUreh4YMBD/PPGao9A1CfgwOAykNSqbdUh/LXNWbaElHrpc7vQJZ6U4frJjyXyIe5dYh/qI/W5LrCtF+N1CnQ1irir1rvtMUQto6+j6EqxoQipF7xSUI+xp94yzPVUw2AsItM7pmHllSOTRko4Ng8ON1ILjNI0lu9OJnO5SDoAI84cQ2VYQkOOGuXOh5H14VRDmQKCTeN8k65HnWycNHUsLDRjmS9eG/e89OEF+qWeImOUQTFDSE4s1fVutb4wT4YHRUEptriPMXTOgiL+9mKfzM8vS8TEJJi9wjly8M+hOAXYvmQX01jBZv/tbd2EaQW4nm9PgCc0km4ummUiHpiEXvktb+/scjH5mddzX/3KWl1KAWCSg/jDl1s=
X-Microsoft-Exchange-Diagnostics: 1; BN6PR07MB3089;
 20:40m9+bMfaxm9NM3aLqgB1yOyuDH1/QnfzbzSKm2fPR8322G2jpPh3U+wT1fumKcuHKLVt44OUw7gTJC2YhnJiA88lMAD1TUxtL6EerQyFMH+9s+wU6jol6F1QkjmrbtfT3hhXE14TNC8bHXoMIwGhT9Ce4FY0zPte3L0nmVmb8gTphvr5e8fpwhCci7EqlpRmgZrpXzfxsq+GMVxIeUjcASA7jzD2y9vsMWojmR+yixIt7enS29b2g/Tfu2clz8lS0Yq2hLQ4ayJa20H5caMPWiqZi7ytVxinQgau26TmUBfsjzEKx94FSgOkwCjbj5t8MYONteTEi7D1K8A1qbGFKGER+fuM4Y9CWyO4hZhz9GxLiZZzU2s31bS1+9mnb/giZcfdAZXMflckmIfZCgkmD27cP99WtuKhGZR7YLt0IEIIcvgIjYOoaBXXKMxQpfVmA1eq2BSLSQOifXVGYBjxaegcdHhFJMbVRIn43EdyYWNIYyPqYA9irT4PQWHoIqF7Ul/862qzVmELvMdfU1xXJuN7boOeckAr6Ag/kILeG6JWRYE9GnCWvdaOsJ4bfgjmzds8rdQpRdH0/y4Lyw+qQ2zMit0TlFd+svZf1QmRJo=
X-Microsoft-Antispam-PRVS: <BN6PR07MB308994C4104F40BB1495AD27EAD70@BN6PR07MB3089.namprd07.prod.outlook.com>
X-Exchange-Antispam-Report-Test: UriScan:(133145235818549)(236129657087228)(148574349560750)(247924648384137); 
X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0;
 RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(100000703101)(100105400095)(10201501046)(3002001)(93006095)(6041248)(20161123558100)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(20161123560025)(20161123555025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095);
 SRVR:BN6PR07MB3089; BCL:0; PCL:0;
 RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);
 SRVR:BN6PR07MB3089; 
X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1; BN6PR07MB3089;
 4:0Gci4W2rIGVpxYfdgGHTWW6SLG+yjA/YWa4c4n?=
 =?Windows-1252?Q?Gm7VaU20IFW2baeztEge9qHs9vb8Zxm6qZaUDAsM3GiF+OmaMtlifrIc?=
 =?Windows-1252?Q?L+izgyF+dKhPmbsmxIf7+VzVTQCaqaZpOVY/l9N8PWtZ1zbGXtgOF/4v?=
 =?Windows-1252?Q?6frcUIQM5r4PBv3w2LPqdJEPWhUPawXWEx+AKX6KfZas2CgoZC6b/d60?=
 =?Windows-1252?Q?OR9r/Lg+uTUvKbf5Uut7CYvBYhYS17CN6Rlt4cvmGGjXBjcutjOWfbpp?=
 =?Windows-1252?Q?YP38ZHQ8zXa3XeH3joAUHsqpjEnHmY5mNCZjQOupRycALubaiTlWWxNk?=
 =?Windows-1252?Q?nZG8ttTeE7SLo5Arux7POWyoQaGllU14gpUCZ6+sYCQ/Qxhno6xuPz8A?=
 =?Windows-1252?Q?my5Z8YpEc3X0FDIp/CogObLBec4ankUfrvORc3mO7bWn0KH0py/UM0S7?=
 =?Windows-1252?Q?VJ3KHfDy+wqK0IPs7fnF+loXhnCEUGJSCKDBDBCkTRvrZX9fQ14V4bc1?=
 =?Windows-1252?Q?jFw/wEC8gJDk54dO7HHw+IHyMOybMhxMfwRY8ytgp3XsbTTFXpXhOoNO?=
 =?Windows-1252?Q?5rmXo21kVYZLwpU+BCXfeFjPykuz0BG2329LYVuMdT9+xhj/99WXkDrb?=
 =?Windows-1252?Q?HdvLHyyD0Z5kFWTh7XniPcTK8SRoPZT8GDRGDgVss/6p9s0iuzJX10+D?=
 =?Windows-1252?Q?WX+UOHn8On1F+DghB7gxrMfE98/iApdj4G+g2P/UqmbXpmiYWWAdngxv?=
 =?Windows-1252?Q?Z1DZ7XAnHVRAlTXby2PQ4+8xUq8jSM1yXsfG/WIKKnv86zvpHtssZg8k?=
 =?Windows-1252?Q?Jg0EtQOwQCOaQTYh6rM3D96r61Ybc7Uu43XdLnuRKAk7SDAYTC0JfeuU?=
 =?Windows-1252?Q?CEtBDR0MF6AYsfEBpm5elBa9/CFhTW+DFDriE7r9vntQdIB4Hydy5+e1?=
 =?Windows-1252?Q?3KX7928BJmAfoNgNl5aZMTvVM7eXmuQGzw933WntolO9XD2LqRRq1Lt7?=
 =?Windows-1252?Q?hF/wL7xuBZtAjRARwv7MfL5XR+N04seiMRZ68tqpGyjP/kCjp32E6hyh?=
 =?Windows-1252?Q?q2Ol5io2E3VckpQhstKYIlON/CTDjd+uQUvOa+raNSi/Yz9hUSg2Ez3/?=
 =?Windows-1252?Q?jayCH2431eiSpcNLiP5a9DR2z5hWONcZFHCk++nv+hrKNZwaNRkF9d7T?=
 =?Windows-1252?Q?W3D9jCB2KGQm/NrLwQsAxZxSelx/7G2q8ouRjPTBUGJK98iVvnj6y6Rf?=
 =?Windows-1252?Q?oRor+She7w96AYyryW/sCX1OhMvNg9d/cUPICqmaHiuyccNtDj32Yoq0?=
 =?Windows-1252?Q?9sKdnm9UGB/W/K1WPGcHAXCRYcaSQ+1gOcb4QdtYYPcJDHT0mKifPTWL?=
 =?Windows-1252?Q?H5qw4ZREG/?=
X-Forefront-PRVS: 0358535363
X-Forefront-Antispam-Report: SFV:NSPM;
 SFS:(10009020)(4630300001)(6009001)(6049001)(39840400002)(39450400003)(39410400002)(39400400002)(39850400002)(377454003)(24454002)(50986999)(478600001)(54356999)(76176999)(72206003)(65826007)(66066001)(23746002)(86152003)(8656002)(4001350100001)(50466002)(2906002)(3846002)(6116002)(5009440100003)(5660300001)(230700001)(7736002)(38730400002)(31686004)(4326008)(6916009)(6666003)(110136004)(107886003)(53936002)(42882006)(8676002)(81166006)(189998001)(42186005)(305945005)(2950100002)(33646002)(36756003)(117156002)(47776003)(25786009)(31696002)(575784001)(6486002)(229853002)(77096006)(6246003);
 DIR:OUT; SFP:1101; SCL:1; SRVR:BN6PR07MB3089; H:[192.168.1.101]; FPR:;
 SPF:None; MLV:sfv; LANG:en; 
X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1; BN6PR07MB3089;
 23:3qTUJ3OE0QSgKSSuTIsGo3Kp/YGQjGiVxPh8N?=
 =?Windows-1252?Q?dYoetuLCq4JLzmvatnUoYMD1TGA6ZR8e1oAl2yyBGAqIqZ7tOLotTMaP?=
 =?Windows-1252?Q?WTJiOzL5M0TgoTqPQYdLjwilYp3ZdgBeCQqjVdJ9ju6cf+mFOXTRKUQI?=
 =?Windows-1252?Q?JTe1PIMK91M/MeiXWLrvFHOhUhtoMEVZbIVDi43nGhiJI6NfOnLZgcrp?=
 =?Windows-1252?Q?ylNJbE3l/qnGGv3f9THqkyjdAyObajKvW2lW4b/JZ65qx7dVc+odBnkn?=
 =?Windows-1252?Q?3tp7oziZ8AFi329qfL5WGNQ9Yy9VGscY5qlmuxCKdTpRLzaNC0t1Mjef?=
 =?Windows-1252?Q?bRJQ+e0t7C73apod1RT3/X1WNqxwshFKj40qPEhgs8YoSD0VmyEJpdUF?=
 =?Windows-1252?Q?FQquEiDALX6fnxZdBFyhfZkxxFELLW19KOnSRXMzWgOrvwaZhWimUd6T?=
 =?Windows-1252?Q?ciknVyaUgt0Dd13+q5LWiMdd0jFhn4FtPSeuLyt7rSvN+ZkYnn5vYd28?=
 =?Windows-1252?Q?X6YXq+AdAu+UEuvaAHTUo398UKDQBdRaSJtIAx+xnCNpFkKoPlaDoHr8?=
 =?Windows-1252?Q?m7iCWVZViyUibLcuOsPFLOecc+WdmWuoMtEnZ1rQNtVd3bC/rpN6az//?=
 =?Windows-1252?Q?3oa5CNTWaBAm3hhlGd6D+Cf8bZ8lq4lxal4t4nH2uqGDk3E8RsosSLfS?=
 =?Windows-1252?Q?J0XWFEHl+PA5XtvhgiaSBD2VQVIsxhMDzz6BPyKkXkr3fwNOYYn2inFx?=
 =?Windows-1252?Q?KQmI/pZo8OvOXRNq1E5NyE8Ys7fDi8HhdR/bPaGpF0y7umSdZmOxv6EQ?=
 =?Windows-1252?Q?YyRgF38bV6UUHlOcpoR90NNKwViqUedGjr0UJh3HCBwb9rnpsxqLUCco?=
 =?Windows-1252?Q?SxsfY6TM2P3IrUvVVhNWIV93mpVUz0f+BlE9OPcyogqGRYMsVo6/Ha4j?=
 =?Windows-1252?Q?+MUN4CCh2lNDqVhjYsadXe++RtvqyhD0gZHKxIjpTzi4M3RZCDWTOjaT?=
 =?Windows-1252?Q?RAC5WtJ6EELLF6AoVzn7ntxuydNtdWsFovgPgZxvrZ12nqAqLUGMa2OK?=
 =?Windows-1252?Q?hMj2alcqPhYMbVLA2dJXN89OHST/jdLi3CcP2jy9tktmzBcSUkNk1/Qi?=
 =?Windows-1252?Q?p93gw8C6C+Igo+qcZmb2cb2WOSjpmwJfdYvB3EZ45eL2DhGaAr+G9QEN?=
 =?Windows-1252?Q?Z4MTZ95gshsnRqxomcrhn0PgV/UxIyCAgTxw7VoAApIzCC2qE/4yAdro?=
 =?Windows-1252?Q?qNJHAJ4DUInfaUpgINzAhCDwFHPncznc8Clw4GdEgNzpWlw39PPb6N0p?=
 =?Windows-1252?Q?cNfoq64OAhgTFU/EQG7aVhmGrY86f3/CLNf4lMCm5Rj3OPPCMntezGIH?=
 =?Windows-1252?Q?sIAsfa0kfAzcZpjA4FMYdYZNPJeFgz5g2+jq/muaRma+z2GKFKPKzoZS?=
 =?Windows-1252?Q?RnvCJPqcQ5HO1MyDrXjIgeMRWl8XNLDPMCPmOUxKA=3D=3D?=
X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1; BN6PR07MB3089;
 6:jHQwfV0egzBGQN44JvqiFPUWBVnFRVWuEmFu+e?=
 =?Windows-1252?Q?GB0QWUhJl13PkEoAgvphT7ALaSEqGw4EWphPpq/K85jAa/5fpn7SYstY?=
 =?Windows-1252?Q?bUOgr2ykx3251z5kjsXpHevJKxOgs6/e3IY2WbLEJeFa4tkMaPo3m0m3?=
 =?Windows-1252?Q?ZfRDxqxG6DpARdTQ8WcGURpMwI6WHeTieK2SvUJZJ+KWz1FEYvJLjqW/?=
 =?Windows-1252?Q?RpQqZzcrM5aHMgESfq6RHajShRBFQBv5IIl1RNpkYmzf3fc6AbRFtGpV?=
 =?Windows-1252?Q?ThXqNu1IfDCCRQgdYEarsri0lpQoDYcP0ESOzmh0y2pD/bifyE8DMZr8?=
 =?Windows-1252?Q?/9jrYqUE0ZqrgtNn1ik8iBO44lWQGhnHAJlKIOwb3OmtwSKy0+3M4CLE?=
 =?Windows-1252?Q?/1fJCxJV6GceMVxdxxXNAk5vtfphagGvvdsl2c98oCpxVFWh/MK9fLnT?=
 =?Windows-1252?Q?Ak8m14o6xxCNfjfKhAXdWbxFCJOR4WFwQ2EqoizWs5qOwMxlz7SiIj/7?=
 =?Windows-1252?Q?rJJ4KrfSHRbmff+0QZcqBMi8Zw6pnCsS3VQeZyuf/hKlhgz8BHnfmnf9?=
 =?Windows-1252?Q?LfEIENF3wfXzHY9zC3rt6cIdwGPa4ihRSHXHAe6PVxYjF7dW8WbT8Gej?=
 =?Windows-1252?Q?RdmCQ4BGs270gFt/lGgkE7p11qz3jbyf1m4Ts5QrMRGOLn+kc+FvIXcv?=
 =?Windows-1252?Q?Ko8Y5IT0o5zU3buKst6/0ex4BQY1PaOs6BR2p4n+68inD7osK04Aw+f9?=
 =?Windows-1252?Q?UezIz/5z7/v5NTe3NJEHTtg0UGTRVBACOxy7rqXMvu8gp6ocy2YdGdnr?=
 =?Windows-1252?Q?/D0GtLlsVid4gtgNeBBO3fClE50AoDXDsft6G1AKP/ixFNS4RNLAW8Lh?=
 =?Windows-1252?Q?m0jEve8DfXPS+IZuf8LEAy7FPR5MoRfBq2+zXYCVi5fHDuchXtUvuqGB?=
 =?Windows-1252?Q?8AwVpP+enthzk428f6CIpknHdClxn8IIDOQYNfLfE/2OjduqA0ZrJ+kt?=
 =?Windows-1252?Q?OkXiBiT0paMLxT0mRaIef4Gf3ZAl8vvNSEAsDx98JwOBFnCiOTFDDUom?=
 =?Windows-1252?Q?nvL5SbuNrBiII=3D?=
X-Microsoft-Exchange-Diagnostics: 1; BN6PR07MB3089;
 5:m9I031NuXlQOoyuYxzOpQ7u0dvkx/5NkDAvGuJOw03xLCM7CkYGlo/MswQa9QhRFHEnyDwOYGxNSVbUjrQE+Z2BNsUtzKfDmEk3D3xK+PljP8VMq7yu3b/swcqIF7dGQEgF7G2V8IS3LqBmzqDZMuaizwDtxNjDm/Gqapmd2w8sP49Om3cGJCgNiU/brOealOPaC7s8FHZZayXAvhqawpKSr2p0IEjimd4KTkbk6k2XR5oRdHqnO5yTP1aZQevrYc+QBHiyz81O3P6AERvYiLwCsHl3xZLdENZ6v1e23LMJI0uFc15ogIP+Mu27x+nwQlC7moNz6ZLwi3qQBoPBUT2fqKLeJT9eMlf5+bXz0dp9TlmzNks317wJHF7S1XYR+3L34w6PW9U6OwjZjbZD9HuMgaEmGpNfdyFc3IL0nZRQbmwK47/5T102VZZ75IipuIeQvn31wQugmZs9kGnciEziX+aquqQPGxG2j2QGoPU3f+D/Cm7OKTBHy3aNnJkTK;
 24:g73+sEX3qAiuAGlOhbVKi0eIKWGwHA10Fl7aHpYIiRvstDoMJLGatIJU9Ztj2rWRI6m4HfQN5xz5hTXy/yX3jCqvols9EM0eRdDNVb1BkAc=
SpamDiagnosticOutput: 1:99
SpamDiagnosticMetadata: NSPM
X-Microsoft-Exchange-Diagnostics: 1; BN6PR07MB3089;
 7:2fPt1mCquRiLZNa6pQwR+g0ySgtAK2Ednk6sWYH0IvgRenndLYRXGDEiPm4obm+RCO8YN7ifYaWwGekiTUbj10N5SQ9Rs4P9l/Vh2xfoaReGifPerGGTewrLTrUQYpxVcmxBvi542sKvrSCCx4zTY/YbvErzPzfycQS1S8C9MfaF5Xu/J9WIwMT678V0Gm9vzpBa+sI+aRqP4uX/8TtyIbkrPUAmaCH4QUWqIRrlom8FGe4ZgEAQi95WWyQ2SfezyjQDfS7kGs7vILSO4xlmTi+DN5UxvWb93KNcrtISH4etUM9pZRgZCZP8QCYTpd/9hm9zdrbNW4qbBiVbm22NPtXTh4uAC0pgihrD8xiPc0ZeahM7B0c10sUSeAOszHUDk7ANMKaXsGi0rN/3uqtXolYAGjITnM3S7VMKMkarwe6ivjfDW5bBuNf/4lr4TDlZnHcIUCJy1lGpDVElWxA4m6aCleiRgzhrnx+EhZYiwpLl788smLg8eHdgod2w4O2RBji+M6mg3ePqwlDT7wLkAY2yCCCXsuj1jPOzWon0Vd4mMSdTHPn8Jdsx+wHB/K1Y8Htpa3kN56JQsYXDPyjm382F6v1UC/9HuCvtSMLYs+Mfk6IUsXfuq4lfyFKr4iXalxp4+znGitmnvrV4gIi8o+/tjga8GasyNcc1GdPc0ugvRndvXgxN8Dfrsm9TFmCJzzZLYU9Aj9+EEAwArPHThFqUDsucEXanZ/ge5mQcfBCi1zLlNcdpfA3xYPirMsy3HKqB4xW1kJDY58w8FyiCfP5T9US+mUOPuLiGAG30iOo=
X-OriginatorOrg: caviumnetworks.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jul 2017 12:33:36.0413 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR07MB3089
Subject: Re: [dpdk-dev] [PATCH 1/2] eal: Introducing option to set mempool
	handle
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <http://dpdk.org/ml/options/dev>,
 <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>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
X-List-Received-Date: Tue, 04 Jul 2017 12:33:40 -0000

Hi Olivier,

On Friday 30 June 2017 07:42 PM, Olivier Matz wrote:

> Hi Santosh,
>
> On Thu,  1 Jun 2017 13:35:58 +0530, Santosh Shukla <santosh.shukla@caviumnetworks.com> wrote:
>> Platform can have external PCI cards like Intel 40G card and
>> Integrated NIC like OcteoTX. Where both NIC has their
>> preferred pool handle. Example: Intel 40G NIC preferred pool
>> is ring_mp_mc and OcteonTX preferred pool handle would be
>> ext-mempool's handle named 'octeontx-fpavf'.
>>
>> There is no way that either of NIC's could use their choice
>> of mempool handle.
>>
>> Because Currently mempool handle programmed in static way i.e.
>> User has to set pool handle name in CONFIG_RTE_MEMPOOL_OPS_DEFAULT=''
>>
>> So introducing eal option --pkt-mempool="".
>>
>> Signed-off-by: Santosh Shukla <santosh.shukla@caviumnetworks.com>
>> ---
>>  lib/librte_eal/bsdapp/eal/eal.c                 |  9 +++++++
>>  lib/librte_eal/bsdapp/eal/rte_eal_version.map   |  7 +++++
>>  lib/librte_eal/common/eal_common_options.c      |  3 +++
>>  lib/librte_eal/common/eal_internal_cfg.h        |  2 ++
>>  lib/librte_eal/common/eal_options.h             |  2 ++
>>  lib/librte_eal/common/include/rte_eal.h         |  9 +++++++
>>  lib/librte_eal/linuxapp/eal/eal.c               | 36 +++++++++++++++++++++++++
>>  lib/librte_eal/linuxapp/eal/rte_eal_version.map |  7 +++++
>>  lib/librte_mbuf/rte_mbuf.c                      |  8 ++++--
>>  9 files changed, 81 insertions(+), 2 deletions(-)
>>
>> diff --git a/lib/librte_eal/bsdapp/eal/eal.c b/lib/librte_eal/bsdapp/eal/eal.c
>> index 05f0c1f90..7d8824707 100644
>> --- a/lib/librte_eal/bsdapp/eal/eal.c
>> +++ b/lib/librte_eal/bsdapp/eal/eal.c
>> @@ -113,6 +113,15 @@ struct internal_config internal_config;
>>  /* used by rte_rdtsc() */
>>  int rte_cycles_vmware_tsc_map;
>>  
>> +char *__rte_unused
> why __rte_unused?
> I'll also add a const

ok.

>> +rte_eal_get_mp_name(void)
> I suggest rte_eal_mbuf_default_mempool_ops()
> It's longer but it shows it's only about mbufs, and it is consistent
> with the #define.
>
no strong opinion. In v2.

>> +{
>> +	if (internal_config.mp_name[0] == 0x0)
>> +		return NULL;
>> +	else
>> +		return internal_config.mp_name;
>> +}
>> +
> Would returning RTE_MBUF_DEFAULT_MEMPOOL_OPS instead of NULL
> make sense?
>
ok.

>>  /* Return a pointer to the configuration structure */
>>  struct rte_config *
>>  rte_eal_get_configuration(void)
>> diff --git a/lib/librte_eal/bsdapp/eal/rte_eal_version.map b/lib/librte_eal/bsdapp/eal/rte_eal_version.map
>> index 2e48a7366..a1e9ad95f 100644
>> --- a/lib/librte_eal/bsdapp/eal/rte_eal_version.map
>> +++ b/lib/librte_eal/bsdapp/eal/rte_eal_version.map
>> @@ -193,3 +193,10 @@ DPDK_17.05 {
>>  	vfio_get_group_no;
>>  
>>  } DPDK_17.02;
>> +
>> +DPDK_17.08 {
>> +	global:
>> +
>> +	rte_eal_get_mp_name;
>> +
>> +} DPDK_17.05;
>> diff --git a/lib/librte_eal/common/eal_common_options.c b/lib/librte_eal/common/eal_common_options.c
>> index f470195f3..1c147a696 100644
>> --- a/lib/librte_eal/common/eal_common_options.c
>> +++ b/lib/librte_eal/common/eal_common_options.c
>> @@ -95,6 +95,7 @@ eal_long_options[] = {
>>  	{OPT_VFIO_INTR,         1, NULL, OPT_VFIO_INTR_NUM        },
>>  	{OPT_VMWARE_TSC_MAP,    0, NULL, OPT_VMWARE_TSC_MAP_NUM   },
>>  	{OPT_XEN_DOM0,          0, NULL, OPT_XEN_DOM0_NUM         },
>> +	{OPT_PKT_MEMPOOL,       1, NULL, OPT_PKT_MEMPOOL_NUM      },
>>  	{0,                     0, NULL, 0                        }
>>  };
>>  
>> @@ -161,6 +162,7 @@ eal_reset_internal_config(struct internal_config *internal_cfg)
>>  #endif
>>  	internal_cfg->vmware_tsc_map = 0;
>>  	internal_cfg->create_uio_dev = 0;
>> +	memset(&internal_cfg->mp_name[0], 0x0, MAX_POOL_NAME_LEN);
>>  }
>>  
>>  static int
> Or it could be initialized to RTE_MBUF_DEFAULT_MEMPOOL_OPS here?

even better, ok.

>> @@ -1083,5 +1085,6 @@ eal_common_usage(void)
>>  	       "  --"OPT_NO_PCI"            Disable PCI\n"
>>  	       "  --"OPT_NO_HPET"           Disable HPET\n"
>>  	       "  --"OPT_NO_SHCONF"         No shared config (mmap'd files)\n"
>> +	       "  --"OPT_PKT_MEMPOOL"       Use pool name as mempool for port\n"
>>  	       "\n", RTE_MAX_LCORE);
>>  }
>> diff --git a/lib/librte_eal/common/eal_internal_cfg.h b/lib/librte_eal/common/eal_internal_cfg.h
>> index 7b7e8c887..b8fedd2e6 100644
>> --- a/lib/librte_eal/common/eal_internal_cfg.h
>> +++ b/lib/librte_eal/common/eal_internal_cfg.h
>> @@ -43,6 +43,7 @@
>>  #include <rte_pci_dev_feature_defs.h>
>>  
>>  #define MAX_HUGEPAGE_SIZES 3  /**< support up to 3 page sizes */
>> +#define MAX_POOL_NAME_LEN 256 /**< Max len of a pool name */
>>  
>>  /*
>>   * internal configuration structure for the number, size and
> Shouldn't we have the same length than RTE_MEMPOOL_OPS_NAMESIZE?
> I think we should try to avoid introducing new defines without
> RTE_ prefix.
>
ok. Hoping that future pool_handle name don't cross >32 limit.

>> @@ -84,6 +85,7 @@ struct internal_config {
>>  	const char *hugepage_dir;         /**< specific hugetlbfs directory to use */
>>  
>>  	unsigned num_hugepage_sizes;      /**< how many sizes on this system */
>> +	char mp_name[MAX_POOL_NAME_LEN];  /**< mempool handle name */
>>  	struct hugepage_info hugepage_info[MAX_HUGEPAGE_SIZES];
>>  };
> If it's in internal config, I think we can use a char pointer
> instead of a table.
>
> What is the expected behavior in case of multiprocess?
>
ok.

>>  extern struct internal_config internal_config; /**< Global EAL configuration. */
>> diff --git a/lib/librte_eal/common/eal_options.h b/lib/librte_eal/common/eal_options.h
>> index a881c62e2..4e52ee255 100644
>> --- a/lib/librte_eal/common/eal_options.h
>> +++ b/lib/librte_eal/common/eal_options.h
>> @@ -83,6 +83,8 @@ enum {
>>  	OPT_VMWARE_TSC_MAP_NUM,
>>  #define OPT_XEN_DOM0          "xen-dom0"
>>  	OPT_XEN_DOM0_NUM,
>> +#define OPT_PKT_MEMPOOL       "pkt-mempool"
>> +	OPT_PKT_MEMPOOL_NUM,
>>  	OPT_LONG_MAX_NUM
>>  };
>>  
> While "pkt-mempool" is probably ok, here are some other suggestions,
> in case you feel it's clearer:
>
>  pkt-pool-ops
>  mbuf-pool-ops
>  mbuf-default-mempool-ops  (too long, but consistent with #define and api)
>
No strong opinion on naming convention. I'll choose last one, for consistency
reasons.

>> diff --git a/lib/librte_eal/common/include/rte_eal.h b/lib/librte_eal/common/include/rte_eal.h
>> index abf020bf9..c2f696a3d 100644
>> --- a/lib/librte_eal/common/include/rte_eal.h
>> +++ b/lib/librte_eal/common/include/rte_eal.h
>> @@ -283,6 +283,15 @@ static inline int rte_gettid(void)
>>  	return RTE_PER_LCORE(_thread_id);
>>  }
>>  
>> +/**
>> + * Get mempool name from cmdline.
>> + *
>> + * @return
>> + *   On success, returns the pool name.
>> + *   On Failure, returs NULL.
>> + */
>> +char *rte_eal_get_mp_name(void);
>> +
>>  #define RTE_INIT(func) \
>>  static void __attribute__((constructor, used)) func(void)
>>  
>> diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c
>> index 7c78f2dc2..b2a6c8068 100644
>> --- a/lib/librte_eal/linuxapp/eal/eal.c
>> +++ b/lib/librte_eal/linuxapp/eal/eal.c
>> @@ -122,6 +122,15 @@ struct internal_config internal_config;
>>  /* used by rte_rdtsc() */
>>  int rte_cycles_vmware_tsc_map;
>>  
>> +char *
>> +rte_eal_get_mp_name(void)
>> +{
>> +	if (internal_config.mp_name[0] == 0x0)
>> +		return NULL;
>> +	else
>> +		return internal_config.mp_name;
>> +}
>> +
>>  /* Return a pointer to the configuration structure */
>>  struct rte_config *
>>  rte_eal_get_configuration(void)
>> @@ -478,6 +487,23 @@ eal_parse_vfio_intr(const char *mode)
>>  	return -1;
>>  }
>>  
>> +static int
>> +eal_parse_mp_name(const char *name)
>> +{
>> +	int len;
>> +
>> +	if (name == NULL)
>> +		return -1;
>> +
>> +	len = strlen(name);
>> +	if (len >= MAX_POOL_NAME_LEN)
>> +		return -1;
>> +
>> +	strcpy(internal_config.mp_name, name);
>> +
>> +	return 0;
>> +}
>> +
> Why is it linuxapp only?

We'll add in v2.

> Using strcpy() is not a good habbit, I suggest to use snprintf
> instead. Also, prefer to use sizeof() instead of using the #define
> size.
>
>
> ret = snprintf(internal_config.mp_name, sizeof(internal_config.mp_name),
> 	"%s", name);
> if (ret < 0 || ret >= sizeof(internal_config.mp_name))
> 	return -1;
> return 0;
>
in v2. 

>>  /* Parse the arguments for --log-level only */
>>  static void
>>  eal_log_level_parse(int argc, char **argv)
>> @@ -611,6 +637,16 @@ eal_parse_args(int argc, char **argv)
>>  			internal_config.create_uio_dev = 1;
>>  			break;
>>  
>> +		case OPT_PKT_MEMPOOL_NUM:
>> +			if (eal_parse_mp_name(optarg) < 0) {
>> +				RTE_LOG(ERR, EAL, "invalid parameters for --"
>> +						OPT_PKT_MEMPOOL "\n");
>> +				eal_usage(prgname);
>> +				ret = -1;
>> +				goto out;
>> +			}
>> +			break;
>> +
>>  		default:
>>  			if (opt < OPT_LONG_MIN_NUM && isprint(opt)) {
>>  				RTE_LOG(ERR, EAL, "Option %c is not supported "
>> diff --git a/lib/librte_eal/linuxapp/eal/rte_eal_version.map b/lib/librte_eal/linuxapp/eal/rte_eal_version.map
>> index 670bab3a5..e57330bec 100644
>> --- a/lib/librte_eal/linuxapp/eal/rte_eal_version.map
>> +++ b/lib/librte_eal/linuxapp/eal/rte_eal_version.map
>> @@ -198,3 +198,10 @@ DPDK_17.05 {
>>  	vfio_get_group_no;
>>  
>>  } DPDK_17.02;
>> +
>> +DPDK_17.08 {
>> +	global:
>> +
>> +	rte_eal_get_mp_name;
>> +
>> +} DPDK_17.05
>> diff --git a/lib/librte_mbuf/rte_mbuf.c b/lib/librte_mbuf/rte_mbuf.c
>> index 0e3e36a58..38f4b3de0 100644
>> --- a/lib/librte_mbuf/rte_mbuf.c
>> +++ b/lib/librte_mbuf/rte_mbuf.c
>> @@ -158,6 +158,7 @@ rte_pktmbuf_pool_create(const char *name, unsigned n,
>>  {
>>  	struct rte_mempool *mp;
>>  	struct rte_pktmbuf_pool_private mbp_priv;
>> +	const char *mp_name = NULL;
>>  	unsigned elt_size;
>>  	int ret;
>>  
>> @@ -177,8 +178,11 @@ rte_pktmbuf_pool_create(const char *name, unsigned n,
>>  	if (mp == NULL)
>>  		return NULL;
>>  
>> -	ret = rte_mempool_set_ops_byname(mp,
>> -		RTE_MBUF_DEFAULT_MEMPOOL_OPS, NULL);
>> +	mp_name = rte_eal_get_mp_name();
>> +	if (mp_name == NULL)
>> +		mp_name = RTE_MBUF_DEFAULT_MEMPOOL_OPS;
>> +
>> +	ret = rte_mempool_set_ops_byname(mp, mp_name, NULL);
>>  	if (ret != 0) {
>>  		RTE_LOG(ERR, MBUF, "error setting mempool handler\n");
>>  		rte_mempool_free(mp);
> If NULL is never returned, the code can be simplified a bit.

Yes.

Thanks for review comment.

>
> Olivier