From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH 47/89] drm/i915/skl: SKL Watermark Computation Date: Wed, 17 Sep 2014 15:07:51 +0300 Message-ID: <20140917120751.GL12416@intel.com> References: <1409830075-11139-1-git-send-email-damien.lespiau@intel.com> <1409830075-11139-48-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 mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id 54DB8899C7 for ; Wed, 17 Sep 2014 05:07:56 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1409830075-11139-48-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 T24gVGh1LCBTZXAgMDQsIDIwMTQgYXQgMTI6Mjc6MTNQTSArMDEwMCwgRGFtaWVuIExlc3BpYXUg 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+IFNpZ25lZC1v ZmYtYnk6IFByYWRlZXAgQmhhdCA8cHJhZGVlcC5iaGF0QGludGVsLmNvbT4KPiBTaWduZWQtb2Zm LWJ5OiBEYW1pZW4gTGVzcGlhdSA8ZGFtaWVuLmxlc3BpYXVAaW50ZWwuY29tPgo+IAo+IGRybS9p OTE1L3NrbDogRG9uJ3QgYWxsb2NhdGUgYXMgbXVjaCBvbiB0aGUgc3RhY2sgaW4gc2tsX3VwZGF0 ZV93bSgpCj4gCj4gU3RhY2sgc3BhY2UgY2FuIGJlIHNjYXJjZSBhbmQgYSBjb21waWxlciBjaGVj ayBoYXMgYmVlbiBhZGRlZCB0byB3YXJuIGlmIHRoZQo+IHBlci1mdW5jdGlvbiBzdGFjayBhbGxv Y2F0aW9uIGlzIGFib3ZlIDFLQi4KPiAKPiBXZSB3ZSB3ZXJlIGhpdHRpbmcgdGhhdCB3YXJuaW5n IGluIHNrbF91cGRhdGVfd20oKSwgc28gbW92ZSB0aGUgYmlnCj4gcmVzdWx0cyBhcnJheSBpbiBk ZXZfcHJpdiBpbnN0ZWFkLgo+IAo+IEZvciByZWZlcmVuY2UsIGhlcmUncyB0aGUgY29tcGlsZXIg d2FybmluZyBiZWZvcmUgdGhpcyBwYXRjaDoKPiAKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3BtLmM6IEluIGZ1bmN0aW9uIOKAmHNrbF91cGRhdGVfd23igJk6Cj4gICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9wbS5jOjM2MTg6MTogd2FybmluZzogdGhlIGZyYW1lIHNpemUgb2Yg MTI5NiBieXRlcwo+ICAgICBpcyBsYXJnZXIgdGhhbiAxMDI0IGJ5dGVzIFstV2ZyYW1lLWxhcmdl ci10aGFuPV0KPiAKPiBTaWduZWQtb2ZmLWJ5OiBEYW1pZW4gTGVzcGlhdSA8ZGFtaWVuLmxlc3Bp YXVAaW50ZWwuY29tPgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIHwg IDEyICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMgfCA0MjMgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAyIGZpbGVzIGNoYW5nZWQsIDQzNCBp bnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4g aW5kZXggZGUyNzhhNS4uOWIwZTM5OCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2Rydi5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IEBA IC0xNzA5LDggKzE3MDksMTggQEAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgewo+ICAJCSAqLwo+ ICAJCXVpbnQxNl90IHNrbF9sYXRlbmN5WzhdOwo+ICAKPiArCQkvKgo+ICsJCSAqIFRoZSBza2xf d21fdmFsdWVzIHN0cnVjdHVyZSBpcyBhIGJpdCB0b28gYmlnIGZvciBzdGFjawo+ICsJCSAqIGFs bG9jYXRpb24sIHNvIHdlIGtlZXAgdGhlIHN0YWdpbmcgc3RydWN0IHdoZXJlIHdlIHN0b3JlCj4g KwkJICogaW50ZXJtZWRpYXRlIHJlc3VsdHMgaGVyZSBpbnN0ZWFkLgo+ICsJCSAqLwo+ICsJCXN0 cnVjdCBza2xfd21fdmFsdWVzIHNrbF9yZXN1bHRzOwo+ICsKPiAgCQkvKiBjdXJyZW50IGhhcmR3 YXJlIHN0YXRlICovCj4gLQkJc3RydWN0IGlsa193bV92YWx1ZXMgaHc7Cj4gKwkJdW5pb24gewo+ ICsJCQlzdHJ1Y3QgaWxrX3dtX3ZhbHVlcyBodzsKPiArCQkJc3RydWN0IHNrbF93bV92YWx1ZXMg c2tsX2h3Owo+ICsJCX07Cj4gIAl9IHdtOwo+ICAKPiAgCXN0cnVjdCBpOTE1X3J1bnRpbWVfcG0g cG07Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCj4gaW5kZXggMjUwM2FiOS4uNGVlOTBiNiAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwo+IEBAIC0yOTM3LDYgKzI5MzcsNDI3IEBAIHN0YXRp YyBib29sIGlsa19kaXNhYmxlX2xwX3dtKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gIAlyZXR1 cm4gX2lsa19kaXNhYmxlX2xwX3dtKGRldl9wcml2LCBXTV9ESVJUWV9MUF9BTEwpOwo+ICB9Cj4g IAo+ICtzdGF0aWMgdWludDMyX3Qgc2tsX3BpcGVfcGl4ZWxfcmF0ZShzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LAo+ICsJCQkJICAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiArewo+ICsJc3RydWN0 IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwo+ICsJdWludDMy X3QgcGl4ZWxfcmF0ZTsKPiArCj4gKwlwaXhlbF9yYXRlID0gaW50ZWxfY3J0Yy0+Y29uZmlnLmFk anVzdGVkX21vZGUuY3J0Y19jbG9jazsKPiArCj4gKwlyZXR1cm4gcGl4ZWxfcmF0ZTsKPiArfQoK SSBjaGFuZ2VkIHRoZSBpbGsgdmVyc2lvbiB0byB0YWtlIGp1c3QgdGhlIHBpcGUgY29uZmlnIGFz IGEgcGFyYW1ldGVyLgpUaGlzIHNob3VsZCBiZSBjaGFuZ2VkIHRvIGRvIHRoZSBzYW1lLiBJJ20g bm90IGVudGlyZWx5IHN1cmUgaXQgbWFrZXMKc2Vuc2UgdG8gaGF2ZSB0aGlzIGZ1bmN0aW9uIGFy b3VuZCB1bnRpbCBwaXBlIHNjYWxpbmcgaXMgaW1wbGVtZW50ZWQsCmJ1dCBJIGd1ZXNzIGl0IHNl cnZlcyBhcyBhIGRlY2VudCByZW1pbmRlciB0aGF0IHNvbWV0aGluZyBuZWVkcyB0byBiZQpkb25l IGhlcmUuCgo+ICsKPiArc3RhdGljIHVpbnQzMl90IHNrbF93bV9tZXRob2QxKHVpbnQzMl90IHBp eGVsX3JhdGUsIHVpbnQ4X3QgYnl0ZXNfcGVyX3BpeGVsLAo+ICsJCQkgICAgICAgdWludDMyX3Qg bGF0ZW5jeSkKPiArewo+ICsJdWludDMyX3Qgd21faW50ZXJtZWRpYXRlX3ZhbCwgcmV0Owo+ICsK PiArCWlmIChsYXRlbmN5ID09IDApCj4gKwkJcmV0dXJuIFVJTlRfTUFYOwo+ICsKPiArCXdtX2lu dGVybWVkaWF0ZV92YWwgPSBsYXRlbmN5ICogcGl4ZWxfcmF0ZSAqIGJ5dGVzX3Blcl9waXhlbDsK Ckkgd2FzIGEgYml0IHdvcnJpZWQgaWYgd2UgaGF2ZSBlbm91Z2ggYml0cyBoZXJlLCBidXQgbWF4 IGxhdGVuY3kgc2hvdWxkCmJlIDB4ZmYgYW5kIGJ5dGVzX3Blcl9waXhlbCBzaG91bGQgYWx3YXlz IGJlIDw9OCwgc28gdGhhdCBzaG91bGQgYWxsb3cKcGl4ZWxfcmF0ZSB1cCB0byB+MiBHSHogd2hp Y2ggc2VlbXMgc3VmZmljaWVudCBzaW5jZSBtYXggMnhjZGNsayBpcwoxMzUwIE1IeiBhbmQgdGhl IHBpeGVsIHJhdGUgc2hvdWxkIG5ldmVyIGV4Y2VlZCB0aGF0LiBOb3QgdGhhdCB3ZSBoYXZlCnN1 Y2ggY2hlY2tzIGFueXdoZXJlIGF0IHRoZSBtb21lbnQsIGJ1dCB3ZSBzaG91bGQgZXZlbnR1YWxs eSBhZGQgdGhlbS4KCj4gKwlyZXQgPSBESVZfUk9VTkRfVVAod21faW50ZXJtZWRpYXRlX3ZhbCwg MTAwMCk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHVpbnQzMl90IHNr bF93bV9tZXRob2QyKHVpbnQzMl90IHBpeGVsX3JhdGUsIHVpbnQzMl90IHBpcGVfaHRvdGFsLAo+ ICsJCQkgICAgICAgdWludDMyX3QgaG9yaXpfcGl4ZWxzLCB1aW50OF90IGJ5dGVzX3Blcl9waXhl bCwKPiArCQkJICAgICAgIHVpbnQzMl90IGxhdGVuY3kpCj4gK3sKPiArCXVpbnQzMl90IHJldCwg cGxhbmVfYnl0ZXNfcGVyX2xpbmUsIHdtX2ludGVybWVkaWF0ZV92YWw7Cj4gKwo+ICsJaWYgKGxh dGVuY3kgPT0gMCkKPiArCQlyZXR1cm4gVUlOVF9NQVg7Cj4gKwo+ICsJcGxhbmVfYnl0ZXNfcGVy X2xpbmUgPSBob3Jpel9waXhlbHMgKiBieXRlc19wZXJfcGl4ZWw7Cj4gKwl3bV9pbnRlcm1lZGlh dGVfdmFsID0gbGF0ZW5jeSAqIHBpeGVsX3JhdGU7Cj4gKwlyZXQgPSBESVZfUk9VTkRfVVAod21f aW50ZXJtZWRpYXRlX3ZhbCwgcGlwZV9odG90YWwgKiAxMDAwKSAqCj4gKwkJCQlwbGFuZV9ieXRl c19wZXJfbGluZTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBz a2xfY29tcHV0ZV90cmFuc2l0aW9uX3dtKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiArCQkJCSAg c3RydWN0IHNrbF9waXBlX3dtX3BhcmFtZXRlcnMgKnBhcmFtcywKPiArCQkJCSAgc3RydWN0IHNr bF9waXBlX3dtICpwaXBlX3dtKQo+ICt7Cj4gKwkvKgo+ICsJICogRm9yIG5vdyBpdCBpcyBzdWdn ZXN0ZWQgdG8gdXNlIHRoZSBMUDAgd20gdmFsIG9mIGNvcnJlc3BvbmRpbmcKPiArCSAqIHBsYW5l IGFzIHRyYW5zaXRpb24gd20gdmFsLiBUaGlzIGlzIGRvbmUgd2hpbGUgY29tcHV0aW5nIHJlc3Vs dHMuCj4gKwkgKi8KPiArCWlmICghcGFyYW1zLT5hY3RpdmUpCj4gKwkJcmV0dXJuOwo+ICt9CgpT ZWVtcyBsaWtlIGEgcmF0aGVyIHBvaW50bGVzcyBmdW5jdGlvbi4KCj4gKwo+ICtzdGF0aWMgdWlu dDMyX3QKPiArc2tsX2NvbXB1dGVfbGluZXRpbWVfd20oc3RydWN0IGRybV9jcnRjICpjcnRjLCBz dHJ1Y3Qgc2tsX3BpcGVfd21fcGFyYW1ldGVycyAqcCkKPiArewo+ICsJaWYgKCFpbnRlbF9jcnRj X2FjdGl2ZShjcnRjKSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlyZXR1cm4gRElWX1JPVU5EX1VQ KDggKiBwLT5waXBlX2h0b3RhbCAqIDEwMDAsIHAtPnBpeGVsX3JhdGUpOwo+ICsKPiArfQo+ICsK PiArc3RhdGljIGJvb2wgc2tsX2RkYl9hbGxvY2F0aW9uX2NoYW5nZWQoY29uc3Qgc3RydWN0IHNr bF9kZGJfYWxsb2NhdGlvbiAqbmV3X2RkYiwKPiArCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW50 ZWxfY3J0YyAqaW50ZWxfY3J0YykKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGlu dGVsX2NydGMtPmJhc2UuZGV2Owo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiArCXN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKmN1cl9k ZGIgPSAmZGV2X3ByaXYtPndtLnNrbF9ody5kZGI7Cgpjb25zdAoKPiArCWVudW0gcGlwZSBwaXBl ID0gaW50ZWxfY3J0Yy0+cGlwZTsKPiArCXNpemVfdCBzaXplOwo+ICsKPiArCXNpemUgPSBBUlJB WV9TSVpFKG5ld19kZGItPnBsYW5lW3BpcGVdKSAqIHNpemVvZihzdHJ1Y3Qgc2tsX2RkYl9lbnRy eSk7CgpzaXplb2YobmV3X2RkYi0+cGxhbmVbcGlwZV0pCgo+ICsJaWYgKG1lbWNtcChuZXdfZGRi LT5wbGFuZVtwaXBlXSwgY3VyX2RkYi0+cGxhbmVbcGlwZV0sIHNpemUpKQo+ICsJCXJldHVybiB0 cnVlOwo+ICsKPiArCWlmIChtZW1jbXAoJm5ld19kZGItPmN1cnNvcltwaXBlXSwgJmN1cl9kZGIt PmN1cnNvcltwaXBlXSwKPiArCQkgICAgc2l6ZW9mKHN0cnVjdCBza2xfZGRiX2VudHJ5KSkpCgpz aXplb2YobmV3X2RkYi0+Y3Vyc29yW3BpcGVdKQoKPiArCQlyZXR1cm4gdHJ1ZTsKPiArCj4gKwly ZXR1cm4gZmFsc2U7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHNrbF9jb21wdXRlX3dtX2dsb2Jh bF9wYXJhbWV0ZXJzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJCQkJICAgICBzdHJ1Y3Qg aW50ZWxfd21fY29uZmlnICpjb25maWcpCj4gK3sKPiArCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsK PiArCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOwo+ICsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnko Y3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKQo+ICsJCWNvbmZpZy0+bnVt X3BpcGVzX2FjdGl2ZSArPSBpbnRlbF9jcnRjX2FjdGl2ZShjcnRjKTsKPiArCj4gKwkvKiBGSVhN RTogSSBkb24ndCB0aGluayB3ZSBuZWVkIHRob3NlIHR3byBnbG9iYWwgcGFyYW1ldGVycyBvbiBT S0wgKi8KPiArCWxpc3RfZm9yX2VhY2hfZW50cnkocGxhbmUsICZkZXYtPm1vZGVfY29uZmlnLnBs YW5lX2xpc3QsIGhlYWQpIHsKPiArCQlzdHJ1Y3QgaW50ZWxfcGxhbmUgKmludGVsX3BsYW5lID0g dG9faW50ZWxfcGxhbmUocGxhbmUpOwo+ICsKPiArCQljb25maWctPnNwcml0ZXNfZW5hYmxlZCB8 PSBpbnRlbF9wbGFuZS0+d20uZW5hYmxlZDsKPiArCQljb25maWctPnNwcml0ZXNfc2NhbGVkIHw9 IGludGVsX3BsYW5lLT53bS5zY2FsZWQ7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHNr bF9jb21wdXRlX3dtX3BpcGVfcGFyYW1ldGVycyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gKwkJ CQkJICAgc3RydWN0IHNrbF9waXBlX3dtX3BhcmFtZXRlcnMgKnApCj4gK3sKPiArCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Cj4gKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxf Y3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7Cj4gKwllbnVtIHBpcGUgcGlwZSA9IGludGVsX2Ny dGMtPnBpcGU7Cj4gKwlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZTsKPiArCWludCBpID0gMTsgLyog SW5kZXggZm9yIHNwcml0ZSBwbGFuZXMgc3RhcnQgKi8KPiArCj4gKwlwLT5hY3RpdmUgPSBpbnRl bF9jcnRjX2FjdGl2ZShjcnRjKTsKPiArCWlmIChwLT5hY3RpdmUpIHsKPiArCQlwLT5waXBlX2h0 b3RhbCA9IGludGVsX2NydGMtPmNvbmZpZy5hZGp1c3RlZF9tb2RlLmNydGNfaHRvdGFsOwo+ICsJ CXAtPnBpeGVsX3JhdGUgPSBza2xfcGlwZV9waXhlbF9yYXRlKGRldiwgY3J0Yyk7Cj4gKwo+ICsJ CS8qCj4gKwkJICogRm9yIG5vdywgYXNzdW1lIHByaW1hcnkgYW5kIGN1cnNvciBwbGFuZXMgYXJl IGFsd2F5cyBlbmFibGVkLgo+ICsJCSAqLwo+ICsJCXAtPnBsYW5lWzBdLmVuYWJsZWQgPSB0cnVl Owo+ICsJCXAtPnBsYW5lWzBdLmJ5dGVzX3Blcl9waXhlbCA9Cj4gKwkJCWNydGMtPnByaW1hcnkt PmZiLT5iaXRzX3Blcl9waXhlbCAvIDg7Cj4gKwkJcC0+cGxhbmVbMF0uaG9yaXpfcGl4ZWxzID0g aW50ZWxfY3J0Yy0+Y29uZmlnLnBpcGVfc3JjX3c7Cj4gKwkJcC0+cGxhbmVbMF0udmVydF9waXhl bHMgPSBpbnRlbF9jcnRjLT5jb25maWcucGlwZV9zcmNfaDsKPiArCj4gKwkJcC0+Y3Vyc29yLmVu YWJsZWQgPSB0cnVlOwo+ICsJCXAtPmN1cnNvci5ieXRlc19wZXJfcGl4ZWwgPSA0Owo+ICsJCXAt PmN1cnNvci5ob3Jpel9waXhlbHMgPSBpbnRlbF9jcnRjLT5jdXJzb3Jfd2lkdGggPwo+ICsJCQkJ CSBpbnRlbF9jcnRjLT5jdXJzb3Jfd2lkdGggOiA2NDsKPiArCX0KPiArCj4gKwlsaXN0X2Zvcl9l YWNoX2VudHJ5KHBsYW5lLCAmZGV2LT5tb2RlX2NvbmZpZy5wbGFuZV9saXN0LCBoZWFkKSB7Cj4g KwkJc3RydWN0IGludGVsX3BsYW5lICppbnRlbF9wbGFuZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5l KTsKPiArCj4gKwkJaWYgKGludGVsX3BsYW5lLT5waXBlID09IHBpcGUpCj4gKwkJCXAtPnBsYW5l W2krK10gPSBpbnRlbF9wbGFuZS0+d207Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIHNr bF9jb21wdXRlX3BsYW5lX3dtKHN0cnVjdCBza2xfcGlwZV93bV9wYXJhbWV0ZXJzICpwLAo+ICsJ CQkJICAgc3RydWN0IGludGVsX3BsYW5lX3dtX3BhcmFtZXRlcnMgKnBfcGFyYW1zLAo+ICsJCQkJ ICAgdWludDE2X3QgbWF4X3BhZ2VfYnVmZl9hbGxvYywKPiArCQkJCSAgIHVpbnQzMl90IG1lbV92 YWx1ZSwKPiArCQkJCSAgIHVpbnQxNl90ICpyZXNfYmxvY2tzLCAvKiBvdXQgKi8KPiArCQkJCSAg IHVpbnQ4X3QgKnJlc19saW5lcyAvKiBvdXQgKi8pCj4gK3sKPiArCXVpbnQzMl90IG1ldGhvZDEs IG1ldGhvZDIsIHBsYW5lX2J5dGVzX3Blcl9saW5lOwo+ICsJdWludDMyX3QgcmVzdWx0X2J5dGVz Owo+ICsKPiArCWlmICghcC0+YWN0aXZlIHx8ICFwX3BhcmFtcy0+ZW5hYmxlZCkgewo+ICsJCSpy ZXNfYmxvY2tzID0gUExBTkVfV01fQkxPQ0tTX0RFRkFVTFQ7Cj4gKwkJKnJlc19saW5lcyA9IFBM QU5FX1dNX0xJTkVTX0RFRkFVTFQ7CgpXaHkgZG8gd2UgbmVlZCB0byBzZXQgIT0wIHZhbHVlcyBm b3IgZGlzYWJsZWQgcGxhbmVzPwoKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJbWV0 aG9kMSA9IHNrbF93bV9tZXRob2QxKHAtPnBpeGVsX3JhdGUsCj4gKwkJCQkgcF9wYXJhbXMtPmJ5 dGVzX3Blcl9waXhlbCwKPiArCQkJCSBtZW1fdmFsdWUpOwo+ICsJbWV0aG9kMiA9IHNrbF93bV9t ZXRob2QyKHAtPnBpeGVsX3JhdGUsCj4gKwkJCQkgcC0+cGlwZV9odG90YWwsCj4gKwkJCQkgcF9w YXJhbXMtPmhvcml6X3BpeGVscywKPiArCQkJCSBwX3BhcmFtcy0+Ynl0ZXNfcGVyX3BpeGVsLAo+ ICsJCQkJIG1lbV92YWx1ZSk7Cj4gKwo+ICsJcGxhbmVfYnl0ZXNfcGVyX2xpbmUgPSBwX3BhcmFt cy0+aG9yaXpfcGl4ZWxzICoKPiArCQkJCQlwX3BhcmFtcy0+Ynl0ZXNfcGVyX3BpeGVsOwo+ICsK PiArCS8qIEZvciBub3cgeHRpbGUgYW5kIGxpbmVhciAqLwo+ICsJaWYgKCgobWF4X3BhZ2VfYnVm Zl9hbGxvYyAqIDUxMikgLyBwbGFuZV9ieXRlc19wZXJfbGluZSkgPj0gMSkKPiArCQlyZXN1bHRf Ynl0ZXMgPSBtaW4obWV0aG9kMSwgbWV0aG9kMik7Cj4gKwllbHNlCj4gKwkJcmVzdWx0X2J5dGVz ID0gbWV0aG9kMTsKPiArCj4gKwkqcmVzX2Jsb2NrcyA9IERJVl9ST1VORF9VUChyZXN1bHRfYnl0 ZXMsIDUxMikgKyAxOwo+ICsJKnJlc19saW5lcyA9IERJVl9ST1VORF9VUChyZXN1bHRfYnl0ZXMs IHBsYW5lX2J5dGVzX3Blcl9saW5lKTsKPiArCgpTZWVtcyB3ZSdyZSBtaXNzaW5nIHRoZSBmaW5h bCB2YWxpZGl0eSBjaGVja3MgaGVyZS4KCj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgc2tsX2NvbXB1dGVfd21fbGV2ZWwoY29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LAo+ICsJCQkJIHN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKmRkYiwKPiAr CQkJCSBzdHJ1Y3Qgc2tsX3BpcGVfd21fcGFyYW1ldGVycyAqcCwKPiArCQkJCSBlbnVtIHBpcGUg cGlwZSwKPiArCQkJCSBpbnQgbGV2ZWwsCj4gKwkJCQkgaW50IG51bV9wbGFuZXMsCj4gKwkJCQkg c3RydWN0IHNrbF93bV9sZXZlbCAqcmVzdWx0KQo+ICt7Cj4gKwl1aW50MTZfdCBsYXRlbmN5ID0g ZGV2X3ByaXYtPndtLnNrbF9sYXRlbmN5W2xldmVsXTsKPiArCXVpbnQxNl90IGRkYl9ibG9ja3M7 Cj4gKwlpbnQgaTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BsYW5lczsgaSsrKSB7Cj4g KwkJZGRiX2Jsb2NrcyA9IHNrbF9kZGJfZW50cnlfc2l6ZSgmZGRiLT5wbGFuZVtwaXBlXVtpXSk7 Cj4gKwo+ICsJCXJlc3VsdC0+cGxhbmVfZW5baV0gPSBza2xfY29tcHV0ZV9wbGFuZV93bShwLCAm cC0+cGxhbmVbaV0sCj4gKwkJCQkJCWRkYl9ibG9ja3MsCj4gKwkJCQkJCWxhdGVuY3ksCj4gKwkJ CQkJCSZyZXN1bHQtPnBsYW5lX3Jlc19iW2ldLAo+ICsJCQkJCQkmcmVzdWx0LT5wbGFuZV9yZXNf bFtpXSk7Cj4gKwl9Cj4gKwo+ICsJZGRiX2Jsb2NrcyA9IHNrbF9kZGJfZW50cnlfc2l6ZSgmZGRi LT5jdXJzb3JbcGlwZV0pOwo+ICsJcmVzdWx0LT5jdXJzb3JfZW4gPSBza2xfY29tcHV0ZV9wbGFu ZV93bShwLCAmcC0+Y3Vyc29yLCBkZGJfYmxvY2tzLAo+ICsJCQkJCQkgbGF0ZW5jeSwgJnJlc3Vs dC0+Y3Vyc29yX3Jlc19iLAo+ICsJCQkJCQkgJnJlc3VsdC0+Y3Vyc29yX3Jlc19sKTsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgc2tsX2NvbXB1dGVfcGlwZV93bShzdHJ1Y3QgZHJtX2NydGMgKmNy dGMsCj4gKwkJCQlzdHJ1Y3Qgc2tsX2RkYl9hbGxvY2F0aW9uICpkZGIsCj4gKwkJCQlzdHJ1Y3Qg c2tsX3BpcGVfd21fcGFyYW1ldGVycyAqcGFyYW1zLAo+ICsJCQkJc3RydWN0IHNrbF9waXBlX3dt ICpwaXBlX3dtKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2Owo+ ICsJY29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJp dmF0ZTsKPiArCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0Yyhj cnRjKTsKPiArCWludCBsZXZlbCwgbWF4X2xldmVsID0gaWxrX3dtX21heF9sZXZlbChkZXYpOwo+ ICsKPiArCWZvciAobGV2ZWwgPSAwOyBsZXZlbCA8PSBtYXhfbGV2ZWw7IGxldmVsKyspIHsKPiAr CQlza2xfY29tcHV0ZV93bV9sZXZlbChkZXZfcHJpdiwgZGRiLCBwYXJhbXMsIGludGVsX2NydGMt PnBpcGUsCj4gKwkJCQkgICAgIGxldmVsLCBpbnRlbF9udW1fcGxhbmVzKGludGVsX2NydGMpLAo+ ICsJCQkJICAgICAmcGlwZV93bS0+d21bbGV2ZWxdKTsKPiArCX0KPiArCXBpcGVfd20tPmxpbmV0 aW1lID0gc2tsX2NvbXB1dGVfbGluZXRpbWVfd20oY3J0YywgcGFyYW1zKTsKPiArCj4gKwlza2xf Y29tcHV0ZV90cmFuc2l0aW9uX3dtKGNydGMsIHBhcmFtcywgcGlwZV93bSk7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIHNrbF9jb21wdXRlX3dtX3Jlc3VsdHMoc3RydWN0IGRybV9kZXZpY2UgKmRl diwKPiArCQkJCSAgIHN0cnVjdCBza2xfcGlwZV93bV9wYXJhbWV0ZXJzICpwLAo+ICsJCQkJICAg c3RydWN0IHNrbF9waXBlX3dtICpwX3dtLAo+ICsJCQkJICAgc3RydWN0IHNrbF93bV92YWx1ZXMg KnIsCj4gKwkJCQkgICBzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YykKPiArewo+ICsJaW50 IGksIGxldmVsLCBtYXhfbGV2ZWwgPSBpbGtfd21fbWF4X2xldmVsKGRldik7Cj4gKwl1aW50MzJf dCB0ZW1wOwo+ICsJZW51bSBwaXBlIHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOwo+ICsJdWludDE2 X3QgZGRiX2Jsb2NrczsKCkNvdWxkIG1vdmUgYSBidW5jaCBvZiB0aGF0IHRvIGEgbmFycm93ZXIg c2NvcGUuCgo+ICsKPiArCWZvciAobGV2ZWwgPSAwOyBsZXZlbCA8PSBtYXhfbGV2ZWw7IGxldmVs KyspIHsKPiArCQlmb3IgKGkgPSAwOyBpIDwgaW50ZWxfbnVtX3BsYW5lcyhpbnRlbF9jcnRjKTsg aSsrKSB7Cj4gKwkJCXRlbXAgPSAwOwo+ICsJCQlkZGJfYmxvY2tzID0gc2tsX2RkYl9lbnRyeV9z aXplKCZyLT5kZGIucGxhbmVbcGlwZV1baV0pOwo+ICsKPiArCQkJaWYgKChwX3dtLT53bVtsZXZl bF0ucGxhbmVfcmVzX2JbaV0gPiBkZGJfYmxvY2tzKSB8fAo+ICsJCQkJKHBfd20tPndtW2xldmVs XS5wbGFuZV9yZXNfbFtpXSA+IDMxKSkKPiArCQkJCXBfd20tPndtW2xldmVsXS5wbGFuZV9lbltp XSA9IGZhbHNlOwoKU28gdGhlIHZhbGlkaXR5IGNoZWNrIGlzIGhlcmUgdGhhdCBJIHdhcyBleHBl Y3RpbmcgaW4gc2tsX2NvbXB1dGVfcGxhbmVfd20oKS4KVGhlIHdheSB0aGlzIGlzIGRvbmUgbWFr ZXMgbWUgdGhpbmsgd2UgbWlnaHQgb3ZlcmZsb3cgdGhlIHJlZ2lzdGVyCmJpdGZpZWxkcyBpZiBp bnZhbGlkIHZhbHVlcyBhcmUgcHJvcGFnYXRlZCB0aGlzIGZhci4KClRoZSB3YXkgdGhlIGlsayBj b2RlIHdvcmtzIGlzIHRoYXQgaXQgd29uJ3QgZXZlciBrZWVwIGFyb3VuZCBpbnRlcm1lZGlhdGUK dmFsdWVzIHRoYXQgd291bGQgZXhjZWVkIHRoZSByZWdpc3RlciBtYXhpbXVtIHZhbHVlcyAoc3Vj aCB2YWx1ZXMgYXJlCmFscmVhZHkgZHJvcHBlZCBpbiBpbnRlbF9jb21wdXRlX3BpcGVfd20oKSks IGFuZCB0aGVuIGl0IHdpbGwgZmlsdGVyIG91dAp0aGUgb3RoZXJ3aXNlIGludmFsaWQgdmFsdWVz IGluIGlsa193bV9tZXJnZSgpIGJlZm9yZSBpbGtfY29tcHV0ZV93bV9yZXN1bHRzKCkKZ2V0cyBj YWxsZWQuIFdvdWxkIHNlZW0gbGVzcyBzdXJwcmlzaW5nIGlmIHdlIGNvdWxkIGZvbGxvdyBhIHNp bWlsYXIKcGF0dGVybiBpbiB0aGUgc2tsIGNvZGUuCgo+ICsKPiArCQkJdGVtcCB8PSBwX3dtLT53 bVtsZXZlbF0ucGxhbmVfcmVzX2xbaV0gPDwKPiArCQkJCQlQTEFORV9XTV9MSU5FU19TSElGVDsK PiArCQkJdGVtcCB8PSBwX3dtLT53bVtsZXZlbF0ucGxhbmVfcmVzX2JbaV07Cj4gKwkJCWlmIChw X3dtLT53bVtsZXZlbF0ucGxhbmVfZW5baV0pCj4gKwkJCQl0ZW1wIHw9IFBMQU5FX1dNX0VOOwo+ ICsKPiArCQkJci0+cGxhbmVbcGlwZV1baV1bbGV2ZWxdID0gdGVtcDsKPiArCQkJLyogVXNlIHRo ZSBMUDAgV00gdmFsdWUgZm9yIHRyYW5zaXRpb24gV00gZm9yIG5vdy4gKi8KPiArCQkJaWYgKGxl dmVsID09IDApCj4gKwkJCQlyLT5wbGFuZV90cmFuc1twaXBlXVtpXSA9IHRlbXA7CgpJJ2Qgc3Rp Y2sgdGhpcyBzcGVjaWFsIGNhc2UgaW50byB0aGUgY29tcHV0ZSBmdW5jdGlvbiByYXRoZXIgdGhh biBoZXJlLgoKPiArCQl9Cj4gKwo+ICsJCXRlbXAgPSAwOwo+ICsJCWRkYl9ibG9ja3MgPSBza2xf ZGRiX2VudHJ5X3NpemUoJnItPmRkYi5jdXJzb3JbcGlwZV0pOwo+ICsKPiArCQlpZiAoKHBfd20t PndtW2xldmVsXS5jdXJzb3JfcmVzX2IgPiBkZGJfYmxvY2tzKSB8fAo+ICsJCQkocF93bS0+d21b bGV2ZWxdLmN1cnNvcl9yZXNfbCA+IDMxKSkKPiArCQkJcF93bS0+d21bbGV2ZWxdLmN1cnNvcl9l biA9IGZhbHNlOwo+ICsKPiArCQl0ZW1wIHw9IHBfd20tPndtW2xldmVsXS5jdXJzb3JfcmVzX2wg PDwgUExBTkVfV01fTElORVNfU0hJRlQ7Cj4gKwkJdGVtcCB8PSBwX3dtLT53bVtsZXZlbF0uY3Vy c29yX3Jlc19iOwo+ICsKPiArCQlpZiAocF93bS0+d21bbGV2ZWxdLmN1cnNvcl9lbikKPiArCQkJ dGVtcCB8PSBQTEFORV9XTV9FTjsKPiArCj4gKwkJci0+Y3Vyc29yW3BpcGVdW2xldmVsXSA9IHRl bXA7Cj4gKwkJLyogVXNlIHRoZSBMUDAgV00gdmFsdWUgZm9yIHRyYW5zaXRpb24gV00gZm9yIG5v dy4gKi8KPiArCQlpZiAobGV2ZWwgPT0gMCkKPiArCQkJci0+Y3Vyc29yX3RyYW5zW3BpcGVdID0g dGVtcDsKPiArCj4gKwl9Cj4gKwo+ICsJci0+d21fbGluZXRpbWVbcGlwZV0gPSBwX3dtLT5saW5l dGltZTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc2tsX3dyaXRlX3dtX3ZhbHVlcyhzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gKwkJCQlzdHJ1Y3Qgc2tsX3dtX3ZhbHVlcyAq bmV3KQoKY29uc3QKCj4gK3sKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ ZGV2Owo+ICsJc3RydWN0IGludGVsX2NydGMgKmNydGM7Cj4gKwlpbnQgaSwgbGV2ZWwsIG1heF9s ZXZlbCA9IGlsa193bV9tYXhfbGV2ZWwoZGV2KTsKPiArCWVudW0gcGlwZSBwaXBlOwoKTW9yZSBz dHVmZiB0aGF0IGNvdWxkIGxpdmUgaW4gYSBuYXJyb3dlciBzY29wZS4KCj4gKwo+ICsJbGlzdF9m b3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGJhc2UuaGVh ZCkgewo+ICsJCXBpcGUgPSBjcnRjLT5waXBlOwo+ICsJCWlmIChuZXctPmRpcnR5W3BpcGVdKSB7 Cj4gKwkJCUk5MTVfV1JJVEUoUElQRV9XTV9MSU5FVElNRShwaXBlKSwKPiArCQkJCQluZXctPndt X2xpbmV0aW1lW3BpcGVdKTsKPiArCj4gKwkJCWZvciAobGV2ZWwgPSAwOyBsZXZlbCA8PSBtYXhf bGV2ZWw7IGxldmVsKyspIHsKPiArCQkJCWZvciAoaSA9IDA7IGkgPCBpbnRlbF9udW1fcGxhbmVz KGNydGMpOyBpKyspCj4gKwkJCQkJSTkxNV9XUklURShQTEFORV9XTShwaXBlLCBpLCBsZXZlbCks Cj4gKwkJCQkJCW5ldy0+cGxhbmVbcGlwZV1baV1bbGV2ZWxdKTsKPiArCQkJCUk5MTVfV1JJVEUo Q1VSX1dNKHBpcGUsIGxldmVsKSwKPiArCQkJCQluZXctPmN1cnNvcltwaXBlXVtsZXZlbF0pOwo+ ICsJCQl9Cj4gKwkJCWZvciAoaSA9IDA7IGkgPCBpbnRlbF9udW1fcGxhbmVzKGNydGMpOyBpKysp Cj4gKwkJCQlJOTE1X1dSSVRFKFBMQU5FX1dNX1RSQU5TKHBpcGUsIGkpLAo+ICsJCQkJCQluZXct PnBsYW5lX3RyYW5zW3BpcGVdW2ldKTsKPiArCQkJSTkxNV9XUklURShDVVJfV01fVFJBTlMocGlw ZSksIG5ldy0+Y3Vyc29yX3RyYW5zW3BpcGVdKTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJZGV2X3By aXYtPndtLnNrbF9odyA9ICpuZXc7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIHNrbF91cGRhdGVf cGlwZV93bShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gKwkJCSAgICAgICBzdHJ1Y3Qgc2tsX3Bp cGVfd21fcGFyYW1ldGVycyAqcGFyYW1zLAo+ICsJCQkgICAgICAgc3RydWN0IGludGVsX3dtX2Nv bmZpZyAqY29uZmlnLAo+ICsJCQkgICAgICAgc3RydWN0IHNrbF9kZGJfYWxsb2NhdGlvbiAqZGRi LCAvKiBvdXQgKi8KPiArCQkJICAgICAgIHN0cnVjdCBza2xfcGlwZV93bSAqcGlwZV93bSAvKiBv dXQgKi8pCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxf Y3J0YyhjcnRjKTsKPiArCj4gKwlza2xfY29tcHV0ZV93bV9waXBlX3BhcmFtZXRlcnMoY3J0Yywg cGFyYW1zKTsKPiArCXNrbF9jb21wdXRlX3BpcGVfd20oY3J0YywgZGRiLCBwYXJhbXMsIHBpcGVf d20pOwo+ICsKPiArCWlmICghbWVtY21wKCZpbnRlbF9jcnRjLT53bS5za2xfYWN0aXZlLCBwaXBl X3dtLCBzaXplb2YoKnBpcGVfd20pKSkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJaW50ZWxf Y3J0Yy0+d20uc2tsX2FjdGl2ZSA9ICpwaXBlX3dtOwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIHNrbF91cGRhdGVfb3RoZXJfcGlwZV93bShzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LAo+ICsJCQkJICAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gKwkJCQkgICAgIHN0 cnVjdCBpbnRlbF93bV9jb25maWcgKmNvbmZpZywKPiArCQkJCSAgICAgc3RydWN0IHNrbF93bV92 YWx1ZXMgKnIpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjOwo+ICsJc3Ry dWN0IGludGVsX2NydGMgKnRoaXNfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7Cj4gKwlzdHJ1 Y3Qgc2tsX3BpcGVfd21fcGFyYW1ldGVycyBwYXJhbXM7Cj4gKwlzdHJ1Y3Qgc2tsX3BpcGVfd20g cGlwZV93bTsKCk1vcmUgc3R1ZmYgdGhhdCBjYW4gYmUgbW92ZWQgdG8gYSBuYXJyb3dlciBzY29w ZS4KClNob3VsZCB0aGVzZSBiZSB6ZXJvIGluaXRpYWxpemQ/IEF0IGxlYXN0IHRoZSB3YXkgdGhl IGlsayBjb2RlIHdvcmtzCmlzIHRoYXQgbW9zdCBzdHJ1Y3R1cmVzIG5lZWQgemVybyBpbml0aWFs aXphdGlvbiB0byBhdm9pZCBjb25zdWx0aW5nCnN0YWNrIGdhcmJhZ2Ugc29tZXdoZXJlIGRvd24g dGhlIGxpbmUuCgo+ICsKPiArCS8qCj4gKwkgKiBJZiB0aGUgV00gdXBkYXRlIGhhc24ndCBjaGFu Z2VkIHRoZSBhbGxvY2F0aW9uIGZvciB0aGlzX2NydGMgKHRoZQo+ICsJICogY3J0YyB3ZSBhcmUg Y3VycmVudGx5IGNvbXB1dGluZyB0aGUgbmV3IFdNIHZhbHVlcyBmb3IpLCBvdGhlcgo+ICsJICog ZW5hYmxlZCBjcnRjcyB3aWxsIGtlZXAgdGhlIHNhbWUgYWxsb2NhdGlvbiBhbmQgd2UgZG9uJ3Qg bmVlZCB0bwo+ICsJICogcmVjb21wdXRlIGFueXRoaW5nIGZvciB0aGVtLgo+ICsJICovCj4gKwlp ZiAoIXNrbF9kZGJfYWxsb2NhdGlvbl9jaGFuZ2VkKCZyLT5kZGIsIHRoaXNfY3J0YykpCj4gKwkJ cmV0dXJuOwo+ICsKPiArCS8qCj4gKwkgKiBPdGhlcndpc2UsIGJlY2F1c2Ugb2YgdGhpc19jcnRj IGJlaW5nIGZyZXNobHkgZW5hYmxlZC9kaXNhYmxlZCwgdGhlCj4gKwkgKiBvdGhlciBhY3RpdmUg cGlwZXMgbmVlZCBuZXcgRERCIGFsbG9jYXRpb24gYW5kIFdNIHZhbHVlcy4KPiArCSAqLwo+ICsJ bGlzdF9mb3JfZWFjaF9lbnRyeShpbnRlbF9jcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xp c3QsCj4gKwkJCQliYXNlLmhlYWQpIHsKCk5vdCBzdXJlIGhvdyB0aGUgbG9ja2luZyBpcyBwbGFu bmVkIGhlcmUuIEluIHRoZSBpbGsgd20gcGF0Y2hlcyB0aGF0IGFyZQpzdGlsbCBwZW5kaW5nIEkn bSBhZGRpbmcgYSB3bS5tdXRleCB3aGljaCBtaWdodCBmaXQgdGhlIGJpbGwuIE90aGVyd2lzZQp3 ZSdyZSBnb2luZyB0byBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIGFsbCB0aGUgY3J0YyBsb2Nr cyBoZWxkIGhlcmUuCgpBbHNvIGlmIG11bHRpcGxlIHBpcGVzIGFyZSBhY3RpdmUgd2Ugc3VyZWx5 IGNhbid0IGp1c3QgZ28gY2hhbmdpbmcgdGhlCkREQiBhbGxvY2F0aW9uIHdpdGhvdXQgY29uc2lk ZXJpbmcgdGhlIGZhY3QgdGhhdCB2YmxhbmtzIGZvciBhbGwgcGlwZXMKZG9uJ3Qgb2NjdXIgYXQg dGhlIHNhbWUgdGltZS4gU28gc29tZSBraW5kIG9mIGhlYXZ5IGhhbmRlZApzeW5jaHJvbml6YXRp b24gaXMgbmVlZGVkIHRvIG1ha2Ugc3VyZSBub25lIG9mIHRoZSBEREIgYWxsb2NhdGlvbnMKb3Zl cmxhcCBldmVuIGZvciBhIHNob3J0IHBlcmlvZCBvZiB0aW1lLgoKPiArCQlib29sIHdtX2NoYW5n ZWQ7Cj4gKwo+ICsJCWlmICh0aGlzX2NydGMtPnBpcGUgPT0gaW50ZWxfY3J0Yy0+cGlwZSkKPiAr CQkJY29udGludWU7Cj4gKwo+ICsJCWlmICghaW50ZWxfY3J0Yy0+YWN0aXZlKQo+ICsJCQljb250 aW51ZTsKPiArCj4gKwkJd21fY2hhbmdlZCA9IHNrbF91cGRhdGVfcGlwZV93bSgmaW50ZWxfY3J0 Yy0+YmFzZSwKPiArCQkJCQkJJnBhcmFtcywgY29uZmlnLAo+ICsJCQkJCQkmci0+ZGRiLCAmcGlw ZV93bSk7Cj4gKwo+ICsJCS8qCj4gKwkJICogSWYgd2UgZW5kIHVwIHJlLWNvbXB1dGluZyB0aGUg b3RoZXIgcGlwZSBXTSB2YWx1ZXMsIGl0J3MKPiArCQkgKiBiZWNhdXNlIGl0IHdhcyByZWFsbHkg bmVlZGVkLCBzbyB3ZSBleHBlY3QgdGhlIFdNIHZhbHVlcyB0bwo+ICsJCSAqIGJlIGRpZmZlcmVu dC4KPiArCQkgKi8KPiArCQlXQVJOX09OKCF3bV9jaGFuZ2VkKTsKPiArCj4gKwkJc2tsX2NvbXB1 dGVfd21fcmVzdWx0cyhkZXYsICZwYXJhbXMsICZwaXBlX3dtLCByLCBpbnRlbF9jcnRjKTsKPiAr CQlyLT5kaXJ0eVtpbnRlbF9jcnRjLT5waXBlXSA9IHRydWU7Cj4gKwl9Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIHNrbF91cGRhdGVfd20oc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICt7Cj4gKwlz dHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7Cj4gKwlz dHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2Owo+ICsJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiArCXN0cnVjdCBza2xfcGlwZV93 bV9wYXJhbWV0ZXJzIHBhcmFtcyA9IHt9Owo+ICsJc3RydWN0IHNrbF93bV92YWx1ZXMgKnJlc3Vs dHMgPSAmZGV2X3ByaXYtPndtLnNrbF9yZXN1bHRzOwo+ICsJc3RydWN0IHNrbF9waXBlX3dtIHBp cGVfd20gPSB7fTsKPiArCXN0cnVjdCBpbnRlbF93bV9jb25maWcgY29uZmlnID0ge307Cj4gKwo+ ICsJbWVtc2V0KHJlc3VsdHMsIDAsIHNpemVvZigqcmVzdWx0cykpOwo+ICsKPiArCXNrbF9jb21w dXRlX3dtX2dsb2JhbF9wYXJhbWV0ZXJzKGRldiwgJmNvbmZpZyk7Cj4gKwo+ICsJaWYgKCFza2xf dXBkYXRlX3BpcGVfd20oY3J0YywgJnBhcmFtcywgJmNvbmZpZywKPiArCQkJCSZyZXN1bHRzLT5k ZGIsICZwaXBlX3dtKSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJc2tsX2NvbXB1dGVfd21fcmVzdWx0 cyhkZXYsICZwYXJhbXMsICZwaXBlX3dtLCByZXN1bHRzLCBpbnRlbF9jcnRjKTsKPiArCXJlc3Vs dHMtPmRpcnR5W2ludGVsX2NydGMtPnBpcGVdID0gdHJ1ZTsKPiArCj4gKwlza2xfdXBkYXRlX290 aGVyX3BpcGVfd20oZGV2LCBjcnRjLCAmY29uZmlnLCByZXN1bHRzKTsKPiArCXNrbF93cml0ZV93 bV92YWx1ZXMoZGV2X3ByaXYsIHJlc3VsdHMpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICtz a2xfdXBkYXRlX3Nwcml0ZV93bShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwgc3RydWN0IGRybV9j cnRjICpjcnRjLAo+ICsJCSAgICAgdWludDMyX3Qgc3ByaXRlX3dpZHRoLCB1aW50MzJfdCBzcHJp dGVfaGVpZ2h0LAo+ICsJCSAgICAgaW50IHBpeGVsX3NpemUsIGJvb2wgZW5hYmxlZCwgYm9vbCBz Y2FsZWQpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9wbGFuZSAqaW50ZWxfcGxhbmUgPSB0b19pbnRl bF9wbGFuZShwbGFuZSk7Cj4gKwo+ICsJaW50ZWxfcGxhbmUtPndtLmVuYWJsZWQgPSBlbmFibGVk Owo+ICsJaW50ZWxfcGxhbmUtPndtLnNjYWxlZCA9IHNjYWxlZDsKPiArCWludGVsX3BsYW5lLT53 bS5ob3Jpel9waXhlbHMgPSBzcHJpdGVfd2lkdGg7Cj4gKwlpbnRlbF9wbGFuZS0+d20udmVydF9w aXhlbHMgPSBzcHJpdGVfaGVpZ2h0Owo+ICsJaW50ZWxfcGxhbmUtPndtLmJ5dGVzX3Blcl9waXhl bCA9IHBpeGVsX3NpemU7Cj4gKwo+ICsJc2tsX3VwZGF0ZV93bShjcnRjKTsKPiArfQo+ICsKPiAg c3RhdGljIHZvaWQgaWxrX3VwZGF0ZV93bShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gIHsKPiAg CXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKPiBA QCAtNzQ2NCw2ICs3ODg1LDggQEAgdm9pZCBpbnRlbF9pbml0X3BtKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpCj4gIAkJc2tsX3NldHVwX3dtX2xhdGVuY3koZGV2KTsKPiAgCj4gIAkJZGV2X3ByaXYt PmRpc3BsYXkuaW5pdF9jbG9ja19nYXRpbmcgPSBnZW45X2luaXRfY2xvY2tfZ2F0aW5nOwo+ICsJ CWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV93bSA9IHNrbF91cGRhdGVfd207Cj4gKwkJZGV2X3By aXYtPmRpc3BsYXkudXBkYXRlX3Nwcml0ZV93bSA9IHNrbF91cGRhdGVfc3ByaXRlX3dtOwo+ICAJ fSBlbHNlIGlmIChIQVNfUENIX1NQTElUKGRldikpIHsKPiAgCQlpbGtfc2V0dXBfd21fbGF0ZW5j eShkZXYpOwo+ICAKPiAtLSAKPiAxLjguMy4xCj4gCj4gX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KPiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4gSW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngKCi0tIApWaWxsZSBTeXJqw6Rsw6QKSW50ZWwgT1RD Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdm eCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==