From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dhinakaran Pandiyan Subject: Re: [PATCH v3 1/2] drm/i915: Track minimum acceptable cdclk instead of "minimum dotclock" Date: Tue, 11 Jul 2017 02:47:42 -0700 Message-ID: <2614134.ykFHueuXXI@dk> References: <20170710193347.8734-1-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-pg0-x244.google.com (mail-pg0-x244.google.com [IPv6:2607:f8b0:400e:c05::244]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7D70C6E1BE for ; Tue, 11 Jul 2017 09:49:03 +0000 (UTC) Received: by mail-pg0-x244.google.com with SMTP id u62so16186544pgb.0 for ; Tue, 11 Jul 2017 02:49:03 -0700 (PDT) In-Reply-To: <20170710193347.8734-1-ville.syrjala@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org Cc: Rodrigo Vivi , Dhinakaran Pandiyan , Paulo Zanoni List-Id: intel-gfx@lists.freedesktop.org T24gTW9uZGF5LCBKdWx5IDEwLCAyMDE3IDEwOjMzOjQ2IFBNIFBEVCB2aWxsZS5zeXJqYWxhQGxp bnV4LmludGVsLmNvbSB3cm90ZToKPiBGcm9tOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmph bGFAbGludXguaW50ZWwuY29tPgo+IAo+IE1ha2UgdGhlIG1pbl9waXhjbGsgdGhpbmcgbGVzcyBj b25mdXNpbmcgYnkgY2hhbmdpbmcgaXQgdG8gdHJhY2sKPiB0aGUgbWluaW11bSBhY2NlcHRhYmxl IGNkY2xrIGZyZXF1ZW5jeSBpbnN0ZWFkLiBUaGlzIG1lYW5zIG1vdmluZwo+IHRoZSBhcHBsaWNh dGlvbiBvZiB0aGUgZ3VhcmRiYW5kcyB0byBhIHNsaWdodGx5IGhpZ2hlciBsZXZlbCBmcm9tCj4g dGhlIGxvdyBsZXZlbCBwbGF0Zm9ybSBzcGVjaWZpYyBjYWxjX2NkY2xrKCkgZnVuY3Rpb25zLgo+ IAo+IFRoZSBpbW1lZGlhdGUgYmVuZWZpdCBpcyBlbGltaW5hdGlvbiBvZiB0aGUgY29uZnVzaW5n IDJ4IGZhY3RvcnMKPiBvbiBHTEsvQ05MKyBpbiB0aGUgYXVkaW8gd29ya2Fyb3VuZHMgKHdoaWNo IHN0ZW1zIGZyb20gdGhlIGZhY3QKPiB0aGF0IHRoZSBwaXBlcyBwcm9kdWNlIHR3byBwaXhlbHMg cGVyIGNsb2NrKS4KPiAKPiB2MjogS2VlcCBjZGNsayBoaWdoZXIgb24gQ05MIHRvIHdvcmthcm91 bmQgbWlzc2luZyBEREkgY2xvY2sgdm9sdGFnZQo+IGhhbmRsaW5nIHYzOiBTcXVhc2ggd2l0aCB0 aGUgQ05MIGNkY2xrIGxpbWl0cyBwYXRjaCAoREspCj4gCgpMb29rcyBnb29kIHRvIG1lLCBJIG9u bHkgaGF2ZSBzb21lIGJpa2VzaGVkcyBhbmQgbml0cGlja3MgYmVsb3cuIFdpbGwgbGVhdmUgaXQg CnRvIHlvdSB0byBkZWNpZGUgaWYgeW91IHdhbnQgdG8gYWRkcmVzcyB0aGVtLgoKUmV2aWV3ZWQt Ynk6IERoaW5ha2FyYW4gUGFuZGl5YW4gPGRoaW5ha2FyYW4ucGFuZGl5YW5AaW50ZWwuY29tPgoK PiBDYzogUGF1bG8gWmFub25pIDxwYXVsby5yLnphbm9uaUBpbnRlbC5jb20+Cj4gQ2M6IFJvZHJp Z28gVml2aSA8cm9kcmlnby52aXZpQGludGVsLmNvbT4KPiBDYzogRGhpbmFrYXJhbiBQYW5kaXlh biA8ZGhpbmFrYXJhbi5wYW5kaXlhbkBpbnRlbC5jb20+Cj4gQ2M6IE1hYXJ0ZW4gTGFua2hvcnN0 IDxtYWFydGVuLmxhbmtob3JzdEBsaW51eC5pbnRlbC5jb20+Cj4gU2lnbmVkLW9mZi1ieTogVmls bGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KPiAtLS0KPiAgZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgIHwgIDEyICsrLQo+ICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9jZGNsay5jICAgfCAyMDIKPiArKysrKysrKysrKysrKysrKystLS0t LS0tLS0tLS0tLS0tLSBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgfCAKPiAy MSArKy0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oICAgICB8ICAgNCArLQo+ ICA0IGZpbGVzIGNoYW5nZWQsIDEyNSBpbnNlcnRpb25zKCspLCAxMTQgZGVsZXRpb25zKC0pCj4g Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggaW5kZXggODFjZDIxZWNmYTdkLi5jODAxNzY0MjRk ODQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBAQCAtNTYzLDYgKzU2MywxNSBAQCBz dHJ1Y3QgaTkxNV9ob3RwbHVnIHsKPiAgCSAgICAgKF9faSkrKykgXAo+ICAJCWZvcl9lYWNoX2lm IChwbGFuZV9zdGF0ZSkKPiAKPiArI2RlZmluZSBmb3JfZWFjaF9uZXdfaW50ZWxfY3J0Y19pbl9z dGF0ZShfX3N0YXRlLCBjcnRjLCBuZXdfY3J0Y19zdGF0ZSwKPiBfX2kpIFwgKwlmb3IgKChfX2kp ID0gMDsgXAo+ICsJICAgICAoX19pKSA8IChfX3N0YXRlKS0+YmFzZS5kZXYtPm1vZGVfY29uZmln Lm51bV9jcnRjICYmIFwKPiArCQkgICAgICgoY3J0YykgPSB0b19pbnRlbF9jcnRjKChfX3N0YXRl KS0+YmFzZS5jcnRjc1tfX2ldLnB0ciksIFwKPiArCQkgICAgICAobmV3X2NydGNfc3RhdGUpID0K PiB0b19pbnRlbF9jcnRjX3N0YXRlKChfX3N0YXRlKS0+YmFzZS5jcnRjc1tfX2ldLm5ld19zdGF0 ZSksIDEpOyBcICsJICAgIAo+IChfX2kpKyspIFwKPiArCQlmb3JfZWFjaF9pZiAoY3J0YykKPiAr Cj4gKwoKSSBhbSBub3Qgc3VyZSBob3cgdXNlZnVsIGFkZGluZyB0aGlzIG1hY3JvIGlzLiBUaGUg bG9vcCBsb29rcyBjb25jaXNlIHdpdGggCnRoaXMgbWFjcm8sIGJ1dCB3ZSBlbmQgdXAgZG9pbmcg dW5uZWNlc3NhcnkgdG9faW50ZWxfY3J0YygpIGNvbnZlcnNpb25zIGluIHRoZSAKbG9vcC4gTG9v a3MgbGlrZSBhbGwgd2UgbmVlZCBpcyBhIHRvX2ludGVsX2NydGNfc3RhdGUoKS4KCj4gIHN0cnVj dCBkcm1faTkxNV9wcml2YXRlOwo+ICBzdHJ1Y3QgaTkxNV9tbV9zdHJ1Y3Q7Cj4gIHN0cnVjdCBp OTE1X21tdV9vYmplY3Q7Cj4gQEAgLTIyNjgsNyArMjI3Nyw4IEBAIHN0cnVjdCBkcm1faTkxNV9w cml2YXRlIHsKPiAgCXN0cnVjdCBtdXRleCBkcGxsX2xvY2s7Cj4gCj4gIAl1bnNpZ25lZCBpbnQg YWN0aXZlX2NydGNzOwo+IC0JdW5zaWduZWQgaW50IG1pbl9waXhjbGtbSTkxNV9NQVhfUElQRVNd Owo+ICsJLyogbWluaW11bSBhY2NlcHRhYmxlIGNkY2xrIGZvciBlYWNoIHBpcGUgKi8KPiArCWlu dCBtaW5fY2RjbGtbSTkxNV9NQVhfUElQRVNdOwo+IAo+ICAJaW50IGRwaW9fcGh5X2lvc2ZfcG9y dFtJOTE1X05VTV9QSFlTX1ZMVl07Cj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2NkY2xrLmMKPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NkY2xrLmMg aW5kZXggMTI0MWU1ODkxYjI5Li41MGYxNTNkYmVhMTQKPiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9jZGNsay5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfY2RjbGsuYwo+IEBAIC00MTcsMjQgKzQxNywyMSBAQCBzdGF0aWMgdm9pZCBoc3dfZ2V0 X2NkY2xrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlCj4gKmRldl9wcml2LCBjZGNsa19zdGF0ZS0+ Y2RjbGsgPSA1NDAwMDA7Cj4gIH0KPiAKPiAtc3RhdGljIGludCB2bHZfY2FsY19jZGNsayhzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkJCSAgaW50IG1heF9waXhjbGspCj4g K3N0YXRpYyBpbnQgdmx2X2NhbGNfY2RjbGsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LCBpbnQgbWluX2NkY2xrKQo+IHsKPiAgCWludCBmcmVxXzMyMCA9IChkZXZfcHJpdi0+aHBs bF9mcmVxIDw8ICAxKSAlIDMyMDAwMCAhPSAwID8KPiAgCQkzMzMzMzMgOiAzMjAwMDA7Cj4gLQlp bnQgbGltaXQgPSBJU19DSEVSUllWSUVXKGRldl9wcml2KSA/IDk1IDogOTA7Cj4gCj4gIAkvKgo+ ICAJICogV2Ugc2VlbSB0byBnZXQgYW4gdW5zdGFibGUgb3Igc29saWQgY29sb3IgcGljdHVyZSBh dCAyMDBNSHouCj4gIAkgKiBOb3Qgc3VyZSB3aGF0J3Mgd3JvbmcuIEZvciBub3cgdXNlIDIwME1I eiBvbmx5IHdoZW4gYWxsIHBpcGVzCj4gIAkgKiBhcmUgb2ZmLgo+ICAJICovCj4gLQlpZiAoIUlT X0NIRVJSWVZJRVcoZGV2X3ByaXYpICYmCj4gLQkgICAgbWF4X3BpeGNsayA+IGZyZXFfMzIwKmxp bWl0LzEwMCkKPiArCWlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSAmJiBtaW5fY2RjbGsgPiBm cmVxXzMyMCkKPiAgCQlyZXR1cm4gNDAwMDAwOwo+IC0JZWxzZSBpZiAobWF4X3BpeGNsayA+IDI2 NjY2NypsaW1pdC8xMDApCj4gKwllbHNlIGlmIChtaW5fY2RjbGsgPiAyNjY2NjcpCj4gIAkJcmV0 dXJuIGZyZXFfMzIwOwo+IC0JZWxzZSBpZiAobWF4X3BpeGNsayA+IDApCj4gKwllbHNlIGlmICht aW5fY2RjbGsgPiAwKQo+ICAJCXJldHVybiAyNjY2Njc7Cj4gIAllbHNlCj4gIAkJcmV0dXJuIDIw MDAwMDsKPiBAQCAtNjEyLDEzICs2MDksMTMgQEAgc3RhdGljIHZvaWQgY2h2X3NldF9jZGNsayhz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQo+ICpkZXZfcHJpdiwgaW50ZWxfZGlzcGxheV9wb3dlcl9w dXQoZGV2X3ByaXYsIFBPV0VSX0RPTUFJTl9QSVBFX0EpOwo+ICB9Cj4gCj4gLXN0YXRpYyBpbnQg YmR3X2NhbGNfY2RjbGsoaW50IG1heF9waXhjbGspCj4gK3N0YXRpYyBpbnQgYmR3X2NhbGNfY2Rj bGsoaW50IG1pbl9jZGNsaykKPiAgewo+IC0JaWYgKG1heF9waXhjbGsgPiA1NDAwMDApCj4gKwlp ZiAobWluX2NkY2xrID4gNTQwMDAwKQo+ICAJCXJldHVybiA2NzUwMDA7Cj4gLQllbHNlIGlmICht YXhfcGl4Y2xrID4gNDUwMDAwKQo+ICsJZWxzZSBpZiAobWluX2NkY2xrID4gNDUwMDAwKQo+ICAJ CXJldHVybiA1NDAwMDA7Cj4gLQllbHNlIGlmIChtYXhfcGl4Y2xrID4gMzM3NTAwKQo+ICsJZWxz ZSBpZiAobWluX2NkY2xrID4gMzM3NTAwKQo+ICAJCXJldHVybiA0NTAwMDA7Cj4gIAllbHNlCj4g IAkJcmV0dXJuIDMzNzUwMDsKPiBAQCAtNzI0LDIzICs3MjEsMjMgQEAgc3RhdGljIHZvaWQgYmR3 X3NldF9jZGNsayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQo+ICpkZXZfcHJpdiwgY2RjbGssIGRl dl9wcml2LT5jZGNsay5ody5jZGNsayk7Cj4gIH0KPiAKPiAtc3RhdGljIGludCBza2xfY2FsY19j ZGNsayhpbnQgbWF4X3BpeGNsaywgaW50IHZjbykKPiArc3RhdGljIGludCBza2xfY2FsY19jZGNs ayhpbnQgbWluX2NkY2xrLCBpbnQgdmNvKQo+ICB7Cj4gIAlpZiAodmNvID09IDg2NDAwMDApIHsK PiAtCQlpZiAobWF4X3BpeGNsayA+IDU0MDAwMCkKPiArCQlpZiAobWluX2NkY2xrID4gNTQwMDAw KQo+ICAJCQlyZXR1cm4gNjE3MTQzOwo+IC0JCWVsc2UgaWYgKG1heF9waXhjbGsgPiA0MzIwMDAp Cj4gKwkJZWxzZSBpZiAobWluX2NkY2xrID4gNDMyMDAwKQo+ICAJCQlyZXR1cm4gNTQwMDAwOwo+ IC0JCWVsc2UgaWYgKG1heF9waXhjbGsgPiAzMDg1NzEpCj4gKwkJZWxzZSBpZiAobWluX2NkY2xr ID4gMzA4NTcxKQo+ICAJCQlyZXR1cm4gNDMyMDAwOwo+ICAJCWVsc2UKPiAgCQkJcmV0dXJuIDMw ODU3MTsKPiAgCX0gZWxzZSB7Cj4gLQkJaWYgKG1heF9waXhjbGsgPiA1NDAwMDApCj4gKwkJaWYg KG1pbl9jZGNsayA+IDU0MDAwMCkKPiAgCQkJcmV0dXJuIDY3NTAwMDsKPiAtCQllbHNlIGlmICht YXhfcGl4Y2xrID4gNDUwMDAwKQo+ICsJCWVsc2UgaWYgKG1pbl9jZGNsayA+IDQ1MDAwMCkKPiAg CQkJcmV0dXJuIDU0MDAwMDsKPiAtCQllbHNlIGlmIChtYXhfcGl4Y2xrID4gMzM3NTAwKQo+ICsJ CWVsc2UgaWYgKG1pbl9jZGNsayA+IDMzNzUwMCkKPiAgCQkJcmV0dXJuIDQ1MDAwMDsKPiAgCQll bHNlCj4gIAkJCXJldHVybiAzMzc1MDA7Cj4gQEAgLTEwNzUsMzEgKzEwNzIsMjUgQEAgdm9pZCBz a2xfdW5pbml0X2NkY2xrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlCj4gKmRldl9wcml2KSBza2xf c2V0X2NkY2xrKGRldl9wcml2LCAmY2RjbGtfc3RhdGUpOwo+ICB9Cj4gCj4gLXN0YXRpYyBpbnQg Ynh0X2NhbGNfY2RjbGsoaW50IG1heF9waXhjbGspCj4gK3N0YXRpYyBpbnQgYnh0X2NhbGNfY2Rj bGsoaW50IG1pbl9jZGNsaykKPiAgewo+IC0JaWYgKG1heF9waXhjbGsgPiA1NzYwMDApCj4gKwlp ZiAobWluX2NkY2xrID4gNTc2MDAwKQo+ICAJCXJldHVybiA2MjQwMDA7Cj4gLQllbHNlIGlmICht YXhfcGl4Y2xrID4gMzg0MDAwKQo+ICsJZWxzZSBpZiAobWluX2NkY2xrID4gMzg0MDAwKQo+ICAJ CXJldHVybiA1NzYwMDA7Cj4gLQllbHNlIGlmIChtYXhfcGl4Y2xrID4gMjg4MDAwKQo+ICsJZWxz ZSBpZiAobWluX2NkY2xrID4gMjg4MDAwKQo+ICAJCXJldHVybiAzODQwMDA7Cj4gLQllbHNlIGlm IChtYXhfcGl4Y2xrID4gMTQ0MDAwKQo+ICsJZWxzZSBpZiAobWluX2NkY2xrID4gMTQ0MDAwKQo+ ICAJCXJldHVybiAyODgwMDA7Cj4gIAllbHNlCj4gIAkJcmV0dXJuIDE0NDAwMDsKPiAgfQo+IAo+ IC1zdGF0aWMgaW50IGdsa19jYWxjX2NkY2xrKGludCBtYXhfcGl4Y2xrKQo+ICtzdGF0aWMgaW50 IGdsa19jYWxjX2NkY2xrKGludCBtaW5fY2RjbGspCj4gIHsKPiAtCS8qCj4gLQkgKiBGSVhNRTog QXZvaWQgdXNpbmcgYSBwaXhlbCBjbG9jayB0aGF0IGlzIG1vcmUgdGhhbiA5OSUgb2YgdGhlIGNk Y2xrCj4gLQkgKiBhcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kLiBVc2UgYSBoaWdoZXIgY2RjbGsg aW5zdGVhZC4gKE5vdGUgdGhhdAo+IC0JICogaW50ZWxfY29tcHV0ZV9tYXhfZG90Y2xrKCkgbGlt aXRzIHRoZSBtYXggcGl4ZWwgY2xvY2sgdG8gOTklIG9mIG1heAo+IC0JICogY2RjbGsuKQo+IC0J ICovCj4gLQlpZiAobWF4X3BpeGNsayA+IERJVl9ST1VORF9VUCgyICogMTU4NDAwICogOTksIDEw MCkpCj4gKwlpZiAobWluX2NkY2xrID4gMTU4NDAwKQo+ICAJCXJldHVybiAzMTY4MDA7Cj4gLQll bHNlIGlmIChtYXhfcGl4Y2xrID4gRElWX1JPVU5EX1VQKDIgKiA3OTIwMCAqIDk5LCAxMDApKQo+ ICsJZWxzZSBpZiAobWluX2NkY2xrID4gNzkyMDApCj4gIAkJcmV0dXJuIDE1ODQwMDsKPiAgCWVs c2UKPiAgCQlyZXR1cm4gNzkyMDA7Cj4gQEAgLTE0MjAsMTEgKzE0MTEsMTEgQEAgdm9pZCBieHRf dW5pbml0X2NkY2xrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlCj4gKmRldl9wcml2KSBieHRfc2V0 X2NkY2xrKGRldl9wcml2LCAmY2RjbGtfc3RhdGUpOwo+ICB9Cj4gCj4gLXN0YXRpYyBpbnQgY25s X2NhbGNfY2RjbGsoaW50IG1heF9waXhjbGspCj4gK3N0YXRpYyBpbnQgY25sX2NhbGNfY2RjbGso aW50IG1pbl9jZGNsaykKPiAgewo+IC0JaWYgKG1heF9waXhjbGsgPiAzMzYwMDApCj4gKwlpZiAo bWluX2NkY2xrID4gMzM2MDAwKQo+ICAJCXJldHVybiA1MjgwMDA7Cj4gLQllbHNlIGlmIChtYXhf cGl4Y2xrID4gMTY4MDAwKQo+ICsJZWxzZSBpZiAobWluX2NkY2xrID4gMTY4MDAwKQo+ICAJCXJl dHVybiAzMzYwMDA7Cj4gIAllbHNlCj4gIAkJcmV0dXJuIDE2ODAwMDsKPiBAQCAtMTczMiw5OCAr MTcyMywxMDYgQEAgdm9pZCBpbnRlbF9zZXRfY2RjbGsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUK PiAqZGV2X3ByaXYsIGRldl9wcml2LT5kaXNwbGF5LnNldF9jZGNsayhkZXZfcHJpdiwgY2RjbGtf c3RhdGUpOwo+ICB9Cj4gCj4gLXN0YXRpYyBpbnQgYmR3X2FkanVzdF9taW5fcGlwZV9waXhlbF9y YXRlKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlCj4gKmNydGNfc3RhdGUsIC0JCQkJCSAgaW50IHBp eGVsX3JhdGUpCj4gK3N0YXRpYyBpbnQgaW50ZWxfbWluX2NkY2xrKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwKClRoZSBuYW1lcyBoYXZlIHN0YXJ0ZWQgdG8gc291bmQgc2ltaWxh ci4KaW50ZWxfbWluX2NkY2xrCmludGVsX2NydGNfY29tcHV0ZV9taW5fY2RjbGsKaW50ZWxfY29t cHV0ZV9taW5fY2RjbGsKCkkgY2FuJ3QgdGhpbmsgb2YgYW55dGhpbmcgYmV0dGVyLiBIb3cgYWJv dXQgc29tZXRoaW5nIGxpa2UgCmludGVsX3BpeGVsX3JhdGVfdG9fY2RjbGsoKSA/CgoKPiArCQkJ ICAgaW50IHBpeGVsX3JhdGUpCj4gK3sKPiArCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEw KQo+ICsJCS8qCj4gKwkJICogRklYTUU6IFN3aXRjaCB0byBESVZfUk9VTkRfVVAocGl4ZWxfcmF0 ZSwgMikKPiArCQkgKiBvbmNlIERESSBjbG9jayB2b2x0YWdlIHJlcXVpcmVtZW50cyBhcmUKPiAr CQkgKiBoYW5kbGVkIGNvcnJlY3RseS4KPiArCQkgKi8KPiArCQlyZXR1cm4gcGl4ZWxfcmF0ZTsK PiArCWVsc2UgaWYgKElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpKQo+ICsJCS8qCj4gKwkJICogRklY TUU6IEF2b2lkIHVzaW5nIGEgcGl4ZWwgY2xvY2sgdGhhdCBpcyBtb3JlIHRoYW4gOTklIG9mIHRo ZSBjZGNsawo+ICsJCSAqIGFzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQuIFVzZSBhIGhpZ2hlciBj ZGNsayBpbnN0ZWFkLiAoTm90ZSB0aGF0Cj4gKwkJICogaW50ZWxfY29tcHV0ZV9tYXhfZG90Y2xr KCkgbGltaXRzIHRoZSBtYXggcGl4ZWwgY2xvY2sgdG8gOTklIG9mIG1heAo+ICsJCSAqIGNkY2xr LikKPiArCQkgKi8KPiArCQlyZXR1cm4gRElWX1JPVU5EX1VQKHBpeGVsX3JhdGUgKiAxMDAsIDIg KiA5OSk7Cj4gKwllbHNlIGlmIChJU19HRU45KGRldl9wcml2KSB8fAo+ICsJCSBJU19CUk9BRFdF TEwoZGV2X3ByaXYpIHx8IElTX0hBU1dFTEwoZGV2X3ByaXYpKQoKSSBkb24ndCBzZWUgd2h5IElT X0hBU1dFTEwoKSBpcyBuZWVkZWQgaGVyZS4gVGhlIGNhbGxlcnMgc2VlbSB0byBuZWVkIGEgCi5t b2Rlc2V0X2NhbGNfY2RjbGsoKSBob29rIGFuZCBIYXN3ZWxsIGRvZXMgbm90IGhhdmUgb25lLgoK Cj4gKwkJcmV0dXJuIHBpeGVsX3JhdGU7Cj4gKwllbHNlIGlmIChJU19DSEVSUllWSUVXKGRldl9w cml2KSkKPiArCQlyZXR1cm4gRElWX1JPVU5EX1VQKHBpeGVsX3JhdGUgKiAxMDAsIDk1KTsKPiAr CWVsc2UKPiArCQlyZXR1cm4gRElWX1JPVU5EX1VQKHBpeGVsX3JhdGUgKiAxMDAsIDkwKTsKClR5 cGUgb3V0IElTX1ZBTExFWVZJRVcoKSBleHBsaWNpdGx5IGZvciBkb2N1bWVudGF0aW9uPwoKPiAr fQo+ICsKPiAraW50IGludGVsX2NydGNfY29tcHV0ZV9taW5fY2RjbGsoY29uc3Qgc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4gewo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0KPiAgCQl0b19pOTE1KGNydGNfc3RhdGUtPmJhc2UuY3J0Yy0+ZGV2KTsK PiArCWludCBtaW5fY2RjbGs7Cj4gKwo+ICsJaWYgKCFjcnRjX3N0YXRlLT5iYXNlLmVuYWJsZSkK PiArCQlyZXR1cm4gMDsKPiArCj4gKwltaW5fY2RjbGsgPSBpbnRlbF9taW5fY2RjbGsoZGV2X3By aXYsIGNydGNfc3RhdGUtPnBpeGVsX3JhdGUpOwo+IAo+ICAJLyogcGl4ZWwgcmF0ZSBtdXN0bid0 IGV4Y2VlZCA5NSUgb2YgY2RjbGsgd2l0aCBJUFMgb24gQkRXICovCj4gIAlpZiAoSVNfQlJPQURX RUxMKGRldl9wcml2KSAmJiBjcnRjX3N0YXRlLT5pcHNfZW5hYmxlZCkKPiAtCQlwaXhlbF9yYXRl ID0gRElWX1JPVU5EX1VQKHBpeGVsX3JhdGUgKiAxMDAsIDk1KTsKPiArCQltaW5fY2RjbGsgPSBE SVZfUk9VTkRfVVAobWluX2NkY2xrICogMTAwLCA5NSk7Cj4gCj4gIAkvKiBCU3BlYyBzYXlzICJE byBub3QgdXNlIERpc3BsYXlQb3J0IHdpdGggQ0RDTEsgbGVzcyB0aGFuIDQzMiBNSHosCj4gIAkg KiBhdWRpbyBlbmFibGVkLCBwb3J0IHdpZHRoIHg0LCBhbmQgbGluayByYXRlIEhCUjIgKDUuNCBH SHopLCBvciBlbHNlCj4gIAkgKiB0aGVyZSBtYXkgYmUgYXVkaW8gY29ycnVwdGlvbiBvciBzY3Jl ZW4gY29ycnVwdGlvbi4iIFRoaXMgY2RjbGsKPiAtCSAqIHJlc3RyaWN0aW9uIGZvciBHTEsgaXMg MzE2LjggTUh6IGFuZCBzaW5jZSBHTEsgY2FuIG91dHB1dCB0d28KPiAtCSAqIHBpeGVscyBwZXIg Y2xvY2ssIHRoZSBwaXhlbCByYXRlIGJlY29tZXMgMiAqIDMxNi44IE1Iei4KPiArCSAqIHJlc3Ry aWN0aW9uIGZvciBHTEsgaXMgMzE2LjggTUh6Lgo+ICAJICovCj4gIAlpZiAoaW50ZWxfY3J0Y19o YXNfZHBfZW5jb2RlcihjcnRjX3N0YXRlKSAmJgo+ICAJICAgIGNydGNfc3RhdGUtPmhhc19hdWRp byAmJgo+ICAJICAgIGNydGNfc3RhdGUtPnBvcnRfY2xvY2sgPj0gNTQwMDAwICYmCj4gIAkgICAg Y3J0Y19zdGF0ZS0+bGFuZV9jb3VudCA9PSA0KSB7Cj4gLQkJaWYgKElTX0NBTk5PTkxBS0UoZGV2 X3ByaXYpKQo+IC0JCQlwaXhlbF9yYXRlID0gbWF4KDMxNjgwMCwgcGl4ZWxfcmF0ZSk7Cj4gLQkJ ZWxzZSBpZiAoSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpCj4gLQkJCXBpeGVsX3JhdGUgPSBtYXgo MiAqIDMxNjgwMCwgcGl4ZWxfcmF0ZSk7Cj4gLQkJZWxzZQo+IC0JCQlwaXhlbF9yYXRlID0gbWF4 KDQzMjAwMCwgcGl4ZWxfcmF0ZSk7Cj4gKwkJaWYgKElTX0NBTk5PTkxBS0UoZGV2X3ByaXYpIHx8 IElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpKSB7Cj4gKwkJCS8qIERpc3BsYXkgV0EgIzExNDU6IGds ayxjbmwgKi8KPiArCQkJbWluX2NkY2xrID0gbWF4KDMxNjgwMCwgbWluX2NkY2xrKTsKPiArCQl9 IGVsc2UgaWYgKElTX0dFTjkoZGV2X3ByaXYpIHx8IElTX0JST0FEV0VMTChkZXZfcHJpdikpIHsK PiArCQkJLyogRGlzcGxheSBXQSAjMTE0NDogc2tsLGJ4dCAqLwo+ICsJCQltaW5fY2RjbGsgPSBt YXgoNDMyMDAwLCBtaW5fY2RjbGspOwo+ICsJCX0KPiAgCX0KPiAKPiAgCS8qIEFjY29yZGluZyB0 byBCU3BlYywgIlRoZSBDRCBjbG9jayBmcmVxdWVuY3kgbXVzdCBiZSBhdCBsZWFzdCB0d2ljZQo+ ICAJICogdGhlIGZyZXF1ZW5jeSBvZiB0aGUgQXphbGlhIEJDTEsuIiBhbmQgQkNMSyBpcyA5NiBN SHogYnkgZGVmYXVsdC4KPiAtCSAqIFRoZSBjaGVjayBmb3IgR0xLIGhhcyB0byBiZSBhZGp1c3Rl ZCBhcyB0aGUgcGxhdGZvcm0gY2FuIG91dHB1dAo+IC0JICogdHdvIHBpeGVscyBwZXIgY2xvY2su Cj4gIAkgKi8KPiAtCWlmIChjcnRjX3N0YXRlLT5oYXNfYXVkaW8gJiYgSU5URUxfR0VOKGRldl9w cml2KSA+PSA5KSB7Cj4gLQkJaWYgKElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpKQo+IC0JCQlwaXhl bF9yYXRlID0gbWF4KDIgKiAyICogOTYwMDAsIHBpeGVsX3JhdGUpOwo+IC0JCWVsc2UKPiAtCQkJ cGl4ZWxfcmF0ZSA9IG1heCgyICogOTYwMDAsIHBpeGVsX3JhdGUpOwo+IC0JfQo+ICsJaWYgKGNy dGNfc3RhdGUtPmhhc19hdWRpbyAmJiBJTlRFTF9HRU4oZGV2X3ByaXYpID49IDkpCj4gKwkJbWlu X2NkY2xrID0gbWF4KDIgKiA5NjAwMCwgbWluX2NkY2xrKTsKPiAKPiAtCXJldHVybiBwaXhlbF9y YXRlOwo+ICsJcmV0dXJuIG1pbl9jZGNsazsKPiAgfQo+IAo+IC0vKiBjb21wdXRlIHRoZSBtYXgg cmF0ZSBmb3IgbmV3IGNvbmZpZ3VyYXRpb24gKi8KPiAtc3RhdGljIGludCBpbnRlbF9tYXhfcGl4 ZWxfcmF0ZShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCj4gK3N0YXRpYyBpbnQgaW50 ZWxfY29tcHV0ZV9taW5fY2RjbGsoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ICB7 Cj4gIAlzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICppbnRlbF9zdGF0ZSA9IHRvX2ludGVsX2F0 b21pY19zdGF0ZShzdGF0ZSk7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSB0b19pOTE1KHN0YXRlLT5kZXYpOwo+IC0Jc3RydWN0IGRybV9jcnRjICpjcnRjOwo+IC0Jc3Ry dWN0IGRybV9jcnRjX3N0YXRlICpjc3RhdGU7Cj4gKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YzsK PiAgCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwo+IC0JdW5zaWduZWQgaW50 IG1heF9waXhlbF9yYXRlID0gMCwgaTsKPiArCWludCBtaW5fY2RjbGsgPSAwLCBpOwo+ICAJZW51 bSBwaXBlIHBpcGU7Cj4gCj4gLQltZW1jcHkoaW50ZWxfc3RhdGUtPm1pbl9waXhjbGssIGRldl9w cml2LT5taW5fcGl4Y2xrLAo+IC0JICAgICAgIHNpemVvZihpbnRlbF9zdGF0ZS0+bWluX3BpeGNs aykpOwo+IC0KPiAtCWZvcl9lYWNoX25ld19jcnRjX2luX3N0YXRlKHN0YXRlLCBjcnRjLCBjc3Rh dGUsIGkpIHsKPiAtCQlpbnQgcGl4ZWxfcmF0ZTsKPiAtCj4gLQkJY3J0Y19zdGF0ZSA9IHRvX2lu dGVsX2NydGNfc3RhdGUoY3N0YXRlKTsKPiAtCQlpZiAoIWNydGNfc3RhdGUtPmJhc2UuZW5hYmxl KSB7Cj4gLQkJCWludGVsX3N0YXRlLT5taW5fcGl4Y2xrW2ldID0gMDsKPiAtCQkJY29udGludWU7 Cj4gLQkJfQo+ICsJbWVtY3B5KGludGVsX3N0YXRlLT5taW5fY2RjbGssIGRldl9wcml2LT5taW5f Y2RjbGssCj4gKwkgICAgICAgc2l6ZW9mKGludGVsX3N0YXRlLT5taW5fY2RjbGspKTsKPiAKPiAt CQlwaXhlbF9yYXRlID0gY3J0Y19zdGF0ZS0+cGl4ZWxfcmF0ZTsKPiAtCj4gLQkJaWYgKElTX0JS T0FEV0VMTChkZXZfcHJpdikgfHwgSU5URUxfR0VOKGRldl9wcml2KSA+PSA5KQo+IC0JCQlwaXhl bF9yYXRlID0KPiAtCQkJCWJkd19hZGp1c3RfbWluX3BpcGVfcGl4ZWxfcmF0ZShjcnRjX3N0YXRl LAo+IC0JCQkJCQkJICAgICAgIHBpeGVsX3JhdGUpOwo+IC0KPiAtCQlpbnRlbF9zdGF0ZS0+bWlu X3BpeGNsa1tpXSA9IHBpeGVsX3JhdGU7Cj4gLQl9Cj4gKwlmb3JfZWFjaF9uZXdfaW50ZWxfY3J0 Y19pbl9zdGF0ZShpbnRlbF9zdGF0ZSwgY3J0YywgY3J0Y19zdGF0ZSwgaSkKPiArCQlpbnRlbF9z dGF0ZS0+bWluX2NkY2xrW2ldID0KPiArCQkJaW50ZWxfY3J0Y19jb21wdXRlX21pbl9jZGNsayhj cnRjX3N0YXRlKTsKPiAKCkxpa2UgSSB3cm90ZSBhYm92ZSwgd2UgY291bGQganVzdCByZXVzZSBm b3JfZWFjaF9uZXdfY3J0Y19pbl9zdGF0ZSgpIAoKPiAgCWZvcl9lYWNoX3BpcGUoZGV2X3ByaXYs IHBpcGUpCj4gLQkJbWF4X3BpeGVsX3JhdGUgPSBtYXgoaW50ZWxfc3RhdGUtPm1pbl9waXhjbGtb cGlwZV0sCj4gLQkJCQkgICAgIG1heF9waXhlbF9yYXRlKTsKPiArCQltaW5fY2RjbGsgPSBtYXgo aW50ZWxfc3RhdGUtPm1pbl9jZGNsa1twaXBlXSwgbWluX2NkY2xrKTsKPiAKPiAtCXJldHVybiBt YXhfcGl4ZWxfcmF0ZTsKPiArCXJldHVybiBtaW5fY2RjbGs7Cj4gIH0KPiAKPiAgc3RhdGljIGlu dCB2bHZfbW9kZXNldF9jYWxjX2NkY2xrKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkK PiAgewo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShzdGF0 ZS0+ZGV2KTsKPiAtCWludCBtYXhfcGl4Y2xrID0gaW50ZWxfbWF4X3BpeGVsX3JhdGUoc3RhdGUp Owo+ICsJaW50IG1pbl9jZGNsayA9IGludGVsX2NvbXB1dGVfbWluX2NkY2xrKHN0YXRlKTsKPiAg CXN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKmludGVsX3N0YXRlID0KPiAgCQl0b19pbnRlbF9h dG9taWNfc3RhdGUoc3RhdGUpOwo+ICAJaW50IGNkY2xrOwo+IAo+IC0JY2RjbGsgPSB2bHZfY2Fs Y19jZGNsayhkZXZfcHJpdiwgbWF4X3BpeGNsayk7Cj4gKwljZGNsayA9IHZsdl9jYWxjX2NkY2xr KGRldl9wcml2LCBtaW5fY2RjbGspOwo+IAo+ICAJaWYgKGNkY2xrID4gZGV2X3ByaXYtPm1heF9j ZGNsa19mcmVxKSB7Cj4gIAkJRFJNX0RFQlVHX0tNUygicmVxdWVzdGVkIGNkY2xrICglZCBrSHop IGV4Y2VlZHMgbWF4ICglZCBrSHopXG4iLAo+IEBAIC0xODQ5LDE0ICsxODQ4LDE0IEBAIHN0YXRp YyBpbnQgYmR3X21vZGVzZXRfY2FsY19jZGNsayhzdHJ1Y3QKPiBkcm1fYXRvbWljX3N0YXRlICpz dGF0ZSkgewo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShz dGF0ZS0+ZGV2KTsKPiAgCXN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKmludGVsX3N0YXRlID0g dG9faW50ZWxfYXRvbWljX3N0YXRlKHN0YXRlKTsKPiAtCWludCBtYXhfcGl4Y2xrID0gaW50ZWxf bWF4X3BpeGVsX3JhdGUoc3RhdGUpOwo+ICsJaW50IG1pbl9jZGNsayA9IGludGVsX2NvbXB1dGVf bWluX2NkY2xrKHN0YXRlKTsKPiAgCWludCBjZGNsazsKPiAKPiAgCS8qCj4gIAkgKiBGSVhNRSBz aG91bGQgYWxzbyBhY2NvdW50IGZvciBwbGFuZSByYXRpbwo+ICAJICogb25jZSA2NGJwcCBwaXhl bCBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQuCj4gIAkgKi8KPiAtCWNkY2xrID0gYmR3X2NhbGNfY2Rj bGsobWF4X3BpeGNsayk7Cj4gKwljZGNsayA9IGJkd19jYWxjX2NkY2xrKG1pbl9jZGNsayk7Cj4g Cj4gIAlpZiAoY2RjbGsgPiBkZXZfcHJpdi0+bWF4X2NkY2xrX2ZyZXEpIHsKPiAgCQlEUk1fREVC VUdfS01TKCJyZXF1ZXN0ZWQgY2RjbGsgKCVkIGtIeikgZXhjZWVkcyBtYXggKCVkIGtIeilcbiIs Cj4gQEAgLTE4ODIsNyArMTg4MSw3IEBAIHN0YXRpYyBpbnQgc2tsX21vZGVzZXRfY2FsY19jZGNs ayhzdHJ1Y3QKPiBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkgewo+ICAJc3RydWN0IGludGVsX2F0 b21pY19zdGF0ZSAqaW50ZWxfc3RhdGUgPSB0b19pbnRlbF9hdG9taWNfc3RhdGUoc3RhdGUpOwo+ ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShzdGF0ZS0+ZGV2 KTsKPiAtCWNvbnN0IGludCBtYXhfcGl4Y2xrID0gaW50ZWxfbWF4X3BpeGVsX3JhdGUoc3RhdGUp Owo+ICsJaW50IG1pbl9jZGNsayA9IGludGVsX2NvbXB1dGVfbWluX2NkY2xrKHN0YXRlKTsKPiAg CWludCBjZGNsaywgdmNvOwo+IAo+ICAJdmNvID0gaW50ZWxfc3RhdGUtPmNkY2xrLmxvZ2ljYWwu dmNvOwo+IEBAIC0xODkzLDcgKzE4OTIsNyBAQCBzdGF0aWMgaW50IHNrbF9tb2Rlc2V0X2NhbGNf Y2RjbGsoc3RydWN0Cj4gZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpICogRklYTUUgc2hvdWxkIGFs c28gYWNjb3VudCBmb3IgcGxhbmUgcmF0aW8KPiAgCSAqIG9uY2UgNjRicHAgcGl4ZWwgZm9ybWF0 cyBhcmUgc3VwcG9ydGVkLgo+ICAJICovCj4gLQljZGNsayA9IHNrbF9jYWxjX2NkY2xrKG1heF9w aXhjbGssIHZjbyk7Cj4gKwljZGNsayA9IHNrbF9jYWxjX2NkY2xrKG1pbl9jZGNsaywgdmNvKTsK PiAKPiAgCWlmIChjZGNsayA+IGRldl9wcml2LT5tYXhfY2RjbGtfZnJlcSkgewo+ICAJCURSTV9E RUJVR19LTVMoInJlcXVlc3RlZCBjZGNsayAoJWQga0h6KSBleGNlZWRzIG1heCAoJWQga0h6KVxu IiwKPiBAQCAtMTkyMCwxNiArMTkxOSwxNiBAQCBzdGF0aWMgaW50IHNrbF9tb2Rlc2V0X2NhbGNf Y2RjbGsoc3RydWN0Cj4gZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpIHN0YXRpYyBpbnQgYnh0X21v ZGVzZXRfY2FsY19jZGNsayhzdHJ1Y3QKPiBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkgewo+ICAJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShzdGF0ZS0+ZGV2KTsK PiAtCWludCBtYXhfcGl4Y2xrID0gaW50ZWxfbWF4X3BpeGVsX3JhdGUoc3RhdGUpOwo+ICsJaW50 IG1pbl9jZGNsayA9IGludGVsX2NvbXB1dGVfbWluX2NkY2xrKHN0YXRlKTsKPiAgCXN0cnVjdCBp bnRlbF9hdG9taWNfc3RhdGUgKmludGVsX3N0YXRlID0KPiAgCQl0b19pbnRlbF9hdG9taWNfc3Rh dGUoc3RhdGUpOwo+ICAJaW50IGNkY2xrLCB2Y287Cj4gCj4gIAlpZiAoSVNfR0VNSU5JTEFLRShk ZXZfcHJpdikpIHsKPiAtCQljZGNsayA9IGdsa19jYWxjX2NkY2xrKG1heF9waXhjbGspOwo+ICsJ CWNkY2xrID0gZ2xrX2NhbGNfY2RjbGsobWluX2NkY2xrKTsKPiAgCQl2Y28gPSBnbGtfZGVfcGxs X3ZjbyhkZXZfcHJpdiwgY2RjbGspOwo+ICAJfSBlbHNlIHsKPiAtCQljZGNsayA9IGJ4dF9jYWxj X2NkY2xrKG1heF9waXhjbGspOwo+ICsJCWNkY2xrID0gYnh0X2NhbGNfY2RjbGsobWluX2NkY2xr KTsKPiAgCQl2Y28gPSBieHRfZGVfcGxsX3ZjbyhkZXZfcHJpdiwgY2RjbGspOwo+ICAJfQo+IAo+ IEBAIC0xOTY2LDEwICsxOTY1LDEwIEBAIHN0YXRpYyBpbnQgY25sX21vZGVzZXRfY2FsY19jZGNs ayhzdHJ1Y3QKPiBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkgc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0KPiB0b19pOTE1KHN0YXRlLT5kZXYpOwo+ICAJc3RydWN0IGludGVsX2F0 b21pY19zdGF0ZSAqaW50ZWxfc3RhdGUgPQo+ICAJCXRvX2ludGVsX2F0b21pY19zdGF0ZShzdGF0 ZSk7Cj4gLQlpbnQgbWF4X3BpeGNsayA9IGludGVsX21heF9waXhlbF9yYXRlKHN0YXRlKTsKPiAr CWludCBtaW5fY2RjbGsgPSBpbnRlbF9jb21wdXRlX21pbl9jZGNsayhzdGF0ZSk7Cj4gIAlpbnQg Y2RjbGssIHZjbzsKPiAKPiAtCWNkY2xrID0gY25sX2NhbGNfY2RjbGsobWF4X3BpeGNsayk7Cj4g KwljZGNsayA9IGNubF9jYWxjX2NkY2xrKG1pbl9jZGNsayk7Cj4gIAl2Y28gPSBjbmxfY2RjbGtf cGxsX3ZjbyhkZXZfcHJpdiwgY2RjbGspOwo+IAo+ICAJaWYgKGNkY2xrID4gZGV2X3ByaXYtPm1h eF9jZGNsa19mcmVxKSB7Cj4gQEAgLTE5OTksMTQgKzE5OTgsMjEgQEAgc3RhdGljIGludCBpbnRl bF9jb21wdXRlX21heF9kb3RjbGsoc3RydWN0Cj4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp IHsKPiAgCWludCBtYXhfY2RjbGtfZnJlcSA9IGRldl9wcml2LT5tYXhfY2RjbGtfZnJlcTsKPiAK PiAtCWlmIChJU19HRU1JTklMQUtFKGRldl9wcml2KSkKPiArCWlmIChJTlRFTF9HRU4oZGV2X3By aXYpID49IDEwKQo+ICsJCS8qCj4gKwkJICogRklYTUU6IEFsbG93ICcyICogbWF4X2NkY2xrX2Zy ZXEnCj4gKwkJICogb25jZSBEREkgY2xvY2sgdm9sdGFnZSByZXF1aXJlbWVudHMgYXJlCj4gKwkJ ICogaGFuZGxlZCBjb3JyZWN0bHkuCj4gKwkJICovCj4gKwkJcmV0dXJuIG1heF9jZGNsa19mcmVx Owo+ICsJZWxzZSBpZiAoSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpCj4gIAkJLyoKPiAgCQkgKiBG SVhNRTogTGltaXRpbmcgdG8gOTklIGFzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQuIFNlZQo+IC0J CSAqIGdsa19jYWxjX2NkY2xrKCkgZm9yIGRldGFpbHMuCj4gKwkJICogaW50ZWxfbWluX2NkY2xr KCkgZm9yIGRldGFpbHMuCj4gIAkJICovCj4gIAkJcmV0dXJuIDIgKiBtYXhfY2RjbGtfZnJlcSAq IDk5IC8gMTAwOwo+IC0JZWxzZSBpZiAoSU5URUxfSU5GTyhkZXZfcHJpdiktPmdlbiA+PSA5IHx8 Cj4gLQkJIElTX0hBU1dFTEwoZGV2X3ByaXYpIHx8IElTX0JST0FEV0VMTChkZXZfcHJpdikpCj4g KwllbHNlIGlmIChJU19HRU45KGRldl9wcml2KSB8fAo+ICsJCSBJU19CUk9BRFdFTEwoZGV2X3By aXYpIHx8IElTX0hBU1dFTEwoZGV2X3ByaXYpKQo+ICAJCXJldHVybiBtYXhfY2RjbGtfZnJlcTsK PiAgCWVsc2UgaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQo+ICAJCXJldHVybiBtYXhfY2Rj bGtfZnJlcSo5NS8xMDA7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2Rpc3BsYXkuYwo+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGluZGV4 IDIxNDRhZGM1YjFkNS4uYjQ3NTM1ZjVkOTVkCj4gMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZGlzcGxheS5jCj4gQEAgLTU5MjAsNyArNTkyMCw3IEBAIHN0YXRpYyB2b2lkIGludGVsX2Ny dGNfZGlzYWJsZV9ub2F0b21pYyhzdHJ1Y3QKPiBkcm1fY3J0YyAqY3J0YywgaW50ZWxfY3J0Yy0+ ZW5hYmxlZF9wb3dlcl9kb21haW5zID0gMDsKPiAKPiAgCWRldl9wcml2LT5hY3RpdmVfY3J0Y3Mg Jj0gfigxIDw8IGludGVsX2NydGMtPnBpcGUpOwo+IC0JZGV2X3ByaXYtPm1pbl9waXhjbGtbaW50 ZWxfY3J0Yy0+cGlwZV0gPSAwOwo+ICsJZGV2X3ByaXYtPm1pbl9jZGNsa1tpbnRlbF9jcnRjLT5w aXBlXSA9IDA7Cj4gIH0KPiAKPiAgLyoKPiBAQCAtMTMyOTIsOCArMTMyOTIsOCBAQCBzdGF0aWMg aW50IGludGVsX2F0b21pY19jb21taXQoc3RydWN0IGRybV9kZXZpY2UKPiAqZGV2LCBpbnRlbF9h dG9taWNfdHJhY2tfZmJzKHN0YXRlKTsKPiAKPiAgCWlmIChpbnRlbF9zdGF0ZS0+bW9kZXNldCkg ewo+IC0JCW1lbWNweShkZXZfcHJpdi0+bWluX3BpeGNsaywgaW50ZWxfc3RhdGUtPm1pbl9waXhj bGssCj4gLQkJICAgICAgIHNpemVvZihpbnRlbF9zdGF0ZS0+bWluX3BpeGNsaykpOwo+ICsJCW1l bWNweShkZXZfcHJpdi0+bWluX2NkY2xrLCBpbnRlbF9zdGF0ZS0+bWluX2NkY2xrLAo+ICsJCSAg ICAgICBzaXplb2YoaW50ZWxfc3RhdGUtPm1pbl9jZGNsaykpOwo+ICAJCWRldl9wcml2LT5hY3Rp dmVfY3J0Y3MgPSBpbnRlbF9zdGF0ZS0+YWN0aXZlX2NydGNzOwo+ICAJCWRldl9wcml2LT5jZGNs ay5sb2dpY2FsID0gaW50ZWxfc3RhdGUtPmNkY2xrLmxvZ2ljYWw7Cj4gIAkJZGV2X3ByaXYtPmNk Y2xrLmFjdHVhbCA9IGludGVsX3N0YXRlLT5jZGNsay5hY3R1YWw7Cj4gQEAgLTE1NTY5LDcgKzE1 NTY5LDcgQEAgc3RhdGljIHZvaWQgaW50ZWxfbW9kZXNldF9yZWFkb3V0X2h3X3N0YXRlKHN0cnVj dAo+IGRybV9kZXZpY2UgKmRldikgZm9yX2VhY2hfaW50ZWxfY3J0YyhkZXYsIGNydGMpIHsKPiAg CQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSA9Cj4gIAkJCXRvX2ludGVsX2Ny dGNfc3RhdGUoY3J0Yy0+YmFzZS5zdGF0ZSk7Cj4gLQkJaW50IHBpeGNsayA9IDA7Cj4gKwkJaW50 IG1pbl9jZGNsayA9IDA7Cj4gCj4gIAkJbWVtc2V0KCZjcnRjLT5iYXNlLm1vZGUsIDAsIHNpemVv ZihjcnRjLT5iYXNlLm1vZGUpKTsKPiAgCQlpZiAoY3J0Y19zdGF0ZS0+YmFzZS5hY3RpdmUpIHsK PiBAQCAtMTU1OTAsMjIgKzE1NTkwLDE1IEBAIHN0YXRpYyB2b2lkIGludGVsX21vZGVzZXRfcmVh ZG91dF9od19zdGF0ZShzdHJ1Y3QKPiBkcm1fZGV2aWNlICpkZXYpCj4gCj4gIAkJCWludGVsX2Ny dGNfY29tcHV0ZV9waXhlbF9yYXRlKGNydGNfc3RhdGUpOwo+IAo+IC0JCQlpZiAoSU5URUxfR0VO KGRldl9wcml2KSA+PSA5IHx8IElTX0JST0FEV0VMTChkZXZfcHJpdikgfHwKPiAtCQkJICAgIElT X1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQo+IC0JCQkJ cGl4Y2xrID0gY3J0Y19zdGF0ZS0+cGl4ZWxfcmF0ZTsKPiAtCQkJZWxzZQo+IC0JCQkJV0FSTl9P TihkZXZfcHJpdi0+ZGlzcGxheS5tb2Rlc2V0X2NhbGNfY2RjbGspOwo+IC0KPiAtCQkJLyogcGl4 ZWwgcmF0ZSBtdXN0bid0IGV4Y2VlZCA5NSUgb2YgY2RjbGsgd2l0aCBJUFMgb24gQkRXICovCj4g LQkJCWlmIChJU19CUk9BRFdFTEwoZGV2X3ByaXYpICYmIGNydGNfc3RhdGUtPmlwc19lbmFibGVk KQo+IC0JCQkJcGl4Y2xrID0gRElWX1JPVU5EX1VQKHBpeGNsayAqIDEwMCwgOTUpOwo+ICsJCQlp ZiAoZGV2X3ByaXYtPmRpc3BsYXkubW9kZXNldF9jYWxjX2NkY2xrKQo+ICsJCQkJbWluX2NkY2xr ID0gaW50ZWxfY3J0Y19jb21wdXRlX21pbl9jZGNsayhjcnRjX3N0YXRlKTsKCkhtbS4gU28gd2Ug d2VyZSBub3QgYXBwbHlpbmcgdGhlIGF1ZGlvIHdvcmthcm91bmRzIGhlcmUuIFdvbmRlciB3aHkg aXQgZGlkIG5vdCAKY2F1c2UgYW55IHRyb3VibGUuCgpJIGJlbGlldmUsIHRoZSAubW9kZXNldF9j YWxjX2NkY2xrKCkgZnVuY3Rpb25zIGFyZSBub3QgY2FsbGVkIHdoZW4gdGhpcyAKaHdfc3RhdGUg aXMgY29tbWl0dGVkLiBJcyB0aGF0IHJpZ2h0PwoKCj4gCj4gIAkJCWRybV9jYWxjX3RpbWVzdGFt cGluZ19jb25zdGFudHMoJmNydGMtPmJhc2UsCj4gIAkJCQkJCQkmY3J0Y19zdGF0ZS0+YmFzZS5h ZGp1c3RlZF9tb2RlKTsKPiAgCQkJdXBkYXRlX3NjYW5saW5lX29mZnNldChjcnRjKTsKPiAgCQl9 Cj4gCj4gLQkJZGV2X3ByaXYtPm1pbl9waXhjbGtbY3J0Yy0+cGlwZV0gPSBwaXhjbGs7Cj4gKwkJ ZGV2X3ByaXYtPm1pbl9jZGNsa1tjcnRjLT5waXBlXSA9IG1pbl9jZGNsazsKPiAKPiAgCQlpbnRl bF9waXBlX2NvbmZpZ19zYW5pdHlfY2hlY2soZGV2X3ByaXYsIGNydGNfc3RhdGUpOwo+ICAJfQo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+IGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggaW5kZXggZDE3YTMyNDM3ZjA3Li44Y2MxYjg2Yjc5 OWEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+IEBAIC0zODMsNyArMzgzLDggQEAg c3RydWN0IGludGVsX2F0b21pY19zdGF0ZSB7Cj4gIAl1bnNpZ25lZCBpbnQgYWN0aXZlX3BpcGVf Y2hhbmdlczsKPiAKPiAgCXVuc2lnbmVkIGludCBhY3RpdmVfY3J0Y3M7Cj4gLQl1bnNpZ25lZCBp bnQgbWluX3BpeGNsa1tJOTE1X01BWF9QSVBFU107Cj4gKwkvKiBtaW5pbXVtIGFjY2VwdGFibGUg Y2RjbGsgZm9yIGVhY2ggcGlwZSAqLwo+ICsJaW50IG1pbl9jZGNsa1tJOTE1X01BWF9QSVBFU107 Cj4gCj4gIAlzdHJ1Y3QgaW50ZWxfc2hhcmVkX2RwbGxfc3RhdGUgc2hhcmVkX2RwbGxbSTkxNV9O VU1fUExMU107Cj4gCj4gQEAgLTEzMDgsNiArMTMwOSw3IEBAIHZvaWQgaW50ZWxfYXVkaW9faW5p dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQo+ICpkZXZfcHJpdik7IHZvaWQgaW50ZWxfYXVkaW9f ZGVpbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gCj4gIC8qIGludGVs X2NkY2xrLmMgKi8KPiAraW50IGludGVsX2NydGNfY29tcHV0ZV9taW5fY2RjbGsoY29uc3Qgc3Ry dWN0IGludGVsX2NydGNfc3RhdGUKPiAqY3J0Y19zdGF0ZSk7IHZvaWQgc2tsX2luaXRfY2RjbGso c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiAgdm9pZCBza2xfdW5pbml0X2Nk Y2xrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gIHZvaWQgY25sX2luaXRf Y2RjbGsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0 CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK