From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sean Paul Subject: Re: [RFC 4/4] drm/msm/mdp5: writeback support Date: Fri, 23 Feb 2018 11:30:56 -0500 Message-ID: <20180223163056.GL223881@art_vandelay> References: <20180223131758.18362-1-robdclark@gmail.com> <20180223131758.18362-5-robdclark@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20180223131758.18362-5-robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: Rob Clark Cc: Archit Taneja , Laurent Pinchart , Neil Armstrong , David Airlie , linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Liviu Dudau , linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Sushmita Susheelendra , Sean Paul , Daniel Vetter , freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Brian Starkey , Ville =?iso-8859-1?Q?Syrj=E4l=E4?= List-Id: linux-arm-msm@vger.kernel.org T24gRnJpLCBGZWIgMjMsIDIwMTggYXQgMDg6MTc6NTRBTSAtMDUwMCwgUm9iIENsYXJrIHdyb3Rl Ogo+IEluIGEgd2F5LCBiYXNlZCBvbiB0aGUgb3JpZ2luYWwgd3JpdGViYWNrIHBhdGNoIGZyb20g SmlsYWkgV2FuZywgYnV0IGEKPiBsb3QgaGFzIHNoaWZ0ZWQgYXJvdW5kIHNpbmNlIHRoZW4uCj4g Cj4gU2lnbmVkLW9mZi1ieTogUm9iIENsYXJrIDxyb2JkY2xhcmtAZ21haWwuY29tPgo+IC0tLQo+ ICBkcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlICAgICAgICAgICAgICB8ICAgMSArCj4gIGRy aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9tZHA1L21kcDVfY3J0Yy5jIHwgIDIzICstCj4gIGRyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9tZHA1L21kcDVfa21zLmMgIHwgIDM4ICsrKy0KPiAgZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL21kcDUvbWRwNV9rbXMuaCAgfCAgIDcgKy0KPiAgZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL21kcDUvbWRwNV93Yi5jICAgfCAzNjcgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpL2RzaV9ob3N0LmMgICAgICAg IHwgICA0ICstCj4gIDYgZmlsZXMgY2hhbmdlZCwgNDMxIGluc2VydGlvbnMoKyksIDkgZGVsZXRp b25zKC0pCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvbWRw NS9tZHA1X3diLmMKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmls ZSBiL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUKPiBpbmRleCBjZDQwYzA1MGIyZDcuLmM5 ZjUwYWRlZjJkYiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZQo+IEBAIC00NSw2ICs0NSw3IEBAIG1z bS15IDo9IFwKPiAgCWRpc3AvbWRwNS9tZHA1X21peGVyLm8gXAo+ICAJZGlzcC9tZHA1L21kcDVf cGxhbmUubyBcCj4gIAlkaXNwL21kcDUvbWRwNV9zbXAubyBcCj4gKwlkaXNwL21kcDUvbWRwNV93 Yi5vIFwKPiAgCW1zbV9hdG9taWMubyBcCj4gIAltc21fZGVidWdmcy5vIFwKPiAgCW1zbV9kcnYu byBcCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9tZHA1L21kcDVfY3J0 Yy5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL21kcDUvbWRwNV9jcnRjLmMKPiBpbmRleCA5 ODkzZTQzYmE2YzUuLmIwMGNhODhiNzQxZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvbWRwNS9tZHA1X2NydGMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9tZHA1L21kcDVfY3J0Yy5jCj4gQEAgLTQ4NCw3ICs0ODQsMTEgQEAgc3RhdGljIHZvaWQgbWRw NV9jcnRjX2F0b21pY19lbmFibGUoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICAJfQo+ICAKPiAg CS8qIFJlc3RvcmUgdmJsYW5rIGlycSBoYW5kbGluZyBhZnRlciBwb3dlciBpcyBlbmFibGVkICov Cj4gLQlkcm1fY3J0Y192Ymxhbmtfb24oY3J0Yyk7Cj4gKy8vIFRPRE8gd2UgY2FuJ3QgLT5nZXRf c2Nhbm91dF9wb3MoKSBmb3Igd2IgKHNpbmNlIHZpcnR1YWwgaW50ZikuLgo+ICsvLyBwZXJoYXBz IGRybSBjb3JlIHNob3VsZCBiZSBjbGV2ZXIgZW5vdWdoIG5vdCB0byBkcm1fcmVzZXRfdmJsYW5r X3RpbWVzdGFtcCgpCj4gKy8vIGZvciB2aXJ0dWFsIGVuY29kZXJzIC8gd3JpdGViYWNrPwo+ICsJ aWYgKG1kcDVfY3N0YXRlLT5waXBlbGluZS5pbnRmLT50eXBlICE9IElOVEZfV0IpCj4gKwkJZHJt X2NydGNfdmJsYW5rX29uKGNydGMpOwo+ICAKPiAgCW1kcDVfY3J0Y19tb2RlX3NldF9ub2ZiKGNy dGMpOwo+ICAKPiBAQCAtNTE4LDcgKzUyMiwxMSBAQCBpbnQgbWRwNV9jcnRjX3NldHVwX3BpcGVs aW5lKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiAgCQl1MzIgY2FwczsKPiAgCQlpbnQgcmV0Owo+ ICAKPiAtCQljYXBzID0gTURQX0xNX0NBUF9ESVNQTEFZOwo+ICsJCWlmIChwaXBlbGluZS0+aW50 Zi0+dHlwZSA9PSBJTlRGX1dCKQo+ICsJCQljYXBzID0gTURQX0xNX0NBUF9XQjsKPiArCQllbHNl Cj4gKwkJCWNhcHMgPSBNRFBfTE1fQ0FQX0RJU1BMQVk7Cj4gKwo+ICAJCWlmIChuZWVkX3JpZ2h0 X21peGVyKQo+ICAJCQljYXBzIHw9IE1EUF9MTV9DQVBfUEFJUjsKPiAgCj4gQEAgLTU0NSw2ICs1 NTMsNyBAQCBpbnQgbWRwNV9jcnRjX3NldHVwX3BpcGVsaW5lKHN0cnVjdCBkcm1fY3J0YyAqY3J0 YywKPiAgCW1kcDVfY3N0YXRlLT5lcnJfaXJxbWFzayA9IGludGYyZXJyKGludGYtPm51bSk7Cj4g IAltZHA1X2NzdGF0ZS0+dmJsYW5rX2lycW1hc2sgPSBpbnRmMnZibGFuayhwaXBlbGluZS0+bWl4 ZXIsIGludGYpOwo+ICAKPiArLy8gWFhYIHNob3VsZCB3ZSBiZSB0cmVhdGluZyBXQiBhcyBjbWRf bW9kZT8/Cj4gIAlpZiAoKGludGYtPnR5cGUgPT0gSU5URl9EU0kpICYmCj4gIAkgICAgKGludGYt Pm1vZGUgPT0gTURQNV9JTlRGX0RTSV9NT0RFX0NPTU1BTkQpKSB7Cj4gIAkJbWRwNV9jc3RhdGUt PnBwX2RvbmVfaXJxbWFzayA9IGxtMnBwZG9uZShwaXBlbGluZS0+bWl4ZXIpOwo+IEBAIC02Mzks OCArNjQ4LDEyIEBAIHN0YXRpYyBpbnQgbWRwNV9jcnRjX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJt X2NydGMgKmNydGMsCj4gIAl9Cj4gIAo+ICAJLyogYmFpbCBvdXQgZWFybHkgaWYgdGhlcmUgYXJl bid0IGFueSBwbGFuZXMgKi8KPiAtCWlmICghY250KQo+IC0JCXJldHVybiAwOwo+ICsJaWYgKCFj bnQpIHsKPiArCQlpZiAoIXN0YXRlLT5hY3RpdmUpCj4gKwkJCXJldHVybiAwOwo+ICsJCWRldl9l cnIoZGV2LT5kZXYsICIlcyBoYXMgbm8gcGxhbmVzIVxuIiwgY3J0Yy0+bmFtZSk7Cj4gKwkJcmV0 dXJuIC1FSU5WQUw7Cj4gKwl9CgpUaGlzIHNlZW1zIHVucmVsYXRlZD8KCj4gIAo+ICAJaHdfY2Zn ID0gbWRwNV9jZmdfZ2V0X2h3X2NvbmZpZyhtZHA1X2ttcy0+Y2ZnKTsKPiAgCj4gQEAgLTExNjAs NyArMTE3Myw3IEBAIHZvaWQgbWRwNV9jcnRjX3dhaXRfZm9yX2NvbW1pdF9kb25lKHN0cnVjdCBk cm1fY3J0YyAqY3J0YykKPiAgCj4gIAlpZiAobWRwNV9jc3RhdGUtPmNtZF9tb2RlKQo+ICAJCW1k cDVfY3J0Y193YWl0X2Zvcl9wcF9kb25lKGNydGMpOwo+IC0JZWxzZQo+ICsJZWxzZSBpZiAobWRw NV9jc3RhdGUtPnBpcGVsaW5lLmludGYtPnR5cGUgIT0gSU5URl9XQikKPiAgCQltZHA1X2NydGNf d2FpdF9mb3JfZmx1c2hfZG9uZShjcnRjKTsKPiAgfQo+ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL21kcDUvbWRwNV9rbXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9tZHA1L21kcDVfa21zLmMKPiBpbmRleCAxZjQ0ZDhmMTVjZTEuLjIzOTAxMDkwNTYzNyAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvbWRwNS9tZHA1X2ttcy5jCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL21kcDUvbWRwNV9rbXMuYwo+IEBAIC00Mjcs NyArNDI3LDggQEAgc3RhdGljIGludCBtb2Rlc2V0X2luaXQoc3RydWN0IG1kcDVfa21zICptZHA1 X2ttcykKPiAgCSAqIHRoZSBNRFA1IGludGVyZmFjZXMpIHRoYW4gdGhlIG51bWJlciBvZiBsYXll ciBtaXhlcnMgcHJlc2VudCBpbiBIVywKPiAgCSAqIGJ1dCBsZXQncyBiZSBzYWZlIGhlcmUgYW55 d2F5Cj4gIAkgKi8KPiAtCW51bV9jcnRjcyA9IG1pbihwcml2LT5udW1fZW5jb2RlcnMsIG1kcDVf a21zLT5udW1faHdtaXhlcnMpOwo+ICsJbnVtX2NydGNzID0gbWluKHByaXYtPm51bV9lbmNvZGVy cyArIGh3X2NmZy0+d2IuY291bnQsCj4gKwkJCW1kcDVfa21zLT5udW1faHdtaXhlcnMpOwo+ICAK PiAgCS8qCj4gIAkgKiBDb25zdHJ1Y3QgcGxhbmVzIGVxdWFsaW5nIHRoZSBudW1iZXIgb2YgaHcg cGlwZXMsIGFuZCBDUlRDcyBmb3IgdGhlCj4gQEAgLTQ4Miw2ICs0ODMsMzMgQEAgc3RhdGljIGlu dCBtb2Rlc2V0X2luaXQoc3RydWN0IG1kcDVfa21zICptZHA1X2ttcykKPiAgCQllbmNvZGVyLT5w b3NzaWJsZV9jcnRjcyA9ICgxIDw8IHByaXYtPm51bV9jcnRjcykgLSAxOwo+ICAJfQo+ICAKPiAr CS8qCj4gKwkgKiBMYXN0bHksIGNvbnN0cnVjdCB3cml0ZWJhY2sgY29ubmVjdG9ycy4KPiArCSAq Lwo+ICsJZm9yIChpID0gMDsgaSA8IGh3X2NmZy0+d2IuY291bnQ7IGkrKykgewo+ICsJCXN0cnVj dCBkcm1fd3JpdGViYWNrX2Nvbm5lY3RvciAqd2JfY29ubjsKPiArCQlzdHJ1Y3QgbWRwNV9jdGwg KmN0bDsKPiArCj4gKwkJY3RsID0gbWRwNV9jdGxtX3JlcXVlc3QobWRwNV9rbXMtPmN0bG0sIC0x KTsKPiArCQlpZiAoIWN0bCkgewo+ICsJCQlkZXZfZXJyKGRldi0+ZGV2LAo+ICsJCQkJImZhaWxl ZCB0byBhbGxvY2F0ZSBjdGwgZm9yIHdyaXRlYmFjayAlZFxuIiwgaSk7Cj4gKwkJCWNvbnRpbnVl Owo+ICsJCX0KPiArCj4gKwkJd2JfY29ubiA9IG1kcDVfd2JfY29ubmVjdG9yX2luaXQoZGV2LCBj dGwsCj4gKwkJCQlod19jZmctPndiLmluc3RhbmNlc1tpXS5pZCk7Cj4gKwkJaWYgKElTX0VSUih3 Yl9jb25uKSkgewo+ICsJCQlyZXQgPSBQVFJfRVJSKHdiX2Nvbm4pOwo+ICsJCQlkZXZfZXJyKGRl di0+ZGV2LAo+ICsJCQkJImZhaWxlZCB0byBjb25zdHJ1Y3Qgd3JpdGViYWNrIGNvbm5lY3RvciAl ZCAoJWQpXG4iLAo+ICsJCQkJaSwgcmV0KTsKPiArCQkJZ290byBmYWlsOwo+ICsJCX0KPiArCj4g KwkJd2JfY29ubi0+ZW5jb2Rlci5wb3NzaWJsZV9jcnRjcyA9ICgxIDw8IHByaXYtPm51bV9jcnRj cykgLSAxOwo+ICsJfQo+ICsKPiAgCXJldHVybiAwOwo+ICAKPiAgZmFpbDoKPiBAQCAtNTU1LDYg KzU4MywxMCBAQCBzdGF0aWMgYm9vbCBtZHA1X2dldF9zY2Fub3V0cG9zKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIHVuc2lnbmVkIGludCBwaXBlLAo+ICAJCXJldHVybiBmYWxzZTsKPiAgCX0KPiAg Cj4gKwkvKiB1bnN1cHBvcnRlZCBmb3Igd3JpdGViYWNrOiAqLwo+ICsJaWYgKGVuY29kZXItPmVu Y29kZXJfdHlwZSA9PSBEUk1fTU9ERV9FTkNPREVSX1ZJUlRVQUwpCj4gKwkJcmV0dXJuIGZhbHNl Owo+ICsKPiAgCXZzdyA9IG1vZGUtPmNydGNfdnN5bmNfZW5kIC0gbW9kZS0+Y3J0Y192c3luY19z dGFydDsKPiAgCXZicCA9IG1vZGUtPmNydGNfdnRvdGFsIC0gbW9kZS0+Y3J0Y192c3luY19lbmQ7 Cj4gIAo+IEBAIC02MTAsNiArNjQyLDEwIEBAIHN0YXRpYyB1MzIgbWRwNV9nZXRfdmJsYW5rX2Nv dW50ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHBpcGUpCj4gIAlpZiAo IWVuY29kZXIpCj4gIAkJcmV0dXJuIDA7Cj4gIAo+ICsJLyogdW5zdXBwb3J0ZWQgZm9yIHdyaXRl YmFjazogKi8KPiArCWlmIChlbmNvZGVyLT5lbmNvZGVyX3R5cGUgPT0gRFJNX01PREVfRU5DT0RF Ul9WSVJUVUFMKQo+ICsJCXJldHVybiAwOwo+ICsKPiAgCXJldHVybiBtZHA1X2VuY29kZXJfZ2V0 X2ZyYW1lY291bnQoZW5jb2Rlcik7Cj4gIH0KPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9tZHA1L21kcDVfa21zLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av bWRwNS9tZHA1X2ttcy5oCj4gaW5kZXggNDI1YTAzZDIxM2U1Li5iZTBmOTNlZjMzZTEgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL21kcDUvbWRwNV9rbXMuaAo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9tZHA1L21kcDVfa21zLmgKPiBAQCAtMTgsNiArMTgs OCBAQAo+ICAjaWZuZGVmIF9fTURQNV9LTVNfSF9fCj4gICNkZWZpbmUgX19NRFA1X0tNU19IX18K PiAgCj4gKyNpbmNsdWRlIDxkcm0vZHJtX3dyaXRlYmFjay5oPgo+ICsKPiAgI2luY2x1ZGUgIm1z bV9kcnYuaCIKPiAgI2luY2x1ZGUgIm1zbV9rbXMuaCIKPiAgI2luY2x1ZGUgImRpc3AvbWRwX2tt cy5oIgo+IEBAIC0yNTEsNyArMjUzLDcgQEAgc3RhdGljIGlubGluZSB1aW50MzJfdCBpbnRmMnZi bGFuayhzdHJ1Y3QgbWRwNV9od19taXhlciAqbWl4ZXIsCj4gIAkJcmV0dXJuIE1EUDVfSVJRX1BJ TkdfUE9OR18wX1JEX1BUUiA8PCBtaXhlci0+cHA7Cj4gIAo+ICAJaWYgKGludGYtPnR5cGUgPT0g SU5URl9XQikKPiAtCQlyZXR1cm4gTURQNV9JUlFfV0JfMl9ET05FOwo+ICsJCXJldHVybiBNRFA1 X0lSUV9XQl8yX0RPTkUgfCBNRFA1X0lSUV9XQl8wX0RPTkUgfCBNRFA1X0lSUV9XQl8xX0RPTkU7 Cj4gIAo+ICAJc3dpdGNoIChpbnRmLT5udW0pIHsKPiAgCWNhc2UgMDogIHJldHVybiBNRFA1X0lS UV9JTlRGMF9WU1lOQzsKPiBAQCAtMzMwLDQgKzMzMiw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1k cDVfY21kX2VuY29kZXJfc2V0X3NwbGl0X2Rpc3BsYXkoCj4gIH0KPiAgI2VuZGlmCj4gIAo+ICtz dHJ1Y3QgZHJtX3dyaXRlYmFja19jb25uZWN0b3IgKm1kcDVfd2JfY29ubmVjdG9yX2luaXQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKPiArCQlzdHJ1Y3QgbWRwNV9jdGwgKmN0bCwgdW5zaWduZWQg d2JfaWQpOwo+ICsKPiAgI2VuZGlmIC8qIF9fTURQNV9LTVNfSF9fICovCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9tZHA1L21kcDVfd2IuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9tZHA1L21kcDVfd2IuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXgg MDAwMDAwMDAwMDAwLi4zZGFiZDBhMWFhOGIKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL21kcDUvbWRwNV93Yi5jCj4gQEAgLTAsMCArMSwzNjcgQEAKPiAr LyoKPiArICogQ29weXJpZ2h0IChDKSAyMDE4IFJlZCBIYXQKPiArICogQXV0aG9yOiBSb2IgQ2xh cmsgPHJvYmRjbGFya0BnbWFpbC5jb20+Cj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Cj4gKyAq IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lv biAyIGFzIHB1Ymxpc2hlZCBieQo+ICsgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKPiArICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCj4gKyAqIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IKPiArICogbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKiBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh bG9uZyB3aXRoCj4gKyAqIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvPi4KClNQRFggbGljZW5zZQoKPiArICovCj4gKwo+ICsjaW5jbHVkZSAi bWRwNV9rbXMuaCIKPiArCj4gKy8qCj4gKyAqIFdyaXRlYmFjayBjb25uZWN0b3IvZW5jb2RlciBp bXBsZW1lbnRhdGlvbjoKPiArICovCj4gKwo+ICtzdHJ1Y3QgbWRwNV93Yl9jb25uZWN0b3Igewo+ ICsJc3RydWN0IGRybV93cml0ZWJhY2tfY29ubmVjdG9yIGJhc2U7Cj4gKwo+ICsJdTMyIG5mb3Jt YXRzOwo+ICsJdTMyIGZvcm1hdHNbMzJdOwo+ICsKPiArCXVuc2lnbmVkIGlkOwo+ICsJc3RydWN0 IG1kcDVfY3RsICpjdGw7Cj4gKwlzdHJ1Y3QgbWRwNV9pbnRlcmZhY2UgKmludGY7Cj4gKwo+ICsJ c3RydWN0IG1kcF9pcnEgd2JfZG9uZTsKPiArfTsKPiArI2RlZmluZSB0b19tZHA1X3diX2Nvbm5l Y3Rvcih4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IG1kcDVfd2JfY29ubmVjdG9yLCBiYXNlKQo+ ICsKPiArCj4gK3N0YXRpYyB2b2lkIG1kcDVfd2JfY29ubmVjdG9yX2F0b21pY19jb21taXQoc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiArCQlzdHJ1Y3QgZHJtX3dyaXRlYmFja19q b2IgKmpvYik7Cj4gKwo+ICtzdGF0aWMgaW50IG1kcDVfd2JfY29ubmVjdG9yX2dldF9tb2Rlcyhz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7Cj4gKwo+ICsJcmV0dXJuIGRybV9hZGRfbW9kZXNfbm9l ZGlkKGNvbm5lY3RvciwgZGV2LT5tb2RlX2NvbmZpZy5tYXhfd2lkdGgsCj4gKwkJCWRldi0+bW9k ZV9jb25maWcubWF4X2hlaWdodCk7CgpJIGd1ZXNzIHRoZSBwbGFuIGlzIHRvIGxldCB1c2Vyc3Bh Y2UgcHJvdmlkZSB1c2VyLWRlZmluZWQgbW9kZXMgZm9yIHdiPyBJcyBpdApldmVyIHVzZWZ1bCB0 byBoYXZlIHRoaXMgdG9rZW4gbW9kZT8KCj4gK30KPiArCj4gK3N0YXRpYyBlbnVtIGRybV9tb2Rl X3N0YXR1cwo+ICttZHA1X3diX2Nvbm5lY3Rvcl9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0b3IsCj4gKwkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCj4gK3sK PiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKPiArCXN0cnVjdCBk cm1fbW9kZV9jb25maWcgKm1vZGVfY29uZmlnID0gJmRldi0+bW9kZV9jb25maWc7Cj4gKwlpbnQg dyA9IG1vZGUtPmhkaXNwbGF5LCBoID0gbW9kZS0+dmRpc3BsYXk7Cj4gKwo+ICsJaWYgKCh3IDwg bW9kZV9jb25maWctPm1pbl93aWR0aCkgfHwgKHcgPiBtb2RlX2NvbmZpZy0+bWF4X3dpZHRoKSkK PiArCQlyZXR1cm4gTU9ERV9CQURfSFZBTFVFOwo+ICsKPiArCWlmICgoaCA8IG1vZGVfY29uZmln LT5taW5faGVpZ2h0KSB8fCAoaCA+IG1vZGVfY29uZmlnLT5tYXhfaGVpZ2h0KSkKPiArCQlyZXR1 cm4gTU9ERV9CQURfVlZBTFVFOwo+ICsKPiArCXJldHVybiBNT0RFX09LOwo+ICt9CgpNaWdodCBi ZSB1c2VmdWwgZm9yIHRoZXNlIHRvIG1pZ3JhdGUgaW50byBkcm1fd3JpdGViYWNrX2Nvbm5lY3Rv ci5jIGFzIGhlbHBlcnMuCgo+ICsKPiArY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVy X2Z1bmNzIG1kcDVfd2JfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKPiArCS5nZXRfbW9kZXMg PSBtZHA1X3diX2Nvbm5lY3Rvcl9nZXRfbW9kZXMsCj4gKwkubW9kZV92YWxpZCA9IG1kcDVfd2Jf Y29ubmVjdG9yX21vZGVfdmFsaWQsCj4gKwkuYXRvbWljX2NvbW1pdCA9IG1kcDVfd2JfY29ubmVj dG9yX2F0b21pY19jb21taXQsCj4gK307Cj4gKwo+ICtzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9y X3N0YXR1cwo+ICttZHA1X3diX2Nvbm5lY3Rvcl9kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbm5lY3RvciwgYm9vbCBmb3JjZSkKPiArewo+ICsJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNf ZGlzY29ubmVjdGVkOwo+ICt9CgpUaGlzIHNob3VsZCBiZSBhIGhlbHBlciBhcyB3ZWxsLgoKPiAr Cj4gK3N0YXRpYyB2b2lkIG1kcDVfd2JfY29ubmVjdG9yX2Rlc3Ryb3koc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3RvcikKPiArewo+ICsJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rv cik7Cj4gK30KCkp1c3QgdXNlIGRybV9jb25uZWN0b3JfY2xlYW51cCBkaXJlY3RseSBiZWxvdwoK PiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyBtZHA1X3diX2Nv bm5lY3Rvcl9mdW5jcyA9IHsKPiArCS5yZXNldCA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rv cl9yZXNldCwKPiArCS5kZXRlY3QgPSBtZHA1X3diX2Nvbm5lY3Rvcl9kZXRlY3QsCj4gKwkuZmls bF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKPiArCS5k ZXN0cm95ID0gbWRwNV93Yl9jb25uZWN0b3JfZGVzdHJveSwKPiArCS5hdG9taWNfZHVwbGljYXRl X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwKPiAr CS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0 cm95X3N0YXRlLAo+ICt9Owo+ICsKPiArc3RhdGljIGludAo+ICttZHA1X3diX2VuY29kZXJfYXRv bWljX2NoZWNrKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKPiArCQlzdHJ1Y3QgZHJtX2Ny dGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gKwkJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNv bm5fc3RhdGUpCj4gK3sKPiArCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXYgPSBlbmNvZGVy LT5kZXYtPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IG1kcDVfY3J0Y19zdGF0ZSAqbWRwNV9jc3Rh dGUgPSB0b19tZHA1X2NydGNfc3RhdGUoY3J0Y19zdGF0ZSk7Cj4gKwlzdHJ1Y3QgbWRwNV93Yl9j b25uZWN0b3IgKm1kcDVfd2IgPSB0b19tZHA1X3diX2Nvbm5lY3RvcigKPiArCQl0b193Yl9jb25u ZWN0b3IoY29ubl9zdGF0ZS0+Y29ubmVjdG9yKSk7Cj4gKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYjsKPiArCWNvbnN0IHN0cnVjdCBtc21fZm9ybWF0ICpmb3JtYXQ7Cj4gKwljb25zdCBzdHJ1 Y3QgbWRwX2Zvcm1hdCAqbWRwX2ZtdDsKPiArCXN0cnVjdCBkcm1fZm9ybWF0X25hbWVfYnVmIGZv cm1hdF9uYW1lOwo+ICsJaW50IHJldDsKPiArCj4gKwlpZiAoIWNvbm5fc3RhdGUtPndyaXRlYmFj a19qb2IgfHwgIWNvbm5fc3RhdGUtPndyaXRlYmFja19qb2ItPmZiKQo+ICsJCXJldHVybiAwOwo+ ICsKPiArCWZiID0gY29ubl9zdGF0ZS0+d3JpdGViYWNrX2pvYi0+ZmI7Cj4gKwo+ICsJREJHKCJ3 YlsldV06IGNoZWNrIHdyaXRlYmFjayAldXgldUAlcyIsIG1kcDVfd2ItPmlkLAo+ICsJCWZiLT53 aWR0aCwgZmItPmhlaWdodCwKPiArCQlkcm1fZ2V0X2Zvcm1hdF9uYW1lKGZiLT5mb3JtYXQtPmZv cm1hdCwgJmZvcm1hdF9uYW1lKSk7Cj4gKwo+ICsJZm9ybWF0ID0gbWRwX2dldF9mb3JtYXQocHJp di0+a21zLCBmYi0+Zm9ybWF0LT5mb3JtYXQpOwo+ICsJaWYgKCFmb3JtYXQpIHsKPiArCQlEQkco IkludmFsaWQgcGl4ZWwgZm9ybWF0ISIpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsK PiArCW1kcF9mbXQgPSB0b19tZHBfZm9ybWF0KGZvcm1hdCk7Cj4gKwlpZiAoTURQX0ZPUk1BVF9J U19ZVVYobWRwX2ZtdCkpIHsKPiArCQlzd2l0Y2ggKG1kcF9mbXQtPmNocm9tYV9zYW1wbGUpIHsK PiArCQljYXNlIENIUk9NQV80MjA6Cj4gKwkJY2FzZSBDSFJPTUFfSDJWMToKPiArCQkJLyogc3Vw cG9ydGVkICovCj4gKwkJCWJyZWFrOwo+ICsJCWNhc2UgQ0hST01BX0gxVjI6Cj4gKwkJZGVmYXVs dDoKPiArCQkJREJHKCJ1bnN1cHBvcnRlZCB3YiBjaHJvbWEgc2FtcD0lZFxuIiwKPiArCQkJCW1k cF9mbXQtPmNocm9tYV9zYW1wbGUpOwo+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiArCQl9Cj4gKwl9 Cj4gKwo+ICsJLyogVE9ETyBJIHRoaW5rIHdlIHdvdWxkIHByZWZlciB0byBoYXZlIHByb3BlciBw cmVwYXJlX2ZiKCkvY2xlYW51cF9mYigpCj4gKwkgKiB2ZnVuY3MsIGFzIHdpdGggcGxhbmUuLiAg QWxzbywgd2hlcmUgdG8gdW5wcmVwYXJlPwo+ICsJICovCj4gKwlyZXQgPSBtc21fZnJhbWVidWZm ZXJfcHJlcGFyZShmYiwgcHJpdi0+a21zLT5hc3BhY2UpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1 cm4gcmV0Owo+ICsKPiArCW1kcDVfY3N0YXRlLT5jdGwgPSBtZHA1X3diLT5jdGw7Cj4gKwltZHA1 X2NzdGF0ZS0+cGlwZWxpbmUuaW50ZiA9IG1kcDVfd2ItPmludGY7Cj4gKwltZHA1X2NzdGF0ZS0+ ZGVmZXJfc3RhcnQgPSB0cnVlOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZAo+ICt3Yl9jc2Nfc2V0dXAoc3RydWN0IG1kcDVfa21zICptZHA1X2ttcywgdTMyIHdiX2lk LCBzdHJ1Y3QgY3NjX2NmZyAqY3NjKQo+ICt7Cj4gKwl1aW50MzJfdCAgaTsKPiArCXVpbnQzMl90 ICptYXRyaXg7Cj4gKwo+ICsJaWYgKHVubGlrZWx5KCFjc2MpKQo+ICsJCXJldHVybjsKPiArCj4g KwltYXRyaXggPSBjc2MtPm1hdHJpeDsKPiArCW1kcDVfd3JpdGUobWRwNV9rbXMsIFJFR19NRFA1 X1dCX0NTQ19NQVRSSVhfQ09FRkZfMCh3Yl9pZCksCj4gKwkJTURQNV9XQl9DU0NfTUFUUklYX0NP RUZGXzBfQ09FRkZfMTEobWF0cml4WzBdKSB8Cj4gKwkJTURQNV9XQl9DU0NfTUFUUklYX0NPRUZG XzBfQ09FRkZfMTIobWF0cml4WzFdKSk7Cj4gKwltZHA1X3dyaXRlKG1kcDVfa21zLCBSRUdfTURQ NV9XQl9DU0NfTUFUUklYX0NPRUZGXzEod2JfaWQpLAo+ICsJCU1EUDVfV0JfQ1NDX01BVFJJWF9D T0VGRl8xX0NPRUZGXzEzKG1hdHJpeFsyXSkgfAo+ICsJCU1EUDVfV0JfQ1NDX01BVFJJWF9DT0VG Rl8xX0NPRUZGXzIxKG1hdHJpeFszXSkpOwo+ICsJbWRwNV93cml0ZShtZHA1X2ttcywgUkVHX01E UDVfV0JfQ1NDX01BVFJJWF9DT0VGRl8yKHdiX2lkKSwKPiArCQlNRFA1X1dCX0NTQ19NQVRSSVhf Q09FRkZfMl9DT0VGRl8yMihtYXRyaXhbNF0pIHwKPiArCQlNRFA1X1dCX0NTQ19NQVRSSVhfQ09F RkZfMl9DT0VGRl8yMyhtYXRyaXhbNV0pKTsKPiArCW1kcDVfd3JpdGUobWRwNV9rbXMsIFJFR19N RFA1X1dCX0NTQ19NQVRSSVhfQ09FRkZfMyh3Yl9pZCksCj4gKwkJTURQNV9XQl9DU0NfTUFUUklY X0NPRUZGXzNfQ09FRkZfMzEobWF0cml4WzZdKSB8Cj4gKwkJTURQNV9XQl9DU0NfTUFUUklYX0NP RUZGXzNfQ09FRkZfMzIobWF0cml4WzddKSk7Cj4gKwltZHA1X3dyaXRlKG1kcDVfa21zLCBSRUdf TURQNV9XQl9DU0NfTUFUUklYX0NPRUZGXzQod2JfaWQpLAo+ICsJCU1EUDVfV0JfQ1NDX01BVFJJ WF9DT0VGRl80X0NPRUZGXzMzKG1hdHJpeFs4XSkpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBB UlJBWV9TSVpFKGNzYy0+cHJlX2JpYXMpOyBpKyspIHsKPiArCQl1aW50MzJfdCAqcHJlX2NsYW1w ID0gY3NjLT5wcmVfY2xhbXA7Cj4gKwkJdWludDMyX3QgKnBvc3RfY2xhbXAgPSBjc2MtPnBvc3Rf Y2xhbXA7Cj4gKwo+ICsJCW1kcDVfd3JpdGUobWRwNV9rbXMsIFJFR19NRFA1X1dCX0NTQ19DT01Q X1BSRUNMQU1QKHdiX2lkLCBpKSwKPiArCQkJTURQNV9XQl9DU0NfQ09NUF9QUkVDTEFNUF9SRUdf SElHSChwcmVfY2xhbXBbMippKzFdKSB8Cj4gKwkJCU1EUDVfV0JfQ1NDX0NPTVBfUFJFQ0xBTVBf UkVHX0xPVyhwcmVfY2xhbXBbMippXSkpOwo+ICsKPiArCQltZHA1X3dyaXRlKG1kcDVfa21zLCBS RUdfTURQNV9XQl9DU0NfQ09NUF9QT1NUQ0xBTVAod2JfaWQsIGkpLAo+ICsJCQlNRFA1X1dCX0NT Q19DT01QX1BPU1RDTEFNUF9SRUdfSElHSChwb3N0X2NsYW1wWzIqaSsxXSkgfAo+ICsJCQlNRFA1 X1dCX0NTQ19DT01QX1BPU1RDTEFNUF9SRUdfTE9XKHBvc3RfY2xhbXBbMippXSkpOwo+ICsKPiAr CQltZHA1X3dyaXRlKG1kcDVfa21zLCBSRUdfTURQNV9XQl9DU0NfQ09NUF9QUkVCSUFTKHdiX2lk LCBpKSwKPiArCQkJTURQNV9XQl9DU0NfQ09NUF9QUkVCSUFTX1JFR19WQUxVRShjc2MtPnByZV9i aWFzW2ldKSk7Cj4gKwo+ICsJCW1kcDVfd3JpdGUobWRwNV9rbXMsIFJFR19NRFA1X1dCX0NTQ19D T01QX1BPU1RCSUFTKHdiX2lkLCBpKSwKPiArCQkJTURQNV9XQl9DU0NfQ09NUF9QT1NUQklBU19S RUdfVkFMVUUoY3NjLT5wb3N0X2JpYXNbaV0pKTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZv aWQKPiArbWRwNV93Yl9jb25uZWN0b3JfYXRvbWljX2NvbW1pdChzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yLAo+ICsJCXN0cnVjdCBkcm1fd3JpdGViYWNrX2pvYiAqam9iKQo+ICt7Cj4g KwlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2ID0gY29ubmVjdG9yLT5kZXYtPmRldl9wcml2 YXRlOwo+ICsJc3RydWN0IG1kcDVfa21zICptZHA1X2ttcyA9IHRvX21kcDVfa21zKHRvX21kcF9r bXMocHJpdi0+a21zKSk7Cj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0 ZSA9IGNvbm5lY3Rvci0+c3RhdGU7Cj4gKwlzdHJ1Y3QgZHJtX3dyaXRlYmFja19jb25uZWN0b3Ig KndiX2Nvbm4gPSB0b193Yl9jb25uZWN0b3IoY29ubmVjdG9yKTsKPiArCXN0cnVjdCBtZHA1X2Ny dGNfc3RhdGUgKm1kcDVfY3J0Y19zdGF0ZSA9Cj4gKwkJdG9fbWRwNV9jcnRjX3N0YXRlKHdiX2Nv bm4tPmVuY29kZXIuY3J0Yy0+c3RhdGUpOwo+ICsJc3RydWN0IG1kcDVfd2JfY29ubmVjdG9yICpt ZHA1X3diID0gdG9fbWRwNV93Yl9jb25uZWN0b3Iod2JfY29ubik7Cj4gKwlzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyICpmYiA9IGpvYi0+ZmI7Cj4gKwlzdHJ1Y3QgZHJtX2Zvcm1hdF9uYW1lX2J1ZiBm b3JtYXRfbmFtZTsKPiArCWNvbnN0IHN0cnVjdCBtZHBfZm9ybWF0ICpmbXQgPQo+ICsJCXRvX21k cF9mb3JtYXQobWRwX2dldF9mb3JtYXQocHJpdi0+a21zLCBmYi0+Zm9ybWF0LT5mb3JtYXQpKTsK PiArCXUzMiB5c3RyaWRlMCwgeXN0cmlkZTEsIG91dHNpemU7Cj4gKwl1MzIgZHN0X2Zvcm1hdCwg cGF0dGVybiwgb3Btb2RlID0gMDsKPiArCj4gKwlEQkcoIndiWyV1XToga2ljayB3cml0ZWJhY2sg JXV4JXVAJXMiLCBtZHA1X3diLT5pZCwKPiArCQlmYi0+d2lkdGgsIGZiLT5oZWlnaHQsCj4gKwkJ ZHJtX2dldF9mb3JtYXRfbmFtZShmYi0+Zm9ybWF0LT5mb3JtYXQsICZmb3JtYXRfbmFtZSkpOwo+ ICsKPiArCS8qIHF1ZXVlIGpvYiBiZWZvcmUgYW55dGhpbmcgdGhhdCBjYW4gdHJpZ2dlciBjb21w bGV0aW9uIGlycSAqLwo+ICsJZHJtX3dyaXRlYmFja19xdWV1ZV9qb2Iod2JfY29ubiwgam9iKTsK PiArCWNvbm5fc3RhdGUtPndyaXRlYmFja19qb2IgPSBOVUxMOwo+ICsKPiArCW1kcF9pcnFfcmVn aXN0ZXIoJm1kcDVfa21zLT5iYXNlLCAmbWRwNV93Yi0+d2JfZG9uZSk7Cj4gKwo+ICsJaWYgKE1E UF9GT1JNQVRfSVNfWVVWKGZtdCkpIHsKPiArCQl3Yl9jc2Nfc2V0dXAobWRwNV9rbXMsIG1kcDVf d2ItPmlkLAo+ICsJCQltZHBfZ2V0X2RlZmF1bHRfY3NjX2NmZyhDU0NfUkdCMllVVikpOwo+ICsK PiArCQlvcG1vZGUgfD0gTURQNV9XQl9EU1RfT1BfTU9ERV9DU0NfRU4gfAo+ICsJCQlNRFA1X1dC X0RTVF9PUF9NT0RFX0NTQ19TUkNfREFUQV9GT1JNQVQoREFUQV9GT1JNQVRfUkdCKSB8Cj4gKwkJ CU1EUDVfV0JfRFNUX09QX01PREVfQ1NDX0RTVF9EQVRBX0ZPUk1BVChEQVRBX0ZPUk1BVF9ZVVYp Owo+ICsKPiArCQlzd2l0Y2ggKGZtdC0+Y2hyb21hX3NhbXBsZSkgewo+ICsJCWNhc2UgQ0hST01B XzQyMDoKPiArCQljYXNlIENIUk9NQV9IMlYxOgo+ICsJCQlvcG1vZGUgfD0gTURQNV9XQl9EU1Rf T1BfTU9ERV9DSFJPTUFfRFdOX1NBTVBMRV9FTjsKPiArCQkJYnJlYWs7Cj4gKwkJY2FzZSBDSFJP TUFfSDFWMjoKPiArCQlkZWZhdWx0Ogo+ICsJCQlXQVJOKDEsICJ1bnN1cHBvcnRlZCB3YiBjaHJv bWEgc2FtcD0lZFxuIiwKPiArCQkJCWZtdC0+Y2hyb21hX3NhbXBsZSk7Cj4gKwkJCXJldHVybjsK PiArCQl9Cj4gKwl9Cj4gKwo+ICsJZHN0X2Zvcm1hdCA9IE1EUDVfV0JfRFNUX0ZPUk1BVF9EU1Rf Q0hST01BX1NBTVAoZm10LT5jaHJvbWFfc2FtcGxlKSB8Cj4gKwkJTURQNV9XQl9EU1RfRk9STUFU X1dSSVRFX1BMQU5FUyhmbXQtPmZldGNoX3R5cGUpIHwKPiArCQlNRFA1X1dCX0RTVF9GT1JNQVRf RFNUQzNfT1VUKGZtdC0+YnBjX2EpIHwKPiArCQlNRFA1X1dCX0RTVF9GT1JNQVRfRFNUQzJfT1VU KGZtdC0+YnBjX3IpIHwKPiArCQlNRFA1X1dCX0RTVF9GT1JNQVRfRFNUQzFfT1VUKGZtdC0+YnBj X2IpIHwKPiArCQlNRFA1X1dCX0RTVF9GT1JNQVRfRFNUQzBfT1VUKGZtdC0+YnBjX2cpIHwKPiAr CQlDT05EKGZtdC0+dW5wYWNrX3RpZ2h0LCBNRFA1X1dCX0RTVF9GT1JNQVRfUEFDS19USUdIVCkg fAo+ICsJCU1EUDVfV0JfRFNUX0ZPUk1BVF9QQUNLX0NPVU5UKGZtdC0+dW5wYWNrX2NvdW50IC0g MSkgfAo+ICsJCU1EUDVfV0JfRFNUX0ZPUk1BVF9EU1RfQlBQKGZtdC0+Y3BwIC0gMSk7Cj4gKwo+ ICsJaWYgKGZtdC0+YnBjX2EgfHwgZm10LT5hbHBoYV9lbmFibGUpIHsKPiArCQlkc3RfZm9ybWF0 IHw9IE1EUDVfV0JfRFNUX0ZPUk1BVF9EU1RDM19FTjsKPiArCQlpZiAoIWZtdC0+YWxwaGFfZW5h YmxlKQo+ICsJCQlkc3RfZm9ybWF0IHw9IE1EUDVfV0JfRFNUX0ZPUk1BVF9EU1RfQUxQSEFfWDsK PiArCX0KPiArCj4gKwlwYXR0ZXJuID0gTURQNV9XQl9EU1RfUEFDS19QQVRURVJOX0VMRU1FTlQz KGZtdC0+dW5wYWNrWzNdKSB8Cj4gKwkJTURQNV9XQl9EU1RfUEFDS19QQVRURVJOX0VMRU1FTlQy KGZtdC0+dW5wYWNrWzJdKSB8Cj4gKwkJTURQNV9XQl9EU1RfUEFDS19QQVRURVJOX0VMRU1FTlQx KGZtdC0+dW5wYWNrWzFdKSB8Cj4gKwkJTURQNV9XQl9EU1RfUEFDS19QQVRURVJOX0VMRU1FTlQw KGZtdC0+dW5wYWNrWzBdKTsKPiArCj4gKwl5c3RyaWRlMCA9IE1EUDVfV0JfRFNUX1lTVFJJREUw X0RTVDBfWVNUUklERShmYi0+cGl0Y2hlc1swXSkgfAo+ICsJCU1EUDVfV0JfRFNUX1lTVFJJREUw X0RTVDFfWVNUUklERShmYi0+cGl0Y2hlc1sxXSk7Cj4gKwl5c3RyaWRlMSA9IE1EUDVfV0JfRFNU X1lTVFJJREUxX0RTVDJfWVNUUklERShmYi0+cGl0Y2hlc1syXSkgfAo+ICsJCU1EUDVfV0JfRFNU X1lTVFJJREUxX0RTVDNfWVNUUklERShmYi0+cGl0Y2hlc1szXSk7Cj4gKwo+ICsJLyogZ2V0IHRo ZSBvdXRwdXQgcmVzb2x1dGlvbiBmcm9tIFdCIGRldmljZSAqLwo+ICsJb3V0c2l6ZSA9IE1EUDVf V0JfT1VUX1NJWkVfRFNUX0goZmItPmhlaWdodCkgfAo+ICsJCU1EUDVfV0JfT1VUX1NJWkVfRFNU X1coZmItPndpZHRoKTsKPiArCj4gKwltZHA1X3dyaXRlKG1kcDVfa21zLCBSRUdfTURQNV9XQl9B TFBIQV9YX1ZBTFVFKG1kcDVfd2ItPmlkKSwgMHhmZik7Cj4gKwltZHA1X3dyaXRlKG1kcDVfa21z LCBSRUdfTURQNV9XQl9EU1RfRk9STUFUKG1kcDVfd2ItPmlkKSwgZHN0X2Zvcm1hdCk7Cj4gKwlt ZHA1X3dyaXRlKG1kcDVfa21zLCBSRUdfTURQNV9XQl9EU1RfT1BfTU9ERShtZHA1X3diLT5pZCks IG9wbW9kZSk7Cj4gKwltZHA1X3dyaXRlKG1kcDVfa21zLCBSRUdfTURQNV9XQl9EU1RfUEFDS19Q QVRURVJOKG1kcDVfd2ItPmlkKSwgcGF0dGVybik7Cj4gKwltZHA1X3dyaXRlKG1kcDVfa21zLCBS RUdfTURQNV9XQl9EU1RfWVNUUklERTAobWRwNV93Yi0+aWQpLCB5c3RyaWRlMCk7Cj4gKwltZHA1 X3dyaXRlKG1kcDVfa21zLCBSRUdfTURQNV9XQl9EU1RfWVNUUklERTEobWRwNV93Yi0+aWQpLCB5 c3RyaWRlMSk7Cj4gKwltZHA1X3dyaXRlKG1kcDVfa21zLCBSRUdfTURQNV9XQl9PVVRfU0laRSht ZHA1X3diLT5pZCksIG91dHNpemUpOwo+ICsKPiArCW1kcDVfY3J0Y19zZXRfcGlwZWxpbmUod2Jf Y29ubi0+ZW5jb2Rlci5jcnRjKTsKPiArCj4gKwltZHA1X3dyaXRlKG1kcDVfa21zLCBSRUdfTURQ NV9XQl9EU1QwX0FERFIobWRwNV93Yi0+aWQpLAo+ICsJCW1zbV9mcmFtZWJ1ZmZlcl9pb3ZhKGZi LCBwcml2LT5rbXMtPmFzcGFjZSwgMCkpOwo+ICsJbWRwNV93cml0ZShtZHA1X2ttcywgUkVHX01E UDVfV0JfRFNUMV9BRERSKG1kcDVfd2ItPmlkKSwKPiArCQltc21fZnJhbWVidWZmZXJfaW92YShm YiwgcHJpdi0+a21zLT5hc3BhY2UsIDEpKTsKPiArCW1kcDVfd3JpdGUobWRwNV9rbXMsIFJFR19N RFA1X1dCX0RTVDJfQUREUihtZHA1X3diLT5pZCksCj4gKwkJbXNtX2ZyYW1lYnVmZmVyX2lvdmEo ZmIsIHByaXYtPmttcy0+YXNwYWNlLCAyKSk7Cj4gKwltZHA1X3dyaXRlKG1kcDVfa21zLCBSRUdf TURQNV9XQl9EU1QzX0FERFIobWRwNV93Yi0+aWQpLAo+ICsJCW1zbV9mcmFtZWJ1ZmZlcl9pb3Zh KGZiLCBwcml2LT5rbXMtPmFzcGFjZSwgMykpOwo+ICsKPiArCS8qIE5vdGlmeSBjdGwgdGhhdCB3 YiBidWZmZXIgaXMgcmVhZHkgdG8gdHJpZ2dlciBzdGFydCAqLwo+ICsJbWRwNV9jdGxfY29tbWl0 KG1kcDVfd2ItPmN0bCwgJm1kcDVfY3J0Y19zdGF0ZS0+cGlwZWxpbmUsCj4gKwkJTURQNV9DVExf RkxVU0hfV0IsIHRydWUpOwo+ICsKPiArCW1kcDVfY3RsX3NldF9lbmNvZGVyX3N0YXRlKG1kcDVf d2ItPmN0bCwKPiArCQkmbWRwNV9jcnRjX3N0YXRlLT5waXBlbGluZSwgdHJ1ZSk7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIG1kcDVfd2JfZG9uZV9pcnEoc3RydWN0IG1kcF9pcnEgKmlycSwgdWlu dDMyX3QgaXJxc3RhdHVzKQo+ICt7Cj4gKwlzdHJ1Y3QgbWRwNV93Yl9jb25uZWN0b3IgKm1kcDVf d2IgPQo+ICsJCWNvbnRhaW5lcl9vZihpcnEsIHN0cnVjdCBtZHA1X3diX2Nvbm5lY3Rvciwgd2Jf ZG9uZSk7Cj4gKwlzdHJ1Y3QgbWRwNV9jcnRjX3N0YXRlICptZHA1X2NydGNfc3RhdGUgPQo+ICsJ CXRvX21kcDVfY3J0Y19zdGF0ZShtZHA1X3diLT5iYXNlLmVuY29kZXIuY3J0Yy0+c3RhdGUpOwo+ ICsJc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdiA9IG1kcDVfd2ItPmJhc2UuYmFzZS5kZXYt PmRldl9wcml2YXRlOwo+ICsKPiArCW1kcF9pcnFfdW5yZWdpc3Rlcih0b19tZHBfa21zKHByaXYt PmttcyksICZtZHA1X3diLT53Yl9kb25lKTsKPiArCj4gKwltZHA1X2N0bF9zZXRfZW5jb2Rlcl9z dGF0ZShtZHA1X3diLT5jdGwsCj4gKwkJJm1kcDVfY3J0Y19zdGF0ZS0+cGlwZWxpbmUsIGZhbHNl KTsKPiArCj4gKwlkcm1fd3JpdGViYWNrX3NpZ25hbF9jb21wbGV0aW9uKCZtZHA1X3diLT5iYXNl LCAwKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJf ZnVuY3MgbWRwNV93Yl9lbmNvZGVyX2hlbHBlcl9mdW5jcyA9IHsKPiArCS5hdG9taWNfY2hlY2sg PSBtZHA1X3diX2VuY29kZXJfYXRvbWljX2NoZWNrLAo+ICt9Owo+ICsKPiArc3RydWN0IGRybV93 cml0ZWJhY2tfY29ubmVjdG9yICoKPiArbWRwNV93Yl9jb25uZWN0b3JfaW5pdChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCBzdHJ1Y3QgbWRwNV9jdGwgKmN0bCwKPiArCQl1bnNpZ25lZCB3Yl9pZCkK PiArewo+ICsJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IE5VTEw7Cj4gKwlzdHJ1 Y3QgbWRwNV93Yl9jb25uZWN0b3IgKm1kcDVfd2I7Cj4gKwo+ICsJbWRwNV93YiA9IGt6YWxsb2Mo c2l6ZW9mKCptZHA1X3diKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIW1kcDVfd2IpCj4gKwkJcmV0 dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gKwo+ICsJbWRwNV93Yi0+aWQgPSB3Yl9pZDsKPiArCW1k cDVfd2ItPmN0bCA9IGN0bDsKPiArCj4gKwkvKiBjb25zdHJ1Y3QgYSBkdW1teSBpbnRmIGZvciBX QjogKi8KPiArLy8gVE9ETyB1bi1pbmxpbmUgdGhpcyAoYW5kIGFsc28gaW4gaW50ZXJmYWNlX2lu aXQoKSkKPiArCW1kcDVfd2ItPmludGYgPSBremFsbG9jKHNpemVvZigqbWRwNV93Yi0+aW50Ziks IEdGUF9LRVJORUwpOwo+ICsJbWRwNV93Yi0+aW50Zi0+bnVtID0gLTE7Cj4gKwltZHA1X3diLT5p bnRmLT50eXBlID0gSU5URl9XQjsKPiArCW1kcDVfd2ItPmludGYtPm1vZGUgPSBNRFA1X0lOVEZf V0JfTU9ERV9MSU5FOwo+ICsJbWRwNV93Yi0+aW50Zi0+aWR4ID0gLTE7Cj4gKwo+ICsJbWRwNV93 Yi0+d2JfZG9uZS5pcnEgPSBtZHA1X3diX2RvbmVfaXJxOwo+ICsvLyBUT0RPIGp1c3QgcmVnaXN0 ZXIgZm9yIGFsbCB3YiBpcnEncyB1bnRpbCBJIGZpZ3VyZSBvdXQgdGhlIG1hcHBpbmcuLgo+ICsJ bWRwNV93Yi0+d2JfZG9uZS5pcnFtYXNrID0gTURQNV9JUlFfV0JfMF9ET05FIHwgTURQNV9JUlFf V0JfMV9ET05FIHwgTURQNV9JUlFfV0JfMl9ET05FOwo+ICsKPiArCWNvbm5lY3RvciA9ICZtZHA1 X3diLT5iYXNlLmJhc2U7Cj4gKwo+ICsJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNvbm5lY3Rv ciwgJm1kcDVfd2JfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7Cj4gKwo+ICsJbWRwNV93Yi0+bmZv cm1hdHMgPSBtZHBfZ2V0X2Zvcm1hdHMobWRwNV93Yi0+Zm9ybWF0cywKPiArCQlBUlJBWV9TSVpF KG1kcDVfd2ItPmZvcm1hdHMpLCBmYWxzZSk7Cj4gKwo+ICsJZHJtX3dyaXRlYmFja19jb25uZWN0 b3JfaW5pdChkZXYsCj4gKwkJJm1kcDVfd2ItPmJhc2UsCj4gKwkJJm1kcDVfd2JfY29ubmVjdG9y X2Z1bmNzLAo+ICsJCSZtZHA1X3diX2VuY29kZXJfaGVscGVyX2Z1bmNzLAo+ICsJCW1kcDVfd2It PmZvcm1hdHMsCj4gKwkJbWRwNV93Yi0+bmZvcm1hdHMpOwo+ICsKPiArCWNvbm5lY3Rvci0+aW50 ZXJsYWNlX2FsbG93ZWQgPSAwOwo+ICsJY29ubmVjdG9yLT5kb3VibGVzY2FuX2FsbG93ZWQgPSAw OwoKVGhlc2UgYXJlIGhhbmRsZWQgYnkgZHJtX3dyaXRlYmFja19jb25uZWN0b3JfaW5pdCAoYW5k IGt6YWxsb2MpCgo+ICsKPiArCXJldHVybiAmbWRwNV93Yi0+YmFzZTsKPiArfQo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS9kc2lfaG9zdC5jIGIvZHJpdmVycy9ncHUvZHJt L21zbS9kc2kvZHNpX2hvc3QuYwo+IGluZGV4IDdhMDNhOTQ4OTcwOC4uNDIyZjUyNGY3NTYyIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpL2RzaV9ob3N0LmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2RzaS9kc2lfaG9zdC5jCj4gQEAgLTc0MSw3ICs3NDEsNyBAQCBz dGF0aWMgdm9pZCBkc2lfaW50cl9jdHJsKHN0cnVjdCBtc21fZHNpX2hvc3QgKm1zbV9ob3N0LCB1 MzIgbWFzaywgaW50IGVuYWJsZSkKPiAgCWVsc2UKPiAgCQlpbnRyICY9IH5tYXNrOwo+ICAKPiAt CURCRygiaW50cj0leCBlbmFibGU9JWQiLCBpbnRyLCBlbmFibGUpOwo+ICsJVkVSQigiaW50cj0l eCBlbmFibGU9JWQiLCBpbnRyLCBlbmFibGUpOwo+ICAKPiAgCWRzaV93cml0ZShtc21faG9zdCwg UkVHX0RTSV9JTlRSX0NUUkwsIGludHIpOwo+ICAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXNt X2hvc3QtPmludHJfbG9jaywgZmxhZ3MpOwo+IEBAIC0xNDY1LDcgKzE0NjUsNyBAQCBzdGF0aWMg aXJxcmV0dXJuX3QgZHNpX2hvc3RfaXJxKGludCBpcnEsIHZvaWQgKnB0cikKPiAgCWRzaV93cml0 ZShtc21faG9zdCwgUkVHX0RTSV9JTlRSX0NUUkwsIGlzcik7Cj4gIAlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZtc21faG9zdC0+aW50cl9sb2NrLCBmbGFncyk7Cj4gIAo+IC0JREJHKCJpc3I9MHgl eCwgaWQ9JWQiLCBpc3IsIG1zbV9ob3N0LT5pZCk7Cj4gKwlWRVJCKCJpc3I9MHgleCwgaWQ9JWQi LCBpc3IsIG1zbV9ob3N0LT5pZCk7Cj4gIAo+ICAJaWYgKGlzciAmIERTSV9JUlFfRVJST1IpCj4g IAkJZHNpX2Vycm9yKG1zbV9ob3N0KTsKPiAtLSAKPiAyLjE0LjMKPiAKCi0tIApTZWFuIFBhdWws IFNvZnR3YXJlIEVuZ2luZWVyLCBHb29nbGUgLyBDaHJvbWl1bSBPUwpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpGcmVlZHJlbm8gbWFpbGluZyBsaXN0CkZy ZWVkcmVub0BsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9mcmVlZHJlbm8K