From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH] drm/i915: set proper N/M in modeset Date: Fri, 29 Jul 2016 12:47:27 +0300 Message-ID: <20160729094727.GV4329@intel.com> References: <1468479981-738-1-git-send-email-libin.yang@linux.intel.com> <20160728074140.GO4329@intel.com> <96A12704CE18D347B625EE2D4A099D19119F6D49@SHSMSX103.ccr.corp.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id 9032F6E971 for ; Fri, 29 Jul 2016 09:47:39 +0000 (UTC) Content-Disposition: inline In-Reply-To: <96A12704CE18D347B625EE2D4A099D19119F6D49@SHSMSX103.ccr.corp.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "Yang, Libin" Cc: "tiwai@suse.de" , "Vetter, Daniel" , "libin.yang@linux.intel.com" , "intel-gfx@lists.freedesktop.org" List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCBKdWwgMjksIDIwMTYgYXQgMDU6NTQ6MjNBTSArMDAwMCwgWWFuZywgTGliaW4gd3Jv dGU6Cj4gSGkgVmlsbGUsCj4gCj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+ID4gRnJv bTogVmlsbGUgU3lyasOkbMOkIFttYWlsdG86dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb21d Cj4gPiBTZW50OiBUaHVyc2RheSwgSnVseSAyOCwgMjAxNiAzOjQyIFBNCj4gPiBUbzogbGliaW4u eWFuZ0BsaW51eC5pbnRlbC5jb20KPiA+IENjOiBpbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Au b3JnOyBqYW5pLm5pa3VsYUBsaW51eC5pbnRlbC5jb207IFZldHRlciwKPiA+IERhbmllbCA8ZGFu aWVsLnZldHRlckBpbnRlbC5jb20+OyB0aXdhaUBzdXNlLmRlOyBZYW5nLCBMaWJpbgo+ID4gPGxp YmluLnlhbmdAaW50ZWwuY29tPgo+ID4gU3ViamVjdDogUmU6IFtQQVRDSF0gZHJtL2k5MTU6IHNl dCBwcm9wZXIgTi9NIGluIG1vZGVzZXQKPiA+IAo+ID4gT24gVGh1LCBKdWwgMTQsIDIwMTYgYXQg MDM6MDY6MjFQTSArMDgwMCwgbGliaW4ueWFuZ0BsaW51eC5pbnRlbC5jb20gd3JvdGU6Cj4gPiA+ IEZyb206IExpYmluIFlhbmcgPGxpYmluLnlhbmdAbGludXguaW50ZWwuY29tPgo+ID4gPgo+ID4g PiBXaGVuIG1vZGVzZXQgb2NjdXJzIGFuZCB0aGUgTFNfQ0xLIGlzIHNldCB0byBzb21lIHNwZWNp YWwgdmFsdWVzIGluIERQCj4gPiA+IG1vZGUsIHRoZSBOL00gbmVlZCB0byBiZSBzZXQgbWFudWFs bHkgaWYgYXVkaW8gaXMgcGxheWluZy4KPiA+ID4KPiA+ID4gQWxzbywgdGhlIHBhdGNoIGFwcGxp ZXMKPiA+ID4gY29tbWl0IDdlODI3NWMyZjJiYiAoImRybS9pOTE1OiBzZXQgcHJvcGVyIE4vQ1RT IGluIG1vZGVzZXQiKSB0byBBUEwKPiA+ID4gcGxhdGZvcm0uCj4gPiA+Cj4gPiA+IFNpZ25lZC1v ZmYtYnk6IExpYmluIFlhbmcgPGxpYmluLnlhbmdAbGludXguaW50ZWwuY29tPgo+ID4gPiAtLS0K PiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggICAgfCAgIDYgKysKPiA+ID4g IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2F1ZGlvLmMgfCAxMTYKPiA+ID4gKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKystLS0tLQo+ID4gPiAgMiBmaWxlcyBjaGFuZ2VkLCAxMDgg aW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCj4gPiA+Cj4gPiA+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCj4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9yZWcuaCBpbmRleCA4YmZkZTc1Li4yZjlkMDBlIDEwMDY0NAo+ID4gPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfcmVnLmgKPiA+ID4gQEAgLTczNTEsNiArNzM1MSwxMiBAQCBlbnVtIHsKPiA+ ID4gICNkZWZpbmUgX0hTV19BVURfQ09ORklHX0IJCTB4NjUxMDAKPiA+ID4gICNkZWZpbmUgSFNX X0FVRF9DRkcocGlwZSkJCV9NTUlPX1BJUEUocGlwZSwKPiA+IF9IU1dfQVVEX0NPTkZJR19BLCBf SFNXX0FVRF9DT05GSUdfQikKPiA+ID4KPiA+ID4gKyNkZWZpbmUgX0hTV19BVURfTV9DVFNfRU5B QkxFX0EJCTB4NjUwMjgKPiA+ID4gKyNkZWZpbmUgX0hTV19BVURfTV9DVFNfRU5BQkxFX0IJCTB4 NjUxMjgKPiA+ID4gKyNkZWZpbmUgSFNXX0FVRF9NX0NUU19FTkFCTEUocGlwZSkJCV9NTUlPX1BJ UEUocGlwZSwKPiA+IF9IU1dfQVVEX01fQ1RTX0VOQUJMRV9BLCBfSFNXX0FVRF9NX0NUU19FTkFC TEVfQikKPiA+ID4gKyNkZWZpbmUgICBBVURfTV9DVFNfTV9WQUxVRV9JTkRFWAkoMSA8PCAyMSkK PiA+ID4gKyNkZWZpbmUgICBBVURfTV9DVFNfTV9QUk9HX0VOQUJMRQkoMSA8PCAyMCkKPiA+ID4g Kwo+ID4gPiAgI2RlZmluZSBfSFNXX0FVRF9NSVNDX0NUUkxfQQkJMHg2NTAxMAo+ID4gPiAgI2Rl ZmluZSBfSFNXX0FVRF9NSVNDX0NUUkxfQgkJMHg2NTExMAo+ID4gPiAgI2RlZmluZSBIU1dfQVVE X01JU0NfQ1RSTChwaXBlKQkJX01NSU9fUElQRShwaXBlLAo+ID4gX0hTV19BVURfTUlTQ19DVFJM X0EsIF9IU1dfQVVEX01JU0NfQ1RSTF9CKQo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfYXVkaW8uYwo+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2F1ZGlvLmMKPiA+ID4gaW5kZXggNjcwMGE3Yi4uZTJlNGQ0YiAxMDA2NDQKPiA+ID4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXVkaW8uYwo+ID4gPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9hdWRpby5jCj4gPiA+IEBAIC05OCw2ICs5OCwyMiBAQCBzdGF0aWMg Y29uc3Qgc3RydWN0IHsKPiA+ID4gIAl7IDE5MjAwMCwgVE1EU18yOTdNLCAyMDQ4MCwgMjQ3NTAw IH0sICB9Owo+ID4gPgo+ID4gPiArI2RlZmluZSBMQ181MzNNIDUzMzI1MAo+ID4gPiArI2RlZmlu ZSBMQ18xNDhNIDE0ODUwMAo+ID4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCB7Cj4gPiA+ICsJaW50 IHNhbXBsZV9yYXRlOwo+ID4gPiArCWludCBjbG9jazsKPiA+ID4gKwlpbnQgbjsKPiA+ID4gKwlp bnQgbTsKPiA+ID4gK30gYXVkX25tW10gPSB7Cj4gPiA+ICsJezQ4MDAwLCBMQ181MzNNLCA4ODg3 NSwgNDA5Nn0sCj4gPiA+ICsJezQ0MTAwLCBMQ181MzNNLCAxNDgxMjUsIDYyNzJ9LAo+ID4gPiAr CXszMjAwMCwgTENfNTMzTSwgMjY2NjI1LCA4MTkyfSwKPiA+ID4gKwl7NDgwMDAsIExDXzE0OE0s IDEyMzc1LCAyMDQ4fSwKPiA+ID4gKwl7NDQxMDAsIExDXzE0OE0sIDIwNjI1LCAzMTM2fSwKPiA+ ID4gKwl7MzIwMDAsIExDXzE0OE0sIDM3MTI1LCA0MDk2fSwKPiA+ID4gK307Cj4gPiA+ICsKPiA+ ID4gIC8qIGdldCBBVURfQ09ORklHX1BJWEVMX0NMT0NLX0hETUlfKiB2YWx1ZSBmb3IgbW9kZSAq LyAgc3RhdGljIHUzMgo+ID4gPiBhdWRpb19jb25maWdfaGRtaV9waXhlbF9jbG9jayhjb25zdCBz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZQo+ID4gPiAqYWRqdXN0ZWRfbW9kZSkgIHsgQEAgLTEyMSwy MCArMTM3LDUwIEBAIHN0YXRpYyB1MzIKPiA+ID4gYXVkaW9fY29uZmlnX2hkbWlfcGl4ZWxfY2xv Y2soY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkCj4gPiA+ICAJcmV0dXJu IGhkbWlfYXVkaW9fY2xvY2tbaV0uY29uZmlnOwo+ID4gPiAgfQo+ID4gPgo+ID4gPiAtc3RhdGlj IGludCBhdWRpb19jb25maWdfZ2V0X24oY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1v ZGUsCj4gPiA+IGludCByYXRlKQo+ID4gPiArc3RhdGljIGludCBhdWRpb19jb25maWdfZ2V0X24o c3RydWN0IGludGVsX2NydGMgKmNydGMsCj4gPiA+ICsJCQkgICAgICBjb25zdCBzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSAqbW9kZSwgaW50IHJhdGUpIHsKPiA+ID4gKwlpbnQgaTsKPiA+ID4gKwo+ ID4gPiArCWlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGMtPmNvbmZpZywgSU5URUxfT1VUUFVU X0hETUkpKSB7Cj4gPiA+ICsJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGF1ZF9uY3RzKTsg aSsrKSB7Cj4gPiA+ICsJCQlpZiAoKHJhdGUgPT0gYXVkX25jdHNbaV0uc2FtcGxlX3JhdGUpICYm Cj4gPiA+ICsJCQkJKG1vZGUtPmNsb2NrID09IGF1ZF9uY3RzW2ldLmNsb2NrKSkgewo+ID4gPiAr CQkJCXJldHVybiBhdWRfbmN0c1tpXS5uOwo+ID4gPiArCQkJfQo+ID4gPiArCQl9Cj4gPiA+ICsJ fQo+ID4gPiArCj4gPiA+ICsJaWYgKGludGVsX2NydGNfaGFzX3R5cGUoY3J0Yy0+Y29uZmlnLCBJ TlRFTF9PVVRQVVRfRFApKSB7Cj4gPiA+ICsJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGF1 ZF9ubSk7IGkrKykgewo+ID4gPiArCQkJaWYgKChyYXRlID09IGF1ZF9ubVtpXS5zYW1wbGVfcmF0 ZSkgJiYKPiA+ID4gKwkJCQkobW9kZS0+Y2xvY2sgPT0gYXVkX25tW2ldLmNsb2NrKSkgewo+ID4g Cj4gPiBTbyB0aGUgc3BlYyBzYXlzIHdlIHNob3VsZCBoYXZlICJNYXVkIC8gTmF1ZCA9IDUxMiAq IGZzIC8gZl9MU19DbGsiLCB3aGVyZQo+ID4gZnMgaXMgdGhlIGF1ZGlvIHNhbXBsZSByYXRlLCBh bmQgZl9MU19DTEsgaXMgdGhlIGxpbmsgc3ltYm9sIGNsb2NrLgo+ID4gV2l0aCB0aGF0IGluIG1p bmQgdGhpcyBzaG91bGQgbm90IGJlIGxvb2tpbmcgYXQgbW9kZS0+Y2xvY2sgYnV0Cj4gPiBjcnRj LT5jb25maWctPnBvcnRfY2xvY2suCj4gPiAKPiA+IFNvIEkgZG9uJ3QgYWN0dWFsbHkgdW5kZXJz dGFuZCB3aHkgeW91IHNheSBMU19DTEsgaGFzICJzcGVjaWFsIiB2YWx1ZXMuCj4gPiBJdCBzaG91 bGRuJ3QuIEl0J3MgYWx3YXlzIGVpdGhlciAxNjIsIDI3MCwgb3IgNTQwIE1Iei4KPiAKPiBUaGFu a3MgZm9yIHRoZSBjb3JyZWN0aW9uLiBJIHdpbGwgdXNlIGNydGMtPmNvbmZpZy0+cG9ydF9jbG9j ay4KCkJ1dCB3aHkgZG8geW91IG5lZWQgdG8gZG8gaXQgYXQgYWxsPyBUaGUgaGFyZHdhcmUgY2Fu J3QgZGVhbCB3aXRoIG9uZSBvZgp0aGUgc3RhbmRhcmQgbGluayByYXRlcyBvbiBpdHMgb3duPwoK PiAKPiA+IAo+ID4gQWN0dWFsbHkgZXZlbiB0aGUgSERNSSBjYXNlIGlzIHdyb25nIGluIHRoZSBj b2RlLCBpdCBzaG91bGQgYmUgbG9va2luZyBhdAo+ID4gbW9kZS0+Y3J0Y19jbG9jayBpbnN0ZWFk IG9mIG1vZGUtPmNsb2NrLiBPciBwZXJoYXBzIGV2ZW4gcG9ydF9jbG9jaywgaWYgbXkKPiA+IHJl YWRpbmcgb2YgdGhlIEhETUkgc3BlYyBpcyBjb3JyZWN0LCBidXQgSSBuZXZlciBnb3QgYW55IHNh bmUgYW5zd2VyIGZyb20KPiA+IGFueSBodyBmb2xrcyB0byBteSBxdWVzdGlvbnMgYWJvdXQgdGhp cyA6KAo+IAo+IEkgd2lsbCB0cnkgbW9kZS0+Y3J0Y19jbG9jayBsYXRlciBmb3IgSERNSS4gVGhh bmtzLgoKV2hpbGUgeW91J3JlIGF0IGl0LCBjYW4geW91IHBscyBkbyBzL21vZGUvYWRqdXN0ZWRf bW9kZS8gPyBBIHdoaWxlIGJhY2sKSSB1bmlmaWVkIG91ciBuYW1pbmcgY29udmVudGlvbiBmb3Ig dGhlc2UgdGhpbmdzLCBidXQgbG9va3MgbGlrZSB0aGUKYXVkaW8gY29kZSBoYXMgc2luY2UgZ29u ZSBiYWNrIHRvIHRoZSBpbmNvbnNpc3RlbiBvbGQgd2F5LgoKPiAKPiBSZWdhcmRzLAo+IExpYmlu Cj4gCj4gPiAKPiA+ID4gKwkJCQlyZXR1cm4gYXVkX25tW2ldLm47Cj4gPiA+ICsJCQl9Cj4gPiA+ ICsJCX0KPiA+ID4gKwl9Cj4gPiA+ICsJcmV0dXJuIDA7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4g K3N0YXRpYyBpbnQgYXVkaW9fY29uZmlnX2dldF9tKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAo+ ID4gPiArCQkJICAgICAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsIGludCBy YXRlKQo+ID4gPiAgewo+ID4gPiAgCWludCBpOwo+ID4gPgo+ID4gPiAtCWZvciAoaSA9IDA7IGkg PCBBUlJBWV9TSVpFKGF1ZF9uY3RzKTsgaSsrKSB7Cj4gPiA+IC0JCWlmICgocmF0ZSA9PSBhdWRf bmN0c1tpXS5zYW1wbGVfcmF0ZSkgJiYKPiA+ID4gLQkJCShtb2RlLT5jbG9jayA9PSBhdWRfbmN0 c1tpXS5jbG9jaykpIHsKPiA+ID4gLQkJCXJldHVybiBhdWRfbmN0c1tpXS5uOwo+ID4gPiArCWlm IChpbnRlbF9jcnRjX2hhc190eXBlKGNydGMtPmNvbmZpZywgSU5URUxfT1VUUFVUX0RQKSkgewo+ ID4gPiArCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhdWRfbm0pOyBpKyspIHsKPiA+ID4g KwkJCWlmICgocmF0ZSA9PSBhdWRfbm1baV0uc2FtcGxlX3JhdGUpICYmCj4gPiA+ICsJCQkJKG1v ZGUtPmNsb2NrID09IGF1ZF9ubVtpXS5jbG9jaykpIHsKPiA+ID4gKwkJCQlyZXR1cm4gYXVkX25t W2ldLm07Cj4gPiA+ICsJCQl9Cj4gPiA+ICAJCX0KPiA+ID4gIAl9Cj4gPiA+ICsKPiA+ID4gIAly ZXR1cm4gMDsKPiA+ID4gIH0KPiA+ID4KPiA+ID4gLXN0YXRpYyB1aW50MzJfdCBhdWRpb19jb25m aWdfc2V0dXBfbl9yZWcoaW50IG4sIHVpbnQzMl90IHZhbCkKPiA+ID4gK3N0YXRpYyB1aW50MzJf dCBhdWRpb19jb25maWdfc2V0dXBfbl9yZWcoc3RydWN0IGludGVsX2NydGMgKmNydGMsCj4gPiA+ ICsJCQkJCSBpbnQgbiwgdWludDMyX3QgdmFsKQo+ID4gPiAgewo+ID4gPiAgCWludCBuX2xvdywg bl91cDsKPiA+ID4gIAl1aW50MzJfdCB0bXAgPSB2YWw7Cj4gPiA+IEBAIC0xNDUsNiArMTkxLDIz IEBAIHN0YXRpYyB1aW50MzJfdCBhdWRpb19jb25maWdfc2V0dXBfbl9yZWcoaW50IG4sCj4gPiB1 aW50MzJfdCB2YWwpCj4gPiA+ICAJdG1wIHw9ICgobl91cCA8PCBBVURfQ09ORklHX1VQUEVSX05f U0hJRlQpIHwKPiA+ID4gIAkJCShuX2xvdyA8PCBBVURfQ09ORklHX0xPV0VSX05fU0hJRlQpIHwK PiA+ID4gIAkJCUFVRF9DT05GSUdfTl9QUk9HX0VOQUJMRSk7Cj4gPiA+ICsJaWYgKGludGVsX2Ny dGNfaGFzX3R5cGUoY3J0Yy0+Y29uZmlnLCBJTlRFTF9PVVRQVVRfRFApKQo+ID4gPiArCQl0bXAg fD0gQVVEX0NPTkZJR19OX1ZBTFVFX0lOREVYOwo+ID4gPiArCXJldHVybiB0bXA7Cj4gPiA+ICt9 Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyB1aW50MzJfdCBhdWRpb19jb25maWdfc2V0dXBfbV9yZWco c3RydWN0IGludGVsX2NydGMgKmNydGMsCj4gPiA+ICsJCQkJCSBpbnQgbSwgdWludDMyX3QgdmFs KQo+ID4gPiArewo+ID4gPiArCXVpbnQzMl90IHRtcCA9IHZhbDsKPiA+ID4gKwo+ID4gPiArCWlm ICghaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjLT5jb25maWcsIElOVEVMX09VVFBVVF9EUCkpCj4g PiA+ICsJCXJldHVybiAwOwo+ID4gPiArCj4gPiA+ICsJdG1wIHw9IG07Cj4gPiA+ICsJdG1wIHw9 IEFVRF9NX0NUU19NX1ZBTFVFX0lOREVYOwo+ID4gPiArCXRtcCB8PSBBVURfTV9DVFNfTV9QUk9H X0VOQUJMRTsKPiA+ID4gKwo+ID4gPiAgCXJldHVybiB0bXA7Cj4gPiA+ICB9Cj4gPiA+Cj4gPiA+ IEBAIC0xNTYsNiArMjE5LDEwIEBAIHN0YXRpYyBib29sIGF1ZGlvX3JhdGVfbmVlZF9wcm9nKHN0 cnVjdCBpbnRlbF9jcnRjCj4gPiAqY3J0YywKPiA+ID4gIAkJIChtb2RlLT5jbG9jayA9PSBUTURT XzI5Nk0pKSAmJgo+ID4gPiAgCQlpbnRlbF9jcnRjX2hhc190eXBlKGNydGMtPmNvbmZpZywgSU5U RUxfT1VUUFVUX0hETUkpKQo+ID4gPiAgCQlyZXR1cm4gdHJ1ZTsKPiA+ID4gKwllbHNlIGlmICgo KG1vZGUtPmNsb2NrID09IExDXzUzM00pIHx8Cj4gPiA+ICsJCSAgIChtb2RlLT5jbG9jayA9PSBM Q18xNDhNKSkgJiYKPiA+ID4gKwkJICBpbnRlbF9jcnRjX2hhc190eXBlKGNydGMtPmNvbmZpZywg SU5URUxfT1VUUFVUX0RQKSkKPiA+ID4gKwkJcmV0dXJuIHRydWU7Cj4gPiA+ICAJZWxzZQo+ID4g PiAgCQlyZXR1cm4gZmFsc2U7Cj4gPiA+ICB9Cj4gPiA+IEBAIC0yODcsNyArMzU0LDcgQEAgc3Rh dGljIHZvaWQgaHN3X2F1ZGlvX2NvZGVjX2VuYWJsZShzdHJ1Y3QKPiA+IGRybV9jb25uZWN0b3Ig KmNvbm5lY3RvciwKPiA+ID4gIAlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdf cG9ydCA9Cj4gPiA+ICAJCWVuY190b19kaWdfcG9ydCgmZW5jb2Rlci0+YmFzZSk7Cj4gPiA+ICAJ ZW51bSBwb3J0IHBvcnQgPSBpbnRlbF9kaWdfcG9ydC0+cG9ydDsKPiA+ID4gLQl1aW50MzJfdCB0 bXA7Cj4gPiA+ICsJdWludDMyX3QgdG1wLCBtOwo+ID4gPiAgCWludCBsZW4sIGk7Cj4gPiA+ICAJ aW50IG4sIHJhdGU7Cj4gPiA+Cj4gPiA+IEBAIC0zNDMsMTUgKzQxMCwyNSBAQCBzdGF0aWMgdm9p ZCBoc3dfYXVkaW9fY29kZWNfZW5hYmxlKHN0cnVjdAo+ID4gZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yLAo+ID4gPiAgCQkJRFJNX0VSUk9SKCJpbnZhbGlkIHBvcnQ6ICVkXG4iLCBwb3J0KTsKPiA+ ID4gIAkJCXJhdGUgPSAwOwo+ID4gPiAgCQl9Cj4gPiA+IC0JCW4gPSBhdWRpb19jb25maWdfZ2V0 X24oYWRqdXN0ZWRfbW9kZSwgcmF0ZSk7Cj4gPiA+ICsJCW4gPSBhdWRpb19jb25maWdfZ2V0X24o aW50ZWxfY3J0YywgYWRqdXN0ZWRfbW9kZSwgcmF0ZSk7Cj4gPiA+ICAJCWlmIChuICE9IDApCj4g PiA+IC0JCQl0bXAgPSBhdWRpb19jb25maWdfc2V0dXBfbl9yZWcobiwgdG1wKTsKPiA+ID4gKwkJ CXRtcCA9IGF1ZGlvX2NvbmZpZ19zZXR1cF9uX3JlZyhpbnRlbF9jcnRjLCBuLCB0bXApOwo+ID4g PiAgCQllbHNlCj4gPiA+ICAJCQlEUk1fREVCVUdfS01TKCJubyBzdWl0YWJsZSBOIHZhbHVlIGlz IGZvdW5kXG4iKTsKPiA+ID4gIAl9Cj4gPiA+Cj4gPiA+ICAJSTkxNV9XUklURShIU1dfQVVEX0NG RyhwaXBlKSwgdG1wKTsKPiA+ID4KPiA+ID4gKwkvKiBzZXR1cCBtIHZhbHVlIGZvciBEUCAqLwo+ ID4gPiArCWlmIChpbnRlbF9jcnRjX2hhc190eXBlKGludGVsX2NydGMtPmNvbmZpZywgSU5URUxf T1VUUFVUX0RQKSkgewo+ID4gPiArCQltID0gYXVkaW9fY29uZmlnX2dldF9tKGludGVsX2NydGMs IGFkanVzdGVkX21vZGUsIHJhdGUpOwo+ID4gPiArCQlpZiAobSAhPSAwKSB7Cj4gPiA+ICsJCQl0 bXAgPSBJOTE1X1JFQUQoSFNXX0FVRF9NX0NUU19FTkFCTEUocGlwZSkpOwo+ID4gPiArCQkJdG1w ID0gYXVkaW9fY29uZmlnX3NldHVwX21fcmVnKGludGVsX2NydGMsIG0sIHRtcCk7Cj4gPiA+ICsJ CQlJOTE1X1dSSVRFKEhTV19BVURfTV9DVFNfRU5BQkxFKHBpcGUpLCB0bXApOwo+ID4gPiArCQl9 Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICAJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+YXZfbXV0 ZXgpOwo+ID4gPiAgfQo+ID4gPgo+ID4gPiBAQCAtNjM3LDcgKzcxNCw3IEBAIHN0YXRpYyBpbnQK PiA+IGk5MTVfYXVkaW9fY29tcG9uZW50X3N5bmNfYXVkaW9fcmF0ZShzdHJ1Y3QgZGV2aWNlICpk ZXYsCj4gPiA+ICAJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7Cj4gPiA+ICAJc3RydWN0 IGk5MTVfYXVkaW9fY29tcG9uZW50ICphY29tcCA9IGRldl9wcml2LQo+ID4gPmF1ZGlvX2NvbXBv bmVudDsKPiA+ID4gIAllbnVtIHBpcGUgcGlwZSA9IElOVkFMSURfUElQRTsKPiA+ID4gLQl1MzIg dG1wOwo+ID4gPiArCXUzMiB0bXAsIG07Cj4gPiA+ICAJaW50IG47Cj4gPiA+ICAJaW50IGVyciA9 IDA7Cj4gPiA+Cj4gPiA+IEBAIC02NDUsNyArNzIyLDggQEAgc3RhdGljIGludAo+ID4gaTkxNV9h dWRpb19jb21wb25lbnRfc3luY19hdWRpb19yYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwKPiA+ID4g IAlpZiAoIUlTX1NLWUxBS0UoZGV2X3ByaXYpICYmCj4gPiA+ICAJICAgICFJU19LQUJZTEFLRShk ZXZfcHJpdikgJiYKPiA+ID4gIAkgICAgIUlTX0JST0FEV0VMTChkZXZfcHJpdikgJiYKPiA+ID4g LQkgICAgIUlTX0hBU1dFTEwoZGV2X3ByaXYpKQo+ID4gPiArCSAgICAhSVNfSEFTV0VMTChkZXZf cHJpdikgJiYKPiA+ID4gKwkgICAgIUlTX0JST1hUT04oZGV2X3ByaXYpKQo+ID4gPiAgCQlyZXR1 cm4gMDsKPiA+ID4KPiA+ID4gIAltdXRleF9sb2NrKCZkZXZfcHJpdi0+YXZfbXV0ZXgpOwo+ID4g PiBAQCAtNjUzLDcgKzczMSw4IEBAIHN0YXRpYyBpbnQKPiA+IGk5MTVfYXVkaW9fY29tcG9uZW50 X3N5bmNfYXVkaW9fcmF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gPiA+ICAJaW50ZWxfZW5jb2Rl ciA9IGRldl9wcml2LT5kaWdfcG9ydF9tYXBbcG9ydF07Cj4gPiA+ICAJLyogaW50ZWxfZW5jb2Rl ciBtaWdodCBiZSBOVUxMIGZvciBEUCBNU1QgKi8KPiA+ID4gIAlpZiAoIWludGVsX2VuY29kZXIg fHwgIWludGVsX2VuY29kZXItPmJhc2UuY3J0YyB8fAo+ID4gPiAtCSAgICBpbnRlbF9lbmNvZGVy LT50eXBlICE9IElOVEVMX09VVFBVVF9IRE1JKSB7Cj4gPiA+ICsJICAgICgoaW50ZWxfZW5jb2Rl ci0+dHlwZSAhPSBJTlRFTF9PVVRQVVRfSERNSSkgJiYKPiA+ID4gKwkgICAgIChpbnRlbF9lbmNv ZGVyLT50eXBlICE9IElOVEVMX09VVFBVVF9EUCkpKSB7Cj4gPiA+ICAJCURSTV9ERUJVR19LTVMo Im5vIHZhbGlkIHBvcnQgJWNcbiIsIHBvcnRfbmFtZShwb3J0KSk7Cj4gPiA+ICAJCWVyciA9IC1F Tk9ERVY7Cj4gPiA+ICAJCWdvdG8gdW5sb2NrOwo+ID4gPiBAQCAtNjgxLDcgKzc2MCw3IEBAIHN0 YXRpYyBpbnQKPiA+IGk5MTVfYXVkaW9fY29tcG9uZW50X3N5bmNfYXVkaW9fcmF0ZShzdHJ1Y3Qg ZGV2aWNlICpkZXYsCj4gPiA+ICAJCWdvdG8gdW5sb2NrOwo+ID4gPiAgCX0KPiA+ID4KPiA+ID4g LQluID0gYXVkaW9fY29uZmlnX2dldF9uKG1vZGUsIHJhdGUpOwo+ID4gPiArCW4gPSBhdWRpb19j b25maWdfZ2V0X24oY3J0YywgbW9kZSwgcmF0ZSk7Cj4gPiA+ICAJaWYgKG4gPT0gMCkgewo+ID4g PiAgCQlEUk1fREVCVUdfS01TKCJVc2luZyBhdXRvbWF0aWMgbW9kZSBmb3IgTiB2YWx1ZSBvbgo+ ID4gcG9ydCAlY1xuIiwKPiA+ID4gIAkJCQkJICBwb3J0X25hbWUocG9ydCkpOwo+ID4gPiBAQCAt NjkzLDggKzc3MiwxNyBAQCBzdGF0aWMgaW50Cj4gPiA+IGk5MTVfYXVkaW9fY29tcG9uZW50X3N5 bmNfYXVkaW9fcmF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gPiA+Cj4gPiA+ICAJLyogMy4gc2V0 IHRoZSBOL0NUUy9NICovCj4gPiA+ICAJdG1wID0gSTkxNV9SRUFEKEhTV19BVURfQ0ZHKHBpcGUp KTsKPiA+ID4gLQl0bXAgPSBhdWRpb19jb25maWdfc2V0dXBfbl9yZWcobiwgdG1wKTsKPiA+ID4g Kwl0bXAgPSBhdWRpb19jb25maWdfc2V0dXBfbl9yZWcoY3J0YywgbiwgdG1wKTsKPiA+ID4gIAlJ OTE1X1dSSVRFKEhTV19BVURfQ0ZHKHBpcGUpLCB0bXApOwo+ID4gPiArCS8qIHNldHVwIG0gdmFs dWUgZm9yIERQICovCj4gPiA+ICsJaWYgKGludGVsX2NydGNfaGFzX3R5cGUoY3J0Yy0+Y29uZmln LCBJTlRFTF9PVVRQVVRfRFApKSB7Cj4gPiA+ICsJCW0gPSBhdWRpb19jb25maWdfZ2V0X20oY3J0 YywgbW9kZSwgcmF0ZSk7Cj4gPiA+ICsJCWlmIChtID09IDApCj4gPiA+ICsJCQlnb3RvIHVubG9j azsKPiA+ID4gKwkJdG1wID0gSTkxNV9SRUFEKEhTV19BVURfTV9DVFNfRU5BQkxFKHBpcGUpKTsK PiA+ID4gKwkJdG1wID0gYXVkaW9fY29uZmlnX3NldHVwX21fcmVnKGNydGMsIG0sIHRtcCk7Cj4g PiA+ICsJCUk5MTVfV1JJVEUoSFNXX0FVRF9NX0NUU19FTkFCTEUocGlwZSksIHRtcCk7Cj4gPiA+ ICsJfQo+ID4gPgo+ID4gPiAgIHVubG9jazoKPiA+ID4gIAltdXRleF91bmxvY2soJmRldl9wcml2 LT5hdl9tdXRleCk7Cj4gPiA+IC0tCj4gPiA+IDEuOS4xCj4gPiAKPiA+IC0tCj4gPiBWaWxsZSBT eXJqw6Rsw6QKPiA+IEludGVsIE9UQwoKLS0gClZpbGxlIFN5cmrDpGzDpApJbnRlbCBPVEMKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1h aWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==