From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Lankhorst, Maarten" Subject: Re: [PATCH v6 8/8] drm/i915/gen9: WM memory bandwidth related workaround Date: Thu, 24 Nov 2016 12:51:31 +0000 Message-ID: <1479991890.30963.19.camel@intel.com> References: <20161124040135.5517-1-mahesh1.kumar@intel.com> <20161124040135.5517-9-mahesh1.kumar@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6CBA86EA3E for ; Thu, 24 Nov 2016 12:54:59 +0000 (UTC) In-Reply-To: <20161124040135.5517-9-mahesh1.kumar@intel.com> Content-Language: en-US Content-ID: <30CECA96F3A9B74BB20F9EED6B19EB03@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "intel-gfx@lists.freedesktop.org" , "Kumar, Mahesh1" Cc: "Zanoni, Paulo R" List-Id: intel-gfx@lists.freedesktop.org TWFoZXNoIEt1bWFyIHNjaHJlZWYgb3AgZG8gMjQtMTEtMjAxNiBvbSAwOTozMSBbKzA1MzBdOg0K PiBUaGlzIHBhdGNoIGltcGxlbW5ldHMgV29ya2FyaXVuZHMgcmVsYXRlZCB0byBkaXNwbGF5IGFy Yml0cmF0ZWQNCj4gbWVtb3J5DQo+IGJhbmR3aWR0aC4gVGhlc2UgV0EgYXJlIGFwcGxpY2FiZSBm b3IgYWxsIGdlbi05IGJhc2VkIHBsYXRmb3Jtcy4NCj4gDQo+IENoYW5nZXMgc2luY2UgdjE6DQo+ IMKgLSBSZWJhc2Ugb24gdG9wIG9mIFBhdWxvJ3MgcGF0Y2ggc2VyaWVzDQo+IENoYW5nZXMgc2lu Y2UgdjI6DQo+IMKgLSBBZGRyZXNzIHJldmlldyBjb21tZW50cw0KPiDCoC0gUmViYXNlL3Jld29y ayBhcyBwZXIgb3RoZXIgcGF0Y2ggY2hhbmdlcyBpbiBzZXJpZXMNCj4gDQo+IFNpZ25lZC1vZmYt Ynk6IE1haGVzaCBLdW1hciA8bWFoZXNoMS5rdW1hckBpbnRlbC5jb20+DQo+IC0tLQ0KPiDCoGRy aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggfMKgwqDCoDkgKysrDQo+IMKgZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfcG0uYyB8IDE0OQ0KPiArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrLS0tDQo+IMKgMiBmaWxlcyBjaGFuZ2VkLCAxNDkgaW5zZXJ0aW9ucygrKSwg OSBkZWxldGlvbnMoLSkNCj4gDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2Rydi5oDQo+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaA0KPiBpbmRleCA0 ZTJmMTdmLi4yYjY3M2M2IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5oDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgNCj4gQEAgLTEx OTMsNiArMTE5MywxMyBAQCBlbnVtIGludGVsX3NiaV9kZXN0aW5hdGlvbiB7DQo+IMKgCVNCSV9N UEhZLA0KPiDCoH07DQo+IMKgDQo+ICsvKiBTS0wrIFdhdGVybWFyayBhcmJpdHJhdGVkIGRpc3Bs YXkgYmFuZHdpZHRoIFdvcmthcm91bmRzICovDQo+ICtlbnVtIHdhdGVybWFya19tZW1vcnlfd2Eg ew0KPiArCVdBVEVSTUFSS19XQV9OT05FLA0KPiArCVdBVEVSTUFSS19XQV9YX1RJTEVELA0KPiAr CVdBVEVSTUFSS19XQV9ZX1RJTEVELA0KPiArfTsNCj4gKw0KPiDCoCNkZWZpbmUgUVVJUktfUElQ RUFfRk9SQ0UgKDE8PDApDQo+IMKgI2RlZmluZSBRVUlSS19MVkRTX1NTQ19ESVNBQkxFICgxPDwx KQ0KPiDCoCNkZWZpbmUgUVVJUktfSU5WRVJUX0JSSUdIVE5FU1MgKDE8PDIpDQo+IEBAIC0xNzY0 LDYgKzE3NzEsOCBAQCBzdHJ1Y3Qgc2tsX2RkYl9hbGxvY2F0aW9uIHsNCj4gwqANCj4gwqBzdHJ1 Y3Qgc2tsX3dtX3ZhbHVlcyB7DQo+IMKgCXVuc2lnbmVkIGRpcnR5X3BpcGVzOw0KPiArCS8qIGFu eSBXYXRlck1hcmsgbWVtb3J5IHdvcmthcm91bmQgUmVxdWlyZWQgKi8NCj4gKwllbnVtIHdhdGVy bWFya19tZW1vcnlfd2EgbWVtX3dhOw0KPiDCoAlzdHJ1Y3Qgc2tsX2RkYl9hbGxvY2F0aW9uIGRk YjsNCj4gwqB9Ow0KPiDCoA0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfcG0uYw0KPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMNCj4gaW5kZXggM2Uy ZGQ4Zi4uNTQ3YmJkYSAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf cG0uYw0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jDQo+IEBAIC0yODg5 LDExICsyODg5LDcgQEAgc2tsX3dtX3BsYW5lX2lkKGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZQ0K PiAqcGxhbmUpDQo+IMKgCX0NCj4gwqB9DQo+IMKgDQo+IC0vKg0KPiAtICogRklYTUU6IFdlIHN0 aWxsIGRvbid0IGhhdmUgdGhlIHByb3BlciBjb2RlIGRldGVjdCBpZiB3ZSBuZWVkIHRvDQo+IGFw cGx5IHRoZSBXQSwNCj4gLSAqIHNvIGFzc3VtZSB3ZSdsbCBhbHdheXMgbmVlZCBpdCBpbiBvcmRl ciB0byBhdm9pZCB1bmRlcnJ1bnMuDQo+IC0gKi8NCj4gLXN0YXRpYyBib29sIHNrbF9uZWVkc19t ZW1vcnlfYndfd2Eoc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUpDQo+ICtzdGF0aWMg Ym9vbCBpbnRlbF9uZWVkc19tZW1vcnlfYndfd2Eoc3RydWN0IGludGVsX2F0b21pY19zdGF0ZQ0K PiAqc3RhdGUpDQo+IMKgew0KPiDCoAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSB0b19pOTE1KHN0YXRlLQ0KPiA+YmFzZS5kZXYpOw0KPiDCoA0KPiBAQCAtMzA2Nyw3ICszMDYz LDcgQEAgYm9vbCBpbnRlbF9jYW5fZW5hYmxlX3NhZ3Yoc3RydWN0DQo+IGRybV9hdG9taWNfc3Rh dGUgKnN0YXRlKQ0KPiDCoA0KPiDCoAkJbGF0ZW5jeSA9IGRldl9wcml2LT53bS5za2xfbGF0ZW5j eVtsZXZlbF07DQo+IMKgDQo+IC0JCWlmIChza2xfbmVlZHNfbWVtb3J5X2J3X3dhKGludGVsX3N0 YXRlKSAmJg0KPiArCQlpZiAoaW50ZWxfbmVlZHNfbWVtb3J5X2J3X3dhKGludGVsX3N0YXRlKSAm Jg0KPiDCoAkJwqDCoMKgwqBwbGFuZS0+YmFzZS5zdGF0ZS0+ZmItPm1vZGlmaWVyID09DQo+IMKg CQnCoMKgwqDCoEk5MTVfRk9STUFUX01PRF9YX1RJTEVEKQ0KPiDCoAkJCWxhdGVuY3kgKz0gMTU7 DQo+IEBAIC0zNTk3LDcgKzM1OTMsNyBAQCBzdGF0aWMgaW50IHNrbF9jb21wdXRlX3BsYW5lX3dt KGNvbnN0IHN0cnVjdA0KPiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwNCj4gwqAJdWludDMy X3QgeV9taW5fc2NhbmxpbmVzOw0KPiDCoAlzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0 ZSA9DQo+IMKgCQl0b19pbnRlbF9hdG9taWNfc3RhdGUoY3N0YXRlLT5iYXNlLnN0YXRlKTsNCj4g LQlib29sIGFwcGx5X21lbW9yeV9id193YSA9IHNrbF9uZWVkc19tZW1vcnlfYndfd2Eoc3RhdGUp Ow0KPiArCWVudW0gd2F0ZXJtYXJrX21lbW9yeV93YSBtZW1fd2E7DQo+IMKgCWJvb2wgeV90aWxl ZCwgeF90aWxlZDsNCj4gwqANCj4gwqAJaWYgKGxhdGVuY3kgPT0gMCB8fCAhY3N0YXRlLT5iYXNl LmFjdGl2ZSB8fCAhaW50ZWxfcHN0YXRlLQ0KPiA+YmFzZS52aXNpYmxlKSB7DQo+IEBAIC0zNjEz LDcgKzM2MDksOCBAQCBzdGF0aWMgaW50IHNrbF9jb21wdXRlX3BsYW5lX3dtKGNvbnN0IHN0cnVj dA0KPiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwNCj4gwqAJaWYgKElTX0tBQllMQUtFKGRl dl9wcml2KSAmJiBkZXZfcHJpdi0+aXBjX2VuYWJsZWQpDQo+IMKgCQlsYXRlbmN5ICs9IDQ7DQo+ IMKgDQo+IC0JaWYgKGFwcGx5X21lbW9yeV9id193YSAmJiB4X3RpbGVkKQ0KPiArCW1lbV93YSA9 IHN0YXRlLT53bV9yZXN1bHRzLm1lbV93YTsNCj4gKwlpZiAobWVtX3dhICE9IFdBVEVSTUFSS19X QV9OT05FICYmIHhfdGlsZWQpDQo+IMKgCQlsYXRlbmN5ICs9IDE1Ow0KPiDCoA0KPiDCoAl3aWR0 aCA9IGRybV9yZWN0X3dpZHRoKCZpbnRlbF9wc3RhdGUtPmJhc2Uuc3JjKSA+PiAxNjsNCj4gQEAg LTM2NDgsNyArMzY0NSw3IEBAIHN0YXRpYyBpbnQgc2tsX2NvbXB1dGVfcGxhbmVfd20oY29uc3Qg c3RydWN0DQo+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LA0KPiDCoAkJeV9taW5fc2Nhbmxp bmVzID0gNDsNCj4gwqAJfQ0KPiDCoA0KPiAtCWlmIChhcHBseV9tZW1vcnlfYndfd2EpDQo+ICsJ aWYgKG1lbV93YSA9PSBXQVRFUk1BUktfV0FfWV9USUxFRCkNCj4gwqAJCXlfbWluX3NjYW5saW5l cyAqPSAyOw0KPiDCoA0KPiDCoAlwbGFuZV9ieXRlc19wZXJfbGluZSA9IHdpZHRoICogY3BwOw0K PiBAQCAtNDA3Nyw2ICs0MDc0LDE1IEBAIHNrbF9jb21wdXRlX2RkYihzdHJ1Y3QgZHJtX2F0b21p Y19zdGF0ZQ0KPiAqc3RhdGUpDQo+IMKgCX0NCj4gwqANCj4gwqAJLyoNCj4gKwnCoCogSWYgV2F0 ZXJtYXJrIHdvcmthcm91bmQgaXMgY2hhbmdlZCB3ZSBuZWVkIHRvIHJlY2FsY3VsYXRlDQo+ICsJ wqAqIHdhdGVybWFyayB2YWx1ZXMgZm9yIGFsbCBhY3RpdmUgcGlwZXMNCj4gKwnCoCovDQo+ICsJ aWYgKGludGVsX3N0YXRlLT53bV9yZXN1bHRzLm1lbV93YSAhPSBkZXZfcHJpdi0NCj4gPndtLnNr bF9ody5tZW1fd2EpIHsNCj4gKwkJcmVhbGxvY19waXBlcyA9IH4wOw0KPiArCQlpbnRlbF9zdGF0 ZS0+d21fcmVzdWx0cy5kaXJ0eV9waXBlcyA9IH4wOw0KPiArCX0NCj4gKw0KPiArCS8qDQo+IMKg CcKgKiBXZSdyZSBub3QgcmVjb21wdXRpbmcgZm9yIHRoZSBwaXBlcyBub3QgaW5jbHVkZWQgaW4g dGhlDQo+IGNvbW1pdCwgc28NCj4gwqAJwqAqIG1ha2Ugc3VyZSB3ZSBzdGFydCB3aXRoIHRoZSBj dXJyZW50IHN0YXRlLg0KPiDCoAnCoCovDQo+IEBAIC00MTAyLDYgKzQxMDgsMTI5IEBAIHNrbF9j b21wdXRlX2RkYihzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZQ0KPiAqc3RhdGUpDQo+IMKgfQ0KPiDC oA0KPiDCoHN0YXRpYyB2b2lkDQo+ICtza2xfY29tcHV0ZV9tZW1vcnlfYmFuZHdpZHRoX3dtX3dh KHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2ID0gc3RhdGUtPmRldjsNCj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSB0b19pOTE1KGRldik7DQo+ICsJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGM7 DQo+ICsJc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICppbnRlbF9wc3RhdGU7DQo+ICsJc3RydWN0 IGludGVsX2F0b21pY19zdGF0ZSAqaW50ZWxfc3RhdGUgPQ0KPiB0b19pbnRlbF9hdG9taWNfc3Rh dGUoc3RhdGUpOw0KPiArCXN0cnVjdCBtZW1kZXZfaW5mbyAqbWVtZGV2X2luZm8gPSAmZGV2X3By aXYtPm1lbWRldl9pbmZvOw0KPiArCWludCBudW1fYWN0aXZlX3BpcGVzOw0KPiArCXVpbnQzMl90 IG1heF9waXBlX2J3X2ticHMsIHRvdGFsX3BpcGVfYndfa2JwczsNCj4gKwlpbnQgZGlzcGxheV9i d19wZXJjZW50YWdlOw0KPiArCWJvb2wgeV90aWxlX2VuYWJsZWQgPSBmYWxzZTsNCj4gKw0KPiAr CWlmICghaW50ZWxfbmVlZHNfbWVtb3J5X2J3X3dhKGludGVsX3N0YXRlKSkgew0KPiArCQlpbnRl bF9zdGF0ZS0+d21fcmVzdWx0cy5tZW1fd2EgPSBXQVRFUk1BUktfV0FfTk9ORTsNCj4gKwkJcmV0 dXJuOw0KPiArCX0NCj4gKw0KPiArCWlmICghbWVtZGV2X2luZm8tPnZhbGlkKQ0KPiArCQlnb3Rv IGV4aXQ7DQo+ICsNCj4gKwltYXhfcGlwZV9id19rYnBzID0gMDsNCj4gKwludW1fYWN0aXZlX3Bp cGVzID0gMDsNCj4gKwlmb3JfZWFjaF9pbnRlbF9jcnRjKGRldiwgaW50ZWxfY3J0Yykgew0KPiAr CQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlOw0KPiArCQlzdHJ1Y3QgaW50ZWxfcGxh bmUgKnBsYW5lOw0KPiArCQlpbnQgbnVtX2FjdGl2ZV9wbGFuZXM7DQo+ICsJCXVpbnQzMl90wqDC oG1heF9wbGFuZV9id19rYnBzLCBwaXBlX2J3X2ticHM7DQo+ICsNCj4gKwkJLyoNCj4gKwkJwqAq IElmIENSVEMgaXMgcGFydCBvZiBjdXJyZW50IGF0b21pYyBjb21taXQsIGdldA0KPiBjcnRjIHN0 YXRlIGZyb20NCj4gKwkJwqAqIGV4aXN0aW5nIENSVEMgc3RhdGUuIGVsc2UgdGFrZSB0aGUgY2Fj aGVkIENSVEMNCj4gc3RhdGUNCj4gKwkJwqAqLw0KPiArCQljc3RhdGUgPSBOVUxMOw0KPiArCQlp ZiAoc3RhdGUpDQo+ICsJCQljc3RhdGUgPQ0KPiBpbnRlbF9hdG9taWNfZ2V0X2V4aXN0aW5nX2Ny dGNfc3RhdGUoc3RhdGUsDQo+ICsJCQkJCWludGVsX2NydGMpOw0KPiArCQlpZiAoIWNzdGF0ZSkN Cj4gKwkJCWNzdGF0ZSA9IHRvX2ludGVsX2NydGNfc3RhdGUoaW50ZWxfY3J0Yy0NCj4gPmJhc2Uu c3RhdGUpOw0KVGhpcyBpcyByZWFsbHkgcmVhbGx5IG5vdCBhbGxvd2VkLiBJZiB5b3Ugd2FudCB0 byBhY2Nlc3MNCmNydGMtPnN0YXRlLCB5b3UgbmVlZCB0byBnZXQgdGhlIHN0YXRlLg0KDQpTaW5j ZSBhIHcvYSBmb3JjZXMgYSBmdWxsIHJlY2FsY3VsYXRpb24sIGJlc3QgeW91IGNhbiBkbyBpcyBw dXQgdGhlIHBlcg0KcGlwZSBzdGF0dXMgaW4gY3J0Y19zdGF0ZS0+d20uc2tsIGFzIHdlbGwuIElm IGl0IGNoYW5nZXMgeW91IGNvdWxkIGFkZA0KYWxsIG90aGVyIHBpcGVzLg0KDQo+ICsJCWlmICgh Y3N0YXRlLT5iYXNlLmFjdGl2ZSkNCj4gKwkJCWNvbnRpbnVlOw0KPiArDQo+ICsJCW51bV9hY3Rp dmVfcGxhbmVzID0gMDsNCj4gKwkJbWF4X3BsYW5lX2J3X2ticHMgPSAwOw0KPiArCQlmb3JfZWFj aF9pbnRlbF9wbGFuZV9tYXNrKGRldiwgcGxhbmUsIGNzdGF0ZS0NCj4gPmJhc2UucGxhbmVfbWFz aykgew0KVGhpcyBpcyB2ZXJ5IG11Y2ggbm90IGFsbG93ZWQgZWl0aGVyIQ0KDQpJZiB5b3Ugd2Fu dCB0byBkbyB0aGlzIHNhZmVseSBhbmQgeW91IGhvbGQgY3J0Y19zdGF0ZSwgdXNlDQpkcm1fYXRv bWljX2NydGNfc3RhdGVfZm9yX2VhY2hfcGxhbmVfc3RhdGUuDQo+ICsJCQlzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyICpmYjsNCj4gKwkJCXVpbnQzMl90IHBsYW5lX2J3X2ticHM7DQo+ICsJCQl1aW50 MzJfdCBpZCA9IHNrbF93bV9wbGFuZV9pZChwbGFuZSk7DQo+ICsNCj4gKwkJCWludGVsX3BzdGF0 ZSA9IE5VTEw7DQo+ICsJCQlpbnRlbF9wc3RhdGUgPQ0KPiArCQkJCWludGVsX2F0b21pY19nZXRf ZXhpc3RpbmdfcGxhbmVfc3RhdA0KPiBlKHN0YXRlLA0KPiArCQkJCQkJCQkJDQo+IHBsYW5lKTsN Cj4gKwkJCWlmICghaW50ZWxfcHN0YXRlKQ0KPiArCQkJCWludGVsX3BzdGF0ZSA9DQo+ICsJCQkJ CXRvX2ludGVsX3BsYW5lX3N0YXRlKHBsYW5lLQ0KPiA+YmFzZS5zdGF0ZSk7DQo+ICsNCj4gKwkJ CWlmICghaW50ZWxfcHN0YXRlLT5iYXNlLnZpc2libGUpDQo+ICsJCQkJY29udGludWU7DQo+ICsN Cj4gKwkJCWlmIChXQVJOX09OKCFpbnRlbF9wc3RhdGUtPmJhc2UuZmIpKQ0KPiArCQkJCWNvbnRp bnVlOw0KPiArDQo+ICsJCQlpZiAoaWQgPT0gUExBTkVfQ1VSU09SKQ0KPiArCQkJCWNvbnRpbnVl Ow0KPiArDQo+ICsJCQlmYiA9IGludGVsX3BzdGF0ZS0+YmFzZS5mYjsNCj4gKwkJCWlmICgoZmIt Pm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEDQo+IHx8DQo+ICsJCQkJZmItPm1v ZGlmaWVyID09DQo+IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRCkpDQo+ICsJCQkJeV90aWxlX2Vu YWJsZWQgPSB0cnVlOw0KPiArDQo+ICsJCQlwbGFuZV9id19rYnBzID0NCj4gc2tsX2FkanVzdGVk X3BsYW5lX3BpeGVsX3JhdGUoY3N0YXRlLA0KPiArCQkJCQkJCQlpbnRlDQo+IGxfcHN0YXRlKTsN Cj4gKwkJCW1heF9wbGFuZV9id19rYnBzID0gbWF4KHBsYW5lX2J3X2ticHMsDQo+ICsJCQkJCQkJ bWF4X3BsYW5lX2J3DQo+IF9rYnBzKTsNCj4gKwkJCW51bV9hY3RpdmVfcGxhbmVzKys7DQo+ICsJ CX0NCj4gKwkJcGlwZV9id19rYnBzID0gbWF4X3BsYW5lX2J3X2ticHMgKg0KPiBudW1fYWN0aXZl X3BsYW5lczsNCj4gKwkJbWF4X3BpcGVfYndfa2JwcyA9IG1heChwaXBlX2J3X2ticHMsDQo+IG1h eF9waXBlX2J3X2ticHMpOw0KPiArCQludW1fYWN0aXZlX3BpcGVzKys7DQo+ICsJfQ0KPiArDQo+ ICsJdG90YWxfcGlwZV9id19rYnBzID0gbWF4X3BpcGVfYndfa2JwcyAqIG51bV9hY3RpdmVfcGlw ZXM7DQo+ICsNCj4gKwlkaXNwbGF5X2J3X3BlcmNlbnRhZ2UgPSBESVZfUk9VTkRfVVBfVUxMKHRv dGFsX3BpcGVfYndfa2Jwcw0KPiAqIDEwMCwNCj4gKwkJCQkJCW1lbWRldl9pbmZvLQ0KPiA+YmFu ZHdpZHRoX2ticHMpOw0KPiArDQo+ICsJLyoNCj4gKwnCoCogSWYgdGhlcmUgaXMgYW55IFl0aWxl IHBsYW5lIGVuYWJsZWQgYW5kIGFyYml0cmF0ZWQNCj4gZGlzcGxheQ0KPiArCcKgKiBiYW5kd2lk dGggPiAyMCUgb2YgcmF3IHN5c3RlbSBtZW1vcnkgYmFuZHdpZHRoDQo+ICsJwqAqIEVuYWxlIFkt dGlsZSByZWxhdGVkIFdBDQo+ICsJwqAqDQo+ICsJwqAqIElmIG1lbW9yeSBpcyBkdWFsIGNoYW5u ZWwgc2luZ2xlIHJhbmssIFh0aWxlIGxpbWl0ID0gMzUlLA0KPiBlbHNlIFh0aWxlDQo+ICsJwqAq IGxpbWl0ID0gNjAlDQo+ICsJwqAqIElmIHRoZXJlIGlzIG5vIFl0aWxlIHBsYW5lIGVuYWJsZWQg YW5kDQo+ICsJwqAqIGFyYml0cmF0ZWQgZGlzcGxheSBiYW5kd2lkdGggPiBYdGlsZSBsaW1pdA0K PiArCcKgKiBFbmFibGUgWC10aWxlIHJlYWxhdGVkIFdBDQo+ICsJwqAqLw0KPiArCWlmICh5X3Rp bGVfZW5hYmxlZCAmJiAoZGlzcGxheV9id19wZXJjZW50YWdlID4gMjApKQ0KPiArCQlpbnRlbF9z dGF0ZS0+d21fcmVzdWx0cy5tZW1fd2EgPQ0KPiBXQVRFUk1BUktfV0FfWV9USUxFRDsNCj4gKwll bHNlIHsNCj4gKwkJaW50IHhfdGlsZV9wZXJjZW50YWdlID0gNjA7DQo+ICsJCWVudW0gcmFuayBy YW5rID0gRFJBTV9SQU5LX1NJTkdMRTsNCj4gKw0KPiArCQlpZiAobWVtZGV2X2luZm8tPnJhbmsg IT0gRFJBTV9SQU5LX0lOVkFMSUQpDQo+ICsJCQlyYW5rID0gbWVtZGV2X2luZm8tPnJhbms7DQo+ ICsNCj4gKwkJaWYgKChyYW5rID09IERSQU1fUkFOS19TSU5HTEUpICYmDQo+ICsJCQkJCShtZW1k ZXZfaW5mby0+bnVtX2NoYW5uZWxzDQo+ID09IDIpKQ0KPiArCQkJeF90aWxlX3BlcmNlbnRhZ2Ug PSAzNTsNCj4gKw0KPiArCQlpZiAoZGlzcGxheV9id19wZXJjZW50YWdlID4geF90aWxlX3BlcmNl bnRhZ2UpDQo+ICsJCQlpbnRlbF9zdGF0ZS0+d21fcmVzdWx0cy5tZW1fd2EgPQ0KPiBXQVRFUk1B UktfV0FfWF9USUxFRDsNCj4gKwl9DQo+ICsJcmV0dXJuOw0KPiArDQo+ICtleGl0Og0KPiArCWlu dGVsX3N0YXRlLT53bV9yZXN1bHRzLm1lbV93YSA9IFdBVEVSTUFSS19XQV9ZX1RJTEVEOw0KPiAr fQ0KPiArDQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+IMKgc2tsX2NvcHlfd21fZm9yX3BpcGUoc3Ry dWN0IHNrbF93bV92YWx1ZXMgKmRzdCwNCj4gwqAJCcKgwqDCoMKgwqBzdHJ1Y3Qgc2tsX3dtX3Zh bHVlcyAqc3JjLA0KPiDCoAkJwqDCoMKgwqDCoGVudW0gcGlwZSBwaXBlKQ0KPiBAQCAtNDE3Nyw2 ICs0MzA2LDggQEAgc2tsX2NvbXB1dGVfd20oc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRl KQ0KPiDCoAkvKiBDbGVhciBhbGwgZGlydHkgZmxhZ3MgKi8NCj4gwqAJcmVzdWx0cy0+ZGlydHlf cGlwZXMgPSAwOw0KPiDCoA0KPiArCXNrbF9jb21wdXRlX21lbW9yeV9iYW5kd2lkdGhfd21fd2Eo c3RhdGUpOw0KPiArDQo+IMKgCXJldCA9IHNrbF9jb21wdXRlX2RkYihzdGF0ZSk7DQo+IMKgCWlm IChyZXQpDQo+IMKgCQlyZXR1cm4gcmV0OwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KSW50ZWwgSW50ZXJuYXRpb25h bCBCLlYuClJlZ2lzdGVyZWQgaW4gVGhlIE5ldGhlcmxhbmRzIHVuZGVyIG51bWJlciAzNDA5ODUz NQpTdGF0dXRvcnkgc2VhdDogSGFhcmxlbW1lcm1lZXIKUmVnaXN0ZXJlZCBhZGRyZXNzOiBDYXBy b25pbGFhbiAzNywgMTExOU5HIFNjaGlwaG9sLVJpamsKClRoaXMgZS1tYWlsIGFuZCBhbnkgYXR0 YWNobWVudHMgbWF5IGNvbnRhaW4gY29uZmlkZW50aWFsIG1hdGVyaWFsIGZvcgp0aGUgc29sZSB1 c2Ugb2YgdGhlIGludGVuZGVkIHJlY2lwaWVudChzKS4gQW55IHJldmlldyBvciBkaXN0cmlidXRp b24KYnkgb3RoZXJzIGlzIHN0cmljdGx5IHByb2hpYml0ZWQuIElmIHlvdSBhcmUgbm90IHRoZSBp bnRlbmRlZApyZWNpcGllbnQsIHBsZWFzZSBjb250YWN0IHRoZSBzZW5kZXIgYW5kIGRlbGV0ZSBh bGwgY29waWVzLgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK