From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: Re: [PATCH v6 7/8] drm/i915: BDW clock change support Date: Mon, 29 Jun 2015 14:42:25 +0300 Message-ID: <87ioa6yc4e.fsf@intel.com> 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> <1435577811.2888.8.camel@sorvi> 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 ESMTP id 72CC16E845 for ; Mon, 29 Jun 2015 04:40:02 -0700 (PDT) In-Reply-To: <1435577811.2888.8.camel@sorvi> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: mika.kahola@intel.com Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCAyOSBKdW4gMjAxNSwgTWlrYSBLYWhvbGEgPG1pa2Eua2Fob2xhQGludGVsLmNvbT4g d3JvdGU6Cj4gT24gTW9uLCAyMDE1LTA2LTI5IGF0IDE0OjI0ICswMzAwLCBKYW5pIE5pa3VsYSB3 cm90ZToKPj4gT24gVHVlLCAxNiBKdW4gMjAxNSwgSmFuaSBOaWt1bGEgPGphbmkubmlrdWxhQGxp bnV4LmludGVsLmNvbT4gd3JvdGU6Cj4+ID4gT24gVHVlLCAxNiBKdW4gMjAxNSwgSmFuaSBOaWt1 bGEgPGphbmkubmlrdWxhQGxpbnV4LmludGVsLmNvbT4gd3JvdGU6Cj4+ID4+IE9uIFdlZCwgMDMg SnVuIDIwMTUsIE1pa2EgS2Fob2xhIDxtaWthLmthaG9sYUBpbnRlbC5jb20+IHdyb3RlOgo+PiA+ Pj4gRnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4K Pj4gPj4+Cj4+ID4+PiBBZGQgc3VwcG9ydCBmb3IgY2hhbmdpbmcgY2RjbGsgZnJlcXVlbmN5IGR1 cmluZyBydW50aW1lIG9uIEJEVy4gVGhlCj4+ID4+PiBwcm9jZWR1cmUgaXMgcXVpdGUgYSBiaXQg ZGlmZmVyZW50IG9uIEJEVyBmcm9tIHRoZSBvbmUgb24gSFNXLCBzbwo+PiA+Pj4gYWRkIGEgc2Vw YXJhdGUgZnVuY3Rpb24gZm9yIGl0Lgo+PiA+Pj4KPj4gPj4+IEFsc28gd2l0aCBJUFMgZW5hYmxl ZCB0aGUgYWN0dWFsIHBpeGVsIHJhdGUgbXVzdG4ndCBleGNlZWQgOTUlIG9mIGNkY2xrLAo+PiA+ Pj4gc28gdGFrZSB0aGF0IGludG8gYWNjb3VudCB3aGVuIGNvbXB1dGluZyB0aGUgbWF4IHBpeGVs IHJhdGUuCj4+ID4+Pgo+PiA+Pj4gdjI6IEdyYWIgcnBzLmh3X2xvY2sgYXJvdW5kIHNhbmR5YnJp ZGdlX3Bjb2RlX3dyaXRlKCkKPj4gPj4+IHYzOiBSZWJhc2UgZHVlIHRvIHBvd2VyIHdlbGwgdnMu IC5nbG9iYWxfcmVzb3VyY2VzKCkgcmVvcmRlcmluZwo+PiA+Pj4gdjQ6IFJlYmFzZWQgdG8gdGhl IGxhdGVzdAo+PiA+Pj4gdjU6IFJlYmFzZWQgdG8gdGhlIGxhdGVzdAo+PiA+Pj4gdjY6IFBhdGNo IG9yZGVyIHNodWZmbGUgc28gdGhhdCBCcm9hZHdlbGwgQ0QgY2xvY2sgY2hhbmdlIGlzCj4+ID4+ PiAgICAgYXBwbGllZCBiZWZvcmUgdGhlIHBhdGNoIGZvciBIYXN3ZWxsIENEIGNsb2NrIGNoYW5n ZQo+PiA+Pj4gdjc6IEZpeCBmb3IgcGF0Y2ggc3R5bGUgcHJvYmxlbXMKPj4gPj4+Cj4+ID4+PiBT aWduZWQtb2ZmLWJ5OiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwu Y29tPgo+PiA+Pj4gU2lnbmVkLW9mZi1ieTogTWlrYSBLYWhvbGEgPG1pa2Eua2Fob2xhQGludGVs LmNvbT4KPj4gPj4KPj4gPj4gVGhpcyBwYXRjaCBoYXJkIGhhbmdzIG15IEJEVyBOVUMgYXQgYm9v dCB3aGVuIGJvdGggRFAgYW5kIEhETUkgYXJlCj4+ID4+IGNvbm5lY3RlZC4gRWl0aGVyIERQIG9y IEhETUkgYWxvbmUgYXJlIGdvb2QsIHNhbWUgd2l0aCBob3RwbHVnZ2luZyB0aGUKPj4gPj4gb3Ro ZXIgYWZ0ZXJ3YXJkcy4gQm9vdGluZyB0byBncnViIHdpdGggYm90aCBjb25uZWN0ZWQsIGFuZCB1 bnBsdWdnaW5nCj4+ID4+IEhETUkgYmVmb3JlIGxvYWRpbmcgdGhlIGtlcm5lbCBhbHNvIHJlcHJv ZHVjZXMgdGhlIGlzc3VlLgo+PiA+Pgo+PiA+PiBJdCBsb29rcyBsaWtlIHRoZSBwcm9ibGVtIGJv aWxzIGRvd24gdG8gdGhlIEJJT1Mgc2V0dGluZyB1cCBhIHNtYWxsZXIKPj4gPj4gcmVzb2x1dGlv biBvbiB0aGUgRFAgZGlzcGxheSB3aGVuIGJvdGggYXJlIGNvbm5lY3RlZCwgYW5kIHRoaXMgcGF0 Y2gKPj4gPj4gZmFpbHMgdG8gY29wZSB3aXRoIHRoYXQgb24gaTkxNSBsb2FkLgo+PiA+Cj4+ID4g QnkgInRoaXMgcGF0Y2giIEkgb2J2aW91c2x5IHJlZmVyIHRvCj4+ID4KPj4gPiBjb21taXQgYjQz MmU1Y2ZkNWU5MjEyN2FkMmRkODNiZmMzMDgzZjFkYmNlNDNmYgo+PiA+IEF1dGhvcjogVmlsbGUg U3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KPj4gPiBEYXRlOiAgIFdl ZCBKdW4gMyAxNTo0NToxMyAyMDE1ICswMzAwCj4+ID4KPj4gPiAgICAgZHJtL2k5MTU6IEJEVyBj bG9jayBjaGFuZ2Ugc3VwcG9ydAo+PiA+Cj4+ID4gYW5kIGV2ZXJ5dGhpbmcgd29ya3MgZm9yIHRo ZSBjb21taXQgYmVmb3JlIHRoYXQuCj4+IAo+PiBBbnlvbmUgd29ya2luZyBvbiB0aGlzLCBvciBz aG91bGQgd2UgcmV2ZXJ0Pwo+PiAKPj4gQlIsCj4+IEphbmkuCj4+IAo+IE15IHVuZGVyc3RhbmRp bmcgaXMgdGhhdCBWaWxsZSBoYXMgYW4gaWRlYSBvciBob3cgdG8gZml4IHRoaXMuCgpWaWxsZSwg d2hlbiBkbyB5b3UgdGhpbmsgd2UgY2FuIGNvbnZlcnQgdGhlIGlkZWEgaW50byBhIHBhdGNoPyBT aG91bGQgd2UKcmV2ZXJ0IGluIHRoZSBtZWFuIHRpbWU/CgpCUiwKSmFuaS4KCgoKPgo+IENoZWVy cywKPiBNaWthCj4KPj4gCj4+ID4KPj4gPiBCUiwKPj4gPiBKYW5pLgo+PiA+Cj4+ID4KPj4gPgo+ PiA+Cj4+ID4KPj4gPj4KPj4gPj4gQlIsCj4+ID4+IEphbmkuCj4+ID4+Cj4+ID4+Cj4+ID4+Cj4+ ID4+Pgo+PiA+Pj4gQXV0aG9yOiAgICBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGlu dXguaW50ZWwuY29tPgo+PiA+Pj4gLS0tCj4+ID4+PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9yZWcuaCAgICAgIHwgICAyICsKPj4gPj4+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k aXNwbGF5LmMgfCAyMTYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0KPj4gPj4+ ICAyIGZpbGVzIGNoYW5nZWQsIDIwOCBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKPj4g Pj4+Cj4+ID4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPj4gPj4+IGluZGV4IDcyMTMyMjQuLjBm NzJjMGUgMTAwNjQ0Cj4+ID4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5o Cj4+ID4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCj4+ID4+PiBAQCAt NjcwNSw2ICs2NzA1LDcgQEAgZW51bSBza2xfZGlzcF9wb3dlcl93ZWxscyB7Cj4+ID4+PiAgI2Rl ZmluZQkgIEdFTjZfUENPREVfUkVBRF9SQzZWSURTCQkweDUKPj4gPj4+ICAjZGVmaW5lICAgICBH RU42X0VOQ09ERV9SQzZfVklEKG12KQkJKCgobXYpIC0gMjQ1KSAvIDUpCj4+ID4+PiAgI2RlZmlu ZSAgICAgR0VONl9ERUNPREVfUkM2X1ZJRCh2aWRzKQkJKCgodmlkcykgKiA1KSArIDI0NSkKPj4g Pj4+ICsjZGVmaW5lICAgQkRXX1BDT0RFX0RJU1BMQVlfRlJFUV9DSEFOR0VfUkVRCTB4MTgKPj4g Pj4+ICAjZGVmaW5lICAgR0VOOV9QQ09ERV9SRUFEX01FTV9MQVRFTkNZCQkweDYKPj4gPj4+ICAj ZGVmaW5lICAgICBHRU45X01FTV9MQVRFTkNZX0xFVkVMX01BU0sJCTB4RkYKPj4gPj4+ICAjZGVm aW5lICAgICBHRU45X01FTV9MQVRFTkNZX0xFVkVMXzFfNV9TSElGVAk4Cj4+ID4+PiBAQCAtNzE3 MCw2ICs3MTcxLDcgQEAgZW51bSBza2xfZGlzcF9wb3dlcl93ZWxscyB7Cj4+ID4+PiAgI2RlZmlu ZSAgTENQTExfQ0xLX0ZSRVFfMzM3XzVfQkRXCSgyPDwyNikKPj4gPj4+ICAjZGVmaW5lICBMQ1BM TF9DTEtfRlJFUV82NzVfQkRXCQkoMzw8MjYpCj4+ID4+PiAgI2RlZmluZSAgTENQTExfQ0RfQ0xP Q0tfRElTQUJMRQkJKDE8PDI1KQo+PiA+Pj4gKyNkZWZpbmUgIExDUExMX1JPT1RfQ0RfQ0xPQ0tf RElTQUJMRQkoMTw8MjQpCj4+ID4+PiAgI2RlZmluZSAgTENQTExfQ0QyWF9DTE9DS19ESVNBQkxF CSgxPDwyMykKPj4gPj4+ICAjZGVmaW5lICBMQ1BMTF9QT1dFUl9ET1dOX0FMTE9XCQkoMTw8MjIp Cj4+ID4+PiAgI2RlZmluZSAgTENQTExfQ0RfU09VUkNFX0ZDTEsJCSgxPDwyMSkKPj4gPj4+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPj4gPj4+IGluZGV4IGMzZjAxYWEuLmIxZTIw NjkgMTAwNjQ0Cj4+ID4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5 LmMKPj4gPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+PiA+ Pj4gQEAgLTU3NTEsNyArNTc1MSwyMiBAQCBzdGF0aWMgdm9pZCBpbnRlbF91cGRhdGVfbWF4X2Nk Y2xrKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4+ID4+PiAgewo+PiA+Pj4gIAlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+PiA+Pj4gIAo+PiA+ Pj4gLQlpZiAoSVNfVkFMTEVZVklFVyhkZXYpKSB7Cj4+ID4+PiArCWlmIChJU19CUk9BRFdFTEwo ZGV2KSkgIHsKPj4gPj4+ICsJCS8qCj4+ID4+PiArCQkgKiBGSVhNRSB3aXRoIGV4dHJhIGNvb2xp bmcgd2UgY2FuIGFsbG93Cj4+ID4+PiArCQkgKiA1NDAgTUh6IGZvciBVTFggYW5kIDY3NSBNaHog Zm9yIFVMVC4KPj4gPj4+ICsJCSAqIEhvdyBjYW4gd2Uga25vdyBpZiBleHRyYSBjb29saW5nIGlz Cj4+ID4+PiArCQkgKiBhdmFpbGFibGU/IFBDSSBJRCwgVlRCLCBzb21ldGhpbmcgZWxzZT8KPj4g Pj4+ICsJCSAqLwo+PiA+Pj4gKwkJaWYgKEk5MTVfUkVBRChGVVNFX1NUUkFQKSAmIEhTV19DRENM S19MSU1JVCkKPj4gPj4+ICsJCQlkZXZfcHJpdi0+bWF4X2NkY2xrX2ZyZXEgPSA0NTAwMDA7Cj4+ ID4+PiArCQllbHNlIGlmIChJU19CRFdfVUxYKGRldikpCj4+ID4+PiArCQkJZGV2X3ByaXYtPm1h eF9jZGNsa19mcmVxID0gNDUwMDAwOwo+PiA+Pj4gKwkJZWxzZSBpZiAoSVNfQkRXX1VMVChkZXYp KQo+PiA+Pj4gKwkJCWRldl9wcml2LT5tYXhfY2RjbGtfZnJlcSA9IDU0MDAwMDsKPj4gPj4+ICsJ CWVsc2UKPj4gPj4+ICsJCQlkZXZfcHJpdi0+bWF4X2NkY2xrX2ZyZXEgPSA2NzUwMDA7Cj4+ID4+ PiArCX0gZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhkZXYpKSB7Cj4+ID4+PiAgCQlkZXZfcHJpdi0+ bWF4X2NkY2xrX2ZyZXEgPSA0MDAwMDA7Cj4+ID4+PiAgCX0gZWxzZSB7Cj4+ID4+PiAgCQkvKiBv dGhlcndpc2UgYXNzdW1lIGNkY2xrIGlzIGZpeGVkICovCj4+ID4+PiBAQCAtNjYyMSwxMyArNjYz NiwxMSBAQCBzdGF0aWMgYm9vbCBwaXBlX2NvbmZpZ19zdXBwb3J0c19pcHMoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LAo+PiA+Pj4gIAkJcmV0dXJuIHRydWU7Cj4+ID4+PiAgCj4+ ID4+PiAgCS8qCj4+ID4+PiAtCSAqIEZJWE1FIGlmIHdlIGNvbXBhcmUgYWdhaW5zdCBtYXggd2Ug c2hvdWxkIHRoZW4KPj4gPj4+IC0JICogaW5jcmVhc2UgdGhlIGNkY2xrIGZyZXF1ZW5jeSB3aGVu IHRoZSBjdXJyZW50Cj4+ID4+PiAtCSAqIHZhbHVlIGlzIHRvbyBsb3cuIFRoZSBvdGhlciBvcHRp b24gaXMgdG8gY29tcGFyZQo+PiA+Pj4gLQkgKiBhZ2FpbnN0IHRoZSBjZGNsayBmcmVxdWVuY3kg d2UncmUgZ29pbmcgaGF2ZSBwb3N0Cj4+ID4+PiAtCSAqIG1vZGVzZXQgKGllLiBvbmUgd2UgY29t cHV0ZWQgdXNpbmcgb3RoZXIgY29uc3RyYWludHMpLgo+PiA+Pj4gLQkgKiBOZWVkIHRvIG1lYXN1 cmUgd2hldGhlciB1c2luZyBhIGxvd2VyIGNkY2xrIHcvbyBJUFMKPj4gPj4+IC0JICogaXMgYmV0 dGVyIG9yIHdvcnNlIHRoYW4gYSBoaWdoZXIgY2RjbGsgdy8gSVBTLgo+PiA+Pj4gKwkgKiBXZSBj b21wYXJlIGFnYWluc3QgbWF4IHdoaWNoIG1lYW5zIHdlIG11c3QgdGFrZQo+PiA+Pj4gKwkgKiB0 aGUgaW5jcmVhc2VkIGNkY2xrIHJlcXVpcmVtZW50IGludG8gYWNjb3VudCB3aGVuCj4+ID4+PiAr CSAqIGNhbGN1bGF0aW5nIHRoZSBuZXcgY2RjbGsuCj4+ID4+PiArCSAqCj4+ID4+PiArCSAqIFNo b3VsZCBtZWFzdXJlIHdoZXRoZXIgdXNpbmcgYSBsb3dlciBjZGNsayB3L28gSVBTCj4+ID4+PiAg CSAqLwo+PiA+Pj4gIAlyZXR1cm4gaWxrX3BpcGVfcGl4ZWxfcmF0ZShwaXBlX2NvbmZpZykgPD0K Pj4gPj4+ICAJCWRldl9wcml2LT5tYXhfY2RjbGtfZnJlcSAqIDk1IC8gMTAwOwo+PiA+Pj4gQEAg LTk2MDgsNiArOTYyMSwxODIgQEAgc3RhdGljIHZvaWQgYnJveHRvbl9tb2Rlc2V0X2dsb2JhbF9y ZXNvdXJjZXMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKm9sZF9zdGF0ZSkKPj4gPj4+ICAJCWJy b3h0b25fc2V0X2NkY2xrKGRldiwgcmVxX2NkY2xrKTsKPj4gPj4+ICB9Cj4+ID4+PiAgCj4+ID4+ PiArLyogY29tcHV0ZSB0aGUgbWF4IHJhdGUgZm9yIG5ldyBjb25maWd1cmF0aW9uICovCj4+ID4+ PiArc3RhdGljIGludCBpbGtfbWF4X3BpeGVsX3JhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQo+PiA+Pj4gK3sKPj4gPj4+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRl dl9wcml2LT5kZXY7Cj4+ID4+PiArCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjOwo+PiA+ Pj4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Cj4+ID4+PiArCWludCBtYXhfcGl4ZWxfcmF0ZSA9 IDA7Cj4+ID4+PiArCWludCBwaXhlbF9yYXRlOwo+PiA+Pj4gKwo+PiA+Pj4gKwlmb3JfZWFjaF9j cnRjKGRldiwgY3J0Yykgewo+PiA+Pj4gKwkJaWYgKCFjcnRjLT5zdGF0ZS0+ZW5hYmxlKQo+PiA+ Pj4gKwkJCWNvbnRpbnVlOwo+PiA+Pj4gKwo+PiA+Pj4gKwkJaW50ZWxfY3J0YyA9IHRvX2ludGVs X2NydGMoY3J0Yyk7Cj4+ID4+PiArCQlwaXhlbF9yYXRlID0gaWxrX3BpcGVfcGl4ZWxfcmF0ZShp bnRlbF9jcnRjLT5jb25maWcpOwo+PiA+Pj4gKwo+PiA+Pj4gKwkJLyogcGl4ZWwgcmF0ZSBtdXN0 bid0IGV4Y2VlZCA5NSUgb2YgY2RjbGsgd2l0aCBJUFMgb24gQkRXICovCj4+ID4+PiArCQlpZiAo SVNfQlJPQURXRUxMKGRldikgJiYgaW50ZWxfY3J0Yy0+Y29uZmlnLT5pcHNfZW5hYmxlZCkKPj4g Pj4+ICsJCQlwaXhlbF9yYXRlID0gRElWX1JPVU5EX1VQKHBpeGVsX3JhdGUgKiAxMDAsIDk1KTsK Pj4gPj4+ICsKPj4gPj4+ICsJCW1heF9waXhlbF9yYXRlID0gbWF4KG1heF9waXhlbF9yYXRlLCBw aXhlbF9yYXRlKTsKPj4gPj4+ICsJfQo+PiA+Pj4gKwo+PiA+Pj4gKwlyZXR1cm4gbWF4X3BpeGVs X3JhdGU7Cj4+ID4+PiArfQo+PiA+Pj4gKwo+PiA+Pj4gK3N0YXRpYyB2b2lkIGJyb2Fkd2VsbF9z ZXRfY2RjbGsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNkY2xrKQo+PiA+Pj4gK3sKPj4g Pj4+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0 ZTsKPj4gPj4+ICsJdWludDMyX3QgdmFsLCBkYXRhOwo+PiA+Pj4gKwlpbnQgcmV0Owo+PiA+Pj4g Kwo+PiA+Pj4gKwlpZiAoV0FSTigoSTkxNV9SRUFEKExDUExMX0NUTCkgJgo+PiA+Pj4gKwkJICAo TENQTExfUExMX0RJU0FCTEUgfCBMQ1BMTF9QTExfTE9DSyB8Cj4+ID4+PiArCQkgICBMQ1BMTF9D RF9DTE9DS19ESVNBQkxFIHwgTENQTExfUk9PVF9DRF9DTE9DS19ESVNBQkxFIHwKPj4gPj4+ICsJ CSAgIExDUExMX0NEMlhfQ0xPQ0tfRElTQUJMRSB8IExDUExMX1BPV0VSX0RPV05fQUxMT1cgfAo+ PiA+Pj4gKwkJICAgTENQTExfQ0RfU09VUkNFX0ZDTEspKSAhPSBMQ1BMTF9QTExfTE9DSywKPj4g Pj4+ICsJCSAidHJ5aW5nIHRvIGNoYW5nZSBjZGNsayBmcmVxdWVuY3kgd2l0aCBjZGNsayBub3Qg ZW5hYmxlZFxuIikpCj4+ID4+PiArCQlyZXR1cm47Cj4+ID4+PiArCj4+ID4+PiArCW11dGV4X2xv Y2soJmRldl9wcml2LT5ycHMuaHdfbG9jayk7Cj4+ID4+PiArCXJldCA9IHNhbmR5YnJpZGdlX3Bj b2RlX3dyaXRlKGRldl9wcml2LAo+PiA+Pj4gKwkJCQkgICAgICBCRFdfUENPREVfRElTUExBWV9G UkVRX0NIQU5HRV9SRVEsIDB4MCk7Cj4+ID4+PiArCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnJw cy5od19sb2NrKTsKPj4gPj4+ICsJaWYgKHJldCkgewo+PiA+Pj4gKwkJRFJNX0VSUk9SKCJmYWls ZWQgdG8gaW5mb3JtIHBjb2RlIGFib3V0IGNkY2xrIGNoYW5nZVxuIik7Cj4+ID4+PiArCQlyZXR1 cm47Cj4+ID4+PiArCX0KPj4gPj4+ICsKPj4gPj4+ICsJdmFsID0gSTkxNV9SRUFEKExDUExMX0NU TCk7Cj4+ID4+PiArCXZhbCB8PSBMQ1BMTF9DRF9TT1VSQ0VfRkNMSzsKPj4gPj4+ICsJSTkxNV9X UklURShMQ1BMTF9DVEwsIHZhbCk7Cj4+ID4+PiArCj4+ID4+PiArCWlmICh3YWl0X2Zvcl9hdG9t aWNfdXMoSTkxNV9SRUFEKExDUExMX0NUTCkgJgo+PiA+Pj4gKwkJCSAgICAgICBMQ1BMTF9DRF9T T1VSQ0VfRkNMS19ET05FLCAxKSkKPj4gPj4+ICsJCURSTV9FUlJPUigiU3dpdGNoaW5nIHRvIEZD TEsgZmFpbGVkXG4iKTsKPj4gPj4+ICsKPj4gPj4+ICsJdmFsID0gSTkxNV9SRUFEKExDUExMX0NU TCk7Cj4+ID4+PiArCXZhbCAmPSB+TENQTExfQ0xLX0ZSRVFfTUFTSzsKPj4gPj4+ICsKPj4gPj4+ ICsJc3dpdGNoIChjZGNsaykgewo+PiA+Pj4gKwljYXNlIDQ1MDAwMDoKPj4gPj4+ICsJCXZhbCB8 PSBMQ1BMTF9DTEtfRlJFUV80NTA7Cj4+ID4+PiArCQlkYXRhID0gMDsKPj4gPj4+ICsJCWJyZWFr Owo+PiA+Pj4gKwljYXNlIDU0MDAwMDoKPj4gPj4+ICsJCXZhbCB8PSBMQ1BMTF9DTEtfRlJFUV81 NE9fQkRXOwo+PiA+Pj4gKwkJZGF0YSA9IDE7Cj4+ID4+PiArCQlicmVhazsKPj4gPj4+ICsJY2Fz ZSAzMzc1MDA6Cj4+ID4+PiArCQl2YWwgfD0gTENQTExfQ0xLX0ZSRVFfMzM3XzVfQkRXOwo+PiA+ Pj4gKwkJZGF0YSA9IDI7Cj4+ID4+PiArCQlicmVhazsKPj4gPj4+ICsJY2FzZSA2NzUwMDA6Cj4+ ID4+PiArCQl2YWwgfD0gTENQTExfQ0xLX0ZSRVFfNjc1X0JEVzsKPj4gPj4+ICsJCWRhdGEgPSAz Owo+PiA+Pj4gKwkJYnJlYWs7Cj4+ID4+PiArCWRlZmF1bHQ6Cj4+ID4+PiArCQlXQVJOKDEsICJp bnZhbGlkIGNkY2xrIGZyZXF1ZW5jeVxuIik7Cj4+ID4+PiArCQlyZXR1cm47Cj4+ID4+PiArCX0K Pj4gPj4+ICsKPj4gPj4+ICsJSTkxNV9XUklURShMQ1BMTF9DVEwsIHZhbCk7Cj4+ID4+PiArCj4+ ID4+PiArCXZhbCA9IEk5MTVfUkVBRChMQ1BMTF9DVEwpOwo+PiA+Pj4gKwl2YWwgJj0gfkxDUExM X0NEX1NPVVJDRV9GQ0xLOwo+PiA+Pj4gKwlJOTE1X1dSSVRFKExDUExMX0NUTCwgdmFsKTsKPj4g Pj4+ICsKPj4gPj4+ICsJaWYgKHdhaXRfZm9yX2F0b21pY191cygoSTkxNV9SRUFEKExDUExMX0NU TCkgJgo+PiA+Pj4gKwkJCQlMQ1BMTF9DRF9TT1VSQ0VfRkNMS19ET05FKSA9PSAwLCAxKSkKPj4g Pj4+ICsJCURSTV9FUlJPUigiU3dpdGNoaW5nIGJhY2sgdG8gTENQTEwgZmFpbGVkXG4iKTsKPj4g Pj4+ICsKPj4gPj4+ICsJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnJwcy5od19sb2NrKTsKPj4gPj4+ ICsJc2FuZHlicmlkZ2VfcGNvZGVfd3JpdGUoZGV2X3ByaXYsIEhTV19QQ09ERV9ERV9XUklURV9G UkVRX1JFUSwgZGF0YSk7Cj4+ID4+PiArCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnJwcy5od19s b2NrKTsKPj4gPj4+ICsKPj4gPj4+ICsJaW50ZWxfdXBkYXRlX2NkY2xrKGRldik7Cj4+ID4+PiAr Cj4+ID4+PiArCVdBUk4oY2RjbGsgIT0gZGV2X3ByaXYtPmNkY2xrX2ZyZXEsCj4+ID4+PiArCSAg ICAgImNkY2xrIHJlcXVlc3RlZCAlZCBrSHogYnV0IGdvdCAlZCBrSHpcbiIsCj4+ID4+PiArCSAg ICAgY2RjbGssIGRldl9wcml2LT5jZGNsa19mcmVxKTsKPj4gPj4+ICt9Cj4+ID4+PiArCj4+ID4+ PiArc3RhdGljIGludCBicm9hZHdlbGxfY2FsY19jZGNsayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYsCj4+ID4+PiArCQkJICAgICAgaW50IG1heF9waXhlbF9yYXRlKQo+PiA+Pj4g K3sKPj4gPj4+ICsJaW50IGNkY2xrOwo+PiA+Pj4gKwo+PiA+Pj4gKwkvKgo+PiA+Pj4gKwkgKiBG SVhNRSBzaG91bGQgYWxzbyBhY2NvdW50IGZvciBwbGFuZSByYXRpbwo+PiA+Pj4gKwkgKiBvbmNl IDY0YnBwIHBpeGVsIGZvcm1hdHMgYXJlIHN1cHBvcnRlZC4KPj4gPj4+ICsJICovCj4+ID4+PiAr CWlmIChtYXhfcGl4ZWxfcmF0ZSA+IDU0MDAwMCkKPj4gPj4+ICsJCWNkY2xrID0gNjc1MDAwOwo+ PiA+Pj4gKwllbHNlIGlmIChtYXhfcGl4ZWxfcmF0ZSA+IDQ1MDAwMCkKPj4gPj4+ICsJCWNkY2xr ID0gNTQwMDAwOwo+PiA+Pj4gKwllbHNlIGlmIChtYXhfcGl4ZWxfcmF0ZSA+IDMzNzUwMCkKPj4g Pj4+ICsJCWNkY2xrID0gNDUwMDAwOwo+PiA+Pj4gKwllbHNlCj4+ID4+PiArCQljZGNsayA9IDMz NzUwMDsKPj4gPj4+ICsKPj4gPj4+ICsJLyoKPj4gPj4+ICsJICogRklYTUUgbW92ZSB0aGUgY2Rj bGsgY2FjbHVsYXRpb24gdG8KPj4gPj4+ICsJICogY29tcHV0ZV9jb25maWcoKSBzbyB3ZSBjYW4g ZmFpbCBncmFjZWd1bGx5Lgo+PiA+Pj4gKwkgKi8KPj4gPj4+ICsJaWYgKGNkY2xrID4gZGV2X3By aXYtPm1heF9jZGNsa19mcmVxKSB7Cj4+ID4+PiArCQlEUk1fRVJST1IoInJlcXVlc3RlZCBjZGNs ayAoJWQga0h6KSBleGNlZWRzIG1heCAoJWQga0h6KVxuIiwKPj4gPj4+ICsJCQkgIGNkY2xrLCBk ZXZfcHJpdi0+bWF4X2NkY2xrX2ZyZXEpOwo+PiA+Pj4gKwkJY2RjbGsgPSBkZXZfcHJpdi0+bWF4 X2NkY2xrX2ZyZXE7Cj4+ID4+PiArCX0KPj4gPj4+ICsKPj4gPj4+ICsJcmV0dXJuIGNkY2xrOwo+ PiA+Pj4gK30KPj4gPj4+ICsKPj4gPj4+ICtzdGF0aWMgaW50IGJyb2Fkd2VsbF9tb2Rlc2V0X2ds b2JhbF9waXBlcyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCj4+ID4+PiArewo+PiA+ Pj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHN0YXRlLT5k ZXYpOwo+PiA+Pj4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Cj4+ID4+PiArCXN0cnVjdCBkcm1f Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPj4gPj4+ICsJaW50IG1heF9waXhjbGsgPSBpbGtfbWF4 X3BpeGVsX3JhdGUoZGV2X3ByaXYpOwo+PiA+Pj4gKwlpbnQgY2RjbGssIGk7Cj4+ID4+PiArCj4+ ID4+PiArCWNkY2xrID0gYnJvYWR3ZWxsX2NhbGNfY2RjbGsoZGV2X3ByaXYsIG1heF9waXhjbGsp Owo+PiA+Pj4gKwo+PiA+Pj4gKwlpZiAoY2RjbGsgPT0gZGV2X3ByaXYtPmNkY2xrX2ZyZXEpCj4+ ID4+PiArCQlyZXR1cm4gMDsKPj4gPj4+ICsKPj4gPj4+ICsJLyogYWRkIGFsbCBhY3RpdmUgcGlw ZXMgdG8gdGhlIHN0YXRlICovCj4+ID4+PiArCWZvcl9lYWNoX2NydGMoc3RhdGUtPmRldiwgY3J0 Yykgewo+PiA+Pj4gKwkJaWYgKCFjcnRjLT5zdGF0ZS0+ZW5hYmxlKQo+PiA+Pj4gKwkJCWNvbnRp bnVlOwo+PiA+Pj4gKwo+PiA+Pj4gKwkJY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X2NydGNf c3RhdGUoc3RhdGUsIGNydGMpOwo+PiA+Pj4gKwkJaWYgKElTX0VSUihjcnRjX3N0YXRlKSkKPj4g Pj4+ICsJCQlyZXR1cm4gUFRSX0VSUihjcnRjX3N0YXRlKTsKPj4gPj4+ICsJfQo+PiA+Pj4gKwo+ PiA+Pj4gKwkvKiBkaXNhYmxlL2VuYWJsZSBhbGwgY3VycmVudGx5IGFjdGl2ZSBwaXBlcyB3aGls ZSB3ZSBjaGFuZ2UgY2RjbGsgKi8KPj4gPj4+ICsJZm9yX2VhY2hfY3J0Y19pbl9zdGF0ZShzdGF0 ZSwgY3J0YywgY3J0Y19zdGF0ZSwgaSkKPj4gPj4+ICsJCWlmIChjcnRjX3N0YXRlLT5lbmFibGUp Cj4+ID4+PiArCQkJY3J0Y19zdGF0ZS0+bW9kZV9jaGFuZ2VkID0gdHJ1ZTsKPj4gPj4+ICsKPj4g Pj4+ICsJcmV0dXJuIDA7Cj4+ID4+PiArfQo+PiA+Pj4gKwo+PiA+Pj4gK3N0YXRpYyB2b2lkIGJy b2Fkd2VsbF9tb2Rlc2V0X2dsb2JhbF9yZXNvdXJjZXMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUg KnN0YXRlKQo+PiA+Pj4gK3sKPj4gPj4+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHN0YXRl LT5kZXY7Cj4+ID4+PiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ ZGV2X3ByaXZhdGU7Cj4+ID4+PiArCWludCBtYXhfcGl4ZWxfcmF0ZSA9IGlsa19tYXhfcGl4ZWxf cmF0ZShkZXZfcHJpdik7Cj4+ID4+PiArCWludCByZXFfY2RjbGsgPSBicm9hZHdlbGxfY2FsY19j ZGNsayhkZXZfcHJpdiwgbWF4X3BpeGVsX3JhdGUpOwo+PiA+Pj4gKwo+PiA+Pj4gKwlpZiAocmVx X2NkY2xrICE9IGRldl9wcml2LT5jZGNsa19mcmVxKQo+PiA+Pj4gKwkJYnJvYWR3ZWxsX3NldF9j ZGNsayhkZXYsIHJlcV9jZGNsayk7Cj4+ID4+PiArfQo+PiA+Pj4gKwo+PiA+Pj4gIHN0YXRpYyBp bnQgaGFzd2VsbF9jcnRjX2NvbXB1dGVfY2xvY2soc3RydWN0IGludGVsX2NydGMgKmNydGMsCj4+ ID4+PiAgCQkJCSAgICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQo+PiA+ Pj4gIHsKPj4gPj4+IEBAIC0xMjc4OCw4ICsxMjk3NywxMiBAQCBzdGF0aWMgaW50IF9faW50ZWxf c2V0X21vZGVfY2hlY2tzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKPj4gPj4+ICAJ ICogbW9kZSBzZXQgb24gdGhpcyBjcnRjLiAgRm9yIG90aGVyIGNydGNzIHdlIG5lZWQgdG8gdXNl IHRoZQo+PiA+Pj4gIAkgKiBhZGp1c3RlZF9tb2RlIGJpdHMgaW4gdGhlIGNydGMgZGlyZWN0bHku Cj4+ID4+PiAgCSAqLwo+PiA+Pj4gLQlpZiAoSVNfVkFMTEVZVklFVyhkZXYpIHx8IElTX0JST1hU T04oZGV2KSkgewo+PiA+Pj4gLQkJcmV0ID0gdmFsbGV5dmlld19tb2Rlc2V0X2dsb2JhbF9waXBl cyhzdGF0ZSk7Cj4+ID4+PiArCWlmIChJU19WQUxMRVlWSUVXKGRldikgfHwgSVNfQlJPWFRPTihk ZXYpIHx8IElTX0JST0FEV0VMTChkZXYpKSB7Cj4+ID4+PiArCQlpZiAoSVNfVkFMTEVZVklFVyhk ZXYpIHx8IElTX0JST1hUT04oZGV2KSkKPj4gPj4+ICsJCQlyZXQgPSB2YWxsZXl2aWV3X21vZGVz ZXRfZ2xvYmFsX3BpcGVzKHN0YXRlKTsKPj4gPj4+ICsJCWVsc2UKPj4gPj4+ICsJCQlyZXQgPSBi cm9hZHdlbGxfbW9kZXNldF9nbG9iYWxfcGlwZXMoc3RhdGUpOwo+PiA+Pj4gKwo+PiA+Pj4gIAkJ aWYgKHJldCkKPj4gPj4+ICAJCQlyZXR1cm4gcmV0Owo+PiA+Pj4gIAl9Cj4+ID4+PiBAQCAtMTQ2 NzcsNiArMTQ4NzAsOSBAQCBzdGF0aWMgdm9pZCBpbnRlbF9pbml0X2Rpc3BsYXkoc3RydWN0IGRy bV9kZXZpY2UgKmRldikKPj4gPj4+ICAJCWRldl9wcml2LT5kaXNwbGF5LmZkaV9saW5rX3RyYWlu ID0gaXZiX21hbnVhbF9mZGlfbGlua190cmFpbjsKPj4gPj4+ICAJfSBlbHNlIGlmIChJU19IQVNX RUxMKGRldikgfHwgSVNfQlJPQURXRUxMKGRldikpIHsKPj4gPj4+ICAJCWRldl9wcml2LT5kaXNw bGF5LmZkaV9saW5rX3RyYWluID0gaHN3X2ZkaV9saW5rX3RyYWluOwo+PiA+Pj4gKwkJaWYgKElT X0JST0FEV0VMTChkZXYpKQo+PiA+Pj4gKwkJCWRldl9wcml2LT5kaXNwbGF5Lm1vZGVzZXRfZ2xv YmFsX3Jlc291cmNlcyA9Cj4+ID4+PiArCQkJCWJyb2Fkd2VsbF9tb2Rlc2V0X2dsb2JhbF9yZXNv dXJjZXM7Cj4+ID4+PiAgCX0gZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhkZXYpKSB7Cj4+ID4+PiAg CQlkZXZfcHJpdi0+ZGlzcGxheS5tb2Rlc2V0X2dsb2JhbF9yZXNvdXJjZXMgPQo+PiA+Pj4gIAkJ CXZhbGxleXZpZXdfbW9kZXNldF9nbG9iYWxfcmVzb3VyY2VzOwo+PiA+Pj4gLS0gCj4+ID4+PiAx LjkuMQo+PiA+Pj4KPj4gPj4+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCj4+ID4+PiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4+ID4+PiBJbnRlbC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4+ID4+PiBodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cj4+ID4+Cj4+ID4+IC0tIAo+PiA+PiBKYW5pIE5p a3VsYSwgSW50ZWwgT3BlbiBTb3VyY2UgVGVjaG5vbG9neSBDZW50ZXIKPj4gPgo+PiA+IC0tIAo+ PiA+IEphbmkgTmlrdWxhLCBJbnRlbCBPcGVuIFNvdXJjZSBUZWNobm9sb2d5IENlbnRlcgo+PiAK Pj4gLS0gCj4+IEphbmkgTmlrdWxhLCBJbnRlbCBPcGVuIFNvdXJjZSBUZWNobm9sb2d5IENlbnRl cgo+Cj4KCi0tIApKYW5pIE5pa3VsYSwgSW50ZWwgT3BlbiBTb3VyY2UgVGVjaG5vbG9neSBDZW50 ZXIKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwt Z2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK