From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeff McGee Subject: Re: [PATCH 5/5] drm/i915/execlists: Flush pending preemption events during reset Date: Thu, 22 Mar 2018 08:14:01 -0700 Message-ID: <20180322151401.GH19343@jeffdesk> References: <20180320001848.4405-1-chris@chris-wilson.co.uk> <20180320001848.4405-5-chris@chris-wilson.co.uk> <20180321001734.GA19343@jeffdesk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id E91116EC86 for ; Thu, 22 Mar 2018 15:28:57 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20180321001734.GA19343@jeffdesk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCBNYXIgMjAsIDIwMTggYXQgMDU6MTc6MzRQTSAtMDcwMCwgSmVmZiBNY0dlZSB3cm90 ZToKPiBPbiBUdWUsIE1hciAyMCwgMjAxOCBhdCAxMjoxODo0OEFNICswMDAwLCBDaHJpcyBXaWxz b24gd3JvdGU6Cj4gPiBDYXRjaCB1cCB3aXRoIHRoZSBpbmZsaWdodCBDU0IgZXZlbnRzLCBhZnRl ciBkaXNhYmxpbmcgdGhlIHRhc2tsZXQKPiA+IGJlZm9yZSBkZWNpZGluZyB3aGljaCByZXF1ZXN0 IHdhcyB0cnVseSBndWlsdHkgb2YgaGFuZ2luZyB0aGUgR1BVLgo+ID4gCj4gPiBTaWduZWQtb2Zm LWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPiA+IENjOiBNaWNo YcWCIFdpbmlhcnNraSA8bWljaGFsLndpbmlhcnNraUBpbnRlbC5jb20+Cj4gPiBDQzogTWljaGVs IFRoaWVycnkgPG1pY2hlbC50aGllcnJ5QGludGVsLmNvbT4KPiA+IENjOiBKZWZmIE1jR2VlIDxq ZWZmLm1jZ2VlQGludGVsLmNvbT4KPiA+IC0tLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2xyYy5jIHwgMzU1ICsrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLQo+ ID4gIDEgZmlsZSBjaGFuZ2VkLCAxOTcgaW5zZXJ0aW9ucygrKSwgMTU4IGRlbGV0aW9ucygtKQo+ ID4gCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYwo+ID4gaW5kZXggZTVhM2ZmYmMyNzNhLi5i ZWI4MWYxM2EzY2MgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9s cmMuYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKPiA+IEBAIC04 MjgsMTg2ICs4MjgsMTkyIEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19jYW5jZWxfcmVxdWVzdHMo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ID4gIAlsb2NhbF9pcnFfcmVzdG9yZShm bGFncyk7Cj4gPiAgfQo+ID4gIAo+ID4gLS8qCj4gPiAtICogQ2hlY2sgdGhlIHVucmVhZCBDb250 ZXh0IFN0YXR1cyBCdWZmZXJzIGFuZCBtYW5hZ2UgdGhlIHN1Ym1pc3Npb24gb2YgbmV3Cj4gPiAt ICogY29udGV4dHMgdG8gdGhlIEVMU1AgYWNjb3JkaW5nbHkuCj4gPiAtICovCj4gPiAtc3RhdGlj IHZvaWQgZXhlY2xpc3RzX3N1Ym1pc3Npb25fdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCj4g PiArc3RhdGljIHZvaWQgcHJvY2Vzc19jc2Ioc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KQo+ID4gIHsKPiA+IC0Jc3RydWN0IGludGVsX2VuZ2luZV9jcyAqIGNvbnN0IGVuZ2luZSA9IChz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICopZGF0YTsKPiA+ICAJc3RydWN0IGludGVsX2VuZ2luZV9l eGVjbGlzdHMgKiBjb25zdCBleGVjbGlzdHMgPSAmZW5naW5lLT5leGVjbGlzdHM7Cj4gPiAgCXN0 cnVjdCBleGVjbGlzdF9wb3J0ICogY29uc3QgcG9ydCA9IGV4ZWNsaXN0cy0+cG9ydDsKPiA+IC0J c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZW5naW5lLT5pOTE1Owo+ID4gKwlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGVuZ2luZS0+aTkxNTsKPiA+ICsJdW5zaWdu ZWQgaW50IGhlYWQsIHRhaWw7Cj4gPiArCWNvbnN0IHUzMiAqYnVmOwo+ID4gIAlib29sIGZ3ID0g ZmFsc2U7Cj4gPiAgCj4gPiAtCS8qIFdlIGNhbiBza2lwIGFjcXVpcmluZyBpbnRlbF9ydW50aW1l X3BtX2dldCgpIGhlcmUgYXMgaXQgd2FzIHRha2VuCj4gPiAtCSAqIG9uIG91ciBiZWhhbGYgYnkg dGhlIHJlcXVlc3QgKHNlZSBpOTE1X2dlbV9tYXJrX2J1c3koKSkgYW5kIGl0IHdpbGwKPiA+IC0J ICogbm90IGJlIHJlbGlucXVpc2hlZCB1bnRpbCB0aGUgZGV2aWNlIGlzIGlkbGUgKHNlZQo+ID4g LQkgKiBpOTE1X2dlbV9pZGxlX3dvcmtfaGFuZGxlcigpKS4gQXMgYSBwcmVjYXV0aW9uLCB3ZSBt YWtlIHN1cmUKPiA+IC0JICogdGhhdCBhbGwgRUxTUCBhcmUgZHJhaW5lZCBpLmUuIHdlIGhhdmUg cHJvY2Vzc2VkIHRoZSBDU0IsCj4gPiAtCSAqIGJlZm9yZSBhbGxvd2luZyBvdXJzZWx2ZXMgdG8g aWRsZSBhbmQgY2FsbGluZyBpbnRlbF9ydW50aW1lX3BtX3B1dCgpLgo+ID4gLQkgKi8KPiA+IC0J R0VNX0JVR19PTighZGV2X3ByaXYtPmd0LmF3YWtlKTsKPiA+ICsJaWYgKHVubGlrZWx5KGV4ZWNs aXN0cy0+Y3NiX3VzZV9tbWlvKSkgewo+ID4gKwkJYnVmID0gKHUzMiAqIF9fZm9yY2UpCj4gPiAr CQkJKGk5MTUtPnJlZ3MgKyBpOTE1X21taW9fcmVnX29mZnNldChSSU5HX0NPTlRFWFRfU1RBVFVT X0JVRl9MTyhlbmdpbmUsIDApKSk7Cj4gPiArCQlleGVjbGlzdHMtPmNzYl9oZWFkID0gLTE7IC8q IGZvcmNlIG1taW8gcmVhZCBvZiBDU0IgcHRycyAqLwo+ID4gKwl9IGVsc2Ugewo+ID4gKwkJLyog VGhlIEhXU1AgY29udGFpbnMgYSAoY2FjaGVhYmxlKSBtaXJyb3Igb2YgdGhlIENTQiAqLwo+ID4g KwkJYnVmID0gJmVuZ2luZS0+c3RhdHVzX3BhZ2UucGFnZV9hZGRyW0k5MTVfSFdTX0NTQl9CVUYw X0lOREVYXTsKPiA+ICsJfQo+ID4gIAo+ID4gLQkvKiBQcmVmZXIgZG9pbmcgdGVzdF9hbmRfY2xl YXJfYml0KCkgYXMgYSB0d28gc3RhZ2Ugb3BlcmF0aW9uIHRvIGF2b2lkCj4gPiAtCSAqIGltcG9z aW5nIHRoZSBjb3N0IG9mIGEgbG9ja2VkIGF0b21pYyB0cmFuc2FjdGlvbiB3aGVuIHN1Ym1pdHRp bmcgYQo+ID4gLQkgKiBuZXcgcmVxdWVzdCAob3V0c2lkZSBvZiB0aGUgY29udGV4dC1zd2l0Y2gg aW50ZXJydXB0KS4KPiA+ICsJLyoKPiA+ICsJICogVGhlIHdyaXRlIHdpbGwgYmUgb3JkZXJlZCBi eSB0aGUgdW5jYWNoZWQgcmVhZCAoaXRzZWxmCj4gPiArCSAqIGEgbWVtb3J5IGJhcnJpZXIpLCBz byB3ZSBkbyBub3QgbmVlZCBhbm90aGVyIGluIHRoZSBmb3JtCj4gPiArCSAqIG9mIGEgbG9ja2Vk IGluc3RydWN0aW9uLiBUaGUgcmFjZSBiZXR3ZWVuIHRoZSBpbnRlcnJ1cHQKPiA+ICsJICogaGFu ZGxlciBhbmQgdGhlIHNwbGl0IHRlc3QvY2xlYXIgaXMgaGFybWxlc3MgYXMgd2Ugb3JkZXIKPiA+ ICsJICogb3VyIGNsZWFyIGJlZm9yZSB0aGUgQ1NCIHJlYWQuIElmIHRoZSBpbnRlcnJ1cHQgYXJy aXZlZAo+ID4gKwkgKiBmaXJzdCBiZXR3ZWVuIHRoZSB0ZXN0IGFuZCB0aGUgY2xlYXIsIHdlIHJl YWQgdGhlIHVwZGF0ZWQKPiA+ICsJICogQ1NCIGFuZCBjbGVhciB0aGUgYml0LiBJZiB0aGUgaW50 ZXJydXB0IGFycml2ZXMgYXMgd2UgcmVhZAo+ID4gKwkgKiB0aGUgQ1NCIG9yIGxhdGVyIChpLmUu IGFmdGVyIHdlIGhhZCBjbGVhcmVkIHRoZSBiaXQpIHRoZSBiaXQKPiA+ICsJICogaXMgc2V0IGFu ZCB3ZSBkbyBhIG5ldyBsb29wLgo+ID4gIAkgKi8KPiA+IC0Jd2hpbGUgKHRlc3RfYml0KEVOR0lO RV9JUlFfRVhFQ0xJU1QsICZlbmdpbmUtPmlycV9wb3N0ZWQpKSB7Cj4gPiAtCQkvKiBUaGUgSFdT UCBjb250YWlucyBhIChjYWNoZWFibGUpIG1pcnJvciBvZiB0aGUgQ1NCICovCj4gPiAtCQljb25z dCB1MzIgKmJ1ZiA9Cj4gPiAtCQkJJmVuZ2luZS0+c3RhdHVzX3BhZ2UucGFnZV9hZGRyW0k5MTVf SFdTX0NTQl9CVUYwX0lOREVYXTsKPiA+IC0JCXVuc2lnbmVkIGludCBoZWFkLCB0YWlsOwo+ID4g LQo+ID4gLQkJaWYgKHVubGlrZWx5KGV4ZWNsaXN0cy0+Y3NiX3VzZV9tbWlvKSkgewo+ID4gLQkJ CWJ1ZiA9ICh1MzIgKiBfX2ZvcmNlKQo+ID4gLQkJCQkoZGV2X3ByaXYtPnJlZ3MgKyBpOTE1X21t aW9fcmVnX29mZnNldChSSU5HX0NPTlRFWFRfU1RBVFVTX0JVRl9MTyhlbmdpbmUsIDApKSk7Cj4g PiAtCQkJZXhlY2xpc3RzLT5jc2JfaGVhZCA9IC0xOyAvKiBmb3JjZSBtbWlvIHJlYWQgb2YgQ1NC IHB0cnMgKi8KPiA+IC0JCX0KPiA+ICsJX19jbGVhcl9iaXQoRU5HSU5FX0lSUV9FWEVDTElTVCwg JmVuZ2luZS0+aXJxX3Bvc3RlZCk7Cj4gPiArCWlmICh1bmxpa2VseShleGVjbGlzdHMtPmNzYl9o ZWFkID09IC0xKSkgeyAvKiBmb2xsb3dpbmcgYSByZXNldCAqLwo+ID4gKwkJaW50ZWxfdW5jb3Jl X2ZvcmNld2FrZV9nZXQoaTkxNSwgZXhlY2xpc3RzLT5md19kb21haW5zKTsKPiA+ICsJCWZ3ID0g dHJ1ZTsKPiA+ICsKPiA+ICsJCWhlYWQgPSByZWFkbChpOTE1LT5yZWdzICsgaTkxNV9tbWlvX3Jl Z19vZmZzZXQoUklOR19DT05URVhUX1NUQVRVU19QVFIoZW5naW5lKSkpOwo+ID4gKwkJdGFpbCA9 IEdFTjhfQ1NCX1dSSVRFX1BUUihoZWFkKTsKPiA+ICsJCWhlYWQgPSBHRU44X0NTQl9SRUFEX1BU UihoZWFkKTsKPiA+ICsJCWV4ZWNsaXN0cy0+Y3NiX2hlYWQgPSBoZWFkOwo+ID4gKwl9IGVsc2Ug ewo+ID4gKwkJY29uc3QgaW50IHdyaXRlX2lkeCA9Cj4gPiArCQkJaW50ZWxfaHdzX2NzYl93cml0 ZV9pbmRleChpOTE1KSAtCj4gPiArCQkJSTkxNV9IV1NfQ1NCX0JVRjBfSU5ERVg7Cj4gPiArCj4g PiArCQloZWFkID0gZXhlY2xpc3RzLT5jc2JfaGVhZDsKPiA+ICsJCXRhaWwgPSBSRUFEX09OQ0Uo YnVmW3dyaXRlX2lkeF0pOwo+ID4gKwl9Cj4gPiArCUdFTV9UUkFDRSgiJXMgY3MtaXJxIGhlYWQ9 JWQgWyVkJXNdLCB0YWlsPSVkIFslZCVzXVxuIiwKPiA+ICsJCSAgZW5naW5lLT5uYW1lLAo+ID4g KwkJICBoZWFkLCBHRU44X0NTQl9SRUFEX1BUUihyZWFkbChpOTE1LT5yZWdzICsgaTkxNV9tbWlv X3JlZ19vZmZzZXQoUklOR19DT05URVhUX1NUQVRVU19QVFIoZW5naW5lKSkpKSwgZncgPyAiIiA6 ICI/IiwKPiA+ICsJCSAgdGFpbCwgR0VOOF9DU0JfV1JJVEVfUFRSKHJlYWRsKGk5MTUtPnJlZ3Mg KyBpOTE1X21taW9fcmVnX29mZnNldChSSU5HX0NPTlRFWFRfU1RBVFVTX1BUUihlbmdpbmUpKSkp LCBmdyA/ICIiIDogIj8iKTsKPiA+ICsKPiA+ICsJd2hpbGUgKGhlYWQgIT0gdGFpbCkgewo+ID4g KwkJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7Cj4gPiArCQl1bnNpZ25lZCBpbnQgc3RhdHVzOwo+ ID4gKwkJdW5zaWduZWQgaW50IGNvdW50Owo+ID4gKwo+ID4gKwkJaWYgKCsraGVhZCA9PSBHRU44 X0NTQl9FTlRSSUVTKQo+ID4gKwkJCWhlYWQgPSAwOwo+ID4gIAo+ID4gLQkJLyogVGhlIHdyaXRl IHdpbGwgYmUgb3JkZXJlZCBieSB0aGUgdW5jYWNoZWQgcmVhZCAoaXRzZWxmCj4gPiAtCQkgKiBh IG1lbW9yeSBiYXJyaWVyKSwgc28gd2UgZG8gbm90IG5lZWQgYW5vdGhlciBpbiB0aGUgZm9ybQo+ ID4gLQkJICogb2YgYSBsb2NrZWQgaW5zdHJ1Y3Rpb24uIFRoZSByYWNlIGJldHdlZW4gdGhlIGlu dGVycnVwdAo+ID4gLQkJICogaGFuZGxlciBhbmQgdGhlIHNwbGl0IHRlc3QvY2xlYXIgaXMgaGFy bWxlc3MgYXMgd2Ugb3JkZXIKPiA+IC0JCSAqIG91ciBjbGVhciBiZWZvcmUgdGhlIENTQiByZWFk LiBJZiB0aGUgaW50ZXJydXB0IGFycml2ZWQKPiA+IC0JCSAqIGZpcnN0IGJldHdlZW4gdGhlIHRl c3QgYW5kIHRoZSBjbGVhciwgd2UgcmVhZCB0aGUgdXBkYXRlZAo+ID4gLQkJICogQ1NCIGFuZCBj bGVhciB0aGUgYml0LiBJZiB0aGUgaW50ZXJydXB0IGFycml2ZXMgYXMgd2UgcmVhZAo+ID4gLQkJ ICogdGhlIENTQiBvciBsYXRlciAoaS5lLiBhZnRlciB3ZSBoYWQgY2xlYXJlZCB0aGUgYml0KSB0 aGUgYml0Cj4gPiAtCQkgKiBpcyBzZXQgYW5kIHdlIGRvIGEgbmV3IGxvb3AuCj4gPiArCQkvKgo+ ID4gKwkJICogV2UgYXJlIGZseWluZyBuZWFyIGRyYWdvbnMgYWdhaW4uCj4gPiArCQkgKgo+ID4g KwkJICogV2UgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgcmVxdWVzdCBpbiBleGVjbGlzdF9wb3J0 W10KPiA+ICsJCSAqIGJ1dCBubyBtb3JlIHRoYW4gdGhhdC4gV2UgYXJlIG9wZXJhdGluZyBpbiBz b2Z0aXJxCj4gPiArCQkgKiBjb250ZXh0IGFuZCBzbyBjYW5ub3QgaG9sZCBhbnkgbXV0ZXggb3Ig c2xlZXAuIFRoYXQKPiA+ICsJCSAqIHByZXZlbnRzIHVzIHN0b3BwaW5nIHRoZSByZXF1ZXN0cyB3 ZSBhcmUgcHJvY2Vzc2luZwo+ID4gKwkJICogaW4gcG9ydFtdIGZyb20gYmVpbmcgcmV0aXJlZCBz aW11bHRhbmVvdXNseSAodGhlCj4gPiArCQkgKiBicmVhZGNydW1iIHdpbGwgYmUgY29tcGxldGUg YmVmb3JlIHdlIHNlZSB0aGUKPiA+ICsJCSAqIGNvbnRleHQtc3dpdGNoKS4gQXMgd2Ugb25seSBo b2xkIHRoZSByZWZlcmVuY2UgdG8gdGhlCj4gPiArCQkgKiByZXF1ZXN0LCBhbnkgcG9pbnRlciBj aGFzaW5nIHVuZGVybmVhdGggdGhlIHJlcXVlc3QKPiA+ICsJCSAqIGlzIHN1YmplY3QgdG8gYSBw b3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUuIFRodXMgd2UKPiA+ICsJCSAqIHN0b3JlIGFsbCBvZiB0 aGUgYm9va2tlZXBpbmcgd2l0aGluIHBvcnRbXSBhcwo+ID4gKwkJICogcmVxdWlyZWQsIGFuZCBh dm9pZCB1c2luZyB1bmd1YXJkZWQgcG9pbnRlcnMgYmVuZWF0aAo+ID4gKwkJICogcmVxdWVzdCBp dHNlbGYuIFRoZSBzYW1lIGFwcGxpZXMgdG8gdGhlIGF0b21pYwo+ID4gKwkJICogc3RhdHVzIG5v dGlmaWVyLgo+ID4gIAkJICovCj4gPiAtCQlfX2NsZWFyX2JpdChFTkdJTkVfSVJRX0VYRUNMSVNU LCAmZW5naW5lLT5pcnFfcG9zdGVkKTsKPiA+IC0JCWlmICh1bmxpa2VseShleGVjbGlzdHMtPmNz Yl9oZWFkID09IC0xKSkgeyAvKiBmb2xsb3dpbmcgYSByZXNldCAqLwo+ID4gLQkJCWlmICghZncp IHsKPiA+IC0JCQkJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXQoZGV2X3ByaXYsCj4gPiAtCQkJ CQkJCSAgIGV4ZWNsaXN0cy0+ZndfZG9tYWlucyk7Cj4gPiAtCQkJCWZ3ID0gdHJ1ZTsKPiA+IC0J CQl9Cj4gPiAgCj4gPiAtCQkJaGVhZCA9IHJlYWRsKGRldl9wcml2LT5yZWdzICsgaTkxNV9tbWlv X3JlZ19vZmZzZXQoUklOR19DT05URVhUX1NUQVRVU19QVFIoZW5naW5lKSkpOwo+ID4gLQkJCXRh aWwgPSBHRU44X0NTQl9XUklURV9QVFIoaGVhZCk7Cj4gPiAtCQkJaGVhZCA9IEdFTjhfQ1NCX1JF QURfUFRSKGhlYWQpOwo+ID4gLQkJCWV4ZWNsaXN0cy0+Y3NiX2hlYWQgPSBoZWFkOwo+ID4gLQkJ fSBlbHNlIHsKPiA+IC0JCQljb25zdCBpbnQgd3JpdGVfaWR4ID0KPiA+IC0JCQkJaW50ZWxfaHdz X2NzYl93cml0ZV9pbmRleChkZXZfcHJpdikgLQo+ID4gLQkJCQlJOTE1X0hXU19DU0JfQlVGMF9J TkRFWDsKPiA+ICsJCXN0YXR1cyA9IFJFQURfT05DRShidWZbMiAqIGhlYWRdKTsgLyogbWF5YmUg bW1pbyEgKi8KPiA+ICsJCUdFTV9UUkFDRSgiJXMgY3NiWyVkXTogc3RhdHVzPTB4JTA4eDoweCUw OHgsIGFjdGl2ZT0weCV4XG4iLAo+ID4gKwkJCSAgZW5naW5lLT5uYW1lLCBoZWFkLAo+ID4gKwkJ CSAgc3RhdHVzLCBidWZbMipoZWFkICsgMV0sCj4gPiArCQkJICBleGVjbGlzdHMtPmFjdGl2ZSk7 Cj4gPiArCj4gPiArCQlpZiAoc3RhdHVzICYgKEdFTjhfQ1RYX1NUQVRVU19JRExFX0FDVElWRSB8 Cj4gPiArCQkJICAgICAgR0VOOF9DVFhfU1RBVFVTX1BSRUVNUFRFRCkpCj4gPiArCQkJZXhlY2xp c3RzX3NldF9hY3RpdmUoZXhlY2xpc3RzLAo+ID4gKwkJCQkJICAgICBFWEVDTElTVFNfQUNUSVZF X0hXQUNLKTsKPiA+ICsJCWlmIChzdGF0dXMgJiBHRU44X0NUWF9TVEFUVVNfQUNUSVZFX0lETEUp Cj4gPiArCQkJZXhlY2xpc3RzX2NsZWFyX2FjdGl2ZShleGVjbGlzdHMsCj4gPiArCQkJCQkgICAg ICAgRVhFQ0xJU1RTX0FDVElWRV9IV0FDSyk7Cj4gPiArCj4gPiArCQlpZiAoIShzdGF0dXMgJiBH RU44X0NUWF9TVEFUVVNfQ09NUExFVEVEX01BU0spKQo+ID4gKwkJCWNvbnRpbnVlOwo+ID4gIAo+ ID4gLQkJCWhlYWQgPSBleGVjbGlzdHMtPmNzYl9oZWFkOwo+ID4gLQkJCXRhaWwgPSBSRUFEX09O Q0UoYnVmW3dyaXRlX2lkeF0pOwo+ID4gLQkJfQo+ID4gLQkJR0VNX1RSQUNFKCIlcyBjcy1pcnEg aGVhZD0lZCBbJWQlc10sIHRhaWw9JWQgWyVkJXNdXG4iLAo+ID4gLQkJCSAgZW5naW5lLT5uYW1l LAo+ID4gLQkJCSAgaGVhZCwgR0VOOF9DU0JfUkVBRF9QVFIocmVhZGwoZGV2X3ByaXYtPnJlZ3Mg KyBpOTE1X21taW9fcmVnX29mZnNldChSSU5HX0NPTlRFWFRfU1RBVFVTX1BUUihlbmdpbmUpKSkp LCBmdyA/ICIiIDogIj8iLAo+ID4gLQkJCSAgdGFpbCwgR0VOOF9DU0JfV1JJVEVfUFRSKHJlYWRs KGRldl9wcml2LT5yZWdzICsgaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19DT05URVhUX1NUQVRV U19QVFIoZW5naW5lKSkpKSwgZncgPyAiIiA6ICI/Iik7Cj4gPiArCQkvKiBXZSBzaG91bGQgbmV2 ZXIgZ2V0IGEgQ09NUExFVEVEIHwgSURMRV9BQ1RJVkUhICovCj4gPiArCQlHRU1fQlVHX09OKHN0 YXR1cyAmIEdFTjhfQ1RYX1NUQVRVU19JRExFX0FDVElWRSk7Cj4gPiAgCj4gPiAtCQl3aGlsZSAo aGVhZCAhPSB0YWlsKSB7Cj4gPiAtCQkJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7Cj4gPiAtCQkJ dW5zaWduZWQgaW50IHN0YXR1czsKPiA+IC0JCQl1bnNpZ25lZCBpbnQgY291bnQ7Cj4gPiArCQlp ZiAoc3RhdHVzICYgR0VOOF9DVFhfU1RBVFVTX0NPTVBMRVRFICYmCj4gPiArCQkgICAgYnVmWzIq aGVhZCArIDFdID09IGV4ZWNsaXN0cy0+cHJlZW1wdF9jb21wbGV0ZV9zdGF0dXMpIHsKPiA+ICsJ CQlHRU1fVFJBQ0UoIiVzIHByZWVtcHQtaWRsZVxuIiwgZW5naW5lLT5uYW1lKTsKPiA+ICsJCQlj b21wbGV0ZV9wcmVlbXB0X2NvbnRleHQoZXhlY2xpc3RzKTsKPiA+ICsJCQljb250aW51ZTsKPiA+ ICsJCX0KPiA+ICAKPiA+IC0JCQlpZiAoKytoZWFkID09IEdFTjhfQ1NCX0VOVFJJRVMpCj4gPiAt CQkJCWhlYWQgPSAwOwo+ID4gKwkJaWYgKHN0YXR1cyAmIEdFTjhfQ1RYX1NUQVRVU19QUkVFTVBU RUQgJiYKPiA+ICsJCSAgICBleGVjbGlzdHNfaXNfYWN0aXZlKGV4ZWNsaXN0cywKPiA+ICsJCQkJ CUVYRUNMSVNUU19BQ1RJVkVfUFJFRU1QVCkpCj4gPiArCQkJY29udGludWU7Cj4gPiAgCj4gPiAt CQkJLyogV2UgYXJlIGZseWluZyBuZWFyIGRyYWdvbnMgYWdhaW4uCj4gPiAtCQkJICoKPiA+IC0J CQkgKiBXZSBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSByZXF1ZXN0IGluIGV4ZWNsaXN0X3BvcnRb XQo+ID4gLQkJCSAqIGJ1dCBubyBtb3JlIHRoYW4gdGhhdC4gV2UgYXJlIG9wZXJhdGluZyBpbiBz b2Z0aXJxCj4gPiAtCQkJICogY29udGV4dCBhbmQgc28gY2Fubm90IGhvbGQgYW55IG11dGV4IG9y IHNsZWVwLiBUaGF0Cj4gPiAtCQkJICogcHJldmVudHMgdXMgc3RvcHBpbmcgdGhlIHJlcXVlc3Rz IHdlIGFyZSBwcm9jZXNzaW5nCj4gPiAtCQkJICogaW4gcG9ydFtdIGZyb20gYmVpbmcgcmV0aXJl ZCBzaW11bHRhbmVvdXNseSAodGhlCj4gPiAtCQkJICogYnJlYWRjcnVtYiB3aWxsIGJlIGNvbXBs ZXRlIGJlZm9yZSB3ZSBzZWUgdGhlCj4gPiAtCQkJICogY29udGV4dC1zd2l0Y2gpLiBBcyB3ZSBv bmx5IGhvbGQgdGhlIHJlZmVyZW5jZSB0byB0aGUKPiA+IC0JCQkgKiByZXF1ZXN0LCBhbnkgcG9p bnRlciBjaGFzaW5nIHVuZGVybmVhdGggdGhlIHJlcXVlc3QKPiA+IC0JCQkgKiBpcyBzdWJqZWN0 IHRvIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlLiBUaHVzIHdlCj4gPiAtCQkJICogc3RvcmUg YWxsIG9mIHRoZSBib29ra2VlcGluZyB3aXRoaW4gcG9ydFtdIGFzCj4gPiAtCQkJICogcmVxdWly ZWQsIGFuZCBhdm9pZCB1c2luZyB1bmd1YXJkZWQgcG9pbnRlcnMgYmVuZWF0aAo+ID4gLQkJCSAq IHJlcXVlc3QgaXRzZWxmLiBUaGUgc2FtZSBhcHBsaWVzIHRvIHRoZSBhdG9taWMKPiA+IC0JCQkg KiBzdGF0dXMgbm90aWZpZXIuCj4gPiAtCQkJICovCj4gPiArCQlHRU1fQlVHX09OKCFleGVjbGlz dHNfaXNfYWN0aXZlKGV4ZWNsaXN0cywKPiA+ICsJCQkJCQlFWEVDTElTVFNfQUNUSVZFX1VTRVIp KTsKPiA+ICAKPiA+IC0JCQlzdGF0dXMgPSBSRUFEX09OQ0UoYnVmWzIgKiBoZWFkXSk7IC8qIG1h eWJlIG1taW8hICovCj4gPiAtCQkJR0VNX1RSQUNFKCIlcyBjc2JbJWRdOiBzdGF0dXM9MHglMDh4 OjB4JTA4eCwgYWN0aXZlPTB4JXhcbiIsCj4gPiAtCQkJCSAgZW5naW5lLT5uYW1lLCBoZWFkLAo+ ID4gLQkJCQkgIHN0YXR1cywgYnVmWzIqaGVhZCArIDFdLAo+ID4gLQkJCQkgIGV4ZWNsaXN0cy0+ YWN0aXZlKTsKPiA+IC0KPiA+IC0JCQlpZiAoc3RhdHVzICYgKEdFTjhfQ1RYX1NUQVRVU19JRExF X0FDVElWRSB8Cj4gPiAtCQkJCSAgICAgIEdFTjhfQ1RYX1NUQVRVU19QUkVFTVBURUQpKQo+ID4g LQkJCQlleGVjbGlzdHNfc2V0X2FjdGl2ZShleGVjbGlzdHMsCj4gPiAtCQkJCQkJICAgICBFWEVD TElTVFNfQUNUSVZFX0hXQUNLKTsKPiA+IC0JCQlpZiAoc3RhdHVzICYgR0VOOF9DVFhfU1RBVFVT X0FDVElWRV9JRExFKQo+ID4gLQkJCQlleGVjbGlzdHNfY2xlYXJfYWN0aXZlKGV4ZWNsaXN0cywK PiA+IC0JCQkJCQkgICAgICAgRVhFQ0xJU1RTX0FDVElWRV9IV0FDSyk7Cj4gPiAtCj4gPiAtCQkJ aWYgKCEoc3RhdHVzICYgR0VOOF9DVFhfU1RBVFVTX0NPTVBMRVRFRF9NQVNLKSkKPiA+IC0JCQkJ Y29udGludWU7Cj4gPiArCQlycSA9IHBvcnRfdW5wYWNrKHBvcnQsICZjb3VudCk7Cj4gPiArCQlH RU1fVFJBQ0UoIiVzIG91dFswXTogY3R4PSVkLiVkLCBzZXFubz0leCwgcHJpbz0lZFxuIiwKPiA+ ICsJCQkgIGVuZ2luZS0+bmFtZSwKPiA+ICsJCQkgIHBvcnQtPmNvbnRleHRfaWQsIGNvdW50LAo+ ID4gKwkJCSAgcnEgPyBycS0+Z2xvYmFsX3NlcW5vIDogMCwKPiA+ICsJCQkgIHJxID8gcnFfcHJp byhycSkgOiAwKTsKPiA+ICsKPiA+ICsJCS8qIENoZWNrIHRoZSBjb250ZXh0L2Rlc2MgaWQgZm9y IHRoaXMgZXZlbnQgbWF0Y2hlcyAqLwo+ID4gKwkJR0VNX0RFQlVHX0JVR19PTihidWZbMiAqIGhl YWQgKyAxXSAhPSBwb3J0LT5jb250ZXh0X2lkKTsKPiA+ICsKPiA+ICsJCUdFTV9CVUdfT04oY291 bnQgPT0gMCk7Cj4gPiArCQlpZiAoLS1jb3VudCA9PSAwKSB7Cj4gPiArCQkJR0VNX0JVR19PTihz dGF0dXMgJiBHRU44X0NUWF9TVEFUVVNfUFJFRU1QVEVEKTsKPiA+ICsJCQlHRU1fQlVHX09OKHBv cnRfaXNzZXQoJnBvcnRbMV0pICYmCj4gPiArCQkJCSAgICEoc3RhdHVzICYgR0VOOF9DVFhfU1RB VFVTX0VMRU1FTlRfU1dJVENIKSk7Cj4gPiArCQkJR0VNX0JVR19PTighaTkxNV9yZXF1ZXN0X2Nv bXBsZXRlZChycSkpOwo+ID4gKwkJCWV4ZWNsaXN0c19jb250ZXh0X3NjaGVkdWxlX291dChycSk7 Cj4gPiArCQkJdHJhY2VfaTkxNV9yZXF1ZXN0X291dChycSk7Cj4gPiArCQkJaTkxNV9yZXF1ZXN0 X3B1dChycSk7Cj4gPiArCj4gPiArCQkJR0VNX1RSQUNFKCIlcyBjb21wbGV0ZWQgY3R4PSVkXG4i LAo+ID4gKwkJCQkgIGVuZ2luZS0+bmFtZSwgcG9ydC0+Y29udGV4dF9pZCk7Cj4gPiArCj4gPiAr CQkJZXhlY2xpc3RzX3BvcnRfY29tcGxldGUoZXhlY2xpc3RzLCBwb3J0KTsKPiA+ICsJCX0gZWxz ZSB7Cj4gPiArCQkJcG9ydF9zZXQocG9ydCwgcG9ydF9wYWNrKHJxLCBjb3VudCkpOwo+ID4gKwkJ fQo+ID4gIAo+ID4gLQkJCS8qIFdlIHNob3VsZCBuZXZlciBnZXQgYSBDT01QTEVURUQgfCBJRExF X0FDVElWRSEgKi8KPiA+IC0JCQlHRU1fQlVHX09OKHN0YXR1cyAmIEdFTjhfQ1RYX1NUQVRVU19J RExFX0FDVElWRSk7Cj4gPiArCQkvKiBBZnRlciB0aGUgZmluYWwgZWxlbWVudCwgdGhlIGh3IHNo b3VsZCBiZSBpZGxlICovCj4gPiArCQlHRU1fQlVHX09OKHBvcnRfY291bnQocG9ydCkgPT0gMCAm Jgo+ID4gKwkJCSAgICEoc3RhdHVzICYgR0VOOF9DVFhfU1RBVFVTX0FDVElWRV9JRExFKSk7Cj4g PiArCQlpZiAocG9ydF9jb3VudChwb3J0KSA9PSAwKQo+ID4gKwkJCWV4ZWNsaXN0c19jbGVhcl9h Y3RpdmUoZXhlY2xpc3RzLAo+ID4gKwkJCQkJICAgICAgIEVYRUNMSVNUU19BQ1RJVkVfVVNFUik7 Cj4gPiArCX0KPiA+ICAKPiA+IC0JCQlpZiAoc3RhdHVzICYgR0VOOF9DVFhfU1RBVFVTX0NPTVBM RVRFICYmCj4gPiAtCQkJICAgIGJ1ZlsyKmhlYWQgKyAxXSA9PSBleGVjbGlzdHMtPnByZWVtcHRf Y29tcGxldGVfc3RhdHVzKSB7Cj4gPiAtCQkJCUdFTV9UUkFDRSgiJXMgcHJlZW1wdC1pZGxlXG4i LCBlbmdpbmUtPm5hbWUpOwo+ID4gLQkJCQljb21wbGV0ZV9wcmVlbXB0X2NvbnRleHQoZXhlY2xp c3RzKTsKPiA+IC0JCQkJY29udGludWU7Cj4gPiAtCQkJfQo+ID4gKwlpZiAoaGVhZCAhPSBleGVj bGlzdHMtPmNzYl9oZWFkKSB7Cj4gPiArCQlleGVjbGlzdHMtPmNzYl9oZWFkID0gaGVhZDsKPiA+ ICsJCXdyaXRlbChfTUFTS0VEX0ZJRUxEKEdFTjhfQ1NCX1JFQURfUFRSX01BU0ssIGhlYWQgPDwg OCksCj4gPiArCQkgICAgICAgaTkxNS0+cmVncyArIGk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdf Q09OVEVYVF9TVEFUVVNfUFRSKGVuZ2luZSkpKTsKPiA+ICsJfQo+ID4gIAo+ID4gLQkJCWlmIChz dGF0dXMgJiBHRU44X0NUWF9TVEFUVVNfUFJFRU1QVEVEICYmCj4gPiAtCQkJICAgIGV4ZWNsaXN0 c19pc19hY3RpdmUoZXhlY2xpc3RzLAo+ID4gLQkJCQkJCUVYRUNMSVNUU19BQ1RJVkVfUFJFRU1Q VCkpCj4gPiAtCQkJCWNvbnRpbnVlOwo+ID4gKwlpZiAodW5saWtlbHkoZncpKQo+ID4gKwkJaW50 ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQoaTkxNSwgZXhlY2xpc3RzLT5md19kb21haW5zKTsKPiA+ ICt9Cj4gPiAgCj4gPiAtCQkJR0VNX0JVR19PTighZXhlY2xpc3RzX2lzX2FjdGl2ZShleGVjbGlz dHMsCj4gPiAtCQkJCQkJCUVYRUNMSVNUU19BQ1RJVkVfVVNFUikpOwo+ID4gLQo+ID4gLQkJCXJx ID0gcG9ydF91bnBhY2socG9ydCwgJmNvdW50KTsKPiA+IC0JCQlHRU1fVFJBQ0UoIiVzIG91dFsw XTogY3R4PSVkLiVkLCBzZXFubz0leCwgcHJpbz0lZFxuIiwKPiA+IC0JCQkJICBlbmdpbmUtPm5h bWUsCj4gPiAtCQkJCSAgcG9ydC0+Y29udGV4dF9pZCwgY291bnQsCj4gPiAtCQkJCSAgcnEgPyBy cS0+Z2xvYmFsX3NlcW5vIDogMCwKPiA+IC0JCQkJICBycSA/IHJxX3ByaW8ocnEpIDogMCk7Cj4g PiAtCj4gPiAtCQkJLyogQ2hlY2sgdGhlIGNvbnRleHQvZGVzYyBpZCBmb3IgdGhpcyBldmVudCBt YXRjaGVzICovCj4gPiAtCQkJR0VNX0RFQlVHX0JVR19PTihidWZbMiAqIGhlYWQgKyAxXSAhPSBw b3J0LT5jb250ZXh0X2lkKTsKPiA+IC0KPiA+IC0JCQlHRU1fQlVHX09OKGNvdW50ID09IDApOwo+ ID4gLQkJCWlmICgtLWNvdW50ID09IDApIHsKPiA+IC0JCQkJR0VNX0JVR19PTihzdGF0dXMgJiBH RU44X0NUWF9TVEFUVVNfUFJFRU1QVEVEKTsKPiA+IC0JCQkJR0VNX0JVR19PTihwb3J0X2lzc2V0 KCZwb3J0WzFdKSAmJgo+ID4gLQkJCQkJICAgIShzdGF0dXMgJiBHRU44X0NUWF9TVEFUVVNfRUxF TUVOVF9TV0lUQ0gpKTsKPiA+IC0JCQkJR0VNX0JVR19PTighaTkxNV9yZXF1ZXN0X2NvbXBsZXRl ZChycSkpOwo+ID4gLQkJCQlleGVjbGlzdHNfY29udGV4dF9zY2hlZHVsZV9vdXQocnEpOwo+ID4g LQkJCQl0cmFjZV9pOTE1X3JlcXVlc3Rfb3V0KHJxKTsKPiA+IC0JCQkJaTkxNV9yZXF1ZXN0X3B1 dChycSk7Cj4gPiAtCj4gPiAtCQkJCUdFTV9UUkFDRSgiJXMgY29tcGxldGVkIGN0eD0lZFxuIiwK PiA+IC0JCQkJCSAgZW5naW5lLT5uYW1lLCBwb3J0LT5jb250ZXh0X2lkKTsKPiA+IC0KPiA+IC0J CQkJZXhlY2xpc3RzX3BvcnRfY29tcGxldGUoZXhlY2xpc3RzLCBwb3J0KTsKPiA+IC0JCQl9IGVs c2Ugewo+ID4gLQkJCQlwb3J0X3NldChwb3J0LCBwb3J0X3BhY2socnEsIGNvdW50KSk7Cj4gPiAt CQkJfQo+ID4gKy8qCj4gPiArICogQ2hlY2sgdGhlIHVucmVhZCBDb250ZXh0IFN0YXR1cyBCdWZm ZXJzIGFuZCBtYW5hZ2UgdGhlIHN1Ym1pc3Npb24gb2YgbmV3Cj4gPiArICogY29udGV4dHMgdG8g dGhlIEVMU1AgYWNjb3JkaW5nbHkuCj4gPiArICovCj4gPiArc3RhdGljIHZvaWQgZXhlY2xpc3Rz X3N1Ym1pc3Npb25fdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCj4gPiArewo+ID4gKwlzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICogY29uc3QgZW5naW5lID0gKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKilkYXRhOwo+ID4gIAo+ID4gLQkJCS8qIEFmdGVyIHRoZSBmaW5hbCBlbGVtZW50LCB0aGUg aHcgc2hvdWxkIGJlIGlkbGUgKi8KPiA+IC0JCQlHRU1fQlVHX09OKHBvcnRfY291bnQocG9ydCkg PT0gMCAmJgo+ID4gLQkJCQkgICAhKHN0YXR1cyAmIEdFTjhfQ1RYX1NUQVRVU19BQ1RJVkVfSURM RSkpOwo+ID4gLQkJCWlmIChwb3J0X2NvdW50KHBvcnQpID09IDApCj4gPiAtCQkJCWV4ZWNsaXN0 c19jbGVhcl9hY3RpdmUoZXhlY2xpc3RzLAo+ID4gLQkJCQkJCSAgICAgICBFWEVDTElTVFNfQUNU SVZFX1VTRVIpOwo+ID4gLQkJfQo+ID4gKwkvKgo+ID4gKwkgKiBXZSBjYW4gc2tpcCBhY3F1aXJp bmcgaW50ZWxfcnVudGltZV9wbV9nZXQoKSBoZXJlIGFzIGl0IHdhcyB0YWtlbgo+ID4gKwkgKiBv biBvdXIgYmVoYWxmIGJ5IHRoZSByZXF1ZXN0IChzZWUgaTkxNV9nZW1fbWFya19idXN5KCkpIGFu ZCBpdCB3aWxsCj4gPiArCSAqIG5vdCBiZSByZWxpbnF1aXNoZWQgdW50aWwgdGhlIGRldmljZSBp cyBpZGxlIChzZWUKPiA+ICsJICogaTkxNV9nZW1faWRsZV93b3JrX2hhbmRsZXIoKSkuIEFzIGEg cHJlY2F1dGlvbiwgd2UgbWFrZSBzdXJlCj4gPiArCSAqIHRoYXQgYWxsIEVMU1AgYXJlIGRyYWlu ZWQgaS5lLiB3ZSBoYXZlIHByb2Nlc3NlZCB0aGUgQ1NCLAo+ID4gKwkgKiBiZWZvcmUgYWxsb3dp bmcgb3Vyc2VsdmVzIHRvIGlkbGUgYW5kIGNhbGxpbmcgaW50ZWxfcnVudGltZV9wbV9wdXQoKS4K PiA+ICsJICovCj4gPiArCUdFTV9CVUdfT04oIWVuZ2luZS0+aTkxNS0+Z3QuYXdha2UpOwo+ID4g IAo+ID4gLQkJaWYgKGhlYWQgIT0gZXhlY2xpc3RzLT5jc2JfaGVhZCkgewo+ID4gLQkJCWV4ZWNs aXN0cy0+Y3NiX2hlYWQgPSBoZWFkOwo+ID4gLQkJCXdyaXRlbChfTUFTS0VEX0ZJRUxEKEdFTjhf Q1NCX1JFQURfUFRSX01BU0ssIGhlYWQgPDwgOCksCj4gPiAtCQkJICAgICAgIGRldl9wcml2LT5y ZWdzICsgaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19DT05URVhUX1NUQVRVU19QVFIoZW5naW5l KSkpOwo+ID4gLQkJfQo+ID4gLQl9Cj4gPiArCS8qCj4gPiArCSAqIFByZWZlciBkb2luZyB0ZXN0 X2FuZF9jbGVhcl9iaXQoKSBhcyBhIHR3byBzdGFnZSBvcGVyYXRpb24gdG8gYXZvaWQKPiA+ICsJ ICogaW1wb3NpbmcgdGhlIGNvc3Qgb2YgYSBsb2NrZWQgYXRvbWljIHRyYW5zYWN0aW9uIHdoZW4g c3VibWl0dGluZyBhCj4gPiArCSAqIG5ldyByZXF1ZXN0IChvdXRzaWRlIG9mIHRoZSBjb250ZXh0 LXN3aXRjaCBpbnRlcnJ1cHQpLgo+ID4gKwkgKi8KPiA+ICsJaWYgKHRlc3RfYml0KEVOR0lORV9J UlFfRVhFQ0xJU1QsICZlbmdpbmUtPmlycV9wb3N0ZWQpKQo+IFRoaXMgd2FzIGEgJ3doaWxlJyBi ZWZvcmUgcmVmYWN0b3JpbmcuIFNob3VsZG4ndCBpdCBzdGlsbCBiZSBpbiBvcmRlciB0byBjYXRj aAo+IG5ldyBpcnFfcG9zdGVkIGR1cmluZyBwcm9jZXNzaW5nPwo+IAo+IEJUVywgSSBoYXZlIHJl dmlzZWQgYW5kIHJlYmFzZWQgdGhlIGZvcmNlIHByZWVtcHRpb24gcGF0Y2hlcyBvbiBkcm0tdGlw IHdpdGgKPiB0aGlzIGFuZCB0aGUgb3RoZXIgcmVsYXRlZCBwYXRjaGVzIHlvdSBoYXZlIHByb3Bv c2VkLiBJIGp1c3Qgc3RhcnRlZCBydW5uaW5nCj4gbXkgSUdUIHRlc3QgdGhhdCBjb3ZlcnMgdGhl IGlubm9jZW50IGNvbnRleHQgb24gcG9ydFsxXSBzY2VuYXJpbyB0aGF0IHdlCj4gZGlzY3Vzc2Vk IG9uIElSQy4gR2V0dGluZyBhIHNwb3JhZGljIGZhaWx1cmUgYnV0IG5lZWQgbW9yZSB0aW1lIHRv IHJvb3QgY2F1c2UuCj4gV2lsbCB1cGRhdGUgc29vbi4KPiAKPiA+ICsJCXByb2Nlc3NfY3NiKGVu Z2luZSk7Cj4gPiAgCj4gPiAtCWlmICghZXhlY2xpc3RzX2lzX2FjdGl2ZShleGVjbGlzdHMsIEVY RUNMSVNUU19BQ1RJVkVfUFJFRU1QVCkpCj4gPiArCWlmICghZXhlY2xpc3RzX2lzX2FjdGl2ZSgm ZW5naW5lLT5leGVjbGlzdHMsIEVYRUNMSVNUU19BQ1RJVkVfUFJFRU1QVCkpCj4gPiAgCQlleGVj bGlzdHNfZGVxdWV1ZShlbmdpbmUpOwo+ID4gLQo+ID4gLQlpZiAoZncpCj4gPiAtCQlpbnRlbF91 bmNvcmVfZm9yY2V3YWtlX3B1dChkZXZfcHJpdiwgZXhlY2xpc3RzLT5md19kb21haW5zKTsKPiA+ ICB9Cj4gPiAgCj4gPiAgc3RhdGljIHZvaWQgcXVldWVfcmVxdWVzdChzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICplbmdpbmUsCj4gPiBAQCAtMTY2Nyw2ICsxNjczLDcgQEAgc3RhdGljIHN0cnVjdCBp OTE1X3JlcXVlc3QgKgo+ID4gIGV4ZWNsaXN0c19yZXNldF9wcmVwYXJlKHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZSkKPiA+ICB7Cj4gPiAgCXN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xp c3RzICogY29uc3QgZXhlY2xpc3RzID0gJmVuZ2luZS0+ZXhlY2xpc3RzOwo+ID4gKwlzdHJ1Y3Qg aTkxNV9yZXF1ZXN0ICpyZXF1ZXN0LCAqYWN0aXZlOwo+ID4gIAo+ID4gIAkvKgo+ID4gIAkgKiBQ cmV2ZW50IHJlcXVlc3Qgc3VibWlzc2lvbiB0byB0aGUgaGFyZHdhcmUgdW50aWwgd2UgaGF2ZQo+ ID4gQEAgLTE2ODgsNyArMTY5NSwzOSBAQCBleGVjbGlzdHNfcmVzZXRfcHJlcGFyZShzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gPiAgCQl0YXNrbGV0X2tpbGwoJmV4ZWNsaXN0cy0+ dGFza2xldCk7Cj4gPiAgCXRhc2tsZXRfZGlzYWJsZSgmZXhlY2xpc3RzLT50YXNrbGV0KTsKPiA+ ICAKPiA+IC0JcmV0dXJuIGk5MTVfZ2VtX2ZpbmRfYWN0aXZlX3JlcXVlc3QoZW5naW5lKTsKPiA+ ICsJLyoKPiA+ICsJICogV2Ugd2FudCB0byBmbHVzaCB0aGUgcGVuZGluZyBjb250ZXh0IHN3aXRj aGVzLCBoYXZpbmcgZGlzYWJsZWQKPiA+ICsJICogdGhlIHRhc2tsZXQgYWJvdmUsIHdlIGNhbiBh c3N1bWUgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgZXhlY2xpc3RzLgo+ID4gKwkgKiBGb3IgdGhp cyBhbGxvd3MgdXMgdG8gY2F0Y2ggdXAgd2l0aCBhbiBpbmZsaWdodCBwcmVlbXB0aW9uIGV2ZW50 LAo+ID4gKwkgKiBhbmQgYXZvaWQgYmxhbWluZyBhbiBpbm5vY2VudCByZXF1ZXN0IGlmIHRoZSBz dGFsbCB3YXMgZHVlIHRvIHRoZQo+ID4gKwkgKiBwcmVlbXB0aW9uIGl0c2VsZi4KPiA+ICsJICov Cj4gPiArCXByb2Nlc3NfY3NiKGVuZ2luZSk7Cj4gPiArCj4gPiArCS8qCj4gPiArCSAqIFRoZSBs YXN0IGFjdGl2ZSByZXF1ZXN0IGNhbiB0aGVuIGJlIG5vIGxhdGVyIHRoYW4gdGhlIGxhc3QgcmVx dWVzdAo+ID4gKwkgKiBub3cgaW4gRUxTUFswXS4gU28gc2VhcmNoIGJhY2t3YXJkcyBmcm9tIHRo ZXJlLCBzbyB0aGF0IGlzIHRoZSBHUFUKPiA+ICsJICogaGFzIGFkdmFuY2VkIGJleW9uZCB0aGUg bGFzdCBDU0IgdXBkYXRlLCBpdCB3aWxsIGJlIHBhcmRvbmVkLgo+ID4gKwkgKi8KPiA+ICsJYWN0 aXZlID0gTlVMTDsKPiA+ICsJcmVxdWVzdCA9IHBvcnRfcmVxdWVzdChleGVjbGlzdHMtPnBvcnQp Owo+ID4gKwlpZiAocmVxdWVzdCkgewo+ID4gKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKPiA+ICsK PiA+ICsJCXNwaW5fbG9ja19pcnFzYXZlKCZlbmdpbmUtPnRpbWVsaW5lLT5sb2NrLCBmbGFncyk7 Cj4gPiArCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb21fcmV2ZXJzZShyZXF1ZXN0LAo+ID4gKwkJ CQkJCSAmZW5naW5lLT50aW1lbGluZS0+cmVxdWVzdHMsCj4gPiArCQkJCQkJIGxpbmspIHsKPiA+ ICsJCQlpZiAoX19pOTE1X3JlcXVlc3RfY29tcGxldGVkKHJlcXVlc3QsCj4gPiArCQkJCQkJICAg ICByZXF1ZXN0LT5nbG9iYWxfc2Vxbm8pKQo+ID4gKwkJCQlicmVhazsKPiA+ICsKPiA+ICsJCQlh Y3RpdmUgPSByZXF1ZXN0Owo+ID4gKwkJfQo+ID4gKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm ZW5naW5lLT50aW1lbGluZS0+bG9jaywgZmxhZ3MpOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJldHVy biBhY3RpdmU7CgpOb3cgd2UgY2FuIHNlZSBhbiBhYm9ydCBvZiB0aGUgcmVzZXQgaWYgcHJvY2Vz c19jc2IoKSBwcm9jZXNzZXMgYSBjb21wbGV0ZWQKcHJlZW1wdGlvbi4gU28gd2UgbmVlZCB0byBr aWNrIHRoZSB0YXNrbGV0IHRvIGdldCBhIGRlcXVldWUgb2YgdGhlIHdhaXRpbmcKcmVxdWVzdCB0 byBoYXBwZW4uIEN1cnJlbnRseSB3ZSBvbmx5IGtpY2sgaWYgbmVlZGVkIGluIGdlbjhfaW5pdF9j b21tb25fcmluZwp3aGljaCBpcyBza2lwcGVkIGlmIHdlIGFib3J0IHRoZSByZXNldC4KCk90aGVy d2lzZSB0aGlzIGlzIHdvcmtpbmcgd2VsbCBpbiBteSBmb3JjZSBwcmVlbXB0aW9uIHRlc3RzLgot SmVmZgo+ID4gIH0KPiA+ICAKPiA+ICBzdGF0aWMgdm9pZCByZXNldF9pcnEoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lKQo+ID4gLS0gCj4gPiAyLjE2LjIKPiA+IAo+IF9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gSW50ZWwtZ2Z4IG1haWxpbmcg bGlzdAo+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeApfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0Cklu dGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK