From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH] drm/i915/preemption: Allow preemption between submission ports Date: Fri, 23 Feb 2018 16:06:06 +0200 Message-ID: <87a7vzssvl.fsf@gaia.fi.intel.com> References: <20180222141154.21504-1-chris@chris-wilson.co.uk> <20180222142229.14517-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5A8106F135 for ; Fri, 23 Feb 2018 14:09:43 +0000 (UTC) In-Reply-To: <20180222142229.14517-1-chris@chris-wilson.co.uk> 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 Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+IHdyaXRlczoKCj4gU29tZXRp bWVzIHdlIG5lZWQgdG8gYm9vc3QgdGhlIHByaW9yaXR5IG9mIGFuIGluLWZsaWdodCByZXF1ZXN0 LCB3aGljaAo+IG1heSBsZWFkIHRvIHRoZSBzaXR1YXRpb24gd2hlcmUgdGhlIHNlY29uZCBzdWJt aXNzaW9uIHBvcnQgdGhlbiBjb250YWlucwo+IGEgaGlnaGVyIHByaW9yaXR5IGNvbnRleHQgdGhh biB0aGUgZmlyc3QgYW5kIHNvIHdlIG5lZWQgdG8gaW5qZWN0IGEKPiBwcmVlbXB0aW9uIGV2ZW50 LiBUbyBkbyBzbyB3ZSBtdXN0IGFsd2F5cyBjaGVjayBpbnNpZGUKPiBleGVjbGlzdHNfZGVxdWV1 ZSgpIHdoZXRoZXIgdGhlcmUgaXMgYSBwcmlvcml0eSBpbnZlcnNpb24gYmV0d2VlbiB0aGUKPiBw b3J0cyB0aGVtc2VsdmVzIGFzIHdlbGwgYXMgdGhlIGhlYWQgb2YgdGhlIHByaW9yaXR5IHNvcnRl ZCBxdWV1ZSwgYW5kIHdlCj4gY2Fubm90IGp1c3Qgc2tpcCBkZXF1ZXVpbmcgaWYgdGhlIHF1ZXVl IGlzIGVtcHR5Lgo+Cj4gU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13 aWxzb24uY28udWs+Cj4gQ2M6IE1pY2hhxYIgV2luaWFyc2tpIDxtaWNoYWwud2luaWFyc2tpQGlu dGVsLmNvbT4KPiBDYzogTWljaGVsIFRoaWVycnkgPG1pY2hlbC50aGllcnJ5QGludGVsLmNvbT4K PiBDYzogTWlrYSBLdW9wcGFsYSA8bWlrYS5rdW9wcGFsYUBsaW51eC5pbnRlbC5jb20+Cj4gQ2M6 IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+Cj4gLS0tCj4gUmViYXNl IGZvciBjb25mbGljdHMKPiAtQ2hyaXMKPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZW5naW5lX2NzLmMgICAgICB8ICAgMiArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2d1Y19zdWJtaXNzaW9uLmMgfCAgMTcgKy0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2xyYy5jICAgICAgICAgICAgfCAxNjEgKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQo+ICBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmggICAgIHwgICA1ICsKPiAgNCBm aWxlcyBjaGFuZ2VkLCAxMDcgaW5zZXJ0aW9ucygrKSwgNzggZGVsZXRpb25zKC0pCj4KPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZW5naW5lX2NzLmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfY3MuYwo+IGluZGV4IGMzMTU0NDQwNjk3NC4uY2U3 ZmNmNTViYTE4IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2lu ZV9jcy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZW5naW5lX2NzLmMKPiBA QCAtNDIzLDYgKzQyMyw3IEBAIHN0YXRpYyB2b2lkIGludGVsX2VuZ2luZV9pbml0X2V4ZWNsaXN0 KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgCUJVSUxEX0JVR19PTl9OT1RfUE9X RVJfT0ZfMihleGVjbGlzdHNfbnVtX3BvcnRzKGV4ZWNsaXN0cykpOwo+ICAJR0VNX0JVR19PTihl eGVjbGlzdHNfbnVtX3BvcnRzKGV4ZWNsaXN0cykgPiBFWEVDTElTVF9NQVhfUE9SVFMpOwo+ICAK PiArCWV4ZWNsaXN0cy0+cXVldWVfcHJpb3JpdHkgPSBJTlRfTUlOOwo+ICAJZXhlY2xpc3RzLT5x dWV1ZSA9IFJCX1JPT1Q7Cj4gIAlleGVjbGlzdHMtPmZpcnN0ID0gTlVMTDsKPiAgfQo+IEBAIC0x OTAzLDYgKzE5MDQsNyBAQCB2b2lkIGludGVsX2VuZ2luZV9kdW1wKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSwKPiAgCXNwaW5fbG9ja19pcnEoJmVuZ2luZS0+dGltZWxpbmUtPmxvY2sp Owo+ICAJbGlzdF9mb3JfZWFjaF9lbnRyeShycSwgJmVuZ2luZS0+dGltZWxpbmUtPnJlcXVlc3Rz LCBsaW5rKQo+ICAJCXByaW50X3JlcXVlc3QobSwgcnEsICJcdFx0RSAiKTsKPiArCWRybV9wcmlu dGYobSwgIlx0XHRRdWV1ZSBwcmlvcml0eTogJWRcbiIsIGV4ZWNsaXN0cy0+cXVldWVfcHJpb3Jp dHkpOwo+ICAJZm9yIChyYiA9IGV4ZWNsaXN0cy0+Zmlyc3Q7IHJiOyByYiA9IHJiX25leHQocmIp KSB7Cj4gIAkJc3RydWN0IGk5MTVfcHJpb2xpc3QgKnAgPQo+ICAJCQlyYl9lbnRyeShyYiwgdHlw ZW9mKCpwKSwgbm9kZSk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2d1Y19zdWJtaXNzaW9uLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNfc3VibWlz c2lvbi5jCj4gaW5kZXggNjQ5MTEzYzdhM2MyLi41ODZkZGU1Nzk5MDMgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uYwo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19zdWJtaXNzaW9uLmMKPiBAQCAtNzUsNiArNzUsMTEg QEAKPiAgICoKPiAgICovCj4gIAo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBpOTE1X3ByaW9saXN0 ICp0b19wcmlvbGlzdChzdHJ1Y3QgcmJfbm9kZSAqcmIpCj4gK3sKPiArCXJldHVybiByYl9lbnRy eShyYiwgc3RydWN0IGk5MTVfcHJpb2xpc3QsIG5vZGUpOwo+ICt9Cj4gKwo+ICBzdGF0aWMgaW5s aW5lIGJvb2wgaXNfaGlnaF9wcmlvcml0eShzdHJ1Y3QgaW50ZWxfZ3VjX2NsaWVudCAqY2xpZW50 KQo+ICB7Cj4gIAlyZXR1cm4gKGNsaWVudC0+cHJpb3JpdHkgPT0gR1VDX0NMSUVOVF9QUklPUklU WV9LTURfSElHSCB8fAo+IEBAIC02ODIsMTUgKzY4NywxMiBAQCBzdGF0aWMgdm9pZCBndWNfZGVx dWV1ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIAlyYiA9IGV4ZWNsaXN0cy0+ Zmlyc3Q7Cj4gIAlHRU1fQlVHX09OKHJiX2ZpcnN0KCZleGVjbGlzdHMtPnF1ZXVlKSAhPSByYik7 Cj4gIAo+IC0JaWYgKCFyYikKPiAtCQlnb3RvIHVubG9jazsKPiAtCj4gIAlpZiAocG9ydF9pc3Nl dChwb3J0KSkgewo+ICAJCWlmIChlbmdpbmUtPmk5MTUtPnByZWVtcHRfY29udGV4dCkgewo+ICAJ CQlzdHJ1Y3QgZ3VjX3ByZWVtcHRfd29yayAqcHJlZW1wdF93b3JrID0KPiAgCQkJCSZlbmdpbmUt Pmk5MTUtPmd1Yy5wcmVlbXB0X3dvcmtbZW5naW5lLT5pZF07Cj4gIAo+IC0JCQlpZiAocmJfZW50 cnkocmIsIHN0cnVjdCBpOTE1X3ByaW9saXN0LCBub2RlKS0+cHJpb3JpdHkgPgo+ICsJCQlpZiAo ZXhlY2xpc3RzLT5xdWV1ZV9wcmlvcml0eSA+Cj4gIAkJCSAgICBtYXgocG9ydF9yZXF1ZXN0KHBv cnQpLT5wcmlvdHJlZS5wcmlvcml0eSwgMCkpIHsKPiAgCQkJCWV4ZWNsaXN0c19zZXRfYWN0aXZl KGV4ZWNsaXN0cywKPiAgCQkJCQkJICAgICBFWEVDTElTVFNfQUNUSVZFX1BSRUVNUFQpOwoKVGhp cyBpcyB0aGUgcHJpb3JpdHkgaW52ZXJzaW9uIHBhcnQ/IFdlIHByZWVtcHQgYW5kIGNsZWFyIHRo ZSBwb3J0cwp0byByZWFycmFuZ2UgaWYgdGhlIGxhc3QgcG9ydCBoYXMgYSBoaWdoZXIgcHJpb3Jp dHkgcmVxdWVzdD8KCj4gQEAgLTcwNiw4ICs3MDgsOCBAQCBzdGF0aWMgdm9pZCBndWNfZGVxdWV1 ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIAl9Cj4gIAlHRU1fQlVHX09OKHBv cnRfaXNzZXQocG9ydCkpOwo+ICAKPiAtCWRvIHsKPiAtCQlzdHJ1Y3QgaTkxNV9wcmlvbGlzdCAq cCA9IHJiX2VudHJ5KHJiLCB0eXBlb2YoKnApLCBub2RlKTsKPiArCXdoaWxlIChyYikgewo+ICsJ CXN0cnVjdCBpOTE1X3ByaW9saXN0ICpwID0gdG9fcHJpb2xpc3QocmIpOwo+ICAJCXN0cnVjdCBp OTE1X3JlcXVlc3QgKnJxLCAqcm47Cj4gIAo+ICAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShy cSwgcm4sICZwLT5yZXF1ZXN0cywgcHJpb3RyZWUubGluaykgewo+IEBAIC03MzYsOCArNzM4LDkg QEAgc3RhdGljIHZvaWQgZ3VjX2RlcXVldWUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KQo+ICAJCUlOSVRfTElTVF9IRUFEKCZwLT5yZXF1ZXN0cyk7Cj4gIAkJaWYgKHAtPnByaW9yaXR5 ICE9IEk5MTVfUFJJT1JJVFlfTk9STUFMKQo+ICAJCQlrbWVtX2NhY2hlX2ZyZWUoZW5naW5lLT5p OTE1LT5wcmlvcml0aWVzLCBwKTsKPiAtCX0gd2hpbGUgKHJiKTsKPiArCX0KPiAgZG9uZToKPiAr CWV4ZWNsaXN0cy0+cXVldWVfcHJpb3JpdHkgPSByYiA/IHRvX3ByaW9saXN0KHJiKS0+cHJpb3Jp dHkgOiBJTlRfTUlOOwo+ICAJZXhlY2xpc3RzLT5maXJzdCA9IHJiOwo+ICAJaWYgKHN1Ym1pdCkg ewo+ICAJCXBvcnRfYXNzaWduKHBvcnQsIGxhc3QpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9scmMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5j Cj4gaW5kZXggOTY0ODg1YjVkN2NiLi40YmM3MmZiYWY3OTMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9scmMuYwo+IEBAIC0xNjksNiArMTY5LDIzIEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19p bml0X3JlZ19zdGF0ZSh1MzIgKnJlZ19zdGF0ZSwKPiAgCQkJCSAgICAgc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lLAo+ICAJCQkJICAgICBzdHJ1Y3QgaW50ZWxfcmluZyAqcmluZyk7Cj4g IAo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBpOTE1X3ByaW9saXN0ICp0b19wcmlvbGlzdChzdHJ1 Y3QgcmJfbm9kZSAqcmIpCj4gK3sKPiArCXJldHVybiByYl9lbnRyeShyYiwgc3RydWN0IGk5MTVf cHJpb2xpc3QsIG5vZGUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIGludCBycV9wcmlvKGNv bnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQo+ICt7Cj4gKwlyZXR1cm4gcnEtPnByaW90cmVl LnByaW9yaXR5Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIGJvb2wgbmVlZF9wcmVlbXB0KGNv bnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpsYXN0LAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwcmlvKQo+ICt7Cj4gKwlyZXR1cm4gZW5naW5l LT5pOTE1LT5wcmVlbXB0X2NvbnRleHQgJiYgcHJpbyA+IG1heChycV9wcmlvKGxhc3QpLCAwKTsK PiArfQo+ICsKPiAgLyoqCj4gICAqIGludGVsX2xyX2NvbnRleHRfZGVzY3JpcHRvcl91cGRhdGUo KSAtIGNhbGN1bGF0ZSAmIGNhY2hlIHRoZSBkZXNjcmlwdG9yCj4gICAqIAkJCQkJICBkZXNjcmlw dG9yIGZvciBhIHBpbm5lZCBjb250ZXh0Cj4gQEAgLTIyNCw3ICsyNDEsNyBAQCBsb29rdXBfcHJp b2xpc3Qoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICAJcGFyZW50ID0gJmV4ZWNs aXN0cy0+cXVldWUucmJfbm9kZTsKPiAgCXdoaWxlICgqcGFyZW50KSB7Cj4gIAkJcmIgPSAqcGFy ZW50Owo+IC0JCXAgPSByYl9lbnRyeShyYiwgdHlwZW9mKCpwKSwgbm9kZSk7Cj4gKwkJcCA9IHRv X3ByaW9saXN0KHJiKTsKPiAgCQlpZiAocHJpbyA+IHAtPnByaW9yaXR5KSB7Cj4gIAkJCXBhcmVu dCA9ICZyYi0+cmJfbGVmdDsKPiAgCQl9IGVsc2UgaWYgKHByaW8gPCBwLT5wcmlvcml0eSkgewo+ IEBAIC0yNjQsNyArMjgxLDcgQEAgbG9va3VwX3ByaW9saXN0KHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSwKPiAgCWlmIChmaXJzdCkKPiAgCQlleGVjbGlzdHMtPmZpcnN0ID0gJnAtPm5v ZGU7Cj4gIAo+IC0JcmV0dXJuIHB0cl9wYWNrX2JpdHMocCwgZmlyc3QsIDEpOwo+ICsJcmV0dXJu IHA7CgpIbW0gdGhlcmUgaXMgbm8gbmVlZCBmb3IgZGVjb2RlIGZpcnN0IGFzIHdlIGFsd2F5cyBy ZXN1Ym1pdAp0aGUgcXVldWUgZGVwZW5kaW5nIG9uIHRoZSBwcmlvPwoKCj4gIH0KPiAgCj4gIHN0 YXRpYyB2b2lkIHVud2luZF93YV90YWlsKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQo+IEBAIC0y OTAsMTQgKzMwNywxMCBAQCBzdGF0aWMgdm9pZCBfX3Vud2luZF9pbmNvbXBsZXRlX3JlcXVlc3Rz KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgCQlfX2k5MTVfcmVxdWVzdF91bnN1 Ym1pdChycSk7Cj4gIAkJdW53aW5kX3dhX3RhaWwocnEpOwo+ICAKPiAtCQlHRU1fQlVHX09OKHJx LT5wcmlvdHJlZS5wcmlvcml0eSA9PSBJOTE1X1BSSU9SSVRZX0lOVkFMSUQpOwo+IC0JCWlmIChy cS0+cHJpb3RyZWUucHJpb3JpdHkgIT0gbGFzdF9wcmlvKSB7Cj4gLQkJCXAgPSBsb29rdXBfcHJp b2xpc3QoZW5naW5lLAo+IC0JCQkJCSAgICAmcnEtPnByaW90cmVlLAo+IC0JCQkJCSAgICBycS0+ cHJpb3RyZWUucHJpb3JpdHkpOwo+IC0JCQlwID0gcHRyX21hc2tfYml0cyhwLCAxKTsKPiAtCj4g LQkJCWxhc3RfcHJpbyA9IHJxLT5wcmlvdHJlZS5wcmlvcml0eTsKPiArCQlHRU1fQlVHX09OKHJx X3ByaW8ocnEpID09IEk5MTVfUFJJT1JJVFlfSU5WQUxJRCk7Cj4gKwkJaWYgKHJxX3ByaW8ocnEp ICE9IGxhc3RfcHJpbykgewo+ICsJCQlsYXN0X3ByaW8gPSBycV9wcmlvKHJxKTsKPiArCQkJcCA9 IGxvb2t1cF9wcmlvbGlzdChlbmdpbmUsICZycS0+cHJpb3RyZWUsIGxhc3RfcHJpbyk7Cj4gIAkJ fQo+ICAKPiAgCQlsaXN0X2FkZCgmcnEtPnByaW90cmVlLmxpbmssICZwLT5yZXF1ZXN0cyk7Cj4g QEAgLTM5NywxMCArNDEwLDExIEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19zdWJtaXRfcG9ydHMo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAJCQlkZXNjID0gZXhlY2xpc3RzX3Vw ZGF0ZV9jb250ZXh0KHJxKTsKPiAgCQkJR0VNX0RFQlVHX0VYRUMocG9ydFtuXS5jb250ZXh0X2lk ID0gdXBwZXJfMzJfYml0cyhkZXNjKSk7Cj4gIAo+IC0JCQlHRU1fVFJBQ0UoIiVzIGluWyVkXTog IGN0eD0lZC4lZCwgc2Vxbm89JXhcbiIsCj4gKwkJCUdFTV9UUkFDRSgiJXMgaW5bJWRdOiAgY3R4 PSVkLiVkLCBzZXFubz0leCwgcHJpbz0lZFxuIiwKPiAgCQkJCSAgZW5naW5lLT5uYW1lLCBuLAo+ ICAJCQkJICBwb3J0W25dLmNvbnRleHRfaWQsIGNvdW50LAo+IC0JCQkJICBycS0+Z2xvYmFsX3Nl cW5vKTsKPiArCQkJCSAgcnEtPmdsb2JhbF9zZXFubywKPiArCQkJCSAgcnFfcHJpbyhycSkpOwo+ ICAJCX0gZWxzZSB7Cj4gIAkJCUdFTV9CVUdfT04oIW4pOwo+ICAJCQlkZXNjID0gMDsKPiBAQCAt NDUzLDEyICs0NjcsMTcgQEAgc3RhdGljIHZvaWQgaW5qZWN0X3ByZWVtcHRfY29udGV4dChzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIAkJICAgX01BU0tFRF9CSVRfRU5BQkxFKENU WF9DVFJMX0VOR0lORV9DVFhfUkVTVE9SRV9JTkhJQklUIHwKPiAgCQkJCSAgICAgIENUWF9DVFJM X0VOR0lORV9DVFhfU0FWRV9JTkhJQklUKSk7Cj4gIAo+ICsJLyoKPiArCSAqIFN3aXRjaCB0byBv dXIgZW1wdHkgcHJlZW1wdCBjb250ZXh0IHNvCj4gKwkgKiB0aGUgc3RhdGUgb2YgdGhlIEdQVSBp cyBrbm93biAoaWRsZSkuCj4gKwkgKi8KPiAgCUdFTV9UUkFDRSgiJXNcbiIsIGVuZ2luZS0+bmFt ZSk7Cj4gIAlmb3IgKG4gPSBleGVjbGlzdHNfbnVtX3BvcnRzKCZlbmdpbmUtPmV4ZWNsaXN0cyk7 IC0tbjsgKQo+ICAJCWVsc3Bfd3JpdGUoMCwgZW5naW5lLT5leGVjbGlzdHMuZWxzcCk7Cj4gIAo+ ICAJZWxzcF93cml0ZShjZS0+bHJjX2Rlc2MsIGVuZ2luZS0+ZXhlY2xpc3RzLmVsc3ApOwo+ICAJ ZXhlY2xpc3RzX2NsZWFyX2FjdGl2ZSgmZW5naW5lLT5leGVjbGlzdHMsIEVYRUNMSVNUU19BQ1RJ VkVfSFdBQ0spOwo+ICsJZXhlY2xpc3RzX3NldF9hY3RpdmUoJmVuZ2luZS0+ZXhlY2xpc3RzLCBF WEVDTElTVFNfQUNUSVZFX1BSRUVNUFQpOwoKU3VyZWx5IGEgYmV0dGVyIHBsYWNlLiBOb3cgbG9v a2luZyBhdCB0aGlzIHdvdWxkIGl0IGJlIG1vcmUgcHJ1ZGVudCB0bwptb3ZlIGJvdGggdGhlIGNs ZWFyIGFuZCBzZXQgcmlnaHQgYmVmb3JlIHRoZSBsYXN0IGVsc3Agd3JpdGU/CgpXZWxsIEkgZ3Vl c3MgaXQgcmVhbGx5IGRvZXNuJ3QgbWF0dGVyIGFzIHdlIGhvbGQgdGhlIHRpbWVsaW5lIGxvY2su CgotTWlrYQoKPiAgfQo+ICAKPiAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX2RlcXVldWUoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+IEBAIC00OTUsOCArNTE0LDYgQEAgc3RhdGljIHZv aWQgZXhlY2xpc3RzX2RlcXVldWUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAJ c3Bpbl9sb2NrX2lycSgmZW5naW5lLT50aW1lbGluZS0+bG9jayk7Cj4gIAlyYiA9IGV4ZWNsaXN0 cy0+Zmlyc3Q7Cj4gIAlHRU1fQlVHX09OKHJiX2ZpcnN0KCZleGVjbGlzdHMtPnF1ZXVlKSAhPSBy Yik7Cj4gLQlpZiAoIXJiKQo+IC0JCWdvdG8gdW5sb2NrOwo+ICAKPiAgCWlmIChsYXN0KSB7Cj4g IAkJLyoKPiBAQCAtNTE5LDU0ICs1MzYsNDggQEAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX2RlcXVl dWUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAJCWlmICghZXhlY2xpc3RzX2lz X2FjdGl2ZShleGVjbGlzdHMsIEVYRUNMSVNUU19BQ1RJVkVfSFdBQ0spKQo+ICAJCQlnb3RvIHVu bG9jazsKPiAgCj4gLQkJaWYgKGVuZ2luZS0+aTkxNS0+cHJlZW1wdF9jb250ZXh0ICYmCj4gLQkJ ICAgIHJiX2VudHJ5KHJiLCBzdHJ1Y3QgaTkxNV9wcmlvbGlzdCwgbm9kZSktPnByaW9yaXR5ID4K PiAtCQkgICAgbWF4KGxhc3QtPnByaW90cmVlLnByaW9yaXR5LCAwKSkgewo+IC0JCQkvKgo+IC0J CQkgKiBTd2l0Y2ggdG8gb3VyIGVtcHR5IHByZWVtcHQgY29udGV4dCBzbwo+IC0JCQkgKiB0aGUg c3RhdGUgb2YgdGhlIEdQVSBpcyBrbm93biAoaWRsZSkuCj4gLQkJCSAqLwo+ICsJCWlmIChuZWVk X3ByZWVtcHQoZW5naW5lLCBsYXN0LCBleGVjbGlzdHMtPnF1ZXVlX3ByaW9yaXR5KSkgewo+ICAJ CQlpbmplY3RfcHJlZW1wdF9jb250ZXh0KGVuZ2luZSk7Cj4gLQkJCWV4ZWNsaXN0c19zZXRfYWN0 aXZlKGV4ZWNsaXN0cywKPiAtCQkJCQkgICAgIEVYRUNMSVNUU19BQ1RJVkVfUFJFRU1QVCk7Cj4g IAkJCWdvdG8gdW5sb2NrOwo+IC0JCX0gZWxzZSB7Cj4gLQkJCS8qCj4gLQkJCSAqIEluIHRoZW9y eSwgd2UgY291bGQgY29hbGVzY2UgbW9yZSByZXF1ZXN0cyBvbnRvCj4gLQkJCSAqIHRoZSBzZWNv bmQgcG9ydCAodGhlIGZpcnN0IHBvcnQgaXMgYWN0aXZlLCB3aXRoCj4gLQkJCSAqIG5vIHByZWVt cHRpb25zIHBlbmRpbmcpLiBIb3dldmVyLCB0aGF0IG1lYW5zIHdlCj4gLQkJCSAqIHRoZW4gaGF2 ZSB0byBkZWFsIHdpdGggdGhlIHBvc3NpYmxlIGxpdGUtcmVzdG9yZQo+IC0JCQkgKiBvZiB0aGUg c2Vjb25kIHBvcnQgKGFzIHdlIHN1Ym1pdCB0aGUgRUxTUCwgdGhlcmUKPiAtCQkJICogbWF5IGJl IGEgY29udGV4dC1zd2l0Y2gpIGJ1dCBhbHNvIHdlIG1heSBjb21wbGV0ZQo+IC0JCQkgKiB0aGUg cmVzdWJtaXNzaW9uIGJlZm9yZSB0aGUgY29udGV4dC1zd2l0Y2guIEVyZ28sCj4gLQkJCSAqIGNv YWxlc2Npbmcgb250byB0aGUgc2Vjb25kIHBvcnQgd2lsbCBjYXVzZSBhCj4gLQkJCSAqIHByZWVt cHRpb24gZXZlbnQsIGJ1dCB3ZSBjYW5ub3QgcHJlZGljdCB3aGV0aGVyCj4gLQkJCSAqIHRoYXQg d2lsbCBhZmZlY3QgcG9ydFswXSBvciBwb3J0WzFdLgo+IC0JCQkgKgo+IC0JCQkgKiBJZiB0aGUg c2Vjb25kIHBvcnQgaXMgYWxyZWFkeSBhY3RpdmUsIHdlIGNhbiB3YWl0Cj4gLQkJCSAqIHVudGls IHRoZSBuZXh0IGNvbnRleHQtc3dpdGNoIGJlZm9yZSBjb250ZW1wbGF0aW5nCj4gLQkJCSAqIG5l dyByZXF1ZXN0cy4gVGhlIEdQVSB3aWxsIGJlIGJ1c3kgYW5kIHdlIHNob3VsZCBiZQo+IC0JCQkg KiBhYmxlIHRvIHJlc3VibWl0IHRoZSBuZXcgRUxTUCBiZWZvcmUgaXQgaWRsZXMsCj4gLQkJCSAq IGF2b2lkaW5nIHBpcGVsaW5lIGJ1YmJsZXMgKG1vbWVudGFyeSBwYXVzZXMgd2hlcmUKPiAtCQkJ ICogdGhlIGRyaXZlciBpcyB1bmFibGUgdG8ga2VlcCB1cCB0aGUgc3VwcGx5IG9mIG5ldwo+IC0J CQkgKiB3b3JrKS4KPiAtCQkJICovCj4gLQkJCWlmIChwb3J0X2NvdW50KCZwb3J0WzFdKSkKPiAt CQkJCWdvdG8gdW5sb2NrOwo+IC0KPiAtCQkJLyogV2FJZGxlTGl0ZVJlc3RvcmU6YmR3LHNrbAo+ IC0JCQkgKiBBcHBseSB0aGUgd2EgTk9PUHMgdG8gcHJldmVudAo+IC0JCQkgKiByaW5nOkhFQUQg PT0gcnE6VEFJTCBhcyB3ZSByZXN1Ym1pdCB0aGUKPiAtCQkJICogcmVxdWVzdC4gU2VlIGdlbjhf ZW1pdF9icmVhZGNydW1iKCkgZm9yCj4gLQkJCSAqIHdoZXJlIHdlIHByZXBhcmUgdGhlIHBhZGRp bmcgYWZ0ZXIgdGhlCj4gLQkJCSAqIGVuZCBvZiB0aGUgcmVxdWVzdC4KPiAtCQkJICovCj4gLQkJ CWxhc3QtPnRhaWwgPSBsYXN0LT53YV90YWlsOwo+ICAJCX0KPiArCj4gKwkJLyoKPiArCQkgKiBJ biB0aGVvcnksIHdlIGNvdWxkIGNvYWxlc2NlIG1vcmUgcmVxdWVzdHMgb250bwo+ICsJCSAqIHRo ZSBzZWNvbmQgcG9ydCAodGhlIGZpcnN0IHBvcnQgaXMgYWN0aXZlLCB3aXRoCj4gKwkJICogbm8g cHJlZW1wdGlvbnMgcGVuZGluZykuIEhvd2V2ZXIsIHRoYXQgbWVhbnMgd2UKPiArCQkgKiB0aGVu IGhhdmUgdG8gZGVhbCB3aXRoIHRoZSBwb3NzaWJsZSBsaXRlLXJlc3RvcmUKPiArCQkgKiBvZiB0 aGUgc2Vjb25kIHBvcnQgKGFzIHdlIHN1Ym1pdCB0aGUgRUxTUCwgdGhlcmUKPiArCQkgKiBtYXkg YmUgYSBjb250ZXh0LXN3aXRjaCkgYnV0IGFsc28gd2UgbWF5IGNvbXBsZXRlCj4gKwkJICogdGhl IHJlc3VibWlzc2lvbiBiZWZvcmUgdGhlIGNvbnRleHQtc3dpdGNoLiBFcmdvLAo+ICsJCSAqIGNv YWxlc2Npbmcgb250byB0aGUgc2Vjb25kIHBvcnQgd2lsbCBjYXVzZSBhCj4gKwkJICogcHJlZW1w dGlvbiBldmVudCwgYnV0IHdlIGNhbm5vdCBwcmVkaWN0IHdoZXRoZXIKPiArCQkgKiB0aGF0IHdp bGwgYWZmZWN0IHBvcnRbMF0gb3IgcG9ydFsxXS4KPiArCQkgKgo+ICsJCSAqIElmIHRoZSBzZWNv bmQgcG9ydCBpcyBhbHJlYWR5IGFjdGl2ZSwgd2UgY2FuIHdhaXQKPiArCQkgKiB1bnRpbCB0aGUg bmV4dCBjb250ZXh0LXN3aXRjaCBiZWZvcmUgY29udGVtcGxhdGluZwo+ICsJCSAqIG5ldyByZXF1 ZXN0cy4gVGhlIEdQVSB3aWxsIGJlIGJ1c3kgYW5kIHdlIHNob3VsZCBiZQo+ICsJCSAqIGFibGUg dG8gcmVzdWJtaXQgdGhlIG5ldyBFTFNQIGJlZm9yZSBpdCBpZGxlcywKPiArCQkgKiBhdm9pZGlu ZyBwaXBlbGluZSBidWJibGVzIChtb21lbnRhcnkgcGF1c2VzIHdoZXJlCj4gKwkJICogdGhlIGRy aXZlciBpcyB1bmFibGUgdG8ga2VlcCB1cCB0aGUgc3VwcGx5IG9mIG5ldwo+ICsJCSAqIHdvcmsp LiBIb3dldmVyLCB3ZSBoYXZlIHRvIGRvdWJsZSBjaGVjayB0aGF0IHRoZQo+ICsJCSAqIHByaW9y aXRpZXMgb2YgdGhlIHBvcnRzIGhhdmVuJ3QgYmVlbiBzd2l0Y2guCj4gKwkJICovCj4gKwkJaWYg KHBvcnRfY291bnQoJnBvcnRbMV0pKQo+ICsJCQlnb3RvIHVubG9jazsKPiArCj4gKwkJLyoKPiAr CQkgKiBXYUlkbGVMaXRlUmVzdG9yZTpiZHcsc2tsCj4gKwkJICogQXBwbHkgdGhlIHdhIE5PT1Bz IHRvIHByZXZlbnQKPiArCQkgKiByaW5nOkhFQUQgPT0gcnE6VEFJTCBhcyB3ZSByZXN1Ym1pdCB0 aGUKPiArCQkgKiByZXF1ZXN0LiBTZWUgZ2VuOF9lbWl0X2JyZWFkY3J1bWIoKSBmb3IKPiArCQkg KiB3aGVyZSB3ZSBwcmVwYXJlIHRoZSBwYWRkaW5nIGFmdGVyIHRoZQo+ICsJCSAqIGVuZCBvZiB0 aGUgcmVxdWVzdC4KPiArCQkgKi8KPiArCQlsYXN0LT50YWlsID0gbGFzdC0+d2FfdGFpbDsKPiAg CX0KPiAgCj4gLQlkbyB7Cj4gLQkJc3RydWN0IGk5MTVfcHJpb2xpc3QgKnAgPSByYl9lbnRyeShy YiwgdHlwZW9mKCpwKSwgbm9kZSk7Cj4gKwl3aGlsZSAocmIpIHsKPiArCQlzdHJ1Y3QgaTkxNV9w cmlvbGlzdCAqcCA9IHRvX3ByaW9saXN0KHJiKTsKPiAgCQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpy cSwgKnJuOwo+ICAKPiAgCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnEsIHJuLCAmcC0+cmVx dWVzdHMsIHByaW90cmVlLmxpbmspIHsKPiBAQCAtNjI4LDggKzYzOSw5IEBAIHN0YXRpYyB2b2lk IGV4ZWNsaXN0c19kZXF1ZXVlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgCQlJ TklUX0xJU1RfSEVBRCgmcC0+cmVxdWVzdHMpOwo+ICAJCWlmIChwLT5wcmlvcml0eSAhPSBJOTE1 X1BSSU9SSVRZX05PUk1BTCkKPiAgCQkJa21lbV9jYWNoZV9mcmVlKGVuZ2luZS0+aTkxNS0+cHJp b3JpdGllcywgcCk7Cj4gLQl9IHdoaWxlIChyYik7Cj4gKwl9Cj4gIGRvbmU6Cj4gKwlleGVjbGlz dHMtPnF1ZXVlX3ByaW9yaXR5ID0gcmIgPyB0b19wcmlvbGlzdChyYiktPnByaW9yaXR5IDogSU5U X01JTjsKPiAgCWV4ZWNsaXN0cy0+Zmlyc3QgPSByYjsKPiAgCWlmIChzdWJtaXQpCj4gIAkJcG9y dF9hc3NpZ24ocG9ydCwgbGFzdCk7Cj4gQEAgLTY5MCw3ICs3MDIsNyBAQCBzdGF0aWMgdm9pZCBl eGVjbGlzdHNfY2FuY2VsX3JlcXVlc3RzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkK PiAgCS8qIEZsdXNoIHRoZSBxdWV1ZWQgcmVxdWVzdHMgdG8gdGhlIHRpbWVsaW5lIGxpc3QgKGZv ciByZXRpcmluZykuICovCj4gIAlyYiA9IGV4ZWNsaXN0cy0+Zmlyc3Q7Cj4gIAl3aGlsZSAocmIp IHsKPiAtCQlzdHJ1Y3QgaTkxNV9wcmlvbGlzdCAqcCA9IHJiX2VudHJ5KHJiLCB0eXBlb2YoKnAp LCBub2RlKTsKPiArCQlzdHJ1Y3QgaTkxNV9wcmlvbGlzdCAqcCA9IHRvX3ByaW9saXN0KHJiKTsK PiAgCj4gIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJxLCBybiwgJnAtPnJlcXVlc3RzLCBw cmlvdHJlZS5saW5rKSB7Cj4gIAkJCUlOSVRfTElTVF9IRUFEKCZycS0+cHJpb3RyZWUubGluayk7 Cj4gQEAgLTcwOCw3ICs3MjAsNyBAQCBzdGF0aWMgdm9pZCBleGVjbGlzdHNfY2FuY2VsX3JlcXVl c3RzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgCj4gIAkvKiBSZW1haW5pbmcg X3VucmVhZHlfIHJlcXVlc3RzIHdpbGwgYmUgbm9wJ2VkIHdoZW4gc3VibWl0dGVkICovCj4gIAo+ IC0KPiArCWV4ZWNsaXN0cy0+cXVldWVfcHJpb3JpdHkgPSBJTlRfTUlOOwo+ICAJZXhlY2xpc3Rz LT5xdWV1ZSA9IFJCX1JPT1Q7Cj4gIAlleGVjbGlzdHMtPmZpcnN0ID0gTlVMTDsKPiAgCUdFTV9C VUdfT04ocG9ydF9pc3NldChleGVjbGlzdHMtPnBvcnQpKTsKPiBAQCAtODY0LDEwICs4NzYsMTEg QEAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX3N1Ym1pc3Npb25fdGFza2xldCh1bnNpZ25lZCBsb25n IGRhdGEpCj4gIAkJCQkJCQlFWEVDTElTVFNfQUNUSVZFX1VTRVIpKTsKPiAgCj4gIAkJCXJxID0g cG9ydF91bnBhY2socG9ydCwgJmNvdW50KTsKPiAtCQkJR0VNX1RSQUNFKCIlcyBvdXRbMF06IGN0 eD0lZC4lZCwgc2Vxbm89JXhcbiIsCj4gKwkJCUdFTV9UUkFDRSgiJXMgb3V0WzBdOiBjdHg9JWQu JWQsIHNlcW5vPSV4LCBwcmlvPSVkXG4iLAo+ICAJCQkJICBlbmdpbmUtPm5hbWUsCj4gIAkJCQkg IHBvcnQtPmNvbnRleHRfaWQsIGNvdW50LAo+IC0JCQkJICBycSA/IHJxLT5nbG9iYWxfc2Vxbm8g OiAwKTsKPiArCQkJCSAgcnEgPyBycS0+Z2xvYmFsX3NlcW5vIDogMCwKPiArCQkJCSAgcnEgPyBy cV9wcmlvKHJxKSA6IDApOwo+ICAKPiAgCQkJLyogQ2hlY2sgdGhlIGNvbnRleHQvZGVzYyBpZCBm b3IgdGhpcyBldmVudCBtYXRjaGVzICovCj4gIAkJCUdFTV9ERUJVR19CVUdfT04oYnVmWzIgKiBo ZWFkICsgMV0gIT0gcG9ydC0+Y29udGV4dF9pZCk7Cj4gQEAgLTkxMiwxNSArOTI1LDE5IEBAIHN0 YXRpYyB2b2lkIGV4ZWNsaXN0c19zdWJtaXNzaW9uX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRh KQo+ICAJCWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KGRldl9wcml2LCBleGVjbGlzdHMtPmZ3 X2RvbWFpbnMpOwo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBpbnNlcnRfcmVxdWVzdChzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gLQkJCSAgIHN0cnVjdCBpOTE1X3ByaW90cmVlICpw dCwKPiAtCQkJICAgaW50IHByaW8pCj4gK3N0YXRpYyB2b2lkIHF1ZXVlX3JlcXVlc3Qoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICsJCQkgIHN0cnVjdCBpOTE1X3ByaW90cmVlICpw dCwKPiArCQkJICBpbnQgcHJpbykKPiAgewo+IC0Jc3RydWN0IGk5MTVfcHJpb2xpc3QgKnAgPSBs b29rdXBfcHJpb2xpc3QoZW5naW5lLCBwdCwgcHJpbyk7Cj4gKwlsaXN0X2FkZF90YWlsKCZwdC0+ bGluaywgJmxvb2t1cF9wcmlvbGlzdChlbmdpbmUsIHB0LCBwcmlvKS0+cmVxdWVzdHMpOwo+ICt9 Cj4gIAo+IC0JbGlzdF9hZGRfdGFpbCgmcHQtPmxpbmssICZwdHJfbWFza19iaXRzKHAsIDEpLT5y ZXF1ZXN0cyk7Cj4gLQlpZiAocHRyX3VubWFza19iaXRzKHAsIDEpKQo+ICtzdGF0aWMgdm9pZCBz dWJtaXRfcXVldWUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBpbnQgcHJpbykKPiAr ewo+ICsJaWYgKHByaW8gPiBlbmdpbmUtPmV4ZWNsaXN0cy5xdWV1ZV9wcmlvcml0eSkgewo+ICsJ CWVuZ2luZS0+ZXhlY2xpc3RzLnF1ZXVlX3ByaW9yaXR5ID0gcHJpbzsKPiAgCQl0YXNrbGV0X2hp X3NjaGVkdWxlKCZlbmdpbmUtPmV4ZWNsaXN0cy50YXNrbGV0KTsKPiArCX0KPiAgfQo+ICAKPiAg c3RhdGljIHZvaWQgZXhlY2xpc3RzX3N1Ym1pdF9yZXF1ZXN0KHN0cnVjdCBpOTE1X3JlcXVlc3Qg KnJlcXVlc3QpCj4gQEAgLTkzMSw3ICs5NDgsOCBAQCBzdGF0aWMgdm9pZCBleGVjbGlzdHNfc3Vi bWl0X3JlcXVlc3Qoc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCkKPiAgCS8qIFdpbGwgYmUg Y2FsbGVkIGZyb20gaXJxLWNvbnRleHQgd2hlbiB1c2luZyBmb3JlaWduIGZlbmNlcy4gKi8KPiAg CXNwaW5fbG9ja19pcnFzYXZlKCZlbmdpbmUtPnRpbWVsaW5lLT5sb2NrLCBmbGFncyk7Cj4gIAo+ IC0JaW5zZXJ0X3JlcXVlc3QoZW5naW5lLCAmcmVxdWVzdC0+cHJpb3RyZWUsIHJlcXVlc3QtPnBy aW90cmVlLnByaW9yaXR5KTsKPiArCXF1ZXVlX3JlcXVlc3QoZW5naW5lLCAmcmVxdWVzdC0+cHJp b3RyZWUsIHJxX3ByaW8ocmVxdWVzdCkpOwo+ICsJc3VibWl0X3F1ZXVlKGVuZ2luZSwgcnFfcHJp byhyZXF1ZXN0KSk7Cj4gIAo+ICAJR0VNX0JVR19PTighZW5naW5lLT5leGVjbGlzdHMuZmlyc3Qp Owo+ICAJR0VNX0JVR19PTihsaXN0X2VtcHR5KCZyZXF1ZXN0LT5wcmlvdHJlZS5saW5rKSk7Cj4g QEAgLTk4Nyw3ICsxMDA1LDcgQEAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX3NjaGVkdWxlKHN0cnVj dCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QsIGludCBwcmlvKQo+ICAJICogc3RhdGljIHZvaWQgdXBk YXRlX3ByaW9yaXRpZXMoc3RydWN0IGk5MTVfcHJpb3RyZWUgKnB0LCBwcmlvKSB7Cj4gIAkgKgls aXN0X2Zvcl9lYWNoX2VudHJ5KGRlcCwgJnB0LT5zaWduYWxlcnNfbGlzdCwgc2lnbmFsX2xpbmsp Cj4gIAkgKgkJdXBkYXRlX3ByaW9yaXRpZXMoZGVwLT5zaWduYWwsIHByaW8pCj4gLQkgKglpbnNl cnRfcmVxdWVzdChwdCk7Cj4gKwkgKglxdWV1ZV9yZXF1ZXN0KHB0KTsKPiAgCSAqIH0KPiAgCSAq IGJ1dCB0aGF0IG1heSBoYXZlIHVubGltaXRlZCByZWN1cnNpb24gZGVwdGggYW5kIHNvIHJ1bnMg YSB2ZXJ5Cj4gIAkgKiByZWFsIHJpc2sgb2Ygb3ZlcnVubmluZyB0aGUga2VybmVsIHN0YWNrLiBJ bnN0ZWFkLCB3ZSBidWlsZAo+IEBAIC0xMDUwLDggKzEwNjgsOSBAQCBzdGF0aWMgdm9pZCBleGVj bGlzdHNfc2NoZWR1bGUoc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCwgaW50IHByaW8pCj4g IAkJcHQtPnByaW9yaXR5ID0gcHJpbzsKPiAgCQlpZiAoIWxpc3RfZW1wdHkoJnB0LT5saW5rKSkg ewo+ICAJCQlfX2xpc3RfZGVsX2VudHJ5KCZwdC0+bGluayk7Cj4gLQkJCWluc2VydF9yZXF1ZXN0 KGVuZ2luZSwgcHQsIHByaW8pOwo+ICsJCQlxdWV1ZV9yZXF1ZXN0KGVuZ2luZSwgcHQsIHByaW8p Owo+ICAJCX0KPiArCQlzdWJtaXRfcXVldWUoZW5naW5lLCBwcmlvKTsKPiAgCX0KPiAgCj4gIAlz cGluX3VubG9ja19pcnEoJmVuZ2luZS0+dGltZWxpbmUtPmxvY2spOwo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmggYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKPiBpbmRleCBhOWI4M2JmN2U4MzcuLmM0ZTkwMjJiMzRl MyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKPiBAQCAtMjU3 LDYgKzI1NywxMSBAQCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyB7Cj4gIAkgKi8KPiAg CXVuc2lnbmVkIGludCBwb3J0X21hc2s7Cj4gIAo+ICsJLyoqCj4gKwkgKiBAcXVldWVfcHJpb3Jp dHk6IEhpZ2hlc3QgcGVuZGluZyBwcmlvcml0eS4KPiArCSAqLwo+ICsJaW50IHF1ZXVlX3ByaW9y aXR5Owo+ICsKPiAgCS8qKgo+ICAJICogQHF1ZXVlOiBxdWV1ZSBvZiByZXF1ZXN0cywgaW4gcHJp b3JpdHkgbGlzdHMKPiAgCSAqLwo+IC0tIAo+IDIuMTYuMQpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdm eEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9pbnRlbC1nZngK