From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 11/20] drm/i915: Rely on spinlock protection for GPU error capture Date: Mon, 22 Jul 2019 14:40:33 +0100 Message-ID: References: <20190718070024.21781-1-chris@chris-wilson.co.uk> <20190718070024.21781-11-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id B0D4189B96 for ; Mon, 22 Jul 2019 13:40:36 +0000 (UTC) In-Reply-To: <20190718070024.21781-11-chris@chris-wilson.co.uk> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDE4LzA3LzIwMTkgMDg6MDAsIENocmlzIFdpbHNvbiB3cm90ZToKPiBUcnVzdCB0aGF0IHdl IG5vdyBoYXZlIGFkZXF1YXRlIHByb3RlY3Rpb24gb3ZlciB0aGUgbG93IGxldmVsIHN0cnVjdHVy ZXMKPiB2aWEgdGhlIGVuZ2luZS0+YWN0aXZlLmxvY2sgdG8gYWxsb3cgb3Vyc2VsdmVzIHRvIGNh cHR1cmUgdGhlIEdQVSBlcnJvcgo+IHN0YXRlIHdpdGhvdXQgdGhlIGhlYXZ5IGhhbW1lciBvZiBz dG9wX21hY2hpbmUoKS4gU2FkbHkgdGhpcyBkb2VzIG1lYW4KPiB0aGF0IHdlIGhhdmUgdG8gZm9y Z28gc29tZSBvZiB0aGUgbGVzc2VyIHVzZWQgaW5mb3JtYXRpb24gKG5vdCBkZXJpdmVkCj4gZnJv bSB0aGUgYWN0aXZlIHN0YXRlKSB0aGF0IGlzIG5vdCBjb250cm9sbGVkIGJ5IHRoZSBhY3RpdmUg bG9ja3MuIFRoaXMKPiBpbmNsdWRlcyB0aGUgbGlzdCBvZiBidWZmZXJzIGluIHRoZSBwcEdUVCBh bmQgcGlubmVkIGdsb2JhbGx5IGluIHRoZQo+IEdHVFQuIE9yaWdpbmFsbHkgdGhpcyB3YXMgdXNl ZCB0byBtYW51YWxseSB2ZXJpZnkgcmVsb2NhdGlvbnMsIGJ1dAo+IGhhc24ndCBiZWVuIHJlcXVp cmVkIGZvciBzb21ldGltZSBhbmQgbW9kZXJuIG1lc2Egbm93IGhhcyB0aGUgaGFiaXQgb2YKPiBl bnN1cmluZyB0aGF0IGFsbCBpbnRlcmVzdGluZyBidWZmZXJzIHdpdGhpbiBhIGJhdGNoIGFyZSBj YXB0dXJlZCBpbiB0aGVpcgo+IGVudGlyZXR5ICh0aGF0IGFyZSB0aGUgYXV4aWxpYXJ5IHN0YXRl IGJ1ZmZlcnMsIGJ1dCBub3QgdGhlIHRleHR1cmVzKS4KPiAKPiBBIHVzZWZ1bCBzaWRlLWVmZmVj dCBpcyB0aGF0IHRoaXMgYWxsb3dzIHVzIHRvIHJlc3RvcmUgZXJyb3IgY2FwdHVyaW5nCj4gZm9y IEJyYXN3ZWxsIGFuZCBCcm94dG9uLgo+IAo+IHYyOiBVc2UgcGFnZXZlYyBmb3IgYSB0eXBpY2Fs IHJhbmRvbSBudW1iZXIKPiAKPiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNo cmlzLXdpbHNvbi5jby51az4KPiAtLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X2d0dC5jICAgfCAgIDUgLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3Iu YyB8IDQ5OSArKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9ncHVfZXJyb3IuaCB8ICAxNyAtCj4gICAzIGZpbGVzIGNoYW5nZWQsIDIwMyBpbnNl cnRpb25zKCspLCAzMTggZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f Z3R0LmMKPiBpbmRleCA4ZjMzZDNlNTJiOWUuLjUwMGYzY2RjYzRiMyAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtX2d0dC5jCj4gQEAgLTI5NjYsMTEgKzI5NjYsNiBAQCBzdGF0aWMgaW50 IGdlbjhfZ21jaF9wcm9iZShzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0KQo+ICAgCQlnZ3R0LT52bS5p bnNlcnRfcGFnZSAgICA9IGJ4dF92dGRfZ2d0dF9pbnNlcnRfcGFnZV9fQktMOwo+ICAgCQlpZiAo Z2d0dC0+dm0uY2xlYXJfcmFuZ2UgIT0gbm9wX2NsZWFyX3JhbmdlKQo+ICAgCQkJZ2d0dC0+dm0u Y2xlYXJfcmFuZ2UgPSBieHRfdnRkX2dndHRfY2xlYXJfcmFuZ2VfX0JLTDsKPiAtCj4gLQkJLyog UHJldmVudCByZWN1cnNpdmVseSBjYWxsaW5nIHN0b3BfbWFjaGluZSgpIGFuZCBkZWFkbG9ja3Mu ICovCj4gLQkJZGV2X2luZm8oZGV2X3ByaXYtPmRybS5kZXYsCj4gLQkJCSAiRGlzYWJsaW5nIGVy cm9yIGNhcHR1cmUgZm9yIFZULWQgd29ya2Fyb3VuZFxuIik7Cj4gLQkJaTkxNV9kaXNhYmxlX2Vy cm9yX3N0YXRlKGRldl9wcml2LCAtRU5PREVWKTsKPiAgIAl9Cj4gICAKPiAgIAlnZ3R0LT5pbnZh bGlkYXRlID0gZ2VuNl9nZ3R0X2ludmFsaWRhdGU7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dw dV9lcnJvci5jCj4gaW5kZXggMjQ4MzViZTMwMGJjLi4xMzFhNTJjNDI4ZGUgMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYwo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMKPiBAQCAtMjksOCArMjksOCBAQAo+ICAgCj4g ICAjaW5jbHVkZSA8bGludXgvYXNjaWk4NS5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L25taS5oPgo+ ICsjaW5jbHVkZSA8bGludXgvcGFnZXZlYy5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJs aXN0Lmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9zdG9wX21hY2hpbmUuaD4KPiAgICNpbmNsdWRlIDxs aW51eC91dHNuYW1lLmg+Cj4gICAjaW5jbHVkZSA8bGludXgvemxpYi5oPgo+ICAgCj4gQEAgLTQ2 LDYgKzQ2LDkgQEAKPiAgICNpbmNsdWRlICJpOTE1X3NjYXR0ZXJsaXN0LmgiCj4gICAjaW5jbHVk ZSAiaW50ZWxfY3NyLmgiCj4gICAKPiArI2RlZmluZSBBTExPV19GQUlMIChHRlBfS0VSTkVMIHwg X19HRlBfUkVUUllfTUFZRkFJTCB8IF9fR0ZQX05PV0FSTikKPiArI2RlZmluZSBBVE9NSUNfTUFZ RkFJTCAoR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTikKPiArCj4gICBzdGF0aWMgaW5saW5lIGNv bnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKgo+ICAgZW5naW5lX2xvb2t1cChjb25zdCBzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgdW5zaWduZWQgaW50IGlkKQo+ICAgewo+IEBAIC02 NywyNiArNzAsNiBAQCBlbmdpbmVfbmFtZShjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSwgdW5zaWduZWQgaW50IGlkKQo+ICAgCXJldHVybiBfX2VuZ2luZV9uYW1lKGVuZ2luZV9s b29rdXAoaTkxNSwgaWQpKTsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgY29uc3QgY2hhciAqdGlsaW5n X2ZsYWcoaW50IHRpbGluZykKPiAtewo+IC0Jc3dpdGNoICh0aWxpbmcpIHsKPiAtCWRlZmF1bHQ6 Cj4gLQljYXNlIEk5MTVfVElMSU5HX05PTkU6IHJldHVybiAiIjsKPiAtCWNhc2UgSTkxNV9USUxJ TkdfWDogcmV0dXJuICIgWCI7Cj4gLQljYXNlIEk5MTVfVElMSU5HX1k6IHJldHVybiAiIFkiOwo+ IC0JfQo+IC19Cj4gLQo+IC1zdGF0aWMgY29uc3QgY2hhciAqZGlydHlfZmxhZyhpbnQgZGlydHkp Cj4gLXsKPiAtCXJldHVybiBkaXJ0eSA/ICIgZGlydHkiIDogIiI7Cj4gLX0KPiAtCj4gLXN0YXRp YyBjb25zdCBjaGFyICpwdXJnZWFibGVfZmxhZyhpbnQgcHVyZ2VhYmxlKQo+IC17Cj4gLQlyZXR1 cm4gcHVyZ2VhYmxlID8gIiBwdXJnZWFibGUiIDogIiI7Cj4gLX0KPiAtCj4gICBzdGF0aWMgdm9p ZCBfX3NnX3NldF9idWYoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKPiAgIAkJCSB2b2lkICphZGRy LCB1bnNpZ25lZCBpbnQgbGVuLCBsb2ZmX3QgaXQpCj4gICB7Cj4gQEAgLTExNCw3ICs5Nyw3IEBA IHN0YXRpYyBib29sIF9faTkxNV9lcnJvcl9ncm93KHN0cnVjdCBkcm1faTkxNV9lcnJvcl9zdGF0 ZV9idWYgKmUsIHNpemVfdCBsZW4pCj4gICAJaWYgKGUtPmN1ciA9PSBlLT5lbmQpIHsKPiAgIAkJ c3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2w7Cj4gICAKPiAtCQlzZ2wgPSAodHlwZW9mKHNnbCkpX19n ZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOwo+ICsJCXNnbCA9ICh0eXBlb2Yoc2dsKSlfX2dldF9m cmVlX3BhZ2UoQUxMT1dfRkFJTCk7Cj4gICAJCWlmICghc2dsKSB7Cj4gICAJCQllLT5lcnIgPSAt RU5PTUVNOwo+ICAgCQkJcmV0dXJuIGZhbHNlOwo+IEBAIC0xMzQsNyArMTE3LDcgQEAgc3RhdGlj IGJvb2wgX19pOTE1X2Vycm9yX2dyb3coc3RydWN0IGRybV9pOTE1X2Vycm9yX3N0YXRlX2J1ZiAq ZSwgc2l6ZV90IGxlbikKPiAgIAl9Cj4gICAKPiAgIAllLT5zaXplID0gQUxJR04obGVuICsgMSwg U1pfNjRLKTsKPiAtCWUtPmJ1ZiA9IGttYWxsb2MoZS0+c2l6ZSwgR0ZQX0tFUk5FTCB8IF9fR0ZQ X05PV0FSTiB8IF9fR0ZQX05PUkVUUlkpOwo+ICsJZS0+YnVmID0ga21hbGxvYyhlLT5zaXplLCBB TExPV19GQUlMKTsKPiAgIAlpZiAoIWUtPmJ1Zikgewo+ICAgCQllLT5zaXplID0gUEFHRV9BTElH TihsZW4gKyAxKTsKPiAgIAkJZS0+YnVmID0ga21hbGxvYyhlLT5zaXplLCBHRlBfS0VSTkVMKTsK PiBAQCAtMjExLDQ3ICsxOTQsMTI1IEBAIGk5MTVfZXJyb3JfcHJpbnRlcihzdHJ1Y3QgZHJtX2k5 MTVfZXJyb3Jfc3RhdGVfYnVmICplKQo+ICAgCXJldHVybiBwOwo+ICAgfQo+ICAgCj4gKy8qIHNp bmdsZSB0aHJlYWRlZCBwYWdlIGFsbG9jYXRvciB3aXRoIGEgcmVzZXJ2ZWQgc3Rhc2ggZm9yIGVt ZXJnZW5jaWVzICovCj4gK3N0YXRpYyB2b2lkICpfX2FsbG9jX3BhZ2UoZ2ZwX3QgZ2ZwKQo+ICt7 Cj4gKwlyZXR1cm4gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2UoZ2ZwKTsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgcG9vbF9maW5pKHN0cnVjdCBwYWdldmVjICpwdikKPiArewo+ICsJcGFnZXZlY19y ZWxlYXNlKHB2KTsKPiArfQo+ICsKPiArc3RhdGljIGludCBwb29sX3JlZmlsbChzdHJ1Y3QgcGFn ZXZlYyAqcHYsIGdmcF90IGdmcCkKPiArewo+ICsJd2hpbGUgKHBhZ2V2ZWNfc3BhY2UocHYpKSB7 Cj4gKwkJc3RydWN0IHBhZ2UgKnA7Cj4gKwo+ICsJCXAgPSBhbGxvY19wYWdlKGdmcCk7Cj4gKwkJ aWYgKCFwKQo+ICsJCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwkJcGFnZXZlY19hZGQocHYsIHAp Owo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHBvb2xfaW5p dChzdHJ1Y3QgcGFnZXZlYyAqcHYsIGdmcF90IGdmcCkKPiArewo+ICsJaW50IGVycjsKPiArCj4g KwlwYWdldmVjX2luaXQocHYpOwo+ICsKPiArCWVyciA9IHBvb2xfcmVmaWxsKHB2LCBnZnApOwo+ ICsJaWYgKGVycikKPiArCQlwb29sX2ZpbmkocHYpOwo+ICsKPiArCXJldHVybiBlcnI7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkICpwb29sX2FsbG9jKHN0cnVjdCBwYWdldmVjICpwdiwgZ2ZwX3Qg Z2ZwKQo+ICt7Cj4gKwl2b2lkICpwdHI7Cj4gKwo+ICsJcHRyID0gX19hbGxvY19wYWdlKGdmcCk7 Cj4gKwlpZiAocHRyKQo+ICsJCXJldHVybiBwdHI7Cj4gKwo+ICsJaWYgKCFwYWdldmVjX2NvdW50 KHB2KSkKPiArCQlyZXR1cm4gTlVMTDsKPiArCj4gKwlyZXR1cm4gcGFnZV9hZGRyZXNzKHB2LT5w YWdlc1stLXB2LT5ucl0pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBwb29sX2ZyZWUoc3RydWN0 IHBhZ2V2ZWMgKnB2LCB2b2lkICphZGRyKQo+ICt7Cj4gKwlzdHJ1Y3QgcGFnZSAqcCA9IHZpcnRf dG9fcGFnZShhZGRyKTsKPiArCj4gKwlpZiAocGFnZXZlY19zcGFjZShwdikpIHsKPiArCQlwdi0+ cGFnZXNbcHYtPm5yKytdID0gcDsKCnBhZ2V2ZWNfYWRkKHB2LCBwKQoKPiArCQlyZXR1cm47Cj4g Kwl9Cj4gKwo+ICsJX19mcmVlX3BhZ2VzKHAsIDApOwoKaWYtZWxzZSB3b3VsZCBwcm9iYWJseSBt ZSBtb3JlIHJlYWRhYmxlLCBpbnN0ZWFkIG9mIGlmLXJldHVybi4gQWxzbyAKY291bGQgdXNlIF9f ZnJlZV9wYWdlIHRvIGF2b2lkICIsIDAiLgoKPiArfQo+ICsKPiAgICNpZmRlZiBDT05GSUdfRFJN X0k5MTVfQ09NUFJFU1NfRVJST1IKPiAgIAo+ICAgc3RydWN0IGNvbXByZXNzIHsKPiArCXN0cnVj dCBwYWdldmVjIHBvb2w7Cj4gICAJc3RydWN0IHpfc3RyZWFtX3MgenN0cmVhbTsKPiAgIAl2b2lk ICp0bXA7Cj4gICB9Owo+ICAgCj4gICBzdGF0aWMgYm9vbCBjb21wcmVzc19pbml0KHN0cnVjdCBj b21wcmVzcyAqYykKPiAgIHsKPiAtCXN0cnVjdCB6X3N0cmVhbV9zICp6c3RyZWFtID0gbWVtc2V0 KCZjLT56c3RyZWFtLCAwLCBzaXplb2YoYy0+enN0cmVhbSkpOwo+ICsJc3RydWN0IHpfc3RyZWFt X3MgKnpzdHJlYW0gPSAmYy0+enN0cmVhbTsKPiAgIAo+IC0JenN0cmVhbS0+d29ya3NwYWNlID0K PiAtCQlrbWFsbG9jKHpsaWJfZGVmbGF0ZV93b3Jrc3BhY2VzaXplKE1BWF9XQklUUywgTUFYX01F TV9MRVZFTCksCj4gLQkJCUdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4pOwo+IC0JaWYgKCF6c3Ry ZWFtLT53b3Jrc3BhY2UpCj4gKwlpZiAocG9vbF9pbml0KCZjLT5wb29sLCBBTExPV19GQUlMKSkK PiAgIAkJcmV0dXJuIGZhbHNlOwo+ICAgCj4gLQlpZiAoemxpYl9kZWZsYXRlSW5pdCh6c3RyZWFt LCBaX0RFRkFVTFRfQ09NUFJFU1NJT04pICE9IFpfT0spIHsKPiAtCQlrZnJlZSh6c3RyZWFtLT53 b3Jrc3BhY2UpOwo+ICsJenN0cmVhbS0+d29ya3NwYWNlID0KPiArCQlrbWFsbG9jKHpsaWJfZGVm bGF0ZV93b3Jrc3BhY2VzaXplKE1BWF9XQklUUywgTUFYX01FTV9MRVZFTCksCj4gKwkJCUFMTE9X X0ZBSUwpOwo+ICsJaWYgKCF6c3RyZWFtLT53b3Jrc3BhY2UpIHsKPiArCQlwb29sX2ZpbmkoJmMt PnBvb2wpOwo+ICAgCQlyZXR1cm4gZmFsc2U7Cj4gICAJfQo+ICAgCj4gICAJYy0+dG1wID0gTlVM TDsKPiAgIAlpZiAoaTkxNV9oYXNfbWVtY3B5X2Zyb21fd2MoKSkKPiAtCQljLT50bXAgPSAodm9p ZCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTsKPiArCQljLT50 bXAgPSBwb29sX2FsbG9jKCZjLT5wb29sLCBBTExPV19GQUlMKTsKPiAgIAo+ICAgCXJldHVybiB0 cnVlOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyB2b2lkICpjb21wcmVzc19uZXh0X3BhZ2Uoc3RydWN0 IGRybV9pOTE1X2Vycm9yX29iamVjdCAqZHN0KQo+ICtzdGF0aWMgYm9vbCBjb21wcmVzc19zdGFy dChzdHJ1Y3QgY29tcHJlc3MgKmMpCj4gICB7Cj4gLQl1bnNpZ25lZCBsb25nIHBhZ2U7Cj4gKwlz dHJ1Y3Qgel9zdHJlYW1fcyAqenN0cmVhbSA9ICZjLT56c3RyZWFtOwo+ICsJdm9pZCAqd29ya3Nw YWNlID0genN0cmVhbS0+d29ya3NwYWNlOwo+ICsKPiArCW1lbXNldCh6c3RyZWFtLCAwLCBzaXpl b2YoKnpzdHJlYW0pKTsKPiArCXpzdHJlYW0tPndvcmtzcGFjZSA9IHdvcmtzcGFjZTsKPiArCj4g KwlyZXR1cm4gemxpYl9kZWZsYXRlSW5pdCh6c3RyZWFtLCBaX0RFRkFVTFRfQ09NUFJFU1NJT04p ID09IFpfT0s7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkICpjb21wcmVzc19uZXh0X3BhZ2Uoc3Ry dWN0IGNvbXByZXNzICpjLAo+ICsJCQkJc3RydWN0IGRybV9pOTE1X2Vycm9yX29iamVjdCAqZHN0 KQo+ICt7Cj4gKwl2b2lkICpwYWdlOwo+ICAgCj4gICAJaWYgKGRzdC0+cGFnZV9jb3VudCA+PSBk c3QtPm51bV9wYWdlcykKPiAgIAkJcmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7Cj4gICAKPiAtCXBh Z2UgPSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7Cj4gKwlwYWdl ID0gcG9vbF9hbGxvYygmYy0+cG9vbCwgQVRPTUlDX01BWUZBSUwpOwo+ICAgCWlmICghcGFnZSkK PiAgIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gICAKPiAtCXJldHVybiBkc3QtPnBhZ2Vz W2RzdC0+cGFnZV9jb3VudCsrXSA9ICh2b2lkICopcGFnZTsKPiArCXJldHVybiBkc3QtPnBhZ2Vz W2RzdC0+cGFnZV9jb3VudCsrXSA9IHBhZ2U7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyBpbnQgY29t cHJlc3NfcGFnZShzdHJ1Y3QgY29tcHJlc3MgKmMsCj4gQEAgLTI2Nyw3ICszMjgsNyBAQCBzdGF0 aWMgaW50IGNvbXByZXNzX3BhZ2Uoc3RydWN0IGNvbXByZXNzICpjLAo+ICAgCj4gICAJZG8gewo+ ICAgCQlpZiAoenN0cmVhbS0+YXZhaWxfb3V0ID09IDApIHsKPiAtCQkJenN0cmVhbS0+bmV4dF9v dXQgPSBjb21wcmVzc19uZXh0X3BhZ2UoZHN0KTsKPiArCQkJenN0cmVhbS0+bmV4dF9vdXQgPSBj b21wcmVzc19uZXh0X3BhZ2UoYywgZHN0KTsKPiAgIAkJCWlmIChJU19FUlIoenN0cmVhbS0+bmV4 dF9vdXQpKQo+ICAgCQkJCXJldHVybiBQVFJfRVJSKHpzdHJlYW0tPm5leHRfb3V0KTsKPiAgIAo+ IEBAIC0yOTUsNyArMzU2LDcgQEAgc3RhdGljIGludCBjb21wcmVzc19mbHVzaChzdHJ1Y3QgY29t cHJlc3MgKmMsCj4gICAJZG8gewo+ICAgCQlzd2l0Y2ggKHpsaWJfZGVmbGF0ZSh6c3RyZWFtLCBa X0ZJTklTSCkpIHsKPiAgIAkJY2FzZSBaX09LOiAvKiBtb3JlIHNwYWNlIHJlcXVlc3RlZCAqLwo+ IC0JCQl6c3RyZWFtLT5uZXh0X291dCA9IGNvbXByZXNzX25leHRfcGFnZShkc3QpOwo+ICsJCQl6 c3RyZWFtLT5uZXh0X291dCA9IGNvbXByZXNzX25leHRfcGFnZShjLCBkc3QpOwo+ICAgCQkJaWYg KElTX0VSUih6c3RyZWFtLT5uZXh0X291dCkpCj4gICAJCQkJcmV0dXJuIFBUUl9FUlIoenN0cmVh bS0+bmV4dF9vdXQpOwo+ICAgCj4gQEAgLTMxNiwxNSArMzc3LDE3IEBAIHN0YXRpYyBpbnQgY29t cHJlc3NfZmx1c2goc3RydWN0IGNvbXByZXNzICpjLAo+ICAgCXJldHVybiAwOwo+ICAgfQo+ICAg Cj4gLXN0YXRpYyB2b2lkIGNvbXByZXNzX2Zpbmkoc3RydWN0IGNvbXByZXNzICpjLAo+IC0JCQkg IHN0cnVjdCBkcm1faTkxNV9lcnJvcl9vYmplY3QgKmRzdCkKPiArc3RhdGljIHZvaWQgY29tcHJl c3NfZmluaXNoKHN0cnVjdCBjb21wcmVzcyAqYykKPiAgIHsKPiAtCXN0cnVjdCB6X3N0cmVhbV9z ICp6c3RyZWFtID0gJmMtPnpzdHJlYW07Cj4gKwl6bGliX2RlZmxhdGVFbmQoJmMtPnpzdHJlYW0p Owo+ICt9Cj4gICAKPiAtCXpsaWJfZGVmbGF0ZUVuZCh6c3RyZWFtKTsKPiAtCWtmcmVlKHpzdHJl YW0tPndvcmtzcGFjZSk7Cj4gK3N0YXRpYyB2b2lkIGNvbXByZXNzX2Zpbmkoc3RydWN0IGNvbXBy ZXNzICpjKQo+ICt7Cj4gKwlrZnJlZShjLT56c3RyZWFtLndvcmtzcGFjZSk7Cj4gICAJaWYgKGMt PnRtcCkKPiAtCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYy0+dG1wKTsKPiArCQlwb29sX2Zy ZWUoJmMtPnBvb2wsIGMtPnRtcCk7Cj4gKwlwb29sX2ZpbmkoJmMtPnBvb2wpOwo+ICAgfQo+ICAg Cj4gICBzdGF0aWMgdm9pZCBlcnJfY29tcHJlc3Npb25fbWFya2VyKHN0cnVjdCBkcm1faTkxNV9l cnJvcl9zdGF0ZV9idWYgKm0pCj4gQEAgLTMzNSw5ICszOTgsMTUgQEAgc3RhdGljIHZvaWQgZXJy X2NvbXByZXNzaW9uX21hcmtlcihzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfc3RhdGVfYnVmICptKQo+ ICAgI2Vsc2UKPiAgIAo+ICAgc3RydWN0IGNvbXByZXNzIHsKPiArCXN0cnVjdCBwYWdldmVjIHBv b2w7Cj4gICB9Owo+ICAgCj4gICBzdGF0aWMgYm9vbCBjb21wcmVzc19pbml0KHN0cnVjdCBjb21w cmVzcyAqYykKPiArewo+ICsJcmV0dXJuIHBvb2xfaW5pdCgmYy0+cG9vbCwgQUxMT1dfRkFJTCkg PT0gMDsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgY29tcHJlc3Nfc3RhcnQoc3RydWN0IGNvbXBy ZXNzICpjKQo+ICAgewo+ICAgCXJldHVybiB0cnVlOwo+ICAgfQo+IEBAIC0zNDYsMTQgKzQxNSwx MiBAQCBzdGF0aWMgaW50IGNvbXByZXNzX3BhZ2Uoc3RydWN0IGNvbXByZXNzICpjLAo+ICAgCQkJ IHZvaWQgKnNyYywKPiAgIAkJCSBzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfb2JqZWN0ICpkc3QpCj4g ICB7Cj4gLQl1bnNpZ25lZCBsb25nIHBhZ2U7Cj4gICAJdm9pZCAqcHRyOwo+ICAgCj4gLQlwYWdl ID0gX19nZXRfZnJlZV9wYWdlKEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4pOwo+IC0JaWYgKCFw YWdlKQo+ICsJcHRyID0gcG9vbF9hbGxvYygmYy0+cG9vbCwgQVRPTUlDX01BWUZBSUwpOwo+ICsJ aWYgKCFwdHIpCj4gICAJCXJldHVybiAtRU5PTUVNOwo+ICAgCj4gLQlwdHIgPSAodm9pZCAqKXBh Z2U7Cj4gICAJaWYgKCFpOTE1X21lbWNweV9mcm9tX3djKHB0ciwgc3JjLCBQQUdFX1NJWkUpKQo+ ICAgCQltZW1jcHkocHRyLCBzcmMsIFBBR0VfU0laRSk7Cj4gICAJZHN0LT5wYWdlc1tkc3QtPnBh Z2VfY291bnQrK10gPSBwdHI7Cj4gQEAgLTM2Nyw5ICs0MzQsMTMgQEAgc3RhdGljIGludCBjb21w cmVzc19mbHVzaChzdHJ1Y3QgY29tcHJlc3MgKmMsCj4gICAJcmV0dXJuIDA7Cj4gICB9Cj4gICAK PiAtc3RhdGljIHZvaWQgY29tcHJlc3NfZmluaShzdHJ1Y3QgY29tcHJlc3MgKmMsCj4gLQkJCSAg c3RydWN0IGRybV9pOTE1X2Vycm9yX29iamVjdCAqZHN0KQo+ICtzdGF0aWMgdm9pZCBjb21wcmVz c19maW5pc2goc3RydWN0IGNvbXByZXNzICpjKQo+ICt7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IGNvbXByZXNzX2Zpbmkoc3RydWN0IGNvbXByZXNzICpjKQo+ICAgewo+ICsJcG9vbF9maW5pKCZj LT5wb29sKTsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIHZvaWQgZXJyX2NvbXByZXNzaW9uX21hcmtl cihzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfc3RhdGVfYnVmICptKQo+IEBAIC0zNzksMzYgKzQ1MCw2 IEBAIHN0YXRpYyB2b2lkIGVycl9jb21wcmVzc2lvbl9tYXJrZXIoc3RydWN0IGRybV9pOTE1X2Vy cm9yX3N0YXRlX2J1ZiAqbSkKPiAgIAo+ICAgI2VuZGlmCj4gICAKPiAtc3RhdGljIHZvaWQgcHJp bnRfZXJyb3JfYnVmZmVycyhzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfc3RhdGVfYnVmICptLAo+IC0J CQkJY29uc3QgY2hhciAqbmFtZSwKPiAtCQkJCXN0cnVjdCBkcm1faTkxNV9lcnJvcl9idWZmZXIg KmVyciwKPiAtCQkJCWludCBjb3VudCkKPiAtewo+IC0JZXJyX3ByaW50ZihtLCAiJXMgWyVkXTpc biIsIG5hbWUsIGNvdW50KTsKPiAtCj4gLQl3aGlsZSAoY291bnQtLSkgewo+IC0JCWVycl9wcmlu dGYobSwgIiAgICAlMDh4XyUwOHggJTh1ICUwMnggJTAyeCIsCj4gLQkJCSAgIHVwcGVyXzMyX2Jp dHMoZXJyLT5ndHRfb2Zmc2V0KSwKPiAtCQkJICAgbG93ZXJfMzJfYml0cyhlcnItPmd0dF9vZmZz ZXQpLAo+IC0JCQkgICBlcnItPnNpemUsCj4gLQkJCSAgIGVyci0+cmVhZF9kb21haW5zLAo+IC0J CQkgICBlcnItPndyaXRlX2RvbWFpbik7Cj4gLQkJZXJyX3B1dHMobSwgdGlsaW5nX2ZsYWcoZXJy LT50aWxpbmcpKTsKPiAtCQllcnJfcHV0cyhtLCBkaXJ0eV9mbGFnKGVyci0+ZGlydHkpKTsKPiAt CQllcnJfcHV0cyhtLCBwdXJnZWFibGVfZmxhZyhlcnItPnB1cmdlYWJsZSkpOwo+IC0JCWVycl9w dXRzKG0sIGVyci0+dXNlcnB0ciA/ICIgdXNlcnB0ciIgOiAiIik7Cj4gLQkJZXJyX3B1dHMobSwg aTkxNV9jYWNoZV9sZXZlbF9zdHIobS0+aTkxNSwgZXJyLT5jYWNoZV9sZXZlbCkpOwo+IC0KPiAt CQlpZiAoZXJyLT5uYW1lKQo+IC0JCQllcnJfcHJpbnRmKG0sICIgKG5hbWU6ICVkKSIsIGVyci0+ bmFtZSk7Cj4gLQkJaWYgKGVyci0+ZmVuY2VfcmVnICE9IEk5MTVfRkVOQ0VfUkVHX05PTkUpCj4g LQkJCWVycl9wcmludGYobSwgIiAoZmVuY2U6ICVkKSIsIGVyci0+ZmVuY2VfcmVnKTsKPiAtCj4g LQkJZXJyX3B1dHMobSwgIlxuIik7Cj4gLQkJZXJyKys7Cj4gLQl9Cj4gLX0KPiAtCj4gICBzdGF0 aWMgdm9pZCBlcnJvcl9wcmludF9pbnN0ZG9uZShzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfc3RhdGVf YnVmICptLAo+ICAgCQkJCSBjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZXJyb3JfZW5naW5lICplZSkK PiAgIHsKPiBAQCAtNzM0LDMzICs3NzUsNiBAQCBzdGF0aWMgdm9pZCBfX2Vycl9wcmludF90b19z Z2woc3RydWN0IGRybV9pOTE1X2Vycm9yX3N0YXRlX2J1ZiAqbSwKPiAgIAkJCWVycm9yX3ByaW50 X2VuZ2luZShtLCAmZXJyb3ItPmVuZ2luZVtpXSwgZXJyb3ItPmVwb2NoKTsKPiAgIAl9Cj4gICAK PiAtCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGVycm9yLT5hY3RpdmVfdm0pOyBpKyspIHsK PiAtCQljaGFyIGJ1ZlsxMjhdOwo+IC0JCWludCBsZW4sIGZpcnN0ID0gMTsKPiAtCj4gLQkJaWYg KCFlcnJvci0+YWN0aXZlX3ZtW2ldKQo+IC0JCQlicmVhazsKPiAtCj4gLQkJbGVuID0gc2NucHJp bnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJBY3RpdmUgKCIpOwo+IC0JCWZvciAoaiA9IDA7IGogPCBB UlJBWV9TSVpFKGVycm9yLT5lbmdpbmUpOyBqKyspIHsKPiAtCQkJaWYgKGVycm9yLT5lbmdpbmVb al0udm0gIT0gZXJyb3ItPmFjdGl2ZV92bVtpXSkKPiAtCQkJCWNvbnRpbnVlOwo+IC0KPiAtCQkJ bGVuICs9IHNjbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpLCAiJXMlcyIsCj4gLQkJCQkJ IGZpcnN0ID8gIiIgOiAiLCAiLAo+IC0JCQkJCSBtLT5pOTE1LT5lbmdpbmVbal0tPm5hbWUpOwo+ IC0JCQlmaXJzdCA9IDA7Cj4gLQkJfQo+IC0JCXNjbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihi dWYpLCAiKSIpOwo+IC0JCXByaW50X2Vycm9yX2J1ZmZlcnMobSwgYnVmLAo+IC0JCQkJICAgIGVy cm9yLT5hY3RpdmVfYm9baV0sCj4gLQkJCQkgICAgZXJyb3ItPmFjdGl2ZV9ib19jb3VudFtpXSk7 Cj4gLQl9Cj4gLQo+IC0JcHJpbnRfZXJyb3JfYnVmZmVycyhtLCAiUGlubmVkIChnbG9iYWwpIiwK PiAtCQkJICAgIGVycm9yLT5waW5uZWRfYm8sCj4gLQkJCSAgICBlcnJvci0+cGlubmVkX2JvX2Nv dW50KTsKPiAtCj4gICAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZXJyb3ItPmVuZ2luZSk7 IGkrKykgewo+ICAgCQljb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZXJyb3JfZW5naW5lICplZSA9ICZl cnJvci0+ZW5naW5lW2ldOwo+ICAgCj4gQEAgLTk3NCwxMCArOTg4LDYgQEAgdm9pZCBfX2k5MTVf Z3B1X3N0YXRlX2ZyZWUoc3RydWN0IGtyZWYgKmVycm9yX3JlZikKPiAgIAkJa2ZyZWUoZWUtPnJl cXVlc3RzKTsKPiAgIAl9Cj4gICAKPiAtCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGVycm9y LT5hY3RpdmVfYm8pOyBpKyspCj4gLQkJa2ZyZWUoZXJyb3ItPmFjdGl2ZV9ib1tpXSk7Cj4gLQlr ZnJlZShlcnJvci0+cGlubmVkX2JvKTsKPiAtCj4gICAJa2ZyZWUoZXJyb3ItPm92ZXJsYXkpOwo+ ICAgCWtmcmVlKGVycm9yLT5kaXNwbGF5KTsKPiAgIAo+IEBAIC05OTAsMTIgKzEwMDAsMTIgQEAg dm9pZCBfX2k5MTVfZ3B1X3N0YXRlX2ZyZWUoc3RydWN0IGtyZWYgKmVycm9yX3JlZikKPiAgIAo+ ICAgc3RhdGljIHN0cnVjdCBkcm1faTkxNV9lcnJvcl9vYmplY3QgKgo+ICAgaTkxNV9lcnJvcl9v YmplY3RfY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+IC0JCQkgc3RydWN0 IGk5MTVfdm1hICp2bWEpCj4gKwkJCSBzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKPiArCQkJIHN0cnVj dCBjb21wcmVzcyAqY29tcHJlc3MpCj4gICB7Cj4gICAJc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCA9 ICZpOTE1LT5nZ3R0Owo+ICAgCWNvbnN0IHU2NCBzbG90ID0gZ2d0dC0+ZXJyb3JfY2FwdHVyZS5z dGFydDsKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfb2JqZWN0ICpkc3Q7Cj4gLQlzdHJ1Y3Qg Y29tcHJlc3MgY29tcHJlc3M7Cj4gICAJdW5zaWduZWQgbG9uZyBudW1fcGFnZXM7Cj4gICAJc3Ry dWN0IHNndF9pdGVyIGl0ZXI7Cj4gICAJZG1hX2FkZHJfdCBkbWE7Cj4gQEAgLTEwMDYsMjIgKzEw MTYsMjEgQEAgaTkxNV9lcnJvcl9vYmplY3RfY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1LAo+ICAgCj4gICAJbnVtX3BhZ2VzID0gbWluX3QodTY0LCB2bWEtPnNpemUsIHZtYS0+ b2JqLT5iYXNlLnNpemUpID4+IFBBR0VfU0hJRlQ7Cj4gICAJbnVtX3BhZ2VzID0gRElWX1JPVU5E X1VQKDEwICogbnVtX3BhZ2VzLCA4KTsgLyogd29yc3RjYXNlIHpsaWIgZ3Jvd3RoICovCj4gLQlk c3QgPSBrbWFsbG9jKHNpemVvZigqZHN0KSArIG51bV9wYWdlcyAqIHNpemVvZih1MzIgKiksCj4g LQkJICAgICAgR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7Cj4gKwlkc3QgPSBrbWFsbG9jKHNp emVvZigqZHN0KSArIG51bV9wYWdlcyAqIHNpemVvZih1MzIgKiksIEFUT01JQ19NQVlGQUlMKTsK PiAgIAlpZiAoIWRzdCkKPiAgIAkJcmV0dXJuIE5VTEw7Cj4gICAKPiArCWlmICghY29tcHJlc3Nf c3RhcnQoY29tcHJlc3MpKSB7Cj4gKwkJa2ZyZWUoZHN0KTsKPiArCQlyZXR1cm4gTlVMTDsKPiAr CX0KPiArCj4gICAJZHN0LT5ndHRfb2Zmc2V0ID0gdm1hLT5ub2RlLnN0YXJ0Owo+ICAgCWRzdC0+ Z3R0X3NpemUgPSB2bWEtPm5vZGUuc2l6ZTsKPiAgIAlkc3QtPm51bV9wYWdlcyA9IG51bV9wYWdl czsKPiAgIAlkc3QtPnBhZ2VfY291bnQgPSAwOwo+ICAgCWRzdC0+dW51c2VkID0gMDsKPiAgIAo+ IC0JaWYgKCFjb21wcmVzc19pbml0KCZjb21wcmVzcykpIHsKPiAtCQlrZnJlZShkc3QpOwo+IC0J CXJldHVybiBOVUxMOwo+IC0JfQo+IC0KPiAgIAlyZXQgPSAtRUlOVkFMOwo+ICAgCWZvcl9lYWNo X3NndF9kbWEoZG1hLCBpdGVyLCB2bWEtPnBhZ2VzKSB7Cj4gICAJCXZvaWQgX19pb21lbSAqczsK PiBAQCAtMTAyOSw2OSArMTAzOCwyMyBAQCBpOTE1X2Vycm9yX29iamVjdF9jcmVhdGUoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCj4gICAJCWdndHQtPnZtLmluc2VydF9wYWdlKCZnZ3R0 LT52bSwgZG1hLCBzbG90LCBJOTE1X0NBQ0hFX05PTkUsIDApOwo+ICAgCj4gICAJCXMgPSBpb19t YXBwaW5nX21hcF9hdG9taWNfd2MoJmdndHQtPmlvbWFwLCBzbG90KTsKPiAtCQlyZXQgPSBjb21w cmVzc19wYWdlKCZjb21wcmVzcywgKHZvaWQgIF9fZm9yY2UgKilzLCBkc3QpOwo+ICsJCXJldCA9 IGNvbXByZXNzX3BhZ2UoY29tcHJlc3MsICh2b2lkICBfX2ZvcmNlICopcywgZHN0KTsKPiAgIAkJ aW9fbWFwcGluZ191bm1hcF9hdG9taWMocyk7Cj4gICAJCWlmIChyZXQpCj4gICAJCQlicmVhazsK PiAgIAl9Cj4gICAKPiAtCWlmIChyZXQgfHwgY29tcHJlc3NfZmx1c2goJmNvbXByZXNzLCBkc3Qp KSB7Cj4gKwlpZiAocmV0IHx8IGNvbXByZXNzX2ZsdXNoKGNvbXByZXNzLCBkc3QpKSB7Cj4gICAJ CXdoaWxlIChkc3QtPnBhZ2VfY291bnQtLSkKPiAtCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25n KWRzdC0+cGFnZXNbZHN0LT5wYWdlX2NvdW50XSk7Cj4gKwkJCXBvb2xfZnJlZSgmY29tcHJlc3Mt PnBvb2wsIGRzdC0+cGFnZXNbZHN0LT5wYWdlX2NvdW50XSk7Cj4gICAJCWtmcmVlKGRzdCk7Cj4g ICAJCWRzdCA9IE5VTEw7Cj4gICAJfQo+ICsJY29tcHJlc3NfZmluaXNoKGNvbXByZXNzKTsKPiAg IAo+IC0JY29tcHJlc3NfZmluaSgmY29tcHJlc3MsIGRzdCk7Cj4gICAJcmV0dXJuIGRzdDsKPiAg IH0KPiAgIAo+IC1zdGF0aWMgdm9pZCBjYXB0dXJlX2JvKHN0cnVjdCBkcm1faTkxNV9lcnJvcl9i dWZmZXIgKmVyciwKPiAtCQkgICAgICAgc3RydWN0IGk5MTVfdm1hICp2bWEpCj4gLXsKPiAtCXN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSB2bWEtPm9iajsKPiAtCj4gLQllcnItPnNp emUgPSBvYmotPmJhc2Uuc2l6ZTsKPiAtCWVyci0+bmFtZSA9IG9iai0+YmFzZS5uYW1lOwo+IC0K PiAtCWVyci0+Z3R0X29mZnNldCA9IHZtYS0+bm9kZS5zdGFydDsKPiAtCWVyci0+cmVhZF9kb21h aW5zID0gb2JqLT5yZWFkX2RvbWFpbnM7Cj4gLQllcnItPndyaXRlX2RvbWFpbiA9IG9iai0+d3Jp dGVfZG9tYWluOwo+IC0JZXJyLT5mZW5jZV9yZWcgPSB2bWEtPmZlbmNlID8gdm1hLT5mZW5jZS0+ aWQgOiAtMTsKPiAtCWVyci0+dGlsaW5nID0gaTkxNV9nZW1fb2JqZWN0X2dldF90aWxpbmcob2Jq KTsKPiAtCWVyci0+ZGlydHkgPSBvYmotPm1tLmRpcnR5Owo+IC0JZXJyLT5wdXJnZWFibGUgPSBv YmotPm1tLm1hZHYgIT0gSTkxNV9NQURWX1dJTExORUVEOwo+IC0JZXJyLT51c2VycHRyID0gb2Jq LT51c2VycHRyLm1tICE9IE5VTEw7Cj4gLQllcnItPmNhY2hlX2xldmVsID0gb2JqLT5jYWNoZV9s ZXZlbDsKPiAtfQo+IC0KPiAtc3RhdGljIHUzMiBjYXB0dXJlX2Vycm9yX2JvKHN0cnVjdCBkcm1f aTkxNV9lcnJvcl9idWZmZXIgKmVyciwKPiAtCQkJICAgIGludCBjb3VudCwgc3RydWN0IGxpc3Rf aGVhZCAqaGVhZCwKPiAtCQkJICAgIHVuc2lnbmVkIGludCBmbGFncykKPiAtI2RlZmluZSBBQ1RJ VkVfT05MWSBCSVQoMCkKPiAtI2RlZmluZSBQSU5ORURfT05MWSBCSVQoMSkKPiAtewo+IC0Jc3Ry dWN0IGk5MTVfdm1hICp2bWE7Cj4gLQlpbnQgaSA9IDA7Cj4gLQo+IC0JbGlzdF9mb3JfZWFjaF9l bnRyeSh2bWEsIGhlYWQsIHZtX2xpbmspIHsKPiAtCQlpZiAoIXZtYS0+b2JqKQo+IC0JCQljb250 aW51ZTsKPiAtCj4gLQkJaWYgKGZsYWdzICYgQUNUSVZFX09OTFkgJiYgIWk5MTVfdm1hX2lzX2Fj dGl2ZSh2bWEpKQo+IC0JCQljb250aW51ZTsKPiAtCj4gLQkJaWYgKGZsYWdzICYgUElOTkVEX09O TFkgJiYgIWk5MTVfdm1hX2lzX3Bpbm5lZCh2bWEpKQo+IC0JCQljb250aW51ZTsKPiAtCj4gLQkJ Y2FwdHVyZV9ibyhlcnIrKywgdm1hKTsKPiAtCQlpZiAoKytpID09IGNvdW50KQo+IC0JCQlicmVh azsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gaTsKPiAtfQo+IC0KPiAgIC8qCj4gICAgKiBHZW5lcmF0 ZSBhIHNlbWktdW5pcXVlIGVycm9yIGNvZGUuIFRoZSBjb2RlIGlzIG5vdCBtZWFudCB0byBoYXZl IG1lYW5pbmcsIFRoZQo+ICAgICogY29kZSdzIG9ubHkgcHVycG9zZSBpcyB0byB0cnkgdG8gcHJl dmVudCBmYWxzZSBkdXBsaWNhdGVkIGJ1ZyByZXBvcnRzIGJ5Cj4gQEAgLTEyODEsNyArMTI0NCw3 IEBAIHN0YXRpYyB2b2lkIGVuZ2luZV9yZWNvcmRfcmVxdWVzdHMoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lLAo+ICAgCWlmICghY291bnQpCj4gICAJCXJldHVybjsKPiAgIAo+IC0JZWUt PnJlcXVlc3RzID0ga2NhbGxvYyhjb3VudCwgc2l6ZW9mKCplZS0+cmVxdWVzdHMpLCBHRlBfQVRP TUlDKTsKPiArCWVlLT5yZXF1ZXN0cyA9IGtjYWxsb2MoY291bnQsIHNpemVvZigqZWUtPnJlcXVl c3RzKSwgQVRPTUlDX01BWUZBSUwpOwo+ICAgCWlmICghZWUtPnJlcXVlc3RzKQo+ICAgCQlyZXR1 cm47Cj4gICAKPiBAQCAtMTM0OSw4ICsxMzEyLDEwIEBAIHN0YXRpYyB2b2lkIHJlY29yZF9jb250 ZXh0KHN0cnVjdCBkcm1faTkxNV9lcnJvcl9jb250ZXh0ICplLAo+ICAgCWUtPmFjdGl2ZSA9IGF0 b21pY19yZWFkKCZjdHgtPmFjdGl2ZV9jb3VudCk7Cj4gICB9Cj4gICAKPiAtc3RhdGljIHZvaWQg cmVxdWVzdF9yZWNvcmRfdXNlcl9ibyhzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpyZXF1ZXN0LAo+IC0J CQkJICAgc3RydWN0IGRybV9pOTE1X2Vycm9yX2VuZ2luZSAqZWUpCj4gK3N0YXRpYyB2b2lkCj4g K3JlcXVlc3RfcmVjb3JkX3VzZXJfYm8oc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCwKPiAr CQkgICAgICAgc3RydWN0IGRybV9pOTE1X2Vycm9yX2VuZ2luZSAqZWUsCj4gKwkJICAgICAgIHN0 cnVjdCBjb21wcmVzcyAqY29tcHJlc3MpCj4gICB7Cj4gICAJc3RydWN0IGk5MTVfY2FwdHVyZV9s aXN0ICpjOwo+ICAgCXN0cnVjdCBkcm1faTkxNV9lcnJvcl9vYmplY3QgKipibzsKPiBAQCAtMTM2 MiwxOCArMTMyNywyMCBAQCBzdGF0aWMgdm9pZCByZXF1ZXN0X3JlY29yZF91c2VyX2JvKHN0cnVj dCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QsCj4gICAJaWYgKCFtYXgpCj4gICAJCXJldHVybjsKPiAg IAo+IC0JYm8gPSBrbWFsbG9jX2FycmF5KG1heCwgc2l6ZW9mKCpibyksIEdGUF9BVE9NSUMpOwo+ ICsJYm8gPSBrbWFsbG9jX2FycmF5KG1heCwgc2l6ZW9mKCpibyksIEFUT01JQ19NQVlGQUlMKTsK PiAgIAlpZiAoIWJvKSB7Cj4gICAJCS8qIElmIHdlIGNhbid0IGNhcHR1cmUgZXZlcnl0aGluZywg dHJ5IHRvIGNhcHR1cmUgc29tZXRoaW5nLiAqLwo+ICAgCQltYXggPSBtaW5fdChsb25nLCBtYXgs IFBBR0VfU0laRSAvIHNpemVvZigqYm8pKTsKPiAtCQlibyA9IGttYWxsb2NfYXJyYXkobWF4LCBz aXplb2YoKmJvKSwgR0ZQX0FUT01JQyk7Cj4gKwkJYm8gPSBrbWFsbG9jX2FycmF5KG1heCwgc2l6 ZW9mKCpibyksIEFUT01JQ19NQVlGQUlMKTsKPiAgIAl9Cj4gICAJaWYgKCFibykKPiAgIAkJcmV0 dXJuOwo+ICAgCj4gICAJY291bnQgPSAwOwo+ICAgCWZvciAoYyA9IHJlcXVlc3QtPmNhcHR1cmVf bGlzdDsgYzsgYyA9IGMtPm5leHQpIHsKPiAtCQlib1tjb3VudF0gPSBpOTE1X2Vycm9yX29iamVj dF9jcmVhdGUocmVxdWVzdC0+aTkxNSwgYy0+dm1hKTsKPiArCQlib1tjb3VudF0gPSBpOTE1X2Vy cm9yX29iamVjdF9jcmVhdGUocmVxdWVzdC0+aTkxNSwKPiArCQkJCQkJICAgICBjLT52bWEsCj4g KwkJCQkJCSAgICAgY29tcHJlc3MpOwo+ICAgCQlpZiAoIWJvW2NvdW50XSkKPiAgIAkJCWJyZWFr Owo+ICAgCQlpZiAoKytjb3VudCA9PSBtYXgpCj4gQEAgLTEzODYsNyArMTM1Myw4IEBAIHN0YXRp YyB2b2lkIHJlcXVlc3RfcmVjb3JkX3VzZXJfYm8oc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVz dCwKPiAgIAo+ICAgc3RhdGljIHN0cnVjdCBkcm1faTkxNV9lcnJvcl9vYmplY3QgKgo+ICAgY2Fw dHVyZV9vYmplY3Qoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JICAgICAg IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gKwkgICAgICAgc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iaiwKPiArCSAgICAgICBzdHJ1Y3QgY29tcHJlc3MgKmNvbXByZXNz KQo+ICAgewo+ICAgCWlmIChvYmogJiYgaTkxNV9nZW1fb2JqZWN0X2hhc19wYWdlcyhvYmopKSB7 Cj4gICAJCXN0cnVjdCBpOTE1X3ZtYSBmYWtlID0gewo+IEBAIC0xMzk2LDEzICsxMzY0LDE0IEBA IGNhcHR1cmVfb2JqZWN0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgIAkJ CS5vYmogPSBvYmosCj4gICAJCX07Cj4gICAKPiAtCQlyZXR1cm4gaTkxNV9lcnJvcl9vYmplY3Rf Y3JlYXRlKGRldl9wcml2LCAmZmFrZSk7Cj4gKwkJcmV0dXJuIGk5MTVfZXJyb3Jfb2JqZWN0X2Ny ZWF0ZShkZXZfcHJpdiwgJmZha2UsIGNvbXByZXNzKTsKPiAgIAl9IGVsc2Ugewo+ICAgCQlyZXR1 cm4gTlVMTDsKPiAgIAl9Cj4gICB9Cj4gICAKPiAtc3RhdGljIHZvaWQgZ2VtX3JlY29yZF9yaW5n cyhzdHJ1Y3QgaTkxNV9ncHVfc3RhdGUgKmVycm9yKQo+ICtzdGF0aWMgdm9pZAo+ICtnZW1fcmVj b3JkX3JpbmdzKHN0cnVjdCBpOTE1X2dwdV9zdGF0ZSAqZXJyb3IsIHN0cnVjdCBjb21wcmVzcyAq Y29tcHJlc3MpCj4gICB7Cj4gICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBlcnJv ci0+aTkxNTsKPiAgIAlpbnQgaTsKPiBAQCAtMTQyMCw2ICsxMzg5LDkgQEAgc3RhdGljIHZvaWQg Z2VtX3JlY29yZF9yaW5ncyhzdHJ1Y3QgaTkxNV9ncHVfc3RhdGUgKmVycm9yKQo+ICAgCj4gICAJ CWVlLT5lbmdpbmVfaWQgPSBpOwo+ICAgCj4gKwkJLyogUmVmaWxsIG91ciBwYWdlIHBvb2wgYmVm b3JlIGVudGVyaW5nIGF0b21pYyBzZWN0aW9uICovCj4gKwkJcG9vbF9yZWZpbGwoJmNvbXByZXNz LT5wb29sLCBBTExPV19GQUlMKTsKPiArCj4gICAJCWVycm9yX3JlY29yZF9lbmdpbmVfcmVnaXN0 ZXJzKGVycm9yLCBlbmdpbmUsIGVlKTsKPiAgIAkJZXJyb3JfcmVjb3JkX2VuZ2luZV9leGVjbGlz dHMoZW5naW5lLCBlZSk7Cj4gICAKPiBAQCAtMTQyOSw4ICsxNDAxLDYgQEAgc3RhdGljIHZvaWQg Z2VtX3JlY29yZF9yaW5ncyhzdHJ1Y3QgaTkxNV9ncHVfc3RhdGUgKmVycm9yKQo+ICAgCQkJc3Ry dWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCA9IHJlcXVlc3QtPmdlbV9jb250ZXh0Owo+ICAgCQkJ c3RydWN0IGludGVsX3JpbmcgKnJpbmcgPSByZXF1ZXN0LT5yaW5nOwo+ICAgCj4gLQkJCWVlLT52 bSA9IHJlcXVlc3QtPmh3X2NvbnRleHQtPnZtOwo+IC0KPiAgIAkJCXJlY29yZF9jb250ZXh0KCZl ZS0+Y29udGV4dCwgY3R4KTsKPiAgIAo+ICAgCQkJLyogV2UgbmVlZCB0byBjb3B5IHRoZXNlIHRv IGFuIGFub255bW91cyBidWZmZXIKPiBAQCAtMTQzOCwxNyArMTQwOCwyMSBAQCBzdGF0aWMgdm9p ZCBnZW1fcmVjb3JkX3JpbmdzKHN0cnVjdCBpOTE1X2dwdV9zdGF0ZSAqZXJyb3IpCj4gICAJCQkg KiBieSB1c2Vyc3BhY2UuCj4gICAJCQkgKi8KPiAgIAkJCWVlLT5iYXRjaGJ1ZmZlciA9Cj4gLQkJ CQlpOTE1X2Vycm9yX29iamVjdF9jcmVhdGUoaTkxNSwgcmVxdWVzdC0+YmF0Y2gpOwo+ICsJCQkJ aTkxNV9lcnJvcl9vYmplY3RfY3JlYXRlKGk5MTUsCj4gKwkJCQkJCQkgcmVxdWVzdC0+YmF0Y2gs Cj4gKwkJCQkJCQkgY29tcHJlc3MpOwo+ICAgCj4gICAJCQlpZiAoSEFTX0JST0tFTl9DU19UTEIo aTkxNSkpCj4gICAJCQkJZWUtPndhX2JhdGNoYnVmZmVyID0KPiAgIAkJCQkgIGk5MTVfZXJyb3Jf b2JqZWN0X2NyZWF0ZShpOTE1LAo+IC0JCQkJCQkJICAgZW5naW5lLT5ndC0+c2NyYXRjaCk7Cj4g LQkJCXJlcXVlc3RfcmVjb3JkX3VzZXJfYm8ocmVxdWVzdCwgZWUpOwo+ICsJCQkJCQkJICAgZW5n aW5lLT5ndC0+c2NyYXRjaCwKPiArCQkJCQkJCSAgIGNvbXByZXNzKTsKPiArCQkJcmVxdWVzdF9y ZWNvcmRfdXNlcl9ibyhyZXF1ZXN0LCBlZSwgY29tcHJlc3MpOwo+ICAgCj4gICAJCQllZS0+Y3R4 ID0KPiAgIAkJCQlpOTE1X2Vycm9yX29iamVjdF9jcmVhdGUoaTkxNSwKPiAtCQkJCQkJCSByZXF1 ZXN0LT5od19jb250ZXh0LT5zdGF0ZSk7Cj4gKwkJCQkJCQkgcmVxdWVzdC0+aHdfY29udGV4dC0+ c3RhdGUsCj4gKwkJCQkJCQkgY29tcHJlc3MpOwo+ICAgCj4gICAJCQllcnJvci0+c2ltdWxhdGVk IHw9Cj4gICAJCQkJaTkxNV9nZW1fY29udGV4dF9ub19lcnJvcl9jYXB0dXJlKGN0eCk7Cj4gQEAg LTE0NjAsNyArMTQzNCw5IEBAIHN0YXRpYyB2b2lkIGdlbV9yZWNvcmRfcmluZ3Moc3RydWN0IGk5 MTVfZ3B1X3N0YXRlICplcnJvcikKPiAgIAkJCWVlLT5jcHVfcmluZ19oZWFkID0gcmluZy0+aGVh ZDsKPiAgIAkJCWVlLT5jcHVfcmluZ190YWlsID0gcmluZy0+dGFpbDsKPiAgIAkJCWVlLT5yaW5n YnVmZmVyID0KPiAtCQkJCWk5MTVfZXJyb3Jfb2JqZWN0X2NyZWF0ZShpOTE1LCByaW5nLT52bWEp Owo+ICsJCQkJaTkxNV9lcnJvcl9vYmplY3RfY3JlYXRlKGk5MTUsCj4gKwkJCQkJCQkgcmluZy0+ dm1hLAo+ICsJCQkJCQkJIGNvbXByZXNzKTsKPiAgIAo+ICAgCQkJZW5naW5lX3JlY29yZF9yZXF1 ZXN0cyhlbmdpbmUsIHJlcXVlc3QsIGVlKTsKPiAgIAkJfQo+IEBAIC0xNDY4LDg5ICsxNDQ0LDIx IEBAIHN0YXRpYyB2b2lkIGdlbV9yZWNvcmRfcmluZ3Moc3RydWN0IGk5MTVfZ3B1X3N0YXRlICpl cnJvcikKPiAgIAo+ICAgCQllZS0+aHdzX3BhZ2UgPQo+ICAgCQkJaTkxNV9lcnJvcl9vYmplY3Rf Y3JlYXRlKGk5MTUsCj4gLQkJCQkJCSBlbmdpbmUtPnN0YXR1c19wYWdlLnZtYSk7Cj4gLQo+IC0J CWVlLT53YV9jdHggPSBpOTE1X2Vycm9yX29iamVjdF9jcmVhdGUoaTkxNSwgZW5naW5lLT53YV9j dHgudm1hKTsKPiAtCj4gLQkJZWUtPmRlZmF1bHRfc3RhdGUgPSBjYXB0dXJlX29iamVjdChpOTE1 LCBlbmdpbmUtPmRlZmF1bHRfc3RhdGUpOwo+IC0JfQo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBn ZW1fY2FwdHVyZV92bShzdHJ1Y3QgaTkxNV9ncHVfc3RhdGUgKmVycm9yLAo+IC0JCQkgICBzdHJ1 Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAtCQkJICAgaW50IGlkeCkKPiAtewo+IC0Jc3Ry dWN0IGRybV9pOTE1X2Vycm9yX2J1ZmZlciAqYWN0aXZlX2JvOwo+IC0Jc3RydWN0IGk5MTVfdm1h ICp2bWE7Cj4gLQlpbnQgY291bnQ7Cj4gLQo+IC0JY291bnQgPSAwOwo+IC0JbGlzdF9mb3JfZWFj aF9lbnRyeSh2bWEsICZ2bS0+Ym91bmRfbGlzdCwgdm1fbGluaykKPiAtCQlpZiAoaTkxNV92bWFf aXNfYWN0aXZlKHZtYSkpCj4gLQkJCWNvdW50Kys7Cj4gLQo+IC0JYWN0aXZlX2JvID0gTlVMTDsK PiAtCWlmIChjb3VudCkKPiAtCQlhY3RpdmVfYm8gPSBrY2FsbG9jKGNvdW50LCBzaXplb2YoKmFj dGl2ZV9ibyksIEdGUF9BVE9NSUMpOwo+IC0JaWYgKGFjdGl2ZV9ibykKPiAtCQljb3VudCA9IGNh cHR1cmVfZXJyb3JfYm8oYWN0aXZlX2JvLAo+IC0JCQkJCSBjb3VudCwgJnZtLT5ib3VuZF9saXN0 LAo+IC0JCQkJCSBBQ1RJVkVfT05MWSk7Cj4gLQllbHNlCj4gLQkJY291bnQgPSAwOwo+ICsJCQkJ CQkgZW5naW5lLT5zdGF0dXNfcGFnZS52bWEsCj4gKwkJCQkJCSBjb21wcmVzcyk7Cj4gICAKPiAt CWVycm9yLT5hY3RpdmVfdm1baWR4XSA9IHZtOwo+IC0JZXJyb3ItPmFjdGl2ZV9ib1tpZHhdID0g YWN0aXZlX2JvOwo+IC0JZXJyb3ItPmFjdGl2ZV9ib19jb3VudFtpZHhdID0gY291bnQ7Cj4gLX0K PiAtCj4gLXN0YXRpYyB2b2lkIGNhcHR1cmVfYWN0aXZlX2J1ZmZlcnMoc3RydWN0IGk5MTVfZ3B1 X3N0YXRlICplcnJvcikKPiAtewo+IC0JaW50IGNudCA9IDAsIGksIGo7Cj4gLQo+IC0JQlVJTERf QlVHX09OKEFSUkFZX1NJWkUoZXJyb3ItPmVuZ2luZSkgPiBBUlJBWV9TSVpFKGVycm9yLT5hY3Rp dmVfYm8pKTsKPiAtCUJVSUxEX0JVR19PTihBUlJBWV9TSVpFKGVycm9yLT5hY3RpdmVfYm8pICE9 IEFSUkFZX1NJWkUoZXJyb3ItPmFjdGl2ZV92bSkpOwo+IC0JQlVJTERfQlVHX09OKEFSUkFZX1NJ WkUoZXJyb3ItPmFjdGl2ZV9ibykgIT0gQVJSQVlfU0laRShlcnJvci0+YWN0aXZlX2JvX2NvdW50 KSk7Cj4gLQo+IC0JLyogU2NhbiBlYWNoIGVuZ2luZSBsb29raW5nIGZvciB1bmlxdWUgYWN0aXZl IGNvbnRleHRzL3ZtICovCj4gLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShlcnJvci0+ZW5n aW5lKTsgaSsrKSB7Cj4gLQkJc3RydWN0IGRybV9pOTE1X2Vycm9yX2VuZ2luZSAqZWUgPSAmZXJy b3ItPmVuZ2luZVtpXTsKPiAtCQlib29sIGZvdW5kOwo+IC0KPiAtCQlpZiAoIWVlLT52bSkKPiAt CQkJY29udGludWU7Cj4gKwkJZWUtPndhX2N0eCA9Cj4gKwkJCWk5MTVfZXJyb3Jfb2JqZWN0X2Ny ZWF0ZShpOTE1LAo+ICsJCQkJCQkgZW5naW5lLT53YV9jdHgudm1hLAo+ICsJCQkJCQkgY29tcHJl c3MpOwo+ICAgCj4gLQkJZm91bmQgPSBmYWxzZTsKPiAtCQlmb3IgKGogPSAwOyBqIDwgaSAmJiAh Zm91bmQ7IGorKykKPiAtCQkJZm91bmQgPSBlcnJvci0+ZW5naW5lW2pdLnZtID09IGVlLT52bTsK PiAtCQlpZiAoIWZvdW5kKQo+IC0JCQlnZW1fY2FwdHVyZV92bShlcnJvciwgZWUtPnZtLCBjbnQr Kyk7Cj4gKwkJZWUtPmRlZmF1bHRfc3RhdGUgPQo+ICsJCQljYXB0dXJlX29iamVjdChpOTE1LCBl bmdpbmUtPmRlZmF1bHRfc3RhdGUsIGNvbXByZXNzKTsKPiAgIAl9Cj4gICB9Cj4gICAKPiAtc3Rh dGljIHZvaWQgY2FwdHVyZV9waW5uZWRfYnVmZmVycyhzdHJ1Y3QgaTkxNV9ncHVfc3RhdGUgKmVy cm9yKQo+IC17Cj4gLQlzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSA9ICZlcnJvci0+aTkx NS0+Z2d0dC52bTsKPiAtCXN0cnVjdCBkcm1faTkxNV9lcnJvcl9idWZmZXIgKmJvOwo+IC0Jc3Ry dWN0IGk5MTVfdm1hICp2bWE7Cj4gLQlpbnQgY291bnQ7Cj4gLQo+IC0JY291bnQgPSAwOwo+IC0J bGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsICZ2bS0+Ym91bmRfbGlzdCwgdm1fbGluaykKPiAtCQlj b3VudCsrOwo+IC0KPiAtCWJvID0gTlVMTDsKPiAtCWlmIChjb3VudCkKPiAtCQlibyA9IGtjYWxs b2MoY291bnQsIHNpemVvZigqYm8pLCBHRlBfQVRPTUlDKTsKPiAtCWlmICghYm8pCj4gLQkJcmV0 dXJuOwo+IC0KPiAtCWVycm9yLT5waW5uZWRfYm9fY291bnQgPQo+IC0JCWNhcHR1cmVfZXJyb3Jf Ym8oYm8sIGNvdW50LCAmdm0tPmJvdW5kX2xpc3QsIFBJTk5FRF9PTkxZKTsKPiAtCWVycm9yLT5w aW5uZWRfYm8gPSBibzsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgY2FwdHVyZV91Y19zdGF0ZShz dHJ1Y3QgaTkxNV9ncHVfc3RhdGUgKmVycm9yKQo+ICtzdGF0aWMgdm9pZAo+ICtjYXB0dXJlX3Vj X3N0YXRlKHN0cnVjdCBpOTE1X2dwdV9zdGF0ZSAqZXJyb3IsIHN0cnVjdCBjb21wcmVzcyAqY29t cHJlc3MpCj4gICB7Cj4gICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBlcnJvci0+ aTkxNTsKPiAgIAlzdHJ1Y3QgaTkxNV9lcnJvcl91YyAqZXJyb3JfdWMgPSAmZXJyb3ItPnVjOwo+ IEBAIC0xNTY3LDkgKzE0NzUsMTEgQEAgc3RhdGljIHZvaWQgY2FwdHVyZV91Y19zdGF0ZShzdHJ1 Y3QgaTkxNV9ncHVfc3RhdGUgKmVycm9yKQo+ICAgCSAqIEFzIG1vZHBhcmFtcyBhcmUgZ2VuZXJh bGx5IGFjY2VzaWJsZSBmcm9tIHRoZSB1c2Vyc3BhY2UgbWFrZQo+ICAgCSAqIGV4cGxpY2l0IGNv cGllcyBvZiB0aGUgZmlybXdhcmUgcGF0aHMuCj4gICAJICovCj4gLQllcnJvcl91Yy0+Z3VjX2Z3 LnBhdGggPSBrc3RyZHVwKHVjLT5ndWMuZncucGF0aCwgR0ZQX0FUT01JQyk7Cj4gLQllcnJvcl91 Yy0+aHVjX2Z3LnBhdGggPSBrc3RyZHVwKHVjLT5odWMuZncucGF0aCwgR0ZQX0FUT01JQyk7Cj4g LQllcnJvcl91Yy0+Z3VjX2xvZyA9IGk5MTVfZXJyb3Jfb2JqZWN0X2NyZWF0ZShpOTE1LCB1Yy0+ Z3VjLmxvZy52bWEpOwo+ICsJZXJyb3JfdWMtPmd1Y19mdy5wYXRoID0ga3N0cmR1cCh1Yy0+Z3Vj LmZ3LnBhdGgsIEFMTE9XX0ZBSUwpOwo+ICsJZXJyb3JfdWMtPmh1Y19mdy5wYXRoID0ga3N0cmR1 cCh1Yy0+aHVjLmZ3LnBhdGgsIEFMTE9XX0ZBSUwpOwo+ICsJZXJyb3JfdWMtPmd1Y19sb2cgPSBp OTE1X2Vycm9yX29iamVjdF9jcmVhdGUoaTkxNSwKPiArCQkJCQkJICAgICB1Yy0+Z3VjLmxvZy52 bWEsCj4gKwkJCQkJCSAgICAgY29tcHJlc3MpOwo+ICAgfQo+ICAgCj4gICAvKiBDYXB0dXJlIGFs bCByZWdpc3RlcnMgd2hpY2ggZG9uJ3QgZml0IGludG8gYW5vdGhlciBjYXRlZ29yeS4gKi8KPiBA QCAtMTc1Myw1NiArMTY2Myw1MyBAQCBzdGF0aWMgdm9pZCBjYXB0dXJlX2ZpbmlzaChzdHJ1Y3Qg aTkxNV9ncHVfc3RhdGUgKmVycm9yKQo+ICAgCWdndHQtPnZtLmNsZWFyX3JhbmdlKCZnZ3R0LT52 bSwgc2xvdCwgUEFHRV9TSVpFKTsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgaW50IGNhcHR1cmUodm9p ZCAqZGF0YSkKPiAtewo+IC0Jc3RydWN0IGk5MTVfZ3B1X3N0YXRlICplcnJvciA9IGRhdGE7Cj4g LQo+IC0JZXJyb3ItPnRpbWUgPSBrdGltZV9nZXRfcmVhbCgpOwo+IC0JZXJyb3ItPmJvb3R0aW1l ID0ga3RpbWVfZ2V0X2Jvb3R0aW1lKCk7Cj4gLQllcnJvci0+dXB0aW1lID0ga3RpbWVfc3ViKGt0 aW1lX2dldCgpLAo+IC0JCQkJICBlcnJvci0+aTkxNS0+Z3QubGFzdF9pbml0X3RpbWUpOwo+IC0J ZXJyb3ItPmNhcHR1cmUgPSBqaWZmaWVzOwo+IC0KPiAtCWNhcHR1cmVfcGFyYW1zKGVycm9yKTsK PiAtCWNhcHR1cmVfZ2VuX3N0YXRlKGVycm9yKTsKPiAtCWNhcHR1cmVfdWNfc3RhdGUoZXJyb3Ip Owo+IC0JY2FwdHVyZV9yZWdfc3RhdGUoZXJyb3IpOwo+IC0JZ2VtX3JlY29yZF9mZW5jZXMoZXJy b3IpOwo+IC0JZ2VtX3JlY29yZF9yaW5ncyhlcnJvcik7Cj4gLQljYXB0dXJlX2FjdGl2ZV9idWZm ZXJzKGVycm9yKTsKPiAtCWNhcHR1cmVfcGlubmVkX2J1ZmZlcnMoZXJyb3IpOwo+IC0KPiAtCWVy cm9yLT5vdmVybGF5ID0gaW50ZWxfb3ZlcmxheV9jYXB0dXJlX2Vycm9yX3N0YXRlKGVycm9yLT5p OTE1KTsKPiAtCWVycm9yLT5kaXNwbGF5ID0gaW50ZWxfZGlzcGxheV9jYXB0dXJlX2Vycm9yX3N0 YXRlKGVycm9yLT5pOTE1KTsKPiAtCj4gLQllcnJvci0+ZXBvY2ggPSBjYXB0dXJlX2ZpbmRfZXBv Y2goZXJyb3IpOwo+IC0KPiAtCWNhcHR1cmVfZmluaXNoKGVycm9yKTsKPiAtCXJldHVybiAwOwo+ IC19Cj4gLQo+ICAgI2RlZmluZSBEQVlfQVNfU0VDT05EUyh4KSAoMjQgKiA2MCAqIDYwICogKHgp KQo+ICAgCj4gICBzdHJ1Y3QgaTkxNV9ncHVfc3RhdGUgKgo+ICAgaTkxNV9jYXB0dXJlX2dwdV9z dGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAgIHsKPiAgIAlzdHJ1Y3QgaTkx NV9ncHVfc3RhdGUgKmVycm9yOwo+ICsJc3RydWN0IGNvbXByZXNzIGNvbXByZXNzOwo+ICAgCj4g ICAJLyogQ2hlY2sgaWYgR1BVIGNhcHR1cmUgaGFzIGJlZW4gZGlzYWJsZWQgKi8KPiAgIAllcnJv ciA9IFJFQURfT05DRShpOTE1LT5ncHVfZXJyb3IuZmlyc3RfZXJyb3IpOwo+ICAgCWlmIChJU19F UlIoZXJyb3IpKQo+ICAgCQlyZXR1cm4gZXJyb3I7Cj4gICAKPiAtCWVycm9yID0ga3phbGxvYyhz aXplb2YoKmVycm9yKSwgR0ZQX0FUT01JQyk7Cj4gKwllcnJvciA9IGt6YWxsb2Moc2l6ZW9mKCpl cnJvciksIEFMTE9XX0ZBSUwpOwo+ICAgCWlmICghZXJyb3IpIHsKPiAgIAkJaTkxNV9kaXNhYmxl X2Vycm9yX3N0YXRlKGk5MTUsIC1FTk9NRU0pOwo+ICAgCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVN KTsKPiAgIAl9Cj4gICAKPiArCWlmICghY29tcHJlc3NfaW5pdCgmY29tcHJlc3MpKSB7Cj4gKwkJ a2ZyZWUoZXJyb3IpOwo+ICsJCWk5MTVfZGlzYWJsZV9lcnJvcl9zdGF0ZShpOTE1LCAtRU5PTUVN KTsKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiArCX0KPiArCj4gICAJa3JlZl9pbml0 KCZlcnJvci0+cmVmKTsKPiAgIAllcnJvci0+aTkxNSA9IGk5MTU7Cj4gICAKPiAtCXN0b3BfbWFj aGluZShjYXB0dXJlLCBlcnJvciwgTlVMTCk7Cj4gKwllcnJvci0+dGltZSA9IGt0aW1lX2dldF9y ZWFsKCk7Cj4gKwllcnJvci0+Ym9vdHRpbWUgPSBrdGltZV9nZXRfYm9vdHRpbWUoKTsKPiArCWVy cm9yLT51cHRpbWUgPSBrdGltZV9zdWIoa3RpbWVfZ2V0KCksIGk5MTUtPmd0Lmxhc3RfaW5pdF90 aW1lKTsKPiArCWVycm9yLT5jYXB0dXJlID0gamlmZmllczsKPiArCj4gKwljYXB0dXJlX3BhcmFt cyhlcnJvcik7Cj4gKwljYXB0dXJlX2dlbl9zdGF0ZShlcnJvcik7Cj4gKwljYXB0dXJlX3VjX3N0 YXRlKGVycm9yLCAmY29tcHJlc3MpOwo+ICsJY2FwdHVyZV9yZWdfc3RhdGUoZXJyb3IpOwo+ICsJ Z2VtX3JlY29yZF9mZW5jZXMoZXJyb3IpOwo+ICsJZ2VtX3JlY29yZF9yaW5ncyhlcnJvciwgJmNv bXByZXNzKTsKPiArCj4gKwllcnJvci0+b3ZlcmxheSA9IGludGVsX292ZXJsYXlfY2FwdHVyZV9l cnJvcl9zdGF0ZShpOTE1KTsKPiArCWVycm9yLT5kaXNwbGF5ID0gaW50ZWxfZGlzcGxheV9jYXB0 dXJlX2Vycm9yX3N0YXRlKGk5MTUpOwo+ICsKPiArCWVycm9yLT5lcG9jaCA9IGNhcHR1cmVfZmlu ZF9lcG9jaChlcnJvcik7Cj4gKwo+ICsJY2FwdHVyZV9maW5pc2goZXJyb3IpOwo+ICsJY29tcHJl c3NfZmluaSgmY29tcHJlc3MpOwo+ICAgCj4gICAJcmV0dXJuIGVycm9yOwo+ICAgfQo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5oIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuaAo+IGluZGV4IDg1ZjA2YmM1ZGEwNS4uYTI0YzM1 MTA3ZDE2IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9y LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5oCj4gQEAgLTg1 LDcgKzg1LDYgQEAgc3RydWN0IGk5MTVfZ3B1X3N0YXRlIHsKPiAgIAkJLyogU29mdHdhcmUgdHJh Y2tlZCBzdGF0ZSAqLwo+ICAgCQlib29sIGlkbGU7Cj4gICAJCXVuc2lnbmVkIGxvbmcgaGFuZ2No ZWNrX3RpbWVzdGFtcDsKPiAtCQlzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bTsKPiAgIAkJ aW50IG51bV9yZXF1ZXN0czsKPiAgIAkJdTMyIHJlc2V0X2NvdW50Owo+ICAgCj4gQEAgLTE2MSwy MiArMTYwLDYgQEAgc3RydWN0IGk5MTVfZ3B1X3N0YXRlIHsKPiAgIAkJfSB2bV9pbmZvOwo+ICAg CX0gZW5naW5lW0k5MTVfTlVNX0VOR0lORVNdOwo+ICAgCj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZXJy b3JfYnVmZmVyIHsKPiAtCQl1MzIgc2l6ZTsKPiAtCQl1MzIgbmFtZTsKPiAtCQl1NjQgZ3R0X29m ZnNldDsKPiAtCQl1MzIgcmVhZF9kb21haW5zOwo+IC0JCXUzMiB3cml0ZV9kb21haW47Cj4gLQkJ czMyIGZlbmNlX3JlZzpJOTE1X01BWF9OVU1fRkVOQ0VfQklUUzsKPiAtCQl1MzIgdGlsaW5nOjI7 Cj4gLQkJdTMyIGRpcnR5OjE7Cj4gLQkJdTMyIHB1cmdlYWJsZToxOwo+IC0JCXUzMiB1c2VycHRy OjE7Cj4gLQkJdTMyIGNhY2hlX2xldmVsOjM7Cj4gLQl9ICphY3RpdmVfYm9bSTkxNV9OVU1fRU5H SU5FU10sICpwaW5uZWRfYm87Cj4gLQl1MzIgYWN0aXZlX2JvX2NvdW50W0k5MTVfTlVNX0VOR0lO RVNdLCBwaW5uZWRfYm9fY291bnQ7Cj4gLQlzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICphY3Rp dmVfdm1bSTkxNV9OVU1fRU5HSU5FU107Cj4gLQo+ICAgCXN0cnVjdCBzY2F0dGVybGlzdCAqc2ds LCAqZml0Owo+ICAgfTsKPiAgIAo+IAoKT3RoZXJ3aXNlOwoKUmV2aWV3ZWQtYnk6IFR2cnRrbyBV cnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+CgpSZWdhcmRzLAoKVHZydGtvCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWls aW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeA==