From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com. [192.55.52.88]) by gmr-mx.google.com with ESMTP id po17si4146078pab.2.2016.06.28.09.15.10 for ; Tue, 28 Jun 2016 09:15:10 -0700 (PDT) From: "Jiang, Dave" Subject: Re: [PATCH 4/5] ntb: add DMA error handling for TX DMA Date: Tue, 28 Jun 2016 16:15:06 +0000 Message-ID: <1467130484.3754.11.camel@intel.com> References: <146706860557.188649.10766278554335496632.stgit@djiang5-desk3.ch.intel.com> <146706899641.188649.16969346461413257840.stgit@djiang5-desk3.ch.intel.com> In-Reply-To: Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-ID: <1B3E5C4142C258409E277156028C168D@intel.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 Return-Path: dave.jiang@intel.com To: "allenbh@gmail.com" Cc: "allen.hubbe@emc.com" , "dmaengine@vger.kernel.org" , "jdmason@kudzu.us" , "Koul, Vinod" , "linux-ntb@googlegroups.com" List-ID: T24gVHVlLCAyMDE2LTA2LTI4IGF0IDAxOjUzICswMDAwLCBBbGxlbiBIdWJiZSB3cm90ZToNCj4g T24gTW9uLCBKdW4gMjcsIDIwMTYgYXQgNzowOSBQTSwgRGF2ZSBKaWFuZyA8ZGF2ZS5qaWFuZ0Bp bnRlbC5jb20+DQo+IHdyb3RlOg0KPiA+IEFkZGluZyBzdXBwb3J0IG9uIHRoZSB0eCBETUEgcGF0 aCB0byBhbGxvdyByZWNvdmVyeSBvZiBlcnJvcnMgd2hlbg0KPiA+IERNQQ0KPiA+IHJlc3BvbmRz IHdpdGggZXJyb3Igc3RhdHVzIGFuZCBhYm9ydCBhbGwgdGhlIHN1YnNlcXVlbnQgb3BzLg0KPiA+ IA0KPiA+IFNpZ25lZC1vZmYtYnk6IERhdmUgSmlhbmcgPGRhdmUuamlhbmdAaW50ZWwuY29tPg0K PiA+IC0tLQ0KPiA+IMKgZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jIHzCoMKgMTIzDQo+ID4g KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQ0KPiA+IMKgMSBmaWxl IGNoYW5nZWQsIDg5IGluc2VydGlvbnMoKyksIDM0IGRlbGV0aW9ucygtKQ0KPiA+IA0KPiA+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmMNCj4gPiBiL2RyaXZlcnMvbnRi L250Yl90cmFuc3BvcnQuYw0KPiA+IGluZGV4IDJlZjlkOTEzLi41NWE1YWUwIDEwMDY0NA0KPiA+ IC0tLSBhL2RyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYw0KPiA+ICsrKyBiL2RyaXZlcnMvbnRi L250Yl90cmFuc3BvcnQuYw0KPiA+IEBAIC0xMDIsNiArMTAyLDEwIEBAIHN0cnVjdCBudGJfcXVl dWVfZW50cnkgew0KPiA+IMKgwqDCoMKgwqDCoMKgwqB2b2lkICpidWY7DQo+ID4gwqDCoMKgwqDC oMKgwqDCoHVuc2lnbmVkIGludCBsZW47DQo+ID4gwqDCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGlu dCBmbGFnczsNCj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0 b3IgKnR4ZDsNCj4gPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0cmllczsNCj4gPiArwqDCoMKgwqDC oMKgwqBpbnQgZXJyb3JzOw0KPiA+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGludCB0eF9pbmRl eDsNCj4gPiANCj4gPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IG50Yl90cmFuc3BvcnRfcXAgKnFw Ow0KPiA+IMKgwqDCoMKgwqDCoMKgwqB1bmlvbiB7DQo+ID4gQEAgLTI1OCw2ICsyNjIsOSBAQCBl bnVtIHsNCj4gPiDCoHN0YXRpYyB2b2lkIG50Yl90cmFuc3BvcnRfcnhjX2RiKHVuc2lnbmVkIGxv bmcgZGF0YSk7DQo+ID4gwqBzdGF0aWMgY29uc3Qgc3RydWN0IG50Yl9jdHhfb3BzIG50Yl90cmFu c3BvcnRfb3BzOw0KPiA+IMKgc3RhdGljIHN0cnVjdCBudGJfY2xpZW50IG50Yl90cmFuc3BvcnRf Y2xpZW50Ow0KPiA+ICtzdGF0aWMgaW50IG50Yl9hc3luY190eF9zdWJtaXQoc3RydWN0IG50Yl90 cmFuc3BvcnRfcXAgKnFwLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbnRiX3F1ZXVlX2VudHJ5ICplbnRyeSk7 DQo+ID4gK3N0YXRpYyB2b2lkIG50Yl9tZW1jcHlfdHgoc3RydWN0IG50Yl9xdWV1ZV9lbnRyeSAq ZW50cnksIHZvaWQNCj4gPiBfX2lvbWVtICpvZmZzZXQpOw0KPiA+IA0KPiA+IMKgc3RhdGljIGlu dCBudGJfdHJhbnNwb3J0X2J1c19tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsDQo+ID4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpDQo+ID4gQEAgLTE0NDQsMjEgKzE0NTEs NDYgQEAgc3RhdGljIHZvaWQgbnRiX3R4X2NvcHlfY2FsbGJhY2sodm9pZA0KPiA+ICpkYXRhKQ0K PiA+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbnRiX3F1ZXVlX2VudHJ5ICplbnRyeSA9IGRhdGE7 DQo+ID4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBudGJfdHJhbnNwb3J0X3FwICpxcCA9IGVudHJ5 LT5xcDsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IG50Yl9wYXlsb2FkX2hlYWRlciBfX2lv bWVtICpoZHIgPSBlbnRyeS0+dHhfaGRyOw0KPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkbWFf YXN5bmNfdHhfZGVzY3JpcHRvciAqdHhkOw0KPiA+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGlu dCBsZW47DQo+ID4gK8KgwqDCoMKgwqDCoMKgYm9vbCBhYm9ydCA9IGZhbHNlOw0KPiA+ICsNCj4g PiArwqDCoMKgwqDCoMKgwqB0eGQgPSBlbnRyeS0+dHhkOw0KPiA+ICsNCj4gPiArwqDCoMKgwqDC oMKgwqAvKiB3ZSBuZWVkIHRvIGNoZWNrIERNQSByZXN1bHRzIGlmIHdlIGFyZSB1c2luZyBETUEg Ki8NCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAodHhkKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHN3aXRjaCAodHhkLT5yZXN1bHQpIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgY2FzZSBFUlJfRE1BX1JFQUQ6DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGNhc2UgRVJSX0RNQV9XUklURToNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVudHJ5LT5lcnJvcnMrKzsNCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2FzZSBFUlJfRE1BX0FCT1JUOg0KPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYWJvcnQgPSB0cnVlOw0KPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBoYW5k bGVfdHg7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNhc2UgRVJSX0RNQV9O T05FOg0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZWZhdWx0Og0KPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7DQo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0NCj4gPiArwqDCoMKgwqDCoMKgwqB9DQo+ ID4gDQo+ID4gwqDCoMKgwqDCoMKgwqDCoGlvd3JpdGUzMihlbnRyeS0+ZmxhZ3MgfCBERVNDX0RP TkVfRkxBRywgJmhkci0+ZmxhZ3MpOw0KPiA+IA0KPiA+IMKgwqDCoMKgwqDCoMKgwqBudGJfcGVl cl9kYl9zZXQocXAtPm5kZXYsIEJJVF9VTEwocXAtPnFwX251bSkpOw0KPiA+IA0KPiA+ICtoYW5k bGVfdHg6DQo+ID4gKw0KPiA+IMKgwqDCoMKgwqDCoMKgwqAvKiBUaGUgZW50cnkgbGVuZ3RoIGNh biBvbmx5IGJlIHplcm8gaWYgdGhlIHBhY2tldCBpcw0KPiA+IGludGVuZGVkIHRvIGJlIGENCj4g PiDCoMKgwqDCoMKgwqDCoMKgwqAqICJsaW5rIGRvd24iIG9yIHNpbWlsYXIuwqDCoFNpbmNlIG5v IHBheWxvYWQgaXMgYmVpbmcgc2VudA0KPiA+IGluIHRoZXNlDQo+ID4gwqDCoMKgwqDCoMKgwqDC oMKgKiBjYXNlcywgdGhlcmUgaXMgbm90aGluZyB0byBhZGQgdG8gdGhlIGNvbXBsZXRpb24gcXVl dWUuDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgKi8NCj4gPiDCoMKgwqDCoMKgwqDCoMKgaWYgKGVu dHJ5LT5sZW4gPiAwKSB7DQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHFwLT50 eF9ieXRlcyArPSBlbnRyeS0+bGVuOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBpZiAoIWFib3J0KSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBxcC0+dHhfYnl0ZXMgKz0gZW50cnktPmxlbjsNCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxlbiA9IGVudHJ5LT5sZW47DQo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0gZWxzZQ0KPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGVuID0gMDsNCj4gDQo+IENoZWNrcGF0 Y2ggd2lsbCBjb21wbGFpbiBhYm91dCBkaWZmZXJlbnQgeyB9IGZvciB0aGVuIGFuZCBlbHNlLg0K DQpJdCBkaWRuJ3QuIEJ1dCBJIHdpbGwgZml4IGFueWhvdy7CoA0KDQo+IA0KPiA+IA0KPiA+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHFwLT50eF9oYW5kbGVyKQ0KPiA+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcXAtPnR4X2hhbmRs ZXIocXAsIHFwLT5jYl9kYXRhLCBlbnRyeS0NCj4gPiA+Y2JfZGF0YSwNCj4gPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGVudHJ5LT5sZW4pOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcXAtPnR4X2hhbmRsZXIocXAsIHFwLT5jYl9kYXRhLCBlbnRyeS0N Cj4gPiA+Y2JfZGF0YSwgbGVuKTsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgfQ0KPiA+IA0KPiA+IMKg wqDCoMKgwqDCoMKgwqBudGJfbGlzdF9hZGQoJnFwLT5udGJfdHhfZnJlZV9xX2xvY2ssICZlbnRy eS0+ZW50cnksICZxcC0NCj4gPiA+dHhfZnJlZV9xKTsNCj4gPiBAQCAtMTQ4MiwzNyArMTUxNCwy MSBAQCBzdGF0aWMgdm9pZCBudGJfbWVtY3B5X3R4KHN0cnVjdA0KPiA+IG50Yl9xdWV1ZV9lbnRy eSAqZW50cnksIHZvaWQgX19pb21lbSAqb2Zmc2V0KQ0KPiA+IMKgwqDCoMKgwqDCoMKgwqBudGJf dHhfY29weV9jYWxsYmFjayhlbnRyeSk7DQo+ID4gwqB9DQo+ID4gDQo+ID4gLXN0YXRpYyB2b2lk IG50Yl9hc3luY190eChzdHJ1Y3QgbnRiX3RyYW5zcG9ydF9xcCAqcXAsDQo+ID4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBudGJfcXVldWVf ZW50cnkgKmVudHJ5KQ0KPiA+ICtzdGF0aWMgaW50IG50Yl9hc3luY190eF9zdWJtaXQoc3RydWN0 IG50Yl90cmFuc3BvcnRfcXAgKnFwLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbnRiX3F1ZXVlX2VudHJ5ICpl bnRyeSkNCj4gPiDCoHsNCj4gPiAtwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbnRiX3BheWxvYWRfaGVh ZGVyIF9faW9tZW0gKmhkcjsNCj4gPiAtwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZG1hX2FzeW5jX3R4 X2Rlc2NyaXB0b3IgKnR4ZDsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRtYV9jaGFuICpj aGFuID0gcXAtPnR4X2RtYV9jaGFuOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZG1hX2Rl dmljZSAqZGV2aWNlOw0KPiA+ICvCoMKgwqDCoMKgwqDCoHNpemVfdCBsZW4gPSBlbnRyeS0+bGVu Ow0KPiA+ICvCoMKgwqDCoMKgwqDCoHZvaWQgKmJ1ZiA9IGVudHJ5LT5idWY7DQo+ID4gwqDCoMKg wqDCoMKgwqDCoHNpemVfdCBkZXN0X29mZiwgYnVmZl9vZmY7DQo+ID4gwqDCoMKgwqDCoMKgwqDC oHN0cnVjdCBkbWFlbmdpbmVfdW5tYXBfZGF0YSAqdW5tYXA7DQo+ID4gwqDCoMKgwqDCoMKgwqDC oGRtYV9hZGRyX3QgZGVzdDsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgZG1hX2Nvb2tpZV90IGNvb2tp ZTsNCj4gPiAtwqDCoMKgwqDCoMKgwqB2b2lkIF9faW9tZW0gKm9mZnNldDsNCj4gPiAtwqDCoMKg wqDCoMKgwqBzaXplX3QgbGVuID0gZW50cnktPmxlbjsNCj4gPiAtwqDCoMKgwqDCoMKgwqB2b2lk ICpidWYgPSBlbnRyeS0+YnVmOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqBpbnQgcmV0cmllcyA9IDA7 DQo+ID4gDQo+ID4gLcKgwqDCoMKgwqDCoMKgb2Zmc2V0ID0gcXAtPnR4X213ICsgcXAtPnR4X21h eF9mcmFtZSAqIHFwLT50eF9pbmRleDsNCj4gPiAtwqDCoMKgwqDCoMKgwqBoZHIgPSBvZmZzZXQg KyBxcC0+dHhfbWF4X2ZyYW1lIC0gc2l6ZW9mKHN0cnVjdA0KPiA+IG50Yl9wYXlsb2FkX2hlYWRl cik7DQo+ID4gLcKgwqDCoMKgwqDCoMKgZW50cnktPnR4X2hkciA9IGhkcjsNCj4gPiAtDQo+ID4g LcKgwqDCoMKgwqDCoMKgaW93cml0ZTMyKGVudHJ5LT5sZW4sICZoZHItPmxlbik7DQo+ID4gLcKg wqDCoMKgwqDCoMKgaW93cml0ZTMyKCh1MzIpcXAtPnR4X3BrdHMsICZoZHItPnZlcik7DQo+ID4g LQ0KPiA+IC3CoMKgwqDCoMKgwqDCoGlmICghY2hhbikNCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgZ290byBlcnI7DQo+ID4gLQ0KPiA+IC3CoMKgwqDCoMKgwqDCoGlmIChsZW4g PCBjb3B5X2J5dGVzKQ0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGVy cjsNCj4gPiAtDQo+ID4gwqDCoMKgwqDCoMKgwqDCoGRldmljZSA9IGNoYW4tPmRldmljZTsNCj4g PiAtwqDCoMKgwqDCoMKgwqBkZXN0ID0gcXAtPnR4X213X3BoeXMgKyBxcC0+dHhfbWF4X2ZyYW1l ICogcXAtPnR4X2luZGV4Ow0KPiA+ICvCoMKgwqDCoMKgwqDCoGRlc3QgPSBxcC0+dHhfbXdfcGh5 cyArIHFwLT50eF9tYXhfZnJhbWUgKiBlbnRyeS0+dHhfaW5kZXg7DQo+ID4gwqDCoMKgwqDCoMKg wqDCoGJ1ZmZfb2ZmID0gKHNpemVfdClidWYgJiB+UEFHRV9NQVNLOw0KPiA+IMKgwqDCoMKgwqDC oMKgwqBkZXN0X29mZiA9IChzaXplX3QpZGVzdCAmIH5QQUdFX01BU0s7DQo+ID4gDQo+ID4gQEAg LTE1MzIsMzkgKzE1NDgsNzQgQEAgc3RhdGljIHZvaWQgbnRiX2FzeW5jX3R4KHN0cnVjdA0KPiA+ IG50Yl90cmFuc3BvcnRfcXAgKnFwLA0KPiA+IMKgwqDCoMKgwqDCoMKgwqB1bm1hcC0+dG9fY250 ID0gMTsNCj4gPiANCj4gPiDCoMKgwqDCoMKgwqDCoMKgZm9yIChyZXRyaWVzID0gMDsgcmV0cmll cyA8IERNQV9SRVRSSUVTOyByZXRyaWVzKyspIHsNCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgdHhkID0gZGV2aWNlLT5kZXZpY2VfcHJlcF9kbWFfbWVtY3B5KGNoYW4sIGRlc3Qs DQo+ID4gdW5tYXAtPmFkZHJbMF0sDQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgbGVuLA0KPiA+IERNQV9QUkVQX0lOVEVSUlVQVCk7DQo+ID4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICh0eGQpDQo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGVudHJ5LT50eGQgPSBkZXZpY2UtPmRldmljZV9wcmVwX2RtYV9tZW1j cHkoY2hhbiwNCj4gPiBkZXN0LA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdW5tYXAtDQo+ID4gPmFkZHJbMF0sIGxlbiwN Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoERNQV9QUkUNCj4gPiBQX0lOVEVSUlVQVCk7DQo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGlmIChlbnRyeS0+dHhkKQ0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOw0KPiA+IA0KPiA+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxF KTsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNjaGVkdWxlX3RpbWVvdXQo RE1BX09VVF9SRVNPVVJDRV9UTyk7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoH0NCj4gPiANCj4gPiAt wqDCoMKgwqDCoMKgwqBpZiAoIXR4ZCkgew0KPiA+ICvCoMKgwqDCoMKgwqDCoGlmICghZW50cnkt PnR4ZCkgew0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcXAtPmRtYV90eF9w cmVwX2VycisrOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBlcnJf Z2V0X3VubWFwOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqB9DQo+ID4gDQo+ID4gLcKgwqDCoMKgwqDC oMKgdHhkLT5jYWxsYmFjayA9IG50Yl90eF9jb3B5X2NhbGxiYWNrOw0KPiA+IC3CoMKgwqDCoMKg wqDCoHR4ZC0+Y2FsbGJhY2tfcGFyYW0gPSBlbnRyeTsNCj4gPiAtwqDCoMKgwqDCoMKgwqBkbWFf c2V0X3VubWFwKHR4ZCwgdW5tYXApOw0KPiA+ICvCoMKgwqDCoMKgwqDCoGVudHJ5LT50eGQtPmNh bGxiYWNrID0gbnRiX3R4X2NvcHlfY2FsbGJhY2s7DQo+ID4gK8KgwqDCoMKgwqDCoMKgZW50cnkt PnR4ZC0+Y2FsbGJhY2tfcGFyYW0gPSBlbnRyeTsNCj4gPiArwqDCoMKgwqDCoMKgwqBkbWFfc2V0 X3VubWFwKGVudHJ5LT50eGQsIHVubWFwKTsNCj4gPiANCj4gPiAtwqDCoMKgwqDCoMKgwqBjb29r aWUgPSBkbWFlbmdpbmVfc3VibWl0KHR4ZCk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgY29va2llID0g ZG1hZW5naW5lX3N1Ym1pdChlbnRyeS0+dHhkKTsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgaWYgKGRt YV9zdWJtaXRfZXJyb3IoY29va2llKSkNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGdvdG8gZXJyX3NldF91bm1hcDsNCj4gPiANCj4gPiDCoMKgwqDCoMKgwqDCoMKgZG1hZW5n aW5lX3VubWFwX3B1dCh1bm1hcCk7DQo+ID4gDQo+ID4gwqDCoMKgwqDCoMKgwqDCoGRtYV9hc3lu Y19pc3N1ZV9wZW5kaW5nKGNoYW4pOw0KPiA+IC3CoMKgwqDCoMKgwqDCoHFwLT50eF9hc3luYysr Ow0KPiA+IA0KPiA+IC3CoMKgwqDCoMKgwqDCoHJldHVybjsNCj4gPiArwqDCoMKgwqDCoMKgwqBy ZXR1cm4gMDsNCj4gPiDCoGVycl9zZXRfdW5tYXA6DQo+ID4gwqDCoMKgwqDCoMKgwqDCoGRtYWVu Z2luZV91bm1hcF9wdXQodW5tYXApOw0KPiA+IMKgZXJyX2dldF91bm1hcDoNCj4gPiDCoMKgwqDC oMKgwqDCoMKgZG1hZW5naW5lX3VubWFwX3B1dCh1bm1hcCk7DQo+ID4gwqBlcnI6DQo+ID4gK8Kg wqDCoMKgwqDCoMKgcmV0dXJuIC1FTlhJTzsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZv aWQgbnRiX2FzeW5jX3R4KHN0cnVjdCBudGJfdHJhbnNwb3J0X3FwICpxcCwNCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IG50Yl9xdWV1 ZV9lbnRyeSAqZW50cnkpDQo+ID4gK3sNCj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbnRiX3Bh eWxvYWRfaGVhZGVyIF9faW9tZW0gKmhkcjsNCj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZG1h X2NoYW4gKmNoYW4gPSBxcC0+dHhfZG1hX2NoYW47DQo+ID4gK8KgwqDCoMKgwqDCoMKgdm9pZCBf X2lvbWVtICpvZmZzZXQ7DQo+ID4gK8KgwqDCoMKgwqDCoMKgaW50IHJlczsNCj4gPiArDQo+ID4g K8KgwqDCoMKgwqDCoMKgZW50cnktPnR4X2luZGV4ID0gcXAtPnR4X2luZGV4Ow0KPiA+ICvCoMKg wqDCoMKgwqDCoG9mZnNldCA9IHFwLT50eF9tdyArIHFwLT50eF9tYXhfZnJhbWUgKiBlbnRyeS0+ dHhfaW5kZXg7DQo+ID4gK8KgwqDCoMKgwqDCoMKgaGRyID0gb2Zmc2V0ICsgcXAtPnR4X21heF9m cmFtZSAtIHNpemVvZihzdHJ1Y3QNCj4gPiBudGJfcGF5bG9hZF9oZWFkZXIpOw0KPiA+ICvCoMKg wqDCoMKgwqDCoGVudHJ5LT50eF9oZHIgPSBoZHI7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoMKgwqDC oGlvd3JpdGUzMihlbnRyeS0+bGVuLCAmaGRyLT5sZW4pOw0KPiA+ICvCoMKgwqDCoMKgwqDCoGlv d3JpdGUzMigodTMyKXFwLT50eF9wa3RzLCAmaGRyLT52ZXIpOw0KPiA+ICsNCj4gPiArwqDCoMKg wqDCoMKgwqBpZiAoIWNoYW4pDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdv dG8gZXJyOw0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoZW50cnktPmxlbiA8IGNvcHlf Ynl0ZXMpDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gZXJyOw0KPiA+ ICsNCj4gPiArwqDCoMKgwqDCoMKgwqByZXMgPSBudGJfYXN5bmNfdHhfc3VibWl0KHFwLCBlbnRy eSk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJlcyA8IDApDQo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGdvdG8gZXJyOw0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAo IWVudHJ5LT5yZXRyaWVzKQ0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBxcC0+ dHhfYXN5bmMrKzsNCj4gPiArDQo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuOw0KPiA+ICsNCj4g PiArZXJyOg0KPiANCj4gSWYgdGhlcmUgaXMgYW4gZXJyb3IgYnVpbGRpbmcgb3Igc3VibWl0dGlu ZyB0aGUgZG1hIGRlc2NyaXB0b3IsIHdlDQo+IHdpbGwgZmFsbCBiYWNrIHRvIGNwdSBtZW1jcHks IGJ1dCBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbmRpY2F0ZWQgYXQNCj4gdGhlIHRpbWUgb2YgdGhl IGRtYSBjb21wbGV0aW9uLCB3ZSB3aWxsIG5vdC7CoMKgVGhpcyB3b3VsZCBiZSBhIHByb2JsZW0N Cj4gaWYgd2UgbGF0ZXIgbm90aWZ5IHRoZSBwZWVyIGRyaXZlciB0aGF0IHNvbWUgZGF0YSBoYXMg YmVlbg0KPiB0cmFuc2ZlcnJlZCwgZXZlbiB0aG91Z2ggaXQgaGFzIG5vdCBiZWVuIHRyYW5zZmVy cmVkLg0KPiANCj4gVGhpcyBzZWVtcyBsaWtlIGl0IHdvdWxkIGJlIGEgbGlrZWx5IHNpdHVhdGlv biAob3IsIGFzIGxpa2VseSBhcw0KPiBlbmNvdW50ZXJpbmcgYSBkbWEgZW5naW5lIGVycm9yKSwg YmVjYXVzZSBkbWEgcHJlcCB3aWxsIGJlZ2luIHRvIGZhaWwNCj4gYXMgc29vbiBhcyB0aGUgZmly c3QgZXJyb3IgaXMgZW5jb3VudGVyZWQuwqDCoEFmdGVyIGRldGVjdGluZyBhbiBlcnJvciwNCj4g aW4gW1BBVENIIDIvNV0gYml0IElPQVRfQ0hBTl9ET1dOIGlzIHNldCwgY2F1c2luZyBkbWEgcHJl cCB0byBmYWlsIGluDQo+IHRoZSBtZWFuIHRpbWUuwqDCoFRoZW4sIG50Yl90cmFuc3BvcnQgd2ls bCBpbW1lZGlhdGVseSBmYWxsIGJhY2sgdG8NCj4gdHJhbnNmZXJyaW5nIGRhdGEgdmlhIGNwdSBt ZW1jcHksIGJ1dCBJIGRvIG5vdCBzZWUgYW55IGZhbGwgYmFjayB0bw0KPiBjcHUgbWVtY3B5IGZv ciB0aGUgZmFpbGVkIG9yIGFib3J0ZWQgZGVzY3JpcHRvcnMuDQoNCkFoIEkgZm9yZ2V0IHRoYXQg aXQgZmFsbHMgYmFjayB0byBDUFUgY29weS4gSSB3YXMgdHJ5aW5nIHRvIGp1c3QgYWJvcnQNCmV2 ZXJ5dGhpbmcgYW5kIGxldCB0aGUgdXBwZXIgbmV0d29yayBsYXllciBoYW5kbGUgaXQuIEknbGwg Y2hhbmdlIGl0IHRvDQpDUFUgY29weSBpbnN0ZWFkLsKgDQoNCg0KPiANCj4gPiDCoMKgwqDCoMKg wqDCoMKgbnRiX21lbWNweV90eChlbnRyeSwgb2Zmc2V0KTsNCj4gPiDCoMKgwqDCoMKgwqDCoMKg cXAtPnR4X21lbWNweSsrOw0KPiA+IMKgfQ0KPiA+IEBAIC0xOTQwLDYgKzE5OTEsMTAgQEAgaW50 IG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZShzdHJ1Y3QNCj4gPiBudGJfdHJhbnNwb3J0X3FwICpx cCwgdm9pZCAqY2IsIHZvaWQgKmRhdGEsDQo+ID4gwqDCoMKgwqDCoMKgwqDCoGVudHJ5LT5idWYg PSBkYXRhOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqBlbnRyeS0+bGVuID0gbGVuOw0KPiA+IMKgwqDC oMKgwqDCoMKgwqBlbnRyeS0+ZmxhZ3MgPSAwOw0KPiA+ICvCoMKgwqDCoMKgwqDCoGVudHJ5LT5l cnJvcnMgPSAwOw0KPiA+ICvCoMKgwqDCoMKgwqDCoGVudHJ5LT5yZXRyaWVzID0gMDsNCj4gPiAr wqDCoMKgwqDCoMKgwqBlbnRyeS0+dHhfaW5kZXggPSAwOw0KPiA+ICvCoMKgwqDCoMKgwqDCoGVu dHJ5LT50eGQgPSBOVUxMOw0KPiA+IA0KPiA+IMKgwqDCoMKgwqDCoMKgwqByYyA9IG50Yl9wcm9j ZXNzX3R4KHFwLCBlbnRyeSk7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoGlmIChyYykNCj4gPiA=