From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v3 2/2] drm/i915: Make sure we have enough memory bandwidth on ICL Date: Mon, 13 May 2019 17:16:17 +0300 Message-ID: <20190513141617.GP24299@intel.com> References: <20190503190831.1759-1-ville.syrjala@linux.intel.com> <20190503190831.1759-2-ville.syrjala@linux.intel.com> <5824e3c4eea47fbbef262a9fdbfe90c7012eacb0.camel@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id 407E089DFD for ; Mon, 13 May 2019 14:16:20 +0000 (UTC) Content-Disposition: inline In-Reply-To: <5824e3c4eea47fbbef262a9fdbfe90c7012eacb0.camel@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "Sripada, Radhakrishna" Cc: "intel-gfx@lists.freedesktop.org" List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCBNYXkgMDgsIDIwMTkgYXQgMDk6MDU6MDZQTSArMDAwMCwgU3JpcGFkYSwgUmFkaGFr cmlzaG5hIHdyb3RlOgo+IE9uIEZyaSwgMjAxOS0wNS0wMyBhdCAyMjowOCArMDMwMCwgVmlsbGUg U3lyamFsYSB3cm90ZToKPiA+IEZyb206IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBs aW51eC5pbnRlbC5jb20+Cj4gPiAKPiA+IElDTCBoYXMgc28gbWFueSBwbGFuZXMgdGhhdCBpdCBj YW4gZWFzaWx5IGV4Y2VlZCB0aGUgbWF4aW11bQo+ID4gZWZmZWN0aXZlIG1lbW9yeSBiYW5kd2lk dGggb2YgdGhlIHN5c3RlbS4gV2UgbXVzdCB0aGVyZWZvcmUgY2hlY2sKPiA+IHRoYXQgd2UgZG9u J3QgZXhjZWVkIHRoYXQgbGltaXQuCj4gPiAKPiA+IFRoZSBhbGdvcml0aG0gaXMgdmVyeSBtYWdp YyBudW1iZXIgaGVhdnkgYW5kIGxhY2tzIHN1ZmZpY2llbnQKPiA+IGV4cGxhbmF0aW9uIGZvciBu b3cuIFdlIGFsc28gaGF2ZSBubyBzYW5lIHdheSB0byBxdWVyeSB0aGUKPiA+IG1lbW9yeSBjbG9j ayBhbmQgdGltaW5ncywgc28gd2UgbXVzdCByZWx5IG9uIGEgY29tYmluYXRpb24gb2YKPiA+IHJh dyByZWFkb3V0IGZyb20gdGhlIG1lbW9yeSBjb250cm9sbGVyIGFuZCBoYXJkY29kZWQgYXNzdW1w dGlvbnMuCj4gPiBUaGUgbWVtb3J5IGNvbnRyb2xsZXIgdmFsdWVzIG9idmlvdXNseSBjaGFuZ2Ug YXMgdGhlIHN5c3RlbQo+ID4ganVtcHMgYmV0d2VlbiB0aGUgZGlmZmVyZW50IFNBR1YgcG9pbnRz LCBzbyB3ZSB0cnkgdG8gc3RhYmlsaXplCj4gPiBpdCBmaXJzdCBieSBkaXNhYmxpbmcgU0FHViBm b3IgdGhlIGR1cmF0aW9uIG9mIHRoZSByZWFkb3V0Lgo+ID4gCj4gPiBUaGUgdXRpbGl6ZWQgYmFu ZHdpZHRoIGlzIHRyYWNrZWQgdmlhIGEgZGV2aWNlIHdpZGUgYXRvbWljCj4gPiBwcml2YXRlIG9i amVjdC4gVGhhdCBpcyBhY3R1YWxseSBub3Qgcm9idXN0IGJlY2F1c2Ugd2UgY2FuJ3QKPiA+IGFm Zm9yZCB0byBlbmZvcmNlIHN0cmljdCBnbG9iYWwgb3JkZXJpbmcgYmV0d2VlbiB0aGUgcGlwZXMu Cj4gPiBUaHVzIEkgdGhpbmsgSSdsbCBuZWVkIHRvIGNoYW5nZSB0aGlzIHRvIHNpbXBseSBjaG9w IHVwIHRoZQo+ID4gYXZhaWxhYmxlIGJhbmR3aWR0aCBiZXR3ZWVuIGFsbCB0aGUgYWN0aXZlIHBp cGVzLiBFYWNoIHBpcGUKPiA+IGNhbiB0aGVuIGRvIHdoYXRldmVyIGl0IHdhbnRzIGFzIGxvbmcg YXMgaXQgZG9lc24ndCBleGNlZWQKPiA+IGl0cyBidWRnZXQuIFRoYXQgc2NoZW1lIHdpbGwgYWxz byByZXF1aXJlIHRoYXQgd2UgYXNzdW1lIHRoYXQKPiA+IGFueSBudW1iZXIgb2YgcGxhbmVzIGNv dWxkIGJlIGFjdGl2ZSBhdCBhbnkgdGltZS4KPiA+IAo+ID4gVE9ETzogbWFrZSBpdCByb2J1c3Qg YW5kIGRlYWwgd2l0aCBhbGwgdGhlIG9wZW4gcXVlc3Rpb25zCj4gPiAKPiA+IHYyOiBTbGVlcCBs b25nZXIgYWZ0ZXIgZGlzYWJsaW5nIFNBR1YKPiA+IHYzOiBQb2xsIGZvciB0aGUgZGNsayB0byBn ZXQgcmFpc2VkIChzZWVuIGl0IHRha2UgMjUwbXMhKQo+ID4gICAgIElmIHRoZSBzeXN0ZW0gaGFz IDIxMzNNVC9zIG1lbW9yeSB0aGVuIHdlIHBvaW50bGVzc2x5Cj4gPiAgICAgd2FpdCBvbmUgZnVs bCBzZWNvbmQgOigKPiA+IHY0OiBVc2UgdGhlIG5ldyBwY29kZSBpbnRlcmZhY2UgdG8gZ2V0IHRo ZSBxZ3YgcG9pbnRzIHJhdGhlcgo+ID4gICAgIHRoYXQgdXNpbmcgaGFyZGNvZGVkIG51bWJlcnMK PiA+IAo+ID4gU2lnbmVkLW9mZi1ieTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxp bnV4LmludGVsLmNvbT4KPiA+IC0tLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxl ICAgICAgICAgICAgIHwgICAxICsKPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5j ICAgICAgICAgICB8IDIyOQo+ID4gKysrKysrKysrKysrKysrKysrKysrKwo+ID4gIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAgICAgIHwgIDEwICsKPiA+ICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3JlZy5oICAgICAgICAgICB8ICAgMyArCj4gPiAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfYXRvbWljX3BsYW5lLmMgfCAgMjAgKysKPiA+ICBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9hdG9taWNfcGxhbmUuaCB8ICAgMiArCj4gPiAgZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfYncuYyAgICAgICAgICAgfCAxODEgKysrKysrKysrKysrKysrKysKPiA+ICBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9idy5oICAgICAgICAgICB8ICA0NiArKysrKwo+ID4g IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyAgICAgIHwgIDQwICsrKy0KPiA+ ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCAgICAgICAgICB8ICAgMiArCj4gPiAg MTAgZmlsZXMgY2hhbmdlZCwgNTMzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPiA+ICBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYncuYwo+ID4gIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9idy5oCj4gPiAKPiA+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+ID4gYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+ID4gaW5kZXggNjgxMDZmZTM1YTA0Li4xMzlhMGZjMTkz OTAgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+ID4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiA+IEBAIC0xMzgsNiArMTM4LDcgQEAg aTkxNS15ICs9IGludGVsX2F1ZGlvLm8gXAo+ID4gIAkgIGludGVsX2F0b21pYy5vIFwKPiA+ICAJ ICBpbnRlbF9hdG9taWNfcGxhbmUubyBcCj4gPiAgCSAgaW50ZWxfYmlvcy5vIFwKPiA+ICsJICBp bnRlbF9idy5vIFwKPiA+ICAJICBpbnRlbF9jZGNsay5vIFwKPiA+ICAJICBpbnRlbF9jb2xvci5v IFwKPiA+ICAJICBpbnRlbF9jb21ib19waHkubyBcCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kcnYuYwo+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Ry di5jCj4gPiBpbmRleCA1ZWQ4NjQ3NTJjN2IuLmI3ZmE3YjUxYzJlMiAxMDA2NDQKPiA+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmMKPiA+IEBAIC03MCw2ICs3MCw3IEBACj4gPiAgI2luY2x1ZGUgImlu dGVsX292ZXJsYXkuaCIKPiA+ICAjaW5jbHVkZSAiaW50ZWxfcGlwZV9jcmMuaCIKPiA+ICAjaW5j bHVkZSAiaW50ZWxfcG0uaCIKPiA+ICsjaW5jbHVkZSAiaW50ZWxfc2lkZWJhbmQuaCIKPiA+ICAj aW5jbHVkZSAiaW50ZWxfc3ByaXRlLmgiCj4gPiAgI2luY2x1ZGUgImludGVsX3VjLmgiCj4gPiAg Cj4gPiBAQCAtMTQzNSw2ICsxNDM2LDIzMiBAQCBieHRfZ2V0X2RyYW1faW5mbyhzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZQo+ID4gKmRldl9wcml2KQo+ID4gIAlyZXR1cm4gMDsKPiA+ICB9Cj4gPiAg Cj4gPiArc3RydWN0IGludGVsX3Fndl9wb2ludCB7Cj4gPiArCXUxNiBkY2xrLCB0X3JwLCB0X3Jk cHJlLCB0X3JjLCB0X3JhcywgdF9yY2Q7Cj4gPiArfTsKPiA+ICsKPiA+ICtzdHJ1Y3QgaW50ZWxf c2Fndl9pbmZvIHsKPiA+ICsJc3RydWN0IGludGVsX3Fndl9wb2ludCBwb2ludHNbM107Cj4gPiAr CXU4IG51bV9wb2ludHM7Cj4gPiArCXU4IG51bV9jaGFubmVsczsKPiA+ICsJdTggdF9ibDsKPiA+ ICsJZW51bSBpbnRlbF9kcmFtX3R5cGUgZHJhbV90eXBlOwo+ID4gK307Cj4gPiArCj4gPiArc3Rh dGljIGludCBpY2xfcGNvZGVfcmVhZF9tZW1fZ2xvYmFsX2luZm8oc3RydWN0IGRybV9pOTE1X3By aXZhdGUKPiA+ICpkZXZfcHJpdiwKPiA+ICsJCQkJCSAgc3RydWN0IGludGVsX3NhZ3ZfaW5mbyAq c2kpCj4gPiArewo+ID4gKwl1MzIgdmFsID0gMDsKPiA+ICsJaW50IHJldDsKPiA+ICsKPiA+ICsJ cmV0ID0gc2FuZHlicmlkZ2VfcGNvZGVfcmVhZChkZXZfcHJpdiwKPiA+ICsJCQkJICAgICBJQ0xf UENPREVfTUVNX1NVQlNZU1lTVEVNX0lORk8gfAo+ID4gKwkJCQkgICAgIElDTF9QQ09ERV9NRU1f U1NfUkVBRF9HTE9CQUxfSU5GTywKPiA+ICsJCQkJICAgICAmdmFsLCBOVUxMKTsKPiA+ICsJaWYg KHJldCkKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCj4gPiArCXN3aXRjaCAodmFsICYgMHhmKSB7 Cj4gPiArCWNhc2UgMDoKPiA+ICsJCXNpLT5kcmFtX3R5cGUgPSBJTlRFTF9EUkFNX0REUjQ7Cj4g PiArCQlicmVhazsKPiA+ICsJY2FzZSAxOgo+ID4gKwkJc2ktPmRyYW1fdHlwZSA9IElOVEVMX0RS QU1fRERSMzsKPiA+ICsJCWJyZWFrOwo+ID4gKwljYXNlIDI6Cj4gPiArCQlzaS0+ZHJhbV90eXBl ID0gSU5URUxfRFJBTV9MUEREUjM7Cj4gPiArCQlicmVhazsKPiA+ICsJY2FzZSAzOgo+ID4gKwkJ c2ktPmRyYW1fdHlwZSA9IElOVEVMX0RSQU1fTFBERFIzOwo+ID4gKwkJYnJlYWs7Cj4gPiArCWRl ZmF1bHQ6Cj4gPiArCQlNSVNTSU5HX0NBU0UodmFsICYgMHhmKTsKPiA+ICsJCWJyZWFrOwo+ID4g Kwl9Cj4gPiArCj4gPiArCXNpLT5udW1fY2hhbm5lbHMgPSAodmFsICYgMHhmMCkgPj4gNDsKPiA+ ICsJc2ktPm51bV9wb2ludHMgPSAodmFsICYgMHhmMDApID4+IDg7Cj4gPiArCj4gPiArCXNpLT50 X2JsID0gc2ktPmRyYW1fdHlwZSA9PSBJTlRFTF9EUkFNX0REUjQgPyA0IDogODsKPiA+ICsKPiA+ ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgaWNsX3Bjb2RlX3JlYWRf cWd2X3BvaW50X2luZm8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUKPiA+ICpkZXZfcHJpdiwKPiA+ ICsJCQkJCSBzdHJ1Y3QgaW50ZWxfcWd2X3BvaW50ICpzcCwKPiA+ICsJCQkJCSBpbnQgcG9pbnQp Cj4gQXJlIHdlIHRyeWluZyB0byByZXRyaWV2ZSB0aGUgZHJhbSB0aW1pbmcgcGFyYW1ldGVycyB0 byBjYWxjdWxhdGUgdGhlCj4gbGF0ZW5jeT8gSWYgc28gY2FuIHRoYXQgYmUgc2VwZXJhdGVkIGFz IGxhdGVuY3kgY2FsY3VsYXRpb24gaW5zdGVhZCBvZgo+IHVzaW5nIGl0IHVuZGVyIGJ3IGluZm8g YmVsb3c/Cj4gPiArewo+ID4gKwl1MzIgdmFsID0gMCwgdmFsMjsKPiA+ICsJaW50IHJldDsKPiA+ ICsKPiA+ICsJcmV0ID0gc2FuZHlicmlkZ2VfcGNvZGVfcmVhZChkZXZfcHJpdiwKPiA+ICsJCQkJ ICAgICBJQ0xfUENPREVfTUVNX1NVQlNZU1lTVEVNX0lORk8gfAo+ID4gKwkJCQkgICAgIElDTF9Q Q09ERV9NRU1fU1NfUkVBRF9RR1ZfUE9JTlRfSU4KPiA+IEZPKHBvaW50KSwKPiA+ICsJCQkJICAg ICAmdmFsLCAmdmFsMik7Cj4gPiArCWlmIChyZXQpCj4gPiArCQlyZXR1cm4gcmV0Owo+ID4gKwo+ ID4gKwlzcC0+ZGNsayA9IHZhbCAmIDB4ZmZmZjsKPiA+ICsJc3AtPnRfcnAgPSAodmFsICYgMHhm ZjAwMDApID4+IDE2Owo+ID4gKwlzcC0+dF9yY2QgPSAodmFsICYgMHhmZjAwMDAwMCkgPj4gMjQ7 Cj4gPiArCj4gPiArCXNwLT50X3JkcHJlID0gdmFsMiAmIDB4ZmY7Cj4gPiArCXNwLT50X3JhcyA9 ICh2YWwyICYgMHhmZjAwKSA+PiA4Owo+ID4gKwo+ID4gKwlzcC0+dF9yYyA9IHNwLT50X3JwICsg c3AtPnRfcmFzOwo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGlj IGludCBpY2xfZ2V0X3Fndl9wb2ludHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LAo+ID4gKwkJCSAgICAgIHN0cnVjdCBpbnRlbF9zYWd2X2luZm8gKnNpKQo+ID4gK3sKPiA+ICsJ aW50IGksIHJldDsKPiA+ICsKPiA+ICsJcmV0ID0gaWNsX3Bjb2RlX3JlYWRfbWVtX2dsb2JhbF9p bmZvKGRldl9wcml2LCBzaSk7Cj4gPiArCWlmIChyZXQpCj4gPiArCQlyZXR1cm4gcmV0Owo+ID4g Kwo+ID4gKwlpZiAoV0FSTl9PTihzaS0+bnVtX3BvaW50cyA+IEFSUkFZX1NJWkUoc2ktPnBvaW50 cykpKQo+ID4gKwkJc2ktPm51bV9wb2ludHMgPSBBUlJBWV9TSVpFKHNpLT5wb2ludHMpOwo+ID4g Kwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgc2ktPm51bV9wb2ludHM7IGkrKykgewo+ID4gKwkJc3Ry dWN0IGludGVsX3Fndl9wb2ludCAqc3AgPSAmc2ktPnBvaW50c1tpXTsKPiA+ICsKPiA+ICsJCXJl dCA9IGljbF9wY29kZV9yZWFkX3Fndl9wb2ludF9pbmZvKGRldl9wcml2LCBzcCwgaSk7Cj4gPiAr CQlpZiAocmV0KQo+ID4gKwkJCXJldHVybiByZXQ7Cj4gPiArCj4gPiArCQlEUk1fREVCVUdfS01T KCJRR1YgJWQ6IERDTEs9JWQgdFJQPSVkIHRSRFBSRT0lZCB0UkFTPSVkCj4gPiB0UkNEPSVkIHRS Qz0lZFxuIiwKPiA+ICsJCQkgICAgICBpLCBzcC0+ZGNsaywgc3AtPnRfcnAsIHNwLT50X3JkcHJl LCBzcC0KPiA+ID50X3JhcywKPiA+ICsJCQkgICAgICBzcC0+dF9yY2QsIHNwLT50X3JjKTsKPiA+ ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBp Y2xfY2FsY19idyhpbnQgZGNsaywgaW50IG51bSwgaW50IGRlbikKPiA+ICt7Cj4gPiArCS8qIG11 bHRpcGxlcyBvZiAxNi42NjZNSHogKDEwMC82KSAqLwo+ID4gKwlyZXR1cm4gRElWX1JPVU5EX0NM T1NFU1QobnVtICogZGNsayAqIDEwMCwgZGVuICogNik7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRp YyBpbnQgaWNsX3NhZ3ZfbWF4X2RjbGsoY29uc3Qgc3RydWN0IGludGVsX3NhZ3ZfaW5mbyAqc2kp Cj4gPiArewo+ID4gKwl1MTYgZGNsayA9IDA7Cj4gPiArCWludCBpOwo+ID4gKwo+ID4gKwlmb3Ig KGkgPSAwOyBpIDwgc2ktPm51bV9wb2ludHM7IGkrKykKPiA+ICsJCWRjbGsgPSBtYXgoZGNsaywg c2ktPnBvaW50c1tpXS5kY2xrKTsKPiA+ICsKPiA+ICsJcmV0dXJuIGRjbGs7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0cnVjdCBpbnRlbF9zYV9pbmZvIHsKPiA+ICsJdTggZGVidXJzdCwgbXBhZ2VzaXpl LCBkZXByb2did2xpbWl0LCBkaXNwbGF5cnRpZHM7Cj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IGludGVsX3NhX2luZm8gaWNsX3NhX2luZm8gPSB7Cj4gPiArCS5kZWJ1cnN0 ID0gOCwKPiA+ICsJLm1wYWdlc2l6ZSA9IDE2LAo+ID4gKwkuZGVwcm9nYndsaW1pdCA9IDI1LCAv KiBHQi9zICovCj4gPiArCS5kaXNwbGF5cnRpZHMgPSAxMjgsCj4gPiArfTsKPiA+ICsKPiA+ICtz dGF0aWMgaW50IGljbF9nZXRfYndfaW5mbyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCj4gPiArewo+ID4gKwlzdHJ1Y3QgaW50ZWxfc2Fndl9pbmZvIHNpID0ge307Cj4gPiArCWNv bnN0IHN0cnVjdCBpbnRlbF9zYV9pbmZvICpzYSA9ICZpY2xfc2FfaW5mbzsKPiA+ICsJYm9vbCBp c195X3RpbGUgPSB0cnVlOyAvKiBhc3N1bWUgeSB0aWxlIG1heSBiZSB1c2VkICovCj4gPiArCWlu dCBudW1fY2hhbm5lbHM7Cj4gPiArCWludCBkZWludGVybGVhdmU7Cj4gPiArCWludCBpcHFkZXB0 aCwgaXBxZGVwdGhwY2g7Cj4gPiArCWludCBkY2xrX21heDsKPiA+ICsJaW50IG1heGRlYnc7Cj4g PiArCWludCBpLCByZXQ7Cj4gPiArCj4gPiArCXJldCA9IGljbF9nZXRfcWd2X3BvaW50cyhkZXZf cHJpdiwgJnNpKTsKPiA+ICsJaWYgKHJldCkKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCW51bV9j aGFubmVscyA9IHNpLm51bV9jaGFubmVsczsKPiA+ICsKPiA+ICsJZGVpbnRlcmxlYXZlID0gRElW X1JPVU5EX1VQKG51bV9jaGFubmVscywgaXNfeV90aWxlID8gNCA6IDIpOwo+ID4gKwlkY2xrX21h eCA9IGljbF9zYWd2X21heF9kY2xrKCZzaSk7Cj4gPiArCj4gPiArCWlwcWRlcHRocGNoID0gMTY7 Cj4gPiArCj4gPiArCW1heGRlYncgPSBtaW4oc2EtPmRlcHJvZ2J3bGltaXQgKiAxMDAwLAo+ID4g KwkJICAgICAgaWNsX2NhbGNfYncoZGNsa19tYXgsIDE2LCAxKSAqIDYgLyAxMCk7IC8qIDYwJSAq Lwo+ID4gKwlpcHFkZXB0aCA9IG1pbihpcHFkZXB0aHBjaCwgc2EtPmRpc3BsYXlydGlkcyAvIG51 bV9jaGFubmVscyk7Cj4gPiArCj4gPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRldl9w cml2LT5tYXhfYncpOyBpKyspIHsKPiA+ICsJCXN0cnVjdCBpbnRlbF9id19pbmZvICpiaSA9ICZk ZXZfcHJpdi0+bWF4X2J3W2ldOwo+ID4gKwkJaW50IGNscGNoZ3JvdXA7Cj4gPiArCQlpbnQgajsK PiA+ICsKPiA+ICsJCWNscGNoZ3JvdXAgPSAoc2EtPmRlYnVyc3QgKiBkZWludGVybGVhdmUgLwo+ ID4gbnVtX2NoYW5uZWxzKSA8PCBpOwo+ID4gKwkJYmktPm51bV9wbGFuZXMgPSAoaXBxZGVwdGgg LSBjbHBjaGdyb3VwKSAvIGNscGNoZ3JvdXAgKwo+ID4gMTsKPiA+ICsKPiA+ICsJCWZvciAoaiA9 IDA7IGogPCBzaS5udW1fcG9pbnRzOyBqKyspIHsKPiA+ICsJCQljb25zdCBzdHJ1Y3QgaW50ZWxf cWd2X3BvaW50ICpzcCA9Cj4gPiAmc2kucG9pbnRzW2pdOwo+ID4gKwkJCWludCBjdCwgYnc7Cj4g PiArCj4gPiArCQkJLyoKPiA+ICsJCQkgKiBNYXggcm93IGN5Y2xlIHRpbWUKPiA+ICsJCQkgKgo+ ID4gKwkJCSAqIEZJWE1FIHdoYXQgaXMgdGhlIGxvZ2ljIGJlaGluZCB0aGUKPiA+ICsJCQkgKiBh c3N1bWVkIGJ1cnN0IGxlbmd0aD8KPiA+ICsJCQkgKi8KPiA+ICsJCQljdCA9IG1heF90KGludCwg c3AtPnRfcmMsIHNwLT50X3JwICsgc3AtPnRfcmNkCj4gPiArCj4gPiArCQkJCSAgIChjbHBjaGdy b3VwIC0gMSkgKiBzaS50X2JsICsgc3AtCj4gPiA+dF9yZHByZSk7Cj4gRm9yIGxvZ2ljYWwgZmxv dyBjYW4gd2UgbW92ZSB0aGUgYWJvdmUgdGltaW5nIHJlbGF0ZWQgY2FsY3VsYXRpb25zIHRvIGEK PiBzZXBlcmF0ZSBmdW5jdGlvbiBhbG9uZyB3aXRoIGZpeG1lIHRvIGRlbGluayBiYW5kd2lkdGgg YW5kIGxhdGVuY3kKPiBjYWxjdWxhdGlvbnM/CgpJIGRvbid0IHNlZSB3aGF0IHlvdSB3b3VsZCB3 YW50IHRvIGRlbGluay4gVGhpcyBpcyBhbGwganVzdApjYWxjdWxhdGluZyB0aGUgZWZmZWN0aXZl IG1lbW9yeSBiYW5kd2lkdGggbGltaXQuCgotLSAKVmlsbGUgU3lyasOkbMOkCkludGVsCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWls aW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeA==