From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v2 08/12] drm/fb-helper: Move out commit code Date: Tue, 16 Apr 2019 10:38:36 +0200 Message-ID: <20190416083836.GB13337@phenom.ffwll.local> References: <20190407165243.54043-1-noralf@tronnes.org> <20190407165243.54043-9-noralf@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20190407165243.54043-9-noralf@tronnes.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Noralf =?iso-8859-1?Q?Tr=F8nnes?= Cc: daniel.vetter@ffwll.ch, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gU3VuLCBBcHIgMDcsIDIwMTkgYXQgMDY6NTI6MzlQTSArMDIwMCwgTm9yYWxmIFRyw7hubmVz IHdyb3RlOgo+IE1vdmUgdGhlIG1vZGVzZXQgY29tbWl0IGNvZGUgdG8gZHJtX2NsaWVudF9tb2Rl c2V0Lgo+IE5vIGNoYW5nZXMgZXhjZXB0IGV4cG9ydGluZyBBUEkuCj4gCj4gdjI6IE1vdmUgdG8g ZHJtX2NsaWVudF9tb2Rlc2V0LmMgaW5zdGVhZCBvZiBkcm1fY2xpZW50LmMKPiAKPiBTaWduZWQt b2ZmLWJ5OiBOb3JhbGYgVHLDuG5uZXMgPG5vcmFsZkB0cm9ubmVzLm9yZz4KPiAtLS0KPiAgZHJp dmVycy9ncHUvZHJtL2RybV9jbGllbnRfbW9kZXNldC5jIHwgMjg3ICsrKysrKysrKysrKysrKysr KysrKysrKysrKwoKUGxlYXNlIGFkZCBhIG5ldyBjaGFwdGVyIGluIERvY3VtZW50YXRpb24vZ3B1 IHRvIHB1bGwgaW4gYWxsIHRoZSBuaWNlIG5ldwprZXJuZWxkb2MgeW91J3ZlIHR5cGVkLgoKPiAg ZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYyAgICAgIHwgMjgyIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCj4gIGluY2x1ZGUvZHJtL2RybV9jbGllbnQuaCAgICAgICAgICAgICB8ICAg NCArCj4gIDMgZmlsZXMgY2hhbmdlZCwgMjkxIGluc2VydGlvbnMoKyksIDI4MiBkZWxldGlvbnMo LSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9jbGllbnRfbW9kZXNldC5j IGIvZHJpdmVycy9ncHUvZHJtL2RybV9jbGllbnRfbW9kZXNldC5jCj4gaW5kZXggYmIzNDIyMmM5 ZGI4Li45NGI1MmY5N2MwNmIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9jbGll bnRfbW9kZXNldC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jbGllbnRfbW9kZXNldC5j Cj4gQEAgLTExLDkgKzExLDE0IEBACj4gICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgo+ICAjaW5j bHVkZSA8bGludXgvc2xhYi5oPgo+ICAKPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+Cj4g ICNpbmNsdWRlIDxkcm0vZHJtX2NsaWVudC5oPgo+ICAjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+ Cj4gICNpbmNsdWRlIDxkcm0vZHJtX2RldmljZS5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9kcnYu aD4KPiArCj4gKyNpbmNsdWRlICJkcm1fY3J0Y19pbnRlcm5hbC5oIgo+ICsjaW5jbHVkZSAiZHJt X2ludGVybmFsLmgiCj4gIAo+ICAvKiBVc2VkIGJ5IGRybV9jbGllbnQgYW5kIGRybV9mYl9oZWxw ZXIgKi8KPiAgaW50IGRybV9jbGllbnRfbW9kZXNldF9jcmVhdGUoc3RydWN0IGRybV9jbGllbnRf ZGV2ICpjbGllbnQpCj4gQEAgLTEwMCwzICsxMDUsMjg1IEBAIHN0cnVjdCBkcm1fbW9kZV9zZXQg KmRybV9jbGllbnRfZmluZF9tb2Rlc2V0KHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50LCBz dHJ1Cj4gIH0KPiAgLyogVE9ETzogUmVtb3ZlIGV4cG9ydCB3aGVuIG1vZGVzZXQgY29kZSBoYXMg YmVlbiBtb3ZlZCBvdmVyICovCj4gIEVYUE9SVF9TWU1CT0woZHJtX2NsaWVudF9maW5kX21vZGVz ZXQpOwo+ICsKPiArLyoqCj4gKyAqIGRybV9jbGllbnRfcGFuZWxfcm90YXRpb24oKSAtIENoZWNr IHBhbmVsIG9yaWVudGF0aW9uCj4gKyAqIEBtb2Rlc2V0OiBEUk0gbW9kZXNldAo+ICsgKiBAcm90 YXRpb246IFJldHVybmVkIHJvdGF0aW9uIHZhbHVlCj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24g Y2hlY2tzIGlmIHRoZSBwcmltYXJ5IHBsYW5lIGluIEBtb2Rlc2V0IGNhbiBodyByb3RhdGUgdG8g bWF0Y2gKPiArICogdGhlIHBhbmVsIG9yaWVudGF0aW9uIG9uIGl0cyBjb25uZWN0b3IuCj4gKyAq Cj4gKyAqIE5vdGU6IEN1cnJlbnRseSBvbmx5IDAgYW5kIDE4MCBkZWdyZWVzIGFyZSBzdXBwb3J0 ZWQuCj4gKyAqCj4gKyAqIFJldHVybjoKPiArICogVHJ1ZSBpZiB0aGUgcGxhbmUgY2FuIGRvIHRo ZSByb3RhdGlvbiwgZmFsc2Ugb3RoZXJ3aXNlLgo+ICsgKi8KPiArYm9vbCBkcm1fY2xpZW50X3Bh bmVsX3JvdGF0aW9uKHN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVzZXQsIHVuc2lnbmVkIGludCAq cm90YXRpb24pCj4gK3sKPiArCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSBtb2Rl c2V0LT5jb25uZWN0b3JzWzBdOwo+ICsJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUgPSBtb2Rlc2V0 LT5jcnRjLT5wcmltYXJ5Owo+ICsJdTY0IHZhbGlkX21hc2sgPSAwOwo+ICsJdW5zaWduZWQgaW50 IGk7Cj4gKwo+ICsJaWYgKCFtb2Rlc2V0LT5udW1fY29ubmVjdG9ycykKPiArCQlyZXR1cm4gZmFs c2U7Cj4gKwo+ICsJc3dpdGNoIChjb25uZWN0b3ItPmRpc3BsYXlfaW5mby5wYW5lbF9vcmllbnRh dGlvbikgewo+ICsJY2FzZSBEUk1fTU9ERV9QQU5FTF9PUklFTlRBVElPTl9CT1RUT01fVVA6Cj4g KwkJKnJvdGF0aW9uID0gRFJNX01PREVfUk9UQVRFXzE4MDsKPiArCQlicmVhazsKPiArCWNhc2Ug RFJNX01PREVfUEFORUxfT1JJRU5UQVRJT05fTEVGVF9VUDoKPiArCQkqcm90YXRpb24gPSBEUk1f TU9ERV9ST1RBVEVfOTA7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIERSTV9NT0RFX1BBTkVMX09SSUVO VEFUSU9OX1JJR0hUX1VQOgo+ICsJCSpyb3RhdGlvbiA9IERSTV9NT0RFX1JPVEFURV8yNzA7Cj4g KwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCSpyb3RhdGlvbiA9IERSTV9NT0RFX1JPVEFURV8w Owo+ICsJfQo+ICsKPiArCS8qCj4gKwkgKiBUT0RPOiBzdXBwb3J0IDkwIC8gMjcwIGRlZ3JlZSBo YXJkd2FyZSByb3RhdGlvbiwKPiArCSAqIGRlcGVuZGluZyBvbiB0aGUgaGFyZHdhcmUgdGhpcyBt YXkgcmVxdWlyZSB0aGUgZnJhbWVidWZmZXIKPiArCSAqIHRvIGJlIGluIGEgc3BlY2lmaWMgdGls aW5nIGZvcm1hdC4KPiArCSAqLwo+ICsJaWYgKCpyb3RhdGlvbiAhPSBEUk1fTU9ERV9ST1RBVEVf MTgwIHx8ICFwbGFuZS0+cm90YXRpb25fcHJvcGVydHkpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsK PiArCWZvciAoaSA9IDA7IGkgPCBwbGFuZS0+cm90YXRpb25fcHJvcGVydHktPm51bV92YWx1ZXM7 IGkrKykKPiArCQl2YWxpZF9tYXNrIHw9ICgxVUxMIDw8IHBsYW5lLT5yb3RhdGlvbl9wcm9wZXJ0 eS0+dmFsdWVzW2ldKTsKPiArCj4gKwlpZiAoISgqcm90YXRpb24gJiB2YWxpZF9tYXNrKSkKPiAr CQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiArCj4gK3N0YXRpYyBp bnQgZHJtX2NsaWVudF9tb2Rlc2V0X2NvbW1pdF9hdG9taWMoc3RydWN0IGRybV9jbGllbnRfZGV2 ICpjbGllbnQsIGJvb2wgYWN0aXZlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g Y2xpZW50LT5kZXY7Cj4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZTsKPiAr CXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOwo+ICsJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0 YXRlOwo+ICsJc3RydWN0IGRybV9tb2Rlc2V0X2FjcXVpcmVfY3R4IGN0eDsKPiArCXN0cnVjdCBk cm1fbW9kZV9zZXQgKm1vZGVfc2V0Owo+ICsJaW50IHJldDsKPiArCj4gKwlkcm1fbW9kZXNldF9h Y3F1aXJlX2luaXQoJmN0eCwgMCk7Cj4gKwo+ICsJc3RhdGUgPSBkcm1fYXRvbWljX3N0YXRlX2Fs bG9jKGRldik7Cj4gKwlpZiAoIXN0YXRlKSB7Cj4gKwkJcmV0ID0gLUVOT01FTTsKPiArCQlnb3Rv IG91dF9jdHg7Cj4gKwl9Cj4gKwo+ICsJc3RhdGUtPmFjcXVpcmVfY3R4ID0gJmN0eDsKPiArcmV0 cnk6Cj4gKwlkcm1fZm9yX2VhY2hfcGxhbmUocGxhbmUsIGRldikgewo+ICsJCXBsYW5lX3N0YXRl ID0gZHJtX2F0b21pY19nZXRfcGxhbmVfc3RhdGUoc3RhdGUsIHBsYW5lKTsKPiArCQlpZiAoSVNf RVJSKHBsYW5lX3N0YXRlKSkgewo+ICsJCQlyZXQgPSBQVFJfRVJSKHBsYW5lX3N0YXRlKTsKPiAr CQkJZ290byBvdXRfc3RhdGU7Cj4gKwkJfQo+ICsKPiArCQlwbGFuZV9zdGF0ZS0+cm90YXRpb24g PSBEUk1fTU9ERV9ST1RBVEVfMDsKPiArCj4gKwkJLyogZGlzYWJsZSBub24tcHJpbWFyeTogKi8K PiArCQlpZiAocGxhbmUtPnR5cGUgPT0gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSkKPiArCQkJY29u dGludWU7Cj4gKwo+ICsJCXJldCA9IF9fZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9wbGFuZShw bGFuZSwgcGxhbmVfc3RhdGUpOwo+ICsJCWlmIChyZXQgIT0gMCkKPiArCQkJZ290byBvdXRfc3Rh dGU7Cj4gKwl9Cj4gKwo+ICsJZHJtX2NsaWVudF9mb3JfZWFjaF9tb2Rlc2V0KG1vZGVfc2V0LCBj bGllbnQpIHsKPiArCQlzdHJ1Y3QgZHJtX3BsYW5lICpwcmltYXJ5ID0gbW9kZV9zZXQtPmNydGMt PnByaW1hcnk7Cj4gKwkJdW5zaWduZWQgaW50IHJvdGF0aW9uOwo+ICsKPiArCQlpZiAoZHJtX2Ns aWVudF9wYW5lbF9yb3RhdGlvbihtb2RlX3NldCwgJnJvdGF0aW9uKSkgewo+ICsJCQkvKiBDYW5u b3QgZmFpbCBhcyB3ZSd2ZSBhbHJlYWR5IGdvdHRlbiB0aGUgcGxhbmUgc3RhdGUgYWJvdmUgKi8K PiArCQkJcGxhbmVfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9uZXdfcGxhbmVfc3RhdGUoc3RhdGUs IHByaW1hcnkpOwo+ICsJCQlwbGFuZV9zdGF0ZS0+cm90YXRpb24gPSByb3RhdGlvbjsKPiArCQl9 Cj4gKwo+ICsJCXJldCA9IF9fZHJtX2F0b21pY19oZWxwZXJfc2V0X2NvbmZpZyhtb2RlX3NldCwg c3RhdGUpOwo+ICsJCWlmIChyZXQgIT0gMCkKPiArCQkJZ290byBvdXRfc3RhdGU7Cj4gKwo+ICsJ CS8qCj4gKwkJICogX19kcm1fYXRvbWljX2hlbHBlcl9zZXRfY29uZmlnKCkgc2V0cyBhY3RpdmUg d2hlbiBhCj4gKwkJICogbW9kZSBpcyBzZXQsIHVuY29uZGl0aW9uYWxseSBjbGVhciBpdCBpZiB3 ZSBmb3JjZSBEUE1TIG9mZgo+ICsJCSAqLwo+ICsJCWlmICghYWN0aXZlKSB7Cj4gKwkJCXN0cnVj dCBkcm1fY3J0YyAqY3J0YyA9IG1vZGVfc2V0LT5jcnRjOwo+ICsJCQlzdHJ1Y3QgZHJtX2NydGNf c3RhdGUgKmNydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9uZXdfY3J0Y19zdGF0ZShzdGF0ZSwg Y3J0Yyk7Cj4gKwo+ICsJCQljcnRjX3N0YXRlLT5hY3RpdmUgPSBmYWxzZTsKPiArCQl9Cj4gKwl9 Cj4gKwo+ICsJcmV0ID0gZHJtX2F0b21pY19jb21taXQoc3RhdGUpOwo+ICsKPiArb3V0X3N0YXRl Ogo+ICsJaWYgKHJldCA9PSAtRURFQURMSykKPiArCQlnb3RvIGJhY2tvZmY7Cj4gKwo+ICsJZHJt X2F0b21pY19zdGF0ZV9wdXQoc3RhdGUpOwo+ICtvdXRfY3R4Ogo+ICsJZHJtX21vZGVzZXRfZHJv cF9sb2NrcygmY3R4KTsKPiArCWRybV9tb2Rlc2V0X2FjcXVpcmVfZmluaSgmY3R4KTsKPiArCj4g KwlyZXR1cm4gcmV0Owo+ICsKPiArYmFja29mZjoKPiArCWRybV9hdG9taWNfc3RhdGVfY2xlYXIo c3RhdGUpOwo+ICsJZHJtX21vZGVzZXRfYmFja29mZigmY3R4KTsKPiArCj4gKwlnb3RvIHJldHJ5 Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRybV9jbGllbnRfbW9kZXNldF9jb21taXRfbGVnYWN5 KHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2ID0gY2xpZW50LT5kZXY7Cj4gKwlzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2RlX3NldDsK PiArCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOwo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJZHJt X21vZGVzZXRfbG9ja19hbGwoZGV2KTsKPiArCWRybV9mb3JfZWFjaF9wbGFuZShwbGFuZSwgZGV2 KSB7Cj4gKwkJaWYgKHBsYW5lLT50eXBlICE9IERSTV9QTEFORV9UWVBFX1BSSU1BUlkpCj4gKwkJ CWRybV9wbGFuZV9mb3JjZV9kaXNhYmxlKHBsYW5lKTsKPiArCj4gKwkJaWYgKHBsYW5lLT5yb3Rh dGlvbl9wcm9wZXJ0eSkKPiArCQkJZHJtX21vZGVfcGxhbmVfc2V0X29ial9wcm9wKHBsYW5lLAo+ ICsJCQkJCQkgICAgcGxhbmUtPnJvdGF0aW9uX3Byb3BlcnR5LAo+ICsJCQkJCQkgICAgRFJNX01P REVfUk9UQVRFXzApOwo+ICsJfQo+ICsKPiArCWRybV9jbGllbnRfZm9yX2VhY2hfbW9kZXNldCht b2RlX3NldCwgY2xpZW50KSB7Cj4gKwkJc3RydWN0IGRybV9jcnRjICpjcnRjID0gbW9kZV9zZXQt PmNydGM7Cj4gKwo+ICsJCWlmIChjcnRjLT5mdW5jcy0+Y3Vyc29yX3NldDIpIHsKPiArCQkJcmV0 ID0gY3J0Yy0+ZnVuY3MtPmN1cnNvcl9zZXQyKGNydGMsIE5VTEwsIDAsIDAsIDAsIDAsIDApOwo+ ICsJCQlpZiAocmV0KQo+ICsJCQkJZ290byBvdXQ7Cj4gKwkJfSBlbHNlIGlmIChjcnRjLT5mdW5j cy0+Y3Vyc29yX3NldCkgewo+ICsJCQlyZXQgPSBjcnRjLT5mdW5jcy0+Y3Vyc29yX3NldChjcnRj LCBOVUxMLCAwLCAwLCAwKTsKPiArCQkJaWYgKHJldCkKPiArCQkJCWdvdG8gb3V0Owo+ICsJCX0K PiArCj4gKwkJcmV0ID0gZHJtX21vZGVfc2V0X2NvbmZpZ19pbnRlcm5hbChtb2RlX3NldCk7Cj4g KwkJaWYgKHJldCkKPiArCQkJZ290byBvdXQ7Cj4gKwl9Cj4gK291dDoKPiArCWRybV9tb2Rlc2V0 X3VubG9ja19hbGwoZGV2KTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICsvKioKPiAr ICogZHJtX2NsaWVudF9tb2Rlc2V0X2NvbW1pdF9mb3JjZSgpIC0gRm9yY2UgY29tbWl0IENSVEMg Y29uZmlndXJhdGlvbgo+ICsgKiBAY2xpZW50OiBEUk0gY2xpZW50Cj4gKyAqCj4gKyAqIENvbW1p dCBtb2Rlc2V0IGNvbmZpZ3VyYXRpb24gdG8gY3J0Y3Mgd2l0aG91dCBjaGVja2luZyBpZiB0aGVy ZSBpcyBhIERSTSBtYXN0ZXIuCj4gKyAqCj4gKyAqIFJldHVybnM6Cj4gKyAqIFplcm8gb24gc3Vj Y2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gKyAqLwo+ICtpbnQgZHJt X2NsaWVudF9tb2Rlc2V0X2NvbW1pdF9mb3JjZShzdHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVu dCkKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNsaWVudC0+ZGV2Owo+ICsJaW50 IHJldDsKPiArCj4gKwltdXRleF9sb2NrKCZjbGllbnQtPm1vZGVzZXRfbXV0ZXgpOwo+ICsJaWYg KGRybV9kcnZfdXNlc19hdG9taWNfbW9kZXNldChkZXYpKQo+ICsJCXJldCA9IGRybV9jbGllbnRf bW9kZXNldF9jb21taXRfYXRvbWljKGNsaWVudCwgdHJ1ZSk7Cj4gKwllbHNlCj4gKwkJcmV0ID0g ZHJtX2NsaWVudF9tb2Rlc2V0X2NvbW1pdF9sZWdhY3koY2xpZW50KTsKPiArCW11dGV4X3VubG9j aygmY2xpZW50LT5tb2Rlc2V0X211dGV4KTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gK0VY UE9SVF9TWU1CT0woZHJtX2NsaWVudF9tb2Rlc2V0X2NvbW1pdF9mb3JjZSk7Cj4gKwo+ICsvKioK PiArICogZHJtX2NsaWVudF9tb2Rlc2V0X2NvbW1pdCgpIC0gQ29tbWl0IENSVEMgY29uZmlndXJh dGlvbgo+ICsgKiBAY2xpZW50OiBEUk0gY2xpZW50Cj4gKyAqCj4gKyAqIENvbW1pdCBtb2Rlc2V0 IGNvbmZpZ3VyYXRpb24gdG8gY3J0Y3MuCj4gKyAqCj4gKyAqIFJldHVybnM6Cj4gKyAqIFplcm8g b24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gKyAqLwo+ICtp bnQgZHJtX2NsaWVudF9tb2Rlc2V0X2NvbW1pdChzdHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVu dCkKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNsaWVudC0+ZGV2Owo+ICsJaW50 IHJldDsKPiArCj4gKwlpZiAoIWRybV9tYXN0ZXJfaW50ZXJuYWxfYWNxdWlyZShkZXYpKQo+ICsJ CXJldHVybiAtRUJVU1k7Cj4gKwo+ICsJcmV0ID0gZHJtX2NsaWVudF9tb2Rlc2V0X2NvbW1pdF9m b3JjZShjbGllbnQpOwo+ICsKPiArCWRybV9tYXN0ZXJfaW50ZXJuYWxfcmVsZWFzZShkZXYpOwo+ ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1fY2xpZW50X21vZGVz ZXRfY29tbWl0KTsKPiArCj4gK3N0YXRpYyB2b2lkIGRybV9jbGllbnRfbW9kZXNldF9kcG1zX2xl Z2FjeShzdHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVudCwgaW50IGRwbXNfbW9kZSkKPiArewo+ ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNsaWVudC0+ZGV2Owo+ICsJc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvcjsKPiArCXN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVzZXQ7Cj4g KwlpbnQgajsKPiArCj4gKwlkcm1fbW9kZXNldF9sb2NrX2FsbChkZXYpOwo+ICsJZHJtX2NsaWVu dF9mb3JfZWFjaF9tb2Rlc2V0KG1vZGVzZXQsIGNsaWVudCkgewo+ICsJCWlmICghbW9kZXNldC0+ Y3J0Yy0+ZW5hYmxlZCkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCWZvciAoaiA9IDA7IGogPCBt b2Rlc2V0LT5udW1fY29ubmVjdG9yczsgaisrKSB7Cj4gKwkJCWNvbm5lY3RvciA9IG1vZGVzZXQt PmNvbm5lY3RvcnNbal07Cj4gKwkJCWNvbm5lY3Rvci0+ZnVuY3MtPmRwbXMoY29ubmVjdG9yLCBk cG1zX21vZGUpOwo+ICsJCQlkcm1fb2JqZWN0X3Byb3BlcnR5X3NldF92YWx1ZSgmY29ubmVjdG9y LT5iYXNlLAo+ICsJCQkJZGV2LT5tb2RlX2NvbmZpZy5kcG1zX3Byb3BlcnR5LCBkcG1zX21vZGUp Owo+ICsJCX0KPiArCX0KPiArCWRybV9tb2Rlc2V0X3VubG9ja19hbGwoZGV2KTsKPiArfQo+ICsK PiArLyoqCj4gKyAqIGRybV9jbGllbnRfbW9kZXNldF9kcG1zKCkgLSBTZXQgRFBNUyBtb2RlCj4g KyAqIEBjbGllbnQ6IERSTSBjbGllbnQKPiArICogQG1vZGU6IERQTVMgbW9kZQo+ICsgKgo+ICsg KiBOb3RlOiBGb3IgYXRvbWljIGRyaXZlcnMgQG1vZGUgaXMgcmVkdWNlZCB0byBvbi9vZmYuCj4g KyAqCj4gKyAqIFJldHVybnM6Cj4gKyAqIFplcm8gb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJv ciBjb2RlIG9uIGZhaWx1cmUuCj4gKyAqLwo+ICtpbnQgZHJtX2NsaWVudF9tb2Rlc2V0X2RwbXMo c3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQsIGludCBtb2RlKQo+ICt7Cj4gKwlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gY2xpZW50LT5kZXY7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlp ZiAoIWRybV9tYXN0ZXJfaW50ZXJuYWxfYWNxdWlyZShkZXYpKQo+ICsJCXJldHVybiAtRUJVU1k7 Cj4gKwo+ICsJbXV0ZXhfbG9jaygmY2xpZW50LT5tb2Rlc2V0X211dGV4KTsKPiArCWlmIChkcm1f ZHJ2X3VzZXNfYXRvbWljX21vZGVzZXQoZGV2KSkKPiArCQlyZXQgPSBkcm1fY2xpZW50X21vZGVz ZXRfY29tbWl0X2F0b21pYyhjbGllbnQsIG1vZGUgPT0gRFJNX01PREVfRFBNU19PTik7Cj4gKwll bHNlCj4gKwkJZHJtX2NsaWVudF9tb2Rlc2V0X2RwbXNfbGVnYWN5KGNsaWVudCwgbW9kZSk7Cj4g KwltdXRleF91bmxvY2soJmNsaWVudC0+bW9kZXNldF9tdXRleCk7Cj4gKwo+ICsJZHJtX21hc3Rl cl9pbnRlcm5hbF9yZWxlYXNlKGRldik7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICtFWFBP UlRfU1lNQk9MKGRybV9jbGllbnRfbW9kZXNldF9kcG1zKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVy LmMKPiBpbmRleCAwMjI5ZTE4N2U2ZGUuLjczZmJjZDc0OGRkZCAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9m Yl9oZWxwZXIuYwo+IEBAIC00MCwxMCArNDAsNyBAQAo+ICAjaW5jbHVkZSA8ZHJtL2RybV9mYl9o ZWxwZXIuaD4KPiAgI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KPiAgI2luY2x1ZGUg PGRybS9kcm1fYXRvbWljLmg+Cj4gLSNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4K PiAgCj4gLSNpbmNsdWRlICJkcm1fY3J0Y19pbnRlcm5hbC5oIgo+IC0jaW5jbHVkZSAiZHJtX2Ny dGNfaGVscGVyX2ludGVybmFsLmgiCj4gICNpbmNsdWRlICJkcm1faW50ZXJuYWwuaCIKPiAgCj4g IHN0YXRpYyBib29sIGRybV9mYmRldl9lbXVsYXRpb24gPSB0cnVlOwo+IEBAIC0zODgsMjMzICsz ODUsNiBAQCBpbnQgZHJtX2ZiX2hlbHBlcl9kZWJ1Z19sZWF2ZShzdHJ1Y3QgZmJfaW5mbyAqaW5m bykKPiAgfQo+ICBFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfZGVidWdfbGVhdmUpOwo+ICAK PiAtLyoqCj4gLSAqIGRybV9jbGllbnRfcGFuZWxfcm90YXRpb24oKSAtIENoZWNrIHBhbmVsIG9y aWVudGF0aW9uCj4gLSAqIEBtb2Rlc2V0OiBEUk0gbW9kZXNldAo+IC0gKiBAcm90YXRpb246IFJl dHVybmVkIHJvdGF0aW9uIHZhbHVlCj4gLSAqCj4gLSAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlm IHRoZSBwcmltYXJ5IHBsYW5lIGluIEBtb2Rlc2V0IGNhbiBodyByb3RhdGUgdG8gbWF0Y2gKPiAt ICogdGhlIHBhbmVsIG9yaWVudGF0aW9uIG9uIGl0cyBjb25uZWN0b3IuCj4gLSAqCj4gLSAqIE5v dGU6IEN1cnJlbnRseSBvbmx5IDAgYW5kIDE4MCBkZWdyZWVzIGFyZSBzdXBwb3J0ZWQuCj4gLSAq Cj4gLSAqIFJldHVybjoKPiAtICogVHJ1ZSBpZiB0aGUgcGxhbmUgY2FuIGRvIHRoZSByb3RhdGlv biwgZmFsc2Ugb3RoZXJ3aXNlLgo+IC0gKi8KPiAtYm9vbCBkcm1fY2xpZW50X3BhbmVsX3JvdGF0 aW9uKHN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVzZXQsIHVuc2lnbmVkIGludCAqcm90YXRpb24p CgpXaHkgbm90IHN0YXRpYz8gRG9lc24ndCBzZWVtIHRvIGJlIHVzZWQgYnkgYW55dGhpbmcgb3V0 c2lkZSBvZgpkcm1fY2xpZW50X21vZGVzZXQuYy4KCj4gLXsKPiAtCXN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0b3IgPSBtb2Rlc2V0LT5jb25uZWN0b3JzWzBdOwo+IC0Jc3RydWN0IGRybV9w bGFuZSAqcGxhbmUgPSBtb2Rlc2V0LT5jcnRjLT5wcmltYXJ5Owo+IC0JdTY0IHZhbGlkX21hc2sg PSAwOwo+IC0JdW5zaWduZWQgaW50IGk7Cj4gLQo+IC0JaWYgKCFtb2Rlc2V0LT5udW1fY29ubmVj dG9ycykKPiAtCQlyZXR1cm4gZmFsc2U7Cj4gLQo+IC0Jc3dpdGNoIChjb25uZWN0b3ItPmRpc3Bs YXlfaW5mby5wYW5lbF9vcmllbnRhdGlvbikgewo+IC0JY2FzZSBEUk1fTU9ERV9QQU5FTF9PUklF TlRBVElPTl9CT1RUT01fVVA6Cj4gLQkJKnJvdGF0aW9uID0gRFJNX01PREVfUk9UQVRFXzE4MDsK PiAtCQlicmVhazsKPiAtCWNhc2UgRFJNX01PREVfUEFORUxfT1JJRU5UQVRJT05fTEVGVF9VUDoK PiAtCQkqcm90YXRpb24gPSBEUk1fTU9ERV9ST1RBVEVfOTA7Cj4gLQkJYnJlYWs7Cj4gLQljYXNl IERSTV9NT0RFX1BBTkVMX09SSUVOVEFUSU9OX1JJR0hUX1VQOgo+IC0JCSpyb3RhdGlvbiA9IERS TV9NT0RFX1JPVEFURV8yNzA7Cj4gLQkJYnJlYWs7Cj4gLQlkZWZhdWx0Ogo+IC0JCSpyb3RhdGlv biA9IERSTV9NT0RFX1JPVEFURV8wOwo+IC0JfQo+IC0KPiAtCS8qCj4gLQkgKiBUT0RPOiBzdXBw b3J0IDkwIC8gMjcwIGRlZ3JlZSBoYXJkd2FyZSByb3RhdGlvbiwKPiAtCSAqIGRlcGVuZGluZyBv biB0aGUgaGFyZHdhcmUgdGhpcyBtYXkgcmVxdWlyZSB0aGUgZnJhbWVidWZmZXIKPiAtCSAqIHRv IGJlIGluIGEgc3BlY2lmaWMgdGlsaW5nIGZvcm1hdC4KPiAtCSAqLwo+IC0JaWYgKCpyb3RhdGlv biAhPSBEUk1fTU9ERV9ST1RBVEVfMTgwIHx8ICFwbGFuZS0+cm90YXRpb25fcHJvcGVydHkpCj4g LQkJcmV0dXJuIGZhbHNlOwo+IC0KPiAtCWZvciAoaSA9IDA7IGkgPCBwbGFuZS0+cm90YXRpb25f cHJvcGVydHktPm51bV92YWx1ZXM7IGkrKykKPiAtCQl2YWxpZF9tYXNrIHw9ICgxVUxMIDw8IHBs YW5lLT5yb3RhdGlvbl9wcm9wZXJ0eS0+dmFsdWVzW2ldKTsKPiAtCj4gLQlpZiAoISgqcm90YXRp b24gJiB2YWxpZF9tYXNrKSkKPiAtCQlyZXR1cm4gZmFsc2U7Cj4gLQo+IC0JcmV0dXJuIHRydWU7 Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgZHJtX2NsaWVudF9tb2Rlc2V0X2NvbW1pdF9hdG9taWMo c3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQsIGJvb2wgYWN0aXZlKQo+IC17Cj4gLQlzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2ID0gY2xpZW50LT5kZXY7Cj4gLQlzdHJ1Y3QgZHJtX3BsYW5lX3N0 YXRlICpwbGFuZV9zdGF0ZTsKPiAtCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOwo+IC0Jc3RydWN0 IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlOwo+IC0Jc3RydWN0IGRybV9tb2Rlc2V0X2FjcXVpcmVf Y3R4IGN0eDsKPiAtCXN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVfc2V0Owo+IC0JaW50IHJldDsK PiAtCj4gLQlkcm1fbW9kZXNldF9hY3F1aXJlX2luaXQoJmN0eCwgMCk7Cj4gLQo+IC0Jc3RhdGUg PSBkcm1fYXRvbWljX3N0YXRlX2FsbG9jKGRldik7Cj4gLQlpZiAoIXN0YXRlKSB7Cj4gLQkJcmV0 ID0gLUVOT01FTTsKPiAtCQlnb3RvIG91dF9jdHg7Cj4gLQl9Cj4gLQo+IC0Jc3RhdGUtPmFjcXVp cmVfY3R4ID0gJmN0eDsKPiAtcmV0cnk6Cj4gLQlkcm1fZm9yX2VhY2hfcGxhbmUocGxhbmUsIGRl dikgewo+IC0JCXBsYW5lX3N0YXRlID0gZHJtX2F0b21pY19nZXRfcGxhbmVfc3RhdGUoc3RhdGUs IHBsYW5lKTsKPiAtCQlpZiAoSVNfRVJSKHBsYW5lX3N0YXRlKSkgewo+IC0JCQlyZXQgPSBQVFJf RVJSKHBsYW5lX3N0YXRlKTsKPiAtCQkJZ290byBvdXRfc3RhdGU7Cj4gLQkJfQo+IC0KPiAtCQlw bGFuZV9zdGF0ZS0+cm90YXRpb24gPSBEUk1fTU9ERV9ST1RBVEVfMDsKPiAtCj4gLQkJLyogZGlz YWJsZSBub24tcHJpbWFyeTogKi8KPiAtCQlpZiAocGxhbmUtPnR5cGUgPT0gRFJNX1BMQU5FX1RZ UEVfUFJJTUFSWSkKPiAtCQkJY29udGludWU7Cj4gLQo+IC0JCXJldCA9IF9fZHJtX2F0b21pY19o ZWxwZXJfZGlzYWJsZV9wbGFuZShwbGFuZSwgcGxhbmVfc3RhdGUpOwo+IC0JCWlmIChyZXQgIT0g MCkKPiAtCQkJZ290byBvdXRfc3RhdGU7Cj4gLQl9Cj4gLQo+IC0JZHJtX2NsaWVudF9mb3JfZWFj aF9tb2Rlc2V0KG1vZGVfc2V0LCBjbGllbnQpIHsKPiAtCQlzdHJ1Y3QgZHJtX3BsYW5lICpwcmlt YXJ5ID0gbW9kZV9zZXQtPmNydGMtPnByaW1hcnk7Cj4gLQkJdW5zaWduZWQgaW50IHJvdGF0aW9u Owo+IC0KPiAtCQlpZiAoZHJtX2NsaWVudF9wYW5lbF9yb3RhdGlvbihtb2RlX3NldCwgJnJvdGF0 aW9uKSkgewo+IC0JCQkvKiBDYW5ub3QgZmFpbCBhcyB3ZSd2ZSBhbHJlYWR5IGdvdHRlbiB0aGUg cGxhbmUgc3RhdGUgYWJvdmUgKi8KPiAtCQkJcGxhbmVfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9u ZXdfcGxhbmVfc3RhdGUoc3RhdGUsIHByaW1hcnkpOwo+IC0JCQlwbGFuZV9zdGF0ZS0+cm90YXRp b24gPSByb3RhdGlvbjsKPiAtCQl9Cj4gLQo+IC0JCXJldCA9IF9fZHJtX2F0b21pY19oZWxwZXJf c2V0X2NvbmZpZyhtb2RlX3NldCwgc3RhdGUpOwo+IC0JCWlmIChyZXQgIT0gMCkKPiAtCQkJZ290 byBvdXRfc3RhdGU7Cj4gLQo+IC0JCS8qCj4gLQkJICogX19kcm1fYXRvbWljX2hlbHBlcl9zZXRf Y29uZmlnKCkgc2V0cyBhY3RpdmUgd2hlbiBhCj4gLQkJICogbW9kZSBpcyBzZXQsIHVuY29uZGl0 aW9uYWxseSBjbGVhciBpdCBpZiB3ZSBmb3JjZSBEUE1TIG9mZgo+IC0JCSAqLwo+IC0JCWlmICgh YWN0aXZlKSB7Cj4gLQkJCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IG1vZGVfc2V0LT5jcnRjOwo+ IC0JCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9u ZXdfY3J0Y19zdGF0ZShzdGF0ZSwgY3J0Yyk7Cj4gLQo+IC0JCQljcnRjX3N0YXRlLT5hY3RpdmUg PSBmYWxzZTsKPiAtCQl9Cj4gLQl9Cj4gLQo+IC0JcmV0ID0gZHJtX2F0b21pY19jb21taXQoc3Rh dGUpOwo+IC0KPiAtb3V0X3N0YXRlOgo+IC0JaWYgKHJldCA9PSAtRURFQURMSykKPiAtCQlnb3Rv IGJhY2tvZmY7Cj4gLQo+IC0JZHJtX2F0b21pY19zdGF0ZV9wdXQoc3RhdGUpOwo+IC1vdXRfY3R4 Ogo+IC0JZHJtX21vZGVzZXRfZHJvcF9sb2NrcygmY3R4KTsKPiAtCWRybV9tb2Rlc2V0X2FjcXVp cmVfZmluaSgmY3R4KTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+IC0KPiAtYmFja29mZjoKPiAtCWRy bV9hdG9taWNfc3RhdGVfY2xlYXIoc3RhdGUpOwo+IC0JZHJtX21vZGVzZXRfYmFja29mZigmY3R4 KTsKPiAtCj4gLQlnb3RvIHJldHJ5Owo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IGRybV9jbGllbnRf bW9kZXNldF9jb21taXRfbGVnYWN5KHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50KQo+IC17 Cj4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2xpZW50LT5kZXY7Cj4gLQlzdHJ1Y3QgZHJt X21vZGVfc2V0ICptb2RlX3NldDsKPiAtCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOwo+IC0JaW50 IHJldCA9IDA7Cj4gLQo+IC0JZHJtX21vZGVzZXRfbG9ja19hbGwoZGV2KTsKPiAtCWRybV9mb3Jf ZWFjaF9wbGFuZShwbGFuZSwgZGV2KSB7Cj4gLQkJaWYgKHBsYW5lLT50eXBlICE9IERSTV9QTEFO RV9UWVBFX1BSSU1BUlkpCj4gLQkJCWRybV9wbGFuZV9mb3JjZV9kaXNhYmxlKHBsYW5lKTsKPiAt Cj4gLQkJaWYgKHBsYW5lLT5yb3RhdGlvbl9wcm9wZXJ0eSkKPiAtCQkJZHJtX21vZGVfcGxhbmVf c2V0X29ial9wcm9wKHBsYW5lLAo+IC0JCQkJCQkgICAgcGxhbmUtPnJvdGF0aW9uX3Byb3BlcnR5 LAo+IC0JCQkJCQkgICAgRFJNX01PREVfUk9UQVRFXzApOwo+IC0JfQo+IC0KPiAtCWRybV9jbGll bnRfZm9yX2VhY2hfbW9kZXNldChtb2RlX3NldCwgY2xpZW50KSB7Cj4gLQkJc3RydWN0IGRybV9j cnRjICpjcnRjID0gbW9kZV9zZXQtPmNydGM7Cj4gLQo+IC0JCWlmIChjcnRjLT5mdW5jcy0+Y3Vy c29yX3NldDIpIHsKPiAtCQkJcmV0ID0gY3J0Yy0+ZnVuY3MtPmN1cnNvcl9zZXQyKGNydGMsIE5V TEwsIDAsIDAsIDAsIDAsIDApOwo+IC0JCQlpZiAocmV0KQo+IC0JCQkJZ290byBvdXQ7Cj4gLQkJ fSBlbHNlIGlmIChjcnRjLT5mdW5jcy0+Y3Vyc29yX3NldCkgewo+IC0JCQlyZXQgPSBjcnRjLT5m dW5jcy0+Y3Vyc29yX3NldChjcnRjLCBOVUxMLCAwLCAwLCAwKTsKPiAtCQkJaWYgKHJldCkKPiAt CQkJCWdvdG8gb3V0Owo+IC0JCX0KPiAtCj4gLQkJcmV0ID0gZHJtX21vZGVfc2V0X2NvbmZpZ19p bnRlcm5hbChtb2RlX3NldCk7Cj4gLQkJaWYgKHJldCkKPiAtCQkJZ290byBvdXQ7Cj4gLQl9Cj4g LW91dDoKPiAtCWRybV9tb2Rlc2V0X3VubG9ja19hbGwoZGV2KTsKPiAtCj4gLQlyZXR1cm4gcmV0 Owo+IC19Cj4gLQo+IC0vKioKPiAtICogZHJtX2NsaWVudF9tb2Rlc2V0X2NvbW1pdF9mb3JjZSgp IC0gRm9yY2UgY29tbWl0IENSVEMgY29uZmlndXJhdGlvbgo+IC0gKiBAY2xpZW50OiBEUk0gY2xp ZW50Cj4gLSAqCj4gLSAqIENvbW1pdCBtb2Rlc2V0IGNvbmZpZ3VyYXRpb24gdG8gY3J0Y3Mgd2l0 aG91dCBjaGVja2luZyBpZiB0aGVyZSBpcyBhIERSTSBtYXN0ZXIuCj4gLSAqCj4gLSAqIFJldHVy bnM6Cj4gLSAqIFplcm8gb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1 cmUuCj4gLSAqLwo+IC1pbnQgZHJtX2NsaWVudF9tb2Rlc2V0X2NvbW1pdF9mb3JjZShzdHJ1Y3Qg ZHJtX2NsaWVudF9kZXYgKmNsaWVudCkKPiAtewo+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9 IGNsaWVudC0+ZGV2Owo+IC0JaW50IHJldDsKPiAtCj4gLQltdXRleF9sb2NrKCZjbGllbnQtPm1v ZGVzZXRfbXV0ZXgpOwo+IC0JaWYgKGRybV9kcnZfdXNlc19hdG9taWNfbW9kZXNldChkZXYpKQo+ IC0JCXJldCA9IGRybV9jbGllbnRfbW9kZXNldF9jb21taXRfYXRvbWljKGNsaWVudCwgdHJ1ZSk7 Cj4gLQllbHNlCj4gLQkJcmV0ID0gZHJtX2NsaWVudF9tb2Rlc2V0X2NvbW1pdF9sZWdhY3koY2xp ZW50KTsKPiAtCW11dGV4X3VubG9jaygmY2xpZW50LT5tb2Rlc2V0X211dGV4KTsKPiAtCj4gLQly ZXR1cm4gcmV0Owo+IC19Cj4gLQo+IC0vKioKPiAtICogZHJtX2NsaWVudF9tb2Rlc2V0X2NvbW1p dCgpIC0gQ29tbWl0IENSVEMgY29uZmlndXJhdGlvbgo+IC0gKiBAY2xpZW50OiBEUk0gY2xpZW50 Cj4gLSAqCj4gLSAqIENvbW1pdCBtb2Rlc2V0IGNvbmZpZ3VyYXRpb24gdG8gY3J0Y3MuCj4gLSAq Cj4gLSAqIFJldHVybnM6Cj4gLSAqIFplcm8gb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBj b2RlIG9uIGZhaWx1cmUuCj4gLSAqLwo+IC1pbnQgZHJtX2NsaWVudF9tb2Rlc2V0X2NvbW1pdChz dHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVudCkKPiAtewo+IC0Jc3RydWN0IGRybV9kZXZpY2Ug KmRldiA9IGNsaWVudC0+ZGV2Owo+IC0JaW50IHJldDsKPiAtCj4gLQlpZiAoIWRybV9tYXN0ZXJf aW50ZXJuYWxfYWNxdWlyZShkZXYpKQo+IC0JCXJldHVybiAtRUJVU1k7Cj4gLQo+IC0JcmV0ID0g ZHJtX2NsaWVudF9tb2Rlc2V0X2NvbW1pdF9mb3JjZShjbGllbnQpOwo+IC0KPiAtCWRybV9tYXN0 ZXJfaW50ZXJuYWxfcmVsZWFzZShkZXYpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gLX0KPiAtCj4g IC8qKgo+ICAgKiBkcm1fZmJfaGVscGVyX3Jlc3RvcmVfZmJkZXZfbW9kZV91bmxvY2tlZCAtIHJl c3RvcmUgZmJkZXYgY29uZmlndXJhdGlvbgo+ICAgKiBAZmJfaGVscGVyOiBkcml2ZXItYWxsb2Nh dGVkIGZiZGV2IGhlbHBlciwgY2FuIGJlIE5VTEwKPiBAQCAtNzA0LDU4ICs0NzQsNiBAQCBzdGF0 aWMgc3RydWN0IHN5c3JxX2tleV9vcCBzeXNycV9kcm1fZmJfaGVscGVyX3Jlc3RvcmVfb3AgPSB7 Cj4gIHN0YXRpYyBzdHJ1Y3Qgc3lzcnFfa2V5X29wIHN5c3JxX2RybV9mYl9oZWxwZXJfcmVzdG9y ZV9vcCA9IHsgfTsKPiAgI2VuZGlmCj4gIAo+IC1zdGF0aWMgdm9pZCBkcm1fY2xpZW50X21vZGVz ZXRfZHBtc19sZWdhY3koc3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQsIGludCBkcG1zX21v ZGUpCj4gLXsKPiAtCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjbGllbnQtPmRldjsKPiAtCXN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7Cj4gLQlzdHJ1Y3QgZHJtX21vZGVfc2V0ICpt b2Rlc2V0Owo+IC0JaW50IGo7Cj4gLQo+IC0JZHJtX21vZGVzZXRfbG9ja19hbGwoZGV2KTsKPiAt CWRybV9jbGllbnRfZm9yX2VhY2hfbW9kZXNldChtb2Rlc2V0LCBjbGllbnQpIHsKPiAtCQlpZiAo IW1vZGVzZXQtPmNydGMtPmVuYWJsZWQpCj4gLQkJCWNvbnRpbnVlOwo+IC0KPiAtCQlmb3IgKGog PSAwOyBqIDwgbW9kZXNldC0+bnVtX2Nvbm5lY3RvcnM7IGorKykgewo+IC0JCQljb25uZWN0b3Ig PSBtb2Rlc2V0LT5jb25uZWN0b3JzW2pdOwo+IC0JCQljb25uZWN0b3ItPmZ1bmNzLT5kcG1zKGNv bm5lY3RvciwgZHBtc19tb2RlKTsKPiAtCQkJZHJtX29iamVjdF9wcm9wZXJ0eV9zZXRfdmFsdWUo JmNvbm5lY3Rvci0+YmFzZSwKPiAtCQkJCWRldi0+bW9kZV9jb25maWcuZHBtc19wcm9wZXJ0eSwg ZHBtc19tb2RlKTsKPiAtCQl9Cj4gLQl9Cj4gLQlkcm1fbW9kZXNldF91bmxvY2tfYWxsKGRldik7 Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBkcm1fY2xpZW50X21vZGVzZXRfZHBtcygpIC0gU2V0IERQ TVMgbW9kZQo+IC0gKiBAY2xpZW50OiBEUk0gY2xpZW50Cj4gLSAqIEBtb2RlOiBEUE1TIG1vZGUK PiAtICoKPiAtICogTm90ZTogRm9yIGF0b21pYyBkcml2ZXJzIEBtb2RlIGlzIHJlZHVjZWQgdG8g b24vb2ZmLgo+IC0gKgo+IC0gKiBSZXR1cm5zOgo+IC0gKiBaZXJvIG9uIHN1Y2Nlc3Mgb3IgbmVn YXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgo+IC0gKi8KPiAtaW50IGRybV9jbGllbnRfbW9k ZXNldF9kcG1zKHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50LCBpbnQgbW9kZSkKPiAtewo+ IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNsaWVudC0+ZGV2Owo+IC0JaW50IHJldCA9IDA7 Cj4gLQo+IC0JaWYgKCFkcm1fbWFzdGVyX2ludGVybmFsX2FjcXVpcmUoZGV2KSkKPiAtCQlyZXR1 cm4gLUVCVVNZOwo+IC0KPiAtCW11dGV4X2xvY2soJmNsaWVudC0+bW9kZXNldF9tdXRleCk7Cj4g LQlpZiAoZHJtX2Rydl91c2VzX2F0b21pY19tb2Rlc2V0KGRldikpCj4gLQkJcmV0ID0gZHJtX2Ns aWVudF9tb2Rlc2V0X2NvbW1pdF9hdG9taWMoY2xpZW50LCBtb2RlID09IERSTV9NT0RFX0RQTVNf T04pOwo+IC0JZWxzZQo+IC0JCWRybV9jbGllbnRfbW9kZXNldF9kcG1zX2xlZ2FjeShjbGllbnQs IG1vZGUpOwo+IC0JbXV0ZXhfdW5sb2NrKCZjbGllbnQtPm1vZGVzZXRfbXV0ZXgpOwo+IC0KPiAt CWRybV9tYXN0ZXJfaW50ZXJuYWxfcmVsZWFzZShkZXYpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4g LX0KPiAtCj4gIHN0YXRpYyB2b2lkIGRybV9mYl9oZWxwZXJfZHBtcyhzdHJ1Y3QgZmJfaW5mbyAq aW5mbywgaW50IGRwbXNfbW9kZSkKPiAgewo+ICAJc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hl bHBlciA9IGluZm8tPnBhcjsKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2NsaWVudC5o IGIvaW5jbHVkZS9kcm0vZHJtX2NsaWVudC5oCj4gaW5kZXggODU4YzhiZTcwODcwLi42NGI3MjVi MzE4ZjIgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2NsaWVudC5oCj4gKysrIGIvaW5j bHVkZS9kcm0vZHJtX2NsaWVudC5oCj4gQEAgLTE1NCw2ICsxNTQsMTAgQEAgaW50IGRybV9jbGll bnRfbW9kZXNldF9jcmVhdGUoc3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQpOwo+ICB2b2lk IGRybV9jbGllbnRfbW9kZXNldF9mcmVlKHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50KTsK PiAgdm9pZCBkcm1fY2xpZW50X21vZGVzZXRfcmVsZWFzZShzdHJ1Y3QgZHJtX2NsaWVudF9kZXYg KmNsaWVudCk7Cj4gIHN0cnVjdCBkcm1fbW9kZV9zZXQgKmRybV9jbGllbnRfZmluZF9tb2Rlc2V0 KHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50LCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwo+ ICtib29sIGRybV9jbGllbnRfcGFuZWxfcm90YXRpb24oc3RydWN0IGRybV9tb2RlX3NldCAqbW9k ZXNldCwgdW5zaWduZWQgaW50ICpyb3RhdGlvbik7Cj4gK2ludCBkcm1fY2xpZW50X21vZGVzZXRf Y29tbWl0X2ZvcmNlKHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50KTsKCkkgdGhpbmsgbGF0 ZXN0IGhlcmUgdGhlIF9mb3JjZSBwb3N0Zml4IHN0b3BwZWQgbWFraW5nIHNlbnNlLiBJdCdzIGp1 c3QgYQpjb21taXQuIEFsc28gSSdtIHdvbmRlcmluZyB3aGV0aGVyIHdlIHNob3VsZG4ndCBwdWxs IHRoZQptYXN0ZXJfYWNxdWlyZV9pbnRlcm5hbCBpbnRvIHRoZXNlIGhlbHBlcnMgaGVyZSwgdGhl cmUncyBub3QgcmVhbGx5IGEKdXNlLWNhc2UgSSBjYW4gdGhpbmsgb2Ygd2hlcmUgd2Ugc2hvdWxk IG5vdCBjaGVjayBmb3Igb3RoZXIgbWFzdGVycy4KCk9ubHkgdHdvIGtlcm5lbCBtb2Rlc2V0IHJl cXVlc3RzIHdhbnQgdG8gaWdub3JlIG1hc3RlciBzdGF0dXM6Ci0gZGVidWcgZW50ZXIvbGVhdmUs IHdoaWNoIGlzIHV0dGVybHkgYnJva2VuIGJ5IGRlc2lnbiAoYW5kIG91dHJpZ2h0CiAgZGlzYWJs ZSBmb3IgYW55IGF0b21pYyBkcml2ZXIpCi0gcGFuaWMgaGFuZGxpbmcsIGZvciB3aGljaCB3ZSBu b3cgaGF2ZSBhIHJlYWxseSBuaWNlIHBsYW4sIHBsdXMgZmlyc3QKICBza2V0Y2hlcyBvZiBhbiBp bXBsZW1lbnRhdGlvbi4KCkNoZWVycywgRGFuaWVsCgo+ICtpbnQgZHJtX2NsaWVudF9tb2Rlc2V0 X2NvbW1pdChzdHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVudCk7Cj4gK2ludCBkcm1fY2xpZW50 X21vZGVzZXRfZHBtcyhzdHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVudCwgaW50IG1vZGUpOwo+ ICAKPiAgLyoqCj4gICAqIGRybV9jbGllbnRfZm9yX2VhY2hfbW9kZXNldCgpIC0gSXRlcmF0ZSBv dmVyIGNsaWVudCBtb2Rlc2V0cwo+IC0tIAo+IDIuMjAuMQo+IAoKLS0gCkRhbmllbCBWZXR0ZXIK U29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNo Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdm eCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeA==