From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v3 1/2] drm/i915: Fix modeset handling during gpu reset, v3. Date: Mon, 9 May 2016 15:54:15 +0300 Message-ID: <20160509125415.GL4329@intel.com> References: <1462179422-32203-1-git-send-email-maarten.lankhorst@linux.intel.com> <20160506130612.GZ4329@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Maarten Lankhorst Cc: intel-gfx@lists.freedesktop.org, drm-intel-fixes@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCBNYXkgMDksIDIwMTYgYXQgMDE6MDQ6MjFQTSArMDIwMCwgTWFhcnRlbiBMYW5raG9y c3Qgd3JvdGU6Cj4gVGhpcyBmdW5jdGlvbiB3b3VsZCBjYWxsIGRybV9tb2Rlc2V0X2xvY2tfYWxs LCB3aGlsZSB0aGUgc3VzcGVuZC9yZXN1bWUKPiBmdW5jdGlvbnMgYWxyZWFkeSBoYXZlIHRoZWly IG93biBsb2NraW5nLiBGaXggdGhpcyBieSBmYWN0b3Jpbmcgb3V0Cj4gX19pbnRlbF9kaXNwbGF5 X3Jlc3VtZSwgYW5kIGNhbGxpbmcgdGhlIGF0b21pYyBoZWxwZXJzIGZvciBkdXBsaWNhdGluZwo+ IGF0b21pYyBzdGF0ZSBhbmQgZGlzYWJsaW5nIGFsbCBjcnRjJ3MgZHVyaW5nIHN1c3BlbmQuCj4g Cj4gQ2hhbmdlcyBzaW5jZSB2MToKPiAtIERlYWwgd2l0aCAtRURFQURMSyByaWdodCBhZnRlciBs b2NrX2FsbCBhbmQgY2xlYW4gdXAgY2FsbHMKPiAgIHRvIGh3IHJlYWRvdXQuCj4gLSBBbHdheXMg dGFrZSBhbGwgbW9kZXNldCBsb2NrcyBzbyB1cGRhdGVzIGR1cmluZyBncHUgcmVzZXQgYXJlIGJs b2NrZWQuCj4gQ2hhbmdlcyBzaW5jZSB2MjoKPiAtIEZpeCBkZWFkbG9jayBpbiBpbnRlbF91cGRh dGVfcHJpbWFyeV9wbGFuZXMuCj4gLSBNb3ZlIFdBUk5fT04oRURFQURMSykgdG8gX19pbnRlbF9k aXNwbGF5X3Jlc3VtZS4KPiAtIHBjdHggLT4gY3R4Cj4gLSBvbmx5IGNhbGwgX19pbnRlbF9kaXNw bGF5X3Jlc3VtZSBvbiBzdWNjZXNzIGluIGludGVsX2Rpc3BsYXlfcmVzdW1lLgo+IAo+IFNpZ25l ZC1vZmYtYnk6IE1hYXJ0ZW4gTGFua2hvcnN0IDxtYWFydGVuLmxhbmtob3JzdEBsaW51eC5pbnRl bC5jb20+Cj4gRml4ZXM6IGUyYzhiODcwMWUyZCAoImRybS9pOTE1OiBVc2UgYXRvbWljIGhlbHBl cnMgZm9yIHN1c3BlbmQsIHYyLiIpCj4gQ2M6IGRybS1pbnRlbC1maXhlc0BsaXN0cy5mcmVlZGVz a3RvcC5vcmcKPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIHwg MTUwICsrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tCj4gIDEgZmlsZSBjaGFuZ2Vk LCA5MyBpbnNlcnRpb25zKCspLCA1NyBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZGlzcGxheS5jCj4gaW5kZXggMTRlMDUwOTFjMzk3Li42ZmFhNTI5ZjM1ZGYgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gQEAgLTMxMzAsNDEgKzMxMzAsOTYg QEAgc3RhdGljIHZvaWQgaW50ZWxfdXBkYXRlX3ByaW1hcnlfcGxhbmVzKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpCj4gIAo+ICAJZm9yX2VhY2hfY3J0YyhkZXYsIGNydGMpIHsKPiAgCQlzdHJ1Y3Qg aW50ZWxfcGxhbmUgKnBsYW5lID0gdG9faW50ZWxfcGxhbmUoY3J0Yy0+cHJpbWFyeSk7Cj4gLQkJ c3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZTsKPiAtCj4gLQkJZHJtX21vZGVz ZXRfbG9ja19jcnRjKGNydGMsICZwbGFuZS0+YmFzZSk7Cj4gLQkJcGxhbmVfc3RhdGUgPSB0b19p bnRlbF9wbGFuZV9zdGF0ZShwbGFuZS0+YmFzZS5zdGF0ZSk7Cj4gKwkJc3RydWN0IGludGVsX3Bs YW5lX3N0YXRlICpwbGFuZV9zdGF0ZSA9Cj4gKwkJCXRvX2ludGVsX3BsYW5lX3N0YXRlKHBsYW5l LT5iYXNlLnN0YXRlKTsKPiAgCj4gIAkJaWYgKHBsYW5lX3N0YXRlLT52aXNpYmxlKQo+ICAJCQlw bGFuZS0+dXBkYXRlX3BsYW5lKCZwbGFuZS0+YmFzZSwKPiAgCQkJCQkgICAgdG9faW50ZWxfY3J0 Y19zdGF0ZShjcnRjLT5zdGF0ZSksCj4gIAkJCQkJICAgIHBsYW5lX3N0YXRlKTsKPiArCX0KPiAr fQo+ICsKPiArc3RhdGljIGludAo+ICtfX2ludGVsX2Rpc3BsYXlfcmVzdW1lKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCj4gKwkJICAgICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkK PiArewo+ICsJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwo+ICsJc3RydWN0IGRy bV9jcnRjICpjcnRjOwo+ICsJaW50IGksIHJldDsKPiArCj4gKwlpbnRlbF9tb2Rlc2V0X3NldHVw X2h3X3N0YXRlKGRldik7Cj4gKwlpOTE1X3JlZGlzYWJsZV92Z2EoZGV2KTsKPiAgCj4gLQkJZHJt X21vZGVzZXRfdW5sb2NrX2NydGMoY3J0Yyk7Cj4gKwlpZiAoIXN0YXRlKQo+ICsJCXJldHVybiAw OwoKVGhhbmsgeW91IGRpZmYgZm9yIG1ha2luZyB0aGluZ3MgaWxsZWdpYmxlLgoKSSdtIHN0aWxs IG5vdCBjb252aW5jZWQgd2Ugc2hvdWxkIGJlIGNoYW5naW5nIHRoZSBsb2NraW5nIHNjaGVtZQpo ZXJlLCBlc3BlY2lhbGx5IGluIHdoYXQncyBzdXBwb3NlZCB0byBiZSBqdXN0IGEgZml4LgoKSW4g Z2VuZXJhbCwgSSdtIG5vdCBzdXJlIHdlIHdhbnQgLT5kZXRlY3QoKSBhbmQgb3RoZXIgaXJyZWxl dmFudApzdHVmZiB0byBibG9jayB0aGUgR1BVIHJlc2V0LiBUaGUgbmljZSB0aGluZyBhYm91dCBn NHgrIHJlc2V0IHNvCmZhciBoYXMgYmVlbiB0aGF0IGl0J3MgYWxtb3N0IHVubm90aWNlYWJsZS4g T2YgY291cnNlIGlmIGl0J3MgYQpnZW51aW5lIEdQVSBoYW5nIHRoZSBzY3JlZW4gd2lsbCBwcm9i YWJseSBoYXZlIGJlZW4gZnJvemVuIGZvcgpxdWl0ZSBhIHdoaWxlIHdoZW4gd2UgaW5pdGlhdGUg dGhlIHJlc2V0LCBzbyBwZXJoYXBzIHRoYXQncyBub3QKYSBodWdlIHJlYWwgd29ybGQgaXNzdWUu CgpBbnl3YXlzLCBJIGtpbmRhIGp1c3Qgd2FudCB0aGlzIGZpeGVkIG5vdywgc28gSSdsbCBqdXN0 IHRvc3MgaW4gbXkKUmV2aWV3ZWQtYnk6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBs aW51eC5pbnRlbC5jb20+CgpCVFcgYXMgYSBmb2xsb3d1cCBJIHRoaW5rIHdlIHdvdWxkIGFjdHVh bGx5IHdhbnQgZ2VuMiB0byB0YWtlIHRoZQpnNHgrIHBhdGguIFRoZXJlIHdvbid0IGhhdmUgYmVl biBhIHJlc2V0LCBidXQgdGhlIGZsaXBzIGluIHRoZQpyaW5nIHdpbGwgc3RpbGwgbmV2ZXIgY29t cGxldGUgc28gb3VyIGlkZWEgb2YgZnJvbnRidWZmZXIgbWF5IGJlCm91dCBvZiBzeW5jIHdpdGgg dGhlIGhhcmR3YXJlLCBhbmQgc28gd2Ugc2hvdWxkIGZpeCBpdCB1cC4KCj4gKwo+ICsJZm9yX2Vh Y2hfY3J0Y19pbl9zdGF0ZShzdGF0ZSwgY3J0YywgY3J0Y19zdGF0ZSwgaSkgewo+ICsJCS8qCj4g KwkJICogRm9yY2UgcmVjYWxjdWxhdGlvbiBldmVuIGlmIHdlIHJlc3RvcmUKPiArCQkgKiBjdXJy ZW50IHN0YXRlLiBXaXRoIGZhc3QgbW9kZXNldCB0aGlzIG1heSBub3QgcmVzdWx0Cj4gKwkJICog aW4gYSBtb2Rlc2V0IHdoZW4gdGhlIHN0YXRlIGlzIGNvbXBhdGlibGUuCj4gKwkJICovCj4gKwkJ Y3J0Y19zdGF0ZS0+bW9kZV9jaGFuZ2VkID0gdHJ1ZTsKPiAgCX0KPiArCj4gKwlyZXQgPSBkcm1f YXRvbWljX2NvbW1pdChzdGF0ZSk7Cj4gKwo+ICsJV0FSTl9PTihyZXQgPT0gLUVERUFETEspOwo+ ICsJcmV0dXJuIHJldDsKPiAgfQo+ICAKPiAgdm9pZCBpbnRlbF9wcmVwYXJlX3Jlc2V0KHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpCj4gIHsKPiArCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0 ZTsKPiArCXN0cnVjdCBkcm1fbW9kZXNldF9hY3F1aXJlX2N0eCAqY3R4Owo+ICsJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwo+ICsJaW50IHJldDsKPiAr Cj4gIAkvKiBubyByZXNldCBzdXBwb3J0IGZvciBnZW4yICovCj4gLQlpZiAoSVNfR0VOMihkZXYp KQo+ICsJaWYgKElTX0dFTjIoZGV2X3ByaXYpKQo+ICAJCXJldHVybjsKPiAgCj4gLQkvKiByZXNl dCBkb2Vzbid0IHRvdWNoIHRoZSBkaXNwbGF5ICovCj4gLQlpZiAoSU5URUxfSU5GTyhkZXYpLT5n ZW4gPj0gNSB8fCBJU19HNFgoZGV2KSkKPiArCWRybV9tb2Rlc2V0X2xvY2tfYWxsKGRldik7CgoK PiArCj4gKwkvKiByZXNldCBkb2Vzbid0IHRvdWNoIHRoZSBkaXNwbGF5LCBidXQgZmxpcHMgbWln aHQgZ2V0IG51a2VkIGFueXdheSwgKi8KPiArCWlmIChJTlRFTF9JTkZPKGRldl9wcml2KS0+Z2Vu ID49IDUgfHwgSVNfRzRYKGRldl9wcml2KSkKPiAgCQlyZXR1cm47Cj4gIAo+IC0JZHJtX21vZGVz ZXRfbG9ja19hbGwoZGV2KTsKPiArCWN0eCA9IGRldi0+bW9kZV9jb25maWcuYWNxdWlyZV9jdHg7 Cj4gKwo+ICAJLyoKPiAgCSAqIERpc2FibGluZyB0aGUgY3J0Y3MgZ3JhY2VmdWxseSBzZWVtcyBu aWNlci4gQWxzbyB0aGUKPiAgCSAqIGczMyBkb2NzIHNheSB3ZSBzaG91bGQgYXQgbGVhc3QgZGlz YWJsZSBhbGwgdGhlIHBsYW5lcy4KPiAgCSAqLwo+IC0JaW50ZWxfZGlzcGxheV9zdXNwZW5kKGRl dik7Cj4gKwo+ICsJc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9kdXBsaWNhdGVfc3RhdGUoZGV2 LCBjdHgpOwo+ICsJaWYgKElTX0VSUihzdGF0ZSkpIHsKPiArCQlyZXQgPSBQVFJfRVJSKHN0YXRl KTsKPiArCQlzdGF0ZSA9IE5VTEw7Cj4gKwkJRFJNX0VSUk9SKCJEdXBsaWNhdGluZyBzdGF0ZSBm YWlsZWQgd2l0aCAlaVxuIiwgcmV0KTsKPiArCQlnb3RvIGVycjsKPiArCX0KPiArCj4gKwlyZXQg PSBkcm1fYXRvbWljX2hlbHBlcl9kaXNhYmxlX2FsbChkZXYsIGN0eCk7Cj4gKwlpZiAocmV0KSB7 Cj4gKwkJRFJNX0VSUk9SKCJTdXNwZW5kaW5nIGNydGMncyBmYWlsZWQgd2l0aCAlaVxuIiwgcmV0 KTsKPiArCQlnb3RvIGVycjsKPiArCX0KPiArCj4gKwlkZXZfcHJpdi0+bW9kZXNldF9yZXN0b3Jl X3N0YXRlID0gc3RhdGU7Cj4gKwlzdGF0ZS0+YWNxdWlyZV9jdHggPSBjdHg7Cj4gKwlyZXR1cm47 Cj4gKwo+ICtlcnI6Cj4gKwlkcm1fYXRvbWljX3N0YXRlX2ZyZWUoc3RhdGUpOwo+ICB9Cj4gIAo+ ICB2b2lkIGludGVsX2ZpbmlzaF9yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICB7Cj4g IAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gKwlz dHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUgPSBkZXZfcHJpdi0+bW9kZXNldF9yZXN0b3Jl X3N0YXRlOwo+ICsJaW50IHJldDsKPiAgCj4gIAkvKgo+ICAJICogRmxpcHMgaW4gdGhlIHJpbmdz IHdpbGwgYmUgbnVrZWQgYnkgdGhlIHJlc2V0LAo+IEBAIC0zMTc3LDYgKzMyMzIsOCBAQCB2b2lk IGludGVsX2ZpbmlzaF9yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAJaWYgKElTX0dF TjIoZGV2KSkKPiAgCQlyZXR1cm47Cj4gIAo+ICsJZGV2X3ByaXYtPm1vZGVzZXRfcmVzdG9yZV9z dGF0ZSA9IE5VTEw7Cj4gKwo+ICAJLyogcmVzZXQgZG9lc24ndCB0b3VjaCB0aGUgZGlzcGxheSAq Lwo+ICAJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDUgfHwgSVNfRzRYKGRldikpIHsKPiAg CQkvKgo+IEBAIC0zMTg5LDI2ICszMjQ2LDI3IEBAIHZvaWQgaW50ZWxfZmluaXNoX3Jlc2V0KHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gIAkJICogQ1MtYmFzZWQgZmxpcHMgKHdoaWNoIG1pZ2h0 IGdldCBsb3N0IGluIGdwdSByZXNldHMpIGFueSBtb3JlLgo+ICAJCSAqLwo+ICAJCWludGVsX3Vw ZGF0ZV9wcmltYXJ5X3BsYW5lcyhkZXYpOwo+IC0JCXJldHVybjsKPiAtCX0KPiAtCj4gLQkvKgo+ IC0JICogVGhlIGRpc3BsYXkgaGFzIGJlZW4gcmVzZXQgYXMgd2VsbCwKPiAtCSAqIHNvIG5lZWQg YSBmdWxsIHJlLWluaXRpYWxpemF0aW9uLgo+IC0JICovCj4gLQlpbnRlbF9ydW50aW1lX3BtX2Rp c2FibGVfaW50ZXJydXB0cyhkZXZfcHJpdik7Cj4gLQlpbnRlbF9ydW50aW1lX3BtX2VuYWJsZV9p bnRlcnJ1cHRzKGRldl9wcml2KTsKPiArCX0gZWxzZSB7Cj4gKwkJLyoKPiArCQkgKiBUaGUgZGlz cGxheSBoYXMgYmVlbiByZXNldCBhcyB3ZWxsLAo+ICsJCSAqIHNvIG5lZWQgYSBmdWxsIHJlLWlu aXRpYWxpemF0aW9uLgo+ICsJCSAqLwo+ICsJCWludGVsX3J1bnRpbWVfcG1fZGlzYWJsZV9pbnRl cnJ1cHRzKGRldl9wcml2KTsKPiArCQlpbnRlbF9ydW50aW1lX3BtX2VuYWJsZV9pbnRlcnJ1cHRz KGRldl9wcml2KTsKPiAgCj4gLQlpbnRlbF9tb2Rlc2V0X2luaXRfaHcoZGV2KTsKPiArCQlpbnRl bF9tb2Rlc2V0X2luaXRfaHcoZGV2KTsKPiAgCj4gLQlzcGluX2xvY2tfaXJxKCZkZXZfcHJpdi0+ aXJxX2xvY2spOwo+IC0JaWYgKGRldl9wcml2LT5kaXNwbGF5LmhwZF9pcnFfc2V0dXApCj4gLQkJ ZGV2X3ByaXYtPmRpc3BsYXkuaHBkX2lycV9zZXR1cChkZXYpOwo+IC0Jc3Bpbl91bmxvY2tfaXJx KCZkZXZfcHJpdi0+aXJxX2xvY2spOwo+ICsJCXNwaW5fbG9ja19pcnEoJmRldl9wcml2LT5pcnFf bG9jayk7Cj4gKwkJaWYgKGRldl9wcml2LT5kaXNwbGF5LmhwZF9pcnFfc2V0dXApCj4gKwkJCWRl dl9wcml2LT5kaXNwbGF5LmhwZF9pcnFfc2V0dXAoZGV2KTsKPiArCQlzcGluX3VubG9ja19pcnEo JmRldl9wcml2LT5pcnFfbG9jayk7Cj4gIAo+IC0JaW50ZWxfZGlzcGxheV9yZXN1bWUoZGV2KTsK PiArCQlyZXQgPSBfX2ludGVsX2Rpc3BsYXlfcmVzdW1lKGRldiwgc3RhdGUpOwo+ICsJCWlmIChy ZXQpCj4gKwkJCURSTV9FUlJPUigiUmVzdG9yaW5nIG9sZCBzdGF0ZSBmYWlsZWQgd2l0aCAlaVxu IiwgcmV0KTsKPiAgCj4gLQlpbnRlbF9ocGRfaW5pdChkZXZfcHJpdik7Cj4gKwkJaW50ZWxfaHBk X2luaXQoZGV2X3ByaXYpOwo+ICsJfQo+ICAKPiAgCWRybV9tb2Rlc2V0X3VubG9ja19hbGwoZGV2 KTsKPiAgfQo+IEBAIC0xNTk1NSw5ICsxNjAxMywxMCBAQCB2b2lkIGludGVsX2Rpc3BsYXlfcmVz dW1lKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gIAlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAq c3RhdGUgPSBkZXZfcHJpdi0+bW9kZXNldF9yZXN0b3JlX3N0YXRlOwo+ICAJc3RydWN0IGRybV9t b2Rlc2V0X2FjcXVpcmVfY3R4IGN0eDsKPiAgCWludCByZXQ7Cj4gLQlib29sIHNldHVwID0gZmFs c2U7Cj4gIAo+ICAJZGV2X3ByaXYtPm1vZGVzZXRfcmVzdG9yZV9zdGF0ZSA9IE5VTEw7Cj4gKwlp ZiAoc3RhdGUpCj4gKwkJc3RhdGUtPmFjcXVpcmVfY3R4ID0gJmN0eDsKPiAgCj4gIAkvKgo+ICAJ ICogVGhpcyBpcyBhIGNsdWRnZSBiZWNhdXNlIHdpdGggcmVhbCBhdG9taWMgbW9kZXNldCBtb2Rl X2NvbmZpZy5tdXRleAo+IEBAIC0xNTk2OCw0MCArMTYwMjcsMTcgQEAgdm9pZCBpbnRlbF9kaXNw bGF5X3Jlc3VtZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAJbXV0ZXhfbG9jaygmZGV2LT5t b2RlX2NvbmZpZy5tdXRleCk7Cj4gIAlkcm1fbW9kZXNldF9hY3F1aXJlX2luaXQoJmN0eCwgMCk7 Cj4gIAo+IC1yZXRyeToKPiAtCXJldCA9IGRybV9tb2Rlc2V0X2xvY2tfYWxsX2N0eChkZXYsICZj dHgpOwo+IC0KPiAtCWlmIChyZXQgPT0gMCAmJiAhc2V0dXApIHsKPiAtCQlzZXR1cCA9IHRydWU7 Cj4gLQo+IC0JCWludGVsX21vZGVzZXRfc2V0dXBfaHdfc3RhdGUoZGV2KTsKPiAtCQlpOTE1X3Jl ZGlzYWJsZV92Z2EoZGV2KTsKPiAtCX0KPiAtCj4gLQlpZiAocmV0ID09IDAgJiYgc3RhdGUpIHsK PiAtCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Cj4gLQkJc3RydWN0IGRybV9j cnRjICpjcnRjOwo+IC0JCWludCBpOwo+IC0KPiAtCQlzdGF0ZS0+YWNxdWlyZV9jdHggPSAmY3R4 Owo+IC0KPiAtCQlmb3JfZWFjaF9jcnRjX2luX3N0YXRlKHN0YXRlLCBjcnRjLCBjcnRjX3N0YXRl LCBpKSB7Cj4gLQkJCS8qCj4gLQkJCSAqIEZvcmNlIHJlY2FsY3VsYXRpb24gZXZlbiBpZiB3ZSBy ZXN0b3JlCj4gLQkJCSAqIGN1cnJlbnQgc3RhdGUuIFdpdGggZmFzdCBtb2Rlc2V0IHRoaXMgbWF5 IG5vdCByZXN1bHQKPiAtCQkJICogaW4gYSBtb2Rlc2V0IHdoZW4gdGhlIHN0YXRlIGlzIGNvbXBh dGlibGUuCj4gLQkJCSAqLwo+IC0JCQljcnRjX3N0YXRlLT5tb2RlX2NoYW5nZWQgPSB0cnVlOwo+ IC0JCX0KPiAtCj4gLQkJcmV0ID0gZHJtX2F0b21pY19jb21taXQoc3RhdGUpOwo+IC0JfQo+ICsJ d2hpbGUgKDEpIHsKPiArCQlyZXQgPSBkcm1fbW9kZXNldF9sb2NrX2FsbF9jdHgoZGV2LCAmY3R4 KTsKPiArCQlpZiAocmV0ICE9IC1FREVBRExLKQo+ICsJCQlicmVhazsKPiAgCj4gLQlpZiAocmV0 ID09IC1FREVBRExLKSB7Cj4gIAkJZHJtX21vZGVzZXRfYmFja29mZigmY3R4KTsKPiAtCQlnb3Rv IHJldHJ5Owo+ICAJfQo+ICAKPiArCWlmICghcmV0KQo+ICsJCXJldCA9IF9faW50ZWxfZGlzcGxh eV9yZXN1bWUoZGV2LCBzdGF0ZSk7Cj4gKwo+ICAJZHJtX21vZGVzZXRfZHJvcF9sb2NrcygmY3R4 KTsKPiAgCWRybV9tb2Rlc2V0X2FjcXVpcmVfZmluaSgmY3R4KTsKPiAgCW11dGV4X3VubG9jaygm ZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7Cj4gLS0gCj4gMi41LjUKPiAKCi0tIApWaWxsZSBTeXJq w6Rsw6QKSW50ZWwgT1RDCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVs LWdmeAo=