From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Madhani, Himanshu" Subject: Re: [PATCH v3 4/6] qla2xxx: Add multiple queue pair functionality. Date: Mon, 5 Dec 2016 20:43:57 +0000 Message-ID: <9351CE9F-5D4B-4EE0-8C09-8A0F4A4D9B2F@cavium.com> References: <1480715097-13611-1-git-send-email-himanshu.madhani@cavium.com> <1480715097-13611-5-git-send-email-himanshu.madhani@cavium.com> <64bf8c12-c086-2531-8510-27a95f8f0ef1@suse.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-sn1nam01on0063.outbound.protection.outlook.com ([104.47.32.63]:39552 "EHLO NAM01-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751161AbcLEUoA (ORCPT ); Mon, 5 Dec 2016 15:44:00 -0500 In-Reply-To: <64bf8c12-c086-2531-8510-27a95f8f0ef1@suse.de> Content-Language: en-US Content-ID: <5E45E5CEDA99854FA956E88CB72BDB82@namprd07.prod.outlook.com> Sender: linux-scsi-owner@vger.kernel.org List-Id: linux-scsi@vger.kernel.org To: Hannes Reinecke , "martin.petersen@oracle.com" Cc: "linux-scsi@vger.kernel.org" DQpPbiAxMi80LzE2LCAxMTozOCBQTSwgIkhhbm5lcyBSZWluZWNrZSIgPGhhcmVAc3VzZS5kZT4g d3JvdGU6DQoNCj5PbiAxMi8wMi8yMDE2IDEwOjQ0IFBNLCBIaW1hbnNodSBNYWRoYW5pIHdyb3Rl Og0KPj4gRnJvbTogTWljaGFlbCBIZXJuYW5kZXogPG1pY2hhZWwuaGVybmFuZGV6QGNhdml1bS5j b20+DQo+PiANCj4+IFJlcGxhY2VkIGV4aXN0aW5nIG11bHRpcGxlIHF1ZXVlIGZ1bmN0aW9uYWxp dHkgd2l0aCBmcmFtZXdvcmsNCj4+IHRoYXQgYWxsb3dzIGZvciB0aGUgY3JlYXRpb24gb2YgcGFp cnMgb2YgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcXVldWVzLA0KPj4gZWl0aGVyIGF0IHN0YXJ0IG9m IGRheSBvciBkeW5hbWljYWxseS4NCj4+IA0KPj4gU2lnbmVkLW9mZi1ieTogU2F3YW4gQ2hhbmRh ayA8c2F3YW4uY2hhbmRha0BjYXZpdW0uY29tPg0KPj4gU2lnbmVkLW9mZi1ieTogTWljaGFlbCBI ZXJuYW5kZXogPG1pY2hhZWwuaGVybmFuZGV6QGNhdml1bS5jb20+DQo+PiBTaWduZWQtb2ZmLWJ5 OiBIaW1hbnNodSBNYWRoYW5pIDxoaW1hbnNodS5tYWRoYW5pQGNhdml1bS5jb20+DQo+PiAtLS0N Cj4+ICBkcml2ZXJzL3Njc2kvcWxhMnh4eC9NYWtlZmlsZSAgICAgfCAgIDMgKy0NCj4+ICBkcml2 ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jICAgfCAgMzYgKystLQ0KPj4gIGRyaXZlcnMvc2Nz aS9xbGEyeHh4L3FsYV9ib3R0b20uYyB8IDM5OCArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKw0KPj4gIGRyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kYmcuYyAgICB8ICAgNCAr LQ0KPj4gIGRyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaCAgICB8IDEwNSArKysrKysrKy0t DQo+PiAgZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dibC5oICAgIHwgIDMyICsrLQ0KPj4gIGRy aXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMgICB8ICAxNCArLQ0KPj4gIGRyaXZlcnMvc2Nz aS9xbGEyeHh4L3FsYV9pbmxpbmUuaCB8ICAzMCArKysNCj4+ICBkcml2ZXJzL3Njc2kvcWxhMnh4 eC9xbGFfaW9jYi5jICAgfCAgNTYgKystLS0tDQo+PiAgZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxh X2lzci5jICAgIHwgMTAxICsrKysrLS0tLS0NCj4+ICBkcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFf bWJ4LmMgICAgfCAgMzMgKystLQ0KPj4gIGRyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9taWQuYyAg ICB8IDExNiArKysrKy0tLS0tLQ0KPj4gIGRyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9tcS5jICAg ICB8IDIzNiArKysrKysrKysrKysrKysrKysrKysrDQo+PiAgZHJpdmVycy9zY3NpL3FsYTJ4eHgv cWxhX29zLmMgICAgIHwgMjM3ICsrKysrKysrKysrLS0tLS0tLS0tLS0tDQo+PiAgZHJpdmVycy9z Y3NpL3FsYTJ4eHgvcWxhX3RvcC5jICAgIHwgIDk1ICsrKysrKysrKw0KPj4gIDE1IGZpbGVzIGNo YW5nZWQsIDExNTMgaW5zZXJ0aW9ucygrKSwgMzQzIGRlbGV0aW9ucygtKQ0KPj4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYm90dG9tLmMNCj4+ICBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21xLmMNCj4+ICBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3RvcC5jDQo+PiANCj4+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9NYWtlZmlsZSBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4 L01ha2VmaWxlDQo+PiBpbmRleCA0NGRlZjZiLi5jYTA0MjYwIDEwMDY0NA0KPj4gLS0tIGEvZHJp dmVycy9zY3NpL3FsYTJ4eHgvTWFrZWZpbGUNCj4+ICsrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4 L01ha2VmaWxlDQo+PiBAQCAtMSw2ICsxLDcgQEANCj4+ICBxbGEyeHh4LXkgOj0gcWxhX29zLm8g cWxhX2luaXQubyBxbGFfbWJ4Lm8gcWxhX2lvY2IubyBxbGFfaXNyLm8gcWxhX2dzLm8gXA0KPj4g IAkJcWxhX2RiZy5vIHFsYV9zdXAubyBxbGFfYXR0ci5vIHFsYV9taWQubyBxbGFfZGZzLm8gcWxh X2JzZy5vIFwNCj4+IC0JCXFsYV9ueC5vIHFsYV9tci5vIHFsYV9ueDIubyBxbGFfdGFyZ2V0Lm8g cWxhX3RtcGwubw0KPj4gKwkJcWxhX254Lm8gcWxhX21yLm8gcWxhX254Mi5vIHFsYV90YXJnZXQu byBxbGFfdG1wbC5vIHFsYV9tcS5vIFwNCj4+ICsJCXFsYV90b3AubyBxbGFfYm90dG9tLm8NCj4+ ICANCj4+ICBvYmotJChDT05GSUdfU0NTSV9RTEFfRkMpICs9IHFsYTJ4eHgubw0KPj4gIG9iai0k KENPTkZJR19UQ01fUUxBMlhYWCkgKz0gdGNtX3FsYTJ4eHgubw0KPj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFf YXR0ci5jDQo+PiBpbmRleCBmZTc0NjljLi40N2ViNGQ1IDEwMDY0NA0KPj4gLS0tIGEvZHJpdmVy cy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYw0KPj4gKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgv cWxhX2F0dHIuYw0KPj4gQEAgLTE5ODgsOSArMTk4OCw5IEBAIHN0cnVjdCBkZXZpY2VfYXR0cmli dXRlICpxbGEyeDAwX2hvc3RfYXR0cnNbXSA9IHsNCj4+ICAJc2NzaV9xbGFfaG9zdF90ICpiYXNl X3ZoYSA9IHNob3N0X3ByaXYoZmNfdnBvcnQtPnNob3N0KTsNCj4+ICAJc2NzaV9xbGFfaG9zdF90 ICp2aGEgPSBOVUxMOw0KPj4gIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gYmFzZV92aGEtPmh3 Ow0KPj4gLQl1aW50MTZfdCBvcHRpb25zID0gMDsNCj4+ICAJaW50CWNudDsNCj4+ICAJc3RydWN0 IHJlcV9xdWUgKnJlcSA9IGhhLT5yZXFfcV9tYXBbMF07DQo+PiArCXN0cnVjdCBxbGFfcXBhaXIg KnFwYWlyOw0KPj4gIA0KPj4gIAlyZXQgPSBxbGEyNHh4X3Zwb3J0X2NyZWF0ZV9yZXFfc2FuaXR5 X2NoZWNrKGZjX3Zwb3J0KTsNCj4+ICAJaWYgKHJldCkgew0KPj4gQEAgLTIwNzUsMTUgKzIwNzUs OSBAQCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqcWxhMngwMF9ob3N0X2F0dHJzW10gPSB7DQo+ PiAgCXFsdF92cG9ydF9jcmVhdGUodmhhLCBoYSk7DQo+PiAgCXFsYTI0eHhfdnBvcnRfZGlzYWJs ZShmY192cG9ydCwgZGlzYWJsZSk7DQo+PiAgDQo+PiAtCWlmIChoYS0+ZmxhZ3MuY3B1X2FmZmlu aXR5X2VuYWJsZWQpIHsNCj4+IC0JCXJlcSA9IGhhLT5yZXFfcV9tYXBbMV07DQo+PiAtCQlxbF9k YmcocWxfZGJnX211bHRpcSwgdmhhLCAweGMwMDAsDQo+PiAtCQkgICAgIlJlcXVlc3QgcXVldWUg JXAgYXR0YWNoZWQgd2l0aCAiDQo+PiAtCQkgICAgIlZQWyVkXSwgY3B1IGFmZmluaXR5ID0lZFxu IiwNCj4+IC0JCSAgICByZXEsIHZoYS0+dnBfaWR4LCBoYS0+ZmxhZ3MuY3B1X2FmZmluaXR5X2Vu YWJsZWQpOw0KPj4gLQkJZ290byB2cG9ydF9xdWV1ZTsNCj4+IC0JfSBlbHNlIGlmIChxbDJ4bWF4 cXVldWVzID09IDEgfHwgIWhhLT5ucGl2X2luZm8pDQo+PiArCWlmICghcWwyeG1xc3VwcG9ydCB8 fCAhaGEtPm5waXZfaW5mbykNCj4+ICAJCWdvdG8gdnBvcnRfcXVldWU7DQo+PiArDQo+PiAgCS8q IENyZWF0ZSBhIHJlcXVlc3QgcXVldWUgaW4gUW9TIG1vZGUgZm9yIHRoZSB2cG9ydCAqLw0KPj4g IAlmb3IgKGNudCA9IDA7IGNudCA8IGhhLT5udnJhbV9ucGl2X3NpemU7IGNudCsrKSB7DQo+PiAg CQlpZiAobWVtY21wKGhhLT5ucGl2X2luZm9bY250XS5wb3J0X25hbWUsIHZoYS0+cG9ydF9uYW1l LCA4KSA9PSAwDQo+PiBAQCAtMjA5NSwyMCArMjA4OSwyMCBAQCBzdHJ1Y3QgZGV2aWNlX2F0dHJp YnV0ZSAqcWxhMngwMF9ob3N0X2F0dHJzW10gPSB7DQo+PiAgCX0NCj4+ICANCj4+ICAJaWYgKHFv cykgew0KPj4gLQkJcmV0ID0gcWxhMjV4eF9jcmVhdGVfcmVxX3F1ZShoYSwgb3B0aW9ucywgdmhh LT52cF9pZHgsIDAsIDAsDQo+PiAtCQkJcW9zKTsNCj4+IC0JCWlmICghcmV0KQ0KPj4gKwkJcXBh aXIgPSBxbGEyeHh4X2NyZWF0ZV9xcGFpcih2aGEsIHFvcywgdmhhLT52cF9pZHgpOw0KPj4gKwkJ aWYgKCFxcGFpcikNCj4+ICAJCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg3MDg0LA0KPj4g LQkJCSAgICAiQ2FuJ3QgY3JlYXRlIHJlcXVlc3QgcXVldWUgZm9yIFZQWyVkXVxuIiwNCj4+ICsJ CQkgICAgIkNhbid0IGNyZWF0ZSBxcGFpciBmb3IgVlBbJWRdXG4iLA0KPj4gIAkJCSAgICB2aGEt PnZwX2lkeCk7DQo+PiAgCQllbHNlIHsNCj4+ICAJCQlxbF9kYmcocWxfZGJnX211bHRpcSwgdmhh LCAweGMwMDEsDQo+PiAtCQkJICAgICJSZXF1ZXN0IFF1ZTolZCBRMHM6ICVkKSBjcmVhdGVkIGZv ciBWUFslZF1cbiIsDQo+PiAtCQkJICAgIHJldCwgcW9zLCB2aGEtPnZwX2lkeCk7DQo+PiArCQkJ ICAgICJRdWV1ZSBwYWlyOiAlZCBRb3M6ICVkKSBjcmVhdGVkIGZvciBWUFslZF1cbiIsDQo+PiAr CQkJICAgIHFwYWlyLT5pZCwgcW9zLCB2aGEtPnZwX2lkeCk7DQo+PiAgCQkJcWxfZGJnKHFsX2Ri Z191c2VyLCB2aGEsIDB4NzA4NSwNCj4+IC0JCQkgICAgIlJlcXVlc3QgUXVlOiVkIFEwczogJWQp IGNyZWF0ZWQgZm9yIFZQWyVkXVxuIiwNCj4+IC0JCQkgICAgcmV0LCBxb3MsIHZoYS0+dnBfaWR4 KTsNCj4+IC0JCQlyZXEgPSBoYS0+cmVxX3FfbWFwW3JldF07DQo+PiArCQkJICAgICJRdWV1ZSBQ YWlyOiAlZCBRb3M6ICVkKSBjcmVhdGVkIGZvciBWUFslZF1cbiIsDQo+PiArCQkJICAgIHFwYWly LT5pZCwgcW9zLCB2aGEtPnZwX2lkeCk7DQo+PiArCQkJcmVxID0gcXBhaXItPnJlcTsNCj4+ICsJ CQl2aGEtPnFwYWlyID0gcXBhaXI7DQo+PiAgCQl9DQo+PiAgCX0NCj4+ICANCj4+IEBAIC0yMTYy LDEwICsyMTU2LDEwIEBAIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpxbGEyeDAwX2hvc3RfYXR0 cnNbXSA9IHsNCj4+ICAJY2xlYXJfYml0KHZoYS0+dnBfaWR4LCBoYS0+dnBfaWR4X21hcCk7DQo+ PiAgCW11dGV4X3VubG9jaygmaGEtPnZwb3J0X2xvY2spOw0KPj4gIA0KPj4gLQlpZiAodmhhLT5y ZXEtPmlkICYmICFoYS0+ZmxhZ3MuY3B1X2FmZmluaXR5X2VuYWJsZWQpIHsNCj4+IC0JCWlmIChx bGEyNXh4X2RlbGV0ZV9yZXFfcXVlKHZoYSwgdmhhLT5yZXEpICE9IFFMQV9TVUNDRVNTKQ0KPj4g KwlpZiAodmhhLT5xcGFpci0+dnBfaWR4ID09IHZoYS0+dnBfaWR4KSB7DQo+PiArCQlpZiAocWxh Mnh4eF9kZWxldGVfcXBhaXIodmhhLCB2aGEtPnFwYWlyKSAhPSBRTEFfU1VDQ0VTUykNCj4+ICAJ CQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg3MDg3LA0KPj4gLQkJCSAgICAiUXVldWUgZGVs ZXRlIGZhaWxlZC5cbiIpOw0KPj4gKwkJCSAgICAiUXVldWUgUGFpciBkZWxldGUgZmFpbGVkLlxu Iik7DQo+PiAgCX0NCj4+ICANCj4+ICAJcWxfbG9nKHFsX2xvZ19pbmZvLCB2aGEsIDB4NzA4OCwg IlZQWyVkXSBkZWxldGVkLlxuIiwgaWQpOw0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9x bGEyeHh4L3FsYV9ib3R0b20uYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ib3R0b20uYw0K Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4+IGluZGV4IDAwMDAwMDAuLjhiZjc1N2UNCj4+IC0t LSAvZGV2L251bGwNCj4+ICsrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ib3R0b20uYw0K Pj4gQEAgLTAsMCArMSwzOTggQEANCj4+ICsvKg0KPj4gKyAqIFFMb2dpYyBGaWJyZSBDaGFubmVs IEhCQSBEcml2ZXINCj4+ICsgKiBDb3B5cmlnaHQgKGMpICAyMDE2IFFMb2dpYyBDb3Jwb3JhdGlv bg0KPj4gKyAqDQo+PiArICogU2VlIExJQ0VOU0UucWxhMnh4eCBmb3IgY29weXJpZ2h0IGFuZCBs aWNlbnNpbmcgZGV0YWlscy4NCj4+ICsgKi8NCj4+ICsjaW5jbHVkZSAicWxhX2RlZi5oIg0KPj4g Kw0KPj4gKy8qKg0KPj4gKyAqIHFsYTJ4eHhfc3RhcnRfc2NzaV9tcSgpIC0gU2VuZCBhIFNDU0kg Y29tbWFuZCB0byB0aGUgSVNQDQo+PiArICogQHNwOiBjb21tYW5kIHRvIHNlbmQgdG8gdGhlIElT UA0KPj4gKyAqDQo+PiArICogUmV0dXJucyBub24temVybyBpZiBhIGZhaWx1cmUgb2NjdXJyZWQs IGVsc2UgemVyby4NCj4+ICsgKi8NCj4+ICsNCj4+ICtzdGF0aWMgaW50DQo+PiArcWxhMnh4eF9z dGFydF9zY3NpX21xKHNyYl90ICpzcCkNCj4+ICt7DQo+PiArCWludAkJbnNlZzsNCj4+ICsJdW5z aWduZWQgbG9uZyAgIGZsYWdzOw0KPj4gKwl1aW50MzJfdAkqY2xyX3B0cjsNCj4+ICsJdWludDMy X3QgICAgICAgIGluZGV4Ow0KPj4gKwl1aW50MzJfdAloYW5kbGU7DQo+PiArCXN0cnVjdCBjbWRf dHlwZV83ICpjbWRfcGt0Ow0KPj4gKwl1aW50MTZfdAljbnQ7DQo+PiArCXVpbnQxNl90CXJlcV9j bnQ7DQo+PiArCXVpbnQxNl90CXRvdF9kc2RzOw0KPj4gKwlzdHJ1Y3QgcmVxX3F1ZSAqcmVxID0g TlVMTDsNCj4+ICsJc3RydWN0IHJzcF9xdWUgKnJzcCA9IE5VTEw7DQo+PiArCXN0cnVjdCBzY3Np X2NtbmQgKmNtZCA9IEdFVF9DTURfU1Aoc3ApOw0KPj4gKwlzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAq dmhhID0gc3AtPmZjcG9ydC0+dmhhOw0KPj4gKwlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhh LT5odzsNCj4+ICsJc3RydWN0IHFsYV9xcGFpciAqcXBhaXIgPSBzcC0+cXBhaXI7DQo+PiArDQo+ PiArCS8qIFNldHVwIHFwYWlyIHBvaW50ZXJzICovDQo+PiArCXJzcCA9IHFwYWlyLT5yc3A7DQo+ PiArCXJlcSA9IHFwYWlyLT5yZXE7DQo+PiArDQo+PiArCS8qIFNvIHdlIGtub3cgd2UgaGF2ZW4n dCBwY2lfbWFwJ2VkIGFueXRoaW5nIHlldCAqLw0KPj4gKwl0b3RfZHNkcyA9IDA7DQo+PiArDQo+ PiArCS8qIFNlbmQgbWFya2VyIGlmIHJlcXVpcmVkICovDQo+PiArCWlmICh2aGEtPm1hcmtlcl9u ZWVkZWQgIT0gMCkgew0KPj4gKwkJaWYgKHFsYTJ4MDBfbWFya2VyKHZoYSwgcmVxLCByc3AsIDAs IDAsIE1LX1NZTkNfQUxMKSAhPQ0KPj4gKwkJICAgIFFMQV9TVUNDRVNTKQ0KPj4gKwkJCXJldHVy biBRTEFfRlVOQ1RJT05fRkFJTEVEOw0KPj4gKwkJdmhhLT5tYXJrZXJfbmVlZGVkID0gMDsNCj4+ ICsJfQ0KPj4gKw0KPj4gKwkvKiBBY3F1aXJlIHFwYWlyIHNwZWNpZmljIGxvY2sgKi8NCj4+ICsJ c3Bpbl9sb2NrX2lycXNhdmUoJnFwYWlyLT5xcF9sb2NrLCBmbGFncyk7DQo+PiArDQo+PiArCS8q IENoZWNrIGZvciByb29tIGluIG91dHN0YW5kaW5nIGNvbW1hbmQgbGlzdC4gKi8NCj4+ICsJaGFu ZGxlID0gcmVxLT5jdXJyZW50X291dHN0YW5kaW5nX2NtZDsNCj4+ICsJZm9yIChpbmRleCA9IDE7 IGluZGV4IDwgcmVxLT5udW1fb3V0c3RhbmRpbmdfY21kczsgaW5kZXgrKykgew0KPj4gKwkJaGFu ZGxlKys7DQo+PiArCQlpZiAoaGFuZGxlID09IHJlcS0+bnVtX291dHN0YW5kaW5nX2NtZHMpDQo+ PiArCQkJaGFuZGxlID0gMTsNCj4+ICsJCWlmICghcmVxLT5vdXRzdGFuZGluZ19jbWRzW2hhbmRs ZV0pDQo+PiArCQkJYnJlYWs7DQo+PiArCX0NCj4+ICsJaWYgKGluZGV4ID09IHJlcS0+bnVtX291 dHN0YW5kaW5nX2NtZHMpDQo+PiArCQlnb3RvIHF1ZXVpbmdfZXJyb3I7DQo+PiArDQo+PiArCS8q IE1hcCB0aGUgc2cgdGFibGUgc28gd2UgaGF2ZSBhbiBhY2N1cmF0ZSBjb3VudCBvZiBzZyBlbnRy aWVzIG5lZWRlZCAqLw0KPj4gKwlpZiAoc2NzaV9zZ19jb3VudChjbWQpKSB7DQo+PiArCQluc2Vn ID0gZG1hX21hcF9zZygmaGEtPnBkZXYtPmRldiwgc2NzaV9zZ2xpc3QoY21kKSwNCj4+ICsJCSAg ICBzY3NpX3NnX2NvdW50KGNtZCksIGNtZC0+c2NfZGF0YV9kaXJlY3Rpb24pOw0KPj4gKwkJaWYg KHVubGlrZWx5KCFuc2VnKSkNCj4+ICsJCQlnb3RvIHF1ZXVpbmdfZXJyb3I7DQo+PiArCX0gZWxz ZQ0KPj4gKwkJbnNlZyA9IDA7DQo+PiArDQo+PiArCXRvdF9kc2RzID0gbnNlZzsNCj4+ICsJcmVx X2NudCA9IHFsYTI0eHhfY2FsY19pb2Nicyh2aGEsIHRvdF9kc2RzKTsNCj4+ICsJaWYgKHJlcS0+ Y250IDwgKHJlcV9jbnQgKyAyKSkgew0KPj4gKwkJY250ID0gSVNfU0hBRE9XX1JFR19DQVBBQkxF KGhhKSA/ICpyZXEtPm91dF9wdHIgOg0KPj4gKwkJICAgIFJEX1JFR19EV09SRF9SRUxBWEVEKHJl cS0+cmVxX3Ffb3V0KTsNCj4+ICsJCWlmIChyZXEtPnJpbmdfaW5kZXggPCBjbnQpDQo+PiArCQkJ cmVxLT5jbnQgPSBjbnQgLSByZXEtPnJpbmdfaW5kZXg7DQo+PiArCQllbHNlDQo+PiArCQkJcmVx LT5jbnQgPSByZXEtPmxlbmd0aCAtDQo+PiArCQkJCShyZXEtPnJpbmdfaW5kZXggLSBjbnQpOw0K Pj4gKwkJaWYgKHJlcS0+Y250IDwgKHJlcV9jbnQgKyAyKSkNCj4+ICsJCQlnb3RvIHF1ZXVpbmdf ZXJyb3I7DQo+PiArCX0NCj4+ICsNCj4+ICsJLyogQnVpbGQgY29tbWFuZCBwYWNrZXQuICovDQo+ PiArCXJlcS0+Y3VycmVudF9vdXRzdGFuZGluZ19jbWQgPSBoYW5kbGU7DQo+PiArCXJlcS0+b3V0 c3RhbmRpbmdfY21kc1toYW5kbGVdID0gc3A7DQo+PiArCXNwLT5oYW5kbGUgPSBoYW5kbGU7DQo+ PiArCWNtZC0+aG9zdF9zY3JpYmJsZSA9ICh1bnNpZ25lZCBjaGFyICopKHVuc2lnbmVkIGxvbmcp aGFuZGxlOw0KPj4gKwlyZXEtPmNudCAtPSByZXFfY250Ow0KPj4gKw0KPj4gKwljbWRfcGt0ID0g KHN0cnVjdCBjbWRfdHlwZV83ICopcmVxLT5yaW5nX3B0cjsNCj4+ICsJY21kX3BrdC0+aGFuZGxl ID0gTUFLRV9IQU5ETEUocmVxLT5pZCwgaGFuZGxlKTsNCj4+ICsNCj4+ICsJLyogWmVybyBvdXQg cmVtYWluaW5nIHBvcnRpb24gb2YgcGFja2V0LiAqLw0KPj4gKwkvKiAgICB0YWdnZWQgcXVldWlu ZyBtb2RpZmllciAtLSBkZWZhdWx0IGlzIFRTS19TSU1QTEUgKDApLiAqLw0KPj4gKwljbHJfcHRy ID0gKHVpbnQzMl90ICopY21kX3BrdCArIDI7DQo+PiArCW1lbXNldChjbHJfcHRyLCAwLCBSRVFV RVNUX0VOVFJZX1NJWkUgLSA4KTsNCj4+ICsJY21kX3BrdC0+ZHNlZ19jb3VudCA9IGNwdV90b19s ZTE2KHRvdF9kc2RzKTsNCj4+ICsNCj4+ICsJLyogU2V0IE5QT1JULUlEIGFuZCBMVU4gbnVtYmVy Ki8NCj4+ICsJY21kX3BrdC0+bnBvcnRfaGFuZGxlID0gY3B1X3RvX2xlMTYoc3AtPmZjcG9ydC0+ bG9vcF9pZCk7DQo+PiArCWNtZF9wa3QtPnBvcnRfaWRbMF0gPSBzcC0+ZmNwb3J0LT5kX2lkLmIu YWxfcGE7DQo+PiArCWNtZF9wa3QtPnBvcnRfaWRbMV0gPSBzcC0+ZmNwb3J0LT5kX2lkLmIuYXJl YTsNCj4+ICsJY21kX3BrdC0+cG9ydF9pZFsyXSA9IHNwLT5mY3BvcnQtPmRfaWQuYi5kb21haW47 DQo+PiArCWNtZF9wa3QtPnZwX2luZGV4ID0gc3AtPmZjcG9ydC0+dmhhLT52cF9pZHg7DQo+PiAr DQo+PiArCWludF90b19zY3NpbHVuKGNtZC0+ZGV2aWNlLT5sdW4sICZjbWRfcGt0LT5sdW4pOw0K Pj4gKwlob3N0X3RvX2ZjcF9zd2FwKCh1aW50OF90ICopJmNtZF9wa3QtPmx1biwgc2l6ZW9mKGNt ZF9wa3QtPmx1bikpOw0KPj4gKw0KPj4gKwljbWRfcGt0LT50YXNrID0gVFNLX1NJTVBMRTsNCj4+ ICsNCj4+ICsJLyogTG9hZCBTQ1NJIGNvbW1hbmQgcGFja2V0LiAqLw0KPj4gKwltZW1jcHkoY21k X3BrdC0+ZmNwX2NkYiwgY21kLT5jbW5kLCBjbWQtPmNtZF9sZW4pOw0KPj4gKwlob3N0X3RvX2Zj cF9zd2FwKGNtZF9wa3QtPmZjcF9jZGIsIHNpemVvZihjbWRfcGt0LT5mY3BfY2RiKSk7DQo+PiAr DQo+PiArCWNtZF9wa3QtPmJ5dGVfY291bnQgPSBjcHVfdG9fbGUzMigodWludDMyX3Qpc2NzaV9i dWZmbGVuKGNtZCkpOw0KPj4gKw0KPj4gKwkvKiBCdWlsZCBJT0NCIHNlZ21lbnRzICovDQo+PiAr CXFsYTI0eHhfYnVpbGRfc2NzaV9pb2NicyhzcCwgY21kX3BrdCwgdG90X2RzZHMsIHJlcSk7DQo+ PiArDQo+PiArCS8qIFNldCB0b3RhbCBkYXRhIHNlZ21lbnQgY291bnQuICovDQo+PiArCWNtZF9w a3QtPmVudHJ5X2NvdW50ID0gKHVpbnQ4X3QpcmVxX2NudDsNCj4+ICsJd21iKCk7DQo+PiArCS8q IEFkanVzdCByaW5nIGluZGV4LiAqLw0KPj4gKwlyZXEtPnJpbmdfaW5kZXgrKzsNCj4+ICsJaWYg KHJlcS0+cmluZ19pbmRleCA9PSByZXEtPmxlbmd0aCkgew0KPj4gKwkJcmVxLT5yaW5nX2luZGV4 ID0gMDsNCj4+ICsJCXJlcS0+cmluZ19wdHIgPSByZXEtPnJpbmc7DQo+PiArCX0gZWxzZQ0KPj4g KwkJcmVxLT5yaW5nX3B0cisrOw0KPj4gKw0KPj4gKwlzcC0+ZmxhZ3MgfD0gU1JCX0RNQV9WQUxJ RDsNCj4+ICsNCj4+ICsJLyogU2V0IGNoaXAgbmV3IHJpbmcgaW5kZXguICovDQo+PiArCVdSVF9S RUdfRFdPUkQocmVxLT5yZXFfcV9pbiwgcmVxLT5yaW5nX2luZGV4KTsNCj4+ICsNCj4+ICsJLyog TWFuYWdlIHVucHJvY2Vzc2VkIFJJTy9aSU8gY29tbWFuZHMgaW4gcmVzcG9uc2UgcXVldWUuICov DQo+PiArCWlmICh2aGEtPmZsYWdzLnByb2Nlc3NfcmVzcG9uc2VfcXVldWUgJiYNCj4+ICsJCXJz cC0+cmluZ19wdHItPnNpZ25hdHVyZSAhPSBSRVNQT05TRV9QUk9DRVNTRUQpDQo+PiArCQlxbGEy NHh4X3Byb2Nlc3NfcmVzcG9uc2VfcXVldWUodmhhLCByc3ApOw0KPj4gKw0KPj4gKwlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZxcGFpci0+cXBfbG9jaywgZmxhZ3MpOw0KPj4gKwlyZXR1cm4gUUxB X1NVQ0NFU1M7DQo+PiArDQo+PiArcXVldWluZ19lcnJvcjoNCj4+ICsJaWYgKHRvdF9kc2RzKQ0K Pj4gKwkJc2NzaV9kbWFfdW5tYXAoY21kKTsNCj4+ICsNCj4+ICsJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmcXBhaXItPnFwX2xvY2ssIGZsYWdzKTsNCj4+ICsNCj4+ICsJcmV0dXJuIFFMQV9GVU5D VElPTl9GQUlMRUQ7DQo+PiArfQ0KPg0KPlRoYXQgZmVlbHMgcmVhbGx5IHNhZDsgcnVubmluZyBv biBtdWx0aXF1ZXVlIHlldCBoYXZpbmcgdG8gdGFrZSBhDQo+c3BpbmxvY2sgZm9yIHN1Ym1pdHRp bmcgSS9PLg0KPklzIHRoaXMgcmVhbGx5IG5lY2Vzc2FyeT8gV2hhdCBkb2VzIHRoZSBzcGlubG9j ayBwcm90ZWN0IGFnYWluc3Q/DQo+SWYgaXQncyBqdXN0IHRoZSBvdXRzdGFuZGluZyBjb21tYW5k cyBhcnJheTogY2FuJ3QgeW91IGludHJvZHVjZSBhIDE6MQ0KPm1hcHBpbmcgYmV0d2VlbiB0aGUg b3V0c3RhbmRpbmcgY29tbWFuZCBhcnJheSBpbmRleCBhbmQgcmVxdWVzdC0+dGFnPw0KPlRoYXQg d2F5IHlvdSdyZSBwcm90ZWN0ZWQgYnkgdGhlIGJsb2NrLWxheWVyIHRhZ2dpbmcgY29kZSwgYW5k IHdvbid0DQo+bmVlZCB0byBsb2NrIGl0IHlvdXJzZWxmIC4uLg0KDQpXZSBuZWVkIHRvIGhhdmUg dGhlIHNwaW5sb2NrIGJlY2F1c2UgY3VycmVudGx5IG91ciBOUElWIGltcGxlbWVudGF0aW9uIGRv ZXMgbm90IHV0aWxpemVzDQpRLXBhaXIgZnJhbWV3b3JrLiANCg0KPlsgLi4gXQ0KPj4gQEAgLTE2 NzAsMjYgKzE2MzQsMjAgQEAgdWludDMyX3QgcWxhMngwMF9pc3BfcmVnX3N0YXQoc3RydWN0IHFs YV9od19kYXRhICpoYSkNCj4+ICAJCSAgICAiTVFJTyBCYXNlPSVwLlxuIiwgaGEtPm1xaW9iYXNl KTsNCj4+ICAJCS8qIFJlYWQgTVNJWCB2ZWN0b3Igc2l6ZSBvZiB0aGUgYm9hcmQgKi8NCj4+ICAJ CXBjaV9yZWFkX2NvbmZpZ193b3JkKGhhLT5wZGV2LCBRTEFfUENJX01TSVhfQ09OVFJPTCwgJm1z aXgpOw0KPj4gLQkJaGEtPm1zaXhfY291bnQgPSBtc2l4Ow0KPj4gKwkJaGEtPm1zaXhfY291bnQg PSBtc2l4ICsgMTsNCj4+ICAJCS8qIE1heCBxdWV1ZXMgYXJlIGJvdW5kZWQgYnkgYXZhaWxhYmxl IG1zaXggdmVjdG9ycyAqLw0KPj4gLQkJLyogcXVldWUgMCB1c2VzIHR3byBtc2l4IHZlY3RvcnMg Ki8NCj4+IC0JCWlmIChxbDJ4bXVsdGlxdWVfdGFnKSB7DQo+PiAtCQkJY3B1cyA9IG51bV9vbmxp bmVfY3B1cygpOw0KPj4gLQkJCWhhLT5tYXhfcnNwX3F1ZXVlcyA9IChoYS0+bXNpeF9jb3VudCAt IDEgPiBjcHVzKSA/DQo+PiAtCQkJCShjcHVzICsgMSkgOiAoaGEtPm1zaXhfY291bnQgLSAxKTsN Cj4+IC0JCQloYS0+bWF4X3JlcV9xdWV1ZXMgPSAyOw0KPj4gLQkJfSBlbHNlIGlmIChxbDJ4bWF4 cXVldWVzID4gMSkgew0KPj4gLQkJCWhhLT5tYXhfcmVxX3F1ZXVlcyA9IHFsMnhtYXhxdWV1ZXMg PiBRTEFfTVFfU0laRSA/DQo+PiAtCQkJICAgIFFMQV9NUV9TSVpFIDogcWwyeG1heHF1ZXVlczsN Cj4+IC0JCQlxbF9kYmdfcGNpKHFsX2RiZ19tdWx0aXEsIGhhLT5wZGV2LCAweGMwMDgsDQo+PiAt CQkJICAgICJRb1MgbW9kZSBzZXQsIG1heCBubyBvZiByZXF1ZXN0IHF1ZXVlczolZC5cbiIsDQo+ PiAtCQkJICAgIGhhLT5tYXhfcmVxX3F1ZXVlcyk7DQo+PiAtCQkJcWxfZGJnX3BjaShxbF9kYmdf aW5pdCwgaGEtPnBkZXYsIDB4MDAxOSwNCj4+IC0JCQkgICAgIlFvUyBtb2RlIHNldCwgbWF4IG5v IG9mIHJlcXVlc3QgcXVldWVzOiVkLlxuIiwNCj4+IC0JCQkgICAgaGEtPm1heF9yZXFfcXVldWVz KTsNCj4+IC0JCX0NCj4+ICsJCS8qIE1CIGludGVycnVwdCB1c2VzIDEgdmVjdG9yICovDQo+PiAr CQloYS0+bWF4X3JlcV9xdWV1ZXMgPSBoYS0+bXNpeF9jb3VudCAtIDE7DQo+PiArCQloYS0+bWF4 X3JzcF9xdWV1ZXMgPSBoYS0+bWF4X3JlcV9xdWV1ZXM7DQo+PiArCQkvKiBRdWV1ZSBwYWlycyBp cyB0aGUgbWF4IHZhbHVlIG1pbnVzIHRoZSBiYXNlIHF1ZXVlIHBhaXIgKi8NCj4+ICsJCWhhLT5t YXhfcXBhaXJzID0gaGEtPm1heF9yc3BfcXVldWVzIC0gMTsNCj4+ICsJCXFsX2RiZ19wY2kocWxf ZGJnX211bHRpcSwgaGEtPnBkZXYsIDB4YzAwZSwNCj4+ICsJCSAgICAiTWF4IG5vIG9mIHF1ZXVl cyBwYWlyczogJWQuXG4iLCBoYS0+bWF4X3FwYWlycyk7DQo+PiArCQlxbF9kYmdfcGNpKHFsX2Ri Z19pbml0LCBoYS0+cGRldiwgMHgwMTg4LA0KPj4gKwkJICAgICJNYXggbm8gb2YgcXVldWVzIHBh aXJzOiAlZC5cbiIsIGhhLT5tYXhfcXBhaXJzKTsNCj4+ICsNCj4+ICAJCXFsX2xvZ19wY2kocWxf bG9nX2luZm8sIGhhLT5wZGV2LCAweDAwMWEsDQo+PiAtCQkgICAgIk1TSS1YIHZlY3RvciBjb3Vu dDogJWQuXG4iLCBtc2l4KTsNCj4+ICsJCSAgICAiTVNJLVggdmVjdG9yIGNvdW50OiAlZC5cbiIs IGhhLT5tc2l4X2NvdW50KTsNCj4+ICAJfSBlbHNlDQo+PiAgCQlxbF9sb2dfcGNpKHFsX2xvZ19p bmZvLCBoYS0+cGRldiwgMHgwMDFiLA0KPj4gIAkJICAgICJCQVIgMyBub3QgZW5hYmxlZC5cbiIp Ow0KPkhhdmUgeW91IG1vZGlmaWVkIHRoZSBpcnEgYWZmaW5pdHkgZm9yIHRoaXM/DQo+VHlwaWNh bGx5IHRoZSBpcnEtYWZmaW5pdHkgY2hhbmdlcyB3aWxsIHRyZWF0IGFsbCB2ZWN0b3JzIGlkZW50 aWNhbGx5LA0KPmFuZCBzcHJlYWQgdGhlbSBvdXQgYWNyb3NzIHRoZSBhdmFpbGFibGUgQ1BVUy4N Cj5CdXQgd2l0aCB0aGlzIGxheW91dCB2ZWN0b3IgJzAnIGFwcGFyZW50bHkgaXMgdGhlIE1CIGly cSB2ZWN0b3IsIGFuZCBhcw0KPnN1Y2ggc2hvdWxkIF9ub3RfIGJlIHRyZWF0ZWQgbGlrZSB0aGUg b3RoZXJzIHdydCBpcnEgYWZmaW5pdHksIGJ1dA0KPnJhdGhlciBsZWZ0IGFsb25lLg0KPkNocmlz dG9waCBwdXQgaW4gc29tZSBjaGFuZ2VzIGZvciB0aGF0LCBidXQgdGhleSdsbCBiZSBjb21pbmcg aW4gdmlhIHRoZQ0KPnRpcCB0cmVlLCBzbyBub3Qgc3VyZSBpZiBNYXJ0aW4gaGFzIGFscmVhZHkg dGFrZW4gdGhlbSBpbi4NCj5CdXQgaW4gZWl0aGVyIHdheSwgeW91IHNob3VsZCBiZSB1c2luZyB0 aGVtIHRvIGdldCB0aGUgaXJxIGFmZmluaXR5DQo+bGF5b3V0IGNvcnJlY3RseS4NCg0KWWVzLiBX ZSB3aWxsIHBvc3QgcGF0Y2hlcyB0byB1dGlsaXplIG5ld2VyIGNhbGxzIHdoaWNoIHdpbGwgaGVs cCB3aXRoIG5vbiBxLXBhaXINClZlY3RvcnMuIA0KDQo+DQo+Q2hlZXJzLA0KPg0KPkhhbm5lcw0K Pi0tIA0KPkRyLiBIYW5uZXMgUmVpbmVja2UJCSAgIFRlYW1sZWFkIFN0b3JhZ2UgJiBOZXR3b3Jr aW5nDQo+aGFyZUBzdXNlLmRlCQkJICAgICAgICAgICAgICAgKzQ5IDkxMSA3NDA1MyA2ODgNCj5T VVNFIExJTlVYIEdtYkgsIE1heGZlbGRzdHIuIDUsIDkwNDA5IE7DvHJuYmVyZw0KPkdGOiBGLiBJ bWVuZMO2cmZmZXIsIEouIFNtaXRoYXJkLCBKLiBHdWlsZCwgRC4gVXBtYW55dSwgRy4gTm9ydG9u DQo+SFJCIDIxMjg0IChBRyBOw7xybmJlcmcpDQo=