From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH 47/89 v11] drm/i915/skl: SKL Watermark Computation Date: Wed, 29 Oct 2014 19:07:58 +0200 Message-ID: <20141029170758.GC10649@intel.com> References: <20140917120751.GL12416@intel.com> <1411470830-3758-1-git-send-email-damien.lespiau@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 ESMTP id 3EFEE6E5EB for ; Wed, 29 Oct 2014 10:09:25 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1411470830-3758-1-git-send-email-damien.lespiau@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Damien Lespiau Cc: intel-gfx@lists.freedesktop.org, Pradeep Bhat List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCBTZXAgMjMsIDIwMTQgYXQgMTI6MTM6NTBQTSArMDEwMCwgRGFtaWVuIExlc3BpYXUg d3JvdGU6Cj4gRnJvbTogUHJhZGVlcCBCaGF0IDxwcmFkZWVwLmJoYXRAaW50ZWwuY29tPgo+IAo+ IFRoaXMgcGF0Y2ggaW1wbGVtZW50cyB0aGUgd2F0ZXJtYXJrIGFsZ29yaXRobSBhbmQgaXRzIG5l Y2Vzc2FyeQo+IGZ1bmN0aW9ucy4gVHdvIGZ1bmN0aW9uIHBvaW50ZXJzIHNrbF91cGRhdGVfd20g YW5kCj4gc2tsX3VwZGF0ZV9zcHJpdGVfd20gYXJlIHByb3ZpZGVkLiBUaGUgc2tsX3VwZGF0ZV93 bSB3aWxsIHVwZGF0ZQo+IHRoZSB3YXRlcm1hcmtzIGZvciB0aGUgY3J0YyBwcm92aWRlZCBhcyBh biBhcmd1bWVudCBhbmQgdGhlbgo+IGNoZWNrcyBmb3IgY2hhbmdlIGluIEREQiBhbGxvY2F0aW9u IGZvciBvdGhlciBhY3RpdmUgcGlwZXMgYW5kCj4gcmVjb21wdXRlcyB0aGUgd2F0ZXJtYXJrcyBm b3IgdGhvc2UgUGlwZXMgYW5kIHBsYW5lcyBhcyB3ZWxsLgo+IEZpbmFsbHkgaXQgZG9lcyB0aGUg cmVnaXN0ZXIgcHJvZ3JhbW1pbmcgZm9yIGFsbCBkaXJ0eSBwaXBlcy4KPiBUaGUgdHJpZ2dlciBv ZiB0aGUgV2F0ZXJtYXJrIGRvdWJsZSBidWZmZXIgcmVnaXN0ZXJzIHdpbGwgaGF2ZQo+IHRvIGJl IG9uY2UgdGhlIHBsYW5lIGNvbmZpZ3VyYXRpb25zIGFyZSBkb25lIGJ5IHRoZSBjYWxsZXIuCj4g Cj4gdjI6IGZpeGVkIHRoZSBkaXZpZGUtYnktMCBlcnJvciBpbiB0aGUgcmVzdWx0cyBjb21wdXRh dGlvbiBmdW5jLgo+ICAgICBBbHNvIHJld29ya2VkIHRoZSBQTEFORV9XTSByZWdpc3RlciB2YWx1 ZXMgY29tcHV0YXRpb24gZnVuYyB0bwo+ICAgICBtYWtlIGl0IG1vcmUgY29tcGFjdC4gSW5jb3Jw b3JhdGVkIGFsbCBvdGhlciByZXZpZXcgY29tbWVudHMKPiAgICAgZnJvbSBEYW1pZW4uCj4gCj4g djM6IENoYW5nZWQgdGhlIHNrbF9jb21wdXRlX3BsYW5lX3dtIGZ1bmN0aW9uIHRvIG5vdyByZXR1 cm4gc3VjY2Vzcwo+ICAgICBvciBmYWlsdXJlLiBBbHNvIHRoZSByZXN1bHQgYmxvY2tzIGFuZCBs aW5lcyBhcmUgY29tcHV0ZWQgaGVyZQo+ICAgICBpbnN0ZWFkIG9mIGluIHNrbF9jb21wdXRlX3dt X3Jlc3VsdHMgZnVuY3Rpb24uCj4gCj4gdjQ6IEFkanVzdCBza2xfZGRiX2FsbG9jX2NoYW5nZWQo KSB0byB0aGUgbmV3IHBsYW5lcy9jdXJzb3Igc3BsaXQKPiAgICAgKERhbWllbikKPiAKPiB2NTog UmV3b3JrZWQgdGhlIGFmZmVjdGVkIGZ1bmN0aW9ucyB0byBpbXBsZW1lbnQgbmV3IHBsYW5lL2N1 cnNvcgo+ICAgICBzcGxpdC4KPiAKPiB2NjogUmV3b3JrIHRoZSBsb2dpYyB0aGF0IHRyaWdnZXJz IHRoZSBEREIgYWxsb2NhdGlvbiBhbmQgV00gY29tcHV0YXRpb24KPiAgICAgb2Ygc2tsX3VwZGF0 ZV9vdGhlcl9waXBlX3dtKCkgdG8gbm90IGRlcGVuZCBvbiBub24tY29tcHV0ZWQgRERCCj4gICAg IHZhbHVlcy4KPiAgICAgQWx3YXlzIGdpdmUgYSB2YWxpZCBjdXJzb3Jfd2lkdGggKGF0IGJvb3Qg aXQncyAwKSB0byBrZWVwIHRoZQo+ICAgICBpbnZhcmlhbnQgdGhhdCB3ZSBjb25zaWRlciB0aGUg Y3Vyc29yIHBsYW5lIGFsd2F5cyBlbmFibGVkLgo+ICAgICBPdGhlcndpc2Ugd2UgZW5kIHVwIGRp dmlkaW5nIGJ5IDAgaW4gc2tsX2NvbXB1dGVfcGxhbmVfd20oKQo+ICAgICAoRGFtaWVuIExlc3Bp YXUpCj4gCj4gdjc6IFNwZWxsIG91dCBhbGxvY2F0aW9uCj4gICAgIHNrbF9kZGJfIGZ1bmN0aW9u cyBzaG91bGQgaGF2ZSB0aGUgZGRiIGFzIGZpcnN0IGFyZ3VtZW50Cj4gICAgIE1ha2UgdGhlIHNr bF9kZGJfYWxsb2NfY2hhbmdlZCgpIHBhcmFtZXRlcnMgY29uc3QKPiAgICAgKERhbWllbikKPiAK PiB2ODogUmViYXNlIG9uIHRvcCBvZiB0aGUgY3J0Yy0+cHJpbWFyeSBjaGFuZ2VzCj4gCj4gdjk6 IFNwbGl0IHRoZSBzdGFnaW5nIHJlc3VsdHMgc3RydWN0dXJlIHRvIG5vdCBleGNlZWQgdGhlIDFL YiBzdGFjawo+ICAgICBhbGxvY2F0aW9uIGluIHNrbF91cGRhdGVfd20oKQo+IAo+IHYxMDogTWFr ZSBza2xfcGlwZV9waXhlbF9yYXRlKCkgdGFrZSBhIHBvaW50ZXIgdG8gdGhlIHBpcGUgY29uZmln Cj4gICAgICBBZGQgYSBjb21tZW50IGFib3V0IG92ZXJmbG93IGNvbnNpZGVyYXRpb25zIGZvciBz a2xfd21fbWV0aG9kMSgpCj4gICAgICBWYXJpb3VzIGFkZGl0aW9ucyBvZiBjb25zdAo+ICAgICAg VmFyaW91cyB1c2Ugb2Ygc2l6ZW9mKHZhcmlhYmxlKSBpbnN0ZWFkIG9mIHNpemVvZih0eXBlKQo+ ICAgICAgVmFyaW91cyBtb3ZlIG9mIHZhcmlhYmxlIGRlZmluaXRvbnMgdG8gYSBuYXJyb3dlciBz Y29wZQo+ICAgICAgWmVybyBpbml0aWFsaXplIHNvbWUgc3RhY2sgYWxsb2NhdGVkIHN0cnVjdHVy ZXMgdG8gbWFrZSBzdXJlIHdlCj4gICAgICBkb24ndCBoYXZlIGdhcmJhZ2UgaW4gY2FzZSB3ZSBk b24ndCB3cml0ZSBhbGwgdGhlIHZhbHVlcwo+ICAgICAgKFZpbGxlKQo+IAo+IHYxMTogUmVtb3Zl IG5vbi1uZWNlc3NhcnkgZGVmYXVsdCBudW1iZXIgb2YgYmxvY2tzL2xpbmVzIHdoZW4gdGhlIHBs YW5lCj4gICAgICBpcyBkaXNhYmxlZCAoVmlsbGUpCj4gCj4gU2lnbmVkLW9mZi1ieTogUHJhZGVl cCBCaGF0IDxwcmFkZWVwLmJoYXRAaW50ZWwuY29tPgo+IFNpZ25lZC1vZmYtYnk6IERhbWllbiBM ZXNwaWF1IDxkYW1pZW4ubGVzcGlhdUBpbnRlbC5jb20+CgpMb29rcyBPSy4gVGhlIGZpeHVwIHRv IG1vdmUgdGhlIHZhbGlkaXR5IGNoZWNrIHN0aWxsIHNlZW1zIHRvIG5lZWQgYQpiaXQgb2YgdHdl YWtpbmcgYnV0IG90aGVyd2lzZSBJIHRoaW5rIGl0J3Mgc2FuZSBlbm91Z2guCgpJIHNlZW0gdG8g cmVjYWxsIHRoYXQgSSB3ZW50IHRocm91Z2ggYWxsIG9mIHRoZSBsaXR0bGUgZGV0YWlscyB0aGUK Zmlyc3QgdGltZSBhcm91bmQsIHNvIEkgZGVjaWRlZCB0byBub3QgZG8gdGhhdCB0aGlzIHRpbWUu IEhvcGVmdWxseQpteSBtZW1vcnkgaXMgY29ycmVjdCA7KQoKUmV2aWV3ZWQtYnk6IFZpbGxlIFN5 cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Cgo+IC0tLQo+ICBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIHwgIDEyICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3BtLmMgfCA0MjIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Kwo+ICAyIGZpbGVzIGNoYW5nZWQsIDQzMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCj4g Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gaW5kZXggMDMwMWE5MS4uY2RlNTEzNiAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IEBAIC0xNzIyLDggKzE3MjIsMTggQEAgc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgewo+ICAJCSAqLwo+ICAJCXVpbnQxNl90IHNrbF9sYXRlbmN5WzhdOwo+ ICAKPiArCQkvKgo+ICsJCSAqIFRoZSBza2xfd21fdmFsdWVzIHN0cnVjdHVyZSBpcyBhIGJpdCB0 b28gYmlnIGZvciBzdGFjawo+ICsJCSAqIGFsbG9jYXRpb24sIHNvIHdlIGtlZXAgdGhlIHN0YWdp bmcgc3RydWN0IHdoZXJlIHdlIHN0b3JlCj4gKwkJICogaW50ZXJtZWRpYXRlIHJlc3VsdHMgaGVy ZSBpbnN0ZWFkLgo+ICsJCSAqLwo+ICsJCXN0cnVjdCBza2xfd21fdmFsdWVzIHNrbF9yZXN1bHRz Owo+ICsKPiAgCQkvKiBjdXJyZW50IGhhcmR3YXJlIHN0YXRlICovCj4gLQkJc3RydWN0IGlsa193 bV92YWx1ZXMgaHc7Cj4gKwkJdW5pb24gewo+ICsJCQlzdHJ1Y3QgaWxrX3dtX3ZhbHVlcyBodzsK PiArCQkJc3RydWN0IHNrbF93bV92YWx1ZXMgc2tsX2h3Owo+ICsJCX07Cj4gIAl9IHdtOwo+ICAK PiAgCXN0cnVjdCBpOTE1X3J1bnRpbWVfcG0gcG07Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCj4g aW5kZXggNzY4ODkwZS4uZTY5YTgzMyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9wbS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwo+IEBA IC0yOTU3LDYgKzI5NTcsNDI2IEBAIHN0YXRpYyBib29sIGlsa19kaXNhYmxlX2xwX3dtKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpCj4gIAlyZXR1cm4gX2lsa19kaXNhYmxlX2xwX3dtKGRldl9wcml2 LCBXTV9ESVJUWV9MUF9BTEwpOwo+ICB9Cj4gIAo+ICtzdGF0aWMgdWludDMyX3Qgc2tsX3BpcGVf cGl4ZWxfcmF0ZShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19jb25maWcgKmNvbmZpZykKPiArewo+ ICsJLyogVE9ETzogVGFrZSBpbnRvIGFjY291bnQgdGhlIHNjYWxlcnMgb25jZSB3ZSBzdXBwb3J0 IHRoZW0gKi8KPiArCXJldHVybiBjb25maWctPmFkanVzdGVkX21vZGUuY3J0Y19jbG9jazsKPiAr fQo+ICsKPiArLyoKPiArICogVGhlIG1heCBsYXRlbmN5IHNob3VsZCBiZSAyNTcgKG1heCB0aGUg cHVuaXQgY2FuIGNvZGUgaXMgMjU1IGFuZCB3ZSBhZGQgMnVzCj4gKyAqIGZvciB0aGUgcmVhZCBs YXRlbmN5KSBhbmQgYnl0ZXNfcGVyX3BpeGVsIHNob3VsZCBhbHdheXMgYmUgPD0gOCwgc28gdGhh dAo+ICsgKiBzaG91bGQgYWxsb3cgcGl4ZWxfcmF0ZSB1cCB0byB+MiBHSHogd2hpY2ggc2VlbXMg c3VmZmljaWVudCBzaW5jZSBtYXgKPiArICogMnhjZGNsayBpcyAxMzUwIE1IeiBhbmQgdGhlIHBp eGVsIHJhdGUgc2hvdWxkIG5ldmVyIGV4Y2VlZCB0aGF0Lgo+ICsqLwo+ICtzdGF0aWMgdWludDMy X3Qgc2tsX3dtX21ldGhvZDEodWludDMyX3QgcGl4ZWxfcmF0ZSwgdWludDhfdCBieXRlc19wZXJf cGl4ZWwsCj4gKwkJCSAgICAgICB1aW50MzJfdCBsYXRlbmN5KQo+ICt7Cj4gKwl1aW50MzJfdCB3 bV9pbnRlcm1lZGlhdGVfdmFsLCByZXQ7Cj4gKwo+ICsJaWYgKGxhdGVuY3kgPT0gMCkKPiArCQly ZXR1cm4gVUlOVF9NQVg7Cj4gKwo+ICsJd21faW50ZXJtZWRpYXRlX3ZhbCA9IGxhdGVuY3kgKiBw aXhlbF9yYXRlICogYnl0ZXNfcGVyX3BpeGVsOwo+ICsJcmV0ID0gRElWX1JPVU5EX1VQKHdtX2lu dGVybWVkaWF0ZV92YWwsIDEwMDApOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0 YXRpYyB1aW50MzJfdCBza2xfd21fbWV0aG9kMih1aW50MzJfdCBwaXhlbF9yYXRlLCB1aW50MzJf dCBwaXBlX2h0b3RhbCwKPiArCQkJICAgICAgIHVpbnQzMl90IGhvcml6X3BpeGVscywgdWludDhf dCBieXRlc19wZXJfcGl4ZWwsCj4gKwkJCSAgICAgICB1aW50MzJfdCBsYXRlbmN5KQo+ICt7Cj4g Kwl1aW50MzJfdCByZXQsIHBsYW5lX2J5dGVzX3Blcl9saW5lLCB3bV9pbnRlcm1lZGlhdGVfdmFs Owo+ICsKPiArCWlmIChsYXRlbmN5ID09IDApCj4gKwkJcmV0dXJuIFVJTlRfTUFYOwo+ICsKPiAr CXBsYW5lX2J5dGVzX3Blcl9saW5lID0gaG9yaXpfcGl4ZWxzICogYnl0ZXNfcGVyX3BpeGVsOwo+ ICsJd21faW50ZXJtZWRpYXRlX3ZhbCA9IGxhdGVuY3kgKiBwaXhlbF9yYXRlOwo+ICsJcmV0ID0g RElWX1JPVU5EX1VQKHdtX2ludGVybWVkaWF0ZV92YWwsIHBpcGVfaHRvdGFsICogMTAwMCkgKgo+ ICsJCQkJcGxhbmVfYnl0ZXNfcGVyX2xpbmU7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgc2tsX2NvbXB1dGVfdHJhbnNpdGlvbl93bShzdHJ1Y3QgZHJtX2NydGMg KmNydGMsCj4gKwkJCQkgIHN0cnVjdCBza2xfcGlwZV93bV9wYXJhbWV0ZXJzICpwYXJhbXMsCj4g KwkJCQkgIHN0cnVjdCBza2xfcGlwZV93bSAqcGlwZV93bSkKPiArewo+ICsJLyoKPiArCSAqIEZv ciBub3cgaXQgaXMgc3VnZ2VzdGVkIHRvIHVzZSB0aGUgTFAwIHdtIHZhbCBvZiBjb3JyZXNwb25k aW5nCj4gKwkgKiBwbGFuZSBhcyB0cmFuc2l0aW9uIHdtIHZhbC4gVGhpcyBpcyBkb25lIHdoaWxl IGNvbXB1dGluZyByZXN1bHRzLgo+ICsJICovCj4gKwlpZiAoIXBhcmFtcy0+YWN0aXZlKQo+ICsJ CXJldHVybjsKPiArfQo+ICsKPiArc3RhdGljIHVpbnQzMl90Cj4gK3NrbF9jb21wdXRlX2xpbmV0 aW1lX3dtKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IHNrbF9waXBlX3dtX3BhcmFtZXRl cnMgKnApCj4gK3sKPiArCWlmICghaW50ZWxfY3J0Y19hY3RpdmUoY3J0YykpCj4gKwkJcmV0dXJu IDA7Cj4gKwo+ICsJcmV0dXJuIERJVl9ST1VORF9VUCg4ICogcC0+cGlwZV9odG90YWwgKiAxMDAw LCBwLT5waXhlbF9yYXRlKTsKPiArCj4gK30KPiArCj4gK3N0YXRpYyBib29sIHNrbF9kZGJfYWxs b2NhdGlvbl9jaGFuZ2VkKGNvbnN0IHN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKm5ld19kZGIs Cj4gKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMpCj4gK3sK PiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBpbnRlbF9jcnRjLT5iYXNlLmRldjsKPiArCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlj b25zdCBzdHJ1Y3Qgc2tsX2RkYl9hbGxvY2F0aW9uICpjdXJfZGRiID0gJmRldl9wcml2LT53bS5z a2xfaHcuZGRiOwo+ICsJZW51bSBwaXBlIHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOwo+ICsKPiAr CWlmIChtZW1jbXAobmV3X2RkYi0+cGxhbmVbcGlwZV0sIGN1cl9kZGItPnBsYW5lW3BpcGVdLAo+ ICsJCSAgIHNpemVvZihuZXdfZGRiLT5wbGFuZVtwaXBlXSkpKQo+ICsJCXJldHVybiB0cnVlOwo+ ICsKPiArCWlmIChtZW1jbXAoJm5ld19kZGItPmN1cnNvcltwaXBlXSwgJmN1cl9kZGItPmN1cnNv cltwaXBlXSwKPiArCQkgICAgc2l6ZW9mKG5ld19kZGItPmN1cnNvcltwaXBlXSkpKQo+ICsJCXJl dHVybiB0cnVlOwo+ICsKPiArCXJldHVybiBmYWxzZTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQg c2tsX2NvbXB1dGVfd21fZ2xvYmFsX3BhcmFtZXRlcnMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwK PiArCQkJCQkgICAgIHN0cnVjdCBpbnRlbF93bV9jb25maWcgKmNvbmZpZykKPiArewo+ICsJc3Ry dWN0IGRybV9jcnRjICpjcnRjOwo+ICsJc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7Cj4gKwo+ICsJ bGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhl YWQpCj4gKwkJY29uZmlnLT5udW1fcGlwZXNfYWN0aXZlICs9IGludGVsX2NydGNfYWN0aXZlKGNy dGMpOwo+ICsKPiArCS8qIEZJWE1FOiBJIGRvbid0IHRoaW5rIHdlIG5lZWQgdGhvc2UgdHdvIGds b2JhbCBwYXJhbWV0ZXJzIG9uIFNLTCAqLwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShwbGFuZSwg JmRldi0+bW9kZV9jb25maWcucGxhbmVfbGlzdCwgaGVhZCkgewo+ICsJCXN0cnVjdCBpbnRlbF9w bGFuZSAqaW50ZWxfcGxhbmUgPSB0b19pbnRlbF9wbGFuZShwbGFuZSk7Cj4gKwo+ICsJCWNvbmZp Zy0+c3ByaXRlc19lbmFibGVkIHw9IGludGVsX3BsYW5lLT53bS5lbmFibGVkOwo+ICsJCWNvbmZp Zy0+c3ByaXRlc19zY2FsZWQgfD0gaW50ZWxfcGxhbmUtPndtLnNjYWxlZDsKPiArCX0KPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgc2tsX2NvbXB1dGVfd21fcGlwZV9wYXJhbWV0ZXJzKHN0cnVjdCBk cm1fY3J0YyAqY3J0YywKPiArCQkJCQkgICBzdHJ1Y3Qgc2tsX3BpcGVfd21fcGFyYW1ldGVycyAq cCkKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKPiArCXN0cnVj dCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKPiArCWVudW0g cGlwZSBwaXBlID0gaW50ZWxfY3J0Yy0+cGlwZTsKPiArCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l Owo+ICsJaW50IGkgPSAxOyAvKiBJbmRleCBmb3Igc3ByaXRlIHBsYW5lcyBzdGFydCAqLwo+ICsK PiArCXAtPmFjdGl2ZSA9IGludGVsX2NydGNfYWN0aXZlKGNydGMpOwo+ICsJaWYgKHAtPmFjdGl2 ZSkgewo+ICsJCXAtPnBpcGVfaHRvdGFsID0gaW50ZWxfY3J0Yy0+Y29uZmlnLmFkanVzdGVkX21v ZGUuY3J0Y19odG90YWw7Cj4gKwkJcC0+cGl4ZWxfcmF0ZSA9IHNrbF9waXBlX3BpeGVsX3JhdGUo JmludGVsX2NydGMtPmNvbmZpZyk7Cj4gKwo+ICsJCS8qCj4gKwkJICogRm9yIG5vdywgYXNzdW1l IHByaW1hcnkgYW5kIGN1cnNvciBwbGFuZXMgYXJlIGFsd2F5cyBlbmFibGVkLgo+ICsJCSAqLwo+ ICsJCXAtPnBsYW5lWzBdLmVuYWJsZWQgPSB0cnVlOwo+ICsJCXAtPnBsYW5lWzBdLmJ5dGVzX3Bl cl9waXhlbCA9Cj4gKwkJCWNydGMtPnByaW1hcnktPmZiLT5iaXRzX3Blcl9waXhlbCAvIDg7Cj4g KwkJcC0+cGxhbmVbMF0uaG9yaXpfcGl4ZWxzID0gaW50ZWxfY3J0Yy0+Y29uZmlnLnBpcGVfc3Jj X3c7Cj4gKwkJcC0+cGxhbmVbMF0udmVydF9waXhlbHMgPSBpbnRlbF9jcnRjLT5jb25maWcucGlw ZV9zcmNfaDsKPiArCj4gKwkJcC0+Y3Vyc29yLmVuYWJsZWQgPSB0cnVlOwo+ICsJCXAtPmN1cnNv ci5ieXRlc19wZXJfcGl4ZWwgPSA0Owo+ICsJCXAtPmN1cnNvci5ob3Jpel9waXhlbHMgPSBpbnRl bF9jcnRjLT5jdXJzb3Jfd2lkdGggPwo+ICsJCQkJCSBpbnRlbF9jcnRjLT5jdXJzb3Jfd2lkdGgg OiA2NDsKPiArCX0KPiArCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBsYW5lLCAmZGV2LT5tb2Rl X2NvbmZpZy5wbGFuZV9saXN0LCBoZWFkKSB7Cj4gKwkJc3RydWN0IGludGVsX3BsYW5lICppbnRl bF9wbGFuZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lKTsKPiArCj4gKwkJaWYgKGludGVsX3BsYW5l LT5waXBlID09IHBpcGUpCj4gKwkJCXAtPnBsYW5lW2krK10gPSBpbnRlbF9wbGFuZS0+d207Cj4g Kwl9Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIHNrbF9jb21wdXRlX3BsYW5lX3dtKHN0cnVjdCBz a2xfcGlwZV93bV9wYXJhbWV0ZXJzICpwLAo+ICsJCQkJICAgc3RydWN0IGludGVsX3BsYW5lX3dt X3BhcmFtZXRlcnMgKnBfcGFyYW1zLAo+ICsJCQkJICAgdWludDE2X3QgbWF4X3BhZ2VfYnVmZl9h bGxvYywKPiArCQkJCSAgIHVpbnQzMl90IG1lbV92YWx1ZSwKPiArCQkJCSAgIHVpbnQxNl90ICpy ZXNfYmxvY2tzLCAvKiBvdXQgKi8KPiArCQkJCSAgIHVpbnQ4X3QgKnJlc19saW5lcyAvKiBvdXQg Ki8pCj4gK3sKPiArCXVpbnQzMl90IG1ldGhvZDEsIG1ldGhvZDIsIHBsYW5lX2J5dGVzX3Blcl9s aW5lOwo+ICsJdWludDMyX3QgcmVzdWx0X2J5dGVzOwo+ICsKPiArCWlmICghcC0+YWN0aXZlIHx8 ICFwX3BhcmFtcy0+ZW5hYmxlZCkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJbWV0aG9kMSA9 IHNrbF93bV9tZXRob2QxKHAtPnBpeGVsX3JhdGUsCj4gKwkJCQkgcF9wYXJhbXMtPmJ5dGVzX3Bl cl9waXhlbCwKPiArCQkJCSBtZW1fdmFsdWUpOwo+ICsJbWV0aG9kMiA9IHNrbF93bV9tZXRob2Qy KHAtPnBpeGVsX3JhdGUsCj4gKwkJCQkgcC0+cGlwZV9odG90YWwsCj4gKwkJCQkgcF9wYXJhbXMt Pmhvcml6X3BpeGVscywKPiArCQkJCSBwX3BhcmFtcy0+Ynl0ZXNfcGVyX3BpeGVsLAo+ICsJCQkJ IG1lbV92YWx1ZSk7Cj4gKwo+ICsJcGxhbmVfYnl0ZXNfcGVyX2xpbmUgPSBwX3BhcmFtcy0+aG9y aXpfcGl4ZWxzICoKPiArCQkJCQlwX3BhcmFtcy0+Ynl0ZXNfcGVyX3BpeGVsOwo+ICsKPiArCS8q IEZvciBub3cgeHRpbGUgYW5kIGxpbmVhciAqLwo+ICsJaWYgKCgobWF4X3BhZ2VfYnVmZl9hbGxv YyAqIDUxMikgLyBwbGFuZV9ieXRlc19wZXJfbGluZSkgPj0gMSkKPiArCQlyZXN1bHRfYnl0ZXMg PSBtaW4obWV0aG9kMSwgbWV0aG9kMik7Cj4gKwllbHNlCj4gKwkJcmVzdWx0X2J5dGVzID0gbWV0 aG9kMTsKPiArCj4gKwkqcmVzX2Jsb2NrcyA9IERJVl9ST1VORF9VUChyZXN1bHRfYnl0ZXMsIDUx MikgKyAxOwo+ICsJKnJlc19saW5lcyA9IERJVl9ST1VORF9VUChyZXN1bHRfYnl0ZXMsIHBsYW5l X2J5dGVzX3Blcl9saW5lKTsKPiArCj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArc3RhdGlj IHZvaWQgc2tsX2NvbXB1dGVfd21fbGV2ZWwoY29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LAo+ICsJCQkJIHN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKmRkYiwKPiArCQkJ CSBzdHJ1Y3Qgc2tsX3BpcGVfd21fcGFyYW1ldGVycyAqcCwKPiArCQkJCSBlbnVtIHBpcGUgcGlw ZSwKPiArCQkJCSBpbnQgbGV2ZWwsCj4gKwkJCQkgaW50IG51bV9wbGFuZXMsCj4gKwkJCQkgc3Ry dWN0IHNrbF93bV9sZXZlbCAqcmVzdWx0KQo+ICt7Cj4gKwl1aW50MTZfdCBsYXRlbmN5ID0gZGV2 X3ByaXYtPndtLnNrbF9sYXRlbmN5W2xldmVsXTsKPiArCXVpbnQxNl90IGRkYl9ibG9ja3M7Cj4g KwlpbnQgaTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BsYW5lczsgaSsrKSB7Cj4gKwkJ ZGRiX2Jsb2NrcyA9IHNrbF9kZGJfZW50cnlfc2l6ZSgmZGRiLT5wbGFuZVtwaXBlXVtpXSk7Cj4g Kwo+ICsJCXJlc3VsdC0+cGxhbmVfZW5baV0gPSBza2xfY29tcHV0ZV9wbGFuZV93bShwLCAmcC0+ cGxhbmVbaV0sCj4gKwkJCQkJCWRkYl9ibG9ja3MsCj4gKwkJCQkJCWxhdGVuY3ksCj4gKwkJCQkJ CSZyZXN1bHQtPnBsYW5lX3Jlc19iW2ldLAo+ICsJCQkJCQkmcmVzdWx0LT5wbGFuZV9yZXNfbFtp XSk7Cj4gKwl9Cj4gKwo+ICsJZGRiX2Jsb2NrcyA9IHNrbF9kZGJfZW50cnlfc2l6ZSgmZGRiLT5j dXJzb3JbcGlwZV0pOwo+ICsJcmVzdWx0LT5jdXJzb3JfZW4gPSBza2xfY29tcHV0ZV9wbGFuZV93 bShwLCAmcC0+Y3Vyc29yLCBkZGJfYmxvY2tzLAo+ICsJCQkJCQkgbGF0ZW5jeSwgJnJlc3VsdC0+ Y3Vyc29yX3Jlc19iLAo+ICsJCQkJCQkgJnJlc3VsdC0+Y3Vyc29yX3Jlc19sKTsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgc2tsX2NvbXB1dGVfcGlwZV93bShzdHJ1Y3QgZHJtX2NydGMgKmNydGMs Cj4gKwkJCQlzdHJ1Y3Qgc2tsX2RkYl9hbGxvY2F0aW9uICpkZGIsCj4gKwkJCQlzdHJ1Y3Qgc2ts X3BpcGVfd21fcGFyYW1ldGVycyAqcGFyYW1zLAo+ICsJCQkJc3RydWN0IHNrbF9waXBlX3dtICpw aXBlX3dtKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2Owo+ICsJ Y29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0 ZTsKPiArCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRj KTsKPiArCWludCBsZXZlbCwgbWF4X2xldmVsID0gaWxrX3dtX21heF9sZXZlbChkZXYpOwo+ICsK PiArCWZvciAobGV2ZWwgPSAwOyBsZXZlbCA8PSBtYXhfbGV2ZWw7IGxldmVsKyspIHsKPiArCQlz a2xfY29tcHV0ZV93bV9sZXZlbChkZXZfcHJpdiwgZGRiLCBwYXJhbXMsIGludGVsX2NydGMtPnBp cGUsCj4gKwkJCQkgICAgIGxldmVsLCBpbnRlbF9udW1fcGxhbmVzKGludGVsX2NydGMpLAo+ICsJ CQkJICAgICAmcGlwZV93bS0+d21bbGV2ZWxdKTsKPiArCX0KPiArCXBpcGVfd20tPmxpbmV0aW1l ID0gc2tsX2NvbXB1dGVfbGluZXRpbWVfd20oY3J0YywgcGFyYW1zKTsKPiArCj4gKwlza2xfY29t cHV0ZV90cmFuc2l0aW9uX3dtKGNydGMsIHBhcmFtcywgcGlwZV93bSk7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIHNrbF9jb21wdXRlX3dtX3Jlc3VsdHMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwK PiArCQkJCSAgIHN0cnVjdCBza2xfcGlwZV93bV9wYXJhbWV0ZXJzICpwLAo+ICsJCQkJICAgc3Ry dWN0IHNrbF9waXBlX3dtICpwX3dtLAo+ICsJCQkJICAgc3RydWN0IHNrbF93bV92YWx1ZXMgKnIs Cj4gKwkJCQkgICBzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YykKPiArewo+ICsJaW50IGxl dmVsLCBtYXhfbGV2ZWwgPSBpbGtfd21fbWF4X2xldmVsKGRldik7Cj4gKwllbnVtIHBpcGUgcGlw ZSA9IGludGVsX2NydGMtPnBpcGU7Cj4gKwo+ICsJZm9yIChsZXZlbCA9IDA7IGxldmVsIDw9IG1h eF9sZXZlbDsgbGV2ZWwrKykgewo+ICsJCXVpbnQxNl90IGRkYl9ibG9ja3M7Cj4gKwkJdWludDMy X3QgdGVtcDsKPiArCQlpbnQgaTsKPiArCj4gKwkJZm9yIChpID0gMDsgaSA8IGludGVsX251bV9w bGFuZXMoaW50ZWxfY3J0Yyk7IGkrKykgewo+ICsJCQl0ZW1wID0gMDsKPiArCQkJZGRiX2Jsb2Nr cyA9IHNrbF9kZGJfZW50cnlfc2l6ZSgmci0+ZGRiLnBsYW5lW3BpcGVdW2ldKTsKPiArCj4gKwkJ CWlmICgocF93bS0+d21bbGV2ZWxdLnBsYW5lX3Jlc19iW2ldID4gZGRiX2Jsb2NrcykgfHwKPiAr CQkJCShwX3dtLT53bVtsZXZlbF0ucGxhbmVfcmVzX2xbaV0gPiAzMSkpCj4gKwkJCQlwX3dtLT53 bVtsZXZlbF0ucGxhbmVfZW5baV0gPSBmYWxzZTsKPiArCj4gKwkJCXRlbXAgfD0gcF93bS0+d21b bGV2ZWxdLnBsYW5lX3Jlc19sW2ldIDw8Cj4gKwkJCQkJUExBTkVfV01fTElORVNfU0hJRlQ7Cj4g KwkJCXRlbXAgfD0gcF93bS0+d21bbGV2ZWxdLnBsYW5lX3Jlc19iW2ldOwo+ICsJCQlpZiAocF93 bS0+d21bbGV2ZWxdLnBsYW5lX2VuW2ldKQo+ICsJCQkJdGVtcCB8PSBQTEFORV9XTV9FTjsKPiAr Cj4gKwkJCXItPnBsYW5lW3BpcGVdW2ldW2xldmVsXSA9IHRlbXA7Cj4gKwkJCS8qIFVzZSB0aGUg TFAwIFdNIHZhbHVlIGZvciB0cmFuc2l0aW9uIFdNIGZvciBub3cuICovCj4gKwkJCWlmIChsZXZl bCA9PSAwKQo+ICsJCQkJci0+cGxhbmVfdHJhbnNbcGlwZV1baV0gPSB0ZW1wOwo+ICsJCX0KPiAr Cj4gKwkJdGVtcCA9IDA7Cj4gKwkJZGRiX2Jsb2NrcyA9IHNrbF9kZGJfZW50cnlfc2l6ZSgmci0+ ZGRiLmN1cnNvcltwaXBlXSk7Cj4gKwo+ICsJCWlmICgocF93bS0+d21bbGV2ZWxdLmN1cnNvcl9y ZXNfYiA+IGRkYl9ibG9ja3MpIHx8Cj4gKwkJCShwX3dtLT53bVtsZXZlbF0uY3Vyc29yX3Jlc19s ID4gMzEpKQo+ICsJCQlwX3dtLT53bVtsZXZlbF0uY3Vyc29yX2VuID0gZmFsc2U7Cj4gKwo+ICsJ CXRlbXAgfD0gcF93bS0+d21bbGV2ZWxdLmN1cnNvcl9yZXNfbCA8PCBQTEFORV9XTV9MSU5FU19T SElGVDsKPiArCQl0ZW1wIHw9IHBfd20tPndtW2xldmVsXS5jdXJzb3JfcmVzX2I7Cj4gKwo+ICsJ CWlmIChwX3dtLT53bVtsZXZlbF0uY3Vyc29yX2VuKQo+ICsJCQl0ZW1wIHw9IFBMQU5FX1dNX0VO Owo+ICsKPiArCQlyLT5jdXJzb3JbcGlwZV1bbGV2ZWxdID0gdGVtcDsKPiArCQkvKiBVc2UgdGhl IExQMCBXTSB2YWx1ZSBmb3IgdHJhbnNpdGlvbiBXTSBmb3Igbm93LiAqLwo+ICsJCWlmIChsZXZl bCA9PSAwKQo+ICsJCQlyLT5jdXJzb3JfdHJhbnNbcGlwZV0gPSB0ZW1wOwo+ICsKPiArCX0KPiAr Cj4gKwlyLT53bV9saW5ldGltZVtwaXBlXSA9IHBfd20tPmxpbmV0aW1lOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBza2xfd3JpdGVfd21fdmFsdWVzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwKPiArCQkJCWNvbnN0IHN0cnVjdCBza2xfd21fdmFsdWVzICpuZXcpCj4gK3sKPiAr CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2Owo+ICsJc3RydWN0IGludGVs X2NydGMgKmNydGM7Cj4gKwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2Rl X2NvbmZpZy5jcnRjX2xpc3QsIGJhc2UuaGVhZCkgewo+ICsJCWludCBpLCBsZXZlbCwgbWF4X2xl dmVsID0gaWxrX3dtX21heF9sZXZlbChkZXYpOwo+ICsJCWVudW0gcGlwZSBwaXBlID0gY3J0Yy0+ cGlwZTsKPiArCj4gKwkJaWYgKG5ldy0+ZGlydHlbcGlwZV0pIHsKPiArCQkJSTkxNV9XUklURShQ SVBFX1dNX0xJTkVUSU1FKHBpcGUpLAo+ICsJCQkJCW5ldy0+d21fbGluZXRpbWVbcGlwZV0pOwo+ ICsKPiArCQkJZm9yIChsZXZlbCA9IDA7IGxldmVsIDw9IG1heF9sZXZlbDsgbGV2ZWwrKykgewo+ ICsJCQkJZm9yIChpID0gMDsgaSA8IGludGVsX251bV9wbGFuZXMoY3J0Yyk7IGkrKykKPiArCQkJ CQlJOTE1X1dSSVRFKFBMQU5FX1dNKHBpcGUsIGksIGxldmVsKSwKPiArCQkJCQkJbmV3LT5wbGFu ZVtwaXBlXVtpXVtsZXZlbF0pOwo+ICsJCQkJSTkxNV9XUklURShDVVJfV00ocGlwZSwgbGV2ZWwp LAo+ICsJCQkJCW5ldy0+Y3Vyc29yW3BpcGVdW2xldmVsXSk7Cj4gKwkJCX0KPiArCQkJZm9yIChp ID0gMDsgaSA8IGludGVsX251bV9wbGFuZXMoY3J0Yyk7IGkrKykKPiArCQkJCUk5MTVfV1JJVEUo UExBTkVfV01fVFJBTlMocGlwZSwgaSksCj4gKwkJCQkJCW5ldy0+cGxhbmVfdHJhbnNbcGlwZV1b aV0pOwo+ICsJCQlJOTE1X1dSSVRFKENVUl9XTV9UUkFOUyhwaXBlKSwgbmV3LT5jdXJzb3JfdHJh bnNbcGlwZV0pOwo+ICsJCX0KPiArCX0KPiArCj4gKwlkZXZfcHJpdi0+d20uc2tsX2h3ID0gKm5l dzsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgc2tsX3VwZGF0ZV9waXBlX3dtKHN0cnVjdCBkcm1f Y3J0YyAqY3J0YywKPiArCQkJICAgICAgIHN0cnVjdCBza2xfcGlwZV93bV9wYXJhbWV0ZXJzICpw YXJhbXMsCj4gKwkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfd21fY29uZmlnICpjb25maWcsCj4gKwkJ CSAgICAgICBzdHJ1Y3Qgc2tsX2RkYl9hbGxvY2F0aW9uICpkZGIsIC8qIG91dCAqLwo+ICsJCQkg ICAgICAgc3RydWN0IHNrbF9waXBlX3dtICpwaXBlX3dtIC8qIG91dCAqLykKPiArewo+ICsJc3Ry dWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwo+ICsKPiAr CXNrbF9jb21wdXRlX3dtX3BpcGVfcGFyYW1ldGVycyhjcnRjLCBwYXJhbXMpOwo+ICsJc2tsX2Nv bXB1dGVfcGlwZV93bShjcnRjLCBkZGIsIHBhcmFtcywgcGlwZV93bSk7Cj4gKwo+ICsJaWYgKCFt ZW1jbXAoJmludGVsX2NydGMtPndtLnNrbF9hY3RpdmUsIHBpcGVfd20sIHNpemVvZigqcGlwZV93 bSkpKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwlpbnRlbF9jcnRjLT53bS5za2xfYWN0aXZl ID0gKnBpcGVfd207Cj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc2ts X3VwZGF0ZV9vdGhlcl9waXBlX3dtKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJCQkgICAg IHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiArCQkJCSAgICAgc3RydWN0IGludGVsX3dtX2NvbmZp ZyAqY29uZmlnLAo+ICsJCQkJICAgICBzdHJ1Y3Qgc2tsX3dtX3ZhbHVlcyAqcikKPiArewo+ICsJ c3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGM7Cj4gKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqdGhp c19jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKPiArCj4gKwkvKgo+ICsJICogSWYgdGhlIFdN IHVwZGF0ZSBoYXNuJ3QgY2hhbmdlZCB0aGUgYWxsb2NhdGlvbiBmb3IgdGhpc19jcnRjICh0aGUK PiArCSAqIGNydGMgd2UgYXJlIGN1cnJlbnRseSBjb21wdXRpbmcgdGhlIG5ldyBXTSB2YWx1ZXMg Zm9yKSwgb3RoZXIKPiArCSAqIGVuYWJsZWQgY3J0Y3Mgd2lsbCBrZWVwIHRoZSBzYW1lIGFsbG9j YXRpb24gYW5kIHdlIGRvbid0IG5lZWQgdG8KPiArCSAqIHJlY29tcHV0ZSBhbnl0aGluZyBmb3Ig dGhlbS4KPiArCSAqLwo+ICsJaWYgKCFza2xfZGRiX2FsbG9jYXRpb25fY2hhbmdlZCgmci0+ZGRi LCB0aGlzX2NydGMpKQo+ICsJCXJldHVybjsKPiArCj4gKwkvKgo+ICsJICogT3RoZXJ3aXNlLCBi ZWNhdXNlIG9mIHRoaXNfY3J0YyBiZWluZyBmcmVzaGx5IGVuYWJsZWQvZGlzYWJsZWQsIHRoZQo+ ICsJICogb3RoZXIgYWN0aXZlIHBpcGVzIG5lZWQgbmV3IEREQiBhbGxvY2F0aW9uIGFuZCBXTSB2 YWx1ZXMuCj4gKwkgKi8KPiArCWxpc3RfZm9yX2VhY2hfZW50cnkoaW50ZWxfY3J0YywgJmRldi0+ bW9kZV9jb25maWcuY3J0Y19saXN0LAo+ICsJCQkJYmFzZS5oZWFkKSB7Cj4gKwkJc3RydWN0IHNr bF9waXBlX3dtX3BhcmFtZXRlcnMgcGFyYW1zID0ge307Cj4gKwkJc3RydWN0IHNrbF9waXBlX3dt IHBpcGVfd20gPSB7fTsKPiArCQlib29sIHdtX2NoYW5nZWQ7Cj4gKwo+ICsJCWlmICh0aGlzX2Ny dGMtPnBpcGUgPT0gaW50ZWxfY3J0Yy0+cGlwZSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCWlm ICghaW50ZWxfY3J0Yy0+YWN0aXZlKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJd21fY2hhbmdl ZCA9IHNrbF91cGRhdGVfcGlwZV93bSgmaW50ZWxfY3J0Yy0+YmFzZSwKPiArCQkJCQkJJnBhcmFt cywgY29uZmlnLAo+ICsJCQkJCQkmci0+ZGRiLCAmcGlwZV93bSk7Cj4gKwo+ICsJCS8qCj4gKwkJ ICogSWYgd2UgZW5kIHVwIHJlLWNvbXB1dGluZyB0aGUgb3RoZXIgcGlwZSBXTSB2YWx1ZXMsIGl0 J3MKPiArCQkgKiBiZWNhdXNlIGl0IHdhcyByZWFsbHkgbmVlZGVkLCBzbyB3ZSBleHBlY3QgdGhl IFdNIHZhbHVlcyB0bwo+ICsJCSAqIGJlIGRpZmZlcmVudC4KPiArCQkgKi8KPiArCQlXQVJOX09O KCF3bV9jaGFuZ2VkKTsKPiArCj4gKwkJc2tsX2NvbXB1dGVfd21fcmVzdWx0cyhkZXYsICZwYXJh bXMsICZwaXBlX3dtLCByLCBpbnRlbF9jcnRjKTsKPiArCQlyLT5kaXJ0eVtpbnRlbF9jcnRjLT5w aXBlXSA9IHRydWU7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHNrbF91cGRhdGVfd20o c3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxf Y3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g Y3J0Yy0+ZGV2Owo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5k ZXZfcHJpdmF0ZTsKPiArCXN0cnVjdCBza2xfcGlwZV93bV9wYXJhbWV0ZXJzIHBhcmFtcyA9IHt9 Owo+ICsJc3RydWN0IHNrbF93bV92YWx1ZXMgKnJlc3VsdHMgPSAmZGV2X3ByaXYtPndtLnNrbF9y ZXN1bHRzOwo+ICsJc3RydWN0IHNrbF9waXBlX3dtIHBpcGVfd20gPSB7fTsKPiArCXN0cnVjdCBp bnRlbF93bV9jb25maWcgY29uZmlnID0ge307Cj4gKwo+ICsJbWVtc2V0KHJlc3VsdHMsIDAsIHNp emVvZigqcmVzdWx0cykpOwo+ICsKPiArCXNrbF9jb21wdXRlX3dtX2dsb2JhbF9wYXJhbWV0ZXJz KGRldiwgJmNvbmZpZyk7Cj4gKwo+ICsJaWYgKCFza2xfdXBkYXRlX3BpcGVfd20oY3J0YywgJnBh cmFtcywgJmNvbmZpZywKPiArCQkJCSZyZXN1bHRzLT5kZGIsICZwaXBlX3dtKSkKPiArCQlyZXR1 cm47Cj4gKwo+ICsJc2tsX2NvbXB1dGVfd21fcmVzdWx0cyhkZXYsICZwYXJhbXMsICZwaXBlX3dt LCByZXN1bHRzLCBpbnRlbF9jcnRjKTsKPiArCXJlc3VsdHMtPmRpcnR5W2ludGVsX2NydGMtPnBp cGVdID0gdHJ1ZTsKPiArCj4gKwlza2xfdXBkYXRlX290aGVyX3BpcGVfd20oZGV2LCBjcnRjLCAm Y29uZmlnLCByZXN1bHRzKTsKPiArCXNrbF93cml0ZV93bV92YWx1ZXMoZGV2X3ByaXYsIHJlc3Vs dHMpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICtza2xfdXBkYXRlX3Nwcml0ZV93bShzdHJ1 Y3QgZHJtX3BsYW5lICpwbGFuZSwgc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICsJCSAgICAgdWlu dDMyX3Qgc3ByaXRlX3dpZHRoLCB1aW50MzJfdCBzcHJpdGVfaGVpZ2h0LAo+ICsJCSAgICAgaW50 IHBpeGVsX3NpemUsIGJvb2wgZW5hYmxlZCwgYm9vbCBzY2FsZWQpCj4gK3sKPiArCXN0cnVjdCBp bnRlbF9wbGFuZSAqaW50ZWxfcGxhbmUgPSB0b19pbnRlbF9wbGFuZShwbGFuZSk7Cj4gKwo+ICsJ aW50ZWxfcGxhbmUtPndtLmVuYWJsZWQgPSBlbmFibGVkOwo+ICsJaW50ZWxfcGxhbmUtPndtLnNj YWxlZCA9IHNjYWxlZDsKPiArCWludGVsX3BsYW5lLT53bS5ob3Jpel9waXhlbHMgPSBzcHJpdGVf d2lkdGg7Cj4gKwlpbnRlbF9wbGFuZS0+d20udmVydF9waXhlbHMgPSBzcHJpdGVfaGVpZ2h0Owo+ ICsJaW50ZWxfcGxhbmUtPndtLmJ5dGVzX3Blcl9waXhlbCA9IHBpeGVsX3NpemU7Cj4gKwo+ICsJ c2tsX3VwZGF0ZV93bShjcnRjKTsKPiArfQo+ICsKPiAgc3RhdGljIHZvaWQgaWxrX3VwZGF0ZV93 bShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gIHsKPiAgCXN0cnVjdCBpbnRlbF9jcnRjICppbnRl bF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKPiBAQCAtNzQ4Niw2ICs3OTA2LDggQEAgdm9p ZCBpbnRlbF9pbml0X3BtKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gIAkJc2tsX3NldHVwX3dt X2xhdGVuY3koZGV2KTsKPiAgCj4gIAkJZGV2X3ByaXYtPmRpc3BsYXkuaW5pdF9jbG9ja19nYXRp bmcgPSBnZW45X2luaXRfY2xvY2tfZ2F0aW5nOwo+ICsJCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0 ZV93bSA9IHNrbF91cGRhdGVfd207Cj4gKwkJZGV2X3ByaXYtPmRpc3BsYXkudXBkYXRlX3Nwcml0 ZV93bSA9IHNrbF91cGRhdGVfc3ByaXRlX3dtOwo+ICAJfSBlbHNlIGlmIChIQVNfUENIX1NQTElU KGRldikpIHsKPiAgCQlpbGtfc2V0dXBfd21fbGF0ZW5jeShkZXYpOwo+ICAKPiAtLSAKPiAxLjgu My4xCgotLSAKVmlsbGUgU3lyasOkbMOkCkludGVsIE9UQwpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdm eEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=