From mboxrd@z Thu Jan 1 00:00:00 1970 From: Clinton Taylor Subject: Re: [PATCH v3 2/2] drm/i915: Make sure we have enough memory bandwidth on ICL Date: Mon, 6 May 2019 15:38:43 -0700 Message-ID: References: <20190503190831.1759-1-ville.syrjala@linux.intel.com> <20190503190831.1759-2-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id BF7E589AEB for ; Mon, 6 May 2019 23:37:43 +0000 (UTC) In-Reply-To: <20190503190831.1759-2-ville.syrjala@linux.intel.com> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Ville Syrjala , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDUvMy8xOSAxMjowOCBQTSwgVmlsbGUgU3lyamFsYSB3cm90ZToKPiBGcm9tOiBWaWxsZSBT eXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgo+Cj4gSUNMIGhhcyBzbyBt YW55IHBsYW5lcyB0aGF0IGl0IGNhbiBlYXNpbHkgZXhjZWVkIHRoZSBtYXhpbXVtCj4gZWZmZWN0 aXZlIG1lbW9yeSBiYW5kd2lkdGggb2YgdGhlIHN5c3RlbS4gV2UgbXVzdCB0aGVyZWZvcmUgY2hl Y2sKPiB0aGF0IHdlIGRvbid0IGV4Y2VlZCB0aGF0IGxpbWl0Lgo+Cj4gVGhlIGFsZ29yaXRobSBp cyB2ZXJ5IG1hZ2ljIG51bWJlciBoZWF2eSBhbmQgbGFja3Mgc3VmZmljaWVudAo+IGV4cGxhbmF0 aW9uIGZvciBub3cuIFdlIGFsc28gaGF2ZSBubyBzYW5lIHdheSB0byBxdWVyeSB0aGUKPiBtZW1v cnkgY2xvY2sgYW5kIHRpbWluZ3MsIHNvIHdlIG11c3QgcmVseSBvbiBhIGNvbWJpbmF0aW9uIG9m Cj4gcmF3IHJlYWRvdXQgZnJvbSB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgYW5kIGhhcmRjb2RlZCBh c3N1bXB0aW9ucy4KPiBUaGUgbWVtb3J5IGNvbnRyb2xsZXIgdmFsdWVzIG9idmlvdXNseSBjaGFu Z2UgYXMgdGhlIHN5c3RlbQo+IGp1bXBzIGJldHdlZW4gdGhlIGRpZmZlcmVudCBTQUdWIHBvaW50 cywgc28gd2UgdHJ5IHRvIHN0YWJpbGl6ZQo+IGl0IGZpcnN0IGJ5IGRpc2FibGluZyBTQUdWIGZv ciB0aGUgZHVyYXRpb24gb2YgdGhlIHJlYWRvdXQuCj4KPiBUaGUgdXRpbGl6ZWQgYmFuZHdpZHRo IGlzIHRyYWNrZWQgdmlhIGEgZGV2aWNlIHdpZGUgYXRvbWljCj4gcHJpdmF0ZSBvYmplY3QuIFRo YXQgaXMgYWN0dWFsbHkgbm90IHJvYnVzdCBiZWNhdXNlIHdlIGNhbid0Cj4gYWZmb3JkIHRvIGVu Zm9yY2Ugc3RyaWN0IGdsb2JhbCBvcmRlcmluZyBiZXR3ZWVuIHRoZSBwaXBlcy4KPiBUaHVzIEkg dGhpbmsgSSdsbCBuZWVkIHRvIGNoYW5nZSB0aGlzIHRvIHNpbXBseSBjaG9wIHVwIHRoZQo+IGF2 YWlsYWJsZSBiYW5kd2lkdGggYmV0d2VlbiBhbGwgdGhlIGFjdGl2ZSBwaXBlcy4gRWFjaCBwaXBl Cj4gY2FuIHRoZW4gZG8gd2hhdGV2ZXIgaXQgd2FudHMgYXMgbG9uZyBhcyBpdCBkb2Vzbid0IGV4 Y2VlZAo+IGl0cyBidWRnZXQuIFRoYXQgc2NoZW1lIHdpbGwgYWxzbyByZXF1aXJlIHRoYXQgd2Ug YXNzdW1lIHRoYXQKPiBhbnkgbnVtYmVyIG9mIHBsYW5lcyBjb3VsZCBiZSBhY3RpdmUgYXQgYW55 IHRpbWUuCj4KPiBUT0RPOiBtYWtlIGl0IHJvYnVzdCBhbmQgZGVhbCB3aXRoIGFsbCB0aGUgb3Bl biBxdWVzdGlvbnMKClRPRE86IEFkZCBjb21tZW50cyBkZXRhaWxpbmcgc3RydWN0dXJlcwoKPgo+ IHYyOiBTbGVlcCBsb25nZXIgYWZ0ZXIgZGlzYWJsaW5nIFNBR1YKPiB2MzogUG9sbCBmb3IgdGhl IGRjbGsgdG8gZ2V0IHJhaXNlZCAoc2VlbiBpdCB0YWtlIDI1MG1zISkKPiAgICAgIElmIHRoZSBz eXN0ZW0gaGFzIDIxMzNNVC9zIG1lbW9yeSB0aGVuIHdlIHBvaW50bGVzc2x5Cj4gICAgICB3YWl0 IG9uZSBmdWxsIHNlY29uZCA6KAo+IHY0OiBVc2UgdGhlIG5ldyBwY29kZSBpbnRlcmZhY2UgdG8g Z2V0IHRoZSBxZ3YgcG9pbnRzIHJhdGhlcgo+ICAgICAgdGhhdCB1c2luZyBoYXJkY29kZWQgbnVt YmVycwo+Cj4gU2lnbmVkLW9mZi1ieTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxp bnV4LmludGVsLmNvbT4KPiAtLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAg ICAgICAgICAgIHwgICAxICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgICAg ICAgICAgIHwgMjI5ICsrKysrKysrKysrKysrKysrKysrKysKPiAgIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmggICAgICAgICAgIHwgIDEwICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfcmVnLmggICAgICAgICAgIHwgICAzICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2F0b21pY19wbGFuZS5jIHwgIDIwICsrCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9hdG9taWNfcGxhbmUuaCB8ICAgMiArCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9i dy5jICAgICAgICAgICB8IDE4MSArKysrKysrKysrKysrKysrKwo+ICAgZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfYncuaCAgICAgICAgICAgfCAgNDYgKysrKysKPiAgIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2Rpc3BsYXkuYyAgICAgIHwgIDQwICsrKy0KPiAgIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2Rydi5oICAgICAgICAgIHwgICAyICsKPiAgIDEwIGZpbGVzIGNoYW5nZWQs IDUzMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYncuYwo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2J3LmgKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gaW5k ZXggNjgxMDZmZTM1YTA0Li4xMzlhMGZjMTkzOTAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+ IEBAIC0xMzgsNiArMTM4LDcgQEAgaTkxNS15ICs9IGludGVsX2F1ZGlvLm8gXAo+ICAgCSAgaW50 ZWxfYXRvbWljLm8gXAo+ICAgCSAgaW50ZWxfYXRvbWljX3BsYW5lLm8gXAo+ICAgCSAgaW50ZWxf Ymlvcy5vIFwKPiArCSAgaW50ZWxfYncubyBcCj4gICAJICBpbnRlbF9jZGNsay5vIFwKPiAgIAkg IGludGVsX2NvbG9yLm8gXAo+ICAgCSAgaW50ZWxfY29tYm9fcGh5Lm8gXAo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuYwo+IGluZGV4IDVlZDg2NDc1MmM3Yi4uYjdmYTdiNTFjMmUyIDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2Rydi5jCj4gQEAgLTcwLDYgKzcwLDcgQEAKPiAgICNpbmNsdWRlICJpbnRl bF9vdmVybGF5LmgiCj4gICAjaW5jbHVkZSAiaW50ZWxfcGlwZV9jcmMuaCIKPiAgICNpbmNsdWRl ICJpbnRlbF9wbS5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfc2lkZWJhbmQuaCIKPiAgICNpbmNsdWRl ICJpbnRlbF9zcHJpdGUuaCIKPiAgICNpbmNsdWRlICJpbnRlbF91Yy5oIgo+ICAgCj4gQEAgLTE0 MzUsNiArMTQzNiwyMzIgQEAgYnh0X2dldF9kcmFtX2luZm8oc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQo+ICAgCXJldHVybiAwOwo+ICAgfQo+ICAgCj4gK3N0cnVjdCBpbnRlbF9x Z3ZfcG9pbnQgewo+ICsJdTE2IGRjbGssIHRfcnAsIHRfcmRwcmUsIHRfcmMsIHRfcmFzLCB0X3Jj ZDsKPiArfTsKPiArCj4gK3N0cnVjdCBpbnRlbF9zYWd2X2luZm8gewo+ICsJc3RydWN0IGludGVs X3Fndl9wb2ludCBwb2ludHNbM107Cj4gKwl1OCBudW1fcG9pbnRzOwo+ICsJdTggbnVtX2NoYW5u ZWxzOwo+ICsJdTggdF9ibDsKPiArCWVudW0gaW50ZWxfZHJhbV90eXBlIGRyYW1fdHlwZTsKPiAr fTsKPiArCj4gK3N0YXRpYyBpbnQgaWNsX3Bjb2RlX3JlYWRfbWVtX2dsb2JhbF9pbmZvKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiArCQkJCQkgIHN0cnVjdCBpbnRlbF9zYWd2 X2luZm8gKnNpKQo+ICt7Cj4gKwl1MzIgdmFsID0gMDsKPiArCWludCByZXQ7Cj4gKwo+ICsJcmV0 ID0gc2FuZHlicmlkZ2VfcGNvZGVfcmVhZChkZXZfcHJpdiwKPiArCQkJCSAgICAgSUNMX1BDT0RF X01FTV9TVUJTWVNZU1RFTV9JTkZPIHwKPiArCQkJCSAgICAgSUNMX1BDT0RFX01FTV9TU19SRUFE X0dMT0JBTF9JTkZPLAo+ICsJCQkJICAgICAmdmFsLCBOVUxMKTsKPiArCWlmIChyZXQpCj4gKwkJ cmV0dXJuIHJldDsKPiArCj4gKwlzd2l0Y2ggKHZhbCAmIDB4Zikgewo+ICsJY2FzZSAwOgo+ICsJ CXNpLT5kcmFtX3R5cGUgPSBJTlRFTF9EUkFNX0REUjQ7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDE6 Cj4gKwkJc2ktPmRyYW1fdHlwZSA9IElOVEVMX0RSQU1fRERSMzsKPiArCQlicmVhazsKPiArCWNh c2UgMjoKPiArCQlzaS0+ZHJhbV90eXBlID0gSU5URUxfRFJBTV9MUEREUjM7Cj4gKwkJYnJlYWs7 Cj4gKwljYXNlIDM6Cj4gKwkJc2ktPmRyYW1fdHlwZSA9IElOVEVMX0RSQU1fTFBERFIzOwo+ICsJ CWJyZWFrOwo+ICsJZGVmYXVsdDoKPiArCQlNSVNTSU5HX0NBU0UodmFsICYgMHhmKTsKPiArCQli cmVhazsKPiArCX0KPiArCj4gKwlzaS0+bnVtX2NoYW5uZWxzID0gKHZhbCAmIDB4ZjApID4+IDQ7 Cj4gKwlzaS0+bnVtX3BvaW50cyA9ICh2YWwgJiAweGYwMCkgPj4gODsKPiArCj4gKwlzaS0+dF9i bCA9IHNpLT5kcmFtX3R5cGUgPT0gSU5URUxfRFJBTV9ERFI0ID8gNCA6IDg7Cj4gKwo+ICsJcmV0 dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaWNsX3Bjb2RlX3JlYWRfcWd2X3BvaW50X2lu Zm8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICsJCQkJCSBzdHJ1Y3QgaW50 ZWxfcWd2X3BvaW50ICpzcCwKPiArCQkJCQkgaW50IHBvaW50KQo+ICt7Cj4gKwl1MzIgdmFsID0g MCwgdmFsMjsKPiArCWludCByZXQ7Cj4gKwo+ICsJcmV0ID0gc2FuZHlicmlkZ2VfcGNvZGVfcmVh ZChkZXZfcHJpdiwKPiArCQkJCSAgICAgSUNMX1BDT0RFX01FTV9TVUJTWVNZU1RFTV9JTkZPIHwK PiArCQkJCSAgICAgSUNMX1BDT0RFX01FTV9TU19SRUFEX1FHVl9QT0lOVF9JTkZPKHBvaW50KSwK PiArCQkJCSAgICAgJnZhbCwgJnZhbDIpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ ICsKPiArCXNwLT5kY2xrID0gdmFsICYgMHhmZmZmOwo+ICsJc3AtPnRfcnAgPSAodmFsICYgMHhm ZjAwMDApID4+IDE2Owo+ICsJc3AtPnRfcmNkID0gKHZhbCAmIDB4ZmYwMDAwMDApID4+IDI0Owo+ ICsKPiArCXNwLT50X3JkcHJlID0gdmFsMiAmIDB4ZmY7Cj4gKwlzcC0+dF9yYXMgPSAodmFsMiAm IDB4ZmYwMCkgPj4gODsKPiArCj4gKwlzcC0+dF9yYyA9IHNwLT50X3JwICsgc3AtPnRfcmFzOwo+ ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGljbF9nZXRfcWd2X3BvaW50 cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gKwkJCSAgICAgIHN0cnVjdCBp bnRlbF9zYWd2X2luZm8gKnNpKQo+ICt7Cj4gKwlpbnQgaSwgcmV0Owo+ICsKPiArCXJldCA9IGlj bF9wY29kZV9yZWFkX21lbV9nbG9iYWxfaW5mbyhkZXZfcHJpdiwgc2kpOwo+ICsJaWYgKHJldCkK PiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCWlmIChXQVJOX09OKHNpLT5udW1fcG9pbnRzID4gQVJS QVlfU0laRShzaS0+cG9pbnRzKSkpCj4gKwkJc2ktPm51bV9wb2ludHMgPSBBUlJBWV9TSVpFKHNp LT5wb2ludHMpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBzaS0+bnVtX3BvaW50czsgaSsrKSB7 Cj4gKwkJc3RydWN0IGludGVsX3Fndl9wb2ludCAqc3AgPSAmc2ktPnBvaW50c1tpXTsKPiArCj4g KwkJcmV0ID0gaWNsX3Bjb2RlX3JlYWRfcWd2X3BvaW50X2luZm8oZGV2X3ByaXYsIHNwLCBpKTsK PiArCQlpZiAocmV0KQo+ICsJCQlyZXR1cm4gcmV0Owo+ICsKPiArCQlEUk1fREVCVUdfS01TKCJR R1YgJWQ6IERDTEs9JWQgdFJQPSVkIHRSRFBSRT0lZCB0UkFTPSVkIHRSQ0Q9JWQgdFJDPSVkXG4i LAo+ICsJCQkgICAgICBpLCBzcC0+ZGNsaywgc3AtPnRfcnAsIHNwLT50X3JkcHJlLCBzcC0+dF9y YXMsCj4gKwkJCSAgICAgIHNwLT50X3JjZCwgc3AtPnRfcmMpOwo+ICsJfQo+ICsKPiArCXJldHVy biAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGljbF9jYWxjX2J3KGludCBkY2xrLCBpbnQgbnVt LCBpbnQgZGVuKQo+ICt7Cj4gKwkvKiBtdWx0aXBsZXMgb2YgMTYuNjY2TUh6ICgxMDAvNikgKi8K PiArCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVChudW0gKiBkY2xrICogMTAwLCBkZW4gKiA2KTsK PiArfQo+ICsKPiArc3RhdGljIGludCBpY2xfc2Fndl9tYXhfZGNsayhjb25zdCBzdHJ1Y3QgaW50 ZWxfc2Fndl9pbmZvICpzaSkKPiArewo+ICsJdTE2IGRjbGsgPSAwOwo+ICsJaW50IGk7Cj4gKwo+ ICsJZm9yIChpID0gMDsgaSA8IHNpLT5udW1fcG9pbnRzOyBpKyspCj4gKwkJZGNsayA9IG1heChk Y2xrLCBzaS0+cG9pbnRzW2ldLmRjbGspOwo+ICsKPiArCXJldHVybiBkY2xrOwo+ICt9Cj4gKwo+ ICtzdHJ1Y3QgaW50ZWxfc2FfaW5mbyB7Cj4gKwl1OCBkZWJ1cnN0LCBtcGFnZXNpemUsIGRlcHJv Z2J3bGltaXQsIGRpc3BsYXlydGlkczsKPiArfTsKCmludGVsX3NhX2luZm8/IERvZXNuJ3Qgc2Vl bSB2ZXJ5IGRlc2NyaXB0aXZlLiBhbHNvIHZlcnkgY2xvc2UgdG8gCmludGVsX3NhZ3ZfaW5mbwoK PiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfc2FfaW5mbyBpY2xfc2FfaW5mbyA9IHsK PiArCS5kZWJ1cnN0ID0gOCwKPiArCS5tcGFnZXNpemUgPSAxNiwKPiArCS5kZXByb2did2xpbWl0 ID0gMjUsIC8qIEdCL3MgKi8KPiArCS5kaXNwbGF5cnRpZHMgPSAxMjgsCj4gK307Cj4gKwo+ICtz dGF0aWMgaW50IGljbF9nZXRfYndfaW5mbyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9zYWd2X2luZm8gc2kgPSB7fTsKPiArCWNvbnN0IHN0 cnVjdCBpbnRlbF9zYV9pbmZvICpzYSA9ICZpY2xfc2FfaW5mbzsKPiArCWJvb2wgaXNfeV90aWxl ID0gdHJ1ZTsgLyogYXNzdW1lIHkgdGlsZSBtYXkgYmUgdXNlZCAqLwo+ICsJaW50IG51bV9jaGFu bmVsczsKPiArCWludCBkZWludGVybGVhdmU7Cj4gKwlpbnQgaXBxZGVwdGgsIGlwcWRlcHRocGNo Owo+ICsJaW50IGRjbGtfbWF4Owo+ICsJaW50IG1heGRlYnc7Cj4gKwlpbnQgaSwgcmV0Owo+ICsK PiArCXJldCA9IGljbF9nZXRfcWd2X3BvaW50cyhkZXZfcHJpdiwgJnNpKTsKPiArCWlmIChyZXQp Cj4gKwkJcmV0dXJuIHJldDsKPiArCW51bV9jaGFubmVscyA9IHNpLm51bV9jaGFubmVsczsKPiAr Cj4gKwlkZWludGVybGVhdmUgPSBESVZfUk9VTkRfVVAobnVtX2NoYW5uZWxzLCBpc195X3RpbGUg PyA0IDogMik7Cj4gKwlkY2xrX21heCA9IGljbF9zYWd2X21heF9kY2xrKCZzaSk7Cj4gKwo+ICsJ aXBxZGVwdGhwY2ggPSAxNjsKPiArCj4gKwltYXhkZWJ3ID0gbWluKHNhLT5kZXByb2did2xpbWl0 ICogMTAwMCwKPiArCQkgICAgICBpY2xfY2FsY19idyhkY2xrX21heCwgMTYsIDEpICogNiAvIDEw KTsgLyogNjAlICovCj4gKwlpcHFkZXB0aCA9IG1pbihpcHFkZXB0aHBjaCwgc2EtPmRpc3BsYXly dGlkcyAvIG51bV9jaGFubmVscyk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUo ZGV2X3ByaXYtPm1heF9idyk7IGkrKykgewo+ICsJCXN0cnVjdCBpbnRlbF9id19pbmZvICpiaSA9 ICZkZXZfcHJpdi0+bWF4X2J3W2ldOwo+ICsJCWludCBjbHBjaGdyb3VwOwo+ICsJCWludCBqOwo+ ICsKPiArCQljbHBjaGdyb3VwID0gKHNhLT5kZWJ1cnN0ICogZGVpbnRlcmxlYXZlIC8gbnVtX2No YW5uZWxzKSA8PCBpOwo+ICsJCWJpLT5udW1fcGxhbmVzID0gKGlwcWRlcHRoIC0gY2xwY2hncm91 cCkgLyBjbHBjaGdyb3VwICsgMTsKPiArCj4gKwkJZm9yIChqID0gMDsgaiA8IHNpLm51bV9wb2lu dHM7IGorKykgewo+ICsJCQljb25zdCBzdHJ1Y3QgaW50ZWxfcWd2X3BvaW50ICpzcCA9ICZzaS5w b2ludHNbal07Cj4gKwkJCWludCBjdCwgYnc7Cj4gKwo+ICsJCQkvKgo+ICsJCQkgKiBNYXggcm93 IGN5Y2xlIHRpbWUKPiArCQkJICoKPiArCQkJICogRklYTUUgd2hhdCBpcyB0aGUgbG9naWMgYmVo aW5kIHRoZQo+ICsJCQkgKiBhc3N1bWVkIGJ1cnN0IGxlbmd0aD8KPiArCQkJICovCj4gKwkJCWN0 ID0gbWF4X3QoaW50LCBzcC0+dF9yYywgc3AtPnRfcnAgKyBzcC0+dF9yY2QgKwo+ICsJCQkJICAg KGNscGNoZ3JvdXAgLSAxKSAqIHNpLnRfYmwgKyBzcC0+dF9yZHByZSk7Cj4gKwkJCWJ3ID0gaWNs X2NhbGNfYncoc3AtPmRjbGssIGNscGNoZ3JvdXAgKiAzMiAqIG51bV9jaGFubmVscywgY3QpOwo+ ICsKPiArCQkJYmktPmRlcmF0ZWRid1tqXSA9IG1pbihtYXhkZWJ3LAo+ICsJCQkJCSAgICAgICBi dyAqIDkgLyAxMCk7IC8qIDkwJSAqLwo+ICsKPiArCQkJRFJNX0RFQlVHX0tNUygiQlclZCAvIFFH ViAlZDogbnVtX3BsYW5lcz0lZCBkZXJhdGVkYnc9JWRcbiIsCj4gKwkJCQkgICAgICBpLCBqLCBi aS0+bnVtX3BsYW5lcywgYmktPmRlcmF0ZWRid1tqXSk7Cj4gKwkJfQo+ICsKPiArCQlpZiAoYmkt Pm51bV9wbGFuZXMgPT0gMSkKPiArCQkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4g K30KPiArCj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgaWNsX21heF9idyhzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYsCj4gKwkJCSAgICAgICBpbnQgbnVtX3BsYW5lcywgaW50IHFndl9w b2ludCkKPiArewo+ICsJaW50IGk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUo ZGV2X3ByaXYtPm1heF9idyk7IGkrKykgewo+ICsJCWNvbnN0IHN0cnVjdCBpbnRlbF9id19pbmZv ICpiaSA9Cj4gKwkJCSZkZXZfcHJpdi0+bWF4X2J3W2ldOwo+ICsKPiArCQlpZiAobnVtX3BsYW5l cyA+PSBiaS0+bnVtX3BsYW5lcykKPiArCQkJcmV0dXJuIGJpLT5kZXJhdGVkYndbcWd2X3BvaW50 XTsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArdW5zaWduZWQgaW50IGludGVs X21heF9kYXRhX3JhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICsJCQkJ IGludCBudW1fcGxhbmVzKQo+ICt7Cj4gKwlpZiAoSVNfSUNFTEFLRShkZXZfcHJpdikpCj4gKwkJ LyoKPiArCQkgKiBGSVhNRSB3aXRoIFNBR1YgZGlzYWJsZWQgbWF5YmUgd2UgY2FuIGFzc3VtZQo+ ICsJCSAqIHBvaW50IDEgd2lsbCBhbHdheXMgYmUgdXNlZD8gU2VlbXMgdG8gbWF0Y2gKPiArCQkg KiB0aGUgYmVoYXZpb3VyIG9ic2VydmVkIGluIHRoZSB3aWxkLgo+ICsJCSAqLwo+ICsJCXJldHVy biBtaW4zKGljbF9tYXhfYncoZGV2X3ByaXYsIG51bV9wbGFuZXMsIDApLAo+ICsJCQkgICAgaWNs X21heF9idyhkZXZfcHJpdiwgbnVtX3BsYW5lcywgMSksCj4gKwkJCSAgICBpY2xfbWF4X2J3KGRl dl9wcml2LCBudW1fcGxhbmVzLCAyKSk7Cj4gKwllbHNlCj4gKwkJcmV0dXJuIFVJTlRfTUFYOwo+ ICt9Cj4gKwo+ICAgc3RhdGljIHZvaWQKPiAgIGludGVsX2dldF9kcmFtX2luZm8oc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICAgewo+IEBAIC0xNjU1LDYgKzE4ODIsOCBAQCBz dGF0aWMgaW50IGk5MTVfZHJpdmVyX2luaXRfaHcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQo+ICAgCSAqLwo+ICAgCWludGVsX2dldF9kcmFtX2luZm8oZGV2X3ByaXYpOwo+ICAg Cj4gKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSkKPiArCQlpY2xfZ2V0X2J3X2luZm8o ZGV2X3ByaXYpOwo+ICAgCj4gICAJcmV0dXJuIDA7Cj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmgKPiBpbmRleCA2NGZhMzUzYTYyYmIuLmQxYjljM2ZlNTgwMiAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuaAo+IEBAIC01NCw2ICs1NCw3IEBACj4gICAjaW5jbHVkZSA8ZHJtL2RybV9jYWNo ZS5oPgo+ICAgI2luY2x1ZGUgPGRybS9kcm1fdXRpbC5oPgo+ICAgI2luY2x1ZGUgPGRybS9kcm1f ZHNjLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgo+ICAgI2luY2x1ZGUgPGRybS9k cm1fY29ubmVjdG9yLmg+Cj4gICAjaW5jbHVkZSA8ZHJtL2k5MTVfbWVpX2hkY3BfaW50ZXJmYWNl Lmg+Cj4gICAKPiBAQCAtMTgzNyw2ICsxODM4LDEzIEBAIHN0cnVjdCBkcm1faTkxNV9wcml2YXRl IHsKPiAgIAkJfSB0eXBlOwo+ICAgCX0gZHJhbV9pbmZvOwo+ICAgCj4gKwlzdHJ1Y3QgaW50ZWxf YndfaW5mbyB7Cj4gKwkJaW50IG51bV9wbGFuZXM7Cj4gKwkJaW50IGRlcmF0ZWRid1szXTsKPiAr CX0gbWF4X2J3WzZdOwo+ICsKPiArCXN0cnVjdCBkcm1fcHJpdmF0ZV9vYmogYndfb2JqOwo+ICsK PiAgIAlzdHJ1Y3QgaTkxNV9ydW50aW1lX3BtIHJ1bnRpbWVfcG07Cj4gICAKPiAgIAlzdHJ1Y3Qg ewo+IEBAIC0yNzA2LDYgKzI3MTQsOCBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyBpOTE1X21jaF92 YWwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiAgIGV4dGVybiB1bnNpZ25l ZCBsb25nIGk5MTVfZ2Z4X3ZhbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ ICAgZXh0ZXJuIHZvaWQgaTkxNV91cGRhdGVfZ2Z4X3ZhbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpOwo+ICAgaW50IHZsdl9mb3JjZV9nZnhfY2xvY2soc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LCBib29sIG9uKTsKPiArdW5zaWduZWQgaW50IGludGVsX21heF9k YXRhX3JhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICsJCQkJIGludCBu dW1fcGxhbmVzKTsKPiAgIAo+ICAgdTMyIGludGVsX2NhbGN1bGF0ZV9tY3Jfc19zc19zZWxlY3Qo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiAgIAo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9yZWcuaAo+IGluZGV4IGU5N2M0N2ZjYTY0NS4uMzk5MzY2YTQxNTI0IDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X3JlZy5oCj4gQEAgLTg3NzQsNiArODc3NCw5IEBAIGVudW0gewo+ICAgI2RlZmlu ZSAgIEdFTjZfUENPREVfV1JJVEVfTUlOX0ZSRVFfVEFCTEUJMHg4Cj4gICAjZGVmaW5lICAgR0VO Nl9QQ09ERV9SRUFEX01JTl9GUkVRX1RBQkxFCTB4OQo+ICAgI2RlZmluZSAgIEdFTjZfUkVBRF9P Q19QQVJBTVMJCQkweGMKPiArI2RlZmluZSAgIElDTF9QQ09ERV9NRU1fU1VCU1lTWVNURU1fSU5G TwkweGQKPiArI2RlZmluZSAgICAgSUNMX1BDT0RFX01FTV9TU19SRUFEX0dMT0JBTF9JTkZPCSgw eDAgPDwgOCkKPiArI2RlZmluZSAgICAgSUNMX1BDT0RFX01FTV9TU19SRUFEX1FHVl9QT0lOVF9J TkZPKHBvaW50KQkoKChwb2ludCkgPDwgMTYpIHwgKDB4MSA8PCA4KSkKPiAgICNkZWZpbmUgICBH RU42X1BDT0RFX1JFQURfRF9DT01QCQkweDEwCj4gICAjZGVmaW5lICAgR0VONl9QQ09ERV9XUklU RV9EX0NPTVAJCTB4MTEKPiAgICNkZWZpbmUgICBIU1dfUENPREVfREVfV1JJVEVfRlJFUV9SRVEJ CTB4MTcKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXRvbWljX3Bs YW5lLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9hdG9taWNfcGxhbmUuYwo+IGluZGV4 IGQxMTY4MWQ3MWFkZC4uZjE0MmM1YzIyZDdlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2F0b21pY19wbGFuZS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfYXRvbWljX3BsYW5lLmMKPiBAQCAtMTE0LDYgKzExNCwyMiBAQCBpbnRlbF9wbGFuZV9k ZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAgCWRybV9hdG9taWNfaGVs cGVyX3BsYW5lX2Rlc3Ryb3lfc3RhdGUocGxhbmUsIHN0YXRlKTsKPiAgIH0KPiAgIAo+ICt1bnNp Z25lZCBpbnQgaW50ZWxfcGxhbmVfZGF0YV9yYXRlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpjcnRjX3N0YXRlLAo+ICsJCQkJICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRl ICpwbGFuZV9zdGF0ZSkKPiArewo+ICsJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIg PSBwbGFuZV9zdGF0ZS0+YmFzZS5mYjsKPiArCXVuc2lnbmVkIGludCBjcHAgPSAwOwo+ICsJaW50 IGk7Cj4gKwo+ICsJaWYgKCFwbGFuZV9zdGF0ZS0+YmFzZS52aXNpYmxlKQo+ICsJCXJldHVybiAw Owo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBmYi0+Zm9ybWF0LT5udW1fcGxhbmVzOyBpKyspCj4g KwkJY3BwICs9IGZiLT5mb3JtYXQtPmNwcFtpXTsKPiArCj4gKwlyZXR1cm4gY3BwICogY3J0Y19z dGF0ZS0+cGl4ZWxfcmF0ZTsKPiArfQo+ICsKPiAgIGludCBpbnRlbF9wbGFuZV9hdG9taWNfY2hl Y2tfd2l0aF9zdGF0ZShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3Rh dGUsCj4gICAJCQkJCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpuZXdfY3J0Y19zdGF0ZSwKPiAg IAkJCQkJY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpvbGRfcGxhbmVfc3RhdGUsCj4g QEAgLTEyNSw2ICsxNDEsNyBAQCBpbnQgaW50ZWxfcGxhbmVfYXRvbWljX2NoZWNrX3dpdGhfc3Rh dGUoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm9sZF9jcnRjXwo+ICAgCW5ld19jcnRj X3N0YXRlLT5hY3RpdmVfcGxhbmVzICY9IH5CSVQocGxhbmUtPmlkKTsKPiAgIAluZXdfY3J0Y19z dGF0ZS0+bnYxMl9wbGFuZXMgJj0gfkJJVChwbGFuZS0+aWQpOwo+ICAgCW5ld19jcnRjX3N0YXRl LT5jOF9wbGFuZXMgJj0gfkJJVChwbGFuZS0+aWQpOwo+ICsJbmV3X2NydGNfc3RhdGUtPmRhdGFf cmF0ZVtwbGFuZS0+aWRdID0gMDsKPiAgIAluZXdfcGxhbmVfc3RhdGUtPmJhc2UudmlzaWJsZSA9 IGZhbHNlOwo+ICAgCj4gICAJaWYgKCFuZXdfcGxhbmVfc3RhdGUtPmJhc2UuY3J0YyAmJiAhb2xk X3BsYW5lX3N0YXRlLT5iYXNlLmNydGMpCj4gQEAgLTE0OSw2ICsxNjYsOSBAQCBpbnQgaW50ZWxf cGxhbmVfYXRvbWljX2NoZWNrX3dpdGhfc3RhdGUoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKm9sZF9jcnRjXwo+ICAgCWlmIChuZXdfcGxhbmVfc3RhdGUtPmJhc2UudmlzaWJsZSB8fCBv bGRfcGxhbmVfc3RhdGUtPmJhc2UudmlzaWJsZSkKPiAgIAkJbmV3X2NydGNfc3RhdGUtPnVwZGF0 ZV9wbGFuZXMgfD0gQklUKHBsYW5lLT5pZCk7Cj4gICAKPiArCW5ld19jcnRjX3N0YXRlLT5kYXRh X3JhdGVbcGxhbmUtPmlkXSA9Cj4gKwkJaW50ZWxfcGxhbmVfZGF0YV9yYXRlKG5ld19jcnRjX3N0 YXRlLCBuZXdfcGxhbmVfc3RhdGUpOwo+ICsKPiAgIAlyZXR1cm4gaW50ZWxfcGxhbmVfYXRvbWlj X2NhbGNfY2hhbmdlcyhvbGRfY3J0Y19zdGF0ZSwKPiAgIAkJCQkJICAgICAgICZuZXdfY3J0Y19z dGF0ZS0+YmFzZSwKPiAgIAkJCQkJICAgICAgIG9sZF9wbGFuZV9zdGF0ZSwKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXRvbWljX3BsYW5lLmggYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9hdG9taWNfcGxhbmUuaAo+IGluZGV4IDE0Njc4NjIwNDQwZi4uMGE5 NjUxMzc2ZDBlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2F0b21p Y19wbGFuZS5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXRvbWljX3BsYW5l LmgKPiBAQCAtMTUsNiArMTUsOCBAQCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGU7Cj4gICAKPiAg IGV4dGVybiBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2hlbHBlcl9mdW5jcyBpbnRlbF9wbGFuZV9o ZWxwZXJfZnVuY3M7Cj4gICAKPiArdW5zaWduZWQgaW50IGludGVsX3BsYW5lX2RhdGFfcmF0ZShj b25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiArCQkJCSAgIGNvbnN0 IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpOwo+ICAgdm9pZCBpbnRlbF91 cGRhdGVfcGxhbmUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKPiAgIAkJCWNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ICAgCQkJY29uc3Qgc3RydWN0IGludGVs X3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2J3LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9idy5jCj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjMwNGJmODdmMGEyZQo+IC0t LSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9idy5jCj4gQEAg LTAsMCArMSwxODEgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAo+ICsvKgo+ ICsgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKi8KPiArCj4gKyNp bmNsdWRlIDxkcm0vZHJtX2F0b21pY19zdGF0ZV9oZWxwZXIuaD4KPiArCj4gKyNpbmNsdWRlICJp bnRlbF9idy5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfZHJ2LmgiCj4gKwo+ICtzdGF0aWMgdW5zaWdu ZWQgaW50IGludGVsX2J3X2NydGNfbnVtX2FjdGl2ZV9wbGFuZXMoY29uc3Qgc3RydWN0IGludGVs X2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4gK3sKPiArCS8qCj4gKwkgKiBXZSBhc3N1bWUgY3Vy c29ycyBhcmUgc21hbGwgZW5vdWdoCj4gKwkgKiB0byBub3Qgbm90IGNhdXNlIGJhbmR3aWR0aCBw cm9ibGVtcy4KPiArCSAqLwo+ICsJcmV0dXJuIGh3ZWlnaHQ4KGNydGNfc3RhdGUtPmFjdGl2ZV9w bGFuZXMgJiB+QklUKFBMQU5FX0NVUlNPUikpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdW5zaWduZWQg aW50IGludGVsX2J3X2NydGNfZGF0YV9yYXRlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpjcnRjX3N0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVs X2NydGMoY3J0Y19zdGF0ZS0+YmFzZS5jcnRjKTsKPiArCXVuc2lnbmVkIGludCBkYXRhX3JhdGUg PSAwOwo+ICsJZW51bSBwbGFuZV9pZCBwbGFuZV9pZDsKPiArCj4gKwlmb3JfZWFjaF9wbGFuZV9p ZF9vbl9jcnRjKGNydGMsIHBsYW5lX2lkKSB7Cj4gKwkJLyoKPiArCQkgKiBXZSBhc3N1bWUgY3Vy c29ycyBhcmUgc21hbGwgZW5vdWdoCj4gKwkJICogdG8gbm90IG5vdCBjYXVzZSBiYW5kd2lkdGgg cHJvYmxlbXMuCj4gKwkJICovCj4gKwkJaWYgKHBsYW5lX2lkID09IFBMQU5FX0NVUlNPUikKPiAr CQkJY29udGludWU7Cj4gKwo+ICsJCWRhdGFfcmF0ZSArPSBjcnRjX3N0YXRlLT5kYXRhX3JhdGVb cGxhbmVfaWRdOwo+ICsJfQo+ICsKPiArCXJldHVybiBkYXRhX3JhdGU7Cj4gK30KPiArCj4gK3Zv aWQgaW50ZWxfYndfY3J0Y191cGRhdGUoc3RydWN0IGludGVsX2J3X3N0YXRlICpid19zdGF0ZSwK PiArCQkJICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiArewo+ ICsJc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPmJh c2UuY3J0Yyk7Cj4gKwo+ICsJYndfc3RhdGUtPmRhdGFfcmF0ZVtjcnRjLT5waXBlXSA9Cj4gKwkJ aW50ZWxfYndfY3J0Y19kYXRhX3JhdGUoY3J0Y19zdGF0ZSk7Cj4gKwlid19zdGF0ZS0+bnVtX2Fj dGl2ZV9wbGFuZXNbY3J0Yy0+cGlwZV0gPQo+ICsJCWludGVsX2J3X2NydGNfbnVtX2FjdGl2ZV9w bGFuZXMoY3J0Y19zdGF0ZSk7Cj4gKwo+ICsJRFJNX0RFQlVHX0tNUygicGlwZSAlYyBkYXRhIHJh dGUgJXUgbnVtIGFjdGl2ZSBwbGFuZXMgJXVcbiIsCj4gKwkJICAgICAgcGlwZV9uYW1lKGNydGMt PnBpcGUpLAo+ICsJCSAgICAgIGJ3X3N0YXRlLT5kYXRhX3JhdGVbY3J0Yy0+cGlwZV0sCj4gKwkJ ICAgICAgYndfc3RhdGUtPm51bV9hY3RpdmVfcGxhbmVzW2NydGMtPnBpcGVdKTsKPiArfQo+ICsK PiArc3RhdGljIHVuc2lnbmVkIGludCBpbnRlbF9id19udW1fYWN0aXZlX3BsYW5lcyhzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gKwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBp bnRlbF9id19zdGF0ZSAqYndfc3RhdGUpCj4gK3sKPiArCXVuc2lnbmVkIGludCBudW1fYWN0aXZl X3BsYW5lcyA9IDA7Cj4gKwllbnVtIHBpcGUgcGlwZTsKPiArCj4gKwlmb3JfZWFjaF9waXBlKGRl dl9wcml2LCBwaXBlKQo+ICsJCW51bV9hY3RpdmVfcGxhbmVzICs9IGJ3X3N0YXRlLT5udW1fYWN0 aXZlX3BsYW5lc1twaXBlXTsKPiArCj4gKwlyZXR1cm4gbnVtX2FjdGl2ZV9wbGFuZXM7Cj4gK30K PiArCj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgaW50ZWxfYndfZGF0YV9yYXRlKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiArCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxf Yndfc3RhdGUgKmJ3X3N0YXRlKQo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQgZGF0YV9yYXRlID0gMDsK PiArCWVudW0gcGlwZSBwaXBlOwo+ICsKPiArCWZvcl9lYWNoX3BpcGUoZGV2X3ByaXYsIHBpcGUp Cj4gKwkJZGF0YV9yYXRlICs9IGJ3X3N0YXRlLT5kYXRhX3JhdGVbcGlwZV07Cj4gKwo+ICsJcmV0 dXJuIGRhdGFfcmF0ZTsKPiArfQo+ICsKPiAraW50IGludGVsX2J3X2F0b21pY19jaGVjayhzdHJ1 Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShzdGF0ZS0+YmFzZS5kZXYpOwo+ICsJc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKm5ld19jcnRjX3N0YXRlLCAqb2xkX2NydGNfc3RhdGU7Cj4gKwlzdHJ1 Y3QgaW50ZWxfYndfc3RhdGUgKmJ3X3N0YXRlID0gTlVMTDsKPiArCXVuc2lnbmVkIGludCBkYXRh X3JhdGUsIG1heF9kYXRhX3JhdGU7Cj4gKwl1bnNpZ25lZCBpbnQgbnVtX2FjdGl2ZV9wbGFuZXM7 Cj4gKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YzsKPiArCWludCBpOwo+ICsKPiArCS8qIEZJWE1F IGVhcmxpZXIgZ2VucyBuZWVkIHNvbWUgY2hlY2tzIHRvbyAqLwo+ICsJaWYgKElOVEVMX0dFTihk ZXZfcHJpdikgPCAxMSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlmb3JfZWFjaF9vbGRuZXdfaW50 ZWxfY3J0Y19pbl9zdGF0ZShzdGF0ZSwgY3J0Yywgb2xkX2NydGNfc3RhdGUsCj4gKwkJCQkJICAg IG5ld19jcnRjX3N0YXRlLCBpKSB7Cj4gKwkJdW5zaWduZWQgaW50IG9sZF9kYXRhX3JhdGUgPQo+ ICsJCQlpbnRlbF9id19jcnRjX2RhdGFfcmF0ZShvbGRfY3J0Y19zdGF0ZSk7Cj4gKwkJdW5zaWdu ZWQgaW50IG5ld19kYXRhX3JhdGUgPQo+ICsJCQlpbnRlbF9id19jcnRjX2RhdGFfcmF0ZShuZXdf Y3J0Y19zdGF0ZSk7Cj4gKwkJdW5zaWduZWQgaW50IG9sZF9hY3RpdmVfcGxhbmVzID0KPiArCQkJ aW50ZWxfYndfY3J0Y19udW1fYWN0aXZlX3BsYW5lcyhvbGRfY3J0Y19zdGF0ZSk7Cj4gKwkJdW5z aWduZWQgaW50IG5ld19hY3RpdmVfcGxhbmVzID0KPiArCQkJaW50ZWxfYndfY3J0Y19udW1fYWN0 aXZlX3BsYW5lcyhuZXdfY3J0Y19zdGF0ZSk7Cj4gKwo+ICsJCS8qCj4gKwkJICogQXZvaWQgbG9j a2luZyB0aGUgYncgc3RhdGUgd2hlbgo+ICsJCSAqIG5vdGhpbmcgc2lnbmlmaWNhbnQgaGFzIGNo YW5nZWQuCj4gKwkJICovCj4gKwkJaWYgKG9sZF9kYXRhX3JhdGUgPT0gbmV3X2RhdGFfcmF0ZSAm Jgo+ICsJCSAgICBvbGRfYWN0aXZlX3BsYW5lcyA9PSBuZXdfYWN0aXZlX3BsYW5lcykKPiArCQkJ Y29udGludWU7Cj4gKwo+ICsJCWJ3X3N0YXRlICA9IGludGVsX2F0b21pY19nZXRfYndfc3RhdGUo c3RhdGUpOwo+ICsJCWlmIChJU19FUlIoYndfc3RhdGUpKQo+ICsJCQlyZXR1cm4gUFRSX0VSUihi d19zdGF0ZSk7Cj4gKwo+ICsJCWJ3X3N0YXRlLT5kYXRhX3JhdGVbY3J0Yy0+cGlwZV0gPSBuZXdf ZGF0YV9yYXRlOwo+ICsJCWJ3X3N0YXRlLT5udW1fYWN0aXZlX3BsYW5lc1tjcnRjLT5waXBlXSA9 IG5ld19hY3RpdmVfcGxhbmVzOwo+ICsKPiArCQlEUk1fREVCVUdfS01TKCJwaXBlICVjIGRhdGEg cmF0ZSAldSBudW0gYWN0aXZlIHBsYW5lcyAldVxuIiwKPiArCQkJICAgICAgcGlwZV9uYW1lKGNy dGMtPnBpcGUpLAo+ICsJCQkgICAgICBid19zdGF0ZS0+ZGF0YV9yYXRlW2NydGMtPnBpcGVdLAo+ ICsJCQkgICAgICBid19zdGF0ZS0+bnVtX2FjdGl2ZV9wbGFuZXNbY3J0Yy0+cGlwZV0pOwo+ICsJ fQo+ICsKPiArCWlmICghYndfc3RhdGUpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJZGF0YV9yYXRl ID0gaW50ZWxfYndfZGF0YV9yYXRlKGRldl9wcml2LCBid19zdGF0ZSk7Cj4gKwludW1fYWN0aXZl X3BsYW5lcyA9IGludGVsX2J3X251bV9hY3RpdmVfcGxhbmVzKGRldl9wcml2LCBid19zdGF0ZSk7 Cj4gKwo+ICsJbWF4X2RhdGFfcmF0ZSA9IGludGVsX21heF9kYXRhX3JhdGUoZGV2X3ByaXYsIG51 bV9hY3RpdmVfcGxhbmVzKTsKPiArCj4gKwlkYXRhX3JhdGUgPSBESVZfUk9VTkRfVVAoZGF0YV9y YXRlLCAxMDAwKTsKPiArCj4gKwlpZiAoZGF0YV9yYXRlID4gbWF4X2RhdGFfcmF0ZSkgewo+ICsJ CURSTV9ERUJVR19LTVMoIkJhbmR3aWR0aCAldSBNQi9zIGV4Y2VlZHMgbWF4IGF2YWlsYWJsZSAl ZCBNQi9zICglZCBhY3RpdmUgcGxhbmVzKVxuIiwKPiArCQkJICAgICAgZGF0YV9yYXRlLCBtYXhf ZGF0YV9yYXRlLCBudW1fYWN0aXZlX3BsYW5lcyk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9 Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX3ByaXZhdGVf c3RhdGUgKmludGVsX2J3X2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX3ByaXZhdGVfb2JqICpv YmopCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9id19zdGF0ZSAqc3RhdGU7Cj4gKwo+ICsJc3RhdGUg PSBrbWVtZHVwKG9iai0+c3RhdGUsIHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKPiArCWlm ICghc3RhdGUpCj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwo+ICsJX19kcm1fYXRvbWljX2hlbHBlcl9w cml2YXRlX29ial9kdXBsaWNhdGVfc3RhdGUob2JqLCAmc3RhdGUtPmJhc2UpOwo+ICsKPiArCXJl dHVybiAmc3RhdGUtPmJhc2U7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGludGVsX2J3X2Rlc3Ry b3lfc3RhdGUoc3RydWN0IGRybV9wcml2YXRlX29iaiAqb2JqLAo+ICsJCQkJICAgc3RydWN0IGRy bV9wcml2YXRlX3N0YXRlICpzdGF0ZSkKPiArewo+ICsJa2ZyZWUoc3RhdGUpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wcml2YXRlX3N0YXRlX2Z1bmNzIGludGVsX2J3X2Z1 bmNzID0gewo+ICsJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBpbnRlbF9id19kdXBsaWNhdGVf c3RhdGUsCj4gKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBpbnRlbF9id19kZXN0cm95X3N0YXRl LAo+ICt9Owo+ICsKPiAraW50IGludGVsX2J3X2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfYndfc3RhdGUgKnN0YXRlOwo+ICsKPiAr CXN0YXRlID0ga3phbGxvYyhzaXplb2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXN0 YXRlKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWRybV9hdG9taWNfcHJpdmF0ZV9vYmpf aW5pdCgmZGV2X3ByaXYtPmRybSwgJmRldl9wcml2LT5id19vYmosCj4gKwkJCQkgICAgJnN0YXRl LT5iYXNlLCAmaW50ZWxfYndfZnVuY3MpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2J3LmggYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9idy5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAw MDAuLmMxNDI3MmNhNWI1OQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9idy5oCj4gQEAgLTAsMCArMSw0NiBAQAo+ICsvKiBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogTUlUICovCj4gKy8qCj4gKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBv cmF0aW9uCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfX0lOVEVMX0JXX0hfXwo+ICsjZGVmaW5lIF9f SU5URUxfQldfSF9fCj4gKwo+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KPiArCj4gKyNp bmNsdWRlICJpOTE1X2Rydi5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfZGlzcGxheS5oIgo+ICsKPiAr c3RydWN0IGRybV9pOTE1X3ByaXZhdGU7Cj4gK3N0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGU7Cj4g K3N0cnVjdCBpbnRlbF9jcnRjX3N0YXRlOwo+ICsKPiArc3RydWN0IGludGVsX2J3X3N0YXRlIHsK PiArCXN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZSBiYXNlOwo+ICsKPiArCXVuc2lnbmVkIGludCBk YXRhX3JhdGVbSTkxNV9NQVhfUElQRVNdOwo+ICsJdTggbnVtX2FjdGl2ZV9wbGFuZXNbSTkxNV9N QVhfUElQRVNdOwo+ICt9Owo+ICsKPiArI2RlZmluZSB0b19pbnRlbF9id19zdGF0ZSh4KSBjb250 YWluZXJfb2YoKHgpLCBzdHJ1Y3QgaW50ZWxfYndfc3RhdGUsIGJhc2UpCj4gKwo+ICtzdGF0aWMg aW5saW5lIHN0cnVjdCBpbnRlbF9id19zdGF0ZSAqCj4gK2ludGVsX2F0b21pY19nZXRfYndfc3Rh dGUoc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUpCj4gK3sKPiArCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoc3RhdGUtPmJhc2UuZGV2KTsKPiArCXN0 cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZSAqYndfc3RhdGU7Cj4gKwo+ICsJYndfc3RhdGUgPSBkcm1f YXRvbWljX2dldF9wcml2YXRlX29ial9zdGF0ZSgmc3RhdGUtPmJhc2UsCj4gKwkJCQkJCSAgICAm ZGV2X3ByaXYtPmJ3X29iaik7Cj4gKwlpZiAoSVNfRVJSKGJ3X3N0YXRlKSkKPiArCQlyZXR1cm4g RVJSX0NBU1QoYndfc3RhdGUpOwo+ICsKPiArCXJldHVybiB0b19pbnRlbF9id19zdGF0ZShid19z dGF0ZSk7Cj4gK30KPiArCj4gK2ludCBpbnRlbF9id19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdik7Cj4gK2ludCBpbnRlbF9id19hdG9taWNfY2hlY2soc3RydWN0IGludGVs X2F0b21pY19zdGF0ZSAqc3RhdGUpOwo+ICt2b2lkIGludGVsX2J3X2NydGNfdXBkYXRlKHN0cnVj dCBpbnRlbF9id19zdGF0ZSAqYndfc3RhdGUsCj4gKwkJCSAgY29uc3Qgc3RydWN0IGludGVsX2Ny dGNfc3RhdGUgKmNydGNfc3RhdGUpOwo+ICsKPiArI2VuZGlmIC8qIF9fSU5URUxfQldfSF9fICov Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+IGluZGV4IGQ4MWVjODBlMzRmNi4u YTk1NTg0MGI3M2NiIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rp c3BsYXkuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+IEBA IC01MCw2ICs1MCw3IEBACj4gICAjaW5jbHVkZSAiaW50ZWxfYWNwaS5oIgo+ICAgI2luY2x1ZGUg ImludGVsX2F0b21pYy5oIgo+ICAgI2luY2x1ZGUgImludGVsX2F0b21pY19wbGFuZS5oIgo+ICsj aW5jbHVkZSAiaW50ZWxfYncuaCIKPiAgICNpbmNsdWRlICJpbnRlbF9jb2xvci5oIgo+ICAgI2lu Y2x1ZGUgImludGVsX2NkY2xrLmgiCj4gICAjaW5jbHVkZSAiaW50ZWxfY3J0LmgiCj4gQEAgLTI4 NjMsNiArMjg2NCw3IEBAIHN0YXRpYyB2b2lkIGludGVsX3BsYW5lX2Rpc2FibGVfbm9hdG9taWMo c3RydWN0IGludGVsX2NydGMgKmNydGMsCj4gICAKPiAgIAlpbnRlbF9zZXRfcGxhbmVfdmlzaWJs ZShjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSwgZmFsc2UpOwo+ICAgCWZpeHVwX2FjdGl2ZV9wbGFu ZXMoY3J0Y19zdGF0ZSk7Cj4gKwljcnRjX3N0YXRlLT5kYXRhX3JhdGVbcGxhbmUtPmlkXSA9IDA7 Cj4gICAKPiAgIAlpZiAocGxhbmUtPmlkID09IFBMQU5FX1BSSU1BUlkpCj4gICAJCWludGVsX3By ZV9kaXNhYmxlX3ByaW1hcnlfbm9hdG9taWMoJmNydGMtPmJhc2UpOwo+IEBAIC02NTkwLDYgKzY1 OTIsOCBAQCBzdGF0aWMgdm9pZCBpbnRlbF9jcnRjX2Rpc2FibGVfbm9hdG9taWMoc3RydWN0IGRy bV9jcnRjICpjcnRjLAo+ICAgCXN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyOwo+ICAgCXN0 cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKPiAgIAlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmRldik7Cj4g KwlzdHJ1Y3QgaW50ZWxfYndfc3RhdGUgKmJ3X3N0YXRlID0KPiArCQl0b19pbnRlbF9id19zdGF0 ZShkZXZfcHJpdi0+Yndfb2JqLnN0YXRlKTsKPiAgIAllbnVtIGludGVsX2Rpc3BsYXlfcG93ZXJf ZG9tYWluIGRvbWFpbjsKPiAgIAlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lOwo+ICAgCXU2NCBk b21haW5zOwo+IEBAIC02NjUyLDYgKzY2NTYsOSBAQCBzdGF0aWMgdm9pZCBpbnRlbF9jcnRjX2Rp c2FibGVfbm9hdG9taWMoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICAgCWRldl9wcml2LT5hY3Rp dmVfY3J0Y3MgJj0gfigxIDw8IGludGVsX2NydGMtPnBpcGUpOwo+ICAgCWRldl9wcml2LT5taW5f Y2RjbGtbaW50ZWxfY3J0Yy0+cGlwZV0gPSAwOwo+ICAgCWRldl9wcml2LT5taW5fdm9sdGFnZV9s ZXZlbFtpbnRlbF9jcnRjLT5waXBlXSA9IDA7Cj4gKwo+ICsJYndfc3RhdGUtPmRhdGFfcmF0ZVtp bnRlbF9jcnRjLT5waXBlXSA9IDA7Cj4gKwlid19zdGF0ZS0+bnVtX2FjdGl2ZV9wbGFuZXNbaW50 ZWxfY3J0Yy0+cGlwZV0gPSAwOwo+ICAgfQo+ICAgCj4gICAvKgo+IEBAIC0xMTE3Niw2ICsxMTE4 Myw3IEBAIGludCBpbnRlbF9wbGFuZV9hdG9taWNfY2FsY19jaGFuZ2VzKGNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0Cj4gICAJaWYgKCFpc19jcnRjX2VuYWJsZWQp IHsKPiAgIAkJcGxhbmVfc3RhdGUtPnZpc2libGUgPSB2aXNpYmxlID0gZmFsc2U7Cj4gICAJCXRv X2ludGVsX2NydGNfc3RhdGUoY3J0Y19zdGF0ZSktPmFjdGl2ZV9wbGFuZXMgJj0gfkJJVChwbGFu ZS0+aWQpOwo+ICsJCXRvX2ludGVsX2NydGNfc3RhdGUoY3J0Y19zdGF0ZSktPmRhdGFfcmF0ZVtw bGFuZS0+aWRdID0gMDsKPiAgIAl9Cj4gICAKPiAgIAlpZiAoIXdhc192aXNpYmxlICYmICF2aXNp YmxlKQo+IEBAIC0xMzI5Niw3ICsxMzMwNCwxNSBAQCBzdGF0aWMgaW50IGludGVsX2F0b21pY19j aGVjayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAgCQlyZXR1cm4gcmV0Owo+ICAgCj4gICAJ aW50ZWxfZmJjX2Nob29zZV9jcnRjKGRldl9wcml2LCBpbnRlbF9zdGF0ZSk7Cj4gLQlyZXR1cm4g Y2FsY193YXRlcm1hcmtfZGF0YShpbnRlbF9zdGF0ZSk7Cj4gKwlyZXQgPSBjYWxjX3dhdGVybWFy a19kYXRhKGludGVsX3N0YXRlKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4g KwlyZXQgPSBpbnRlbF9id19hdG9taWNfY2hlY2soaW50ZWxfc3RhdGUpOwpUaGlzIHNob3VsZCBi ZSBiZWZvcmUgY2FsY193YXRlcm1hcmtfZGF0YS4gSWYgd2UgZG9uJ3QgaGF2ZSB0aGUgCmJhbmR3 aWR0aCB3aHkgY2FsY3VsYXRlIHRoZSBXTXMuCj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7 Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyBpbnQgaW50ZWxfYXRvbWlj X3ByZXBhcmVfY29tbWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gQEAgLTE1Njk2LDYgKzE1 NzEyLDEwIEBAIGludCBpbnRlbF9tb2Rlc2V0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikK PiAgIAo+ICAgCWRybV9tb2RlX2NvbmZpZ19pbml0KGRldik7Cj4gICAKPiArCXJldCA9IGludGVs X2J3X2luaXQoZGV2X3ByaXYpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiAg IAlkZXYtPm1vZGVfY29uZmlnLm1pbl93aWR0aCA9IDA7Cj4gICAJZGV2LT5tb2RlX2NvbmZpZy5t aW5faGVpZ2h0ID0gMDsKPiAgIAo+IEBAIC0xNjMxOCw4ICsxNjMzOCwxMSBAQCBzdGF0aWMgdm9p ZCBpbnRlbF9tb2Rlc2V0X3JlYWRvdXRfaHdfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikK PiAgIAlkcm1fY29ubmVjdG9yX2xpc3RfaXRlcl9lbmQoJmNvbm5faXRlcik7Cj4gICAKPiAgIAlm b3JfZWFjaF9pbnRlbF9jcnRjKGRldiwgY3J0Yykgewo+ICsJCXN0cnVjdCBpbnRlbF9id19zdGF0 ZSAqYndfc3RhdGUgPQo+ICsJCQl0b19pbnRlbF9id19zdGF0ZShkZXZfcHJpdi0+Yndfb2JqLnN0 YXRlKTsKPiAgIAkJc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUgPQo+ICAgCQkJ dG9faW50ZWxfY3J0Y19zdGF0ZShjcnRjLT5iYXNlLnN0YXRlKTsKPiArCQlzdHJ1Y3QgaW50ZWxf cGxhbmUgKnBsYW5lOwo+ICAgCQlpbnQgbWluX2NkY2xrID0gMDsKPiAgIAo+ICAgCQltZW1zZXQo JmNydGMtPmJhc2UubW9kZSwgMCwgc2l6ZW9mKGNydGMtPmJhc2UubW9kZSkpOwo+IEBAIC0xNjM1 OCw2ICsxNjM4MSwyMSBAQCBzdGF0aWMgdm9pZCBpbnRlbF9tb2Rlc2V0X3JlYWRvdXRfaHdfc3Rh dGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgIAkJZGV2X3ByaXYtPm1pbl92b2x0YWdlX2xl dmVsW2NydGMtPnBpcGVdID0KPiAgIAkJCWNydGNfc3RhdGUtPm1pbl92b2x0YWdlX2xldmVsOwo+ ICAgCj4gKwkJZm9yX2VhY2hfaW50ZWxfcGxhbmVfb25fY3J0YygmZGV2X3ByaXYtPmRybSwgY3J0 YywgcGxhbmUpIHsKPiArCQkJY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9z dGF0ZSA9Cj4gKwkJCQl0b19pbnRlbF9wbGFuZV9zdGF0ZShwbGFuZS0+YmFzZS5zdGF0ZSk7Cj4g Kwo+ICsJCQkvKgo+ICsJCQkgKiBGSVhNRSBkb24ndCBoYXZlIHRoZSBmYiB5ZXQsIHNvIGNhbid0 Cj4gKwkJCSAqIHVzZSBpbnRlbF9wbGFuZV9kYXRhX3JhdGUoKSA6KAo+ICsJCQkgKi8KPiArCQkJ aWYgKHBsYW5lX3N0YXRlLT5iYXNlLnZpc2libGUpCj4gKwkJCQljcnRjX3N0YXRlLT5kYXRhX3Jh dGVbcGxhbmUtPmlkXSA9Cj4gKwkJCQkJNCAqIGNydGNfc3RhdGUtPnBpeGVsX3JhdGU7Cj4gKwkJ fQo+ICsKPiArCQlpbnRlbF9id19jcnRjX3VwZGF0ZShid19zdGF0ZSwgY3J0Y19zdGF0ZSk7Cj4g Kwo+ICAgCQlpbnRlbF9waXBlX2NvbmZpZ19zYW5pdHlfY2hlY2soZGV2X3ByaXYsIGNydGNfc3Rh dGUpOwo+ICAgCX0KPiAgIH0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+IGluZGV4IDQwNDll MDNkMmMwZC4uNDdmNTUxNjAxYTA1IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2Rydi5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiBA QCAtODg1LDYgKzg4NSw4IEBAIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlIHsKPiAgIAo+ICAgCXN0 cnVjdCBpbnRlbF9jcnRjX3dtX3N0YXRlIHdtOwo+ICAgCj4gKwl1MzIgZGF0YV9yYXRlW0k5MTVf TUFYX1BMQU5FU107Cj4gKwo+ICAgCS8qIEdhbW1hIG1vZGUgcHJvZ3JhbW1lZCBvbiB0aGUgcGlw ZSAqLwo+ICAgCXUzMiBnYW1tYV9tb2RlOwo+ICAgCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2ludGVsLWdmeA==