From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ander Conselvan De Oliveira Subject: Re: [PATCH v2 RFC 4/5] drm/i915: make plane helpers fully atomic Date: Fri, 24 Apr 2015 11:52:00 +0300 Message-ID: <1429865520.2544.38.camel@gmail.com> References: <1429701862-22970-1-git-send-email-maarten.lankhorst@linux.intel.com> <1429701862-22970-5-git-send-email-maarten.lankhorst@linux.intel.com> <55388F01.1050405@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-pd0-f177.google.com (mail-pd0-f177.google.com [209.85.192.177]) by gabe.freedesktop.org (Postfix) with ESMTP id 04DFF6E874 for ; Fri, 24 Apr 2015 01:52:05 -0700 (PDT) Received: by pdea3 with SMTP id a3so43242465pde.3 for ; Fri, 24 Apr 2015 01:52:04 -0700 (PDT) In-Reply-To: <55388F01.1050405@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: Maarten Lankhorst Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCAyMDE1LTA0LTIzIGF0IDA4OjE5ICswMjAwLCBNYWFydGVuIExhbmtob3JzdCB3cm90 ZToKPiBUaGlzIGtpbGxzIG9mZiBtb3N0IG9mIHRoZSB0cmFuc2l0aW9uYWwgc2VycyBhbmQgdXNl cyBhdG9taWMgcGxhbmUgdXBkYXRlcwo+IGluIHRoZSBtb2Rlc2V0IHBhdGggdG8gdXBkYXRlIGV2 ZXJ5dGhpbmcuCj4gCj4gU2lnbmVkLW9mZi1ieTogTWFhcnRlbiBMYW5raG9yc3QgPG1hYXJ0ZW4u bGFua2hvcnN0QGxpbnV4LmludGVsLmNvbT4KPiAtLS0KPiBDaGFuZ2VzIHNpbmNlIHYxOgo+ICAt IEFkZCBhdG9taWMgYW5kIHNwcml0ZSBwbGFuZXMgZHVyaW5nIGEgbW9kZXNldCB0b28gc28gdGhl eQo+ICAgIHdpbGwgYmUgcmVzdG9yZWQuCj4gIC0gRHJvcCBhIFdBUk5fT04oIWNydGNfc3RhdGUt PmVuYWJsZWQpIGluIGF0b21pY19wbGFuZV9jaGVjayBmb3IKPiAgICBjdXJzb3IgYW5kIHNwcml0 ZSBwbGFuZXMuIEtlZXAgaXQgZm9yIHByaW1hcnkgYXMgdGhpcyBwcm9iYWJseQo+ICAgIGluZGlj YXRlcyB3ZSBtZXNzZWQgdXAgc29tZXdoZXJlLgo+IAo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9hdG9taWNfcGxhbmUuYyB8ICA1OCArKy0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2Rpc3BsYXkuYyAgICAgIHwgNDg1ICsrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLQo+ ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zcHJpdGUuYyAgICAgICB8ICAzMyArLQo+ICAz IGZpbGVzIGNoYW5nZWQsIDM2NiBpbnNlcnRpb25zKCspLCAyMTAgZGVsZXRpb25zKC0pCj4gCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2F0b21pY19wbGFuZS5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXRvbWljX3BsYW5lLmMKPiBpbmRleCBmN2JkM2I4 ZmEyNDUuLmJhNGFiMzkyYjZiMCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9hdG9taWNfcGxhbmUuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2F0 b21pY19wbGFuZS5jCj4gQEAgLTExMCwzMiArMTEwLDQwIEBAIHN0YXRpYyBpbnQgaW50ZWxfcGxh bmVfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAJCQkJICAgIHN0cnVj dCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGMg PSBzdGF0ZS0+Y3J0YzsKPiAtCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjOwo+IC0Jc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Cj4gKwlzdHJ1Y3QgZHJtX2NydGNfc3Rh dGUgKmNydGNfc3RhdGU7Cj4gIAlzdHJ1Y3QgaW50ZWxfcGxhbmUgKmludGVsX3BsYW5lID0gdG9f aW50ZWxfcGxhbmUocGxhbmUpOwo+ICAJc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICppbnRlbF9z dGF0ZSA9IHRvX2ludGVsX3BsYW5lX3N0YXRlKHN0YXRlKTsKPiAgCj4gLQljcnRjID0gY3J0YyA/ IGNydGMgOiBwbGFuZS0+Y3J0YzsKPiAtCWludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMp Owo+IC0KPiArCWludGVsX3N0YXRlLT52aXNpYmxlID0gZmFsc2U7Cj4gIAkvKgo+ICAJICogQm90 aCBjcnRjIGFuZCBwbGFuZS0+Y3J0YyBjb3VsZCBiZSBOVUxMIGlmIHdlJ3JlIHVwZGF0aW5nIGEK PiAgCSAqIHByb3BlcnR5IHdoaWxlIHRoZSBwbGFuZSBpcyBkaXNhYmxlZC4gIFdlIGRvbid0IGFj dHVhbGx5IGhhdmUKPiAgCSAqIGFueXRoaW5nIGRyaXZlci1zcGVjaWZpYyB3ZSBuZWVkIHRvIHRl c3QgaW4gdGhhdCBjYXNlLCBzbwo+ICAJICoganVzdCByZXR1cm4gc3VjY2Vzcy4KPiAgCSAqLwo+ IC0JaWYgKCFjcnRjKQo+ICsJaWYgKCFjcnRjKSB7Cj4gKwkJRFJNX0RFQlVHX0FUT01JQygiSW52 aXNpYmxlOiBubyBjcnRjXG4iKTsKPiAgCQlyZXR1cm4gMDsKPiArCX0KPiArCj4gKwljcnRjX3N0 YXRlID0gc3RhdGUtPnN0YXRlLT5jcnRjX3N0YXRlc1tkcm1fY3J0Y19pbmRleChjcnRjKV07Cj4g KwlpZiAoV0FSTl9PTighY3J0Y19zdGF0ZSkpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJaWYgKCFj cnRjX3N0YXRlLT5lbmFibGUpIHsKPiArCQlEUk1fREVCVUdfQVRPTUlDKCJJbnZpc2libGU6IGNy dGMgb2ZmXG4iKTsKPiAgCj4gLQkvKiBGSVhNRTogdGVtcG9yYXJ5IGhhY2sgbmVjZXNzYXJ5IHdo aWxlIHdlIHN0aWxsIHVzZSB0aGUgcGxhbmUgdXBkYXRlCj4gLQkgKiBoZWxwZXIuICovCj4gLQlp ZiAoc3RhdGUtPnN0YXRlKSB7Cj4gLQkJY3J0Y19zdGF0ZSA9Cj4gLQkJCWludGVsX2F0b21pY19n ZXRfY3J0Y19zdGF0ZShzdGF0ZS0+c3RhdGUsIGludGVsX2NydGMpOwo+IC0JCWlmIChJU19FUlIo Y3J0Y19zdGF0ZSkpCj4gLQkJCXJldHVybiBQVFJfRVJSKGNydGNfc3RhdGUpOwo+IC0JfSBlbHNl IHsKPiAtCQljcnRjX3N0YXRlID0gaW50ZWxfY3J0Yy0+Y29uZmlnOwo+ICsJCS8qCj4gKwkJICog UHJvYmFibHkgYWxsb3dlZCBhZnRlciBjb252ZXJ0aW5nIHRvIGF0b21pYy4gUmlnaHQKPiArCQkg KiBub3cgaXQgcHJvYmFibHkgbWVhbnMgd2UgaGF2ZSB0aGUgc3RhdGUgY29uZnVzZWQuCj4gKwkJ ICovCj4gKwkJSTkxNV9TVEFURV9XQVJOX09OKHBsYW5lLT50eXBlID09IERSTV9QTEFORV9UWVBF X1BSSU1BUlkpOwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICsKPiArCWlmICghY3J0Y19zdGF0ZS0+ YWN0aXZlKSB7Cj4gKwkJRFJNX0RFQlVHX0FUT01JQygiSW52aXNpYmxlOiBkcG1zIG9mZlxuIik7 Cj4gKwkJcmV0dXJuIDA7Cj4gIAl9Cj4gIAo+ICAJLyoKPiBAQCAtMTU1LDI0ICsxNjMsOCBAQCBz dGF0aWMgaW50IGludGVsX3BsYW5lX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZSwKPiAgCS8qIENsaXAgYWxsIHBsYW5lcyB0byBDUlRDIHNpemUsIG9yIDB4MCBpZiBDUlRDIGlz IGRpc2FibGVkICovCj4gIAlpbnRlbF9zdGF0ZS0+Y2xpcC54MSA9IDA7Cj4gIAlpbnRlbF9zdGF0 ZS0+Y2xpcC55MSA9IDA7Cj4gLQlpbnRlbF9zdGF0ZS0+Y2xpcC54MiA9Cj4gLQkJY3J0Y19zdGF0 ZS0+YmFzZS5hY3RpdmUgPyBjcnRjX3N0YXRlLT5waXBlX3NyY193IDogMDsKPiAtCWludGVsX3N0 YXRlLT5jbGlwLnkyID0KPiAtCQljcnRjX3N0YXRlLT5iYXNlLmFjdGl2ZSA/IGNydGNfc3RhdGUt PnBpcGVfc3JjX2ggOiAwOwo+IC0KPiAtCS8qCj4gLQkgKiBEaXNhYmxpbmcgYSBwbGFuZSBpcyBh bHdheXMgb2theTsgd2UganVzdCBuZWVkIHRvIHVwZGF0ZQo+IC0JICogZmIgdHJhY2tpbmcgaW4g YSBzcGVjaWFsIHdheSBzaW5jZSBjbGVhbnVwX2ZiKCkgd29uJ3QKPiAtCSAqIGdldCBjYWxsZWQg YnkgdGhlIHBsYW5lIGhlbHBlcnMuCj4gLQkgKi8KPiAtCWlmIChzdGF0ZS0+ZmIgPT0gTlVMTCAm JiBwbGFuZS0+c3RhdGUtPmZiICE9IE5VTEwpIHsKPiAtCQkvKgo+IC0JCSAqICdwcmVwYXJlJyBp cyBuZXZlciBjYWxsZWQgd2hlbiBwbGFuZSBpcyBiZWluZyBkaXNhYmxlZCwgc28KPiAtCQkgKiB3 ZSBuZWVkIHRvIGhhbmRsZSBmcm9udGJ1ZmZlciB0cmFja2luZyBhcyBhIHNwZWNpYWwgY2FzZQo+ IC0JCSAqLwo+IC0JCWludGVsX2NydGMtPmF0b21pYy5kaXNhYmxlZF9wbGFuZXMgfD0KPiAtCQkJ KDEgPDwgZHJtX3BsYW5lX2luZGV4KHBsYW5lKSk7Cj4gLQl9Cj4gKwlpbnRlbF9zdGF0ZS0+Y2xp cC54MiA9IHRvX2ludGVsX2NydGNfc3RhdGUoY3J0Y19zdGF0ZSktPnBpcGVfc3JjX3c7Cj4gKwlp bnRlbF9zdGF0ZS0+Y2xpcC55MiA9IHRvX2ludGVsX2NydGNfc3RhdGUoY3J0Y19zdGF0ZSktPnBp cGVfc3JjX2g7Cj4gIAo+ICAJaWYgKHN0YXRlLT5mYiAmJiBpbnRlbF9yb3RhdGlvbl85MF9vcl8y NzAoc3RhdGUtPnJvdGF0aW9uKSkgewo+ICAJCWlmICghKHN0YXRlLT5mYi0+bW9kaWZpZXJbMF0g PT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQgfHwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlz cGxheS5jCj4gaW5kZXggMmZmYWNiNGMzYTEyLi5hY2I1YzViZWE0MjggMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gQEAgLTEwMCwxMiArMTAwLDE2IEBAIHN0YXRpYyB2 b2lkIHZsdl9wcmVwYXJlX3BsbChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKPiAgCQkJICAgIGNv bnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZyk7Cj4gIHN0YXRpYyB2b2lk IGNodl9wcmVwYXJlX3BsbChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKPiAgCQkJICAgIGNvbnN0 IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZyk7Cj4gK3N0YXRpYyBpbnQgaW50 ZWxfYXRvbWljX2NoZWNrX2NydGMoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICsJCQkJICAgc3Ry dWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKTsKPiAgc3RhdGljIHZvaWQgaW50ZWxfYmVn aW5fY3J0Y19jb21taXQoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKPiAgc3RhdGljIHZvaWQgaW50 ZWxfZmluaXNoX2NydGNfY29tbWl0KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cj4gIHN0YXRpYyB2 b2lkIHNrbF9pbml0X3NjYWxlcnMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGludGVs X2NydGMgKmludGVsX2NydGMsCj4gIAlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZSk7Cj4gIHN0YXRpYyB2b2lkIGludGVsX2NydGNfZW5hYmxlX3BsYW5lcyhzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpOwo+ICBzdGF0aWMgdm9pZCBpbnRlbF9jcnRjX2Rpc2FibGVfcGxhbmVzKHN0cnVj dCBkcm1fY3J0YyAqY3J0Yyk7Cj4gK3N0YXRpYyB2b2lkIGludGVsX3ByZV9kaXNhYmxlX3ByaW1h cnkoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKPiArc3RhdGljIHZvaWQgaW50ZWxfcG9zdF9lbmFi bGVfcHJpbWFyeShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwo+ICAKPiAgc3RhdGljIHN0cnVjdCBp bnRlbF9lbmNvZGVyICppbnRlbF9maW5kX2VuY29kZXIoc3RydWN0IGludGVsX2Nvbm5lY3RvciAq Y29ubmVjdG9yLCBpbnQgcGlwZSkKPiAgewo+IEBAIC0zMDU2LDExICszMDYwLDIwIEBAIGludGVs X3BpcGVfc2V0X2Jhc2VfYXRvbWljKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IGRybV9m cmFtZWJ1ZmZlciAqZmIsCj4gIHsKPiAgCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5k ZXY7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2 YXRlOwo+ICsJc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSA9Cj4gKwkJdG9f aW50ZWxfcGxhbmVfc3RhdGUoY3J0Yy0+cHJpbWFyeS0+c3RhdGUpOwo+ICsJYm9vbCB3YXNfdmlz aWJsZSA9IHBsYW5lX3N0YXRlLT52aXNpYmxlOwo+ICAKPiAtCWlmIChkZXZfcHJpdi0+ZGlzcGxh eS5kaXNhYmxlX2ZiYykKPiArCS8qIE5vdCBzdXBwb3J0ZWQgcmlnaHQgbm93IGJ5IHRoZSBoZWxw ZXIsIGJ1dCBsZXRzIGJlIHRob3JvdWdoLiAqLwo+ICsJaWYgKHdhc192aXNpYmxlICYmICFmYikK PiArCQlpbnRlbF9wcmVfZGlzYWJsZV9wcmltYXJ5KGNydGMpOwo+ICsJZWxzZSBpZiAod2FzX3Zp c2libGUgJiYgZGV2X3ByaXYtPmRpc3BsYXkuZGlzYWJsZV9mYmMpCj4gIAkJZGV2X3ByaXYtPmRp c3BsYXkuZGlzYWJsZV9mYmMoZGV2KTsKPiAgCj4gKwlwbGFuZV9zdGF0ZS0+dmlzaWJsZSA9ICEh ZmI7Cj4gIAlkZXZfcHJpdi0+ZGlzcGxheS51cGRhdGVfcHJpbWFyeV9wbGFuZShjcnRjLCBmYiwg eCwgeSk7Cj4gKwlpZiAoIXdhc192aXNpYmxlICYmIGZiKQo+ICsJCWludGVsX3Bvc3RfZW5hYmxl X3ByaW1hcnkoY3J0Yyk7Cj4gIAo+ICAJcmV0dXJuIDA7Cj4gIH0KPiBAQCAtMzA4NywxNiArMzEw MCwxNyBAQCBzdGF0aWMgdm9pZCBpbnRlbF91cGRhdGVfcHJpbWFyeV9wbGFuZXMoc3RydWN0IGRy bV9kZXZpY2UgKmRldikKPiAgCQlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2lu dGVsX2NydGMoY3J0Yyk7Cj4gIAo+ICAJCWRybV9tb2Rlc2V0X2xvY2soJmNydGMtPm11dGV4LCBO VUxMKTsKPiAtCQkvKgo+IC0JCSAqIEZJWE1FOiBPbmNlIHdlIGhhdmUgcHJvcGVyIHN1cHBvcnQg Zm9yIHByaW1hcnkgcGxhbmVzIChhbmQKPiAtCQkgKiBkaXNhYmxpbmcgdGhlbSB3aXRob3V0IGRp c2FibGluZyB0aGUgZW50aXJlIGNydGMpIGFsbG93IGFnYWluCj4gLQkJICogYSBOVUxMIGNydGMt PnByaW1hcnktPmZiLgo+IC0JCSAqLwo+IC0JCWlmIChpbnRlbF9jcnRjLT5hY3RpdmUgJiYgY3J0 Yy0+cHJpbWFyeS0+ZmIpCj4gKwo+ICsJCWlmIChpbnRlbF9jcnRjLT5hY3RpdmUpIHsKPiArCQkJ Y29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpzdGF0ZSA9Cj4gKwkJCQl0b19pbnRlbF9w bGFuZV9zdGF0ZShjcnRjLT5wcmltYXJ5LT5zdGF0ZSk7Cj4gKwo+ICAJCQlkZXZfcHJpdi0+ZGlz cGxheS51cGRhdGVfcHJpbWFyeV9wbGFuZShjcnRjLAo+IC0JCQkJCQkJICAgICAgIGNydGMtPnBy aW1hcnktPmZiLAo+IC0JCQkJCQkJICAgICAgIGNydGMtPngsCj4gLQkJCQkJCQkgICAgICAgY3J0 Yy0+eSk7Cj4gKwkJCQkJCQlzdGF0ZS0+YmFzZS5mYiwKPiArCQkJCQkJCXN0YXRlLT5zcmMueDEg Pj4gMTYsCj4gKwkJCQkJCQlzdGF0ZS0+c3JjLnkxID4+IDE2KTsKPiArCQl9Cj4gKwo+ICAJCWRy bV9tb2Rlc2V0X3VubG9jaygmY3J0Yy0+bXV0ZXgpOwo+ICAJfQo+ICB9Cj4gQEAgLTEwNjU5LDYg KzEwNjczLDcgQEAgc3RhdGljIHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgaW50ZWxfaGVs cGVyX2Z1bmNzID0gewo+ICAJLmxvYWRfbHV0ID0gaW50ZWxfY3J0Y19sb2FkX2x1dCwKPiAgCS5h dG9taWNfYmVnaW4gPSBpbnRlbF9iZWdpbl9jcnRjX2NvbW1pdCwKPiAgCS5hdG9taWNfZmx1c2gg PSBpbnRlbF9maW5pc2hfY3J0Y19jb21taXQsCj4gKwkuYXRvbWljX2NoZWNrID0gaW50ZWxfYXRv bWljX2NoZWNrX2NydGMsCj4gIH07Cj4gIAo+ICAvKioKPiBAQCAtMTA3MTMsNyArMTA3MjgsNiBA QCBzdGF0aWMgdm9pZCBpbnRlbF9tb2Rlc2V0X3VwZGF0ZV9jb25uZWN0b3JfYXRvbWljX3N0YXRl KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gICAqLwo+ICBzdGF0aWMgdm9pZCBpbnRlbF9tb2Rl c2V0X2ZpeHVwX3N0YXRlKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKPiAgewo+IC0J c3RydWN0IGludGVsX2NydGMgKmNydGM7Cj4gIAlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2Rl cjsKPiAgCXN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvcjsKPiAgCj4gQEAgLTEwNzM2 LDExICsxMDc1MCw2IEBAIHN0YXRpYyB2b2lkIGludGVsX21vZGVzZXRfZml4dXBfc3RhdGUoc3Ry dWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ICAJCQllbmNvZGVyLT5iYXNlLmNydGMgPSBO VUxMOwo+ICAJfQo+ICAKPiAtCWZvcl9lYWNoX2ludGVsX2NydGMoc3RhdGUtPmRldiwgY3J0Yykg ewo+IC0JCWNydGMtPmJhc2UuZW5hYmxlZCA9IGNydGMtPmJhc2Uuc3RhdGUtPmVuYWJsZTsKPiAt CQljcnRjLT5jb25maWcgPSB0b19pbnRlbF9jcnRjX3N0YXRlKGNydGMtPmJhc2Uuc3RhdGUpOwo+ IC0JfQo+IC0KPiAgCS8qIENvcHkgdGhlIG5ldyBjb25maWd1cmF0aW9uIHRvIHRoZSBzdGFnZWQg c3RhdGUsIHRvIGtlZXAgdGhlIGZldwo+ICAJICogcGllY2VzIG9mIGNvZGUgdGhhdCBoYXZlbid0 IGJlZW4gY29udmVydGVkIHlldCBoYXBweSAqLwo+ICAJaW50ZWxfbW9kZXNldF91cGRhdGVfc3Rh Z2VkX291dHB1dF9zdGF0ZShzdGF0ZS0+ZGV2KTsKPiBAQCAtMTExNzAsNiArMTExNzksOCBAQCBp bnRlbF9tb2Rlc2V0X3VwZGF0ZV9zdGF0ZShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUp Cj4gIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Cj4gIAlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNy dGNfc3RhdGU7Cj4gIAlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwo+ICsJc3RydWN0 IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5lY3Rvcl9zdGF0ZTsKPiArCWludCBpOwo+ICAKPiAg CWludGVsX3NoYXJlZF9kcGxsX2NvbW1pdChkZXZfcHJpdik7Cj4gIAo+IEBAIC0xMTE4NSw3ICsx MTE5NiwyNiBAQCBpbnRlbF9tb2Rlc2V0X3VwZGF0ZV9zdGF0ZShzdHJ1Y3QgZHJtX2F0b21pY19z dGF0ZSAqc3RhdGUpCj4gIAkJaW50ZWxfZW5jb2Rlci0+Y29ubmVjdG9yc19hY3RpdmUgPSBmYWxz ZTsKPiAgCX0KPiAgCj4gLQlkcm1fYXRvbWljX2hlbHBlcl9zd2FwX3N0YXRlKHN0YXRlLT5kZXYs IHN0YXRlKTsKPiArCS8qCj4gKwkgKiBzd2FwIGNydGMgYW5kIGNvbm5lY3RvciBzdGF0ZSwgcGxh bmUgc3RhdGUgaXMgYWxyZWFkeSBzd2FwcGVkIGluCj4gKwkgKiBfX2ludGVsX3NldF9tb2RlX3Vw ZGF0ZV9wbGFuZXMuIE9uY2UgLmNydGNfZGlzYWJsZSBpcyBmaXhlZAo+ICsJICogYWxsIHN0YXRl IHNob3VsZCBiZSBzd2FwcGVkIGJlZm9yZSBkaXNhYmxpbmcgY3J0YydzLgo+ICsJICovCgpDYW4n dCB3ZSBqdXN0IGZpeCAuY3J0Y19kaXNhYmxlKCkgZmlyc3Q/Cgo+ICsJZm9yX2VhY2hfY3J0Y19p bl9zdGF0ZShzdGF0ZSwgY3J0YywgY3J0Y19zdGF0ZSwgaSkgewo+ICsJCWNydGMtPmVuYWJsZWQg PSBjcnRjX3N0YXRlLT5lbmFibGU7Cj4gKwkJdG9faW50ZWxfY3J0YyhjcnRjKS0+Y29uZmlnID0g dG9faW50ZWxfY3J0Y19zdGF0ZShjcnRjX3N0YXRlKTsKPiArCj4gKwkJY3J0Yy0+c3RhdGUtPnN0 YXRlID0gc3RhdGU7Cj4gKwkJc3dhcChzdGF0ZS0+Y3J0Y19zdGF0ZXNbaV0sIGNydGMtPnN0YXRl KTsKPiArCQljcnRjLT5zdGF0ZS0+c3RhdGUgPSBOVUxMOwo+ICsJfQo+ICsKPiArCWZvcl9lYWNo X2Nvbm5lY3Rvcl9pbl9zdGF0ZShzdGF0ZSwgY29ubmVjdG9yLCBjb25uZWN0b3Jfc3RhdGUsIGkp IHsKPiArCQljb25uZWN0b3ItPnN0YXRlLT5zdGF0ZSA9IHN0YXRlOwo+ICsJCXN3YXAoc3RhdGUt PmNvbm5lY3Rvcl9zdGF0ZXNbaV0sIGNvbm5lY3Rvci0+c3RhdGUpOwo+ICsJCWNvbm5lY3Rvci0+ c3RhdGUtPnN0YXRlID0gTlVMTDsKPiArCX0KPiArCj4gIAlpbnRlbF9tb2Rlc2V0X2ZpeHVwX3N0 YXRlKHN0YXRlKTsKPiAgCj4gIAkvKiBEb3VibGUgY2hlY2sgc3RhdGUuICovCj4gQEAgLTExNzQw LDYgKzExNzcwLDMwIEBAIHN0YXRpYyB2b2lkIHVwZGF0ZV9zY2FubGluZV9vZmZzZXQoc3RydWN0 IGludGVsX2NydGMgKmNydGMpCj4gIAkJY3J0Yy0+c2NhbmxpbmVfb2Zmc2V0ID0gMTsKPiAgfQo+ ICAKPiArc3RhdGljIGludCBpbnRlbF9tb2Rlc2V0X2NvbXB1dGVfcGxhbmVzKHN0cnVjdCBkcm1f YXRvbWljX3N0YXRlICpzdGF0ZSwKPiArCQkJCQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gK3sK PiArCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsK PiArCWludCBwaXBlID0gaW50ZWxfY3J0Yy0+cGlwZTsKPiArCXN0cnVjdCBkcm1fcGxhbmVfc3Rh dGUgKnBsYW5lX3N0YXRlOwo+ICsJc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7Cj4gKwo+ICsJcGxh bmVfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9wbGFuZV9zdGF0ZShzdGF0ZSwgY3J0Yy0+Y3Vyc29y KTsKPiArCWlmIChJU19FUlIocGxhbmVfc3RhdGUpKQo+ICsJCXJldHVybiBQVFJfRVJSKHBsYW5l X3N0YXRlKTsKPiArCj4gKwkvKiBBZGQgYWxsIG92ZXJsYXkgcGxhbmVzICovCj4gKwlkcm1fZm9y X2VhY2hfbGVnYWN5X3BsYW5lKHBsYW5lLCAmY3J0Yy0+ZGV2LT5tb2RlX2NvbmZpZy5wbGFuZV9s aXN0KSB7Cj4gKwkJaWYgKHRvX2ludGVsX3BsYW5lKHBsYW5lKS0+cGlwZSA9PSBwaXBlKSB7Cj4g KwkJCXBsYW5lX3N0YXRlID0gZHJtX2F0b21pY19nZXRfcGxhbmVfc3RhdGUoc3RhdGUsIHBsYW5l KTsKPiArCQkJaWYgKElTX0VSUihwbGFuZV9zdGF0ZSkpCj4gKwkJCQlyZXR1cm4gUFRSX0VSUihw bGFuZV9zdGF0ZSk7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICBz dGF0aWMgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKgo+ICBpbnRlbF9tb2Rlc2V0X2NvbXB1dGVf Y29uZmlnKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiAgCQkJICAgICBzdHJ1Y3QgZHJtX2F0b21p Y19zdGF0ZSAqc3RhdGUpCj4gQEAgLTExNzY1LDggKzExODE5LDE0IEBAIGludGVsX21vZGVzZXRf Y29tcHV0ZV9jb25maWcoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICAJaWYgKElTX0VSUihwaXBl X2NvbmZpZykpCj4gIAkJcmV0dXJuIHBpcGVfY29uZmlnOwo+ICAKPiArCWlmIChuZWVkc19tb2Rl c2V0KCZwaXBlX2NvbmZpZy0+YmFzZSkpIHsKPiArCQlyZXQgPSBpbnRlbF9tb2Rlc2V0X2NvbXB1 dGVfcGxhbmVzKHN0YXRlLCBjcnRjKTsKPiArCQlpZiAocmV0KQo+ICsJCQlyZXR1cm4gRVJSX1BU UihyZXQpOwo+ICsJfQo+ICsKPiAgCWlmICghcGlwZV9jb25maWctPmJhc2UuZW5hYmxlKQo+IC0J CXJldHVybiBwaXBlX2NvbmZpZzsKPiArCQlnb3RvIGRvbmU7Cj4gIAo+ICAJcmV0ID0gaW50ZWxf bW9kZXNldF9waXBlX2NvbmZpZyhjcnRjLCBzdGF0ZSwgcGlwZV9jb25maWcpOwo+ICAJaWYgKHJl dCkKPiBAQCAtMTE3ODQsOCArMTE4NDQsOCBAQCBpbnRlbF9tb2Rlc2V0X2NvbXB1dGVfY29uZmln KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiAgCSAqIHJlcXVpcmVkIGNoYW5nZXMgYW5kIGZvcmNp bmcgYSBtb2RlIHNldC4KPiAgCSAqLwo+ICAKPiAtCWludGVsX2R1bXBfcGlwZV9jb25maWcodG9f aW50ZWxfY3J0YyhjcnRjKSwgcGlwZV9jb25maWcsIlttb2Rlc2V0XSIpOwo+IC0KPiArCWludGVs X2R1bXBfcGlwZV9jb25maWcodG9faW50ZWxfY3J0YyhjcnRjKSwgcGlwZV9jb25maWcsICJbbW9k ZXNldF0iKTsKPiArZG9uZToKPiAgCXJldCA9IGRybV9hdG9taWNfaGVscGVyX2NoZWNrX3BsYW5l cyhzdGF0ZS0+ZGV2LCBzdGF0ZSk7Cj4gIAlpZiAocmV0KQo+ICAJCXJldHVybiBFUlJfUFRSKHJl dCk7Cj4gQEAgLTExODY5LDYgKzExOTI5LDExMyBAQCBzdGF0aWMgaW50IF9faW50ZWxfc2V0X21v ZGVfY2hlY2tzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKPiAgCXJldHVybiAwOwo+ ICB9Cj4gIAo+ICtzdGF0aWMgdm9pZCBfX2ludGVsX3NldF9tb2RlX3VwZGF0ZV9wbGFuZXMoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKPiArCQkJCQkgICBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAq c3RhdGUpCj4gK3sKPiArCWludCBpOwo+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqb2xkX3Bs YW5lX3N0YXRlOwo+ICsJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwo+ICsJc3Ry dWN0IGRybV9wbGFuZSAqcGxhbmU7Cj4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Cj4gKwo+ICsJ LyoKPiArCSAqIEZvciBub3cgb25seSBzd2FwIHBsYW5lIHN0YXRlLCBzaG91bGQgYmUgcmVwbGFj ZWQgd2l0aCBhCj4gKwkgKiBjYWxsIHRvIGRybV9hdG9taWNfaGVscGVyX3N3YXBfc3RhdGUKPiAr CSAqLwo+ICsJZm9yX2VhY2hfcGxhbmVfaW5fc3RhdGUoc3RhdGUsIHBsYW5lLCBvbGRfcGxhbmVf c3RhdGUsIGkpIHsKPiArCQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9IHN0YXRlLT5wbGFuZXNb aV07Cj4gKwo+ICsJCWlmICghcGxhbmUpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlwbGFuZS0+ c3RhdGUtPnN0YXRlID0gc3RhdGU7Cj4gKwkJc3dhcChzdGF0ZS0+cGxhbmVfc3RhdGVzW2ldLCBw bGFuZS0+c3RhdGUpOwo+ICsJCXBsYW5lLT5zdGF0ZS0+c3RhdGUgPSBOVUxMOwo+ICsJfQo+ICsK PiArCWZvcl9lYWNoX2NydGNfaW5fc3RhdGUoc3RhdGUsIGNydGMsIGNydGNfc3RhdGUsIGkpIHsK PiArCQljb25zdCBzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzICpmdW5jczsKPiArCj4gKwkJ ZnVuY3MgPSBjcnRjLT5oZWxwZXJfcHJpdmF0ZTsKPiArCj4gKwkJaWYgKCFmdW5jcyB8fCAhZnVu Y3MtPmF0b21pY19iZWdpbikKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCS8qIFhYWDogSGFjayBi ZWNhdXNlIGNydGMgc3RhdGUgaXMgbm90IHN3YXBwZWQgKi8KPiArCQljcnRjLT5zdGF0ZS0+bW9k ZV9jaGFuZ2VkID0gY3J0Y19zdGF0ZS0+bW9kZV9jaGFuZ2VkOwo+ICsJCWNydGMtPnN0YXRlLT5h Y3RpdmVfY2hhbmdlZCA9IGNydGNfc3RhdGUtPmFjdGl2ZV9jaGFuZ2VkOwo+ICsKPiArCQlEUk1f REVCVUdfQVRPTUlDKCJDYWxsaW5nIGF0b21pY19iZWdpbiBvbiBjcnRjICVpXG4iLCBpKTsKPiAr CQlmdW5jcy0+YXRvbWljX2JlZ2luKGNydGMpOwo+ICsJfQo+ICsKPiArCWZvcl9lYWNoX3BsYW5l X2luX3N0YXRlKHN0YXRlLCBwbGFuZSwgb2xkX3BsYW5lX3N0YXRlLCBpKSB7Cj4gKwkJYm9vbCB2 aXNpYmxlID0gdG9faW50ZWxfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKS0+dmlzaWJsZTsKPiAr CQlzdHJ1Y3QgaW50ZWxfcGxhbmUgKmludGVsX3BsYW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmUp Owo+ICsJCWNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfaGVscGVyX2Z1bmNzICpmdW5jczsKPiArCj4g KwkJY3J0YyA9IHBsYW5lLT5zdGF0ZS0+Y3J0YzsKPiArCQlmdW5jcyA9IHBsYW5lLT5oZWxwZXJf cHJpdmF0ZTsKPiArCj4gKwkJaWYgKCFmdW5jcykKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCURS TV9ERUJVR19BVE9NSUMoIlBsYW5lICVpIGlzIHZpc2libGU6ICVpXG4iLCBpLCB2aXNpYmxlKTsK PiArCj4gKwkJaWYgKCF2aXNpYmxlKQo+ICsJCQlmdW5jcy0+YXRvbWljX3VwZGF0ZShwbGFuZSwg b2xkX3BsYW5lX3N0YXRlKTsKCkknbSBnZXR0aW5nIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNl IGluIGludGVsX2NvbW1pdF9wcmltYXJ5X3BsYW5lKCkKYmVjYXVzZSBvZiBhIE5VTEwgY3J0YyB3 aGVuIGFuIGFscmVhZHkgZGlzYWJsZWQgcGxhbmUgaXMgZGlzYWJsZWQgYWdhaW4uClNob3VsZCB3 ZSBqdXN0IHNraXAgdGhlIHVwZGF0ZSBoZXJlPwoKPiArCQllbHNlIGlmIChjcnRjLT5zdGF0ZS0+ bW9kZV9jaGFuZ2VkKQo+ICsJCQlpbnRlbF9wbGFuZS0+ZGlzYWJsZV9wbGFuZShwbGFuZSwgY3J0 YywgdHJ1ZSk7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIF9faW50ZWxfc2V0X21vZGVf Y2xlYW51cF9wbGFuZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiArCQkJCQkgICAgc3RydWN0 IGRybV9hdG9taWNfc3RhdGUgKm9sZF9zdGF0ZSkKPiArewo+ICsJaW50IG5wbGFuZXMgPSBkZXYt Pm1vZGVfY29uZmlnLm51bV90b3RhbF9wbGFuZTsKPiArCWludCBuY3J0Y3MgPSBkZXYtPm1vZGVf Y29uZmlnLm51bV9jcnRjOwo+ICsJaW50IGk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IG5wbGFu ZXM7IGkrKykgewo+ICsJCWNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfaGVscGVyX2Z1bmNzICpmdW5j czsKPiArCQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9IG9sZF9zdGF0ZS0+cGxhbmVzW2ldOwo+ ICsJCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9wbGFuZV9zdGF0ZTsKPiArCj4gKwkJaWYg KCFwbGFuZSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCWZ1bmNzID0gcGxhbmUtPmhlbHBlcl9w cml2YXRlOwo+ICsKPiArCQlpZiAoIWZ1bmNzKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJb2xk X3BsYW5lX3N0YXRlID0gb2xkX3N0YXRlLT5wbGFuZV9zdGF0ZXNbaV07Cj4gKwo+ICsJCWlmICh0 b19pbnRlbF9wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpLT52aXNpYmxlKSB7Cj4gKwkJCURSTV9E RUJVR19BVE9NSUMoIlBsYW5lICVpIGlzIHVwZGF0ZWRcbiIsIGkpOwo+ICsJCQlmdW5jcy0+YXRv bWljX3VwZGF0ZShwbGFuZSwgb2xkX3BsYW5lX3N0YXRlKTsKPiArCQl9IGVsc2UKPiArCQkJRFJN X0RFQlVHX0FUT01JQygiUGxhbmUgJWkgaXMgbGVmdCBhbG9uZVxuIiwgaSk7Cj4gKwl9Cj4gKwo+ ICsJZm9yIChpID0gMDsgaSA8IG5jcnRjczsgaSsrKSB7Cj4gKwkJY29uc3Qgc3RydWN0IGRybV9j cnRjX2hlbHBlcl9mdW5jcyAqZnVuY3M7Cj4gKwkJc3RydWN0IGRybV9jcnRjICpjcnRjID0gb2xk X3N0YXRlLT5jcnRjc1tpXTsKPiArCj4gKwkJaWYgKCFjcnRjKQo+ICsJCQljb250aW51ZTsKPiAr Cj4gKwkJZnVuY3MgPSBjcnRjLT5oZWxwZXJfcHJpdmF0ZTsKPiArCj4gKwkJaWYgKCFmdW5jcyB8 fCAhZnVuY3MtPmF0b21pY19mbHVzaCkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCURSTV9ERUJV R19BVE9NSUMoIkNhbGxpbmcgYXRvbWljX2ZsdXNoIG9uIGNydGMgJWlcbiIsIGkpOwo+ICsJCWZ1 bmNzLT5hdG9taWNfZmx1c2goY3J0Yyk7Cj4gKwl9CgpUaGVzZSBsb29wcyBjb3VsZCB1c2UgZm9y X2VhY2hfe2NydGMscGxhbmV9X2luX3N0YXRlIG1hY3Jvcy4KCj4gKwlkcm1fYXRvbWljX2hlbHBl cl9jbGVhbnVwX3BsYW5lcyhkZXYsIG9sZF9zdGF0ZSk7Cj4gK30KPiArCj4gIHN0YXRpYyBpbnQg X19pbnRlbF9zZXRfbW9kZShzdHJ1Y3QgZHJtX2NydGMgKm1vZGVzZXRfY3J0YywKPiAgCQkJICAg IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZykKPiAgewo+IEBAIC0xMTg3Nyw3 ICsxMjA0NCw3IEBAIHN0YXRpYyBpbnQgX19pbnRlbF9zZXRfbW9kZShzdHJ1Y3QgZHJtX2NydGMg Km1vZGVzZXRfY3J0YywKPiAgCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSA9IHBpcGVf Y29uZmlnLT5iYXNlLnN0YXRlOwo+ICAJc3RydWN0IGRybV9jcnRjICpjcnRjOwo+ICAJc3RydWN0 IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwo+IC0JaW50IHJldCA9IDA7Cj4gKwlpbnQgcmV0 Owo+ICAJaW50IGk7Cj4gIAo+ICAJcmV0ID0gX19pbnRlbF9zZXRfbW9kZV9jaGVja3Moc3RhdGUp Owo+IEBAIC0xMTg4OCwxNCArMTIwNTUsMTQgQEAgc3RhdGljIGludCBfX2ludGVsX3NldF9tb2Rl KHN0cnVjdCBkcm1fY3J0YyAqbW9kZXNldF9jcnRjLAo+ICAJaWYgKHJldCkKPiAgCQlyZXR1cm4g cmV0Owo+ICAKPiArCV9faW50ZWxfc2V0X21vZGVfdXBkYXRlX3BsYW5lcyhkZXYsIHN0YXRlKTsK PiArCj4gIAlmb3JfZWFjaF9jcnRjX2luX3N0YXRlKHN0YXRlLCBjcnRjLCBjcnRjX3N0YXRlLCBp KSB7Cj4gIAkJaWYgKCFuZWVkc19tb2Rlc2V0KGNydGNfc3RhdGUpKQo+ICAJCQljb250aW51ZTsK PiAgCj4gLQkJaW50ZWxfY3J0Y19kaXNhYmxlX3BsYW5lcyhjcnRjKTsKPiArCQlpbnRlbF9jcnRj X2RwbXNfb3ZlcmxheV9kaXNhYmxlKHRvX2ludGVsX2NydGMoY3J0YykpOwo+ICAJCWRldl9wcml2 LT5kaXNwbGF5LmNydGNfZGlzYWJsZShjcnRjKTsKPiAtCQlpZiAoIWNydGNfc3RhdGUtPmVuYWJs ZSkKPiAtCQkJZHJtX3BsYW5lX2hlbHBlcl9kaXNhYmxlKGNydGMtPnByaW1hcnkpOwo+ICAJfQo+ ICAKPiAgCS8qIGNydGMtPm1vZGUgaXMgYWxyZWFkeSB1c2VkIGJ5IHRoZSAtPm1vZGVfc2V0IGNh bGxiYWNrcywgaGVuY2Ugd2UgbmVlZAo+IEBAIC0xMTkyNiw4ICsxMjA5Myw2IEBAIHN0YXRpYyBp bnQgX19pbnRlbF9zZXRfbW9kZShzdHJ1Y3QgZHJtX2NydGMgKm1vZGVzZXRfY3J0YywKPiAgCj4g IAltb2Rlc2V0X3VwZGF0ZV9jcnRjX3Bvd2VyX2RvbWFpbnMoc3RhdGUpOwo+ICAKPiAtCWRybV9h dG9taWNfaGVscGVyX2NvbW1pdF9wbGFuZXMoZGV2LCBzdGF0ZSk7Cj4gLQo+ICAJLyogTm93IGVu YWJsZSB0aGUgY2xvY2tzLCBwbGFuZSwgcGlwZSwgYW5kIGNvbm5lY3RvcnMgdGhhdCB3ZSBzZXQg dXAuICovCj4gIAlmb3JfZWFjaF9jcnRjX2luX3N0YXRlKHN0YXRlLCBjcnRjLCBjcnRjX3N0YXRl LCBpKSB7Cj4gIAkJaWYgKCFjcnRjLT5zdGF0ZS0+ZW5hYmxlKQo+IEBAIC0xMTkzNSwxMyArMTIx MDAsMTMgQEAgc3RhdGljIGludCBfX2ludGVsX3NldF9tb2RlKHN0cnVjdCBkcm1fY3J0YyAqbW9k ZXNldF9jcnRjLAo+ICAKPiAgCQl1cGRhdGVfc2NhbmxpbmVfb2Zmc2V0KHRvX2ludGVsX2NydGMo Y3J0YykpOwo+ICAKPiAtCQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2VuYWJsZShjcnRjKTsKPiAt CQlpbnRlbF9jcnRjX2VuYWJsZV9wbGFuZXMoY3J0Yyk7Cj4gKwkJaWYgKG5lZWRzX21vZGVzZXQo Y3J0Yy0+c3RhdGUpKQo+ICsJCQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2VuYWJsZShjcnRjKTsK CkluIHYyIG9mIHRoZSBwYXRjaCB0aGF0IHJlbW92ZXMgbW9kZXNldF9waXBlcyBhbmQgZnJpZW5k cywgSSBhZGRlZCBhCmNoZWNrIGZvciBuZWVkc19tb2Rlc2V0KCkgYmVmb3JlIHVwZGF0ZV9zY2Fu bGluZV9vZmZzZXQoKS4KCj4gIAl9Cj4gIAo+IC0JLyogRklYTUU6IGFkZCBzdWJwaXhlbCBvcmRl ciAqLwo+ICsJX19pbnRlbF9zZXRfbW9kZV9jbGVhbnVwX3BsYW5lcyhkZXYsIHN0YXRlKTsKPiAg Cj4gLQlkcm1fYXRvbWljX2hlbHBlcl9jbGVhbnVwX3BsYW5lcyhkZXYsIHN0YXRlKTsKPiArCS8q IEZJWE1FOiBhZGQgc3VicGl4ZWwgb3JkZXIgKi8KPiAgCj4gIAlkcm1fYXRvbWljX3N0YXRlX2Zy ZWUoc3RhdGUpOwo+ICAKPiBAQCAtMTIxNzAsNiArMTIzMzUsNyBAQCBpbnRlbF9tb2Rlc2V0X3N0 YWdlX291dHB1dF9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAJCQlyZXR1cm4gcmV0 Owo+ICAKPiAgCQljcnRjX3N0YXRlLT5lbmFibGUgPSBkcm1fYXRvbWljX2Nvbm5lY3RvcnNfZm9y X2NydGMoc3RhdGUsIGNydGMpOwo+ICsJCWNydGNfc3RhdGUtPmFjdGl2ZSA9IGNydGNfc3RhdGUt PmVuYWJsZTsKClNob3VsZCB0aGlzIGJlIGEgc2VwYXJhdGUgZml4PwoKPiAgCX0KPiAgCj4gIAly ZXQgPSBpbnRlbF9tb2Rlc2V0X3NldHVwX3BsYW5lX3N0YXRlKHN0YXRlLCBzZXQtPmNydGMsIHNl dC0+bW9kZSwKPiBAQCAtMTIxOTAsMjAgKzEyMzU2LDExIEBAIGludGVsX21vZGVzZXRfc3RhZ2Vf b3V0cHV0X3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gIAlyZXR1cm4gMDsKPiAgfQo+ ICAKPiAtc3RhdGljIGJvb2wgcHJpbWFyeV9wbGFuZV92aXNpYmxlKHN0cnVjdCBkcm1fY3J0YyAq Y3J0YykKPiAtewo+IC0Jc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSA9Cj4g LQkJdG9faW50ZWxfcGxhbmVfc3RhdGUoY3J0Yy0+cHJpbWFyeS0+c3RhdGUpOwo+IC0KPiAtCXJl dHVybiBwbGFuZV9zdGF0ZS0+dmlzaWJsZTsKPiAtfQo+IC0KPiAgc3RhdGljIGludCBpbnRlbF9j cnRjX3NldF9jb25maWcoc3RydWN0IGRybV9tb2RlX3NldCAqc2V0KQo+ICB7Cj4gIAlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2Owo+ICAJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlID0gTlVM TDsKPiAgCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZzsKPiAtCWJvb2wgcHJp bWFyeV9wbGFuZV93YXNfdmlzaWJsZTsKPiAgCWludCByZXQ7Cj4gIAo+ICAJQlVHX09OKCFzZXQp Owo+IEBAIC0xMjI0MiwzOCArMTIzOTksNyBAQCBzdGF0aWMgaW50IGludGVsX2NydGNfc2V0X2Nv bmZpZyhzdHJ1Y3QgZHJtX21vZGVfc2V0ICpzZXQpCj4gIAo+ICAJaW50ZWxfdXBkYXRlX3BpcGVf c2l6ZSh0b19pbnRlbF9jcnRjKHNldC0+Y3J0YykpOwo+ICAKPiAtCXByaW1hcnlfcGxhbmVfd2Fz X3Zpc2libGUgPSBwcmltYXJ5X3BsYW5lX3Zpc2libGUoc2V0LT5jcnRjKTsKPiAtCj4gIAlyZXQg PSBpbnRlbF9zZXRfbW9kZV93aXRoX2NvbmZpZyhzZXQtPmNydGMsIHBpcGVfY29uZmlnKTsKPiAt Cj4gLQlpZiAocmV0ID09IDAgJiYKPiAtCSAgICBwaXBlX2NvbmZpZy0+YmFzZS5lbmFibGUgJiYK PiAtCSAgICBwaXBlX2NvbmZpZy0+YmFzZS5wbGFuZXNfY2hhbmdlZCAmJgo+IC0JICAgICFuZWVk c19tb2Rlc2V0KCZwaXBlX2NvbmZpZy0+YmFzZSkpIHsKPiAtCQlzdHJ1Y3QgaW50ZWxfY3J0YyAq aW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoc2V0LT5jcnRjKTsKPiAtCj4gLQkJLyoKPiAtCQkg KiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcHJpbWFyeSBwbGFuZSBpcyByZS1lbmFibGVkIGlm IGl0Cj4gLQkJICogaGFzIHByZXZpb3VzbHkgYmVlbiB0dXJuZWQgb2ZmLgo+IC0JCSAqLwo+IC0J CWlmIChyZXQgPT0gMCAmJiAhcHJpbWFyeV9wbGFuZV93YXNfdmlzaWJsZSAmJgo+IC0JCSAgICBw cmltYXJ5X3BsYW5lX3Zpc2libGUoc2V0LT5jcnRjKSkgewo+IC0JCQlXQVJOX09OKCFpbnRlbF9j cnRjLT5hY3RpdmUpOwo+IC0JCQlpbnRlbF9wb3N0X2VuYWJsZV9wcmltYXJ5KHNldC0+Y3J0Yyk7 Cj4gLQkJfQo+IC0KPiAtCQkvKgo+IC0JCSAqIEluIHRoZSBmYXN0Ym9vdCBjYXNlIHRoaXMgbWF5 IGJlIG91ciBvbmx5IGNoZWNrIG9mIHRoZQo+IC0JCSAqIHN0YXRlIGFmdGVyIGJvb3QuICBJdCB3 b3VsZCBiZSBiZXR0ZXIgdG8gb25seSBkbyBpdCBvbgo+IC0JCSAqIHRoZSBmaXJzdCB1cGRhdGUs IGJ1dCB3ZSBkb24ndCBoYXZlIGEgbmljZSB3YXkgb2YgZG9pbmcgdGhhdAo+IC0JCSAqIChhbmQg cmVhbGx5LCBzZXRfY29uZmlnIGlzbid0IHVzZWQgbXVjaCBmb3IgaGlnaCBmcmVxIHBhZ2UKPiAt CQkgKiBmbGlwcGluZywgc28gaW5jcmVhc2luZyBpdHMgY29zdCBoZXJlIHNob3VsZG4ndCBiZSBh IGJpZwo+IC0JCSAqIGRlYWwpLgo+IC0JCSAqLwo+IC0JCWlmIChpOTE1LmZhc3Rib290ICYmIHJl dCA9PSAwKQo+IC0JCQlpbnRlbF9tb2Rlc2V0X2NoZWNrX3N0YXRlKHNldC0+Y3J0Yy0+ZGV2KTsK PiAtCX0KPiAtCgpNYXliZSB0aGlzIGNvdWxkIGJlIGEgc2VwYXJhdGUgcGF0Y2g/Cgo+ICAJaWYg KHJldCkgewo+ICAJCURSTV9ERUJVR19LTVMoImZhaWxlZCB0byBzZXQgbW9kZSBvbiBbQ1JUQzol ZF0sIGVyciA9ICVkXG4iLAo+ICAJCQkgICAgICBzZXQtPmNydGMtPmJhc2UuaWQsIHJldCk7Cj4g QEAgLTEyNDEzLDYgKzEyNTM5LDkgQEAgYm9vbCBpbnRlbF93bV9uZWVkX3VwZGF0ZShzdHJ1Y3Qg ZHJtX3BsYW5lICpwbGFuZSwKPiAgCSAgICBwbGFuZS0+c3RhdGUtPnJvdGF0aW9uICE9IHN0YXRl LT5yb3RhdGlvbikKPiAgCQlyZXR1cm4gdHJ1ZTsKPiAgCj4gKwlpZiAocGxhbmUtPnN0YXRlLT5j cnRjX3cgIT0gc3RhdGUtPmNydGNfdykKPiArCQlyZXR1cm4gdHJ1ZTsKPiArCj4gIAlyZXR1cm4g ZmFsc2U7Cj4gIH0KPiAgCj4gQEAgLTEyNTA3LDc0ICsxMjYzNiwyMiBAQCBpbnRlbF9jaGVja19w cmltYXJ5X3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAJCQkgIHN0cnVjdCBpbnRl bF9wbGFuZV9zdGF0ZSAqc3RhdGUpCj4gIHsKPiAgCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBw bGFuZS0+ZGV2Owo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5k ZXZfcHJpdmF0ZTsKPiAgCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IHN0YXRlLT5iYXNlLmNydGM7 Cj4gLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YzsKPiAgCXN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiID0gc3RhdGUtPmJhc2UuZmI7Cj4gIAlzdHJ1Y3QgZHJtX3JlY3QgKmRlc3QgPSAm c3RhdGUtPmRzdDsKPiAgCXN0cnVjdCBkcm1fcmVjdCAqc3JjID0gJnN0YXRlLT5zcmM7Cj4gIAlj b25zdCBzdHJ1Y3QgZHJtX3JlY3QgKmNsaXAgPSAmc3RhdGUtPmNsaXA7Cj4gIAlib29sIGNhbl9w b3NpdGlvbiA9IGZhbHNlOwo+IC0JaW50IHJldDsKPiAtCj4gLQljcnRjID0gY3J0YyA/IGNydGMg OiBwbGFuZS0+Y3J0YzsKPiAtCWludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwo+ICAK PiAgCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA5KQo+ICAJCWNhbl9wb3NpdGlvbiA9IHRy dWU7Cj4gIAo+IC0JcmV0ID0gZHJtX3BsYW5lX2hlbHBlcl9jaGVja191cGRhdGUocGxhbmUsIGNy dGMsIGZiLAo+IC0JCQkJCSAgICBzcmMsIGRlc3QsIGNsaXAsCj4gLQkJCQkJICAgIERSTV9QTEFO RV9IRUxQRVJfTk9fU0NBTElORywKPiAtCQkJCQkgICAgRFJNX1BMQU5FX0hFTFBFUl9OT19TQ0FM SU5HLAo+IC0JCQkJCSAgICBjYW5fcG9zaXRpb24sIHRydWUsCj4gLQkJCQkJICAgICZzdGF0ZS0+ dmlzaWJsZSk7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gLQo+IC0JaWYgKGludGVs X2NydGMtPmFjdGl2ZSkgewo+IC0JCXN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqb2xkX3N0YXRl ID0KPiAtCQkJdG9faW50ZWxfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKPiAtCj4gLQkJaW50 ZWxfY3J0Yy0+YXRvbWljLndhaXRfZm9yX2ZsaXBzID0gdHJ1ZTsKPiAtCj4gLQkJLyoKPiAtCQkg KiBGQkMgZG9lcyBub3Qgd29yayBvbiBzb21lIHBsYXRmb3JtcyBmb3Igcm90YXRlZAo+IC0JCSAq IHBsYW5lcywgc28gZGlzYWJsZSBpdCB3aGVuIHJvdGF0aW9uIGlzIG5vdCAwIGFuZAo+IC0JCSAq IHVwZGF0ZSBpdCB3aGVuIHJvdGF0aW9uIGlzIHNldCBiYWNrIHRvIDAuCj4gLQkJICoKPiAtCQkg KiBGSVhNRTogVGhpcyBpcyByZWR1bmRhbnQgd2l0aCB0aGUgZmJjIHVwZGF0ZSBkb25lIGluCj4g LQkJICogdGhlIHByaW1hcnkgcGxhbmUgZW5hYmxlIGZ1bmN0aW9uIGV4Y2VwdCB0aGF0IHRoYXQK PiAtCQkgKiBvbmUgaXMgZG9uZSB0b28gbGF0ZS4gV2UgZXZlbnR1YWxseSBuZWVkIHRvIHVuaWZ5 Cj4gLQkJICogdGhpcy4KPiAtCQkgKi8KPiAtCQlpZiAoc3RhdGUtPnZpc2libGUgJiYKPiAtCQkg ICAgSU5URUxfSU5GTyhkZXYpLT5nZW4gPD0gNCAmJiAhSVNfRzRYKGRldikgJiYKPiAtCQkgICAg ZGV2X3ByaXYtPmZiYy5jcnRjID09IGludGVsX2NydGMgJiYKPiAtCQkgICAgc3RhdGUtPmJhc2Uu cm90YXRpb24gIT0gQklUKERSTV9ST1RBVEVfMCkpIHsKPiAtCQkJaW50ZWxfY3J0Yy0+YXRvbWlj LmRpc2FibGVfZmJjID0gdHJ1ZTsKPiAtCQl9Cj4gLQo+IC0JCWlmIChzdGF0ZS0+dmlzaWJsZSAm JiAhb2xkX3N0YXRlLT52aXNpYmxlKSB7Cj4gLQkJCS8qCj4gLQkJCSAqIEJEVyBzaWduYWxzIGZs aXAgZG9uZSBpbW1lZGlhdGVseSBpZiB0aGUgcGxhbmUKPiAtCQkJICogaXMgZGlzYWJsZWQsIGV2 ZW4gaWYgdGhlIHBsYW5lIGVuYWJsZSBpcyBhbHJlYWR5Cj4gLQkJCSAqIGFybWVkIHRvIG9jY3Vy IGF0IHRoZSBuZXh0IHZibGFuayA6KAo+IC0JCQkgKi8KPiAtCQkJaWYgKElTX0JST0FEV0VMTChk ZXYpKQo+IC0JCQkJaW50ZWxfY3J0Yy0+YXRvbWljLndhaXRfdmJsYW5rID0gdHJ1ZTsKPiAtCQl9 Cj4gLQo+IC0JCWludGVsX2NydGMtPmF0b21pYy5mYl9iaXRzIHw9Cj4gLQkJCUlOVEVMX0ZST05U QlVGRkVSX1BSSU1BUlkoaW50ZWxfY3J0Yy0+cGlwZSk7Cj4gLQo+IC0JCWludGVsX2NydGMtPmF0 b21pYy51cGRhdGVfZmJjID0gdHJ1ZTsKPiAtCj4gLQkJaWYgKGludGVsX3dtX25lZWRfdXBkYXRl KHBsYW5lLCAmc3RhdGUtPmJhc2UpKQo+IC0JCQlpbnRlbF9jcnRjLT5hdG9taWMudXBkYXRlX3dt ID0gdHJ1ZTsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gMDsKPiArCXJldHVybiBkcm1fcGxhbmVfaGVs cGVyX2NoZWNrX3VwZGF0ZShwbGFuZSwgY3J0YywgZmIsCj4gKwkJCQkJICAgICBzcmMsIGRlc3Qs IGNsaXAsCj4gKwkJCQkJICAgICBEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkcsCj4gKwkJCQkJ ICAgICBEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkcsCj4gKwkJCQkJICAgICBjYW5fcG9zaXRp b24sIHRydWUsCj4gKwkJCQkJICAgICAmc3RhdGUtPnZpc2libGUpOwo+ICB9Cj4gIAo+ICBzdGF0 aWMgdm9pZAo+IEBAIC0xMjYwMCw4ICsxMjY3NywxMCBAQCBpbnRlbF9jb21taXRfcHJpbWFyeV9w bGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgCQkJLyogRklYTUU6IGtpbGwgdGhpcyBm YXN0Ym9vdCBoYWNrICovCj4gIAkJCWludGVsX3VwZGF0ZV9waXBlX3NpemUoaW50ZWxfY3J0Yyk7 Cj4gIAo+IC0JCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV9wcmltYXJ5X3BsYW5lKGNydGMsIHBs YW5lLT5mYiwKPiAtCQkJCQkJICAgICAgIGNydGMtPngsIGNydGMtPnkpOwo+ICsJCWRldl9wcml2 LT5kaXNwbGF5LnVwZGF0ZV9wcmltYXJ5X3BsYW5lKGNydGMsCj4gKwkJCQkJCSAgICAgICBzdGF0 ZS0+YmFzZS5mYiwKPiArCQkJCQkJICAgICAgIHN0YXRlLT5zcmMueDEgPj4gMTYsCj4gKwkJCQkJ CSAgICAgICBzdGF0ZS0+c3JjLnkxID4+IDE2KTsKPiAgCX0KPiAgfQo+ICAKPiBAQCAtMTI2MTYs NiArMTI2OTUsMTIzIEBAIGludGVsX2Rpc2FibGVfcHJpbWFyeV9wbGFuZShzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSwKPiAgCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV9wcmltYXJ5X3BsYW5lKGNy dGMsIE5VTEwsIDAsIDApOwo+ICB9Cj4gIAo+ICsvKiBUcmFuc2l0aW9uYWwgY2hlY2tpbmcgaGVy ZSwgbW9zdGx5IGZvciBwbGFuZSB1cGRhdGVzICovCj4gK3N0YXRpYyBpbnQgaW50ZWxfYXRvbWlj X2NoZWNrX2NydGMoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICsJCQkJICAgc3RydWN0IGRybV9j cnRjX3N0YXRlICpjcnRjX3N0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAq cGlwZV9jb25maWcgPSB0b19pbnRlbF9jcnRjX3N0YXRlKGNydGNfc3RhdGUpOwo+ICsJc3RydWN0 IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwo+ICsJc3RydWN0 IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlID0gY3J0Y19zdGF0ZS0+c3RhdGU7Cj4gKwlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2Owo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiArCXVuc2lnbmVkIHBsYW5lX21hc2s7Cj4g KwlpbnQgaSwgbnBsYW5lcyA9IGRldi0+bW9kZV9jb25maWcubnVtX3RvdGFsX3BsYW5lLCBpZHg7 Cj4gKwlib29sIG1vZGVfY2hhbmdlZCA9IG5lZWRzX21vZGVzZXQoY3J0Y19zdGF0ZSk7Cj4gKwli b29sIGlzX2NydGNfZW5hYmxlZCA9IGNydGNfc3RhdGUtPmFjdGl2ZTsKPiArCWJvb2wgd2FzX2Ny dGNfZW5hYmxlZCA9IGNydGMtPnN0YXRlLT5hY3RpdmUgJiYgaW50ZWxfY3J0Yy0+YWN0aXZlOwo+ ICsKPiArCW1lbXNldCgmaW50ZWxfY3J0Yy0+YXRvbWljLCAwLCBzaXplb2YoaW50ZWxfY3J0Yy0+ YXRvbWljKSk7Cj4gKwlpbnRlbF9jcnRjLT5hdG9taWMudXBkYXRlX3dtID0gbW9kZV9jaGFuZ2Vk Owo+ICsKPiArCWlkeCA9IGRybV9jcnRjX2luZGV4KGNydGMpOwo+ICsJRFJNX0RFQlVHX0FUT01J QygiQ3J0YyAlaSB3YXMgZW5hYmxlZCAlaSBub3cgZW5hYmxlZDogJWlcbiIsCj4gKwkJCSBpZHgs IHdhc19jcnRjX2VuYWJsZWQsIGlzX2NydGNfZW5hYmxlZCk7Cj4gKwo+ICsJcGxhbmVfbWFzayA9 IGNydGNfc3RhdGUtPnBsYW5lX21hc2sgfCBjcnRjLT5zdGF0ZS0+cGxhbmVfbWFzazsKPiArCWZv ciAoaSA9IDA7IGkgPCBucGxhbmVzOyBpKyspIHsKPiArCQlzdHJ1Y3QgaW50ZWxfcGxhbmVfc3Rh dGUgKnBsYW5lX3N0YXRlLCAqb2xkX3BsYW5lX3N0YXRlOwo+ICsJCXN0cnVjdCBpbnRlbF9wbGFu ZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFuZShzdGF0ZS0+cGxhbmVzW2ldKTsKPiArCQlib29sIHR1 cm5fb2ZmLCB0dXJuX29uLCB2aXNpYmxlLCB3YXNfdmlzaWJsZTsKPiArCQlzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyICpmYjsKPiArCj4gKwkJaWYgKCFwbGFuZSkKPiArCQkJY29udGludWU7Cj4gKwo+ ICsJCXBsYW5lX3N0YXRlID0gdG9faW50ZWxfcGxhbmVfc3RhdGUoc3RhdGUtPnBsYW5lX3N0YXRl c1tpXSk7Cj4gKwkJb2xkX3BsYW5lX3N0YXRlID0gdG9faW50ZWxfcGxhbmVfc3RhdGUocGxhbmUt PmJhc2Uuc3RhdGUpOwo+ICsKPiArCQl3YXNfdmlzaWJsZSA9IG9sZF9wbGFuZV9zdGF0ZS0+dmlz aWJsZSAmJiB3YXNfY3J0Y19lbmFibGVkOwo+ICsJCXZpc2libGUgPSBwbGFuZV9zdGF0ZS0+dmlz aWJsZSAmJiBpc19jcnRjX2VuYWJsZWQ7Cj4gKwo+ICsJCXR1cm5fb2ZmID0gd2FzX3Zpc2libGUg JiYgKCF2aXNpYmxlIHx8IG1vZGVfY2hhbmdlZCk7Cj4gKwkJdHVybl9vbiA9IHZpc2libGUgJiYg KCF3YXNfdmlzaWJsZSB8fCBtb2RlX2NoYW5nZWQpOwo+ICsJCWZiID0gcGxhbmVfc3RhdGUtPmJh c2UuZmI7Cj4gKwo+ICsJCURSTV9ERUJVR19BVE9NSUMoIkNydGMgJWkgaGFzIHBsYW5lICVpIHdp dGggZmIgJWlcbiIsIGlkeCwKPiArCQkJZHJtX3BsYW5lX2luZGV4KCZwbGFuZS0+YmFzZSksIGZi ID8gZmItPmJhc2UuaWQgOiAtMSk7Cj4gKwkJRFJNX0RFQlVHX0FUT01JQygiXHR2aXNpYmxlICVp IC0+ICVpLCBvZmYgJWksIG9uICVpLCBtcyAlaVxuIiwKPiArCQkJd2FzX3Zpc2libGUsIHZpc2li bGUsIHR1cm5fb2ZmLCB0dXJuX29uLCBtb2RlX2NoYW5nZWQpOwo+ICsKPiArCQkvKiBwbGFuZSBi ZWluZyB0dXJuZWQgb2ZmIGFzIHBhcnQgb2YgbW9kZXNldCBvciBjaGFuZ2VzPyAqLwo+ICsJCWlm IChpbnRlbF93bV9uZWVkX3VwZGF0ZSgmcGxhbmUtPmJhc2UsICZwbGFuZV9zdGF0ZS0+YmFzZSkp Cj4gKwkJCWludGVsX2NydGMtPmF0b21pYy51cGRhdGVfd20gPSB0cnVlOwo+ICsKPiArCQkvKgo+ ICsJCSAqICdwcmVwYXJlJyBpcyBuZXZlciBjYWxsZWQgd2hlbiBwbGFuZSBpcyBiZWluZyBkaXNh YmxlZCwgc28KPiArCQkgKiB3ZSBuZWVkIHRvIGhhbmRsZSBmcm9udGJ1ZmZlciB0cmFja2luZyBh cyBhIHNwZWNpYWwgY2FzZQo+ICsJCSAqLwo+ICsJCWlmIChvbGRfcGxhbmVfc3RhdGUtPmJhc2Uu ZmIgJiYgIXBsYW5lX3N0YXRlLT5iYXNlLmZiKQo+ICsJCQlpbnRlbF9jcnRjLT5hdG9taWMuZGlz YWJsZWRfcGxhbmVzIHw9Cj4gKwkJCQkoMSA8PCBkcm1fcGxhbmVfaW5kZXgoJnBsYW5lLT5iYXNl KSk7Cj4gKwo+ICsJCXN3aXRjaCAocGxhbmUtPmJhc2UudHlwZSkgewo+ICsJCWNhc2UgRFJNX1BM QU5FX1RZUEVfUFJJTUFSWToKPiArCQkJaW50ZWxfY3J0Yy0+YXRvbWljLmZiX2JpdHMgfD0KPiAr CQkJCUlOVEVMX0ZST05UQlVGRkVSX1BSSU1BUlkoaW50ZWxfY3J0Yy0+cGlwZSk7Cj4gKwo+ICsJ CQlpbnRlbF9jcnRjLT5hdG9taWMud2FpdF9mb3JfZmxpcHMgPSB0cnVlOwo+ICsJCQlpbnRlbF9j cnRjLT5hdG9taWMucHJlX2Rpc2FibGVfcHJpbWFyeSA9IHR1cm5fb2ZmOwo+ICsJCQlpbnRlbF9j cnRjLT5hdG9taWMucG9zdF9lbmFibGVfcHJpbWFyeSA9IHR1cm5fb247Cj4gKwo+ICsJCQlpZiAo dHVybl9vZmYpCj4gKwkJCQlpbnRlbF9jcnRjLT5hdG9taWMuZGlzYWJsZV9mYmMgPSB0cnVlOwo+ ICsKPiArCQkJLyoKPiArCQkJICogRkJDIGRvZXMgbm90IHdvcmsgb24gc29tZSBwbGF0Zm9ybXMg Zm9yIHJvdGF0ZWQKPiArCQkJICogcGxhbmVzLCBzbyBkaXNhYmxlIGl0IHdoZW4gcm90YXRpb24g aXMgbm90IDAgYW5kCj4gKwkJCSAqIHVwZGF0ZSBpdCB3aGVuIHJvdGF0aW9uIGlzIHNldCBiYWNr IHRvIDAuCj4gKwkJCSAqCj4gKwkJCSAqIEZJWE1FOiBUaGlzIGlzIHJlZHVuZGFudCB3aXRoIHRo ZSBmYmMgdXBkYXRlIGRvbmUgaW4KPiArCQkJICogdGhlIHByaW1hcnkgcGxhbmUgZW5hYmxlIGZ1 bmN0aW9uIGV4Y2VwdCB0aGF0IHRoYXQKPiArCQkJICogb25lIGlzIGRvbmUgdG9vIGxhdGUuIFdl IGV2ZW50dWFsbHkgbmVlZCB0byB1bmlmeQo+ICsJCQkgKiB0aGlzLgo+ICsJCQkgKi8KPiArCj4g KwkJCWlmICh2aXNpYmxlICYmCj4gKwkJCSAgICBJTlRFTF9JTkZPKGRldiktPmdlbiA8PSA0ICYm ICFJU19HNFgoZGV2KSAmJgo+ICsJCQkgICAgZGV2X3ByaXYtPmZiYy5jcnRjID09IGludGVsX2Ny dGMgJiYKPiArCQkJICAgIHBsYW5lX3N0YXRlLT5iYXNlLnJvdGF0aW9uICE9IEJJVChEUk1fUk9U QVRFXzApKQo+ICsJCQkJaW50ZWxfY3J0Yy0+YXRvbWljLmRpc2FibGVfZmJjID0gdHJ1ZTsKPiAr Cj4gKwkJCS8qCj4gKwkJCSAqIEJEVyBzaWduYWxzIGZsaXAgZG9uZSBpbW1lZGlhdGVseSBpZiB0 aGUgcGxhbmUKPiArCQkJICogaXMgZGlzYWJsZWQsIGV2ZW4gaWYgdGhlIHBsYW5lIGVuYWJsZSBp cyBhbHJlYWR5Cj4gKwkJCSAqIGFybWVkIHRvIG9jY3VyIGF0IHRoZSBuZXh0IHZibGFuayA6KAo+ ICsJCQkgKi8KPiArCQkJaWYgKHR1cm5fb24gJiYgSVNfQlJPQURXRUxMKGRldikpCj4gKwkJCQlp bnRlbF9jcnRjLT5hdG9taWMud2FpdF92YmxhbmsgPSB0cnVlOwo+ICsKPiArCQkJaW50ZWxfY3J0 Yy0+YXRvbWljLnVwZGF0ZV9mYmMgPSB0cnVlOwo+ICsJCQlicmVhazsKPiArCQljYXNlIERSTV9Q TEFORV9UWVBFX0NVUlNPUjoKPiArCQkJaW50ZWxfY3J0Yy0+YXRvbWljLmZiX2JpdHMgfD0KPiAr CQkJCUlOVEVMX0ZST05UQlVGRkVSX0NVUlNPUihpbnRlbF9jcnRjLT5waXBlKTsKPiArCQkJYnJl YWs7Cj4gKwkJY2FzZSBEUk1fUExBTkVfVFlQRV9PVkVSTEFZOgo+ICsJCQlpbnRlbF9jcnRjLT5h dG9taWMuZmJfYml0cyB8PQo+ICsJCQkJSU5URUxfRlJPTlRCVUZGRVJfU1BSSVRFKGludGVsX2Ny dGMtPnBpcGUpOwo+ICsKPiArCQkJaWYgKHR1cm5fb2ZmKSB7Cj4gKwkJCQlpbnRlbF9jcnRjLT5h dG9taWMud2FpdF92YmxhbmsgPSB0cnVlOwo+ICsJCQkJaW50ZWxfY3J0Yy0+YXRvbWljLnVwZGF0 ZV9zcHJpdGVfd2F0ZXJtYXJrcyB8PQo+ICsJCQkJCSgxIDw8IGRybV9wbGFuZV9pbmRleCgmcGxh bmUtPmJhc2UpKTsKPiArCQkJfQo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwl9Cj4gKwlyZXR1cm4g MDsKPiArfQo+ICsKCklzIHRoZXJlIGEgc3BlY2lmaWMgcmVhc29uIHdoeSB0aGlzIG5lZWRzIHRv IGJlIGluIGNoZWNrX2NydGMgdnMKY2hlY2tfcGxhbmU/IElNTywgaXQgd291bGQgbWFrZSByZXZp ZXcgZWFzaWVyIGlmIHRoaXMgbW92ZSB3YXMgYQpzZXBhcmF0ZSBwYXRjaC4KCj4gIHN0YXRpYyB2 b2lkIGludGVsX2JlZ2luX2NydGNfY29tbWl0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiAgewo+ ICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKPiBAQCAtMTI2NjQsMTAgKzEy ODYwLDEzIEBAIHN0YXRpYyB2b2lkIGludGVsX2JlZ2luX2NydGNfY29tbWl0KHN0cnVjdCBkcm1f Y3J0YyAqY3J0YykKPiAgCWludGVsX3J1bnRpbWVfcG1fZ2V0KGRldl9wcml2KTsKPiAgCj4gIAkv KiBQZXJmb3JtIHZibGFuayBldmFzaW9uIGFyb3VuZCBjb21taXQgb3BlcmF0aW9uICovCj4gLQlp ZiAoaW50ZWxfY3J0Yy0+YWN0aXZlKQo+ICsJaWYgKGludGVsX2NydGMtPmFjdGl2ZSAmJiAhbmVl ZHNfbW9kZXNldChjcnRjLT5zdGF0ZSkgJiYKPiArCSAgICAhZGV2X3ByaXYtPnBvd2VyX2RvbWFp bnMuaW5pdF9wb3dlcl9vbikKPiAgCQlpbnRlbF9jcnRjLT5hdG9taWMuZXZhZGUgPQo+ICAJCQlp bnRlbF9waXBlX3VwZGF0ZV9zdGFydChpbnRlbF9jcnRjLAo+ICAJCQkJCQkmaW50ZWxfY3J0Yy0+ YXRvbWljLnN0YXJ0X3ZibF9jb3VudCk7Cj4gKwllbHNlCj4gKwkJaW50ZWxfY3J0Yy0+YXRvbWlj LmV2YWRlID0gZmFsc2U7Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lkIGludGVsX2ZpbmlzaF9jcnRj X2NvbW1pdChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gQEAgLTEyNzAzLDYgKzEyOTAyLDggQEAg c3RhdGljIHZvaWQgaW50ZWxfZmluaXNoX2NydGNfY29tbWl0KHN0cnVjdCBkcm1fY3J0YyAqY3J0 YykKPiAgCQkJCQkJICAgICAgIGZhbHNlLCBmYWxzZSk7Cj4gIAo+ICAJbWVtc2V0KCZpbnRlbF9j cnRjLT5hdG9taWMsIDAsIHNpemVvZihpbnRlbF9jcnRjLT5hdG9taWMpKTsKPiArCWNydGMtPnN0 YXRlLT5tb2RlX2NoYW5nZWQgPSBmYWxzZTsKPiArCWNydGMtPnN0YXRlLT5hY3RpdmVfY2hhbmdl ZCA9IGZhbHNlOwo+ICB9Cj4gIAo+ICAvKioKPiBAQCAtMTI4MTIsMTMgKzEzMDEzLDkgQEAgaW50 ZWxfY2hlY2tfY3Vyc29yX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAJc3RydWN0 IGRybV9yZWN0ICpzcmMgPSAmc3RhdGUtPnNyYzsKPiAgCWNvbnN0IHN0cnVjdCBkcm1fcmVjdCAq Y2xpcCA9ICZzdGF0ZS0+Y2xpcDsKPiAgCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmog PSBpbnRlbF9mYl9vYmooZmIpOwo+IC0Jc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGM7Cj4g IAl1bnNpZ25lZCBzdHJpZGU7Cj4gIAlpbnQgcmV0Owo+ICAKPiAtCWNydGMgPSBjcnRjID8gY3J0 YyA6IHBsYW5lLT5jcnRjOwo+IC0JaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7Cj4g LQo+ICAJcmV0ID0gZHJtX3BsYW5lX2hlbHBlcl9jaGVja191cGRhdGUocGxhbmUsIGNydGMsIGZi LAo+ICAJCQkJCSAgICBzcmMsIGRlc3QsIGNsaXAsCj4gIAkJCQkJICAgIERSTV9QTEFORV9IRUxQ RVJfTk9fU0NBTElORywKPiBAQCAtMTI4MzAsNyArMTMwMjcsNyBAQCBpbnRlbF9jaGVja19jdXJz b3JfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gIAo+ICAJLyogaWYgd2Ugd2FudCB0 byB0dXJuIG9mZiB0aGUgY3Vyc29yIGlnbm9yZSB3aWR0aCBhbmQgaGVpZ2h0ICovCj4gIAlpZiAo IW9iaikKPiAtCQlnb3RvIGZpbmlzaDsKPiArCQlyZXR1cm4gMDsKPiAgCj4gIAkvKiBDaGVjayBm b3Igd2hpY2ggY3Vyc29yIHR5cGVzIHdlIHN1cHBvcnQgKi8KPiAgCWlmICghY3Vyc29yX3NpemVf b2soZGV2LCBzdGF0ZS0+YmFzZS5jcnRjX3csIHN0YXRlLT5iYXNlLmNydGNfaCkpIHsKPiBAQCAt MTI4NDcsMTkgKzEzMDQ0LDEwIEBAIGludGVsX2NoZWNrX2N1cnNvcl9wbGFuZShzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZSwKPiAgCj4gIAlpZiAoZmItPm1vZGlmaWVyWzBdICE9IERSTV9GT1JNQVRf TU9EX05PTkUpIHsKPiAgCQlEUk1fREVCVUdfS01TKCJjdXJzb3IgY2Fubm90IGJlIHRpbGVkXG4i KTsKPiAtCQlyZXQgPSAtRUlOVkFMOwo+IC0JfQo+IC0KPiAtZmluaXNoOgo+IC0JaWYgKGludGVs X2NydGMtPmFjdGl2ZSkgewo+IC0JCWlmIChwbGFuZS0+c3RhdGUtPmNydGNfdyAhPSBzdGF0ZS0+ YmFzZS5jcnRjX3cpCj4gLQkJCWludGVsX2NydGMtPmF0b21pYy51cGRhdGVfd20gPSB0cnVlOwo+ IC0KPiAtCQlpbnRlbF9jcnRjLT5hdG9taWMuZmJfYml0cyB8PQo+IC0JCQlJTlRFTF9GUk9OVEJV RkZFUl9DVVJTT1IoaW50ZWxfY3J0Yy0+cGlwZSk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gIAl9 Cj4gIAo+IC0JcmV0dXJuIHJldDsKPiArCXJldHVybiAwOwo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9p ZAo+IEBAIC0xNDA4OSw2ICsxNDI3Nyw3IEBAIHN0YXRpYyB2b2lkIGludGVsX3Nhbml0aXplX2Ny dGMoc3RydWN0IGludGVsX2NydGMgKmNydGMpCj4gIAo+ICAJCVdBUk5fT04oY3J0Yy0+YWN0aXZl KTsKPiAgCQljcnRjLT5iYXNlLnN0YXRlLT5lbmFibGUgPSBmYWxzZTsKPiArCQljcnRjLT5iYXNl LnN0YXRlLT5hY3RpdmUgPSBmYWxzZTsKPiAgCQljcnRjLT5iYXNlLmVuYWJsZWQgPSBmYWxzZTsK PiAgCX0KPiAgCj4gQEAgLTE0MTE3LDYgKzE0MzA2LDcgQEAgc3RhdGljIHZvaWQgaW50ZWxfc2Fu aXRpemVfY3J0YyhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykKPiAgCQkJICAgICAgY3J0Yy0+YWN0 aXZlID8gImVuYWJsZWQiIDogImRpc2FibGVkIik7Cj4gIAo+ICAJCWNydGMtPmJhc2Uuc3RhdGUt PmVuYWJsZSA9IGNydGMtPmFjdGl2ZTsKPiArCQljcnRjLT5iYXNlLnN0YXRlLT5hY3RpdmUgPSBj cnRjLT5hY3RpdmU7Cj4gIAkJY3J0Yy0+YmFzZS5lbmFibGVkID0gY3J0Yy0+YWN0aXZlOwo+ICAK PiAgCQkvKiBCZWNhdXNlIHdlIG9ubHkgZXN0YWJsaXNoIHRoZSBjb25uZWN0b3IgLT4gZW5jb2Rl ciAtPgo+IEBAIC0xNDI1NSw2ICsxNDQ0NSw3IEBAIHN0YXRpYyB2b2lkIGludGVsX21vZGVzZXRf cmVhZG91dF9od19zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAJCQkJCQkJCSBjcnRj LT5jb25maWcpOwo+ICAKPiAgCQljcnRjLT5iYXNlLnN0YXRlLT5lbmFibGUgPSBjcnRjLT5hY3Rp dmU7Cj4gKwkJY3J0Yy0+YmFzZS5zdGF0ZS0+YWN0aXZlID0gY3J0Yy0+YWN0aXZlOwo+ICAJCWNy dGMtPmJhc2UuZW5hYmxlZCA9IGNydGMtPmFjdGl2ZTsKPiAgCgpTaG91bGQgdGhpcyBiZSBhIHNl cGFyYXRlIGJ1ZyBmaXg/CgoKQW5kZXIKCj4gIAkJcGxhbmVfc3RhdGUgPSB0b19pbnRlbF9wbGFu ZV9zdGF0ZShwcmltYXJ5LT5zdGF0ZSk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX3Nwcml0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc3ByaXRlLmMK PiBpbmRleCA3NDE5ZTA0YjExM2YuLjVhMjc3NzU3YWMyZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9zcHJpdGUuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3Nwcml0ZS5jCj4gQEAgLTgxMSwxMiArODExLDggQEAgaW50ZWxfY2hlY2tfc3ByaXRl X3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAJaW50IG1heF9zY2FsZSwgbWluX3Nj YWxlOwo+ICAJaW50IHBpeGVsX3NpemU7Cj4gIAo+IC0JaW50ZWxfY3J0YyA9IGludGVsX2NydGMg PyBpbnRlbF9jcnRjIDogdG9faW50ZWxfY3J0YyhwbGFuZS0+Y3J0Yyk7Cj4gLQo+IC0JaWYgKCFm Yikgewo+IC0JCXN0YXRlLT52aXNpYmxlID0gZmFsc2U7Cj4gLQkJZ290byBmaW5pc2g7Cj4gLQl9 Cj4gKwlpZiAoIWZiKQo+ICsJCXJldHVybiAwOwo+ICAKPiAgCS8qIERvbid0IG1vZGlmeSBhbm90 aGVyIHBpcGUncyBwbGFuZSAqLwo+ICAJaWYgKGludGVsX3BsYW5lLT5waXBlICE9IGludGVsX2Ny dGMtPnBpcGUpIHsKPiBAQCAtODQ3LDcgKzg0Myw3IEBAIGludGVsX2NoZWNrX3Nwcml0ZV9wbGFu ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgCXZzY2FsZSA9IGRybV9yZWN0X2NhbGNfdnNj YWxlX3JlbGF4ZWQoc3JjLCBkc3QsIG1pbl9zY2FsZSwgbWF4X3NjYWxlKTsKPiAgCUJVR19PTih2 c2NhbGUgPCAwKTsKPiAgCj4gLQlzdGF0ZS0+dmlzaWJsZSA9ICBkcm1fcmVjdF9jbGlwX3NjYWxl ZChzcmMsIGRzdCwgY2xpcCwgaHNjYWxlLCB2c2NhbGUpOwo+ICsJc3RhdGUtPnZpc2libGUgPSBk cm1fcmVjdF9jbGlwX3NjYWxlZChzcmMsIGRzdCwgY2xpcCwgaHNjYWxlLCB2c2NhbGUpOwo+ICAK PiAgCWNydGNfeCA9IGRzdC0+eDE7Cj4gIAljcnRjX3kgPSBkc3QtPnkxOwo+IEBAIC05NTIsMjkg Kzk0OCw2IEBAIGludGVsX2NoZWNrX3Nwcml0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZSwKPiAgCWRzdC0+eTEgPSBjcnRjX3k7Cj4gIAlkc3QtPnkyID0gY3J0Y195ICsgY3J0Y19oOwo+ ICAKPiAtZmluaXNoOgo+IC0JLyoKPiAtCSAqIElmIHRoZSBzcHJpdGUgaXMgY29tcGxldGVseSBj b3ZlcmluZyB0aGUgcHJpbWFyeSBwbGFuZSwKPiAtCSAqIHdlIGNhbiBkaXNhYmxlIHRoZSBwcmlt YXJ5IGFuZCBzYXZlIHBvd2VyLgo+IC0JICovCj4gLQlpZiAoaW50ZWxfY3J0Yy0+YWN0aXZlKSB7 Cj4gLQkJaW50ZWxfY3J0Yy0+YXRvbWljLmZiX2JpdHMgfD0KPiAtCQkJSU5URUxfRlJPTlRCVUZG RVJfU1BSSVRFKGludGVsX2NydGMtPnBpcGUpOwo+IC0KPiAtCQlpZiAoaW50ZWxfd21fbmVlZF91 cGRhdGUocGxhbmUsICZzdGF0ZS0+YmFzZSkpCj4gLQkJCWludGVsX2NydGMtPmF0b21pYy51cGRh dGVfd20gPSB0cnVlOwo+IC0KPiAtCQlpZiAoIXN0YXRlLT52aXNpYmxlKSB7Cj4gLQkJCS8qCj4g LQkJCSAqIEF2b2lkIHVuZGVycnVucyB3aGVuIGRpc2FibGluZyB0aGUgc3ByaXRlLgo+IC0JCQkg KiBGSVhNRSByZW1vdmUgb25jZSB3YXRlcm1hcmsgdXBkYXRlcyBhcmUgZG9uZSBwcm9wZXJseS4K PiAtCQkJICovCj4gLQkJCWludGVsX2NydGMtPmF0b21pYy53YWl0X3ZibGFuayA9IHRydWU7Cj4g LQkJCWludGVsX2NydGMtPmF0b21pYy51cGRhdGVfc3ByaXRlX3dhdGVybWFya3MgfD0KPiAtCQkJ CSgxIDw8IGRybV9wbGFuZV9pbmRleChwbGFuZSkpOwo+IC0JCX0KPiAtCX0KPiAtCj4gIAlyZXR1 cm4gMDsKPiAgfQo+ICAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVs LWdmeAo=