From mboxrd@z Thu Jan 1 00:00:00 1970 From: Manasi Navare Subject: Re: [PATCH 07/12] drm/i915: Move DP link retraining into intel_dp_detect() Date: Thu, 28 Jul 2016 17:36:14 -0700 Message-ID: <20160729003614.GB23736@intel.com> References: <1469717448-4297-1-git-send-email-ville.syrjala@linux.intel.com> <1469717448-4297-8-git-send-email-ville.syrjala@linux.intel.com> <20160728194853.GA23736@intel.com> <20160728201522.GT4329@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id C8E2A6E8E1 for ; Fri, 29 Jul 2016 00:23:16 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20160728201522.GT4329@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Cc: Ander Conselvan de Oliveira , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBKdWwgMjgsIDIwMTYgYXQgMTE6MTU6MjJQTSArMDMwMCwgVmlsbGUgU3lyasOkbMOk IHdyb3RlOgo+IE9uIFRodSwgSnVsIDI4LCAyMDE2IGF0IDEyOjQ4OjUzUE0gLTA3MDAsIE1hbmFz aSBOYXZhcmUgd3JvdGU6Cj4gPiBPbiBUaHUsIEp1bCAyOCwgMjAxNiBhdCAwNTo1MDo0M1BNICsw MzAwLCB2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbSB3cm90ZToKPiA+ID4gRnJvbTogVmls bGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KPiA+ID4gCj4gPiA+ IERQIGxpbmsgcmV0cmFpbmluZyBuZWVkcyB0byBncmFiIHNvbWUgbW9kZXNldCBsb2NrcyB0byBu b3QgcmFjZSB3aXRoCj4gPiA+IG1vZGVzZXRzLCBzbyB3ZSBjYW4ndCByZWFsbHkgZG8gaXQgc2Fm ZWx5IGZyb20gdGhlIGhwZF9wdWxzZSwgbGVzdCB3ZQo+ID4gPiByaXNrIGRlYWRsb2NraW5nIGR1 ZSB0byBNU1Qgc2lkZWJhbmQgc3R1ZmYuCj4gPiA+IAo+ID4gPiBNb3ZlIHRoZSBsaW5rIHJldHJh aW5pbmcgdG8gaGFwcGVuIGZyb20gdGhlIGhvdHBsdWcgd29yayBpbnN0ZWFkLgo+ID4gPiBEb2lu ZyBhdCB0aGUgZW5kIG9mIGludGVsX2RwX2RldGVjdCgpIHNlZW1zIGxpa2UgYSBnb29kIHBsYWNl IGluIGNhc2UKPiA+ID4gdGhlIHNpbmsgYWxyZWFkeSBnb3QgZGlzY29ubmVjdGVkLCBpbiB3aGlj aCBjYXNlIHJldHJhaW5pbmcgaXMKPiA+ID4gcG9pbnRsZXNzLgo+ID4gPiAKPiA+ID4gVG8gZGV0 ZXJtaW5lIGlmIHdlIG5lZWQgdG8gc2NoZWR1bGUgdGhlIGhvdHBsdWcgd29yaywgd2UnbGwganVz dCBjaGVjawo+ID4gPiB0aGUgc2luayBsYW5lIHN0YXR1cyB3aXRob3V0IGxvY2tzIGZyb20gaHBk X3B1bHNlLiBBIGxpdHRsZSByYWN5Cj4gPiA+IHN0aWxsIGVnLiBkdWUgdG8gdXNlaW5nIGludGVs X2RwLT5sYW5lX2NvdW50LCBidXQgbm8gbGVzcyByYWN5IHRoYW4KPiA+ID4gd2hhdCB3ZSBhbHJl YWR5IGhhZC4gV2UnbGwgcmVwZWF0IHRoZSBjaGVjayBpbiBmcm9tIGludGVsX2RwX2RldGVjdCgp Cj4gPiA+IHdpdGggcHJvcGVyIGxvY2tpbmcsIHdoZXJlIHdlJ2xsIGFsc28gY2hlY2sgaWYgdGhl IGxpbmsgYXMgYWN0dWFsbHkKPiA+ID4gYWN0aXZlIG9yIG5vdC4KPiA+ID4gCj4gPiA+IENjOiBB bmRlciBDb25zZWx2YW4gZGUgT2xpdmVpcmEgPGFuZGVyLmNvbnNlbHZhbi5kZS5vbGl2ZWlyYUBp bnRlbC5jb20+Cj4gPiA+IENjOiBKaW0gQnJpZGUgPGppbS5icmlkZUBsaW51eC5pbnRlbC5jb20+ Cj4gPiA+IENjOiBNYW5hc2kgRCBOYXZhcmUgPG1hbmFzaS5kLm5hdmFyZUBpbnRlbC5jb20+Cj4g PiA+IENjOiBEdXJnYWRvc3MgUiA8ZHVyZ2Fkb3NzLnJAaW50ZWwuY29tPgo+ID4gPiBTaWduZWQt b2ZmLWJ5OiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgo+ ID4gPiAtLS0KPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMgfCAxNTQgKysr KysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ID4gPiAgMSBmaWxlIGNoYW5n ZWQsIDY2IGluc2VydGlvbnMoKyksIDg4IGRlbGV0aW9ucygtKQo+ID4gPiAKPiA+ID4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kcC5jCj4gPiA+IGluZGV4IDRhNDE4NGMyMTk4OS4uNjc1YjgzZjU3YTA3IDEw MDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCj4gPiA+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKPiA+ID4gQEAgLTM4NDIsMTUgKzM4 NDIsNiBAQCBpbnRlbF9kcF9jaGVja19tc3Rfc3RhdHVzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHApCj4gPiA+ICAJCWJyZXQgPSBpbnRlbF9kcF9nZXRfc2lua19pcnFfZXNpKGludGVsX2RwLCBl c2kpOwo+ID4gPiAgZ29fYWdhaW46Cj4gPiA+ICAJCWlmIChicmV0ID09IHRydWUpIHsKPiA+ID4g LQo+ID4gPiAtCQkJLyogY2hlY2sgbGluayBzdGF0dXMgLSBlc2lbMTBdID0gMHgyMDBjICovCj4g PiA+IC0JCQlpZiAoaW50ZWxfZHAtPmFjdGl2ZV9zdHJlYW1zICYmCj4gPiA+IC0JCQkgICAgIWRy bV9kcF9jaGFubmVsX2VxX29rKCZlc2lbMTBdLCBpbnRlbF9kcC0+bGFuZV9jb3VudCkpIHsKPiA+ ID4gLQkJCQlEUk1fREVCVUdfS01TKCJjaGFubmVsIEVRIG5vdCBvaywgcmV0cmFpbmluZ1xuIik7 Cj4gPiA+IC0JCQkJaW50ZWxfZHBfc3RhcnRfbGlua190cmFpbihpbnRlbF9kcCk7Cj4gPiA+IC0J CQkJaW50ZWxfZHBfc3RvcF9saW5rX3RyYWluKGludGVsX2RwKTsKPiA+ID4gLQkJCX0KPiA+ID4g LQo+ID4gPiAgCQkJRFJNX0RFQlVHX0tNUygiZ290IGVzaSAlM3BoXG4iLCBlc2kpOwo+ID4gPiAg CQkJcmV0ID0gZHJtX2RwX21zdF9ocGRfaXJxKCZpbnRlbF9kcC0+bXN0X21nciwgZXNpLCAmaGFu ZGxlZCk7Cj4gPiA+ICAKPiA+ID4gQEAgLTM4ODYsMzQgKzM4NzcsNDIgQEAgZ29fYWdhaW46Cj4g PiA+ICAJcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ICB9Cj4gPiA+ICAKPiA+ID4gLXN0YXRpYyB2b2lk Cj4gPiA+IC1pbnRlbF9kcF9jaGVja19saW5rX3N0YXR1cyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVs X2RwKQo+ID4gPiArc3RhdGljIGJvb2wKPiA+ID4gK2ludGVsX2RwX2xpbmtfbmVlZHNfcmV0cmFp bihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ID4gPiAgewo+ID4gPiAtCXN0cnVjdCBpbnRl bF9lbmNvZGVyICppbnRlbF9lbmNvZGVyID0gJmRwX3RvX2RpZ19wb3J0KGludGVsX2RwKS0+YmFz ZTsKPiA+ID4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaW50ZWxfZHBfdG9fZGV2KGludGVs X2RwKTsKPiA+ID4gIAl1OCBsaW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXTsKPiA+ID4g IAo+ID4gPiAtCVdBUk5fT04oIWRybV9tb2Rlc2V0X2lzX2xvY2tlZCgmZGV2LT5tb2RlX2NvbmZp Zy5jb25uZWN0aW9uX211dGV4KSk7Cj4gPiA+ICsJaWYgKGludGVsX2RwLT5hY3RpdmVfc3RyZWFt cyA9PSAwKQo+ID4gPiArCQlyZXR1cm4gZmFsc2U7Cj4gPiA+ICsKPiA+ID4gKwlpZiAoaW50ZWxf ZHAtPmNvbXBsaWFuY2VfdGVzdF90eXBlID09IERQX1RFU1RfTElOS19UUkFJTklORykKPiA+ID4g KwkJcmV0dXJuIHRydWU7Cj4gPiA+ICAKPiA+ID4gIAlpZiAoIWludGVsX2RwX2dldF9saW5rX3N0 YXR1cyhpbnRlbF9kcCwgbGlua19zdGF0dXMpKSB7Cj4gPiA+ICAJCURSTV9FUlJPUigiRmFpbGVk IHRvIGdldCBsaW5rIHN0YXR1c1xuIik7Cj4gPiA+IC0JCXJldHVybjsKPiA+ID4gKwkJcmV0dXJu IGZhbHNlOwo+ID4gPiAgCX0KPiA+ID4gIAo+ID4gPiAtCWlmICghaW50ZWxfZW5jb2Rlci0+YmFz ZS5jcnRjKQo+ID4gPiAtCQlyZXR1cm47Cj4gPiA+ICsJcmV0dXJuICFkcm1fZHBfY2hhbm5lbF9l cV9vayhsaW5rX3N0YXR1cywgaW50ZWxfZHAtPmxhbmVfY291bnQpOwo+ID4gCj4gPiBBY2NvcmRp bmcgdG8gdGhlIERQIHNwZWMsIHdlIHNob3VsZCBhbHNvIGNoZWNrIGZvciB0aGUgY2xvY2sgcmVj b3ZlcnkgYml0IGluIERQQ0QKPiA+IFdlIHNob3VsZCBhbHNvIGFkZCBhIGNoZWNrIGRybV9kcF9j bG9ja19yZWNvdmVyeV9vayhsaW5rX3N0YXR1cywgaW50ZWxfZHAtPmxhbmVfY291bnQpCj4gCj4g SSB0aGluayBkcm1fZHBfY2hhbm5lbF9lcV9vaygpIGNoZWNrcyBhbGwgdGhlIGJpdHM6IElOVEVS TEFORV9BTElHTl9ET05FLAo+IENSX0RPTkUsIEVRX0RPTkUsIGFuZCBTWU1CT0xfTE9DS0VELgoK SXQgb25seSBjaGVja3MgZm9yIEVRX0RPTkUgYW5kIElOVEVSTEFORV9BTElHTl9ET05FLgpkcm1f ZHBfY2xvY2tfcmVjb3Zlcnlfb2soKSBjaGVja3MgZm9yIERQX0xBTkVfQ1JfRE9ORSBiaXQuCj4g Cj4gQW55d2F5cywgd2hpbGUgSSB3YXMgbG9va2luZyBhdCB0aGUgc2hvcnQgcHVsc2UgaGFuZGxp bmcgYSBiaXQgbW9yZSwgSSBjYW1lCj4gdG8gdGhlIGNvbmNsdXNpb24gdGhhdCB3ZSBzaG91bGQg cmV3cml0ZSBpdCBhIGJpdC4KPiAKPiBUaGUgQ1RTIGRvY3Mgc2VlbSB0byBzYXkgdGhhdCB3ZSdy ZSBleHBlY3RlZCB0byByZWFkIERQQ0QgMHgyMDAtMHgyMDUgb24gCj4gc2hvcnQgcHVsc2UsIGFu ZCB1c2UgdGhhdCBpbmZvcm1hdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB3ZSBzaG91bGQgZG8uCj4g Q3VycmVudGx5IHdlIGRvbid0IGRvIHRoYXQuCj4gCj4gU28gSSB3YXMgdGh1bmtpbmcgdGhhdCB3 ZSdkIGFkanVzdCB0aGUgbGlua19zdGF0dXMgc3R1ZmYgdG8gcmVhZCAweDIwMC0weDIwNwo+IGlu c3RlYWQgb2YgMHgyMDItMHgyMDcsIGxpa2Ugc286Cj4gLSNkZWZpbmUgRFBfTElOS19TVEFUVVNf U0laRSAgICAgICA2Cj4gKyNkZWZpbmUgRFBfTElOS19TVEFUVVNfU0laRSAgICAgICA4Cj4gCj4g IHN0YXRpYyB1OCBkcF9saW5rX3N0YXR1cyhjb25zdCB1OCBsaW5rX3N0YXR1c1tEUF9MSU5LX1NU QVRVU19TSVpFXSwgaW50IHIpCj4gIHsKPiAtICAgICAgIHJldHVybiBsaW5rX3N0YXR1c1tyIC0g RFBfTEFORTBfMV9TVEFUVVNdOwo+ICsgICAgICAgcmV0dXJuIGxpbmtfc3RhdHVzW3IgLSBEUF9T SU5LX0NPVU5UXTsKPiAgfQo+IAo+IEFuZCB0aGVuIHdlJ2QgdXNlIHNvbWV0aGluZyBsaWtlIHRo aXMgYXMgb3VyIHNob3J0IHB1bHNlIGhhbmRsZXI6Cj4gCj4gc3RhdGljIGJvb2wKPiBpbnRlbF9k cF9zaG9ydF9wdWxzZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+IHsKPiAgICAgICAgIHU4 IGxpbmtfc3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJWkVdLCB0bXA7Cj4gCj4gICAgICAgICAvKiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPiAgICAg ICAgICAqIENsZWFyaW5nIGNvbXBsaWFuY2UgdGVzdCB2YXJpYWJsZXMgdG8gYWxsb3cgY2FwdHVy aW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAo+ICAgICAgICAgICogb2YgdmFsdWVzIGZvciBuZXh0IGF1dG9tYXRlZCB0ZXN0IHJlcXVlc3Qu ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCj4gICAgICAgICAgKi8KPiAgICAgICAgIGludGVsX2RwLT5jb21wbGlhbmNlX3Rl c3RfYWN0aXZlID0gMDsKPiAgICAgICAgIGludGVsX2RwLT5jb21wbGlhbmNlX3Rlc3RfdHlwZSA9 IDA7Cj4gICAgICAgICBpbnRlbF9kcC0+Y29tcGxpYW5jZV90ZXN0X2RhdGEgPSAwOwo+IAo+ICAg ICAgICAgaWYgKCFpbnRlbF9kcF9nZXRfbGlua19zdGF0dXMoaW50ZWxfZHAsIGxpbmtfc3RhdHVz KSkKPiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+IAo+ICAgICAgICAgdG1wID0gZHJt X2RwX2xpbmtfc3RhdHVzKGxpbmtfc3RhdHVzLCBEUF9ERVZJQ0VfU0VSVklDRV9JUlFfVkVDVE9S KTsKPiAgICAgICAgIGlmICh0bXApCj4gICAgICAgICAgICAgICAgIGRybV9kcF9kcGNkX3dyaXRl YigmaW50ZWxfZHAtPmF1eCwKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERQ X0RFVklDRV9TRVJWSUNFX0lSUV9WRUNUT1IsCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0bXApOwo+IAo+ICAgICAgICAgaWYgKHRtcCAmIERQX0FVVE9NQVRFRF9URVNUX1JF UVVFU1QpCj4gICAgICAgICAgICAgICAgIERSTV9ERUJVR19EUklWRVIoIlRlc3QgcmVxdWVzdCBp biBzaG9ydCBwdWxzZSBub3QgaGFuZGxlZFxuIik7Cj4gICAgICAgICBpZiAodG1wICYgKERQX0NQ X0lSUSB8IERQX1NJTktfU1BFQ0lGSUNfSVJRKSkKPiAgICAgICAgICAgICAgICAgRFJNX0RFQlVH X0RSSVZFUigiQ1Agb3Igc2luayBzcGVjaWZpYyBpcnEgdW5oYW5kbGVkXG4iKTsKPiAKPiAgICAg ICAgIHRtcCA9IGRybV9kcF9saW5rX3N0YXR1cyhsaW5rX3N0YXR1cywgRFBfTEFORV9BTElHTl9T VEFUVVNfVVBEQVRFRCk7Cj4gICAgICAgICBpZiAodG1wICYgRFBfRE9XTlNUUkVBTV9QT1JUX1NU QVRVU19DSEFOR0VEKQo+ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cj4gCj4gICAgICAg ICB0bXAgPSBkcm1fZHBfbGlua19zdGF0dXMobGlua19zdGF0dXMsIERQX1NJTktfQ09VTlQpOwo+ ICAgICAgICAgaWYgKERQX0dFVF9TSU5LX0NPVU5UKHRtcCkgIT0gaW50ZWxfZHAtPnNpbmtfY291 bnQpCj4gICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKPiAKPiAgICAgICAgIGlmIChpbnRl bF9kcC0+YWN0aXZlX3N0cmVhbXMgIT0gMCAmJgo+ICAgICAgICAgICAgICFkcm1fZHBfY2hhbm5l bF9lcV9vayhsaW5rX3N0YXR1cywgaW50ZWxfZHAtPmxhbmVfY291bnQpKQo+ICAgICAgICAgICAg ICAgICByZXR1cm4gZmFsc2U7Cj4gCj4gICAgICAgICByZXR1cm4gdHJ1ZTsKPiB9Cj4gCj4gYW5k IG9idmlvdXNseSBmaWxsIGluIHdoYXRldmVyIGVsc2Ugc2luayBpcnEgaGFuZGxpbmcgd2UgbmVl ZC4KPiAKPiBUaG91Z2h0cz8gRG9lcyB0aGF0IGxvb2sgc2FuZT8KClllcyBhbGwgdGhlIExpbmsg bWFpbnRlbmFuY2UgdGVzdHMgaW4gQ1RTIHNwZWMgZXhwZWN0IERQQ0QgcmVnaXN0ZXJzCjAyMDBo LTAyMDVoIHRvIGJlIHJlYWQgb24gbG9zcyBvZiBzeW1ib2wgbG9jayBvciBsb3NzIG9mIGNsb2Nr IHJlY292ZXJ5LgpTbyBJIHRoaW5rIGl0IG1ha2VzIHNlbnNlIHRvIHJlYWQgMDIwMC0wMjA1aC4K Cj4gCj4gPHNuaXA+Cj4gPiA+ICAKPiA+ID4gIHN0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3Rh dHVzCj4gPiA+ICBpbnRlbF9kcF9kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv ciwgYm9vbCBmb3JjZSkKPiA+ID4gIHsKPiA+ID4gIAlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2Rw ID0gaW50ZWxfYXR0YWNoZWRfZHAoY29ubmVjdG9yKTsKPiA+ID4gLQlzdHJ1Y3QgaW50ZWxfZGln aXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCA9IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKTsKPiA+ ID4gLQlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqaW50ZWxfZW5jb2RlciA9ICZpbnRlbF9kaWdfcG9y dC0+YmFzZTsKPiA+ID4gIAlzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICppbnRlbF9jb25uZWN0b3Ig PSB0b19pbnRlbF9jb25uZWN0b3IoY29ubmVjdG9yKTsKPiA+ID4gKwllbnVtIGRybV9jb25uZWN0 b3Jfc3RhdHVzIHN0YXR1czsKPiA+ID4gIAo+ID4gPiAgCURSTV9ERUJVR19LTVMoIltDT05ORUNU T1I6JWQ6JXNdXG4iLAo+ID4gPiAgCQkgICAgICBjb25uZWN0b3ItPmJhc2UuaWQsIGNvbm5lY3Rv ci0+bmFtZSk7Cj4gPiA+ICAKPiA+ID4gLQlpZiAoaW50ZWxfZHAtPmlzX21zdCkgewo+ID4gPiAt CQkvKiBNU1QgZGV2aWNlcyBhcmUgZGlzY29ubmVjdGVkIGZyb20gYSBtb25pdG9yIFBPViAqLwo+ ID4gPiAtCQlpbnRlbF9kcF91bnNldF9lZGlkKGludGVsX2RwKTsKPiA+ID4gLQkJaWYgKGludGVs X2VuY29kZXItPnR5cGUgIT0gSU5URUxfT1VUUFVUX0VEUCkKPiA+ID4gLQkJCWludGVsX2VuY29k ZXItPnR5cGUgPSBJTlRFTF9PVVRQVVRfRFA7Cj4gPiA+IC0JCXJldHVybiBjb25uZWN0b3Jfc3Rh dHVzX2Rpc2Nvbm5lY3RlZDsKPiA+ID4gLQl9Cj4gPiA+IC0KPiA+ID4gLQkvKiBJZiBmdWxsIGRl dGVjdCBpcyBub3QgcGVyZm9ybWVkIHlldCwgZG8gYSBmdWxsIGRldGVjdCAqLwo+ID4gPiAtCWlm ICghaW50ZWxfZHAtPmRldGVjdF9kb25lKQo+ID4gPiAtCQlpbnRlbF9kcF9sb25nX3B1bHNlKGlu dGVsX2RwLT5hdHRhY2hlZF9jb25uZWN0b3IpOwo+ID4gPiArCXN0YXR1cyA9IGludGVsX2RwX2xv bmdfcHVsc2UoaW50ZWxfY29ubmVjdG9yKTsKPiA+ID4gIAo+ID4gPiAtCWludGVsX2RwLT5kZXRl Y3RfZG9uZSA9IGZhbHNlOwo+ID4gPiArCWlmIChzdGF0dXMgPT0gY29ubmVjdG9yX3N0YXR1c19j b25uZWN0ZWQgfHwgaW50ZWxfZHAtPmlzX21zdCkKPiA+IAo+ID4gV2h5YSByZSB3ZSBub3QgY2hl Y2tpbmcgZm9yICghaW50ZWxfZW5jb2Rlci0+Y3J0Yy5iYXNlKSBiZWZvcmUgcmV0cmFpbmluZz8K PiA+IEkgaGFkIHNlZW4gaXNzdWVzIHdpdGggY29ubmVjdGVkIGJvb3QgY2FzZSB3aGVuIGNvbm5l Y3RvciBzdGF0dXMgaXMgY29ubmVjdGVkIGFuZCBpZiBpdAo+ID4gdHJpZXMgdG8gcmV0cmFpbiBp dCBmYWlscyB3aXRoIHJldHJpZXMgYmVjYXVzZSB0aGVyZSBpcyBubyBhY3RpdmUgcGlwZS4gSW4g dGhhdAo+ID4gY2FzZSBpdCBzaG91bGQgbm90IGF0dGVtcHQgdG8gcmV0cmFpbi4KPiAKPiBJIGNo YW5nZWQgaXQgdG8gdXNlIGludGVsX2RwLT5hY3RpdmVfc3RyZWFtcyBpbnN0ZWFkLiBUaGF0J2xs IHdvcmsgZm9yIE1TVAo+IGFzIHdlbGwgYXMgU1NULiBDaGVja2luZyBmb3IgdGhlIGNydGMgd291 bGQgb25seSBjb3ZlciBTU1QuCj4gCj4gPiAKPiA+IAo+ID4gPiArCQlpbnRlbF9kcF9saW5rX3Jl dHJhaW4oaW50ZWxfZHApOwo+ID4gPiAgCj4gPiA+IC0JaWYgKGlzX2VkcChpbnRlbF9kcCkgfHwg aW50ZWxfY29ubmVjdG9yLT5kZXRlY3RfZWRpZCkKPiA+ID4gLQkJcmV0dXJuIGNvbm5lY3Rvcl9z dGF0dXNfY29ubmVjdGVkOwo+ID4gPiAtCWVsc2UKPiA+ID4gLQkJcmV0dXJuIGNvbm5lY3Rvcl9z dGF0dXNfZGlzY29ubmVjdGVkOwo+ID4gPiArCXJldHVybiBzdGF0dXM7Cj4gPiA+ICB9Cj4gPiA+ ICAKPiA+ID4gIHN0YXRpYyB2b2lkCj4gPiA+IEBAIC00NzA2LDM5ICs0NjgyLDQxIEBAIGludGVs X2RwX2hwZF9wdWxzZShzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCwg Ym9vbCBsb25nX2hwZCkKPiA+ID4gIAkJICAgICAgcG9ydF9uYW1lKGludGVsX2RpZ19wb3J0LT5w b3J0KSwKPiA+ID4gIAkJICAgICAgbG9uZ19ocGQgPyAibG9uZyIgOiAic2hvcnQiKTsKPiA+ID4g IAo+ID4gPiArCWlmIChsb25nX2hwZCkKPiA+ID4gKwkJcmV0dXJuIElSUV9OT05FOwo+ID4gPiAr Cj4gPiA+ICAJcG93ZXJfZG9tYWluID0gaW50ZWxfZGlzcGxheV9wb3J0X2F1eF9wb3dlcl9kb21h aW4oaW50ZWxfZW5jb2Rlcik7Cj4gPiA+ICAJaW50ZWxfZGlzcGxheV9wb3dlcl9nZXQoZGV2X3By aXYsIHBvd2VyX2RvbWFpbik7Cj4gPiA+ICAKPiA+ID4gLQlpZiAobG9uZ19ocGQpIHsKPiA+ID4g LQkJaW50ZWxfZHBfbG9uZ19wdWxzZShpbnRlbF9kcC0+YXR0YWNoZWRfY29ubmVjdG9yKTsKPiA+ ID4gLQkJaWYgKGludGVsX2RwLT5pc19tc3QpCj4gPiA+IC0JCQlyZXQgPSBJUlFfSEFORExFRDsK PiA+ID4gLQkJZ290byBwdXRfcG93ZXI7Cj4gPiA+IC0KPiA+ID4gLQl9IGVsc2Ugewo+ID4gPiAt CQlpZiAoaW50ZWxfZHAtPmlzX21zdCkgewo+ID4gPiAtCQkJaWYgKGludGVsX2RwX2NoZWNrX21z dF9zdGF0dXMoaW50ZWxfZHApID09IC1FSU5WQUwpIHsKPiA+ID4gLQkJCQkvKgo+ID4gPiAtCQkJ CSAqIElmIHdlIHdlcmUgaW4gTVNUIG1vZGUsIGFuZCBkZXZpY2UgaXMgbm90Cj4gPiA+IC0JCQkJ ICogdGhlcmUsIGdldCBvdXQgb2YgTVNUIG1vZGUKPiA+ID4gLQkJCQkgKi8KPiA+ID4gLQkJCQlE Uk1fREVCVUdfS01TKCJNU1QgZGV2aWNlIG1heSBoYXZlIGRpc2FwcGVhcmVkICVkIHZzICVkXG4i LAo+ID4gPiAtCQkJCQkgICAgICBpbnRlbF9kcC0+aXNfbXN0LCBpbnRlbF9kcC0+bXN0X21nci5t c3Rfc3RhdGUpOwo+ID4gPiAtCQkJCWludGVsX2RwLT5pc19tc3QgPSBmYWxzZTsKPiA+ID4gLQkJ CQlkcm1fZHBfbXN0X3RvcG9sb2d5X21ncl9zZXRfbXN0KCZpbnRlbF9kcC0+bXN0X21nciwKPiA+ ID4gLQkJCQkJCQkJaW50ZWxfZHAtPmlzX21zdCk7Cj4gPiA+IC0JCQkJZ290byBwdXRfcG93ZXI7 Cj4gPiA+IC0JCQl9Cj4gPiA+IC0JCX0KPiA+ID4gLQo+ID4gPiAtCQlpZiAoIWludGVsX2RwLT5p c19tc3QpIHsKPiA+ID4gLQkJCWlmICghaW50ZWxfZHBfc2hvcnRfcHVsc2UoaW50ZWxfZHApKSB7 Cj4gPiA+IC0JCQkJaW50ZWxfZHBfbG9uZ19wdWxzZShpbnRlbF9kcC0+YXR0YWNoZWRfY29ubmVj dG9yKTsKPiA+ID4gLQkJCQlnb3RvIHB1dF9wb3dlcjsKPiA+ID4gLQkJCX0KPiA+ID4gKwlpZiAo aW50ZWxfZHAtPmlzX21zdCkgewo+ID4gPiArCQlpZiAoaW50ZWxfZHBfY2hlY2tfbXN0X3N0YXR1 cyhpbnRlbF9kcCkgPT0gLUVJTlZBTCkgewo+ID4gPiArCQkJLyoKPiA+ID4gKwkJCSAqIElmIHdl IHdlcmUgaW4gTVNUIG1vZGUsIGFuZCBkZXZpY2UgaXMgbm90Cj4gPiA+ICsJCQkgKiB0aGVyZSwg Z2V0IG91dCBvZiBNU1QgbW9kZQo+ID4gPiArCQkJICovCj4gPiA+ICsJCQlEUk1fREVCVUdfS01T KCJNU1QgZGV2aWNlIG1heSBoYXZlIGRpc2FwcGVhcmVkICVkIHZzICVkXG4iLAo+ID4gPiArCQkJ CSAgICAgIGludGVsX2RwLT5pc19tc3QsIGludGVsX2RwLT5tc3RfbWdyLm1zdF9zdGF0ZSk7Cj4g PiA+ICsJCQlpbnRlbF9kcC0+aXNfbXN0ID0gZmFsc2U7Cj4gPiA+ICsJCQlkcm1fZHBfbXN0X3Rv cG9sb2d5X21ncl9zZXRfbXN0KCZpbnRlbF9kcC0+bXN0X21nciwKPiA+ID4gKwkJCQkJCQlpbnRl bF9kcC0+aXNfbXN0KTsKPiA+ID4gKwkJCWdvdG8gcHV0X3Bvd2VyOwo+ID4gPiAgCQl9Cj4gPiA+ ICsJfSBlbHNlIHsKPiA+ID4gKwkJaWYgKCFpbnRlbF9kcF9zaG9ydF9wdWxzZShpbnRlbF9kcCkp Cj4gPiA+ICsJCQlnb3RvIHB1dF9wb3dlcjsKPiA+ID4gIAl9Cj4gPiA+ICAKPiA+ID4gKwkvKgo+ ID4gPiArCSAqIExpbmsgcmV0cmFpbmluZyBoYXBwZW5zIGZyb20gdGhlIGhvdHBsdWcgd29yaywK PiA+ID4gKwkgKiBjaGVjayBpZiB3ZSBtaWdodCBuZWVkIHRvIHNjaGR1bGUgaXQuCj4gPiA+ICsJ ICoKPiA+ID4gKwkgKiBUaGVyZSBoYXMgYmVlbiBrbm93biBpc3N1ZXMgb2YgbGluayBsb3NzCj4g PiA+ICsJICogdHJpZ2dlcnJpbmcgbG9uZyBwdWxzZSwgc28gbGV0J3MgY2hlY2sgYm90aAo+ID4g PiArCSAqIGZvciBzaG9ydCBhbmQgbG9uZyBwdWxzZS4KPiA+ID4gKwkgKi8KPiA+ID4gKwlpZiAo aW50ZWxfZHBfbGlua19uZWVkc19yZXRyYWluKGludGVsX2RwKSkKPiA+ID4gKwkJZ290byBwdXRf cG93ZXI7Cj4gPiA+ICsKPiA+ID4gIAlyZXQgPSBJUlFfSEFORExFRDsKPiA+ID4gIAo+ID4gPiAg cHV0X3Bvd2VyOgo+ID4gPiAtLSAKPiA+ID4gMi43LjQKPiA+ID4gCj4gCj4gLS0gCj4gVmlsbGUg U3lyasOkbMOkCj4gSW50ZWwgT1RDCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2ludGVsLWdmeAo=