From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paulo Zanoni Subject: Re: [PATCH v7 8/8] drm/i915/gen9: WM memory bandwidth related workaround Date: Thu, 15 Dec 2016 15:07:04 -0200 Message-ID: <1481821624.2548.148.camel@intel.com> References: <20161201154940.24446-1-mahesh1.kumar@intel.com> <20161201154940.24446-9-mahesh1.kumar@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id B1BF46EA26 for ; Thu, 15 Dec 2016 17:07:09 +0000 (UTC) In-Reply-To: <20161201154940.24446-9-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: Mahesh Kumar , intel-gfx@lists.freedesktop.org Cc: maarten.lankhorst@intel.com List-Id: intel-gfx@lists.freedesktop.org RW0gUXVpLCAyMDE2LTEyLTAxIMOgcyAyMToxOSArMDUzMCwgTWFoZXNoIEt1bWFyIGVzY3JldmV1 Ogo+IFRoaXMgcGF0Y2ggaW1wbGVtbmV0cyBXb3JrYXJpdW5kcyByZWxhdGVkIHRvIGRpc3BsYXkg YXJiaXRyYXRlZAo+IG1lbW9yeQo+IGJhbmR3aWR0aC4gVGhlc2UgV0EgYXJlIGFwcGxpY2FiZSBm b3IgYWxsIGdlbi05IGJhc2VkIHBsYXRmb3Jtcy4KCjMgdHlwb3MgYWJvdmUuCgpUaGUgV0EgaXMg YWxyZWFkeSBpbXBsZW1lbnRlZC4gV2hhdCB0aGUgcGF0Y2ggZG9lcyBpcyB0aGF0IGl0IG9wdHMt b3V0Cm9mIHRoZSBXQSBpbiBjYXNlIHdlIGNvbmNsdWRlIGl0J3Mgc2FmZS4gUGxlYXNlIHNheSB0 aGlzIGluIHRoZSBjb21taXQKbWVzc2FnZS4KCj4gCj4gQ2hhbmdlcyBzaW5jZSB2MToKPiDCoC0g UmViYXNlIG9uIHRvcCBvZiBQYXVsbydzIHBhdGNoIHNlcmllcwo+IENoYW5nZXMgc2luY2UgdjI6 Cj4gwqAtIEFkZHJlc3MgcmV2aWV3IGNvbW1lbnRzCj4gwqAtIFJlYmFzZS9yZXdvcmsgYXMgcGVy IG90aGVyIHBhdGNoIGNoYW5nZXMgaW4gc2VyaWVzCj4gQ2hhbmdlcyBzaW5jZSB2MzoKPiDCoC0g UmV3b3JrIGJhc2VkIG9uIE1hYXJ0ZW4ncyBjb21tZW50cwo+IAo+IFNpZ25lZC1vZmYtYnk6IE1h aGVzaCBLdW1hciA8bWFoZXNoMS5rdW1hckBpbnRlbC5jb20+Cj4gLS0tCj4gwqBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2Rydi5owqDCoMKgwqDCoMKgfMKgwqAxMSArKysKPiDCoGRyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyB8wqDCoDI0ICsrKysrKwo+IMKgZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfcG0uY8KgwqDCoMKgwqDCoHwgMTU1Cj4gKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrLS0KPiDCoDMgZmlsZXMgY2hhbmdlZCwgMTgxIGluc2VydGlvbnMo KyksIDkgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmgKPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBpbmRleCA2 OTIxM2E0Li4zMTI2MjU5IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gQEAgLTEyMTYs NiArMTIxNiwxMyBAQCBlbnVtIGludGVsX3NiaV9kZXN0aW5hdGlvbiB7Cj4gwqAJU0JJX01QSFks Cj4gwqB9Owo+IMKgCj4gKy8qIFNLTCsgV2F0ZXJtYXJrIGFyYml0cmF0ZWQgZGlzcGxheSBiYW5k d2lkdGggV29ya2Fyb3VuZHMgKi8KPiArZW51bSB3YXRlcm1hcmtfbWVtb3J5X3dhIHsKPiArCVdB VEVSTUFSS19XQV9OT05FLAo+ICsJV0FURVJNQVJLX1dBX1hfVElMRUQsCj4gKwlXQVRFUk1BUktf V0FfWV9USUxFRCwKPiArfTsKPiArCj4gwqAjZGVmaW5lIFFVSVJLX1BJUEVBX0ZPUkNFICgxPDww KQo+IMKgI2RlZmluZSBRVUlSS19MVkRTX1NTQ19ESVNBQkxFICgxPDwxKQo+IMKgI2RlZmluZSBR VUlSS19JTlZFUlRfQlJJR0hUTkVTUyAoMTw8MikKPiBAQCAtMTc4OCw2ICsxNzk1LDEwIEBAIHN0 cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gewo+IMKgCj4gwqBzdHJ1Y3Qgc2tsX3dtX3ZhbHVlcyB7 Cj4gwqAJdW5zaWduZWQgZGlydHlfcGlwZXM7Cj4gKwkvKiBhbnkgV2F0ZXJNYXJrIG1lbW9yeSB3 b3JrYXJvdW5kIFJlcXVpcmVkICovCgpDYXBpdGFsaVphdGlvbiBpcyB3ZWlyZCBIZXJlLiBCZXNp ZGVzLCBubyBuZWVkIGZvciB0aGUgY29tbWVudC4KCgo+ICsJZW51bSB3YXRlcm1hcmtfbWVtb3J5 X3dhIG1lbV93YTsKPiArCXVpbnQzMl90IHBpcGVfYndfa2Jwc1tJOTE1X01BWF9QSVBFU107Cj4g Kwlib29sIHBpcGVfeXRpbGVkW0k5MTVfTUFYX1BJUEVTXTsKPiDCoAlzdHJ1Y3Qgc2tsX2RkYl9h bGxvY2F0aW9uIGRkYjsKPiDCoH07Cj4gwqAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNw bGF5LmMKPiBpbmRleCA1ZDExMDAyLi5mOGRhNDg4IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2Rpc3BsYXkuYwo+IEBAIC0xNDU3NCw2ICsxNDU3NCwyOCBAQCBzdGF0aWMgdm9pZCBpbnRl bF9hdG9taWNfdHJhY2tfZmJzKHN0cnVjdAo+IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+IMKg CQkJCcKgwqB0b19pbnRlbF9wbGFuZShwbGFuZSktCj4gPmZyb250YnVmZmVyX2JpdCk7Cj4gwqB9 Cj4gwqAKPiArc3RhdGljIHZvaWQKPiAraW50ZWxfdXBkYXRlX3dtX2J3X3dhKHN0cnVjdCBkcm1f YXRvbWljX3N0YXRlICpzdGF0ZSkKPiArewo+ICsJc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAq aW50ZWxfc3RhdGUgPQo+IHRvX2ludGVsX2F0b21pY19zdGF0ZShzdGF0ZSk7Cj4gKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHN0YXRlLT5kZXYpOwo+ICsJY29u c3Qgc3RydWN0IGRybV9jcnRjICpjcnRjOwo+ICsJY29uc3Qgc3RydWN0IGRybV9jcnRjX3N0YXRl ICpjc3RhdGU7Cj4gKwlzdHJ1Y3Qgc2tsX3dtX3ZhbHVlcyAqcmVzdWx0cyA9ICZpbnRlbF9zdGF0 ZS0+d21fcmVzdWx0czsKPiArCXN0cnVjdCBza2xfd21fdmFsdWVzICpod192YWxzID0gJmRldl9w cml2LT53bS5za2xfaHc7Cj4gKwlpbnQgaTsKPiArCj4gKwlpZiAoIUlTX0dFTjkoZGV2X3ByaXYp KQo+ICsJCXJldHVybjsKPiArCj4gKwlmb3JfZWFjaF9jcnRjX2luX3N0YXRlKHN0YXRlLCBjcnRj LCBjc3RhdGUsIGkpIHsKPiArCQlod192YWxzLT5waXBlX2J3X2ticHNbaV0gPSByZXN1bHRzLT5w aXBlX2J3X2ticHNbaV07Cj4gKwkJaHdfdmFscy0+cGlwZV95dGlsZWRbaV0gPSByZXN1bHRzLT5w aXBlX3l0aWxlZFtpXTsKPiArCX0KPiArCj4gKwlod192YWxzLT5tZW1fd2EgPSByZXN1bHRzLT5t ZW1fd2E7Cj4gK30KCkkgdGhpbmsgd2UgY2FuIGp1c3QgcGF0Y2ggc2tsX2NvcHlfd21fZm9yX3Bp cGUoKSB0byBhbHNvIGNvcHkgdGhlCmZpZWxkcyB3ZSBuZWVkIGluc3RlYWQgb2YgYWRkaW5nIHRo aXMgZnVuY3Rpb24uIFdob3VsZG4ndCB0aGF0IGJlIG11Y2gKc2ltcGxlcj8gQW55d2F5LCB0aGlz IG9uZSBsb29rcyBjb3JyZWN0LCBzbyBubyBuZWVkIHRvIGNoYW5nZSBpZiB5b3UKZG9uJ3Qgd2Fu dC4KCgo+ICsKPiDCoC8qKgo+IMKgICogaW50ZWxfYXRvbWljX2NvbW1pdCAtIGNvbW1pdCB2YWxp ZGF0ZWQgc3RhdGUgb2JqZWN0Cj4gwqAgKiBAZGV2OiBEUk0gZGV2aWNlCj4gQEAgLTE0NjE0LDYg KzE0NjM2LDggQEAgc3RhdGljIGludCBpbnRlbF9hdG9taWNfY29tbWl0KHN0cnVjdAo+IGRybV9k ZXZpY2UgKmRldiwKPiDCoAlpbnRlbF9zaGFyZWRfZHBsbF9jb21taXQoc3RhdGUpOwo+IMKgCWlu dGVsX2F0b21pY190cmFja19mYnMoc3RhdGUpOwo+IMKgCj4gKwlpbnRlbF91cGRhdGVfd21fYndf d2Eoc3RhdGUpOwo+ICsKPiDCoAlpZiAoaW50ZWxfc3RhdGUtPm1vZGVzZXQpIHsKPiDCoAkJbWVt Y3B5KGRldl9wcml2LT5taW5fcGl4Y2xrLCBpbnRlbF9zdGF0ZS0KPiA+bWluX3BpeGNsaywKPiDC oAkJwqDCoMKgwqDCoMKgwqBzaXplb2YoaW50ZWxfc3RhdGUtPm1pbl9waXhjbGspKTsKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwo+IGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfcG0uYwo+IGluZGV4IGNjOGZjODQuLmZkYTZlMWUgMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3BtLmMKPiBAQCAtMjg3OCwxMSArMjg3OCw3IEBAIGJvb2wgaWxrX2Rpc2Fi bGVfbHBfd20oc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiDCoAo+IMKgI2RlZmluZSBTS0xfU0FH Vl9CTE9DS19USU1FCTMwIC8qIMK1cyAqLwo+IMKgCj4gLS8qCj4gLSAqIEZJWE1FOiBXZSBzdGls bCBkb24ndCBoYXZlIHRoZSBwcm9wZXIgY29kZSBkZXRlY3QgaWYgd2UgbmVlZCB0bwo+IGFwcGx5 IHRoZSBXQSwKPiAtICogc28gYXNzdW1lIHdlJ2xsIGFsd2F5cyBuZWVkIGl0IGluIG9yZGVyIHRv IGF2b2lkIHVuZGVycnVucy4KPiAtICovCj4gLXN0YXRpYyBib29sIHNrbF9uZWVkc19tZW1vcnlf Yndfd2Eoc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUpCj4gK3N0YXRpYyBib29sIGlu dGVsX25lZWRzX21lbW9yeV9id193YShzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlCj4gKnN0YXRl KQoKV2h5IGFyZSB3ZSByZW5hbWluZyB0aGlzIGZ1bmN0aW9uPwoKQWxzbywgaW4gbXkgbGFzdCBy ZXZpZXcgSSBzdWdnZXN0ZWQgdGhhdCB3ZSBraWxsIHRoaXMgZnVuY3Rpb24uIEkgZG9uJ3QKdGhp bmsgaXQgbWFrZXMgc2Vuc2UgdG8gaGF2ZSB0aGlzIGZ1bmN0aW9uIGFueW1vcmUuCgpCZXNpZGVz LCBmdW5jdGlvbiBpbnRlbF9jYW5fZW5hYmxlX3NhZ3YoKSBuZWVkcyB0byBsb29rIGF0IHRoZSB2 YWx1ZSB3ZQphc3NpZ25lZCB0byBlbnVtIHdhdGVybWFya19tZW1vcnlfd2EsIG5vdCBnZXQgYSB0 cnVlL2ZhbHNlIGJhc2VkIG9uCnBsYXRmb3JtIHZlcnNpb24uCgoKPiDCoHsKPiDCoAlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHN0YXRlLQo+ID5iYXNlLmRldik7 Cj4gwqAKPiBAQCAtMzA1Niw3ICszMDUyLDcgQEAgYm9vbCBpbnRlbF9jYW5fZW5hYmxlX3NhZ3Yo c3RydWN0Cj4gZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCj4gwqAKPiDCoAkJbGF0ZW5jeSA9IGRl dl9wcml2LT53bS5za2xfbGF0ZW5jeVtsZXZlbF07Cj4gwqAKPiAtCQlpZiAoc2tsX25lZWRzX21l bW9yeV9id193YShpbnRlbF9zdGF0ZSkgJiYKPiArCQlpZiAoaW50ZWxfbmVlZHNfbWVtb3J5X2J3 X3dhKGludGVsX3N0YXRlKSAmJgo+IMKgCQnCoMKgwqDCoHBsYW5lLT5iYXNlLnN0YXRlLT5mYi0+ bW9kaWZpZXIgPT0KPiDCoAkJwqDCoMKgwqBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCkKPiDCoAkJ CWxhdGVuY3kgKz0gMTU7Cj4gQEAgLTM1ODQsNyArMzU4MCw3IEBAIHN0YXRpYyBpbnQgc2tsX2Nv bXB1dGVfcGxhbmVfd20oY29uc3Qgc3RydWN0Cj4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs Cj4gwqAJdWludDMyX3QgeV9taW5fc2NhbmxpbmVzOwo+IMKgCXN0cnVjdCBpbnRlbF9hdG9taWNf c3RhdGUgKnN0YXRlID0KPiDCoAkJdG9faW50ZWxfYXRvbWljX3N0YXRlKGNzdGF0ZS0+YmFzZS5z dGF0ZSk7Cj4gLQlib29sIGFwcGx5X21lbW9yeV9id193YSA9IHNrbF9uZWVkc19tZW1vcnlfYndf d2Eoc3RhdGUpOwo+ICsJZW51bSB3YXRlcm1hcmtfbWVtb3J5X3dhIG1lbV93YTsKPiDCoAlib29s IHlfdGlsZWQsIHhfdGlsZWQ7Cj4gwqAKPiDCoAlpZiAobGF0ZW5jeSA9PSAwIHx8ICFjc3RhdGUt PmJhc2UuYWN0aXZlIHx8ICFpbnRlbF9wc3RhdGUtCj4gPmJhc2UudmlzaWJsZSkgewo+IEBAIC0z NjAwLDcgKzM1OTYsOCBAQCBzdGF0aWMgaW50IHNrbF9jb21wdXRlX3BsYW5lX3dtKGNvbnN0IHN0 cnVjdAo+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IMKgCWlmIChJU19LQUJZTEFLRShk ZXZfcHJpdikgJiYgZGV2X3ByaXYtPmlwY19lbmFibGVkKQo+IMKgCQlsYXRlbmN5ICs9IDQ7Cj4g wqAKPiAtCWlmIChhcHBseV9tZW1vcnlfYndfd2EgJiYgeF90aWxlZCkKPiArCW1lbV93YSA9IHN0 YXRlLT53bV9yZXN1bHRzLm1lbV93YTsKClRoaXMgYXNzaWdubWVudCBjb3VsZCBoYXZlIGJlZW4g ZG9uZSBkdXJpbmcgZGVjbGFyYXRpb24uCgoKPiArCWlmIChtZW1fd2EgIT0gV0FURVJNQVJLX1dB X05PTkUgJiYgeF90aWxlZCkKPiDCoAkJbGF0ZW5jeSArPSAxNTsKPiDCoAo+IMKgCXdpZHRoID0g ZHJtX3JlY3Rfd2lkdGgoJmludGVsX3BzdGF0ZS0+YmFzZS5zcmMpID4+IDE2Owo+IEBAIC0zNjM1 LDcgKzM2MzIsNyBAQCBzdGF0aWMgaW50IHNrbF9jb21wdXRlX3BsYW5lX3dtKGNvbnN0IHN0cnVj dAo+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IMKgCQl5X21pbl9zY2FubGluZXMgPSA0 Owo+IMKgCX0KPiDCoAo+IC0JaWYgKGFwcGx5X21lbW9yeV9id193YSkKPiArCWlmIChtZW1fd2Eg PT0gV0FURVJNQVJLX1dBX1lfVElMRUQpCj4gwqAJCXlfbWluX3NjYW5saW5lcyAqPSAyOwo+IMKg Cj4gwqAJcGxhbmVfYnl0ZXNfcGVyX2xpbmUgPSB3aWR0aCAqIGNwcDsKPiBAQCAtNDA2Myw2ICs0 MDYwLDE1IEBAIHNrbF9jb21wdXRlX2RkYihzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZQo+ICpzdGF0 ZSkKPiDCoAl9Cj4gwqAKPiDCoAkvKgo+ICsJwqAqIElmIFdhdGVybWFyayB3b3JrYXJvdW5kIGlz IGNoYW5nZWQgd2UgbmVlZCB0byByZWNhbGN1bGF0ZQo+ICsJwqAqIHdhdGVybWFyayB2YWx1ZXMg Zm9yIGFsbCBhY3RpdmUgcGlwZXMKPiArCcKgKi8KPiArCWlmIChpbnRlbF9zdGF0ZS0+d21fcmVz dWx0cy5tZW1fd2EgIT0gZGV2X3ByaXYtCj4gPndtLnNrbF9ody5tZW1fd2EpIHsKPiArCQlyZWFs bG9jX3BpcGVzID0gfjA7Cj4gKwkJaW50ZWxfc3RhdGUtPndtX3Jlc3VsdHMuZGlydHlfcGlwZXMg PSB+MDsKPiArCX0KCkJ1dCB0aGVuIHNrbF9kZGJfYWRkX2FmZmVjdGVkX3BsYW5lcygpIG9ubHkg YWN0dWFsbHkgYWRkcyB0byB0aGUgY29tbWl0CnRoZSBwbGFuZXMgdGhhdCBoYXZlIGRpZmZlcmVu dCBEREIgcGFydGl0aW9uaW5nLiBJdCBzZWVtcyB0byBtZSB0aGF0IGl0Cm1heSBiZSBwb3NzaWJs ZSB0byBoYXZlIGEgY2FzZSB3aGVyZSB0aGUgV0EgY2hhbmdlcyBhbmQgdGhlIEREQiBzdGF5cwp0 aGUgc2FtZSwgc28gd2UgbmVlZCB0byBmaW5kIGEgd2F5IHRvIGluY2x1ZGUgZXZlcnkgQ1JUQyB0 aGVyZS4gTWF5YmUKd2UgY291bGQganVzdCBnbyBhbmQgY2FsbCB0aGUgZnVuY3Rpb24gdGhhdCBh ZGRzIGV2ZXJ5IENSVEMgaGVyZS4KCgo+ICsKPiArCS8qCj4gwqAJwqAqIFdlJ3JlIG5vdCByZWNv bXB1dGluZyBmb3IgdGhlIHBpcGVzIG5vdCBpbmNsdWRlZCBpbiB0aGUKPiBjb21taXQsIHNvCj4g wqAJwqAqIG1ha2Ugc3VyZSB3ZSBzdGFydCB3aXRoIHRoZSBjdXJyZW50IHN0YXRlLgo+IMKgCcKg Ki8KPiBAQCAtNDA4Nyw2ICs0MDkzLDEzMyBAQCBza2xfY29tcHV0ZV9kZGIoc3RydWN0IGRybV9h dG9taWNfc3RhdGUKPiAqc3RhdGUpCj4gwqAJcmV0dXJuIDA7Cj4gwqB9Cj4gwqAKPiArc3RhdGlj IGludAo+ICtza2xfY29tcHV0ZV9tZW1vcnlfYmFuZHdpZHRoX3dtX3dhKHN0cnVjdCBkcm1fYXRv bWljX3N0YXRlICpzdGF0ZSkKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHN0YXRl LT5kZXY7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRl dik7Cj4gKwlzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICppbnRlbF9zdGF0ZSA9Cj4gdG9faW50 ZWxfYXRvbWljX3N0YXRlKHN0YXRlKTsKPiArCXN0cnVjdCBtZW1kZXZfaW5mbyAqbWVtZGV2X2lu Zm8gPSAmZGV2X3ByaXYtPm1lbWRldl9pbmZvOwo+ICsJc3RydWN0IHNrbF93bV92YWx1ZXMgKnJl c3VsdHMgPSAmaW50ZWxfc3RhdGUtPndtX3Jlc3VsdHM7Cj4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNy dGM7Cj4gKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNzdGF0ZTsKPiArCWludCBhY3RpdmVfcGlw ZXMgPSAwOwo+ICsJdWludDMyX3QgbWF4X3BpcGVfYndfa2JwcyA9IDAsIHRvdGFsX3BpcGVfYndf a2JwczsKPiArCWludCBkaXNwbGF5X2J3X3BlcmNlbnRhZ2U7Cj4gKwlib29sIHlfdGlsZV9lbmFi bGVkID0gZmFsc2U7Cj4gKwlpbnQgcmV0LCBpOwo+ICsKPiArCWlmICghaW50ZWxfbmVlZHNfbWVt b3J5X2J3X3dhKGludGVsX3N0YXRlKSkgewo+ICsJCXJlc3VsdHMtPm1lbV93YSA9IFdBVEVSTUFS S19XQV9OT05FOwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICsKPiArCWlmICghbWVtZGV2X2luZm8t PnZhbGlkKQo+ICsJCWdvdG8gZXhpdDsKClRoZXJlJ3Mgbm8gcmVhc29uIHRvIHVzZSBhIGxhYmVs IGlmIGl0J3Mgb25seSBjYWxsZWQgaGVyZS4gSnVzdCBtb3ZlCmFsbCB0aGF0IGNvZGUgdG8gdGhl IGlmIHN0YXRlbWVudC4KCgo+ICsKPiArCXJldCA9IGRybV9tb2Rlc2V0X2xvY2soJmRldi0+bW9k ZV9jb25maWcuY29ubmVjdGlvbl9tdXRleCwKPiArCQkJc3RhdGUtPmFjcXVpcmVfY3R4KTsKPiAr CWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKCldoeSBhcmUgd2UgZ2V0dGluZyB0aGlzIGhlcmU/ IFdoeSB0aGlzIGxvY2sgc3BlY2lmaWNhbGx5PyBXaGF0J3MgaXQKcHJvdGVjdGluZz8KCkRvYyBz YXlzOgotwqB3dyBtdXRleCBwcm90ZWN0aW5nIGNvbm5lY3RvciBzdGF0ZSBhbmQgcm91dGluZwot wqBwcm90ZWN0cyBjb25uZWN0b3ItPmVuY29kZXIgYW5kIGVuY29kZXItPmNydGMgbGlua3PCoAoK V2UncmUgbm90IHRvdWNoaW5nIGFueSBvZiB0aGF0IGhlcmUuCgoKPiArCj4gKwltZW1jcHkocmVz dWx0cy0+cGlwZV9id19rYnBzLCBkZXZfcHJpdi0KPiA+d20uc2tsX2h3LnBpcGVfYndfa2JwcywK PiArCQkJc2l6ZW9mKHJlc3VsdHMtPnBpcGVfYndfa2JwcykpOwo+ICsJbWVtY3B5KHJlc3VsdHMt PnBpcGVfeXRpbGVkLCBkZXZfcHJpdi0KPiA+d20uc2tsX2h3LnBpcGVfeXRpbGVkLAo+ICsJCQlz aXplb2YocmVzdWx0cy0+cGlwZV95dGlsZWQpKTsKPiArCj4gKwlmb3JfZWFjaF9jcnRjX2luX3N0 YXRlKHN0YXRlLCBjcnRjLCBjc3RhdGUsIGkpIHsKPiArCQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZTsKPiArCQljb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwc3RhdGU7Cj4gKwkJaW50IGFj dGl2ZV9wbGFuZXMgPSAwOwo+ICsJCXVpbnQzMl90IG1heF9wbGFuZV9id19rYnBzID0gMDsKPiAr Cj4gKwkJcmVzdWx0cy0+cGlwZV95dGlsZWRbaV0gPSBmYWxzZTsKPiArCj4gKwkJaWYgKCFjc3Rh dGUtPmFjdGl2ZSkgewo+ICsJCQlyZXN1bHRzLT5waXBlX2J3X2ticHNbaV0gPSAwOwo+ICsJCQlj b250aW51ZTsKPiArCQl9Cj4gKwo+ICsJCWRybV9hdG9taWNfY3J0Y19zdGF0ZV9mb3JfZWFjaF9w bGFuZV9zdGF0ZShwbGFuZSwKPiBwc3RhdGUsCj4gKwkJCQkJCQkJY3N0YQo+IHRlKSB7Cj4gKwkJ CXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOwo+ICsJCQl1aW50MzJfdCBwbGFuZV9id19rYnBz Owo+ICsJCQllbnVtIHBsYW5lX2lkIGlkID0gdG9faW50ZWxfcGxhbmUocGxhbmUpLQo+ID5pZDsK PiArCj4gKwkJCWlmICghcHN0YXRlLT52aXNpYmxlKQo+ICsJCQkJY29udGludWU7Cj4gKwo+ICsJ CQlpZiAoV0FSTl9PTighcHN0YXRlLT5mYikpCj4gKwkJCQljb250aW51ZTsKPiArCj4gKwkJCWlm IChpZCA9PSBQTEFORV9DVVJTT1IpCj4gKwkJCQljb250aW51ZTsKPiArCj4gKwkJCWZiID0gcHN0 YXRlLT5mYjsKPiArCQkJaWYgKChmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElM RUQKPiB8fAo+ICsJCQkJZmItPm1vZGlmaWVyID09Cj4gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVE KSkKPiArCQkJCXJlc3VsdHMtPnBpcGVfeXRpbGVkW2ldID0gdHJ1ZTsKPiArCj4gKwkJCXBsYW5l X2J3X2ticHMgPQo+IHNrbF9hZGp1c3RlZF9wbGFuZV9waXhlbF9yYXRlKAo+ICsJCQkJCQl0b19p bnRlbF9jcnRjX3N0YXRlKAo+IGNzdGF0ZSksCj4gKwkJCQkJCXRvX2ludGVsX3BsYW5lX3N0YXRl Cj4gKHBzdGF0ZSkpOwo+ICsJCQltYXhfcGxhbmVfYndfa2JwcyA9IG1heChwbGFuZV9id19rYnBz LAo+ICsJCQkJCQkJbWF4X3BsYW5lX2J3Cj4gX2ticHMpOwo+ICsJCQlhY3RpdmVfcGxhbmVzKys7 Cj4gKwkJfQo+ICsJCXJlc3VsdHMtPnBpcGVfYndfa2Jwc1tpXSA9IG1heF9wbGFuZV9id19rYnBz ICoKPiBhY3RpdmVfcGxhbmVzOwo+ICsJfQo+ICsKPiArCWZvcl9lYWNoX3BpcGUoZGV2X3ByaXYs IGkpIHsKPiArCQlpZiAocmVzdWx0cy0+cGlwZV9id19rYnBzW2ldKSB7Cj4gKwkJCW1heF9waXBl X2J3X2ticHMgPSBtYXgobWF4X3BpcGVfYndfa2JwcywKPiArCQkJCQlyZXN1bHRzLT5waXBlX2J3 X2ticHNbaV0pOwo+ICsJCQlhY3RpdmVfcGlwZXMrKzsKPiArCQl9Cj4gKwkJaWYgKHJlc3VsdHMt PnBpcGVfeXRpbGVkW2ldKQo+ICsJCQl5X3RpbGVfZW5hYmxlZCA9IHRydWU7Cj4gKwl9Cj4gKwo+ ICsJdG90YWxfcGlwZV9id19rYnBzID0gbWF4X3BpcGVfYndfa2JwcyAqIGFjdGl2ZV9waXBlczsK PiArCWRpc3BsYXlfYndfcGVyY2VudGFnZSA9IERJVl9ST1VORF9VUF9VTEwodG90YWxfcGlwZV9i d19rYnBzCj4gKiAxMDAsCj4gKwkJCQkJCW1lbWRldl9pbmZvLQo+ID5iYW5kd2lkdGhfa2Jwcyk7 CgpTaG91bGRuJ3QgdGhpcyBiZSBqdXN0IERJVl9ST1VORF9VUCgpPyBJIGRvbid0IHNlZSA2NCBi aXQgdmFyaWFibGVzCmhlcmUsIG5vciB0aGUgcG9zc2liaWxpdHkgb2Ygb3ZlcmZsb3dzLgoKCj4g Kwo+ICsJLyoKPiArCcKgKiBJZiB0aGVyZSBpcyBhbnkgWXRpbGUgcGxhbmUgZW5hYmxlZCBhbmQg YXJiaXRyYXRlZAo+IGRpc3BsYXkKPiArCcKgKiBiYW5kd2lkdGggPiAyMCUgb2YgcmF3IHN5c3Rl bSBtZW1vcnkgYmFuZHdpZHRoCj4gKwnCoCogRW5hbGUgWS10aWxlIHJlbGF0ZWQgV0EKPiArCcKg Kgo+ICsJwqAqIElmIG1lbW9yeSBpcyBkdWFsIGNoYW5uZWwgc2luZ2xlIHJhbmssIFh0aWxlIGxp bWl0ID0gMzUlLAo+IGVsc2UgWHRpbGUKPiArCcKgKiBsaW1pdCA9IDYwJQo+ICsJwqAqIElmIHRo ZXJlIGlzIG5vIFl0aWxlIHBsYW5lIGVuYWJsZWQgYW5kCj4gKwnCoCogYXJiaXRyYXRlZCBkaXNw bGF5IGJhbmR3aWR0aCA+IFh0aWxlIGxpbWl0Cj4gKwnCoCogRW5hYmxlIFgtdGlsZSByZWFsYXRl ZCBXQQo+ICsJwqAqLwo+ICsJaWYgKHlfdGlsZV9lbmFibGVkICYmIChkaXNwbGF5X2J3X3BlcmNl bnRhZ2UgPiAyMCkpCj4gKwkJcmVzdWx0cy0+bWVtX3dhID0gV0FURVJNQVJLX1dBX1lfVElMRUQ7 Cj4gKwllbHNlIHsKPiArCQlpbnQgeF90aWxlX3BlcmNlbnRhZ2UgPSA2MDsKPiArCQllbnVtIHJh bmsgcmFuayA9IERSQU1fUkFOS19TSU5HTEU7Cj4gKwo+ICsJCWlmIChtZW1kZXZfaW5mby0+cmFu ayAhPSBEUkFNX1JBTktfSU5WQUxJRCkKPiArCQkJcmFuayA9IG1lbWRldl9pbmZvLT5yYW5rOwoK SSByZWFsbHkgdGhpbmsgdGhhdCB0aGUgcHJldmlvdXMgcGF0Y2ggc2hvdWxkIHByZXZlbnQgdGhp cy4gSWYKbWVtZGV2X2luZm8tPnJhbmsgaXMgaW52YWxpZCB0aGVuIG1lbWRldl9pbmZvLT52YWxp ZCBzaG91bGQgYWxzbyBiZQpmYWxzZSBhbmQgd2UnZCBoYXZlIHJldHVybmVkIGF0IHRoZSBiZWdp bm5pbmcgb2YgdGhlIGZ1bmN0aW9uLiBXaXRoCnRoYXQsIHRoaXMgcGFydCBvZiB0aGUgY29kZSBj b3VsZCBiZSBzaW1wbGlmaWVkIGEgbGl0dGxlIGJpdCBzaW5jZSB0aGVuCndlJ2QgaGF2ZSBubyBu ZWVkIHRvIGNob29zZSBhIGRlZmF1bHQgcmFuay4KCgoKPiArCj4gKwkJaWYgKChyYW5rID09IERS QU1fUkFOS19TSU5HTEUpICYmCj4gKwkJCQkJKG1lbWRldl9pbmZvLT5udW1fY2hhbm5lbHMKPiA9 PSAyKSkKPiArCQkJeF90aWxlX3BlcmNlbnRhZ2UgPSAzNTsKPiArCj4gKwkJaWYgKGRpc3BsYXlf YndfcGVyY2VudGFnZSA+IHhfdGlsZV9wZXJjZW50YWdlKQo+ICsJCQlyZXN1bHRzLT5tZW1fd2Eg PSBXQVRFUk1BUktfV0FfWF9USUxFRDsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArCj4gK2V4 aXQ6Cj4gKwlyZXN1bHRzLT5tZW1fd2EgPSBXQVRFUk1BUktfV0FfWV9USUxFRDsKPiArCXJldHVy biAwOwo+ICt9Cj4gKwo+ICsKClR3byBibGFuayBsaW5lcyBoZXJlLgoKCj4gwqBzdGF0aWMgdm9p ZAo+IMKgc2tsX2NvcHlfd21fZm9yX3BpcGUoc3RydWN0IHNrbF93bV92YWx1ZXMgKmRzdCwKPiDC oAkJwqDCoMKgwqDCoHN0cnVjdCBza2xfd21fdmFsdWVzICpzcmMsCj4gQEAgLTQxNjIsNiArNDI5 NSwxMCBAQCBza2xfY29tcHV0ZV93bShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCj4g wqAJLyogQ2xlYXIgYWxsIGRpcnR5IGZsYWdzICovCj4gwqAJcmVzdWx0cy0+ZGlydHlfcGlwZXMg PSAwOwo+IMKgCj4gKwlyZXQgPSBza2xfY29tcHV0ZV9tZW1vcnlfYmFuZHdpZHRoX3dtX3dhKHN0 YXRlKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gwqAJcmV0ID0gc2tsX2Nv bXB1dGVfZGRiKHN0YXRlKTsKPiDCoAlpZiAocmV0KQo+IMKgCQlyZXR1cm4gcmV0OwpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGlu ZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK