From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kahola Subject: Re: [PATCH v6 7/8] drm/i915: BDW clock change support Date: Mon, 29 Jun 2015 14:36:51 +0300 Message-ID: <1435577811.2888.8.camel@sorvi> References: <1433335514-4156-1-git-send-email-mika.kahola@intel.com> <1433335514-4156-8-git-send-email-mika.kahola@intel.com> <87bngf4xk3.fsf@intel.com> <878ubj4x9f.fsf@intel.com> <871tguzri1.fsf@intel.com> Reply-To: mika.kahola@intel.com Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id 6FB7C6E879 for ; Mon, 29 Jun 2015 04:36:31 -0700 (PDT) In-Reply-To: <871tguzri1.fsf@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Jani Nikula Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCAyMDE1LTA2LTI5IGF0IDE0OjI0ICswMzAwLCBKYW5pIE5pa3VsYSB3cm90ZToKPiBP biBUdWUsIDE2IEp1biAyMDE1LCBKYW5pIE5pa3VsYSA8amFuaS5uaWt1bGFAbGludXguaW50ZWwu Y29tPiB3cm90ZToKPiA+IE9uIFR1ZSwgMTYgSnVuIDIwMTUsIEphbmkgTmlrdWxhIDxqYW5pLm5p a3VsYUBsaW51eC5pbnRlbC5jb20+IHdyb3RlOgo+ID4+IE9uIFdlZCwgMDMgSnVuIDIwMTUsIE1p a2EgS2Fob2xhIDxtaWthLmthaG9sYUBpbnRlbC5jb20+IHdyb3RlOgo+ID4+PiBGcm9tOiBWaWxs ZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgo+ID4+Pgo+ID4+PiBB ZGQgc3VwcG9ydCBmb3IgY2hhbmdpbmcgY2RjbGsgZnJlcXVlbmN5IGR1cmluZyBydW50aW1lIG9u IEJEVy4gVGhlCj4gPj4+IHByb2NlZHVyZSBpcyBxdWl0ZSBhIGJpdCBkaWZmZXJlbnQgb24gQkRX IGZyb20gdGhlIG9uZSBvbiBIU1csIHNvCj4gPj4+IGFkZCBhIHNlcGFyYXRlIGZ1bmN0aW9uIGZv ciBpdC4KPiA+Pj4KPiA+Pj4gQWxzbyB3aXRoIElQUyBlbmFibGVkIHRoZSBhY3R1YWwgcGl4ZWwg cmF0ZSBtdXN0bid0IGV4Y2VlZCA5NSUgb2YgY2RjbGssCj4gPj4+IHNvIHRha2UgdGhhdCBpbnRv IGFjY291bnQgd2hlbiBjb21wdXRpbmcgdGhlIG1heCBwaXhlbCByYXRlLgo+ID4+Pgo+ID4+PiB2 MjogR3JhYiBycHMuaHdfbG9jayBhcm91bmQgc2FuZHlicmlkZ2VfcGNvZGVfd3JpdGUoKQo+ID4+ PiB2MzogUmViYXNlIGR1ZSB0byBwb3dlciB3ZWxsIHZzLiAuZ2xvYmFsX3Jlc291cmNlcygpIHJl b3JkZXJpbmcKPiA+Pj4gdjQ6IFJlYmFzZWQgdG8gdGhlIGxhdGVzdAo+ID4+PiB2NTogUmViYXNl ZCB0byB0aGUgbGF0ZXN0Cj4gPj4+IHY2OiBQYXRjaCBvcmRlciBzaHVmZmxlIHNvIHRoYXQgQnJv YWR3ZWxsIENEIGNsb2NrIGNoYW5nZSBpcwo+ID4+PiAgICAgYXBwbGllZCBiZWZvcmUgdGhlIHBh dGNoIGZvciBIYXN3ZWxsIENEIGNsb2NrIGNoYW5nZQo+ID4+PiB2NzogRml4IGZvciBwYXRjaCBz dHlsZSBwcm9ibGVtcwo+ID4+Pgo+ID4+PiBTaWduZWQtb2ZmLWJ5OiBWaWxsZSBTeXJqw6Rsw6Qg PHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgo+ID4+PiBTaWduZWQtb2ZmLWJ5OiBNaWth IEthaG9sYSA8bWlrYS5rYWhvbGFAaW50ZWwuY29tPgo+ID4+Cj4gPj4gVGhpcyBwYXRjaCBoYXJk IGhhbmdzIG15IEJEVyBOVUMgYXQgYm9vdCB3aGVuIGJvdGggRFAgYW5kIEhETUkgYXJlCj4gPj4g Y29ubmVjdGVkLiBFaXRoZXIgRFAgb3IgSERNSSBhbG9uZSBhcmUgZ29vZCwgc2FtZSB3aXRoIGhv dHBsdWdnaW5nIHRoZQo+ID4+IG90aGVyIGFmdGVyd2FyZHMuIEJvb3RpbmcgdG8gZ3J1YiB3aXRo IGJvdGggY29ubmVjdGVkLCBhbmQgdW5wbHVnZ2luZwo+ID4+IEhETUkgYmVmb3JlIGxvYWRpbmcg dGhlIGtlcm5lbCBhbHNvIHJlcHJvZHVjZXMgdGhlIGlzc3VlLgo+ID4+Cj4gPj4gSXQgbG9va3Mg bGlrZSB0aGUgcHJvYmxlbSBib2lscyBkb3duIHRvIHRoZSBCSU9TIHNldHRpbmcgdXAgYSBzbWFs bGVyCj4gPj4gcmVzb2x1dGlvbiBvbiB0aGUgRFAgZGlzcGxheSB3aGVuIGJvdGggYXJlIGNvbm5l Y3RlZCwgYW5kIHRoaXMgcGF0Y2gKPiA+PiBmYWlscyB0byBjb3BlIHdpdGggdGhhdCBvbiBpOTE1 IGxvYWQuCj4gPgo+ID4gQnkgInRoaXMgcGF0Y2giIEkgb2J2aW91c2x5IHJlZmVyIHRvCj4gPgo+ ID4gY29tbWl0IGI0MzJlNWNmZDVlOTIxMjdhZDJkZDgzYmZjMzA4M2YxZGJjZTQzZmIKPiA+IEF1 dGhvcjogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KPiA+ IERhdGU6ICAgV2VkIEp1biAzIDE1OjQ1OjEzIDIwMTUgKzAzMDAKPiA+Cj4gPiAgICAgZHJtL2k5 MTU6IEJEVyBjbG9jayBjaGFuZ2Ugc3VwcG9ydAo+ID4KPiA+IGFuZCBldmVyeXRoaW5nIHdvcmtz IGZvciB0aGUgY29tbWl0IGJlZm9yZSB0aGF0Lgo+IAo+IEFueW9uZSB3b3JraW5nIG9uIHRoaXMs IG9yIHNob3VsZCB3ZSByZXZlcnQ/Cj4gCj4gQlIsCj4gSmFuaS4KPiAKTXkgdW5kZXJzdGFuZGlu ZyBpcyB0aGF0IFZpbGxlIGhhcyBhbiBpZGVhIG9yIGhvdyB0byBmaXggdGhpcy4KCkNoZWVycywK TWlrYQoKPiAKPiA+Cj4gPiBCUiwKPiA+IEphbmkuCj4gPgo+ID4KPiA+Cj4gPgo+ID4KPiA+Pgo+ ID4+IEJSLAo+ID4+IEphbmkuCj4gPj4KPiA+Pgo+ID4+Cj4gPj4+Cj4gPj4+IEF1dGhvcjogICAg VmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KPiA+Pj4gLS0t Cj4gPj4+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oICAgICAgfCAgIDIgKwo+ID4+ PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIHwgMjE2ICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKy0tCj4gPj4+ICAyIGZpbGVzIGNoYW5nZWQsIDIwOCBpbnNl cnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKPiA+Pj4KPiA+Pj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Jl Zy5oCj4gPj4+IGluZGV4IDcyMTMyMjQuLjBmNzJjMGUgMTAwNjQ0Cj4gPj4+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPiA+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9yZWcuaAo+ID4+PiBAQCAtNjcwNSw2ICs2NzA1LDcgQEAgZW51bSBza2xfZGlzcF9w b3dlcl93ZWxscyB7Cj4gPj4+ICAjZGVmaW5lCSAgR0VONl9QQ09ERV9SRUFEX1JDNlZJRFMJCTB4 NQo+ID4+PiAgI2RlZmluZSAgICAgR0VONl9FTkNPREVfUkM2X1ZJRChtdikJCSgoKG12KSAtIDI0 NSkgLyA1KQo+ID4+PiAgI2RlZmluZSAgICAgR0VONl9ERUNPREVfUkM2X1ZJRCh2aWRzKQkJKCgo dmlkcykgKiA1KSArIDI0NSkKPiA+Pj4gKyNkZWZpbmUgICBCRFdfUENPREVfRElTUExBWV9GUkVR X0NIQU5HRV9SRVEJMHgxOAo+ID4+PiAgI2RlZmluZSAgIEdFTjlfUENPREVfUkVBRF9NRU1fTEFU RU5DWQkJMHg2Cj4gPj4+ICAjZGVmaW5lICAgICBHRU45X01FTV9MQVRFTkNZX0xFVkVMX01BU0sJ CTB4RkYKPiA+Pj4gICNkZWZpbmUgICAgIEdFTjlfTUVNX0xBVEVOQ1lfTEVWRUxfMV81X1NISUZU CTgKPiA+Pj4gQEAgLTcxNzAsNiArNzE3MSw3IEBAIGVudW0gc2tsX2Rpc3BfcG93ZXJfd2VsbHMg ewo+ID4+PiAgI2RlZmluZSAgTENQTExfQ0xLX0ZSRVFfMzM3XzVfQkRXCSgyPDwyNikKPiA+Pj4g ICNkZWZpbmUgIExDUExMX0NMS19GUkVRXzY3NV9CRFcJCSgzPDwyNikKPiA+Pj4gICNkZWZpbmUg IExDUExMX0NEX0NMT0NLX0RJU0FCTEUJCSgxPDwyNSkKPiA+Pj4gKyNkZWZpbmUgIExDUExMX1JP T1RfQ0RfQ0xPQ0tfRElTQUJMRQkoMTw8MjQpCj4gPj4+ICAjZGVmaW5lICBMQ1BMTF9DRDJYX0NM T0NLX0RJU0FCTEUJKDE8PDIzKQo+ID4+PiAgI2RlZmluZSAgTENQTExfUE9XRVJfRE9XTl9BTExP VwkJKDE8PDIyKQo+ID4+PiAgI2RlZmluZSAgTENQTExfQ0RfU09VUkNFX0ZDTEsJCSgxPDwyMSkK PiA+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4+PiBpbmRleCBjM2YwMWFh Li5iMWUyMDY5IDEwMDY0NAo+ID4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k aXNwbGF5LmMKPiA+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5j Cj4gPj4+IEBAIC01NzUxLDcgKzU3NTEsMjIgQEAgc3RhdGljIHZvaWQgaW50ZWxfdXBkYXRlX21h eF9jZGNsayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ID4+PiAgewo+ID4+PiAgCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gPj4+ICAKPiA+ Pj4gLQlpZiAoSVNfVkFMTEVZVklFVyhkZXYpKSB7Cj4gPj4+ICsJaWYgKElTX0JST0FEV0VMTChk ZXYpKSAgewo+ID4+PiArCQkvKgo+ID4+PiArCQkgKiBGSVhNRSB3aXRoIGV4dHJhIGNvb2xpbmcg d2UgY2FuIGFsbG93Cj4gPj4+ICsJCSAqIDU0MCBNSHogZm9yIFVMWCBhbmQgNjc1IE1oeiBmb3Ig VUxULgo+ID4+PiArCQkgKiBIb3cgY2FuIHdlIGtub3cgaWYgZXh0cmEgY29vbGluZyBpcwo+ID4+ PiArCQkgKiBhdmFpbGFibGU/IFBDSSBJRCwgVlRCLCBzb21ldGhpbmcgZWxzZT8KPiA+Pj4gKwkJ ICovCj4gPj4+ICsJCWlmIChJOTE1X1JFQUQoRlVTRV9TVFJBUCkgJiBIU1dfQ0RDTEtfTElNSVQp Cj4gPj4+ICsJCQlkZXZfcHJpdi0+bWF4X2NkY2xrX2ZyZXEgPSA0NTAwMDA7Cj4gPj4+ICsJCWVs c2UgaWYgKElTX0JEV19VTFgoZGV2KSkKPiA+Pj4gKwkJCWRldl9wcml2LT5tYXhfY2RjbGtfZnJl cSA9IDQ1MDAwMDsKPiA+Pj4gKwkJZWxzZSBpZiAoSVNfQkRXX1VMVChkZXYpKQo+ID4+PiArCQkJ ZGV2X3ByaXYtPm1heF9jZGNsa19mcmVxID0gNTQwMDAwOwo+ID4+PiArCQllbHNlCj4gPj4+ICsJ CQlkZXZfcHJpdi0+bWF4X2NkY2xrX2ZyZXEgPSA2NzUwMDA7Cj4gPj4+ICsJfSBlbHNlIGlmIChJ U19WQUxMRVlWSUVXKGRldikpIHsKPiA+Pj4gIAkJZGV2X3ByaXYtPm1heF9jZGNsa19mcmVxID0g NDAwMDAwOwo+ID4+PiAgCX0gZWxzZSB7Cj4gPj4+ICAJCS8qIG90aGVyd2lzZSBhc3N1bWUgY2Rj bGsgaXMgZml4ZWQgKi8KPiA+Pj4gQEAgLTY2MjEsMTMgKzY2MzYsMTEgQEAgc3RhdGljIGJvb2wg cGlwZV9jb25maWdfc3VwcG9ydHNfaXBzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwKPiA+Pj4gIAkJcmV0dXJuIHRydWU7Cj4gPj4+ICAKPiA+Pj4gIAkvKgo+ID4+PiAtCSAqIEZJ WE1FIGlmIHdlIGNvbXBhcmUgYWdhaW5zdCBtYXggd2Ugc2hvdWxkIHRoZW4KPiA+Pj4gLQkgKiBp bmNyZWFzZSB0aGUgY2RjbGsgZnJlcXVlbmN5IHdoZW4gdGhlIGN1cnJlbnQKPiA+Pj4gLQkgKiB2 YWx1ZSBpcyB0b28gbG93LiBUaGUgb3RoZXIgb3B0aW9uIGlzIHRvIGNvbXBhcmUKPiA+Pj4gLQkg KiBhZ2FpbnN0IHRoZSBjZGNsayBmcmVxdWVuY3kgd2UncmUgZ29pbmcgaGF2ZSBwb3N0Cj4gPj4+ IC0JICogbW9kZXNldCAoaWUuIG9uZSB3ZSBjb21wdXRlZCB1c2luZyBvdGhlciBjb25zdHJhaW50 cykuCj4gPj4+IC0JICogTmVlZCB0byBtZWFzdXJlIHdoZXRoZXIgdXNpbmcgYSBsb3dlciBjZGNs ayB3L28gSVBTCj4gPj4+IC0JICogaXMgYmV0dGVyIG9yIHdvcnNlIHRoYW4gYSBoaWdoZXIgY2Rj bGsgdy8gSVBTLgo+ID4+PiArCSAqIFdlIGNvbXBhcmUgYWdhaW5zdCBtYXggd2hpY2ggbWVhbnMg d2UgbXVzdCB0YWtlCj4gPj4+ICsJICogdGhlIGluY3JlYXNlZCBjZGNsayByZXF1aXJlbWVudCBp bnRvIGFjY291bnQgd2hlbgo+ID4+PiArCSAqIGNhbGN1bGF0aW5nIHRoZSBuZXcgY2RjbGsuCj4g Pj4+ICsJICoKPiA+Pj4gKwkgKiBTaG91bGQgbWVhc3VyZSB3aGV0aGVyIHVzaW5nIGEgbG93ZXIg Y2RjbGsgdy9vIElQUwo+ID4+PiAgCSAqLwo+ID4+PiAgCXJldHVybiBpbGtfcGlwZV9waXhlbF9y YXRlKHBpcGVfY29uZmlnKSA8PQo+ID4+PiAgCQlkZXZfcHJpdi0+bWF4X2NkY2xrX2ZyZXEgKiA5 NSAvIDEwMDsKPiA+Pj4gQEAgLTk2MDgsNiArOTYyMSwxODIgQEAgc3RhdGljIHZvaWQgYnJveHRv bl9tb2Rlc2V0X2dsb2JhbF9yZXNvdXJjZXMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKm9sZF9z dGF0ZSkKPiA+Pj4gIAkJYnJveHRvbl9zZXRfY2RjbGsoZGV2LCByZXFfY2RjbGspOwo+ID4+PiAg fQo+ID4+PiAgCj4gPj4+ICsvKiBjb21wdXRlIHRoZSBtYXggcmF0ZSBmb3IgbmV3IGNvbmZpZ3Vy YXRpb24gKi8KPiA+Pj4gK3N0YXRpYyBpbnQgaWxrX21heF9waXhlbF9yYXRlKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiA+Pj4gK3sKPiA+Pj4gKwlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2ID0gZGV2X3ByaXYtPmRldjsKPiA+Pj4gKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxf Y3J0YzsKPiA+Pj4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Cj4gPj4+ICsJaW50IG1heF9waXhl bF9yYXRlID0gMDsKPiA+Pj4gKwlpbnQgcGl4ZWxfcmF0ZTsKPiA+Pj4gKwo+ID4+PiArCWZvcl9l YWNoX2NydGMoZGV2LCBjcnRjKSB7Cj4gPj4+ICsJCWlmICghY3J0Yy0+c3RhdGUtPmVuYWJsZSkK PiA+Pj4gKwkJCWNvbnRpbnVlOwo+ID4+PiArCj4gPj4+ICsJCWludGVsX2NydGMgPSB0b19pbnRl bF9jcnRjKGNydGMpOwo+ID4+PiArCQlwaXhlbF9yYXRlID0gaWxrX3BpcGVfcGl4ZWxfcmF0ZShp bnRlbF9jcnRjLT5jb25maWcpOwo+ID4+PiArCj4gPj4+ICsJCS8qIHBpeGVsIHJhdGUgbXVzdG4n dCBleGNlZWQgOTUlIG9mIGNkY2xrIHdpdGggSVBTIG9uIEJEVyAqLwo+ID4+PiArCQlpZiAoSVNf QlJPQURXRUxMKGRldikgJiYgaW50ZWxfY3J0Yy0+Y29uZmlnLT5pcHNfZW5hYmxlZCkKPiA+Pj4g KwkJCXBpeGVsX3JhdGUgPSBESVZfUk9VTkRfVVAocGl4ZWxfcmF0ZSAqIDEwMCwgOTUpOwo+ID4+ PiArCj4gPj4+ICsJCW1heF9waXhlbF9yYXRlID0gbWF4KG1heF9waXhlbF9yYXRlLCBwaXhlbF9y YXRlKTsKPiA+Pj4gKwl9Cj4gPj4+ICsKPiA+Pj4gKwlyZXR1cm4gbWF4X3BpeGVsX3JhdGU7Cj4g Pj4+ICt9Cj4gPj4+ICsKPiA+Pj4gK3N0YXRpYyB2b2lkIGJyb2Fkd2VsbF9zZXRfY2RjbGsoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNkY2xrKQo+ID4+PiArewo+ID4+PiArCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gPj4+ICsJdWlu dDMyX3QgdmFsLCBkYXRhOwo+ID4+PiArCWludCByZXQ7Cj4gPj4+ICsKPiA+Pj4gKwlpZiAoV0FS TigoSTkxNV9SRUFEKExDUExMX0NUTCkgJgo+ID4+PiArCQkgIChMQ1BMTF9QTExfRElTQUJMRSB8 IExDUExMX1BMTF9MT0NLIHwKPiA+Pj4gKwkJICAgTENQTExfQ0RfQ0xPQ0tfRElTQUJMRSB8IExD UExMX1JPT1RfQ0RfQ0xPQ0tfRElTQUJMRSB8Cj4gPj4+ICsJCSAgIExDUExMX0NEMlhfQ0xPQ0tf RElTQUJMRSB8IExDUExMX1BPV0VSX0RPV05fQUxMT1cgfAo+ID4+PiArCQkgICBMQ1BMTF9DRF9T T1VSQ0VfRkNMSykpICE9IExDUExMX1BMTF9MT0NLLAo+ID4+PiArCQkgInRyeWluZyB0byBjaGFu Z2UgY2RjbGsgZnJlcXVlbmN5IHdpdGggY2RjbGsgbm90IGVuYWJsZWRcbiIpKQo+ID4+PiArCQly ZXR1cm47Cj4gPj4+ICsKPiA+Pj4gKwltdXRleF9sb2NrKCZkZXZfcHJpdi0+cnBzLmh3X2xvY2sp Owo+ID4+PiArCXJldCA9IHNhbmR5YnJpZGdlX3Bjb2RlX3dyaXRlKGRldl9wcml2LAo+ID4+PiAr CQkJCSAgICAgIEJEV19QQ09ERV9ESVNQTEFZX0ZSRVFfQ0hBTkdFX1JFUSwgMHgwKTsKPiA+Pj4g KwltdXRleF91bmxvY2soJmRldl9wcml2LT5ycHMuaHdfbG9jayk7Cj4gPj4+ICsJaWYgKHJldCkg ewo+ID4+PiArCQlEUk1fRVJST1IoImZhaWxlZCB0byBpbmZvcm0gcGNvZGUgYWJvdXQgY2RjbGsg Y2hhbmdlXG4iKTsKPiA+Pj4gKwkJcmV0dXJuOwo+ID4+PiArCX0KPiA+Pj4gKwo+ID4+PiArCXZh bCA9IEk5MTVfUkVBRChMQ1BMTF9DVEwpOwo+ID4+PiArCXZhbCB8PSBMQ1BMTF9DRF9TT1VSQ0Vf RkNMSzsKPiA+Pj4gKwlJOTE1X1dSSVRFKExDUExMX0NUTCwgdmFsKTsKPiA+Pj4gKwo+ID4+PiAr CWlmICh3YWl0X2Zvcl9hdG9taWNfdXMoSTkxNV9SRUFEKExDUExMX0NUTCkgJgo+ID4+PiArCQkJ ICAgICAgIExDUExMX0NEX1NPVVJDRV9GQ0xLX0RPTkUsIDEpKQo+ID4+PiArCQlEUk1fRVJST1Io IlN3aXRjaGluZyB0byBGQ0xLIGZhaWxlZFxuIik7Cj4gPj4+ICsKPiA+Pj4gKwl2YWwgPSBJOTE1 X1JFQUQoTENQTExfQ1RMKTsKPiA+Pj4gKwl2YWwgJj0gfkxDUExMX0NMS19GUkVRX01BU0s7Cj4g Pj4+ICsKPiA+Pj4gKwlzd2l0Y2ggKGNkY2xrKSB7Cj4gPj4+ICsJY2FzZSA0NTAwMDA6Cj4gPj4+ ICsJCXZhbCB8PSBMQ1BMTF9DTEtfRlJFUV80NTA7Cj4gPj4+ICsJCWRhdGEgPSAwOwo+ID4+PiAr CQlicmVhazsKPiA+Pj4gKwljYXNlIDU0MDAwMDoKPiA+Pj4gKwkJdmFsIHw9IExDUExMX0NMS19G UkVRXzU0T19CRFc7Cj4gPj4+ICsJCWRhdGEgPSAxOwo+ID4+PiArCQlicmVhazsKPiA+Pj4gKwlj YXNlIDMzNzUwMDoKPiA+Pj4gKwkJdmFsIHw9IExDUExMX0NMS19GUkVRXzMzN181X0JEVzsKPiA+ Pj4gKwkJZGF0YSA9IDI7Cj4gPj4+ICsJCWJyZWFrOwo+ID4+PiArCWNhc2UgNjc1MDAwOgo+ID4+ PiArCQl2YWwgfD0gTENQTExfQ0xLX0ZSRVFfNjc1X0JEVzsKPiA+Pj4gKwkJZGF0YSA9IDM7Cj4g Pj4+ICsJCWJyZWFrOwo+ID4+PiArCWRlZmF1bHQ6Cj4gPj4+ICsJCVdBUk4oMSwgImludmFsaWQg Y2RjbGsgZnJlcXVlbmN5XG4iKTsKPiA+Pj4gKwkJcmV0dXJuOwo+ID4+PiArCX0KPiA+Pj4gKwo+ ID4+PiArCUk5MTVfV1JJVEUoTENQTExfQ1RMLCB2YWwpOwo+ID4+PiArCj4gPj4+ICsJdmFsID0g STkxNV9SRUFEKExDUExMX0NUTCk7Cj4gPj4+ICsJdmFsICY9IH5MQ1BMTF9DRF9TT1VSQ0VfRkNM SzsKPiA+Pj4gKwlJOTE1X1dSSVRFKExDUExMX0NUTCwgdmFsKTsKPiA+Pj4gKwo+ID4+PiArCWlm ICh3YWl0X2Zvcl9hdG9taWNfdXMoKEk5MTVfUkVBRChMQ1BMTF9DVEwpICYKPiA+Pj4gKwkJCQlM Q1BMTF9DRF9TT1VSQ0VfRkNMS19ET05FKSA9PSAwLCAxKSkKPiA+Pj4gKwkJRFJNX0VSUk9SKCJT d2l0Y2hpbmcgYmFjayB0byBMQ1BMTCBmYWlsZWRcbiIpOwo+ID4+PiArCj4gPj4+ICsJbXV0ZXhf bG9jaygmZGV2X3ByaXYtPnJwcy5od19sb2NrKTsKPiA+Pj4gKwlzYW5keWJyaWRnZV9wY29kZV93 cml0ZShkZXZfcHJpdiwgSFNXX1BDT0RFX0RFX1dSSVRFX0ZSRVFfUkVRLCBkYXRhKTsKPiA+Pj4g KwltdXRleF91bmxvY2soJmRldl9wcml2LT5ycHMuaHdfbG9jayk7Cj4gPj4+ICsKPiA+Pj4gKwlp bnRlbF91cGRhdGVfY2RjbGsoZGV2KTsKPiA+Pj4gKwo+ID4+PiArCVdBUk4oY2RjbGsgIT0gZGV2 X3ByaXYtPmNkY2xrX2ZyZXEsCj4gPj4+ICsJICAgICAiY2RjbGsgcmVxdWVzdGVkICVkIGtIeiBi dXQgZ290ICVkIGtIelxuIiwKPiA+Pj4gKwkgICAgIGNkY2xrLCBkZXZfcHJpdi0+Y2RjbGtfZnJl cSk7Cj4gPj4+ICt9Cj4gPj4+ICsKPiA+Pj4gK3N0YXRpYyBpbnQgYnJvYWR3ZWxsX2NhbGNfY2Rj bGsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4+PiArCQkJICAgICAgaW50 IG1heF9waXhlbF9yYXRlKQo+ID4+PiArewo+ID4+PiArCWludCBjZGNsazsKPiA+Pj4gKwo+ID4+ PiArCS8qCj4gPj4+ICsJICogRklYTUUgc2hvdWxkIGFsc28gYWNjb3VudCBmb3IgcGxhbmUgcmF0 aW8KPiA+Pj4gKwkgKiBvbmNlIDY0YnBwIHBpeGVsIGZvcm1hdHMgYXJlIHN1cHBvcnRlZC4KPiA+ Pj4gKwkgKi8KPiA+Pj4gKwlpZiAobWF4X3BpeGVsX3JhdGUgPiA1NDAwMDApCj4gPj4+ICsJCWNk Y2xrID0gNjc1MDAwOwo+ID4+PiArCWVsc2UgaWYgKG1heF9waXhlbF9yYXRlID4gNDUwMDAwKQo+ ID4+PiArCQljZGNsayA9IDU0MDAwMDsKPiA+Pj4gKwllbHNlIGlmIChtYXhfcGl4ZWxfcmF0ZSA+ IDMzNzUwMCkKPiA+Pj4gKwkJY2RjbGsgPSA0NTAwMDA7Cj4gPj4+ICsJZWxzZQo+ID4+PiArCQlj ZGNsayA9IDMzNzUwMDsKPiA+Pj4gKwo+ID4+PiArCS8qCj4gPj4+ICsJICogRklYTUUgbW92ZSB0 aGUgY2RjbGsgY2FjbHVsYXRpb24gdG8KPiA+Pj4gKwkgKiBjb21wdXRlX2NvbmZpZygpIHNvIHdl IGNhbiBmYWlsIGdyYWNlZ3VsbHkuCj4gPj4+ICsJICovCj4gPj4+ICsJaWYgKGNkY2xrID4gZGV2 X3ByaXYtPm1heF9jZGNsa19mcmVxKSB7Cj4gPj4+ICsJCURSTV9FUlJPUigicmVxdWVzdGVkIGNk Y2xrICglZCBrSHopIGV4Y2VlZHMgbWF4ICglZCBrSHopXG4iLAo+ID4+PiArCQkJICBjZGNsaywg ZGV2X3ByaXYtPm1heF9jZGNsa19mcmVxKTsKPiA+Pj4gKwkJY2RjbGsgPSBkZXZfcHJpdi0+bWF4 X2NkY2xrX2ZyZXE7Cj4gPj4+ICsJfQo+ID4+PiArCj4gPj4+ICsJcmV0dXJuIGNkY2xrOwo+ID4+ PiArfQo+ID4+PiArCj4gPj4+ICtzdGF0aWMgaW50IGJyb2Fkd2VsbF9tb2Rlc2V0X2dsb2JhbF9w aXBlcyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCj4gPj4+ICt7Cj4gPj4+ICsJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShzdGF0ZS0+ZGV2KTsKPiA+ Pj4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Cj4gPj4+ICsJc3RydWN0IGRybV9jcnRjX3N0YXRl ICpjcnRjX3N0YXRlOwo+ID4+PiArCWludCBtYXhfcGl4Y2xrID0gaWxrX21heF9waXhlbF9yYXRl KGRldl9wcml2KTsKPiA+Pj4gKwlpbnQgY2RjbGssIGk7Cj4gPj4+ICsKPiA+Pj4gKwljZGNsayA9 IGJyb2Fkd2VsbF9jYWxjX2NkY2xrKGRldl9wcml2LCBtYXhfcGl4Y2xrKTsKPiA+Pj4gKwo+ID4+ PiArCWlmIChjZGNsayA9PSBkZXZfcHJpdi0+Y2RjbGtfZnJlcSkKPiA+Pj4gKwkJcmV0dXJuIDA7 Cj4gPj4+ICsKPiA+Pj4gKwkvKiBhZGQgYWxsIGFjdGl2ZSBwaXBlcyB0byB0aGUgc3RhdGUgKi8K PiA+Pj4gKwlmb3JfZWFjaF9jcnRjKHN0YXRlLT5kZXYsIGNydGMpIHsKPiA+Pj4gKwkJaWYgKCFj cnRjLT5zdGF0ZS0+ZW5hYmxlKQo+ID4+PiArCQkJY29udGludWU7Cj4gPj4+ICsKPiA+Pj4gKwkJ Y3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X2NydGNfc3RhdGUoc3RhdGUsIGNydGMpOwo+ID4+ PiArCQlpZiAoSVNfRVJSKGNydGNfc3RhdGUpKQo+ID4+PiArCQkJcmV0dXJuIFBUUl9FUlIoY3J0 Y19zdGF0ZSk7Cj4gPj4+ICsJfQo+ID4+PiArCj4gPj4+ICsJLyogZGlzYWJsZS9lbmFibGUgYWxs IGN1cnJlbnRseSBhY3RpdmUgcGlwZXMgd2hpbGUgd2UgY2hhbmdlIGNkY2xrICovCj4gPj4+ICsJ Zm9yX2VhY2hfY3J0Y19pbl9zdGF0ZShzdGF0ZSwgY3J0YywgY3J0Y19zdGF0ZSwgaSkKPiA+Pj4g KwkJaWYgKGNydGNfc3RhdGUtPmVuYWJsZSkKPiA+Pj4gKwkJCWNydGNfc3RhdGUtPm1vZGVfY2hh bmdlZCA9IHRydWU7Cj4gPj4+ICsKPiA+Pj4gKwlyZXR1cm4gMDsKPiA+Pj4gK30KPiA+Pj4gKwo+ ID4+PiArc3RhdGljIHZvaWQgYnJvYWR3ZWxsX21vZGVzZXRfZ2xvYmFsX3Jlc291cmNlcyhzdHJ1 Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCj4gPj4+ICt7Cj4gPj4+ICsJc3RydWN0IGRybV9k ZXZpY2UgKmRldiA9IHN0YXRlLT5kZXY7Cj4gPj4+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiA+Pj4gKwlpbnQgbWF4X3BpeGVsX3JhdGUg PSBpbGtfbWF4X3BpeGVsX3JhdGUoZGV2X3ByaXYpOwo+ID4+PiArCWludCByZXFfY2RjbGsgPSBi cm9hZHdlbGxfY2FsY19jZGNsayhkZXZfcHJpdiwgbWF4X3BpeGVsX3JhdGUpOwo+ID4+PiArCj4g Pj4+ICsJaWYgKHJlcV9jZGNsayAhPSBkZXZfcHJpdi0+Y2RjbGtfZnJlcSkKPiA+Pj4gKwkJYnJv YWR3ZWxsX3NldF9jZGNsayhkZXYsIHJlcV9jZGNsayk7Cj4gPj4+ICt9Cj4gPj4+ICsKPiA+Pj4g IHN0YXRpYyBpbnQgaGFzd2VsbF9jcnRjX2NvbXB1dGVfY2xvY2soc3RydWN0IGludGVsX2NydGMg KmNydGMsCj4gPj4+ICAJCQkJICAgICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3Rh dGUpCj4gPj4+ICB7Cj4gPj4+IEBAIC0xMjc4OCw4ICsxMjk3NywxMiBAQCBzdGF0aWMgaW50IF9f aW50ZWxfc2V0X21vZGVfY2hlY2tzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKPiA+ Pj4gIAkgKiBtb2RlIHNldCBvbiB0aGlzIGNydGMuICBGb3Igb3RoZXIgY3J0Y3Mgd2UgbmVlZCB0 byB1c2UgdGhlCj4gPj4+ICAJICogYWRqdXN0ZWRfbW9kZSBiaXRzIGluIHRoZSBjcnRjIGRpcmVj dGx5Lgo+ID4+PiAgCSAqLwo+ID4+PiAtCWlmIChJU19WQUxMRVlWSUVXKGRldikgfHwgSVNfQlJP WFRPTihkZXYpKSB7Cj4gPj4+IC0JCXJldCA9IHZhbGxleXZpZXdfbW9kZXNldF9nbG9iYWxfcGlw ZXMoc3RhdGUpOwo+ID4+PiArCWlmIChJU19WQUxMRVlWSUVXKGRldikgfHwgSVNfQlJPWFRPTihk ZXYpIHx8IElTX0JST0FEV0VMTChkZXYpKSB7Cj4gPj4+ICsJCWlmIChJU19WQUxMRVlWSUVXKGRl dikgfHwgSVNfQlJPWFRPTihkZXYpKQo+ID4+PiArCQkJcmV0ID0gdmFsbGV5dmlld19tb2Rlc2V0 X2dsb2JhbF9waXBlcyhzdGF0ZSk7Cj4gPj4+ICsJCWVsc2UKPiA+Pj4gKwkJCXJldCA9IGJyb2Fk d2VsbF9tb2Rlc2V0X2dsb2JhbF9waXBlcyhzdGF0ZSk7Cj4gPj4+ICsKPiA+Pj4gIAkJaWYgKHJl dCkKPiA+Pj4gIAkJCXJldHVybiByZXQ7Cj4gPj4+ICAJfQo+ID4+PiBAQCAtMTQ2NzcsNiArMTQ4 NzAsOSBAQCBzdGF0aWMgdm9pZCBpbnRlbF9pbml0X2Rpc3BsYXkoc3RydWN0IGRybV9kZXZpY2Ug KmRldikKPiA+Pj4gIAkJZGV2X3ByaXYtPmRpc3BsYXkuZmRpX2xpbmtfdHJhaW4gPSBpdmJfbWFu dWFsX2ZkaV9saW5rX3RyYWluOwo+ID4+PiAgCX0gZWxzZSBpZiAoSVNfSEFTV0VMTChkZXYpIHx8 IElTX0JST0FEV0VMTChkZXYpKSB7Cj4gPj4+ICAJCWRldl9wcml2LT5kaXNwbGF5LmZkaV9saW5r X3RyYWluID0gaHN3X2ZkaV9saW5rX3RyYWluOwo+ID4+PiArCQlpZiAoSVNfQlJPQURXRUxMKGRl dikpCj4gPj4+ICsJCQlkZXZfcHJpdi0+ZGlzcGxheS5tb2Rlc2V0X2dsb2JhbF9yZXNvdXJjZXMg PQo+ID4+PiArCQkJCWJyb2Fkd2VsbF9tb2Rlc2V0X2dsb2JhbF9yZXNvdXJjZXM7Cj4gPj4+ICAJ fSBlbHNlIGlmIChJU19WQUxMRVlWSUVXKGRldikpIHsKPiA+Pj4gIAkJZGV2X3ByaXYtPmRpc3Bs YXkubW9kZXNldF9nbG9iYWxfcmVzb3VyY2VzID0KPiA+Pj4gIAkJCXZhbGxleXZpZXdfbW9kZXNl dF9nbG9iYWxfcmVzb3VyY2VzOwo+ID4+PiAtLSAKPiA+Pj4gMS45LjEKPiA+Pj4KPiA+Pj4gX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiA+Pj4gSW50ZWwt Z2Z4IG1haWxpbmcgbGlzdAo+ID4+PiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4g Pj4+IGh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1n ZngKPiA+Pgo+ID4+IC0tIAo+ID4+IEphbmkgTmlrdWxhLCBJbnRlbCBPcGVuIFNvdXJjZSBUZWNo bm9sb2d5IENlbnRlcgo+ID4KPiA+IC0tIAo+ID4gSmFuaSBOaWt1bGEsIEludGVsIE9wZW4gU291 cmNlIFRlY2hub2xvZ3kgQ2VudGVyCj4gCj4gLS0gCj4gSmFuaSBOaWt1bGEsIEludGVsIE9wZW4g U291cmNlIFRlY2hub2xvZ3kgQ2VudGVyCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9pbnRlbC1nZngK