From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paulo Zanoni Subject: Re: [PATCH v4 4/8] drm/i915/gen9: WM memory bandwidth related workaround Date: Fri, 04 Nov 2016 15:09:04 -0200 Message-ID: <1478279344.2535.151.camel@intel.com> References: <20161013105826.9710-1-mahesh1.kumar@intel.com> <20161013105826.9710-5-mahesh1.kumar@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 22B126EA19 for ; Fri, 4 Nov 2016 17:09:09 +0000 (UTC) In-Reply-To: <20161013105826.9710-5-mahesh1.kumar@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "Kumar, Mahesh" , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RW0gUXVpLCAyMDE2LTEwLTEzIMOgcyAxNjoyOCArMDUzMCwgS3VtYXIsIE1haGVzaCBlc2NyZXZl dToKPiBUaGlzIHBhdGNoIGltcGxlbW5ldHMgV29ya2FyaXVuZHMgcmVsYXRlZCB0byBkaXNwbGF5 IGFyYml0cmF0ZWQKPiBtZW1vcnkKPiBiYW5kd2lkdGguIFRoZXNlIFdBIGFyZSBhcHBsaWNhYmUg Zm9yIGFsbCBnZW4tOSBiYXNlZCBwbGF0Zm9ybXMuCj4gCj4gQ2hhbmdlcyBzaW5jZSB2MToKPiDC oC0gUmViYXNlIG9uIHRvcCBvZiBQYXVsbydzIHBhdGNoIHNlcmllcwo+IENoYW5nZXMgc2luY2Ug djI6Cj4gwqAtIFJlYmFzZS9yZXdvcmsgYWZ0ZXIgYWRkcmVzc2luZyBQYXVsbydzIGNvbW1lbnRz IGluIHByZXZpb3VzIHBhdGNoCgpBIGxvdCBvZiB0aGlzIGNvZGUgaGFzIGNoYW5nZWQgc2luY2Ug dGhlbiwgc28gdGhpcyB3aWxsIG5lZWQgYQpzaWduaWZpY2FudCByZWJhc2UuIEluIHRoZSBtZWFu dGltZSwgSSBhZGRlZCBza2xfbmVlZHNfbWVtb3J5X2J3X3dhKCkKYW5kIHdlJ3JlIG5vdyBhcHBs eWluZyB0aGUgV0EgYnkgZGVmYXVsdDogd2UganVzdCB3b24ndCBhcHBseSB0aGUgV0EKd2hlbiB3 ZSdyZSBwcmV0dHkgc3VyZSB3ZSBkb24ndCBuZWVkIHRvLiBUaGlzIGhlbHBzIGF2b2lkaW5nIHVu ZGVycnVucwpieSBkZWZhdWx0LgoKU2VlIG1vcmUgYmVsb3cuCgoKPiAKPiBTaWduZWQtb2ZmLWJ5 OiAiS3VtYXIsIE1haGVzaCIgPG1haGVzaDEua3VtYXJAaW50ZWwuY29tPgo+IC0tLQo+IMKgZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaMKgwqB8wqDCoMKgOSArKysKPiDCoGRyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2Rydi5oIHzCoMKgMTEgKysrCj4gwqBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9wbS5jwqDCoHwgMTQ2Cj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCj4gwqAzIGZpbGVzIGNoYW5nZWQsIDE2NiBpbnNlcnRpb25zKCspCj4gCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBpbmRleCBhZGJkOWFhLi5jMTY5MzYwIDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2Rydi5oCj4gQEAgLTEwOTIsNiArMTA5MiwxMyBAQCBlbnVtIGludGVsX3Ni aV9kZXN0aW5hdGlvbiB7Cj4gwqAJU0JJX01QSFksCj4gwqB9Owo+IMKgCj4gKy8qIFNLTCsgV2F0 ZXJtYXJrIGFyYml0cmF0ZWQgZGlzcGxheSBiYW5kd2lkdGggV29ya2Fyb3VuZHMgKi8KPiArZW51 bSB3YXRlcm1hcmtfbWVtb3J5X3dhIHsKPiArCVdBVEVSTUFSS19XQV9OT05FLAo+ICsJV0FURVJN QVJLX1dBX1hfVElMRUQsCj4gKwlXQVRFUk1BUktfV0FfWV9USUxFRCwKPiArfTsKPiArCj4gwqAj ZGVmaW5lIFFVSVJLX1BJUEVBX0ZPUkNFICgxPDwwKQo+IMKgI2RlZmluZSBRVUlSS19MVkRTX1NT Q19ESVNBQkxFICgxPDwxKQo+IMKgI2RlZmluZSBRVUlSS19JTlZFUlRfQlJJR0hUTkVTUyAoMTw8 MikKPiBAQCAtMTY0NCw2ICsxNjUxLDggQEAgc3RydWN0IHNrbF9kZGJfYWxsb2NhdGlvbiB7Cj4g wqAKPiDCoHN0cnVjdCBza2xfd21fdmFsdWVzIHsKPiDCoAl1bnNpZ25lZCBkaXJ0eV9waXBlczsK PiArCS8qIGFueSBXYXRlck1hcmsgbWVtb3J5IHdvcmthcm91bmQgUmVxdWlyZWQgKi8KCldlIGNh biByZW1vdmUgdGhpcyBjb21tZW50IHNpbmNlIGl0IGRvZXNuJ3Qgc2F5IGFueXRoaW5nIHRoZSB2 YXJpYWJsZQpuYW1lIGRvZXNuJ3QuCgo+ICsJZW51bSB3YXRlcm1hcmtfbWVtb3J5X3dhIG1lbV93 YTsKCk5vdyB0aGF0IHdlIGhhdmUgYSBwcm9wZXIgdmFyaWFibGUgaW4gdGhlIHN0YXRlIHN0cnVj dCwgaXQgcHJvYmFibHkKbWFrZXMgc2Vuc2UgdG8ganVzdCBraWxsIHNrbF9uZWVkc19tZW1vcnlf Yndfd2EoKSBhbmQgcmVhZCB0aGlzCnZhcmlhYmxlIHdoZW4gd2UgbmVlZCB0by4KCgo+IMKgCXN0 cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gZGRiOwo+IMKgCXVpbnQzMl90IHdtX2xpbmV0aW1lW0k5 MTVfTUFYX1BJUEVTXTsKPiDCoAl1aW50MzJfdCBwbGFuZVtJOTE1X01BWF9QSVBFU11bSTkxNV9N QVhfUExBTkVTXVs4XTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZHJ2LmgKPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4gaW5kZXggZjQ4ZTc5 YS4uMmMxODk3YiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYu aAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4gQEAgLTE4MTMsNiAr MTgxMywxNyBAQCBpbnRlbF9hdG9taWNfZ2V0X2NydGNfc3RhdGUoc3RydWN0Cj4gZHJtX2F0b21p Y19zdGF0ZSAqc3RhdGUsCj4gwqAJcmV0dXJuIHRvX2ludGVsX2NydGNfc3RhdGUoY3J0Y19zdGF0 ZSk7Cj4gwqB9Cj4gwqAKPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAq Cj4gK2ludGVsX2F0b21pY19nZXRfZXhpc3RpbmdfY3J0Y19zdGF0ZShzdHJ1Y3QgZHJtX2F0b21p Y19zdGF0ZSAqc3RhdGUsCj4gKwkJCQnCoMKgwqDCoMKgwqBzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0 YykKPiArewo+ICsJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwo+ICsKPiArCWNy dGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9leGlzdGluZ19jcnRjX3N0YXRlKHN0YXRlLAo+ICZj cnRjLT5iYXNlKTsKPiArCj4gKwlyZXR1cm4gdG9faW50ZWxfY3J0Y19zdGF0ZShjcnRjX3N0YXRl KTsKCkkgcmVhbGx5IGRvbid0IGxpa2UgdGhlIGlkZWEgb2YgY2FsbGluZyB0b19pbnRlbF9jcnRj X3N0YXRlKCkgb24gYQpwb3RlbnRpYWxseSBOVUxMIHBvaW50ZXIgc28gdGhlIGNhbGxlciBvZiB0 aGlzIGZ1bmN0aW9uIHdpbGwgYWxzbyBjaGVjawpmb3IgTlVMTC4gRXZlbiB0aG91Z2ggaXQgd29y a3MgdG9kYXksIEkgc3RpbGwgdGhpbmsgaXQncyB1bnNhZmUKcHJhY3RpY2UuIFBsZWFzZSBjaGVj ayBjcnRjX3N0YXRlIGZvciBOVUxMIGRpcmVjdGx5IGFuZCB0aGVuIHJldHVybgpOVUxMLgoKQWxz bywgSSB0aGluayB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBleHRyYWN0ZWQgdG8gaXRzIG93biBj b21taXQsIGFuZAp3ZSdkIHByb2JhYmx5IGJlIGFibGUgdG8gZmluZCBzb21lIGNhbGxlcnMgaW4g dGhlIGV4aXN0aW5nIGk5MTUgY29kZS4KCgo+ICt9Cj4gKwo+IMKgc3RhdGljIGlubGluZSBzdHJ1 Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKgo+IMKgaW50ZWxfYXRvbWljX2dldF9leGlzdGluZ19wbGFu ZV9zdGF0ZShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZQo+ICpzdGF0ZSwKPiDCoAkJCQnCoMKgwqDC oMKgwqBzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lKQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9wbS5jCj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5j Cj4gaW5kZXggODRlYzZiMS4uNWI4ZjcxNSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9wbS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwo+ IEBAIC0zNTg5LDYgKzM1ODksOCBAQCBzdGF0aWMgaW50IHNrbF9jb21wdXRlX3BsYW5lX3dtKGNv bnN0IHN0cnVjdAo+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IMKgewo+IMKgCXN0cnVj dCBkcm1fcGxhbmVfc3RhdGUgKnBzdGF0ZSA9ICZpbnRlbF9wc3RhdGUtPmJhc2U7Cj4gwqAJc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwc3RhdGUtPmZiOwo+ICsJc3RydWN0IGludGVsX2F0 b21pY19zdGF0ZSAqaW50ZWxfc3RhdGUgPQo+ICsJCQl0b19pbnRlbF9hdG9taWNfc3RhdGUoY3N0 YXRlLT5iYXNlLnN0YXRlKTsKPiDCoAl1aW50MzJfdCBsYXRlbmN5ID0gZGV2X3ByaXYtPndtLnNr bF9sYXRlbmN5W2xldmVsXTsKPiDCoAl1aW50MzJfdCBtZXRob2QxLCBtZXRob2QyOwo+IMKgCXVp bnQzMl90IHBsYW5lX2J5dGVzX3Blcl9saW5lLCBwbGFuZV9ibG9ja3NfcGVyX2xpbmU7Cj4gQEAg LTM1OTgsMTAgKzM2MDAsMTcgQEAgc3RhdGljIGludCBza2xfY29tcHV0ZV9wbGFuZV93bShjb25z dCBzdHJ1Y3QKPiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiDCoAl1aW50MzJfdCB3aWR0 aCA9IDAsIGhlaWdodCA9IDA7Cj4gwqAJdWludDMyX3QgcGxhbmVfcGl4ZWxfcmF0ZTsKPiDCoAl1 aW50MzJfdCB5X3RpbGVfbWluaW11bSwgeV9taW5fc2NhbmxpbmVzOwo+ICsJZW51bSB3YXRlcm1h cmtfbWVtb3J5X3dhIG1lbV93YTsKPiDCoAo+IMKgCWlmIChsYXRlbmN5ID09IDAgfHwgIWNzdGF0 ZS0+YmFzZS5hY3RpdmUgfHwgIWludGVsX3BzdGF0ZS0KPiA+YmFzZS52aXNpYmxlKQo+IMKgCQly ZXR1cm4gMDsKPiDCoAo+ICsJbWVtX3dhID0gaW50ZWxfc3RhdGUgPyBpbnRlbF9zdGF0ZS0+d21f cmVzdWx0cy5tZW1fd2EgOgo+IFdBVEVSTUFSS19XQV9OT05FOwo+ICsJaWYgKG1lbV93YSAhPSBX QVRFUk1BUktfV0FfTk9ORSkgewo+ICsJCWlmIChmYi0+bW9kaWZpZXJbMF0gPT0gSTkxNV9GT1JN QVRfTU9EX1hfVElMRUQpCj4gKwkJCWxhdGVuY3kgKz0gMTU7Cj4gKwl9Cj4gKwo+IMKgCXdpZHRo ID0gZHJtX3JlY3Rfd2lkdGgoJmludGVsX3BzdGF0ZS0+YmFzZS5zcmMpID4+IDE2Owo+IMKgCWhl aWdodCA9IGRybV9yZWN0X2hlaWdodCgmaW50ZWxfcHN0YXRlLT5iYXNlLnNyYykgPj4gMTY7Cj4g wqAKPiBAQCAtMzYzNCw2ICszNjQzLDkgQEAgc3RhdGljIGludCBza2xfY29tcHV0ZV9wbGFuZV93 bShjb25zdCBzdHJ1Y3QKPiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiDCoAkJeV9taW5f c2NhbmxpbmVzID0gNDsKPiDCoAl9Cj4gwqAKPiArCWlmIChtZW1fd2EgPT0gV0FURVJNQVJLX1dB X1lfVElMRUQpCj4gKwkJeV9taW5fc2NhbmxpbmVzICo9IDI7CgpUaGUgY2hhbmdlcyB0byB0aGlz IGZ1bmN0aW9uIHdpbGwgbmVlZCB0byBiZSByZWJhc2VkLiBCdXQgaXQncwppbnRlcmVzdGluZyB0 aGF0IG15IGludGVycHJldGF0aW9uIHJlZ2FyZGluZyB0aGlzICo9IDIgd2FzIGRpZmZlcmVudC4K QWZ0ZXIgYW4gZW1haWwgdG8gdGhlIHNwZWMgYXV0aG9ycyBpdCBzZWVtcyB5b3VyIGludGVycHJl dGF0aW9uIGlzIHRoZQpyaWdodCBvbmUuLi4KCgo+ICsKPiDCoAlwbGFuZV9ieXRlc19wZXJfbGlu ZSA9IHdpZHRoICogY3BwOwo+IMKgCWlmIChmYi0+bW9kaWZpZXJbMF0gPT0gSTkxNV9GT1JNQVRf TU9EX1lfVElMRUQgfHwKPiDCoAnCoMKgwqDCoGZiLT5tb2RpZmllclswXSA9PSBJOTE1X0ZPUk1B VF9NT0RfWWZfVElMRUQpIHsKPiBAQCAtNDA3NSw2ICs0MDg3LDE1IEBAIHNrbF9pbmNsdWRlX2Fm ZmVjdGVkX3BpcGVzKHN0cnVjdAo+IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+IMKgCQlpbnRl bF9zdGF0ZS0+d21fcmVzdWx0cy5kaXJ0eV9waXBlcyA9IH4wOwo+IMKgCX0KPiDCoAo+ICsJLyoK PiArCcKgKiBJZiBXYXRlcm1hcmsgd29ya2Fyb3VuZCBpcyBjaGFuZ2VkIHdlIG5lZWQgdG8gcmVj YWxjdWxhdGUKPiArCcKgKiB3YXRlcm1hcmsgdmFsdWVzIGZvciBhbGwgYWN0aXZlIHBpcGVzCj4g KwnCoCovCj4gKwlpZiAoaW50ZWxfc3RhdGUtPndtX3Jlc3VsdHMubWVtX3dhICE9IGRldl9wcml2 LQo+ID53bS5za2xfaHcubWVtX3dhKSB7Cj4gKwkJcmVhbGxvY19waXBlcyA9IH4wOwo+ICsJCWlu dGVsX3N0YXRlLT53bV9yZXN1bHRzLmRpcnR5X3BpcGVzID0gfjA7Cj4gKwl9Cj4gKwoKVGhpbmdz IGhhdmUgY2hhbmdlZCBzaW5jZSB0aGlzIHBhdGNoIHdhcyB3cml0dGVuLiBJJ2QgcmVjb21tZW5k IG1vdmluZwp0aGlzIHRvIHNrbF9zZXRfbWVtb3J5X2JhbmR3aWR0aF93YSgpLgoKCj4gwqAJZm9y X2VhY2hfaW50ZWxfY3J0Y19tYXNrKGRldiwgaW50ZWxfY3J0YywgcmVhbGxvY19waXBlcykgewo+ IMKgCQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlOwo+IMKgCj4gQEAgLTQwODcsNiAr NDEwOCwxMjkgQEAgc2tsX2luY2x1ZGVfYWZmZWN0ZWRfcGlwZXMoc3RydWN0Cj4gZHJtX2F0b21p Y19zdGF0ZSAqc3RhdGUpCj4gwqB9Cj4gwqAKPiDCoHN0YXRpYyB2b2lkCj4gK3NrbF9zZXRfbWVt b3J5X2JhbmR3aWR0aF93bV93YShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCgpXZSdy ZSBub3QgcmVhbGx5IHNldHRpbmcgYW55dGhpbmcgaGVyZTogd2UncmUgY29tcHV0aW5nLiBSZW5h bWUgdG8Kc2tsX2NvbXB1dGVfd21fbWVtb3J5X2J3X3dhPwoKCj4gK3sKPiArCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSBzdGF0ZS0+ZGV2Owo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gdG9faTkxNShkZXYpOwo+ICsJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGM7 Cj4gKwlzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKmludGVsX3BzdGF0ZTsKPiArCXN0cnVjdCBp bnRlbF9hdG9taWNfc3RhdGUgKmludGVsX3N0YXRlID0KPiB0b19pbnRlbF9hdG9taWNfc3RhdGUo c3RhdGUpOwo+ICsJc3RydWN0IG1lbWRldl9pbmZvICptZW1kZXZfaW5mbyA9ICZkZXZfcHJpdi0+ bWVtZGV2X2luZm87Cj4gKwlpbnQgbnVtX2FjdGl2ZV9wbGFuZSwgbnVtX2FjdGl2ZV9waXBlOwoK SSBsaWtlIHRvIHVzZSBwbHVyYWwgaW4gdGhlIG51bWJlci1vZiB2YXJpYWJsZXMsIHNpbmNlIHdl J3JlIGNvdW50aW5nCnRoZSBudW1iZXIgb2YgYWN0aXZlIHBsYW5lUywgbm90IHRoZSBudW1iZXIg b2YgdGhlIGFjdGl2ZSBwbGFuZS4KCgo+ICsJdWludDMyX3QgcGxhbmVfYncsIG1heF9wbGFuZV9i dywgcGlwZV9idywgbWF4X3BpcGVfYnc7Cj4gKwl1aW50MzJfdCB0b3RhbF9waXBlX2J3Owo+ICsJ dWludDMyX3Qgc3lzdGVtX2J3ID0gMDsKPiArCXVpbnQzMl90IHJhbms7Cj4gKwlpbnQgeF90aWxl X3BlcjsKPiArCWludCBkaXNwbGF5X2J3X3BlcjsKCkkgcmVhZCB0aGlzIGFuZCBrZXB0IHRoaW5r aW5nICJ4IHRpbGVzIHBlciB3aGF0PyIsIHRvb2sgbWUgYSB3aGlsZSB0bwpyZWFsaXplIGl0J3Mg cGVyY2VudGFnZS4gSXQncyBwcm9iYWJseSBiZXR0ZXIgdG8ganVzdCB1c2UgYSBsb25nIHNlbGYt CmRvY3VtZW50aW5nIG5hbWUgaGVyZSB0aGFuIHRvIHVzZSBhbiBhbWJpZ3VvdXMgYWJicmV2aWF0 aW9uLgoKQWxzbywgSSdkIGp1c3QgZ28gd2l0aCB1aW50MzJfdCBpbiB0aGUgcGVyY2VudGFnZXMg dG9vIHRvIGF2b2lkIGFueQpwb3NzaWJsZSBwcm9ibGVtcyB3aXRoIHRoZSB1aW4zMl90IGNhbGN1 bGF0aW9ucy4KCkFuZCBwZXJoYXBzIHNvbWUgZGVjbGFyYXRpb25zIGNvdWxkIGJlIG1vdmVkIHRv IHNtYWxsZXIgaW5uZXIgc2NvcGVzCmJlbG93LgoKCj4gKwlib29sIHlfdGlsZV9lbmFibGVkID0g ZmFsc2U7Cj4gKwoKaWYgKCFwbGF0Zm9ybXNfdGhhdF9yZXF1aXJlX3RoZV93YSkgewoJd2EgPSBX QVRFUk1BUktfV0FfTk9ORTsKCXJldHVybjsKfQoKPiArCWlmICghbWVtZGV2X2luZm8tPnZhbGlk KQo+ICsJCWdvdG8gZXhpdDsKCk91ciBkZWZhdWx0IGJlaGF2aW9yIHNob3VsZCBiZSB0byBhcHBs eSB0aGUgV0EgdGhlbiBpbiBkb3VidCwgbm90CnRvIGF2b2lkIGl0LCBzbyB0aGUgcmV0dXJuIHZh bHVlIGhlcmUgYW5kIGluIHRoZSBvdGhlciBlcnJvciBjYXNlcwpzaG91bGQgYmUgV0FURVJBTUFS S19XQV9ZX1RJTEVELgoKQWxzbywgeW91IGNhbiBhdm9pZCB0aGUgZ290b3MgYnkganVzdCBzZXR0 aW5nIG1lbV93YSBhdCB0aGUgYmVnaW5uaW5nCm9mIHRoZSBmdW5jdGlvbiwgdGhlbiB5b3UgY2Fu IGp1c3QgInJldHVybiIgbGF0ZXIgaW5zdGVhZCBvZiBnb3RvLgoKCj4gKwo+ICsJc3lzdGVtX2J3 ID0gbWVtZGV2X2luZm8tPm1lbV9zcGVlZF9raHogKiBtZW1kZXZfaW5mby0KPiA+bnVtX2NoYW5u ZWxzICoKPiArCQkJCW1lbWRldl9pbmZvLT5jaGFubmVsX3dpZHRoX2J5dGVzOwo+ICsKPiArCWlm ICghc3lzdGVtX2J3KQo+ICsJCWdvdG8gZXhpdDsKClRoaXMgc2hvdWxkbid0IGJlIHBvc3NpYmxl LiBPdGhlcndpc2UsIHRoZSBwcmV2aW91cyBwYXRjaCBuZWVkcyB0byBiZQpmaXhlZCBpbiBhIHdh eSB0byBub3QgYWxsb3cgc3lzdGVtX2J3IHRvIGVuZCB1cCBhcyB6ZXJvLiBQbGVhc2UgZWl0aGVy CnJlbW92ZSB0aGUgY2hlY2sgb3IgY2hhbmdlIHRvICJpZiAoV0FSTl9PTighc3lzdGVtX2J3KSki LgoKPiArCj4gKwltYXhfcGlwZV9idyA9IDA7Cj4gKwlmb3JfZWFjaF9pbnRlbF9jcnRjKGRldiwg aW50ZWxfY3J0Yykgewo+ICsJCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGU7Cj4gKwkJ c3RydWN0IGludGVsX3BsYW5lICpwbGFuZTsKPiArCj4gKwkJLyoKPiArCQnCoCogSWYgQ1JUQyBp cyBwYXJ0IG9mIGN1cnJlbnQgYXRvbWljIGNvbW1pdCwgZ2V0Cj4gY3J0YyBzdGF0ZSBmcm9tCj4g KwkJwqAqIGV4aXN0aW5nIENSVEMgc3RhdGUuIGVsc2UgdGFrZSB0aGUgY2FjaGVkIENSVEMKPiBz dGF0ZQo+ICsJCcKgKi8KPiArCQljc3RhdGUgPSBOVUxMOwo+ICsJCWlmIChzdGF0ZSkKCklmIHN0 YXRlIGlzIE5VTEwgd2UnbGwgc2VnZmF1bHQgd2F5IGJlZm9yZSB0aGlzIHBvaW50LCBzbyB0aGVy ZSdzIG5vCm5lZWQgZm9yIHRoaXMgY2hlY2suCgoKPiArCQkJY3N0YXRlID0KPiBpbnRlbF9hdG9t aWNfZ2V0X2V4aXN0aW5nX2NydGNfc3RhdGUoc3RhdGUsCj4gKwkJCQkJaW50ZWxfY3J0Yyk7Cj4g KwkJaWYgKCFjc3RhdGUpCj4gKwkJCWNzdGF0ZSA9IHRvX2ludGVsX2NydGNfc3RhdGUoaW50ZWxf Y3J0Yy0KPiA+YmFzZS5zdGF0ZSk7Cj4gKwo+ICsJCWlmICghY3N0YXRlLT5iYXNlLmFjdGl2ZSkK PiArCQkJY29udGludWU7Cj4gKwo+ICsJCW51bV9hY3RpdmVfcGxhbmUgPSAwOwo+ICsJCW1heF9w bGFuZV9idyA9IDA7Cj4gKwkJZm9yX2VhY2hfaW50ZWxfcGxhbmVfbWFzayhkZXYsIHBsYW5lLCBj c3RhdGUtCj4gPmJhc2UucGxhbmVfbWFzaykgewo+ICsJCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYiA9IE5VTEw7Cj4gKwo+ICsJCQlpbnRlbF9wc3RhdGUgPSBOVUxMOwo+ICsJCQlpZiAoc3Rh dGUpCgpTYW1lIGhlcmU6IG5vIG5lZWQgdG8gY2hlY2sgZm9yIHN0YXRlLgoKPiArCQkJCWludGVs X3BzdGF0ZSA9Cj4gKwkJCQlpbnRlbF9hdG9taWNfZ2V0X2V4aXN0aW5nX3BsYW5lX3N0YXQKPiBl KHN0YXRlLAo+ICsJCQkJCQkJCQkKPiBwbGFuZSk7Cj4gKwkJCWlmICghaW50ZWxfcHN0YXRlKQo+ ICsJCQkJaW50ZWxfcHN0YXRlID0KPiArCQkJCQl0b19pbnRlbF9wbGFuZV9zdGF0ZShwbGFuZS0K PiA+YmFzZS5zdGF0ZSk7Cj4gKwo+ICsJCQlXQVJOX09OKCFpbnRlbF9wc3RhdGUtPmJhc2UuZmIp OwoKaWYgKFdBUk5fT04oIWludGVsX3BzdGF0ZS0+YmFzZS5mYikpCglyZXR1cm47CgpUaGVuIHdl IGNhbiBqdXN0IGZvcmdldCBhYm91dCBjaGVja2luZyBmb3IgZmIgYWdhaW4gYmVsb3cuCgo+ICsK PiArCQkJaWYgKCFpbnRlbF9wc3RhdGUtPmJhc2UudmlzaWJsZSkKPiArCQkJCWNvbnRpbnVlOwoK RG9uJ3Qgd2UgYWxzbyBuZWVkIHRvIGV4Y2x1ZGUgdGhlIGN1cnNvciBoZXJlPwoKCj4gKwo+ICsJ CQlmYiA9IGludGVsX3BzdGF0ZS0+YmFzZS5mYjsKPiArCQkJaWYgKGZiICYmIChmYi0+bW9kaWZp ZXJbMF0gPT0KPiBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCB8fAo+ICsJCQkJZmItPm1vZGlmaWVy WzBdID09Cj4gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEKSkKPiArCQkJCXlfdGlsZV9lbmFibGVk ID0gdHJ1ZTsKPiArCj4gKwkJCXBsYW5lX2J3ID0KPiBza2xfYWRqdXN0ZWRfcGxhbmVfcGl4ZWxf cmF0ZShjc3RhdGUsCj4gKwkJCQkJCQkJaW50ZQo+IGxfcHN0YXRlKTsKPiArCQkJbWF4X3BsYW5l X2J3ID0gbWF4KHBsYW5lX2J3LCBtYXhfcGxhbmVfYncpOwo+ICsJCQludW1fYWN0aXZlX3BsYW5l Kys7Cj4gKwkJfQo+ICsJCXBpcGVfYncgPSBtYXhfcGxhbmVfYncgKiBudW1fYWN0aXZlX3BsYW5l Owo+ICsJCW1heF9waXBlX2J3ID0gbWF4KHBpcGVfYncsIG1heF9waXBlX2J3KTsKPiArCX0KPiAr Cj4gKwlpZiAoaW50ZWxfc3RhdGUtPmFjdGl2ZV9waXBlX2NoYW5nZXMpCj4gKwkJbnVtX2FjdGl2 ZV9waXBlID0gaHdlaWdodDMyKGludGVsX3N0YXRlLQo+ID5hY3RpdmVfY3J0Y3MpOwo+ICsJZWxz ZQo+ICsJCW51bV9hY3RpdmVfcGlwZSA9IGh3ZWlnaHQzMihkZXZfcHJpdi0+YWN0aXZlX2NydGNz KTsKCldoeSBkb24ndCB3ZSBqdXN0IHRydXN0IGludGVsX3N0YXRlLT5hY3RpdmVfY3J0Y3MgZXZl biB3aGVuCmFjdGl2ZV9waXBlX2NoYW5nZXMgaXMgZmFsc2U/CgoKPiArCj4gKwl0b3RhbF9waXBl X2J3ID0gbWF4X3BpcGVfYncgKiBudW1fYWN0aXZlX3BpcGU7Cj4gKwo+ICsJZGlzcGxheV9id19w ZXIgPSBESVZfUk9VTkRfVVBfVUxMKHRvdGFsX3BpcGVfYncgKiAxMDAsCj4gc3lzdGVtX2J3ICog MTAwMCk7CgpXaHkgVUxMPwoKQWxzbywgaWYgZXZlcnl0aGluZyBpcyBLSHogYXMgaXQncyBzdXBw b3NlZCB0byBiZSwgdGhlICoxMDAgYW5kICoxMDAwCmRvbid0IG1ha2Ugc2Vuc2UuCgoKPiArCj4g KwkvKgo+ICsJwqAqIElmIHRoZXJlIGlzIGFueSBZdGlsZSBwbGFuZSBlbmFibGVkIGFuZCBhcmJp dHJhdGVkCj4gZGlzcGxheQo+ICsJwqAqIGJhbmR3aWR0aCA+IDIwJSBvZiByYXcgc3lzdGVtIG1l bW9yeSBiYW5kd2lkdGgKPiArCcKgKiBFbmFsZSBZLXRpbGUgcmVsYXRlZCBXQQo+ICsJwqAqCj4g KwnCoCogSWYgbWVtb3J5IGlzIGR1YWwgY2hhbm5lbCBzaW5nbGUgcmFuaywgWHRpbGUgbGltaXQg PSAzNSUsCj4gZWxzZSBYdGlsZQo+ICsJwqAqIGxpbWl0ID0gNjAlCj4gKwnCoCogSWYgdGhlcmUg aXMgbm8gWXRpbGUgcGxhbmUgZW5hYmxlZCBhbmQKPiArCcKgKiBhcmJpdHJhdGVkIGRpc3BsYXkg YmFuZHdpZHRoID4gWHRpbGUgbGltaXQKPiArCcKgKiBFbmFibGUgWC10aWxlIHJlYWxhdGVkIFdB Cj4gKwnCoCovCj4gKwlpZiAoeV90aWxlX2VuYWJsZWQgJiYgKGRpc3BsYXlfYndfcGVyID4gMjAp KQo+ICsJCWludGVsX3N0YXRlLT53bV9yZXN1bHRzLm1lbV93YSA9Cj4gV0FURVJNQVJLX1dBX1lf VElMRUQ7Cj4gKwllbHNlIHsKPiArCj4gKwkJaWYgKG1lbWRldl9pbmZvLT5yYW5rX3ZhbGlkKQo+ ICsJCQlyYW5rID0gbWVtZGV2X2luZm8tPnJhbms7Cj4gKwkJZWxzZQo+ICsJCQlyYW5rID0gRFJB TV9SQU5LX0RVQUw7IC8qIEFzc3VtZSB3ZSBhcmUgZHVhbAo+IHJhbmsgKi8KCldoZW4gaW4gZG91 YnQsIGFwcGx5IHRoZSBtb3N0IHJlc3RyaWN0aXZlIHdvcmthcm91bmQgdG8gYXZvaWQgdGhlCnBv c3NpYmlsaXR5IG9mIHVuZGVycnVucy4gU28gaGVyZSBpdCdzIHNhZmVyIHRvIGFzc3VtZQpEUkFN X1JBTktfU0lOR0xFLgoKCj4gKwo+ICsJCWlmICgocmFuayA9PSBEUkFNX1JBTktfU0lOR0xFKSAm Jgo+ICsJCQkJCShtZW1kZXZfaW5mby0+bnVtX2NoYW5uZWxzCj4gPT0gMikpCj4gKwkJCXhfdGls ZV9wZXIgPSAzNTsKPiArCQllbHNlCj4gKwkJCXhfdGlsZV9wZXIgPSA2MDsKPiArCj4gKwkJaWYg KGRpc3BsYXlfYndfcGVyID4geF90aWxlX3BlcikKPiArCQkJaW50ZWxfc3RhdGUtPndtX3Jlc3Vs dHMubWVtX3dhID0KPiBXQVRFUk1BUktfV0FfWF9USUxFRDsKPiArCX0KPiArCXJldHVybjsKPiAr Cj4gK2V4aXQ6Cj4gKwlpbnRlbF9zdGF0ZS0+d21fcmVzdWx0cy5tZW1fd2EgPSBXQVRFUk1BUktf V0FfTk9ORTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiDCoHNrbF9jb3B5X3dtX2Zvcl9waXBl KHN0cnVjdCBza2xfd21fdmFsdWVzICpkc3QsCj4gwqAJCcKgwqDCoMKgwqBzdHJ1Y3Qgc2tsX3dt X3ZhbHVlcyAqc3JjLAo+IMKgCQnCoMKgwqDCoMKgZW51bSBwaXBlIHBpcGUpCj4gQEAgLTQxMzEs NiArNDI3NSw4IEBAIHNrbF9jb21wdXRlX3dtKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0 ZSkKPiDCoAkvKiBDbGVhciBhbGwgZGlydHkgZmxhZ3MgKi8KPiDCoAlyZXN1bHRzLT5kaXJ0eV9w aXBlcyA9IDA7Cj4gwqAKPiArCXNrbF9zZXRfbWVtb3J5X2JhbmR3aWR0aF93bV93YShzdGF0ZSk7 Cj4gKwo+IMKgCXJldCA9IHNrbF9pbmNsdWRlX2FmZmVjdGVkX3BpcGVzKHN0YXRlKTsKPiDCoAlp ZiAocmV0KQo+IMKgCQlyZXR1cm4gcmV0OwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9pbnRlbC1nZngK