From mboxrd@z Thu Jan 1 00:00:00 1970 From: Manasi Navare Subject: Re: [PATCH v2 11/14] drm/i915: Fallback to lower link rate and lane count during link training Date: Wed, 7 Sep 2016 09:48:25 -0700 Message-ID: <20160907164825.GA29651@intel.com> References: <1472767699-31211-12-git-send-email-manasi.d.navare@intel.com> <1473207238-3490-3-git-send-email-manasi.d.navare@intel.com> <1473241669.28727.22.camel@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1EEAE6E926 for ; Wed, 7 Sep 2016 16:48:25 +0000 (UTC) Content-Disposition: inline In-Reply-To: <1473241669.28727.22.camel@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Mika Kahola Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCBTZXAgMDcsIDIwMTYgYXQgMTI6NDc6NDlQTSArMDMwMCwgTWlrYSBLYWhvbGEgd3Jv dGU6Cj4gT24gVHVlLCAyMDE2LTA5LTA2IGF0IDE3OjEzIC0wNzAwLCBNYW5hc2kgTmF2YXJlIHdy b3RlOgo+ID4gQWNjb3JkaW5nIHRvIHRoZSBEaXNwbGF5UG9ydCBTcGVjLCBpbiBjYXNlIG9mIENs b2NrIFJlY292ZXJ5IGZhaWx1cmUKPiA+IHRoZSBsaW5rIHRyYWluaW5nIHNlcXVlbmNlIHNob3Vs ZCBmYWxsIGJhY2sgdG8gdGhlIGxvd2VyIGxpbmsgcmF0ZQo+ID4gZm9sbG93ZWQgYnkgbG93ZXIg bGFuZSBjb3VudCB1bnRpbCBDUiBzdWNjZWVkcy4KPiA+IE9uIENSIHN1Y2Nlc3MsIHRoZSBzZXF1 ZW5jZSBwcm9jZWVkcyB3aXRoIENoYW5uZWwgRVEuCj4gPiBJbiBjYXNlIG9mIENoYW5uZWwgRVEg ZmFpbHVyZXMsIGl0IHNob3VsZCBmYWxsYmFjayB0bwo+ID4gbG93ZXIgbGluayByYXRlIGFuZCBs YW5lIGNvdW50IGFuZCBzdGFydCB0aGUgQ1IgcGhhc2UgYWdhaW4uCj4gPiAKPiA+IHYyOgo+ID4g KiBBZGQgYSBoZWxwZXIgZnVuY3Rpb24gdG8gcmV0dXJuIGluZGV4IG9mIHJlcXVlc3RlZCBsaW5r IHJhdGUKPiA+IGludG8gY29tbW9uX3JhdGVzIGFycmF5Cj4gPiAqIENoYW5nZWQgdGhlIGxpbmsg cmF0ZSBmYWxsYmFjayBsb29wIHRvIG1ha2UgdXNlCj4gPiBvZiBjb21tb25fcmF0ZXMgYXJyYXkg KE1pa2EgS2Fob2xhKQo+ID4gKiBDaGFuZ2VkIElOVEVMX0lORk8gdG8gSU5URUxfR0VOIChEYXZp ZCBXZWluZWhhbGwpCj4gPiAKPiA+IFNpZ25lZC1vZmYtYnk6IE1hbmFzaSBOYXZhcmUgPG1hbmFz aS5kLm5hdmFyZUBpbnRlbC5jb20+Cj4gPiAtLS0KPiA+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZGRpLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfCAxMjUKPiA+ICsrKysrKysr KysrKysrKysrKysrKysrLS0tCj4gPiDCoGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmPC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDE1ICsrKysKPiA+IMKgZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZHBfbGlua190cmFpbmluZy5jIHzCoMKgMTIgKystCj4gPiDCoGRy aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHzCoMKgwqA3ICstCj4gPiDCoDQgZmlsZXMgY2hhbmdlZCwgMTQ1IGluc2VydGlvbnMoKyksIDE0 IGRlbGV0aW9ucygtKQo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZGRpLmMKPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMKPiA+IGlu ZGV4IDY3YTZhMGIuLmUzOGJmNGIgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kZGkuYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMK PiA+IEBAIC0xNjM0LDE5ICsxNjM0LDE4IEBAIHZvaWQgaW50ZWxfZGRpX2Nsa19zZWxlY3Qoc3Ry dWN0Cj4gPiBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ID4gwqAJfQo+ID4gwqB9Cj4gPiDCoAo+ ID4gLXN0YXRpYyB2b2lkIGludGVsX2RkaV9wcmVfZW5hYmxlX2RwKHN0cnVjdCBpbnRlbF9lbmNv ZGVyICplbmNvZGVyLAo+ID4gK3N0YXRpYyB2b2lkIGludGVsX2RkaV9wcmVfZW5hYmxlX2VkcChz dHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiA+IMKgCQkJCcKgwqDCoMKgaW50IGxpbmtf cmF0ZSwgdWludDMyX3QKPiA+IGxhbmVfY291bnQsCj4gPiAtCQkJCcKgwqDCoMKgc3RydWN0IGlu dGVsX3NoYXJlZF9kcGxsICpwbGwsCj4gPiAtCQkJCcKgwqDCoMKgYm9vbCBsaW5rX21zdCkKPiA+ ICsJCQkJwqDCoMKgwqBzdHJ1Y3QgaW50ZWxfc2hhcmVkX2RwbGwgKnBsbCkKPiA+IMKgewo+ID4g wqAJc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IGVuY190b19pbnRlbF9kcCgmZW5jb2Rlci0+ YmFzZSk7Cj4gPiDCoAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1 KGVuY29kZXItCj4gPiA+YmFzZS5kZXYpOwo+ID4gwqAJZW51bSBwb3J0IHBvcnQgPSBpbnRlbF9k ZGlfZ2V0X2VuY29kZXJfcG9ydChlbmNvZGVyKTsKPiA+IMKgCj4gPiDCoAlpbnRlbF9kcF9zZXRf bGlua19wYXJhbXMoaW50ZWxfZHAsIGxpbmtfcmF0ZSwgbGFuZV9jb3VudCwKPiA+IC0JCQkJwqBs aW5rX21zdCk7Cj4gPiAtCWlmIChlbmNvZGVyLT50eXBlID09IElOVEVMX09VVFBVVF9FRFApCj4g PiAtCQlpbnRlbF9lZHBfcGFuZWxfb24oaW50ZWxfZHApOwo+ID4gKwkJCQnCoGZhbHNlKTsKPiA+ ICsKPiA+ICsJaW50ZWxfZWRwX3BhbmVsX29uKGludGVsX2RwKTsKPiA+IMKgCj4gPiDCoAlpbnRl bF9kZGlfY2xrX3NlbGVjdChlbmNvZGVyLCBwbGwpOwo+ID4gwqAJaW50ZWxfcHJlcGFyZV9kcF9k ZGlfYnVmZmVycyhlbmNvZGVyKTsKPiA+IEBAIC0xNjU3LDYgKzE2NTYsMjkgQEAgc3RhdGljIHZv aWQgaW50ZWxfZGRpX3ByZV9lbmFibGVfZHAoc3RydWN0Cj4gPiBpbnRlbF9lbmNvZGVyICplbmNv ZGVyLAo+ID4gwqAJCWludGVsX2RwX3N0b3BfbGlua190cmFpbihpbnRlbF9kcCk7Cj4gPiDCoH0K PiA+IMKgCj4gPiArc3RhdGljIHZvaWQgaW50ZWxfZGRpX3ByZV9lbmFibGVfZHAoc3RydWN0IGlu dGVsX2VuY29kZXIgKmVuY29kZXIsCj4gPiArCQkJCcKgwqDCoMKgaW50IGxpbmtfcmF0ZSwgdWlu dDMyX3QKPiA+IGxhbmVfY291bnQsCj4gPiArCQkJCcKgwqDCoMKgc3RydWN0IGludGVsX3NoYXJl ZF9kcGxsICpwbGwsCj4gPiArCQkJCcKgwqDCoMKgYm9vbCBsaW5rX21zdCkKPiA+ICt7Cj4gPiAr CXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAoJmVuY29kZXItPmJh c2UpOwo+ID4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGVu Y29kZXItCj4gPiA+YmFzZS5kZXYpOwo+ID4gKwlzdHJ1Y3QgaW50ZWxfc2hhcmVkX2RwbGxfY29u ZmlnIHRtcF9wbGxfY29uZmlnOwo+ID4gKwo+ID4gKwkvKiBEaXNhYmxlIHRoZSBQTEwgYW5kIG9i dGFpbiB0aGUgUExMIGZvciBMaW5rIFRyYWluaW5nCj4gPiArCcKgKiB0aGF0IHN0YXJ0cyB3aXRo IGhpZ2hlc3QgbGluayByYXRlIGFuZCBsYW5lIGNvdW50Lgo+ID4gKwnCoCovCj4gPiArCXRtcF9w bGxfY29uZmlnID0gcGxsLT5jb25maWc7Cj4gPiArCXBsbC0+ZnVuY3MuZGlzYWJsZShkZXZfcHJp diwgcGxsKTsKPiA+ICsJcGxsLT5jb25maWcuY3J0Y19tYXNrID0gMDsKPiA+ICsKPiA+ICsJLyog SWYgTGluayBUcmFpbmluZyBmYWlscywgc2VuZCBhIHVldmVudCB0byBnZW5lcmF0ZSBhCj4gPiBo b3RwbHVnICovCj4gPiArCWlmICghKGludGVsX2RkaV9saW5rX3RyYWluKGludGVsX2RwLCBsaW5r X3JhdGUsIGxhbmVfY291bnQsCj4gPiBsaW5rX21zdCwKPiA+ICsJCQkJwqDCoMKgZmFsc2UpKSkK PiA+ICsJCWRybV9rbXNfaGVscGVyX2hvdHBsdWdfZXZlbnQoZW5jb2Rlci0+YmFzZS5kZXYpOwo+ ID4gKwlwbGwtPmNvbmZpZyA9IHRtcF9wbGxfY29uZmlnOwo+ID4gK30KPiA+ICsKPiA+IMKgc3Rh dGljIHZvaWQgaW50ZWxfZGRpX3ByZV9lbmFibGVfaGRtaShzdHJ1Y3QgaW50ZWxfZW5jb2RlciAq ZW5jb2RlciwKPiA+IMKgCQkJCcKgwqDCoMKgwqDCoGJvb2wgaGFzX2hkbWlfc2luaywKPiA+IMKg CQkJCcKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlCj4gPiAqYWRqdXN0ZWRfbW9k ZSwKPiA+IEBAIC0xNjkwLDIwICsxNzEyLDI2IEBAIHN0YXRpYyB2b2lkIGludGVsX2RkaV9wcmVf ZW5hYmxlKHN0cnVjdAo+ID4gaW50ZWxfZW5jb2RlciAqaW50ZWxfZW5jb2RlciwKPiA+IMKgCXN0 cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhlbmNvZGVyLT5jcnRjKTsKPiA+ IMKgCWludCB0eXBlID0gaW50ZWxfZW5jb2Rlci0+dHlwZTsKPiA+IMKgCj4gPiAtCWlmICh0eXBl ID09IElOVEVMX09VVFBVVF9EUCB8fCB0eXBlID09IElOVEVMX09VVFBVVF9FRFApIHsKPiA+ICsJ aWYgKHR5cGUgPT0gSU5URUxfT1VUUFVUX0VEUCkKPiA+ICsJCWludGVsX2RkaV9wcmVfZW5hYmxl X2VkcChpbnRlbF9lbmNvZGVyLAo+ID4gKwkJCQkJY3J0Yy0+Y29uZmlnLT5wb3J0X2Nsb2NrLAo+ ID4gKwkJCQkJY3J0Yy0+Y29uZmlnLT5sYW5lX2NvdW50LAo+ID4gKwkJCQkJY3J0Yy0+Y29uZmln LT5zaGFyZWRfZHBsbCk7Cj4gPiArCj4gPiArCWlmICh0eXBlID09IElOVEVMX09VVFBVVF9EUCkK PiA+IMKgCQlpbnRlbF9kZGlfcHJlX2VuYWJsZV9kcChpbnRlbF9lbmNvZGVyLAo+ID4gwqAJCQkJ CWNydGMtPmNvbmZpZy0+cG9ydF9jbG9jaywKPiA+IMKgCQkJCQljcnRjLT5jb25maWctPmxhbmVf Y291bnQsCj4gPiDCoAkJCQkJY3J0Yy0+Y29uZmlnLT5zaGFyZWRfZHBsbCwKPiA+IMKgCQkJCQlp bnRlbF9jcnRjX2hhc190eXBlKGNydGMtCj4gPiA+Y29uZmlnLAo+ID4gwqAJCQkJCQkJwqDCoMKg wqBJTlRFTF9PVQo+ID4gVFBVVF9EUF9NU1QpKTsKPiA+IC0JfQo+ID4gLQlpZiAodHlwZSA9PSBJ TlRFTF9PVVRQVVRfSERNSSkgewo+ID4gKwo+ID4gKwlpZiAodHlwZSA9PSBJTlRFTF9PVVRQVVRf SERNSSkKPiA+IMKgCQlpbnRlbF9kZGlfcHJlX2VuYWJsZV9oZG1pKGludGVsX2VuY29kZXIsCj4g PiDCoAkJCQkJwqDCoGNydGMtPmNvbmZpZy0KPiA+ID5oYXNfaGRtaV9zaW5rLAo+ID4gwqAJCQkJ CcKgwqAmY3J0Yy0+Y29uZmlnLQo+ID4gPmJhc2UuYWRqdXN0ZWRfbW9kZSwKPiA+IMKgCQkJCQnC oMKgY3J0Yy0+Y29uZmlnLQo+ID4gPnNoYXJlZF9kcGxsKTsKPiA+IC0JfQo+ID4gKwo+ID4gwqB9 Cj4gPiDCoAo+ID4gwqBzdGF0aWMgdm9pZCBpbnRlbF9kZGlfcG9zdF9kaXNhYmxlKHN0cnVjdCBp bnRlbF9lbmNvZGVyCj4gPiAqaW50ZWxfZW5jb2RlciwKPiA+IEBAIC0yNDMxLDYgKzI0NTksODMg QEAgaW50ZWxfZGRpX2dldF9saW5rX2RwbGwoc3RydWN0IGludGVsX2RwCj4gPiAqaW50ZWxfZHAs IGludCBjbG9jaykKPiA+IMKgCXJldHVybiBwbGw7Cj4gPiDCoH0KPiA+IMKgCj4gPiArYm9vbAo+ ID4gK2ludGVsX2RkaV9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIGludCBt YXhfbGlua19yYXRlLAo+ID4gKwkJwqDCoMKgwqDCoHVpbnQ4X3QgbWF4X2xhbmVfY291bnQsIGJv b2wgbGlua19tc3QsIGJvb2wKPiA+IGlzX3VwZnJvbnQpCj4gPiArewo+ID4gKwlzdHJ1Y3QgaW50 ZWxfY29ubmVjdG9yICpjb25uZWN0b3IgPSBpbnRlbF9kcC0KPiA+ID5hdHRhY2hlZF9jb25uZWN0 b3I7Cj4gPiArCXN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyID0gY29ubmVjdG9yLT5lbmNv ZGVyOwo+ID4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGVu Y29kZXItCj4gPiA+YmFzZS5kZXYpOwo+ID4gKwlzdHJ1Y3QgaW50ZWxfc2hhcmVkX2RwbGwgKnBs bDsKPiA+ICsJc3RydWN0IGludGVsX3NoYXJlZF9kcGxsX2NvbmZpZyB0bXBfcGxsX2NvbmZpZzsK PiA+ICsJaW50IGxpbmtfcmF0ZSwgbGlua19yYXRlX2luZGV4Owo+ID4gKwl1aW50OF90IGxhbmVf Y291bnQ7Cj4gPiArCWludCBjb21tb25fcmF0ZXNbRFBfTUFYX1NVUFBPUlRFRF9SQVRFU10gPSB7 fTsKPiA+ICsJYm9vbCByZXQgPSBmYWxzZTsKPiA+ICsKPiA+ICsJbGlua19yYXRlX2luZGV4ID0g aW50ZWxfZHBfbGlua19yYXRlX2luZGV4KGludGVsX2RwLAo+ID4gY29tbW9uX3JhdGVzLAo+ID4g KwkJCQkJCcKgwqDCoG1heF9saW5rX3JhdGUpOwo+ID4gKwlpZiAobGlua19yYXRlX2luZGV4IDwg MCkgewo+ID4gKwkJRFJNX0VSUk9SKCJJbnZhbGlkIExpbmsgUmF0ZVxuIik7Cj4gPiArCQlyZXR1 cm4gZmFsc2U7Cj4gPiArCX0KPiA+ICsJZm9yIChsYW5lX2NvdW50ID0gbWF4X2xhbmVfY291bnQ7 IGxhbmVfY291bnQgPiAwOyBsYW5lX2NvdW50Cj4gPiA+Pj0gMSkgewo+ID4gKwkJZm9yIChsaW5r X3JhdGUgPSBjb21tb25fcmF0ZXNbbGlua19yYXRlX2luZGV4XTsKPiA+ICsJCcKgwqDCoMKgwqBs aW5rX3JhdGVfaW5kZXggPj0gMDsgbGlua19yYXRlX2luZGV4IC0tKSB7Cj4gPiArCQkJcGxsID0g aW50ZWxfZGRpX2dldF9saW5rX2RwbGwoaW50ZWxfZHAsCj4gPiBsaW5rX3JhdGUpOwo+ID4gKwkJ CWlmIChwbGwgPT0gTlVMTCkgewo+ID4gKwkJCQlEUk1fRVJST1IoIkNvdWxkIG5vdCBmaW5kIERQ TEwgZm9yCj4gPiBsaW5rICIKPiA+ICsJCQkJCcKgwqAidHJhaW5pbmcuXG4iKTsKPiA+ICsJCQkJ cmV0dXJuIGZhbHNlOwo+ID4gKwkJCX0KPiA+ICsJCQl0bXBfcGxsX2NvbmZpZyA9IHBsbC0+Y29u ZmlnOwo+ID4gKwkJCXBsbC0+ZnVuY3MuZW5hYmxlKGRldl9wcml2LCBwbGwpOwo+ID4gKwo+ID4g KwkJCWludGVsX2RwX3NldF9saW5rX3BhcmFtcyhpbnRlbF9kcCwKPiA+IGxpbmtfcmF0ZSwKPiA+ ICsJCQkJCQnCoGxhbmVfY291bnQsCj4gPiBsaW5rX21zdCk7Cj4gPiArCj4gPiArCQkJaW50ZWxf ZGRpX2Nsa19zZWxlY3QoZW5jb2RlciwgcGxsKTsKPiA+ICsJCQlpbnRlbF9wcmVwYXJlX2RwX2Rk aV9idWZmZXJzKGVuY29kZXIpOwo+ID4gKwkJCWludGVsX2RkaV9pbml0X2RwX2J1Zl9yZWcoZW5j b2Rlcik7Cj4gPiArCQkJaW50ZWxfZHBfc2lua19kcG1zKGludGVsX2RwLAo+ID4gRFJNX01PREVf RFBNU19PTik7Cj4gPiArCQkJcmV0ID0gaW50ZWxfZHBfc3RhcnRfbGlua190cmFpbihpbnRlbF9k cCk7Cj4gPiArCQkJaWYgKHJldCkKPiA+ICsJCQkJYnJlYWs7Cj4gPiArCj4gPiArCQkJLyogRGlz YWJsZSBwb3J0IGZvbGxvd2VkIGJ5IFBMTCBmb3IgbmV4dAo+ID4gcmV0cnkvY2xlYW4gdXAgKi8K PiA+ICsJCQlpbnRlbF9kZGlfcG9zdF9kaXNhYmxlKGVuY29kZXIsIE5VTEwsIE5VTEwpOwo+ID4g KwkJCXBsbC0+ZnVuY3MuZGlzYWJsZShkZXZfcHJpdiwgcGxsKTsKPiA+ICsJCQlwbGwtPmNvbmZp ZyA9IHRtcF9wbGxfY29uZmlnOwo+ID4gKwkJfQo+ID4gKwkJaWYgKHJldCkgewo+ID4gKwkJCURS TV9ERUJVR19LTVMoIkxpbmsgVHJhaW5pbmcgc3VjY2Vzc2Z1bCBhdAo+ID4gbGluayByYXRlOiAi Cj4gPiArCQkJCcKgwqDCoMKgwqDCoCIlZCBsYW5lOiVkXG4iLCBsaW5rX3JhdGUsCj4gPiBsYW5l X2NvdW50KTsKPiA+ICsJCQlicmVhazsKPiA+ICsJCX0KPiA+ICsJfQo+ID4gKwlpbnRlbF9kcF9z dG9wX2xpbmtfdHJhaW4oaW50ZWxfZHApOwo+ID4gKwo+ID4gKwlpZiAoaXNfdXBmcm9udCkgewo+ ID4gKwkJRFJNX0RFQlVHX0tNUygiVXBmcm9udCBsaW5rIHRyYWluICVzOiBsaW5rX2Nsb2NrOiVk Cj4gPiBsYW5lczolZFxuIiwKPiA+ICsJCQnCoMKgwqDCoMKgwqByZXQgPyAiUGFzc2VkIiA6ICJG YWlsZWQiLAo+ID4gKwkJCcKgwqDCoMKgwqDCoGxpbmtfcmF0ZSwgbGFuZV9jb3VudCk7Cj4gPiAr CQkvKiBEaXNhYmxlIHBvcnQgZm9sbG93ZWQgYnkgUExMIGZvciBuZXh0IHJldHJ5L2NsZWFuCj4g PiB1cCAqLwo+ID4gKwkJaW50ZWxfZGRpX3Bvc3RfZGlzYWJsZShlbmNvZGVyLCBOVUxMLCBOVUxM KTsKPiA+ICsJCXBsbC0+ZnVuY3MuZGlzYWJsZShkZXZfcHJpdiwgcGxsKTsKPiA+ICsJCXBsbC0+ Y29uZmlnID0gdG1wX3BsbF9jb25maWc7Cj4gSW4gYSBjYXNlIHdoZXJlIGxpbmsgdHJhaW5pbmcg d2FzIHN1Y2Nlc3NmdWwsIEkgZ3Vlc3Mgd2UgY291bGQgbGVhdmUKPiB0aGUgcG9ydCBvbi4gSXMg dGhlcmUgYSByZWFzb24gd2h5IHdlIHNob3VsZCBkbyBvdGhlcndpc2U/Cj4KClRoZSBwb3J0IG5l ZWRzIHRvIGJlIHR1cm5lZCBvZmYgYW5kIHBsbHMgbmVlZCB0byBiZSBkaXNhYmxlZCBpbiBjYXNl IG9mIHVwZnJvbnQKc2luY2Ugd2UgZG9udCB3YW50IHRvIGNoYW5nZSBhbnkgSFcgc3RhdGUgeWV0 LiBVcGZyb250IHRyYWluaW5nIG9ubHkgaGFwcGVucwp0byBjYWNoZSB0aGUgbWF4IGxhbmVzIGFu ZCBsYXggbGluayByYXRlIHZhbHVlcyBhbmQgZG9lcyBub3QgY2hhbmdlIGFueSBIVyBzdGF0ZS4K CiAKPiAKPiA+ICsJCWlmIChyZXQpIHsKPiA+ICsJCQkvKiBTYXZlIHRoZSB1cGZyb250IHZhbHVl cyAqLwo+ID4gKwkJCWludGVsX2RwLT5tYXhfbGFuZXNfdXBmcm9udCA9IGxhbmVfY291bnQ7Cj4g PiArCQkJaW50ZWxfZHAtPm1heF9saW5rX3JhdGVfdXBmcm9udCA9IGxpbmtfcmF0ZTsKPiBNeSBj b21waWxlciB3YXNuJ3QgcmVhbGx5IGEgYmlnIGZhbiBvZiB0aGVzZSBuZXcgbWVtYmVycyBpbiBh IGludGVsX2RwCj4gc3RydWN0IHNvIEkgdGhlc2UgbmVlZHMgdG8gYmUgZGVmaW5lZCBpbiBpbnRl bF9kcnYuaAo+IAo+IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RkaS5jOiBJbiBmdW5jdGlv biDigJhpbnRlbF9kZGlfbGlua190cmFpbuKAmToKPiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9kZGkuYzoyNTI4OjEyOiBlcnJvcjog4oCYc3RydWN0IGludGVsX2Rw4oCZIGhhcwo+IG5vIG1l bWJlciBuYW1lZCDigJhtYXhfbGFuZXNfdXBmcm9udOKAmQo+IMKgwqDCoMKgaW50ZWxfZHAtPm1h eF9sYW5lc191cGZyb250ID0gbGFuZV9jb3VudDsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBe Cj4gZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRpLmM6MjUyOToxMjogZXJyb3I6IOKAmHN0 cnVjdCBpbnRlbF9kcOKAmSBoYXMKPiBubyBtZW1iZXIgbmFtZWQg4oCYbWF4X2xpbmtfcmF0ZV91 cGZyb2504oCZCj4KClRoaXMgcHJvYmFibHkgaGFwcGVuZWQgZHVlIHRvIHJlYmFzaW5nIGlzc3Vl LiBBY3R1YWxseSB0aGlzIGVudGlyZSBpZiB1cGZyb250IHBhcnQKc2hvdWxkIGJlIGFkZGVkIGlu IHRoZSBuZXh0IHBhdGNoIHRoYXQgZW5hYmxlcyB1cGZyb250IGxpbmsgdHJhaW5pbmcuIFRoYXQg aXMgd2hlcmUgCnRoZXNlIGZpZWxkcyBnZXQgZGVmaW5lZCBpbnNpZGUgdGhlIGludGVsX2RwIHN0 cnVjdHVyZS4KSSB3aWxsIGNvcnJlY3QgdGhpcyBhbmQgc3VibWl0IGEgbmV3IHJldmlzaW9uLgoK TWFuYXNpCj4gwqDCoMKgwqBpbnRlbF9kcC0+bWF4X2xpbmtfcmF0ZV91cGZyb250ID0gbGlua19y YXRlOwo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiArCWlmICghbGFuZV9jb3VudCkKPiA+ICsJ CURSTV9FUlJPUigiTGluayBUcmFpbmluZyBGYWlsZWRcbiIpOwo+ID4gKwo+ID4gKwlyZXR1cm4g cmV0Owo+ID4gK30KPiA+ICsKPiA+IMKgdm9pZCBpbnRlbF9kZGlfaW5pdChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCBlbnVtIHBvcnQgcG9ydCkKPiA+IMKgewo+ID4gwqAJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwo+ID4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZHAuYwo+ID4gaW5kZXggZGZkYmU2NS4uMzkxZTM4NCAxMDA2NDQKPiA+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2RwLmMKPiA+IEBAIC0xNDQzLDYgKzE0NDMsMjEgQEAgaW50ZWxfZHBfbWF4X2xpbmtf cmF0ZShzdHJ1Y3QgaW50ZWxfZHAKPiA+ICppbnRlbF9kcCkKPiA+IMKgCXJldHVybiByYXRlc1ts ZW4gLSAxXTsKPiA+IMKgfQo+ID4gwqAKPiA+ICtpbnQgaW50ZWxfZHBfbGlua19yYXRlX2luZGV4 KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIGludAo+ID4gKmNvbW1vbl9yYXRlcywKPiA+ICsJ CQnCoMKgwqDCoMKgaW50IGxpbmtfcmF0ZSkKPiA+ICt7Cj4gPiArCWludCBjb21tb25fbGVuOwo+ ID4gKwlpbnQgaW5kZXg7Cj4gPiArCj4gPiArCWNvbW1vbl9sZW4gPSBpbnRlbF9kcF9jb21tb25f cmF0ZXMoaW50ZWxfZHAsIGNvbW1vbl9yYXRlcyk7Cj4gPiArCWZvciAoaW5kZXggPSBjb21tb25f bGVuIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkgewo+ID4gKwkJaWYgKGxpbmtfcmF0ZSA9PSBj b21tb25fcmF0ZXNbaW5kZXhdKQo+ID4gKwkJCXJldHVybiBpbmRleDsKPiA+ICsJfQo+ID4gKwo+ ID4gKwlyZXR1cm4gLTE7Cj4gPiArfQo+ID4gKwo+ID4gwqBpbnQgaW50ZWxfZHBfcmF0ZV9zZWxl Y3Qoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgaW50IHJhdGUpCj4gPiDCoHsKPiA+IMKgCXJl dHVybiByYXRlX3RvX2luZGV4KHJhdGUsIGludGVsX2RwLT5zaW5rX3JhdGVzKTsKPiA+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcF9saW5rX3RyYWluaW5nLmMKPiA+ IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBfbGlua190cmFpbmluZy5jCj4gPiBpbmRl eCAwZmI4NDVkLi43MDVkYmQxIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZHBfbGlua190cmFpbmluZy5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9kcF9saW5rX3RyYWluaW5nLmMKPiA+IEBAIC0zMDksOSArMzA5LDE1IEBAIHZvaWQgaW50 ZWxfZHBfc3RvcF9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9kcAo+ID4gKmludGVsX2RwKQo+ID4g wqAJCQkJRFBfVFJBSU5JTkdfUEFUVEVSTl9ESVNBQkxFKTsKPiA+IMKgfQo+ID4gwqAKPiA+IC12 b2lkCj4gPiArYm9vbAo+ID4gwqBpbnRlbF9kcF9zdGFydF9saW5rX3RyYWluKHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHApCj4gPiDCoHsKPiA+IC0JaW50ZWxfZHBfbGlua190cmFpbmluZ19jbG9j a19yZWNvdmVyeShpbnRlbF9kcCk7Cj4gPiAtCWludGVsX2RwX2xpbmtfdHJhaW5pbmdfY2hhbm5l bF9lcXVhbGl6YXRpb24oaW50ZWxfZHApOwo+ID4gKwlib29sIHJldDsKPiA+ICsKPiA+ICsJaWYg KGludGVsX2RwX2xpbmtfdHJhaW5pbmdfY2xvY2tfcmVjb3ZlcnkoaW50ZWxfZHApKSB7Cj4gPiAr CQlyZXQgPQo+ID4gaW50ZWxfZHBfbGlua190cmFpbmluZ19jaGFubmVsX2VxdWFsaXphdGlvbihp bnRlbF9kcCk7Cj4gPiArCQlpZiAocmV0KQo+ID4gKwkJCXJldHVybiB0cnVlOwo+ID4gKwl9Cj4g PiArCXJldHVybiBmYWxzZTsKPiA+IMKgfQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2Rydi5oCj4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5o Cj4gPiBpbmRleCBlNWJjOTc2Li45MGU3YjE1IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2Rydi5oCj4gPiBAQCAtMTE2MCw2ICsxMTYwLDkgQEAgdm9pZCBpbnRlbF9kZGlfY2xvY2tfZ2V0 KHN0cnVjdCBpbnRlbF9lbmNvZGVyCj4gPiAqZW5jb2RlciwKPiA+IMKgCQkJwqBzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpOwo+ID4gwqB2b2lkIGludGVsX2RkaV9zZXRfdmNf cGF5bG9hZF9hbGxvYyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGJvb2wKPiA+IHN0YXRlKTsKPiA+ IMKgdWludDMyX3QgZGRpX3NpZ25hbF9sZXZlbHMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCk7 Cj4gPiArYm9vbCBpbnRlbF9kZGlfbGlua190cmFpbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2Rw LCBpbnQKPiA+IG1heF9saW5rX3JhdGUsCj4gPiArCQkJwqDCoHVpbnQ4X3QgbWF4X2xhbmVfY291 bnQsIGJvb2wgbGlua19tc3QsCj4gPiArCQkJwqDCoGJvb2wgaXNfdXBmcm9udCk7Cj4gPiDCoHN0 cnVjdCBpbnRlbF9zaGFyZWRfZHBsbCAqaW50ZWxfZGRpX2dldF9saW5rX2RwbGwoc3RydWN0IGlu dGVsX2RwCj4gPiAqaW50ZWxfZHAsCj4gPiDCoAkJCQkJCcKgwqBpbnQgY2xvY2spOwo+ID4gwqB1 bnNpZ25lZCBpbnQgaW50ZWxfZmJfYWxpZ25faGVpZ2h0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs Cj4gPiBAQCAtMTM4MSw3ICsxMzg0LDcgQEAgYm9vbCBpbnRlbF9kcF9pbml0X2Nvbm5lY3Rvcihz dHJ1Y3QKPiA+IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQsCj4gPiDCoHZvaWQg aW50ZWxfZHBfc2V0X2xpbmtfcGFyYW1zKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4gPiDC oAkJCcKgwqDCoMKgwqDCoGludCBsaW5rX3JhdGUsIHVpbnQ4X3QgbGFuZV9jb3VudCwKPiA+IMKg CQkJwqDCoMKgwqDCoMKgYm9vbCBsaW5rX21zdCk7Cj4gPiAtdm9pZCBpbnRlbF9kcF9zdGFydF9s aW5rX3RyYWluKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOwo+ID4gK2Jvb2wgaW50ZWxfZHBf c3RhcnRfbGlua190cmFpbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsKPiA+IMKgdm9pZCBp bnRlbF9kcF9zdG9wX2xpbmtfdHJhaW4oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCk7Cj4gPiDC oHZvaWQgaW50ZWxfZHBfc2lua19kcG1zKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIGludCBt b2RlKTsKPiA+IMKgdm9pZCBpbnRlbF9kcF9lbmNvZGVyX3Jlc2V0KHN0cnVjdCBkcm1fZW5jb2Rl ciAqZW5jb2Rlcik7Cj4gPiBAQCAtMTQwMyw2ICsxNDA2LDggQEAgdm9pZCBpbnRlbF9kcF9hZGRf cHJvcGVydGllcyhzdHJ1Y3QgaW50ZWxfZHAKPiA+ICppbnRlbF9kcCwgc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvCj4gPiDCoHZvaWQgaW50ZWxfZHBfbXN0X3N1c3BlbmQoc3RydWN0IGRybV9kZXZp Y2UgKmRldik7Cj4gPiDCoHZvaWQgaW50ZWxfZHBfbXN0X3Jlc3VtZShzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2KTsKPiA+IMKgaW50IGludGVsX2RwX21heF9saW5rX3JhdGUoc3RydWN0IGludGVsX2Rw ICppbnRlbF9kcCk7Cj4gPiAraW50IGludGVsX2RwX2xpbmtfcmF0ZV9pbmRleChzdHJ1Y3QgaW50 ZWxfZHAgKmludGVsX2RwLCBpbnQKPiA+ICpjb21tb25fcmF0ZXMsCj4gPiArCQkJwqDCoMKgwqDC oGludCBsaW5rX3JhdGUpOwo+ID4gwqBpbnQgaW50ZWxfZHBfcmF0ZV9zZWxlY3Qoc3RydWN0IGlu dGVsX2RwICppbnRlbF9kcCwgaW50IHJhdGUpOwo+ID4gwqB2b2lkIGludGVsX2RwX2hvdF9wbHVn KHN0cnVjdCBpbnRlbF9lbmNvZGVyICppbnRlbF9lbmNvZGVyKTsKPiA+IMKgdm9pZCBpbnRlbF9w b3dlcl9zZXF1ZW5jZXJfcmVzZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsK PiAtLSAKPiBNaWthIEthaG9sYSAtIEludGVsIE9UQwo+IApfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdm eEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9pbnRlbC1nZngK