From mboxrd@z Thu Jan 1 00:00:00 1970 From: Clint Taylor Subject: Re: [PATCH 04/10] drm/i915: CHV DDR DVFS support and another watermark rewrite Date: Fri, 26 Jun 2015 10:56:33 -0700 Message-ID: <558D9251.6000302@intel.com> References: <1435172410-9834-1-git-send-email-ville.syrjala@linux.intel.com> <1435172410-9834-5-git-send-email-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTP id B55A46E3FC for ; Fri, 26 Jun 2015 10:58:55 -0700 (PDT) In-Reply-To: <1435172410-9834-5-git-send-email-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: ville.syrjala@linux.intel.com, intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gMDYvMjQvMjAxNSAxMjowMCBQTSwgdmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20gd3Jv dGU6Cj4gRnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNv bT4KPgo+IFR1cm5zIG91dCB0aGUgVkxWL0NIViBzeXN0ZW0gYWdlbnQgZG9lc24ndCB1bmRlcnN0 YW5kIG1lbW9yeQo+IGxhdGVuY2llcywgc28gdHJ5aW5nIHRvIHJlbHkgb24gdGhlIFBORCBkZWFk bGluZSBtZWNoYW5pc20gaXMgbm90Cj4gZ29pbmcgdG8gZmx5IGVzcGVjaWFsbHkgd2hlbiBERFIg RFZGUyBpcyBlbmFibGVkLiBDdXJyZW50bHkgd2UgdHJ5IHRvCj4gYXZvaWQgdGhlIHByb2JsZW1z IGJ5IGx5aW5nIHRvIHRoZSBzeXN0ZW0gYWdlbnQgYWJvdXQgdGhlIGRlYWRsaW5lcwo+IGFuZCBz ZXR0aW5nIHRoZSBGSUZPIHdhdGVybWFya3MgdG8gOCBjYWNoZWxpbmVzLiBUaGlzIGhvd2V2ZXIg bGVhZHMgdG8KPiBiYWQgbWVtb3J5IHNlbGYgcmVmcmVzaCByZXNpZGVuY3kuCj4KPiBTbyBpbiBv cmRlciB0byBzYXRvc2Z5IGV2ZXJ5b25lIHdlJ2xsIGp1c3QgZ2l2ZSB1cCBvbiB0aGUgZGVhZGxp bmUKPiBzY2hlbWUgYW5kIHByb2dyYW0gdGhlIHdhdGVybWFya3Mgb2xkIHNjaG9vbCBiYXNlZCBv biB0aGUgd29yc3QgY2FzZQo+IG1lbW9yeSBsYXRlbmN5Lgo+Cj4gSSd2ZSBtb2RlbGxlZCB0aGlz IGEgYml0IG9uIHRoZSBJTEsrIGFwcHJvYWNoIHdoZXJlIHdlIGNvbXB1dGUgbXVsdGlwbGUKPiBz ZXRzIG9mIHdhdGVybWFya3MgZm9yIGVhY2ggcGlwZSAoUE0yLFBNNSxERFIgRFZGUykgYW5kIHdo ZW4gbWVyZ2UgdGhldAo+IGFwcHJvcHJpYXRlIG9uZSBsYXRlciB3aXRoIHRoZSB3YXRlcm1hcmtz IGZyb20gb3RoZXIgcGlwZXMuIFRoZXJlIGlzbid0Cj4gdG9vIG11Y2ggdG8gbWVyZ2UgYWN0dWFs bHkgc2luY2UgZWFjaCBwaXBlIGhhcyBhIHRvdGFsbHkgaW5kZXBlbmRlbnQKPiBGSUZPICh3ZWxs IGFwYXJ0IGZyb20gdGhlIG1lc3Mgd2l0aCB0aGUgcGFydGlhbGx5IHNoYXJlZCBEU1BBUkIKPiBy ZWdpc3RlcnMpLCBidXQgc3RpbGwgZGVjb3B1bGluZyB0aGUgcGlwZXMgZnJvbSBlYWNoIG90aGVy IHNlZW1zIGxpa2UgYQo+IGdvb2QgaWRlYS4KPgo+IEV2ZW50dWFsbHkgd2UnbGwgd2FudCB0byBw ZXJmb3JtIHRoZSB3YXRlcm1hcmsgdXBkYXRlIGluIHR3byBwaGFzZXMKPiBhcm91bmQgdGhlIHBs YW5lIHVwZGF0ZSB0byBhdm9pZCB1bmRlcnJ1bnMgZHVlIHRvIHRoZSBzaW5nbGUgYnVmZmVyZWQK PiB3YXRlcm1hcmsgcmVnaXN0ZXJzLiBCdXQgdGhhdCdzIHN0aWxsIGluIGxpbWJvIGZvciBJTEsr IHRvbywgc28gSSd2ZSBub3QKPiBnb25lIHRoYXQgZmFyIHlldCBmb3IgVkxWL0NIViBlaXRoZXIu Cj4KPiBTaWduZWQtb2ZmLWJ5OiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXgu aW50ZWwuY29tPgo+IC0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAg IHwgIDI4ICstLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIHwgICA2 ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCAgICAgfCAgMTEgKysKPiAg IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMgICAgICB8IDMxOCArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrLQo+ICAgNCBmaWxlcyBjaGFuZ2VkLCAzNDUgaW5zZXJ0aW9u cygrKSwgMTggZGVsZXRpb25zKC0pCj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBpbmRleCA1 MTRhZGNmLi4zN2NjNjUzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gQEAgLTI3Niw2 ICsyNzYsMTIgQEAgc3RydWN0IGk5MTVfaG90cGx1ZyB7Cj4gICAJCQkgICAgJmRldi0+bW9kZV9j b25maWcucGxhbmVfbGlzdCwJXAo+ICAgCQkJICAgIGJhc2UuaGVhZCkKPgo+ICsjZGVmaW5lIGZv cl9lYWNoX2ludGVsX3BsYW5lX29uX2NydGMoZGV2LCBpbnRlbF9jcnRjLCBpbnRlbF9wbGFuZSkJ XAo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShpbnRlbF9wbGFuZSwJCQkJXAo+ICsJCQkgICAgJihk ZXYpLT5tb2RlX2NvbmZpZy5wbGFuZV9saXN0LAkJXAo+ICsJCQkgICAgYmFzZS5oZWFkKQkJCQkJ XAo+ICsJCWlmICgoaW50ZWxfcGxhbmUpLT5waXBlID09IChpbnRlbF9jcnRjKS0+cGlwZSkKPiAr Cj4gICAjZGVmaW5lIGZvcl9lYWNoX2ludGVsX2NydGMoZGV2LCBpbnRlbF9jcnRjKSBcCj4gICAJ bGlzdF9mb3JfZWFjaF9lbnRyeShpbnRlbF9jcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xp c3QsIGJhc2UuaGVhZCkKPgo+IEBAIC0xNDk4LDE4ICsxNTA0LDIwIEBAIHN0cnVjdCBpbGtfd21f dmFsdWVzIHsKPiAgIAllbnVtIGludGVsX2RkYl9wYXJ0aXRpb25pbmcgcGFydGl0aW9uaW5nOwo+ ICAgfTsKPgo+IC1zdHJ1Y3Qgdmx2X3dtX3ZhbHVlcyB7Cj4gLQlzdHJ1Y3Qgewo+IC0JCXVpbnQx Nl90IHByaW1hcnk7Cj4gLQkJdWludDE2X3Qgc3ByaXRlWzJdOwo+IC0JCXVpbnQ4X3QgY3Vyc29y Owo+IC0JfSBwaXBlWzNdOwo+ICtzdHJ1Y3Qgdmx2X3BpcGVfd20gewo+ICsJdWludDE2X3QgcHJp bWFyeTsKPiArCXVpbnQxNl90IHNwcml0ZVsyXTsKPiArCXVpbnQ4X3QgY3Vyc29yOwo+ICt9Owo+ Cj4gLQlzdHJ1Y3Qgewo+IC0JCXVpbnQxNl90IHBsYW5lOwo+IC0JCXVpbnQ4X3QgY3Vyc29yOwo+ IC0JfSBzcjsKPiArc3RydWN0IHZsdl9zcl93bSB7Cj4gKwl1aW50MTZfdCBwbGFuZTsKPiArCXVp bnQ4X3QgY3Vyc29yOwo+ICt9Owo+Cj4gK3N0cnVjdCB2bHZfd21fdmFsdWVzIHsKPiArCXN0cnVj dCB2bHZfcGlwZV93bSBwaXBlWzNdOwo+ICsJc3RydWN0IHZsdl9zcl93bSBzcjsKPiAgIAlzdHJ1 Y3Qgewo+ICAgCQl1aW50OF90IGN1cnNvcjsKPiAgIAkJdWludDhfdCBzcHJpdGVbMl07Cj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+IGluZGV4IGIxNWQ1N2YuLjE0MjQzMjAgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gQEAgLTQ2OTAsOCArNDY5MCwx MSBAQCBpbnRlbF9wcmVfZGlzYWJsZV9wcmltYXJ5KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiAg IAkgKiBldmVudCB3aGljaCBpcyBhZnRlciB0aGUgdmJsYW5rIHN0YXJ0IGV2ZW50LCBzbyB3ZSBu ZWVkIHRvIGhhdmUgYQo+ICAgCSAqIHdhaXQtZm9yLXZibGFuayBiZXR3ZWVuIGRpc2FibGluZyB0 aGUgcGxhbmUgYW5kIHRoZSBwaXBlLgo+ICAgCSAqLwo+IC0JaWYgKEhBU19HTUNIX0RJU1BMQVko ZGV2KSkKPiArCWlmIChIQVNfR01DSF9ESVNQTEFZKGRldikpIHsKPiAgIAkJaW50ZWxfc2V0X21l bW9yeV9jeHNyKGRldl9wcml2LCBmYWxzZSk7Cj4gKwkJZGV2X3ByaXYtPndtLnZsdi5jeHNyID0g ZmFsc2U7Cj4gKwkJaW50ZWxfd2FpdF9mb3JfdmJsYW5rKGRldiwgcGlwZSk7Cj4gKwl9Cj4KPiAg IAkvKgo+ICAgCSAqIEZJWE1FIElQUyBzaG91bGQgYmUgZmluZSBhcyBsb25nIGFzIG9uZSBwbGFu ZSBpcwo+IEBAIC02MDA1LDcgKzYwMDgsNiBAQCBzdGF0aWMgdm9pZCB2YWxsZXl2aWV3X2NydGNf ZW5hYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPgo+ICAgCWludGVsX2NydGNfbG9hZF9sdXQo Y3J0Yyk7Cj4KPiAtCWludGVsX3VwZGF0ZV93YXRlcm1hcmtzKGNydGMpOwo+ICAgCWludGVsX2Vu YWJsZV9waXBlKGludGVsX2NydGMpOwo+Cj4gICAJYXNzZXJ0X3ZibGFua19kaXNhYmxlZChjcnRj KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+IGluZGV4IDM2NzNhNzEuLmYyNmE2ODAgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+IEBAIC00NjIsNiArNDYyLDE1IEBAIHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlIHsKPiAgIAllbnVtIHBpcGUgaHN3X3dvcmthcm91bmRfcGlwZTsK PiAgIH07Cj4KPiArc3RydWN0IHZsdl93bV9zdGF0ZSB7Cj4gKwlzdHJ1Y3Qgdmx2X3BpcGVfd20g d21bM107Cj4gKwlzdHJ1Y3Qgdmx2X3NyX3dtIHNyWzNdOwo+ICsJdWludDhfdCBudW1fYWN0aXZl X3BsYW5lczsKPiArCXVpbnQ4X3QgbnVtX2xldmVsczsKPiArCXVpbnQ4X3QgbGV2ZWw7Cj4gKwli b29sIGN4c3I7Cj4gK307Cj4gKwo+ICAgc3RydWN0IGludGVsX3BpcGVfd20gewo+ICAgCXN0cnVj dCBpbnRlbF93bV9sZXZlbCB3bVs1XTsKPiAgIAl1aW50MzJfdCBsaW5ldGltZTsKPiBAQCAtNTY0 LDYgKzU3Myw4IEBAIHN0cnVjdCBpbnRlbF9jcnRjIHsKPgo+ICAgCS8qIHNjYWxlcnMgYXZhaWxh YmxlIG9uIHRoaXMgY3J0YyAqLwo+ICAgCWludCBudW1fc2NhbGVyczsKPiArCj4gKwlzdHJ1Y3Qg dmx2X3dtX3N0YXRlIHdtX3N0YXRlOwo+ICAgfTsKPgo+ICAgc3RydWN0IGludGVsX3BsYW5lX3dt X3BhcmFtZXRlcnMgewo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9w bS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwo+IGluZGV4IGU2NzU0OGQuLmQw NDZlNWYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKPiBAQCAtMzM1LDggKzMzNSw2IEBA IHZvaWQgaW50ZWxfc2V0X21lbW9yeV9jeHNyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwgYm9vbCBlbmFibGUpCj4gICAJaWYgKElTX1ZBTExFWVZJRVcoZGV2KSkgewo+ICAgCQlJ OTE1X1dSSVRFKEZXX0JMQ19TRUxGX1ZMViwgZW5hYmxlID8gRldfQ1NQV1JEV05FTiA6IDApOwo+ ICAgCQlQT1NUSU5HX1JFQUQoRldfQkxDX1NFTEZfVkxWKTsKPiAtCQlpZiAoSVNfQ0hFUlJZVklF VyhkZXYpKQo+IC0JCQljaHZfc2V0X21lbW9yeV9wbTUoZGV2X3ByaXYsIGVuYWJsZSk7Cj4gICAJ fSBlbHNlIGlmIChJU19HNFgoZGV2KSB8fCBJU19DUkVTVExJTkUoZGV2KSkgewo+ICAgCQlJOTE1 X1dSSVRFKEZXX0JMQ19TRUxGLCBlbmFibGUgPyBGV19CTENfU0VMRl9FTiA6IDApOwo+ICAgCQlQ T1NUSU5HX1JFQUQoRldfQkxDX1NFTEYpOwo+IEBAIC05MjksOCArOTI3LDYgQEAgc3RhdGljIHZv aWQgdmx2X3dyaXRlX3dtX3ZhbHVlcyhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKPiAgIAl9Cj4K PiAgIAlQT1NUSU5HX1JFQUQoRFNQRlcxKTsKPiAtCj4gLQlkZXZfcHJpdi0+d20udmx2ID0gKndt Owo+ICAgfQo+Cj4gICAjdW5kZWYgRldfV01fVkxWCj4gQEAgLTEwMTQsNiArMTAxMCw3MiBAQCBl bnVtIHZsdl93bV9sZXZlbCB7Cj4gICAJVkxWX1dNX05VTV9MRVZFTFMgPSAxLAo+ICAgfTsKPgo+ ICsvKiBsYXRlbmN5IG11c3QgYmUgaW4gMC4xdXMgdW5pdHMuICovCj4gK3N0YXRpYyB1bnNpZ25l ZCBpbnQgdmx2X3dtX21ldGhvZDIodW5zaWduZWQgaW50IHBpeGVsX3JhdGUsCj4gKwkJCQkgICB1 bnNpZ25lZCBpbnQgcGlwZV9odG90YWwsCj4gKwkJCQkgICB1bnNpZ25lZCBpbnQgaG9yaXpfcGl4 ZWxzLAo+ICsJCQkJICAgdW5zaWduZWQgaW50IGJ5dGVzX3Blcl9waXhlbCwKPiArCQkJCSAgIHVu c2lnbmVkIGludCBsYXRlbmN5KQo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQgcmV0Owo+ICsKPiArCXJl dCA9IChsYXRlbmN5ICogcGl4ZWxfcmF0ZSkgLyAocGlwZV9odG90YWwgKiAxMDAwMCk7Cj4gKwly ZXQgPSAocmV0ICsgMSkgKiBob3Jpel9waXhlbHMgKiBieXRlc19wZXJfcGl4ZWw7Cj4gKwlyZXQg PSBESVZfUk9VTkRfVVAocmV0LCA2NCk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgdmx2X3NldHVwX3dtX2xhdGVuY3koc3RydWN0IGRybV9kZXZpY2UgKmRldikK PiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJp dmF0ZTsKPiArCj4gKwkvKiBhbGwgbGF0ZW5jaWVzIGluIHVzZWMgKi8KPiArCWRldl9wcml2LT53 bS5wcmlfbGF0ZW5jeVtWTFZfV01fTEVWRUxfUE0yXSA9IDM7Cj4gKwo+ICsJaWYgKElTX0NIRVJS WVZJRVcoZGV2X3ByaXYpKSB7Cj4gKwkJZGV2X3ByaXYtPndtLnByaV9sYXRlbmN5W1ZMVl9XTV9M RVZFTF9QTTVdID0gMTI7Cj4gKwkJZGV2X3ByaXYtPndtLnByaV9sYXRlbmN5W1ZMVl9XTV9MRVZF TF9ERFJfRFZGU10gPSAzMzsKCm5pdCAjZGVmaW5lcyBmb3IgdGhlc2UgbWFnaWMgdmFsdWVzIHBs ZWFzZQoKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHVpbnQxNl90IHZsdl9jb21wdXRlX3dtX2xl dmVsKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCj4gKwkJCQkgICAgIHN0cnVjdCBpbnRlbF9j cnRjICpjcnRjLAo+ICsJCQkJICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnN0 YXRlLAo+ICsJCQkJICAgICBpbnQgbGV2ZWwpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKPiArCWludCBjbG9jaywg aHRvdGFsLCBwaXhlbF9zaXplLCB3aWR0aCwgd207Cj4gKwo+ICsJaWYgKGRldl9wcml2LT53bS5w cmlfbGF0ZW5jeVtsZXZlbF0gPT0gMCkKPiArCQlyZXR1cm4gVVNIUlRfTUFYOwo+ICsKPiArCWlm ICghc3RhdGUtPnZpc2libGUpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJcGl4ZWxfc2l6ZSA9IGRy bV9mb3JtYXRfcGxhbmVfY3BwKHN0YXRlLT5iYXNlLmZiLT5waXhlbF9mb3JtYXQsIDApOwo+ICsJ Y2xvY2sgPSBjcnRjLT5jb25maWctPmJhc2UuYWRqdXN0ZWRfbW9kZS5jcnRjX2Nsb2NrOwo+ICsJ aHRvdGFsID0gY3J0Yy0+Y29uZmlnLT5iYXNlLmFkanVzdGVkX21vZGUuY3J0Y19odG90YWw7Cj4g Kwl3aWR0aCA9IGNydGMtPmNvbmZpZy0+cGlwZV9zcmNfdzsKPiArCWlmIChXQVJOX09OKGh0b3Rh bCA9PSAwKSkKPiArCQlodG90YWwgPSAxOwo+ICsKPiArCWlmIChwbGFuZS0+YmFzZS50eXBlID09 IERSTV9QTEFORV9UWVBFX0NVUlNPUikgewo+ICsJCS8qCj4gKwkJICogRklYTUUgdGhlIGZvcm11 bGEgZ2l2ZXMgdmFsdWVzIHRoYXQgYXJlCj4gKwkJICogdG9vIGJpZyBmb3IgdGhlIGN1cnNvciBG SUZPLCBhbmQgaGVuY2Ugd2UKPiArCQkgKiB3b3VsZCBuZXZlciBiZSBhYmxlIHRvIHVzZSBjdXJz b3JzLiBGb3IKPiArCQkgKiBub3cganVzdCBoYXJkY29kZSB0aGUgd2F0ZXJtYXJrLgo+ICsJCSAq Lwo+ICsJCXdtID0gNjM7CgpIYXJkIGNvZGluZyB0byBtYXhpbXVtIHZhbHVlIG9mIDYzLiBTaG91 bGQgcHJvYmFibHkgYmUgcHJvZ3JhbW1lZCB0byAKd29yc3QgY2FzZSBpbnN0ZWFkIG9mIG1heGlt dW0uCgo+ICsJfSBlbHNlIHsKPiArCQl3bSA9IHZsdl93bV9tZXRob2QyKGNsb2NrLCBodG90YWws IHdpZHRoLCBwaXhlbF9zaXplLAo+ICsJCQkJICAgIGRldl9wcml2LT53bS5wcmlfbGF0ZW5jeVts ZXZlbF0gKiAxMCk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIG1pbl90KGludCwgd20sIFVTSFJUX01B WCk7Cj4gK30KPiArCj4gICBzdGF0aWMgYm9vbCB2bHZfY29tcHV0ZV9zcl93bShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LAo+ICAgCQkJICAgICAgc3RydWN0IHZsdl93bV92YWx1ZXMgKndtKQo+ICAg ewo+IEBAIC0xMTA1LDYgKzExNjcsMjQ5IEBAIHN0YXRpYyB2b2lkIHZhbGxleXZpZXdfdXBkYXRl X3dtKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPgo+ICAgCWlmIChjeHNyX2VuYWJsZWQpCj4gICAJ CWludGVsX3NldF9tZW1vcnlfY3hzcihkZXZfcHJpdiwgdHJ1ZSk7Cj4gKwo+ICsJZGV2X3ByaXYt PndtLnZsdiA9IHdtOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2bHZfaW52ZXJ0X3dtcyhzdHJ1 Y3QgaW50ZWxfY3J0YyAqY3J0YykKPiArewo+ICsJc3RydWN0IHZsdl93bV9zdGF0ZSAqd21fc3Rh dGUgPSAmY3J0Yy0+d21fc3RhdGU7Cj4gKwlpbnQgbGV2ZWw7Cj4gKwo+ICsJZm9yIChsZXZlbCA9 IDA7IGxldmVsIDwgd21fc3RhdGUtPm51bV9sZXZlbHM7IGxldmVsKyspIHsKPiArCQlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7Cj4gKwkJY29uc3QgaW50IHNyX2ZpZm9f c2l6ZSA9IElOVEVMX0lORk8oZGV2KS0+bnVtX3BpcGVzICogNTEyIC0gMTsKPiArCQlzdHJ1Y3Qg aW50ZWxfcGxhbmUgKnBsYW5lOwo+ICsKPiArCQl3bV9zdGF0ZS0+c3JbbGV2ZWxdLnBsYW5lID0g c3JfZmlmb19zaXplIC0gd21fc3RhdGUtPnNyW2xldmVsXS5wbGFuZTsKPiArCQl3bV9zdGF0ZS0+ c3JbbGV2ZWxdLmN1cnNvciA9IDYzIC0gd21fc3RhdGUtPnNyW2xldmVsXS5jdXJzb3I7Cj4gKwo+ ICsJCWZvcl9lYWNoX2ludGVsX3BsYW5lX29uX2NydGMoZGV2LCBjcnRjLCBwbGFuZSkgewo+ICsJ CQlzd2l0Y2ggKHBsYW5lLT5iYXNlLnR5cGUpIHsKPiArCQkJCWludCBzcHJpdGU7Cj4gKwkJCWNh c2UgRFJNX1BMQU5FX1RZUEVfQ1VSU09SOgo+ICsJCQkJd21fc3RhdGUtPndtW2xldmVsXS5jdXJz b3IgPSBwbGFuZS0+d20uZmlmb19zaXplIC0KPiArCQkJCQl3bV9zdGF0ZS0+d21bbGV2ZWxdLmN1 cnNvcjsKPiArCQkJCWJyZWFrOwo+ICsJCQljYXNlIERSTV9QTEFORV9UWVBFX1BSSU1BUlk6Cj4g KwkJCQl3bV9zdGF0ZS0+d21bbGV2ZWxdLnByaW1hcnkgPSBwbGFuZS0+d20uZmlmb19zaXplIC0K PiArCQkJCQl3bV9zdGF0ZS0+d21bbGV2ZWxdLnByaW1hcnk7Cj4gKwkJCQlicmVhazsKPiArCQkJ Y2FzZSBEUk1fUExBTkVfVFlQRV9PVkVSTEFZOgo+ICsJCQkJc3ByaXRlID0gcGxhbmUtPnBsYW5l Owo+ICsJCQkJd21fc3RhdGUtPndtW2xldmVsXS5zcHJpdGVbc3ByaXRlXSA9IHBsYW5lLT53bS5m aWZvX3NpemUgLQo+ICsJCQkJCXdtX3N0YXRlLT53bVtsZXZlbF0uc3ByaXRlW3Nwcml0ZV07Cj4g KwkJCQlicmVhazsKPiArCQkJfQo+ICsJCX0KPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQg X3Zsdl9jb21wdXRlX3dtKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQo+ICt7Cj4gKwlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7Cj4gKwlzdHJ1Y3Qgdmx2X3dtX3N0YXRl ICp3bV9zdGF0ZSA9ICZjcnRjLT53bV9zdGF0ZTsKPiArCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxh bmU7Cj4gKwlpbnQgc3JfZmlmb19zaXplID0gSU5URUxfSU5GTyhkZXYpLT5udW1fcGlwZXMgKiA1 MTIgLSAxOwo+ICsJaW50IGxldmVsOwo+ICsKPiArCW1lbXNldCh3bV9zdGF0ZSwgMCwgc2l6ZW9m KCp3bV9zdGF0ZSkpOwo+ICsKPiArCXdtX3N0YXRlLT5jeHNyID0gY3J0Yy0+cGlwZSAhPSBQSVBF X0M7Cj4gKwlpZiAoSVNfQ0hFUlJZVklFVyhkZXYpKQo+ICsJCXdtX3N0YXRlLT5udW1fbGV2ZWxz ID0gQ0hWX1dNX05VTV9MRVZFTFM7Cj4gKwllbHNlCj4gKwkJd21fc3RhdGUtPm51bV9sZXZlbHMg PSBWTFZfV01fTlVNX0xFVkVMUzsKPiArCj4gKwl3bV9zdGF0ZS0+bnVtX2FjdGl2ZV9wbGFuZXMg PSAwOwo+ICsJZm9yX2VhY2hfaW50ZWxfcGxhbmVfb25fY3J0YyhkZXYsIGNydGMsIHBsYW5lKSB7 Cj4gKwkJc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpzdGF0ZSA9Cj4gKwkJCXRvX2ludGVsX3Bs YW5lX3N0YXRlKHBsYW5lLT5iYXNlLnN0YXRlKTsKPiArCj4gKwkJaWYgKHBsYW5lLT5iYXNlLnR5 cGUgPT0gRFJNX1BMQU5FX1RZUEVfQ1VSU09SKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJaWYg KHN0YXRlLT52aXNpYmxlKQo+ICsJCQl3bV9zdGF0ZS0+bnVtX2FjdGl2ZV9wbGFuZXMrKzsKPiAr CX0KPiArCj4gKwlpZiAod21fc3RhdGUtPm51bV9hY3RpdmVfcGxhbmVzICE9IDEpCj4gKwkJd21f c3RhdGUtPmN4c3IgPSBmYWxzZTsKPiArCj4gKwlpZiAod21fc3RhdGUtPmN4c3IpIHsKPiArCQlm b3IgKGxldmVsID0gMDsgbGV2ZWwgPCB3bV9zdGF0ZS0+bnVtX2xldmVsczsgbGV2ZWwrKykgewo+ ICsJCQl3bV9zdGF0ZS0+c3JbbGV2ZWxdLnBsYW5lID0gc3JfZmlmb19zaXplOwo+ICsJCQl3bV9z dGF0ZS0+c3JbbGV2ZWxdLmN1cnNvciA9IDYzOwo+ICsJCX0KPiArCX0KPiArCj4gKwlmb3JfZWFj aF9pbnRlbF9wbGFuZV9vbl9jcnRjKGRldiwgY3J0YywgcGxhbmUpIHsKPiArCQlzdHJ1Y3QgaW50 ZWxfcGxhbmVfc3RhdGUgKnN0YXRlID0KPiArCQkJdG9faW50ZWxfcGxhbmVfc3RhdGUocGxhbmUt PmJhc2Uuc3RhdGUpOwo+ICsKPiArCQlpZiAoIXN0YXRlLT52aXNpYmxlKQo+ICsJCQljb250aW51 ZTsKPiArCj4gKwkJLyogbm9ybWFsIHdhdGVybWFya3MgKi8KPiArCQlmb3IgKGxldmVsID0gMDsg bGV2ZWwgPCB3bV9zdGF0ZS0+bnVtX2xldmVsczsgbGV2ZWwrKykgewo+ICsJCQlpbnQgd20gPSB2 bHZfY29tcHV0ZV93bV9sZXZlbChwbGFuZSwgY3J0Yywgc3RhdGUsIGxldmVsKTsKPiArCQkJaW50 IG1heF93bSA9IHBsYW5lLT5iYXNlLnR5cGUgPT0gRFJNX1BMQU5FX1RZUEVfQ1VSU09SID8gNjMg OiA1MTE7Cj4gKwo+ICsJCQkvKiBoYWNrICovCj4gKwkJCWlmIChXQVJOX09OKGxldmVsID09IDAg JiYgd20gPiBtYXhfd20pKQo+ICsJCQkJd20gPSBtYXhfd207Cj4gKwo+ICsJCQlpZiAod20gPiBw bGFuZS0+d20uZmlmb19zaXplKQo+ICsJCQkJYnJlYWs7Cj4gKwo+ICsJCQlzd2l0Y2ggKHBsYW5l LT5iYXNlLnR5cGUpIHsKPiArCQkJCWludCBzcHJpdGU7Cj4gKwkJCWNhc2UgRFJNX1BMQU5FX1RZ UEVfQ1VSU09SOgo+ICsJCQkJd21fc3RhdGUtPndtW2xldmVsXS5jdXJzb3IgPSB3bTsKPiArCQkJ CWJyZWFrOwo+ICsJCQljYXNlIERSTV9QTEFORV9UWVBFX1BSSU1BUlk6Cj4gKwkJCQl3bV9zdGF0 ZS0+d21bbGV2ZWxdLnByaW1hcnkgPSB3bTsKPiArCQkJCWJyZWFrOwo+ICsJCQljYXNlIERSTV9Q TEFORV9UWVBFX09WRVJMQVk6Cj4gKwkJCQlzcHJpdGUgPSBwbGFuZS0+cGxhbmU7Cj4gKwkJCQl3 bV9zdGF0ZS0+d21bbGV2ZWxdLnNwcml0ZVtzcHJpdGVdID0gd207Cj4gKwkJCQlicmVhazsKPiAr CQkJfQo+ICsJCX0KPiArCj4gKwkJd21fc3RhdGUtPm51bV9sZXZlbHMgPSBsZXZlbDsKPiArCj4g KwkJaWYgKCF3bV9zdGF0ZS0+Y3hzcikKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCS8qIG1heGZp Zm8gd2F0ZXJtYXJrcyAqLwo+ICsJCXN3aXRjaCAocGxhbmUtPmJhc2UudHlwZSkgewo+ICsJCQlp bnQgc3ByaXRlLCBsZXZlbDsKPiArCQljYXNlIERSTV9QTEFORV9UWVBFX0NVUlNPUjoKPiArCQkJ Zm9yIChsZXZlbCA9IDA7IGxldmVsIDwgd21fc3RhdGUtPm51bV9sZXZlbHM7IGxldmVsKyspCj4g KwkJCQl3bV9zdGF0ZS0+c3JbbGV2ZWxdLmN1cnNvciA9Cj4gKwkJCQkJd21fc3RhdGUtPnNyW2xl dmVsXS5jdXJzb3I7Cj4gKwkJCWJyZWFrOwo+ICsJCWNhc2UgRFJNX1BMQU5FX1RZUEVfUFJJTUFS WToKPiArCQkJZm9yIChsZXZlbCA9IDA7IGxldmVsIDwgd21fc3RhdGUtPm51bV9sZXZlbHM7IGxl dmVsKyspCj4gKwkJCQl3bV9zdGF0ZS0+c3JbbGV2ZWxdLnBsYW5lID0KPiArCQkJCQltaW4od21f c3RhdGUtPnNyW2xldmVsXS5wbGFuZSwKPiArCQkJCQkgICAgd21fc3RhdGUtPndtW2xldmVsXS5w cmltYXJ5KTsKPiArCQkJYnJlYWs7Cj4gKwkJY2FzZSBEUk1fUExBTkVfVFlQRV9PVkVSTEFZOgo+ ICsJCQlzcHJpdGUgPSBwbGFuZS0+cGxhbmU7Cj4gKwkJCWZvciAobGV2ZWwgPSAwOyBsZXZlbCA8 IHdtX3N0YXRlLT5udW1fbGV2ZWxzOyBsZXZlbCsrKQo+ICsJCQkJd21fc3RhdGUtPnNyW2xldmVs XS5wbGFuZSA9Cj4gKwkJCQkJbWluKHdtX3N0YXRlLT5zcltsZXZlbF0ucGxhbmUsCj4gKwkJCQkJ ICAgIHdtX3N0YXRlLT53bVtsZXZlbF0uc3ByaXRlW3Nwcml0ZV0pOwo+ICsJCQlicmVhazsKPiAr CQl9Cj4gKwl9Cj4gKwo+ICsJLyogY2xlYXIgYW55IChwYXJ0aWFsbHkpIGZpbGxlZCBpbnZhbGlk IGxldmVscyAqLwo+ICsJZm9yIChsZXZlbCA9IHdtX3N0YXRlLT5udW1fbGV2ZWxzOyBsZXZlbCA8 IENIVl9XTV9OVU1fTEVWRUxTOyBsZXZlbCsrKSB7Cj4gKwkJbWVtc2V0KCZ3bV9zdGF0ZS0+d21b bGV2ZWxdLCAwLCBzaXplb2Yod21fc3RhdGUtPndtW2xldmVsXSkpOwo+ICsJCW1lbXNldCgmd21f c3RhdGUtPnNyW2xldmVsXSwgMCwgc2l6ZW9mKHdtX3N0YXRlLT5zcltsZXZlbF0pKTsKPiArCX0K PiArCj4gKwl2bHZfaW52ZXJ0X3dtcyhjcnRjKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmx2 X21lcmdlX3dtKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJCSBzdHJ1Y3Qgdmx2X3dtX3Zh bHVlcyAqd20pCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjOwo+ICsJaW50IG51bV9h Y3RpdmVfY3J0Y3MgPSAwOwo+ICsKPiArCWlmIChJU19DSEVSUllWSUVXKGRldikpCj4gKwkJd20t PmxldmVsID0gVkxWX1dNX0xFVkVMX0REUl9EVkZTOwo+ICsJZWxzZQo+ICsJCXdtLT5sZXZlbCA9 IFZMVl9XTV9MRVZFTF9QTTI7Cj4gKwl3bS0+Y3hzciA9IHRydWU7Cj4gKwo+ICsJZm9yX2VhY2hf aW50ZWxfY3J0YyhkZXYsIGNydGMpIHsKPiArCQljb25zdCBzdHJ1Y3Qgdmx2X3dtX3N0YXRlICp3 bV9zdGF0ZSA9ICZjcnRjLT53bV9zdGF0ZTsKPiArCj4gKwkJaWYgKCFjcnRjLT5hY3RpdmUpCj4g KwkJCWNvbnRpbnVlOwo+ICsKPiArCQlpZiAoIXdtX3N0YXRlLT5jeHNyKQo+ICsJCQl3bS0+Y3hz ciA9IGZhbHNlOwo+ICsKPiArCQludW1fYWN0aXZlX2NydGNzKys7Cj4gKwkJd20tPmxldmVsID0g bWluX3QoaW50LCB3bS0+bGV2ZWwsIHdtX3N0YXRlLT5udW1fbGV2ZWxzIC0gMSk7Cj4gKwl9Cj4g Kwo+ICsJaWYgKG51bV9hY3RpdmVfY3J0Y3MgIT0gMSkKPiArCQl3bS0+Y3hzciA9IGZhbHNlOwo+ ICsKPiArCWZvcl9lYWNoX2ludGVsX2NydGMoZGV2LCBjcnRjKSB7Cj4gKwkJc3RydWN0IHZsdl93 bV9zdGF0ZSAqd21fc3RhdGUgPSAmY3J0Yy0+d21fc3RhdGU7Cj4gKwkJZW51bSBwaXBlIHBpcGUg PSBjcnRjLT5waXBlOwo+ICsKPiArCQlpZiAoIWNydGMtPmFjdGl2ZSkKPiArCQkJY29udGludWU7 Cj4gKwo+ICsJCXdtLT5waXBlW3BpcGVdID0gd21fc3RhdGUtPndtW3dtLT5sZXZlbF07Cj4gKwkJ aWYgKHdtLT5jeHNyKQo+ICsJCQl3bS0+c3IgPSB3bV9zdGF0ZS0+c3Jbd20tPmxldmVsXTsKPiAr Cj4gKwkJd20tPmRkbFtwaXBlXS5wcmltYXJ5ID0gRERMX1BSRUNJU0lPTl9ISUdIIHwgMjsKPiAr CQl3bS0+ZGRsW3BpcGVdLnNwcml0ZVswXSA9IERETF9QUkVDSVNJT05fSElHSCB8IDI7Cj4gKwkJ d20tPmRkbFtwaXBlXS5zcHJpdGVbMV0gPSBERExfUFJFQ0lTSU9OX0hJR0ggfCAyOwo+ICsJCXdt LT5kZGxbcGlwZV0uY3Vyc29yID0gRERMX1BSRUNJU0lPTl9ISUdIIHwgMjsKCkRpZCB3ZSByZWFs bHkgZGVjaWRlIHRoYXQgMHgyIHdhcyB0aGUgZmluYWwgY29ycmVjdCB2YWx1ZSBmb3IgdGhlIERM IApyZWdpc3RlcnM/IEkgZmlndXJlZCB3ZSB3b3VsZCBiZSBydW5uaW5nIDB4NyBmb3IgQ0hWLgoK PiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmx2X3VwZGF0ZV93bShzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpCj4gK3sKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Cj4g KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ ICsJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwo+ ICsJZW51bSBwaXBlIHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOwo+ICsJc3RydWN0IHZsdl93bV92 YWx1ZXMgd20gPSB7fTsKPiArCj4gKwlfdmx2X2NvbXB1dGVfd20oaW50ZWxfY3J0Yyk7Cj4gKwl2 bHZfbWVyZ2Vfd20oZGV2LCAmd20pOwo+ICsKPiArCWlmIChtZW1jbXAoJmRldl9wcml2LT53bS52 bHYsICZ3bSwgc2l6ZW9mKHdtKSkgPT0gMCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJaWYgKHdtLmxl dmVsIDwgVkxWX1dNX0xFVkVMX0REUl9EVkZTICYmCj4gKwkgICAgZGV2X3ByaXYtPndtLnZsdi5s ZXZlbCA+PSBWTFZfV01fTEVWRUxfRERSX0RWRlMpCj4gKwkJY2h2X3NldF9tZW1vcnlfZHZmcyhk ZXZfcHJpdiwgZmFsc2UpOwo+ICsKPiArCWlmICh3bS5sZXZlbCA8IFZMVl9XTV9MRVZFTF9QTTUg JiYKPiArCSAgICBkZXZfcHJpdi0+d20udmx2LmxldmVsID49IFZMVl9XTV9MRVZFTF9QTTUpCj4g KwkJY2h2X3NldF9tZW1vcnlfcG01KGRldl9wcml2LCBmYWxzZSk7Cj4gKwo+ICsJaWYgKCF3bS5j eHNyICYmIGRldl9wcml2LT53bS52bHYuY3hzcikgewo+ICsJCWludGVsX3NldF9tZW1vcnlfY3hz cihkZXZfcHJpdiwgZmFsc2UpOwo+ICsJCWludGVsX3dhaXRfZm9yX3ZibGFuayhkZXYsIHBpcGUp Owo+ICsJfQo+ICsKPiArCXZsdl93cml0ZV93bV92YWx1ZXMoaW50ZWxfY3J0YywgJndtKTsKPiAr Cj4gKwlEUk1fREVCVUdfS01TKCJTZXR0aW5nIEZJRk8gd2F0ZXJtYXJrcyAtICVjOiBwbGFuZT0l ZCwgY3Vyc29yPSVkLCAiCj4gKwkJICAgICAgInNwcml0ZTA9JWQsIHNwcml0ZTE9JWQsIFNSOiBw bGFuZT0lZCwgY3Vyc29yPSVkIGxldmVsPSVkIGN4c3I9JWRcbiIsCj4gKwkJICAgICAgcGlwZV9u YW1lKHBpcGUpLCB3bS5waXBlW3BpcGVdLnByaW1hcnksIHdtLnBpcGVbcGlwZV0uY3Vyc29yLAo+ ICsJCSAgICAgIHdtLnBpcGVbcGlwZV0uc3ByaXRlWzBdLCB3bS5waXBlW3BpcGVdLnNwcml0ZVsx XSwKPiArCQkgICAgICB3bS5zci5wbGFuZSwgd20uc3IuY3Vyc29yLCB3bS5sZXZlbCwgd20uY3hz cik7Cj4gKwoKTG92ZSB0aGUgZGV0YWlsZWQgRFJNX0RFQlVHX0tNUyAtIG9mIGNvdXJzZSBpdHMg c2hvd2luZyB0aGUgb25seSByZWFsIAppc3N1ZSBJIGhhdmUgZm91bmQgaW4gdGhlIHNlcmllcyB0 aGF0IHRoZSBjdXJzb3Igd2F0ZXJtYXJrIGlzIGJlaW5nIApwcm9ncmFtbWVkIGludmVydGVkLiA2 MyB3aGVuIHRoZSBjdXJzb3IgaXMgZGlzYWJsZWQgYW5kIDAgd2hlbiBpdHMgCmVuYWJsZWQuIFRo aXMgbGVhZHMgdG8gYW4gU1JSJSBpbmNyZWFzZSBvZiB+MTAlIHdoZW4gdGhlIGN1cnNvciBpcyAK ZW5hYmxlZC4KCi8vIEN1cnNvciBkaXNhYmxlZApbIDI2NjIuMzU1MjE4XSBbZHJtOnZsdl91cGRh dGVfd21dIFNldHRpbmcgRklGTyB3YXRlcm1hcmtzIC0gQTogCnBsYW5lPTM0MCwgY3Vyc29yPTYz LCBzcHJpdGUwPTAsIHNwcml0ZTE9MCwgU1I6IHBsYW5lPTEzNjQsIGN1cnNvcj0wIApsZXZlbD0y IGN4c3I9MQoKLy8gQ3Vyc29yIEVuYWJsZWQKWyAyNjY3LjUzMTA0OV0gW2RybTp2bHZfdXBkYXRl X3dtXSBTZXR0aW5nIEZJRk8gd2F0ZXJtYXJrcyAtIEE6IApwbGFuZT0zNDAsIGN1cnNvcj0wLCBz cHJpdGUwPTAsIHNwcml0ZTE9MCwgU1I6IHBsYW5lPTEzNjQsIGN1cnNvcj0wIApsZXZlbD0yIGN4 c3I9MQoKSSBoYXZlbid0IGZvdW5kIHRoZSBsaW5lIG9mIGNvZGUgdGhhdCBhY3R1YWxseSBpbnZl cnRzIHRoaXMgcHJvZ3JhbW1pbmcuIApJIHdpbGwgY29udGludWUgdG8gaW52ZXN0aWdhdGUgZHVy aW5nIHRlc3Rpbmcgb2YgdGhpcyBzZXJpZXMuCgoKPiArCWlmICh3bS5jeHNyICYmICFkZXZfcHJp di0+d20udmx2LmN4c3IpIHsKPiArCQlpbnRlbF93YWl0X2Zvcl92YmxhbmsoZGV2LCBwaXBlKTsK PiArCQlpbnRlbF9zZXRfbWVtb3J5X2N4c3IoZGV2X3ByaXYsIHRydWUpOwo+ICsJfQo+ICsKPiAr CWlmICh3bS5sZXZlbCA+PSBWTFZfV01fTEVWRUxfUE01ICYmCj4gKwkgICAgZGV2X3ByaXYtPndt LnZsdi5sZXZlbCA8IFZMVl9XTV9MRVZFTF9QTTUpCj4gKwkJY2h2X3NldF9tZW1vcnlfcG01KGRl dl9wcml2LCB0cnVlKTsKPiArCj4gKwlpZiAod20ubGV2ZWwgPj0gVkxWX1dNX0xFVkVMX0REUl9E VkZTICYmCj4gKwkgICAgZGV2X3ByaXYtPndtLnZsdi5sZXZlbCA8IFZMVl9XTV9MRVZFTF9ERFJf RFZGUykKPiArCQljaHZfc2V0X21lbW9yeV9kdmZzKGRldl9wcml2LCB0cnVlKTsKPiArCj4gKwlk ZXZfcHJpdi0+d20udmx2ID0gd207Cj4gICB9Cj4KPiAgIHN0YXRpYyB2b2lkIHZhbGxleXZpZXdf dXBkYXRlX3Nwcml0ZV93bShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiBAQCAtNjgyMyw4ICs3 MTI4LDkgQEAgdm9pZCBpbnRlbF9pbml0X3BtKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gICAJ CWVsc2UgaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID09IDgpCj4gICAJCQlkZXZfcHJpdi0+ZGlz cGxheS5pbml0X2Nsb2NrX2dhdGluZyA9IGJyb2Fkd2VsbF9pbml0X2Nsb2NrX2dhdGluZzsKPiAg IAl9IGVsc2UgaWYgKElTX0NIRVJSWVZJRVcoZGV2KSkgewo+IC0JCWRldl9wcml2LT5kaXNwbGF5 LnVwZGF0ZV93bSA9IHZhbGxleXZpZXdfdXBkYXRlX3dtOwo+IC0JCWRldl9wcml2LT5kaXNwbGF5 LnVwZGF0ZV9zcHJpdGVfd20gPSB2YWxsZXl2aWV3X3VwZGF0ZV9zcHJpdGVfd207Cj4gKwkJdmx2 X3NldHVwX3dtX2xhdGVuY3koZGV2KTsKPiArCj4gKwkJZGV2X3ByaXYtPmRpc3BsYXkudXBkYXRl X3dtID0gdmx2X3VwZGF0ZV93bTsKPiAgIAkJZGV2X3ByaXYtPmRpc3BsYXkuaW5pdF9jbG9ja19n YXRpbmcgPQo+ICAgCQkJY2hlcnJ5dmlld19pbml0X2Nsb2NrX2dhdGluZzsKPiAgIAl9IGVsc2Ug aWYgKElTX1ZBTExFWVZJRVcoZGV2KSkgewo+CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2ludGVsLWdmeAo=