From mboxrd@z Thu Jan 1 00:00:00 1970 From: John Spotswood Subject: Re: [PATCH v3 3/4] drm/i915: Add code to accept valid locked WOPCM register values Date: Fri, 13 Apr 2018 16:34:30 -0700 Message-ID: <1523662470.3618.4.camel@intel.com> References: <1523320940-32742-1-git-send-email-yaodong.li@intel.com> <1523320940-32742-3-git-send-email-yaodong.li@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 A53206EBCF for ; Fri, 13 Apr 2018 23:34:31 +0000 (UTC) In-Reply-To: <1523320940-32742-3-git-send-email-yaodong.li@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Jackie Li , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCAyMDE4LTA0LTA5IGF0IDE3OjQyIC0wNzAwLCBKYWNraWUgTGkgd3JvdGU6Cj4gSW4g Y3VycmVudCBjb2RlLCB3ZSBvbmx5IGNvbXBhcmUgdGhlIGxvY2tlZCBXT1BDTSByZWdpc3RlciB2 YWx1ZXMKPiB3aXRoIHRoZQo+IGNhbGN1bGF0ZWQgdmFsdWVzLiBIb3dldmVyLCB3ZSBjYW4gY29u dGludWUgbG9hZGluZyBHdUMvSHVDIGZpcm13YXJlCj4gaWYgdGhlCj4gbG9ja2VkIChvciBwYXJ0 aWFsbHkgbG9ja2VkKSB2YWx1ZXMgd2VyZSB2YWxpZCBmb3IgY3VycmVudCBHdUMvSHVDCj4gZmly bXdhcmUKPiBzaXplcy4KPiAKPiBUaGlzIHBhdGNoIGFkZGVkIGEgbmV3IGNvZGUgcGF0aCB0byB2 ZXJpZnkgd2hldGhlciB0aGUgbG9ja2VkCj4gcmVnaXN0ZXIKPiB2YWx1ZXMgY2FuIGJlIHVzZWQg Zm9yIEd1Qy9IdUMgZmlybXdhcmUgbG9hZGluZywgaXQgd2lsbCByZWNhbGN1bGF0ZQo+IHRoZQo+ IHZlcmlmeSB0aGUgbmV3IHZhbHVlcyBpZiB0aGVzZSByZWdpc3RlcnMgd2VyZSBwYXJ0aWFsbHkg bG9ja2VkLCBzbwo+IHRoYXQgd2UKPiB3b24ndCBmYWlsIHRoZSBHdUMvSHVDIGZpcm13YXJlIGxv YWRpbmcgZXZlbiBpZiB0aGUgbG9ja2VkIHJlZ2lzdGVyCj4gdmFsdWVzCj4gYXJlIGRpZmZlcmVu dCBmcm9tIHRoZSBjYWxjdWxhdGVkIG9uZXMuCj4gCj4gdjI6Cj4gwqAtIFVwZGF0ZSBXT1BDTSBy ZWdpc3RlciBvbmx5IGlmIGl0J3Mgbm90IGxvY2tlZAo+IAo+IFNpZ25lZC1vZmYtYnk6IEphY2tp ZSBMaSA8eWFvZG9uZy5saUBpbnRlbC5jb20+Cj4gQ2M6IE1pY2hhbCBXYWpkZWN6a28gPG1pY2hh bC53YWpkZWN6a29AaW50ZWwuY29tPgo+IENjOiBTYWdhciBBcnVuIEthbWJsZSA8c2FnYXIuYS5r YW1ibGVAaW50ZWwuY29tPgo+IENjOiBNaWNoYWwgV2luaWFyc2tpIDxtaWNoYWwud2luaWFyc2tp QGludGVsLmNvbT4KPiBDYzogSm9obiBTcG90c3dvb2QgPGpvaG4uYS5zcG90c3dvb2RAaW50ZWwu Y29tPgo+IENjOiBKb29uYXMgTGFodGluZW4gPGpvb25hcy5sYWh0aW5lbkBsaW51eC5pbnRlbC5j b20+CgpSZXZpZXdlZC1ieTogSm9obiBTcG90c3dvb2QgPGpvaG4uYS5zcG90c3dvb2RAaW50ZWwu Y29tPgoKPiAtLS0KPiDCoGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3dvcGNtLmMgfCAyMTcK PiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tCj4gwqAxIGZpbGUgY2hhbmdl ZCwgMTg1IGluc2VydGlvbnMoKyksIDMyIGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF93b3BjbS5jCj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF93b3BjbS5jCj4gaW5kZXggYjFjMDhjYS4uZmE4ZDJiZSAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF93b3BjbS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfd29wY20uYwo+IEBAIC0xNDAsNiArMTQwLDUzIEBAIHN0YXRpYyBpbmxpbmUg aW50IGNoZWNrX2h3X3Jlc3RyaWN0aW9uKHN0cnVjdAo+IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUs Cj4gwqAJcmV0dXJuIGVycjsKPiDCoH0KPiDCoAo+ICtzdGF0aWMgaW5saW5lIHUzMiBjYWxjdWxh dGVfbWluX2d1Y193b3BjbV9iYXNlKHUzMiBodWNfZndfc2l6ZSkKPiArewo+ICsJcmV0dXJuIEFM SUdOKGh1Y19md19zaXplICsgV09QQ01fUkVTRVJWRURfU0laRSwKPiArCQnCoMKgwqDCoMKgR1VD X1dPUENNX09GRlNFVF9BTElHTk1FTlQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHUzMiBj YWxjdWxhdGVfbWluX2d1Y193b3BjbV9zaXplKHUzMiBndWNfZndfc2l6ZSkKPiArewo+ICsJcmV0 dXJuIGd1Y19md19zaXplICsgR1VDX1dPUENNX1JFU0VSVkVEICsKPiBHVUNfV09QQ01fU1RBQ0tf UkVTRVJWRUQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgaW50IGNhbGN1bGF0ZV9tYXhfZ3Vj X3dvcGNtX3NpemUoc3RydWN0IGludGVsX3dvcGNtCj4gKndvcGNtLAo+ICsJCQkJCcKgwqDCoMKg wqDCoMKgdTMyIGd1Y193b3BjbV9iYXNlLAo+ICsJCQkJCcKgwqDCoMKgwqDCoMKgdTMyICpndWNf d29wY21fc2l6ZSkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB3b3Bj bV90b19pOTE1KHdvcGNtKTsKPiArCXUzMiBjdHhfcnN2ZCA9IGNvbnRleHRfcmVzZXJ2ZWRfc2l6 ZShpOTE1KTsKPiArCj4gKwlpZiAoZ3VjX3dvcGNtX2Jhc2UgPj0gd29wY20tPnNpemUgfHwKPiAr CcKgwqDCoMKgKGd1Y193b3BjbV9iYXNlICsgY3R4X3JzdmQpID49IHdvcGNtLT5zaXplKSB7Cj4g KwkJRFJNX0VSUk9SKCJHdUMgV09QQ00gYmFzZSAoJXVLaUIpIGlzIHRvbyBiaWcuXG4iLAo+ICsJ CQnCoMKgZ3VjX3dvcGNtX2Jhc2UgLyAxMDI0KTsKPiArCQlyZXR1cm4gLUUyQklHOwo+ICsJfQo+ ICsKPiArCSpndWNfd29wY21fc2l6ZSA9Cj4gKwkJKHdvcGNtLT5zaXplIC0gZ3VjX3dvcGNtX2Jh c2UgLSBjdHhfcnN2ZCkgJgo+IEdVQ19XT1BDTV9TSVpFX01BU0s7Cj4gKwo+ICsJcmV0dXJuIDA7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgaW50IHZlcmlmeV9jYWxjdWxhdGVkX3ZhbHVlcyhz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQo+ICppOTE1LAo+ICsJCQkJCcKgwqDCoHUzMiBndWNfZndf c2l6ZSwgdTMyCj4gaHVjX2Z3X3NpemUsCj4gKwkJCQkJwqDCoMKgdTMyIGd1Y193b3BjbV9iYXNl LAo+ICsJCQkJCcKgwqDCoHUzMiBndWNfd29wY21fc2l6ZSkKPiArewo+ICsJaWYgKGd1Y193b3Bj bV9zaXplIDwKPiBjYWxjdWxhdGVfbWluX2d1Y193b3BjbV9zaXplKGd1Y19md19zaXplKSkgewo+ ICsJCURSTV9FUlJPUigiTmVlZCAldUtpQiBXT1BDTSBmb3IgR3VDIEZXLCAldUtpQgo+IGF2YWls YWJsZS5cbiIsCj4gKwkJCcKgwqBjYWxjdWxhdGVfbWluX2d1Y193b3BjbV9zaXplKGd1Y19md19z aXplKSwKPiArCQkJwqDCoGd1Y193b3BjbV9zaXplIC8gMTAyNCk7Cj4gKwkJcmV0dXJuIC1FMkJJ RzsKPiArCX0KPiArCj4gKwlyZXR1cm4gY2hlY2tfaHdfcmVzdHJpY3Rpb24oaTkxNSwgZ3VjX3dv cGNtX2Jhc2UsCj4gZ3VjX3dvcGNtX3NpemUsCj4gKwkJCQnCoMKgwqDCoGh1Y19md19zaXplKTsK PiArfQo+ICsKPiDCoC8qKgo+IMKgICogaW50ZWxfd29wY21faW5pdCgpIC0gSW5pdGlhbGl6ZSB0 aGUgV09QQ00gc3RydWN0dXJlLgo+IMKgICogQHdvcGNtOiBwb2ludGVyIHRvIGludGVsX3dvcGNt Lgo+IEBAIC0xNTcsMTAgKzIwNCw4IEBAIGludCBpbnRlbF93b3BjbV9pbml0KHN0cnVjdCBpbnRl bF93b3BjbSAqd29wY20pCj4gwqAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB3b3Bj bV90b19pOTE1KHdvcGNtKTsKPiDCoAl1MzIgZ3VjX2Z3X3NpemUgPSBpbnRlbF91Y19md19nZXRf dXBsb2FkX3NpemUoJmk5MTUtCj4gPmd1Yy5mdyk7Cj4gwqAJdTMyIGh1Y19md19zaXplID0gaW50 ZWxfdWNfZndfZ2V0X3VwbG9hZF9zaXplKCZpOTE1LQo+ID5odWMuZncpOwo+IC0JdTMyIGN0eF9y c3ZkID0gY29udGV4dF9yZXNlcnZlZF9zaXplKGk5MTUpOwo+IMKgCXUzMiBndWNfd29wY21fYmFz ZTsKPiDCoAl1MzIgZ3VjX3dvcGNtX3NpemU7Cj4gLQl1MzIgZ3VjX3dvcGNtX3JzdmQ7Cj4gwqAJ aW50IGVycjsKPiDCoAo+IMKgCUdFTV9CVUdfT04oIXdvcGNtLT5zaXplKTsKPiBAQCAtMTc3LDM1 ICsyMjIsMTIxIEBAIGludCBpbnRlbF93b3BjbV9pbml0KHN0cnVjdCBpbnRlbF93b3BjbQo+ICp3 b3BjbSkKPiDCoAkJcmV0dXJuIC1FMkJJRzsKPiDCoAl9Cj4gwqAKPiAtCWd1Y193b3BjbV9iYXNl ID0gQUxJR04oaHVjX2Z3X3NpemUgKyBXT1BDTV9SRVNFUlZFRF9TSVpFLAo+IC0JCQnCoMKgwqDC oMKgwqDCoEdVQ19XT1BDTV9PRkZTRVRfQUxJR05NRU5UKTsKPiAtCWlmICgoZ3VjX3dvcGNtX2Jh c2UgKyBjdHhfcnN2ZCkgPj0gd29wY20tPnNpemUpIHsKPiAtCQlEUk1fRVJST1IoIkd1QyBXT1BD TSBiYXNlICgldUtpQikgaXMgdG9vIGJpZy5cbiIsCj4gLQkJCcKgwqBndWNfd29wY21fYmFzZSAv IDEwMjQpOwo+ICsJZ3VjX3dvcGNtX2Jhc2UgPSBjYWxjdWxhdGVfbWluX2d1Y193b3BjbV9iYXNl KGh1Y19md19zaXplKTsKPiArCWVyciA9IGNhbGN1bGF0ZV9tYXhfZ3VjX3dvcGNtX3NpemUod29w Y20sIGd1Y193b3BjbV9iYXNlLAo+ICsJCQkJCcKgwqDCoCZndWNfd29wY21fc2l6ZSk7Cj4gKwlp ZiAoZXJyKQo+ICsJCXJldHVybiBlcnI7Cj4gKwo+ICsJRFJNX0RFQlVHX0RSSVZFUigiQ2FsY3Vs YXRlZCBHdUMgV09QQ00gUmVnaW9uOiBbJXVLaUIsCj4gJXVLaUIpXG4iLAo+ICsJCQnCoGd1Y193 b3BjbV9iYXNlIC8gMTAyNCwKPiArCQkJwqAoZ3VjX3dvcGNtX2Jhc2UgKyBndWNfd29wY21fc2l6 ZSkgLyAxMDI0KTsKPiArCj4gKwllcnIgPSB2ZXJpZnlfY2FsY3VsYXRlZF92YWx1ZXMoaTkxNSwg Z3VjX2Z3X3NpemUsCj4gaHVjX2Z3X3NpemUsCj4gKwkJCQnCoMKgwqDCoMKgwqDCoGd1Y193b3Bj bV9iYXNlLAo+IGd1Y193b3BjbV9zaXplKTsKPiArCWlmIChlcnIpCj4gKwkJcmV0dXJuIGVycjsK PiArCj4gKwl3b3BjbS0+Z3VjLmJhc2UgPSBndWNfd29wY21fYmFzZTsKPiArCXdvcGNtLT5ndWMu c2l6ZSA9IGd1Y193b3BjbV9zaXplOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW5saW5lIGludCB2ZXJpZnlfbG9ja2VkX3ZhbHVlcyhzdHJ1Y3QgaW50ZWxfd29wY20gKndv cGNtLAo+ICsJCQkJwqDCoMKgwqDCoMKgwqB1MzIgZ3VjX3dvcGNtX2Jhc2UsIHUzMgo+IGd1Y193 b3BjbV9zaXplKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHdvcGNt X3RvX2k5MTUod29wY20pOwo+ICsJdTMyIGd1Y19md19zaXplID0gaW50ZWxfdWNfZndfZ2V0X3Vw bG9hZF9zaXplKCZpOTE1LQo+ID5ndWMuZncpOwo+ICsJdTMyIGh1Y19md19zaXplID0gaW50ZWxf dWNfZndfZ2V0X3VwbG9hZF9zaXplKCZpOTE1LQo+ID5odWMuZncpOwo+ICsJdTMyIGN0eF9yc3Zk ID0gY29udGV4dF9yZXNlcnZlZF9zaXplKGk5MTUpOwo+ICsKPiArCS8qCj4gKwnCoCogTG9ja2Vk IEd1QyBXT1BDTSBiYXNlIGFuZCBzaXplIGNvdWxkIGJlIGFueSB2YWx1ZXMgd2hpY2gKPiBhcmUg bGFyZ2UKPiArCcKgKiBlbm91Z2ggdG8gbGVhZCB0byBhIHdyYXAgYXJvdW5kIGFmdGVyIHBlcmZv cm1pbmcgYWRkCj4gb3BlcmF0aW9ucy4KPiArCcKgKi8KPiArCWlmIChndWNfd29wY21fYmFzZSA+ PSB3b3BjbS0+c2l6ZSkgewo+ICsJCURSTV9FUlJPUigiTG9ja2VkIGJhc2UgdmFsdWUgJXVLaUIg Pj0gV09QQ00gc2l6ZQo+ICV1S2lCLlxuIiwKPiArCQkJwqDCoGd1Y193b3BjbV9iYXNlIC8gMTAy NCwKPiArCQkJwqDCoHdvcGNtLT5zaXplIC8gMTAyNCk7Cj4gwqAJCXJldHVybiAtRTJCSUc7Cj4g wqAJfQo+IMKgCj4gLQlndWNfd29wY21fc2l6ZSA9IHdvcGNtLT5zaXplIC0gZ3VjX3dvcGNtX2Jh c2UgLSBjdHhfcnN2ZDsKPiAtCWd1Y193b3BjbV9zaXplICY9IEdVQ19XT1BDTV9TSVpFX01BU0s7 Cj4gKwlpZiAoZ3VjX3dvcGNtX3NpemUgPj0gd29wY20tPnNpemUpIHsKPiArCQlEUk1fRVJST1Io IkxvY2tlZCBzaXplIHZhbHVlICV1S2lCID49IFdPUENNIHNpemUKPiAldUtpQi5cbiIsCj4gKwkJ CcKgwqBndWNfd29wY21fYmFzZSAvIDEwMjQsCj4gKwkJCcKgwqB3b3BjbS0+c2l6ZSAvIDEwMjQp Owo+ICsJCXJldHVybiAtRTJCSUc7Cj4gKwl9Cj4gwqAKPiAtCURSTV9ERUJVR19EUklWRVIoIkNh bGN1bGF0ZWQgR3VDIFdPUENNIFJlZ2lvbjogWyV1S2lCLAo+ICV1S2lCKVxuIiwKPiAtCQkJwqBn dWNfd29wY21fYmFzZSAvIDEwMjQsIGd1Y193b3BjbV9zaXplIC8KPiAxMDI0KTsKPiArCWlmIChn dWNfd29wY21fYmFzZSArIGd1Y193b3BjbV9zaXplICsgY3R4X3JzdmQgPiB3b3BjbS0KPiA+c2l6 ZSkgewo+ICsJCURSTV9FUlJPUigiTmVlZCAldUtpQiBXT1BDTSBpbiB0b3RhbCwgJXVLaUIKPiBh dmFpbGFibGUuXG4iLAo+ICsJCQnCoMKgKGd1Y193b3BjbV9iYXNlICsgZ3VjX3dvcGNtX3NpemUg Kwo+IGN0eF9yc3ZkKSAvIDEwMjQsCj4gKwkJCcKgwqAod29wY20tPnNpemUpIC8gMTAyNCk7Cj4g KwkJcmV0dXJuIC1FMkJJRzsKPiArCX0KPiDCoAo+IC0JZ3VjX3dvcGNtX3JzdmQgPSBHVUNfV09Q Q01fUkVTRVJWRUQgKwo+IEdVQ19XT1BDTV9TVEFDS19SRVNFUlZFRDsKPiAtCWlmICgoZ3VjX2Z3 X3NpemUgKyBndWNfd29wY21fcnN2ZCkgPiBndWNfd29wY21fc2l6ZSkgewo+IC0JCURSTV9FUlJP UigiTmVlZCAldUtpQiBXT1BDTSBmb3IgR3VDLCAldUtpQgo+IGF2YWlsYWJsZS5cbiIsCj4gLQkJ CcKgwqAoZ3VjX2Z3X3NpemUgKyBndWNfd29wY21fcnN2ZCkgLyAxMDI0LAo+IC0JCQnCoMKgZ3Vj X3dvcGNtX3NpemUgLyAxMDI0KTsKPiArCWlmIChndWNfd29wY21fYmFzZSA8Cj4gY2FsY3VsYXRl X21pbl9ndWNfd29wY21fYmFzZShodWNfZndfc2l6ZSkpIHsKPiArCQlEUk1fRVJST1IoIk5lZWQg JXVLaUIgV09QQ00gZm9yIEh1QyBGVywgJXVLaUIKPiBhdmFpbGFibGUuXG4iLAo+ICsJCQnCoMKg Y2FsY3VsYXRlX21pbl9ndWNfd29wY21fYmFzZShodWNfZndfc2l6ZSkKPiAvIDEwMjQsCj4gKwkJ CcKgwqBndWNfd29wY21fYmFzZSAvIDEwMjQpOwo+IMKgCQlyZXR1cm4gLUUyQklHOwo+IMKgCX0K PiDCoAo+IC0JZXJyID0gY2hlY2tfaHdfcmVzdHJpY3Rpb24oaTkxNSwgZ3VjX3dvcGNtX2Jhc2Us Cj4gZ3VjX3dvcGNtX3NpemUsCj4gLQkJCQnCoMKgwqBodWNfZndfc2l6ZSk7Cj4gKwlyZXR1cm4g dmVyaWZ5X2NhbGN1bGF0ZWRfdmFsdWVzKGk5MTUsIGd1Y19md19zaXplLAo+IGh1Y19md19zaXpl LAo+ICsJCQkJCWd1Y193b3BjbV9iYXNlLAo+IGd1Y193b3BjbV9zaXplKTsKPiArfQo+ICsKPiAr c3RhdGljIGlubGluZSBpbnQgdmVyaWZ5X2xvY2tlZF92YWx1ZXNfYW5kX3VwZGF0ZShzdHJ1Y3Qg aW50ZWxfd29wY20KPiAqd29wY20sCj4gKwkJCQkJCcKgwqBib29sCj4gKnVwZGF0ZV9zaXplX3Jl ZywKPiArCQkJCQkJwqDCoGJvb2wKPiAqdXBkYXRlX29mZnNldF9yZWcpCj4gK3sKPiArCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHdvcGNtX3RvX2k5MTUod29wY20pOwo+ICsJ dTMyIGh1Y19md19zaXplID0gaW50ZWxfdWNfZndfZ2V0X3VwbG9hZF9zaXplKCZkZXZfcHJpdi0K PiA+aHVjLmZ3KTsKPiArCXUzMiBzaXplX3ZhbCA9IEk5MTVfUkVBRChHVUNfV09QQ01fU0laRSk7 Cj4gKwl1MzIgb2Zmc2V0X3ZhbCA9IEk5MTVfUkVBRChETUFfR1VDX1dPUENNX09GRlNFVCk7Cj4g Kwlib29sIG9mZnNldF9yZWdfbG9ja2VkID0gb2Zmc2V0X3ZhbCAmCj4gR1VDX1dPUENNX09GRlNF VF9WQUxJRDsKPiArCWJvb2wgc2l6ZV9yZWdfbG9ja2VkID0gc2l6ZV92YWwgJiBHVUNfV09QQ01f U0laRV9MT0NLRUQ7Cj4gKwl1MzIgZ3VjX3dvcGNtX2Jhc2UgPSBvZmZzZXRfdmFsICYgR1VDX1dP UENNX09GRlNFVF9NQVNLOwo+ICsJdTMyIGd1Y193b3BjbV9zaXplID0gc2l6ZV92YWwgJiBHVUNf V09QQ01fU0laRV9NQVNLOwo+ICsJaW50IGVycjsKPiArCj4gKwkqdXBkYXRlX3NpemVfcmVnID0g IXNpemVfcmVnX2xvY2tlZDsKPiArCSp1cGRhdGVfb2Zmc2V0X3JlZyA9ICFvZmZzZXRfcmVnX2xv Y2tlZDsKPiArCj4gKwlpZiAoIW9mZnNldF9yZWdfbG9ja2VkICYmICFzaXplX3JlZ19sb2NrZWQp Cj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJaWYgKGd1Y193b3BjbV9iYXNlID09IHdvcGNtLT5ndWMu YmFzZSAmJgo+ICsJwqDCoMKgwqBndWNfd29wY21fc2l6ZSA9PSB3b3BjbS0+Z3VjLnNpemUpCj4g KwkJcmV0dXJuIDA7Cj4gKwo+ICsJaWYgKFVTRVNfSFVDKGRldl9wcml2KSAmJiBvZmZzZXRfcmVn X2xvY2tlZCAmJgo+ICsJwqDCoMKgwqAhKG9mZnNldF92YWwgJiBIVUNfTE9BRElOR19BR0VOVF9H VUMpKSB7Cj4gKwkJRFJNX0VSUk9SKCJIVUNfTE9BRElOR19BR0VOVF9HVUMgaXNuJ3QgbG9ja2Vk IGZvcgo+IFVTRVNfSFVDLlxuIik7Cj4gKwkJcmV0dXJuIC1FSU87Cj4gKwl9Cj4gKwo+ICsJaWYg KCFvZmZzZXRfcmVnX2xvY2tlZCkKPiArCQlndWNfd29wY21fYmFzZSA9Cj4gY2FsY3VsYXRlX21p bl9ndWNfd29wY21fYmFzZShodWNfZndfc2l6ZSk7Cj4gKwo+ICsJaWYgKCFzaXplX3JlZ19sb2Nr ZWQpIHsKPiArCQllcnIgPSBjYWxjdWxhdGVfbWF4X2d1Y193b3BjbV9zaXplKHdvcGNtLAo+IGd1 Y193b3BjbV9iYXNlLAo+ICsJCQkJCQnCoMKgwqAmZ3VjX3dvcGNtX3NpemUpOwo+ICsJCWlmIChl cnIpCj4gKwkJCXJldHVybiBlcnI7Cj4gKwl9Cj4gKwo+ICsJRFJNX0RFQlVHX0RSSVZFUigiUmVj YWxjdWxhdGVkIEd1QyBXT1BDTSBSZWdpb246IFsldUtpQiwKPiAldUtpQilcbiIsCj4gKwkJCcKg Z3VjX3dvcGNtX2Jhc2UgLyAxMDI0LAo+ICsJCQnCoChndWNfd29wY21fYmFzZSArIGd1Y193b3Bj bV9zaXplKSAvIDEwMjQpOwo+ICsKPiArCWVyciA9IHZlcmlmeV9sb2NrZWRfdmFsdWVzKHdvcGNt LCBndWNfd29wY21fYmFzZSwKPiBndWNfd29wY21fc2l6ZSk7Cj4gwqAJaWYgKGVycikKPiDCoAkJ cmV0dXJuIGVycjsKPiDCoAo+IC0Jd29wY20tPmd1Yy5iYXNlID0gZ3VjX3dvcGNtX2Jhc2U7Cj4g wqAJd29wY20tPmd1Yy5zaXplID0gZ3VjX3dvcGNtX3NpemU7Cj4gKwl3b3BjbS0+Z3VjLmJhc2Ug PSBndWNfd29wY21fYmFzZTsKPiDCoAo+IMKgCXJldHVybiAwOwo+IMKgfQo+IEBAIC0yMzMsMTEg KzM2NCwxNCBAQCBzdGF0aWMgaW5saW5lIGludCB3cml0ZV9hbmRfdmVyaWZ5KHN0cnVjdAo+IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IMKgICogd2lsbCB2ZXJpZnkgdGhlIHJlZ2lzdGVy IHZhbHVlcyB0byBtYWtlIHN1cmUgdGhlIHJlZ2lzdGVycyBhcmUKPiBsb2NrZWQgd2l0aAo+IMKg ICogY29ycmVjdCB2YWx1ZXMuCj4gwqAgKgo+IC0gKiBSZXR1cm46IDAgb24gc3VjY2Vzcy4gLUVJ TyBpZiByZWdpc3RlcnMgd2VyZSBsb2NrZWQgd2l0aAo+IGluY29ycmVjdCB2YWx1ZXMuCj4gKyAq IFJldHVybjogMCBvbiBzdWNjZXNzLiBNaW51cyBlcnJvciBjb2RlIGlmIHJlZ2lzdGVyZWQgd2Vy ZSBsb2NrZWQKPiB3aXRoCj4gKyAqIGluY29ycmVjdCB2YWx1ZXMuLUVJTyBpZiByZWdpc3RlcnMg ZmFpbGVkIHRvIGxvY2sgd2l0aCBjb3JyZWN0Cj4gdmFsdWVzLgo+IMKgICovCj4gwqBpbnQgaW50 ZWxfd29wY21faW5pdF9odyhzdHJ1Y3QgaW50ZWxfd29wY20gKndvcGNtKQo+IMKgewo+IMKgCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHdvcGNtX3RvX2k5MTUod29wY20pOwo+ ICsJYm9vbCB1cGRhdGVfc2l6ZV9yZWc7Cj4gKwlib29sIHVwZGF0ZV9vZmZzZXRfcmVnOwo+IMKg CWludCBlcnI7Cj4gwqAKPiDCoAlpZiAoIVVTRVNfR1VDKGRldl9wcml2KSkKPiBAQCAtMjQ3LDI3 ICszODEsNDYgQEAgaW50IGludGVsX3dvcGNtX2luaXRfaHcoc3RydWN0IGludGVsX3dvcGNtCj4g KndvcGNtKQo+IMKgCUdFTV9CVUdfT04oIXdvcGNtLT5ndWMuc2l6ZSk7Cj4gwqAJR0VNX0JVR19P Tighd29wY20tPmd1Yy5iYXNlKTsKPiDCoAo+IC0JZXJyID0gd3JpdGVfYW5kX3ZlcmlmeShkZXZf cHJpdiwgR1VDX1dPUENNX1NJWkUsIHdvcGNtLQo+ID5ndWMuc2l6ZSwKPiAtCQkJwqDCoMKgwqDC oMKgwqBHVUNfV09QQ01fU0laRV9NQVNLIHwKPiBHVUNfV09QQ01fU0laRV9MT0NLRUQsCj4gLQkJ CcKgwqDCoMKgwqDCoMKgR1VDX1dPUENNX1NJWkVfTE9DS0VEKTsKPiAtCWlmIChlcnIpCj4gKwll cnIgPSB2ZXJpZnlfbG9ja2VkX3ZhbHVlc19hbmRfdXBkYXRlKHdvcGNtLAo+ICZ1cGRhdGVfc2l6 ZV9yZWcsCj4gKwkJCQkJwqDCoMKgwqDCoMKgJnVwZGF0ZV9vZmZzZXRfcmVnKTsKPiArCWlmIChl cnIpIHsKPiArCQlEUk1fRVJST1IoIldPUENNIHJlZ2lzdGVycyBhcmUgbG9ja2VkIHdpdGggaW52 YWxpZAo+IHZhbHVlcy5cbiIpOwo+IMKgCQlnb3RvIGVycl9vdXQ7Cj4gKwl9Cj4gwqAKPiAtCWVy ciA9IHdyaXRlX2FuZF92ZXJpZnkoZGV2X3ByaXYsIERNQV9HVUNfV09QQ01fT0ZGU0VULAo+IC0J CQnCoMKgwqDCoMKgwqDCoHdvcGNtLT5ndWMuYmFzZSB8Cj4gSFVDX0xPQURJTkdfQUdFTlRfR1VD LAo+IC0JCQnCoMKgwqDCoMKgwqDCoEdVQ19XT1BDTV9PRkZTRVRfTUFTSyB8Cj4gSFVDX0xPQURJ TkdfQUdFTlRfR1VDIHwKPiAtCQkJwqDCoMKgwqDCoMKgwqBHVUNfV09QQ01fT0ZGU0VUX1ZBTElE LAo+IC0JCQnCoMKgwqDCoMKgwqDCoEdVQ19XT1BDTV9PRkZTRVRfVkFMSUQpOwo+IC0JaWYgKGVy cikKPiAtCQlnb3RvIGVycl9vdXQ7Cj4gKwlpZiAodXBkYXRlX3NpemVfcmVnKSB7Cj4gKwkJZXJy ID0gd3JpdGVfYW5kX3ZlcmlmeShkZXZfcHJpdiwgR1VDX1dPUENNX1NJWkUsCj4gKwkJCQnCoMKg wqDCoMKgwqDCoHdvcGNtLT5ndWMuc2l6ZSwKPiArCQkJCcKgwqDCoMKgwqDCoMKgR1VDX1dPUENN X1NJWkVfTUFTSyB8Cj4gKwkJCQnCoMKgwqDCoMKgwqDCoEdVQ19XT1BDTV9TSVpFX0xPQ0tFRCwK PiArCQkJCcKgwqDCoMKgwqDCoMKgR1VDX1dPUENNX1NJWkVfTE9DS0VEKTsKPiArCQlpZiAoZXJy KSB7Cj4gKwkJCURSTV9FUlJPUigiRmFpbGVkIHRvIEd1QyBXT1BDTSBzaXplIHdpdGgKPiAlI3gu XG4iLAo+ICsJCQkJwqDCoHdvcGNtLT5ndWMuc2l6ZSk7Cj4gKwkJCWdvdG8gZXJyX291dDsKPiAr CQl9Cj4gKwl9Cj4gwqAKPiArCWlmICh1cGRhdGVfb2Zmc2V0X3JlZykgewo+ICsJCWVyciA9IHdy aXRlX2FuZF92ZXJpZnkoZGV2X3ByaXYsCj4gRE1BX0dVQ19XT1BDTV9PRkZTRVQsCj4gKwkJCQnC oMKgwqDCoMKgwqDCoHdvcGNtLT5ndWMuYmFzZSB8Cj4gSFVDX0xPQURJTkdfQUdFTlRfR1VDLAo+ ICsJCQkJwqDCoMKgwqDCoMKgwqBHVUNfV09QQ01fT0ZGU0VUX01BU0sgfAo+ICsJCQkJwqDCoMKg wqDCoMKgwqBIVUNfTE9BRElOR19BR0VOVF9HVUMgfAo+ICsJCQkJwqDCoMKgwqDCoMKgwqBHVUNf V09QQ01fT0ZGU0VUX1ZBTElELAo+ICsJCQkJwqDCoMKgwqDCoMKgwqBHVUNfV09QQ01fT0ZGU0VU X1ZBTElEKTsKPiArCQlpZiAoZXJyKSB7Cj4gKwkJCURSTV9FUlJPUigiRmFpbGVkIHRvIEd1QyBX T1BDTSBvZmZzZXQgd2l0aAo+ICUjeC5cbiIsCj4gKwkJCQnCoMKgd29wY20tPmd1Yy5iYXNlKTsK PiArCQkJZ290byBlcnJfb3V0Owo+ICsJCX0KPiArCX0KPiDCoAlyZXR1cm4gMDsKPiDCoAo+IMKg ZXJyX291dDoKPiAtCURSTV9FUlJPUigiRmFpbGVkIHRvIGluaXQgV09QQ00gcmVnaXN0ZXJzOlxu Iik7Cj4gwqAJRFJNX0VSUk9SKCJETUFfR1VDX1dPUENNX09GRlNFVD0lI3hcbiIsCj4gwqAJCcKg wqBJOTE1X1JFQUQoRE1BX0dVQ19XT1BDTV9PRkZTRVQpKTsKPiDCoAlEUk1fRVJST1IoIkdVQ19X T1BDTV9TSVpFPSUjeFxuIiwKPiBJOTE1X1JFQUQoR1VDX1dPUENNX1NJWkUpKTsKPiArCURSTV9F UlJPUigiQSBzeXN0ZW0gcmVib290IGlzIHJlcXVpcmVkLlxuIik7Cj4gwqAKPiDCoAlyZXR1cm4g ZXJyOwo+IMKgfQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK