From mboxrd@z Thu Jan 1 00:00:00 1970 From: Damien Lespiau Subject: Re: [PATCH 47/89] drm/i915/skl: SKL Watermark Computation Date: Tue, 23 Sep 2014 12:14:02 +0100 Message-ID: <20140923111402.GA14080@strange.ger.corp.intel.com> References: <1409830075-11139-1-git-send-email-damien.lespiau@intel.com> <1409830075-11139-48-git-send-email-damien.lespiau@intel.com> <20140917120751.GL12416@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 C944F6E53E for ; Tue, 23 Sep 2014 04:14:14 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20140917120751.GL12416@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCBTZXAgMTcsIDIwMTQgYXQgMDM6MDc6NTFQTSArMDMwMCwgVmlsbGUgU3lyasOkbMOk IHdyb3RlOgo+IE9uIFRodSwgU2VwIDA0LCAyMDE0IGF0IDEyOjI3OjEzUE0gKzAxMDAsIERhbWll biBMZXNwaWF1IHdyb3RlOgo+ID4gRnJvbTogUHJhZGVlcCBCaGF0IDxwcmFkZWVwLmJoYXRAaW50 ZWwuY29tPgo+ID4gCj4gPiBUaGlzIHBhdGNoIGltcGxlbWVudHMgdGhlIHdhdGVybWFyayBhbGdv cml0aG0gYW5kIGl0cyBuZWNlc3NhcnkKPiA+IGZ1bmN0aW9ucy4gVHdvIGZ1bmN0aW9uIHBvaW50 ZXJzIHNrbF91cGRhdGVfd20gYW5kCj4gPiBza2xfdXBkYXRlX3Nwcml0ZV93bSBhcmUgcHJvdmlk ZWQuIFRoZSBza2xfdXBkYXRlX3dtIHdpbGwgdXBkYXRlCj4gPiB0aGUgd2F0ZXJtYXJrcyBmb3Ig dGhlIGNydGMgcHJvdmlkZWQgYXMgYW4gYXJndW1lbnQgYW5kIHRoZW4KPiA+IGNoZWNrcyBmb3Ig Y2hhbmdlIGluIEREQiBhbGxvY2F0aW9uIGZvciBvdGhlciBhY3RpdmUgcGlwZXMgYW5kCj4gPiBy ZWNvbXB1dGVzIHRoZSB3YXRlcm1hcmtzIGZvciB0aG9zZSBQaXBlcyBhbmQgcGxhbmVzIGFzIHdl bGwuCj4gPiBGaW5hbGx5IGl0IGRvZXMgdGhlIHJlZ2lzdGVyIHByb2dyYW1taW5nIGZvciBhbGwg ZGlydHkgcGlwZXMuCj4gPiBUaGUgdHJpZ2dlciBvZiB0aGUgV2F0ZXJtYXJrIGRvdWJsZSBidWZm ZXIgcmVnaXN0ZXJzIHdpbGwgaGF2ZQo+ID4gdG8gYmUgb25jZSB0aGUgcGxhbmUgY29uZmlndXJh dGlvbnMgYXJlIGRvbmUgYnkgdGhlIGNhbGxlci4KPiA+IAo+ID4gdjI6IGZpeGVkIHRoZSBkaXZp ZGUtYnktMCBlcnJvciBpbiB0aGUgcmVzdWx0cyBjb21wdXRhdGlvbiBmdW5jLgo+ID4gICAgIEFs c28gcmV3b3JrZWQgdGhlIFBMQU5FX1dNIHJlZ2lzdGVyIHZhbHVlcyBjb21wdXRhdGlvbiBmdW5j IHRvCj4gPiAgICAgbWFrZSBpdCBtb3JlIGNvbXBhY3QuIEluY29ycG9yYXRlZCBhbGwgb3RoZXIg cmV2aWV3IGNvbW1lbnRzCj4gPiAgICAgZnJvbSBEYW1pZW4uCj4gPiAKPiA+IHYzOiBDaGFuZ2Vk IHRoZSBza2xfY29tcHV0ZV9wbGFuZV93bSBmdW5jdGlvbiB0byBub3cgcmV0dXJuIHN1Y2Nlc3MK PiA+ICAgICBvciBmYWlsdXJlLiBBbHNvIHRoZSByZXN1bHQgYmxvY2tzIGFuZCBsaW5lcyBhcmUg Y29tcHV0ZWQgaGVyZQo+ID4gICAgIGluc3RlYWQgb2YgaW4gc2tsX2NvbXB1dGVfd21fcmVzdWx0 cyBmdW5jdGlvbi4KPiA+IAo+ID4gdjQ6IEFkanVzdCBza2xfZGRiX2FsbG9jX2NoYW5nZWQoKSB0 byB0aGUgbmV3IHBsYW5lcy9jdXJzb3Igc3BsaXQKPiA+ICAgICAoRGFtaWVuKQo+ID4gCj4gPiB2 NTogUmV3b3JrZWQgdGhlIGFmZmVjdGVkIGZ1bmN0aW9ucyB0byBpbXBsZW1lbnQgbmV3IHBsYW5l L2N1cnNvcgo+ID4gICAgIHNwbGl0Lgo+ID4gCj4gPiB2NjogUmV3b3JrIHRoZSBsb2dpYyB0aGF0 IHRyaWdnZXJzIHRoZSBEREIgYWxsb2NhdGlvbiBhbmQgV00gY29tcHV0YXRpb24KPiA+ICAgICBv ZiBza2xfdXBkYXRlX290aGVyX3BpcGVfd20oKSB0byBub3QgZGVwZW5kIG9uIG5vbi1jb21wdXRl ZCBEREIKPiA+ICAgICB2YWx1ZXMuCj4gPiAgICAgQWx3YXlzIGdpdmUgYSB2YWxpZCBjdXJzb3Jf d2lkdGggKGF0IGJvb3QgaXQncyAwKSB0byBrZWVwIHRoZQo+ID4gICAgIGludmFyaWFudCB0aGF0 IHdlIGNvbnNpZGVyIHRoZSBjdXJzb3IgcGxhbmUgYWx3YXlzIGVuYWJsZWQuCj4gPiAgICAgT3Ro ZXJ3aXNlIHdlIGVuZCB1cCBkaXZpZGluZyBieSAwIGluIHNrbF9jb21wdXRlX3BsYW5lX3dtKCkK PiA+ICAgICAoRGFtaWVuIExlc3BpYXUpCj4gPiAKPiA+IHY3OiBTcGVsbCBvdXQgYWxsb2NhdGlv bgo+ID4gICAgIHNrbF9kZGJfIGZ1bmN0aW9ucyBzaG91bGQgaGF2ZSB0aGUgZGRiIGFzIGZpcnN0 IGFyZ3VtZW50Cj4gPiAgICAgTWFrZSB0aGUgc2tsX2RkYl9hbGxvY19jaGFuZ2VkKCkgcGFyYW1l dGVycyBjb25zdAo+ID4gICAgIChEYW1pZW4pCj4gPiAKPiA+IHY4OiBSZWJhc2Ugb24gdG9wIG9m IHRoZSBjcnRjLT5wcmltYXJ5IGNoYW5nZXMKPiA+IAo+ID4gdjk6IFNwbGl0IHRoZSBzdGFnaW5n IHJlc3VsdHMgc3RydWN0dXJlIHRvIG5vdCBleGNlZWQgdGhlIDFLYiBzdGFjawo+ID4gICAgIGFs bG9jYXRpb24gaW4gc2tsX3VwZGF0ZV93bSgpCj4gPiAKPiA+IFNpZ25lZC1vZmYtYnk6IFByYWRl ZXAgQmhhdCA8cHJhZGVlcC5iaGF0QGludGVsLmNvbT4KPiA+IFNpZ25lZC1vZmYtYnk6IERhbWll biBMZXNwaWF1IDxkYW1pZW4ubGVzcGlhdUBpbnRlbC5jb20+Cj4gPiAKPiA+IGRybS9pOTE1L3Nr bDogRG9uJ3QgYWxsb2NhdGUgYXMgbXVjaCBvbiB0aGUgc3RhY2sgaW4gc2tsX3VwZGF0ZV93bSgp Cj4gPiAKPiA+IFN0YWNrIHNwYWNlIGNhbiBiZSBzY2FyY2UgYW5kIGEgY29tcGlsZXIgY2hlY2sg aGFzIGJlZW4gYWRkZWQgdG8gd2FybiBpZiB0aGUKPiA+IHBlci1mdW5jdGlvbiBzdGFjayBhbGxv Y2F0aW9uIGlzIGFib3ZlIDFLQi4KPiA+IAo+ID4gV2Ugd2Ugd2VyZSBoaXR0aW5nIHRoYXQgd2Fy bmluZyBpbiBza2xfdXBkYXRlX3dtKCksIHNvIG1vdmUgdGhlIGJpZwo+ID4gcmVzdWx0cyBhcnJh eSBpbiBkZXZfcHJpdiBpbnN0ZWFkLgo+ID4gCj4gPiBGb3IgcmVmZXJlbmNlLCBoZXJlJ3MgdGhl IGNvbXBpbGVyIHdhcm5pbmcgYmVmb3JlIHRoaXMgcGF0Y2g6Cj4gPiAKPiA+ICAgZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfcG0uYzogSW4gZnVuY3Rpb24g4oCYc2tsX3VwZGF0ZV93beKAmToK PiA+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYzozNjE4OjE6IHdhcm5pbmc6IHRo ZSBmcmFtZSBzaXplIG9mIDEyOTYgYnl0ZXMKPiA+ICAgICBpcyBsYXJnZXIgdGhhbiAxMDI0IGJ5 dGVzIFstV2ZyYW1lLWxhcmdlci10aGFuPV0KPiA+IAo+ID4gU2lnbmVkLW9mZi1ieTogRGFtaWVu IExlc3BpYXUgPGRhbWllbi5sZXNwaWF1QGludGVsLmNvbT4KClNvLCB2MTEgaXMgYW5zd2VyaW5n IGFsbCB0aGUgcmV2aWV3IGNvbW1lbnRzIGJlbG93ICBidXQgdHdvLCB3aGljaCBJCnRoaW5rIG5l ZWQgYSBwcm9wZXIgZGlmZiB0byBkZXZlbG9wIGFuZCByZXZpZXcgY29tZm9ydGFibHksIHNvIEkn bGwgc2VuZAp0aGVtIG9uIHRoZWlyIG93biAoYW5kIHRoZW4gd2UgY291bGQgdGhlbSBhcyBzZXBh cmF0ZSBwYXRjaGVzIG9yCnNxdWFzaGVkIGludG8gdGhpcyBvbmUpLiBUaGUgdHdvIGNoYW5nZXMg aW4gcXVlc3Rpb24gYXJlOgogCiAgMS8gcHV0IHRoZSAodGVtcG9yYXJ5KSB0cmFuc2l0aW9uIFdN IGNvbXB1dGF0aW9uIGluIHRoZSBlcG9ueW1vdXMKICAgICBmdW5jdGlvbiBpbnN0ZWFkIG9mIHJl c29sdmluZyBpdCBhdCBjb21wdXRlX3Jlc3VsdHMgdGltZQoKICAyLyBNb3ZlIHRoZSB2YWxpZGl0 eSBjaGVja3MgaW5zaWRlIHRoZSBjb21wdXRlIGZ1bmN0aW9uCgotLSAKRGFtaWVuCgo+ID4gLS0t Cj4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCB8ICAxMiArLQo+ID4gIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMgfCA0MjMgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwo+ID4gIDIgZmlsZXMgY2hhbmdlZCwgNDM0IGluc2VydGlvbnMoKyks IDEgZGVsZXRpb24oLSkKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gPiBpbmRleCBk ZTI3OGE1Li45YjBlMzk4IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kcnYuaAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ID4gQEAg LTE3MDksOCArMTcwOSwxOCBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7Cj4gPiAgCQkgKi8K PiA+ICAJCXVpbnQxNl90IHNrbF9sYXRlbmN5WzhdOwo+ID4gIAo+ID4gKwkJLyoKPiA+ICsJCSAq IFRoZSBza2xfd21fdmFsdWVzIHN0cnVjdHVyZSBpcyBhIGJpdCB0b28gYmlnIGZvciBzdGFjawo+ ID4gKwkJICogYWxsb2NhdGlvbiwgc28gd2Uga2VlcCB0aGUgc3RhZ2luZyBzdHJ1Y3Qgd2hlcmUg d2Ugc3RvcmUKPiA+ICsJCSAqIGludGVybWVkaWF0ZSByZXN1bHRzIGhlcmUgaW5zdGVhZC4KPiA+ ICsJCSAqLwo+ID4gKwkJc3RydWN0IHNrbF93bV92YWx1ZXMgc2tsX3Jlc3VsdHM7Cj4gPiArCj4g PiAgCQkvKiBjdXJyZW50IGhhcmR3YXJlIHN0YXRlICovCj4gPiAtCQlzdHJ1Y3QgaWxrX3dtX3Zh bHVlcyBodzsKPiA+ICsJCXVuaW9uIHsKPiA+ICsJCQlzdHJ1Y3QgaWxrX3dtX3ZhbHVlcyBodzsK PiA+ICsJCQlzdHJ1Y3Qgc2tsX3dtX3ZhbHVlcyBza2xfaHc7Cj4gPiArCQl9Owo+ID4gIAl9IHdt Owo+ID4gIAo+ID4gIAlzdHJ1Y3QgaTkxNV9ydW50aW1lX3BtIHBtOwo+ID4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9wbS5jCj4gPiBpbmRleCAyNTAzYWI5Li40ZWU5MGI2IDEwMDY0NAo+ID4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfcG0uYwo+ID4gQEAgLTI5MzcsNiArMjkzNyw0MjcgQEAgc3RhdGljIGJvb2wgaWxr X2Rpc2FibGVfbHBfd20oc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiA+ICAJcmV0dXJuIF9pbGtf ZGlzYWJsZV9scF93bShkZXZfcHJpdiwgV01fRElSVFlfTFBfQUxMKTsKPiA+ICB9Cj4gPiAgCj4g PiArc3RhdGljIHVpbnQzMl90IHNrbF9waXBlX3BpeGVsX3JhdGUoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKPiA+ICsJCQkJICAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiA+ICt7Cj4gPiArCXN0 cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKPiA+ICsJ dWludDMyX3QgcGl4ZWxfcmF0ZTsKPiA+ICsKPiA+ICsJcGl4ZWxfcmF0ZSA9IGludGVsX2NydGMt PmNvbmZpZy5hZGp1c3RlZF9tb2RlLmNydGNfY2xvY2s7Cj4gPiArCj4gPiArCXJldHVybiBwaXhl bF9yYXRlOwo+ID4gK30KPiAKPiBJIGNoYW5nZWQgdGhlIGlsayB2ZXJzaW9uIHRvIHRha2UganVz dCB0aGUgcGlwZSBjb25maWcgYXMgYSBwYXJhbWV0ZXIuCj4gVGhpcyBzaG91bGQgYmUgY2hhbmdl ZCB0byBkbyB0aGUgc2FtZS4gSSdtIG5vdCBlbnRpcmVseSBzdXJlIGl0IG1ha2VzCj4gc2Vuc2Ug dG8gaGF2ZSB0aGlzIGZ1bmN0aW9uIGFyb3VuZCB1bnRpbCBwaXBlIHNjYWxpbmcgaXMgaW1wbGVt ZW50ZWQsCj4gYnV0IEkgZ3Vlc3MgaXQgc2VydmVzIGFzIGEgZGVjZW50IHJlbWluZGVyIHRoYXQg c29tZXRoaW5nIG5lZWRzIHRvIGJlCj4gZG9uZSBoZXJlLgo+IAo+ID4gKwo+ID4gK3N0YXRpYyB1 aW50MzJfdCBza2xfd21fbWV0aG9kMSh1aW50MzJfdCBwaXhlbF9yYXRlLCB1aW50OF90IGJ5dGVz X3Blcl9waXhlbCwKPiA+ICsJCQkgICAgICAgdWludDMyX3QgbGF0ZW5jeSkKPiA+ICt7Cj4gPiAr CXVpbnQzMl90IHdtX2ludGVybWVkaWF0ZV92YWwsIHJldDsKPiA+ICsKPiA+ICsJaWYgKGxhdGVu Y3kgPT0gMCkKPiA+ICsJCXJldHVybiBVSU5UX01BWDsKPiA+ICsKPiA+ICsJd21faW50ZXJtZWRp YXRlX3ZhbCA9IGxhdGVuY3kgKiBwaXhlbF9yYXRlICogYnl0ZXNfcGVyX3BpeGVsOwo+IAo+IEkg d2FzIGEgYml0IHdvcnJpZWQgaWYgd2UgaGF2ZSBlbm91Z2ggYml0cyBoZXJlLCBidXQgbWF4IGxh dGVuY3kgc2hvdWxkCj4gYmUgMHhmZiBhbmQgYnl0ZXNfcGVyX3BpeGVsIHNob3VsZCBhbHdheXMg YmUgPD04LCBzbyB0aGF0IHNob3VsZCBhbGxvdwo+IHBpeGVsX3JhdGUgdXAgdG8gfjIgR0h6IHdo aWNoIHNlZW1zIHN1ZmZpY2llbnQgc2luY2UgbWF4IDJ4Y2RjbGsgaXMKPiAxMzUwIE1IeiBhbmQg dGhlIHBpeGVsIHJhdGUgc2hvdWxkIG5ldmVyIGV4Y2VlZCB0aGF0LiBOb3QgdGhhdCB3ZSBoYXZl Cj4gc3VjaCBjaGVja3MgYW55d2hlcmUgYXQgdGhlIG1vbWVudCwgYnV0IHdlIHNob3VsZCBldmVu dHVhbGx5IGFkZCB0aGVtLgo+IAo+ID4gKwlyZXQgPSBESVZfUk9VTkRfVVAod21faW50ZXJtZWRp YXRlX3ZhbCwgMTAwMCk7Cj4gPiArCj4gPiArCXJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4g K3N0YXRpYyB1aW50MzJfdCBza2xfd21fbWV0aG9kMih1aW50MzJfdCBwaXhlbF9yYXRlLCB1aW50 MzJfdCBwaXBlX2h0b3RhbCwKPiA+ICsJCQkgICAgICAgdWludDMyX3QgaG9yaXpfcGl4ZWxzLCB1 aW50OF90IGJ5dGVzX3Blcl9waXhlbCwKPiA+ICsJCQkgICAgICAgdWludDMyX3QgbGF0ZW5jeSkK PiA+ICt7Cj4gPiArCXVpbnQzMl90IHJldCwgcGxhbmVfYnl0ZXNfcGVyX2xpbmUsIHdtX2ludGVy bWVkaWF0ZV92YWw7Cj4gPiArCj4gPiArCWlmIChsYXRlbmN5ID09IDApCj4gPiArCQlyZXR1cm4g VUlOVF9NQVg7Cj4gPiArCj4gPiArCXBsYW5lX2J5dGVzX3Blcl9saW5lID0gaG9yaXpfcGl4ZWxz ICogYnl0ZXNfcGVyX3BpeGVsOwo+ID4gKwl3bV9pbnRlcm1lZGlhdGVfdmFsID0gbGF0ZW5jeSAq IHBpeGVsX3JhdGU7Cj4gPiArCXJldCA9IERJVl9ST1VORF9VUCh3bV9pbnRlcm1lZGlhdGVfdmFs LCBwaXBlX2h0b3RhbCAqIDEwMDApICoKPiA+ICsJCQkJcGxhbmVfYnl0ZXNfcGVyX2xpbmU7Cj4g PiArCj4gPiArCXJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIHNrbF9j b21wdXRlX3RyYW5zaXRpb25fd20oc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ID4gKwkJCQkgIHN0 cnVjdCBza2xfcGlwZV93bV9wYXJhbWV0ZXJzICpwYXJhbXMsCj4gPiArCQkJCSAgc3RydWN0IHNr bF9waXBlX3dtICpwaXBlX3dtKQo+ID4gK3sKPiA+ICsJLyoKPiA+ICsJICogRm9yIG5vdyBpdCBp cyBzdWdnZXN0ZWQgdG8gdXNlIHRoZSBMUDAgd20gdmFsIG9mIGNvcnJlc3BvbmRpbmcKPiA+ICsJ ICogcGxhbmUgYXMgdHJhbnNpdGlvbiB3bSB2YWwuIFRoaXMgaXMgZG9uZSB3aGlsZSBjb21wdXRp bmcgcmVzdWx0cy4KPiA+ICsJICovCj4gPiArCWlmICghcGFyYW1zLT5hY3RpdmUpCj4gPiArCQly ZXR1cm47Cj4gPiArfQo+IAo+IFNlZW1zIGxpa2UgYSByYXRoZXIgcG9pbnRsZXNzIGZ1bmN0aW9u Lgo+IAo+ID4gKwo+ID4gK3N0YXRpYyB1aW50MzJfdAo+ID4gK3NrbF9jb21wdXRlX2xpbmV0aW1l X3dtKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IHNrbF9waXBlX3dtX3BhcmFtZXRlcnMg KnApCj4gPiArewo+ID4gKwlpZiAoIWludGVsX2NydGNfYWN0aXZlKGNydGMpKQo+ID4gKwkJcmV0 dXJuIDA7Cj4gPiArCj4gPiArCXJldHVybiBESVZfUk9VTkRfVVAoOCAqIHAtPnBpcGVfaHRvdGFs ICogMTAwMCwgcC0+cGl4ZWxfcmF0ZSk7Cj4gPiArCj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBi b29sIHNrbF9kZGJfYWxsb2NhdGlvbl9jaGFuZ2VkKGNvbnN0IHN0cnVjdCBza2xfZGRiX2FsbG9j YXRpb24gKm5ld19kZGIsCj4gPiArCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0YyAq aW50ZWxfY3J0YykKPiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBpbnRlbF9j cnRjLT5iYXNlLmRldjsKPiA+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g ZGV2LT5kZXZfcHJpdmF0ZTsKPiA+ICsJc3RydWN0IHNrbF9kZGJfYWxsb2NhdGlvbiAqY3VyX2Rk YiA9ICZkZXZfcHJpdi0+d20uc2tsX2h3LmRkYjsKPiAKPiBjb25zdAo+IAo+ID4gKwllbnVtIHBp cGUgcGlwZSA9IGludGVsX2NydGMtPnBpcGU7Cj4gPiArCXNpemVfdCBzaXplOwo+ID4gKwo+ID4g KwlzaXplID0gQVJSQVlfU0laRShuZXdfZGRiLT5wbGFuZVtwaXBlXSkgKiBzaXplb2Yoc3RydWN0 IHNrbF9kZGJfZW50cnkpOwo+IAo+IHNpemVvZihuZXdfZGRiLT5wbGFuZVtwaXBlXSkKPiAKPiA+ ICsJaWYgKG1lbWNtcChuZXdfZGRiLT5wbGFuZVtwaXBlXSwgY3VyX2RkYi0+cGxhbmVbcGlwZV0s IHNpemUpKQo+ID4gKwkJcmV0dXJuIHRydWU7Cj4gPiArCj4gPiArCWlmIChtZW1jbXAoJm5ld19k ZGItPmN1cnNvcltwaXBlXSwgJmN1cl9kZGItPmN1cnNvcltwaXBlXSwKPiA+ICsJCSAgICBzaXpl b2Yoc3RydWN0IHNrbF9kZGJfZW50cnkpKSkKPiAKPiBzaXplb2YobmV3X2RkYi0+Y3Vyc29yW3Bp cGVdKQo+IAo+ID4gKwkJcmV0dXJuIHRydWU7Cj4gPiArCj4gPiArCXJldHVybiBmYWxzZTsKPiA+ ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgc2tsX2NvbXB1dGVfd21fZ2xvYmFsX3BhcmFtZXRl cnMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiA+ICsJCQkJCSAgICAgc3RydWN0IGludGVsX3dt X2NvbmZpZyAqY29uZmlnKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9jcnRjICpjcnRjOwo+ID4g KwlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZTsKPiA+ICsKPiA+ICsJbGlzdF9mb3JfZWFjaF9lbnRy eShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpCj4gPiArCQljb25maWct Pm51bV9waXBlc19hY3RpdmUgKz0gaW50ZWxfY3J0Y19hY3RpdmUoY3J0Yyk7Cj4gPiArCj4gPiAr CS8qIEZJWE1FOiBJIGRvbid0IHRoaW5rIHdlIG5lZWQgdGhvc2UgdHdvIGdsb2JhbCBwYXJhbWV0 ZXJzIG9uIFNLTCAqLwo+ID4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBsYW5lLCAmZGV2LT5tb2Rl X2NvbmZpZy5wbGFuZV9saXN0LCBoZWFkKSB7Cj4gPiArCQlzdHJ1Y3QgaW50ZWxfcGxhbmUgKmlu dGVsX3BsYW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmUpOwo+ID4gKwo+ID4gKwkJY29uZmlnLT5z cHJpdGVzX2VuYWJsZWQgfD0gaW50ZWxfcGxhbmUtPndtLmVuYWJsZWQ7Cj4gPiArCQljb25maWct PnNwcml0ZXNfc2NhbGVkIHw9IGludGVsX3BsYW5lLT53bS5zY2FsZWQ7Cj4gPiArCX0KPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgc2tsX2NvbXB1dGVfd21fcGlwZV9wYXJhbWV0ZXJzKHN0 cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+ICsJCQkJCSAgIHN0cnVjdCBza2xfcGlwZV93bV9wYXJh bWV0ZXJzICpwKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRl djsKPiA+ICsJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNy dGMpOwo+ID4gKwllbnVtIHBpcGUgcGlwZSA9IGludGVsX2NydGMtPnBpcGU7Cj4gPiArCXN0cnVj dCBkcm1fcGxhbmUgKnBsYW5lOwo+ID4gKwlpbnQgaSA9IDE7IC8qIEluZGV4IGZvciBzcHJpdGUg cGxhbmVzIHN0YXJ0ICovCj4gPiArCj4gPiArCXAtPmFjdGl2ZSA9IGludGVsX2NydGNfYWN0aXZl KGNydGMpOwo+ID4gKwlpZiAocC0+YWN0aXZlKSB7Cj4gPiArCQlwLT5waXBlX2h0b3RhbCA9IGlu dGVsX2NydGMtPmNvbmZpZy5hZGp1c3RlZF9tb2RlLmNydGNfaHRvdGFsOwo+ID4gKwkJcC0+cGl4 ZWxfcmF0ZSA9IHNrbF9waXBlX3BpeGVsX3JhdGUoZGV2LCBjcnRjKTsKPiA+ICsKPiA+ICsJCS8q Cj4gPiArCQkgKiBGb3Igbm93LCBhc3N1bWUgcHJpbWFyeSBhbmQgY3Vyc29yIHBsYW5lcyBhcmUg YWx3YXlzIGVuYWJsZWQuCj4gPiArCQkgKi8KPiA+ICsJCXAtPnBsYW5lWzBdLmVuYWJsZWQgPSB0 cnVlOwo+ID4gKwkJcC0+cGxhbmVbMF0uYnl0ZXNfcGVyX3BpeGVsID0KPiA+ICsJCQljcnRjLT5w cmltYXJ5LT5mYi0+Yml0c19wZXJfcGl4ZWwgLyA4Owo+ID4gKwkJcC0+cGxhbmVbMF0uaG9yaXpf cGl4ZWxzID0gaW50ZWxfY3J0Yy0+Y29uZmlnLnBpcGVfc3JjX3c7Cj4gPiArCQlwLT5wbGFuZVsw XS52ZXJ0X3BpeGVscyA9IGludGVsX2NydGMtPmNvbmZpZy5waXBlX3NyY19oOwo+ID4gKwo+ID4g KwkJcC0+Y3Vyc29yLmVuYWJsZWQgPSB0cnVlOwo+ID4gKwkJcC0+Y3Vyc29yLmJ5dGVzX3Blcl9w aXhlbCA9IDQ7Cj4gPiArCQlwLT5jdXJzb3IuaG9yaXpfcGl4ZWxzID0gaW50ZWxfY3J0Yy0+Y3Vy c29yX3dpZHRoID8KPiA+ICsJCQkJCSBpbnRlbF9jcnRjLT5jdXJzb3Jfd2lkdGggOiA2NDsKPiA+ ICsJfQo+ID4gKwo+ID4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBsYW5lLCAmZGV2LT5tb2RlX2Nv bmZpZy5wbGFuZV9saXN0LCBoZWFkKSB7Cj4gPiArCQlzdHJ1Y3QgaW50ZWxfcGxhbmUgKmludGVs X3BsYW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmUpOwo+ID4gKwo+ID4gKwkJaWYgKGludGVsX3Bs YW5lLT5waXBlID09IHBpcGUpCj4gPiArCQkJcC0+cGxhbmVbaSsrXSA9IGludGVsX3BsYW5lLT53 bTsKPiA+ICsJfQo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgYm9vbCBza2xfY29tcHV0ZV9wbGFu ZV93bShzdHJ1Y3Qgc2tsX3BpcGVfd21fcGFyYW1ldGVycyAqcCwKPiA+ICsJCQkJICAgc3RydWN0 IGludGVsX3BsYW5lX3dtX3BhcmFtZXRlcnMgKnBfcGFyYW1zLAo+ID4gKwkJCQkgICB1aW50MTZf dCBtYXhfcGFnZV9idWZmX2FsbG9jLAo+ID4gKwkJCQkgICB1aW50MzJfdCBtZW1fdmFsdWUsCj4g PiArCQkJCSAgIHVpbnQxNl90ICpyZXNfYmxvY2tzLCAvKiBvdXQgKi8KPiA+ICsJCQkJICAgdWlu dDhfdCAqcmVzX2xpbmVzIC8qIG91dCAqLykKPiA+ICt7Cj4gPiArCXVpbnQzMl90IG1ldGhvZDEs IG1ldGhvZDIsIHBsYW5lX2J5dGVzX3Blcl9saW5lOwo+ID4gKwl1aW50MzJfdCByZXN1bHRfYnl0 ZXM7Cj4gPiArCj4gPiArCWlmICghcC0+YWN0aXZlIHx8ICFwX3BhcmFtcy0+ZW5hYmxlZCkgewo+ ID4gKwkJKnJlc19ibG9ja3MgPSBQTEFORV9XTV9CTE9DS1NfREVGQVVMVDsKPiA+ICsJCSpyZXNf bGluZXMgPSBQTEFORV9XTV9MSU5FU19ERUZBVUxUOwo+IAo+IFdoeSBkbyB3ZSBuZWVkIHRvIHNl dCAhPTAgdmFsdWVzIGZvciBkaXNhYmxlZCBwbGFuZXM/Cj4gCj4gPiArCQlyZXR1cm4gZmFsc2U7 Cj4gPiArCX0KPiA+ICsKPiA+ICsJbWV0aG9kMSA9IHNrbF93bV9tZXRob2QxKHAtPnBpeGVsX3Jh dGUsCj4gPiArCQkJCSBwX3BhcmFtcy0+Ynl0ZXNfcGVyX3BpeGVsLAo+ID4gKwkJCQkgbWVtX3Zh bHVlKTsKPiA+ICsJbWV0aG9kMiA9IHNrbF93bV9tZXRob2QyKHAtPnBpeGVsX3JhdGUsCj4gPiAr CQkJCSBwLT5waXBlX2h0b3RhbCwKPiA+ICsJCQkJIHBfcGFyYW1zLT5ob3Jpel9waXhlbHMsCj4g PiArCQkJCSBwX3BhcmFtcy0+Ynl0ZXNfcGVyX3BpeGVsLAo+ID4gKwkJCQkgbWVtX3ZhbHVlKTsK PiA+ICsKPiA+ICsJcGxhbmVfYnl0ZXNfcGVyX2xpbmUgPSBwX3BhcmFtcy0+aG9yaXpfcGl4ZWxz ICoKPiA+ICsJCQkJCXBfcGFyYW1zLT5ieXRlc19wZXJfcGl4ZWw7Cj4gPiArCj4gPiArCS8qIEZv ciBub3cgeHRpbGUgYW5kIGxpbmVhciAqLwo+ID4gKwlpZiAoKChtYXhfcGFnZV9idWZmX2FsbG9j ICogNTEyKSAvIHBsYW5lX2J5dGVzX3Blcl9saW5lKSA+PSAxKQo+ID4gKwkJcmVzdWx0X2J5dGVz ID0gbWluKG1ldGhvZDEsIG1ldGhvZDIpOwo+ID4gKwllbHNlCj4gPiArCQlyZXN1bHRfYnl0ZXMg PSBtZXRob2QxOwo+ID4gKwo+ID4gKwkqcmVzX2Jsb2NrcyA9IERJVl9ST1VORF9VUChyZXN1bHRf Ynl0ZXMsIDUxMikgKyAxOwo+ID4gKwkqcmVzX2xpbmVzID0gRElWX1JPVU5EX1VQKHJlc3VsdF9i eXRlcywgcGxhbmVfYnl0ZXNfcGVyX2xpbmUpOwo+ID4gKwo+IAo+IFNlZW1zIHdlJ3JlIG1pc3Np bmcgdGhlIGZpbmFsIHZhbGlkaXR5IGNoZWNrcyBoZXJlLgo+IAo+ID4gKwlyZXR1cm4gdHJ1ZTsK PiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgc2tsX2NvbXB1dGVfd21fbGV2ZWwoY29uc3Qg c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gKwkJCQkgc3RydWN0IHNrbF9k ZGJfYWxsb2NhdGlvbiAqZGRiLAo+ID4gKwkJCQkgc3RydWN0IHNrbF9waXBlX3dtX3BhcmFtZXRl cnMgKnAsCj4gPiArCQkJCSBlbnVtIHBpcGUgcGlwZSwKPiA+ICsJCQkJIGludCBsZXZlbCwKPiA+ ICsJCQkJIGludCBudW1fcGxhbmVzLAo+ID4gKwkJCQkgc3RydWN0IHNrbF93bV9sZXZlbCAqcmVz dWx0KQo+ID4gK3sKPiA+ICsJdWludDE2X3QgbGF0ZW5jeSA9IGRldl9wcml2LT53bS5za2xfbGF0 ZW5jeVtsZXZlbF07Cj4gPiArCXVpbnQxNl90IGRkYl9ibG9ja3M7Cj4gPiArCWludCBpOwo+ID4g Kwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BsYW5lczsgaSsrKSB7Cj4gPiArCQlkZGJfYmxv Y2tzID0gc2tsX2RkYl9lbnRyeV9zaXplKCZkZGItPnBsYW5lW3BpcGVdW2ldKTsKPiA+ICsKPiA+ ICsJCXJlc3VsdC0+cGxhbmVfZW5baV0gPSBza2xfY29tcHV0ZV9wbGFuZV93bShwLCAmcC0+cGxh bmVbaV0sCj4gPiArCQkJCQkJZGRiX2Jsb2NrcywKPiA+ICsJCQkJCQlsYXRlbmN5LAo+ID4gKwkJ CQkJCSZyZXN1bHQtPnBsYW5lX3Jlc19iW2ldLAo+ID4gKwkJCQkJCSZyZXN1bHQtPnBsYW5lX3Jl c19sW2ldKTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlkZGJfYmxvY2tzID0gc2tsX2RkYl9lbnRyeV9z aXplKCZkZGItPmN1cnNvcltwaXBlXSk7Cj4gPiArCXJlc3VsdC0+Y3Vyc29yX2VuID0gc2tsX2Nv bXB1dGVfcGxhbmVfd20ocCwgJnAtPmN1cnNvciwgZGRiX2Jsb2NrcywKPiA+ICsJCQkJCQkgbGF0 ZW5jeSwgJnJlc3VsdC0+Y3Vyc29yX3Jlc19iLAo+ID4gKwkJCQkJCSAmcmVzdWx0LT5jdXJzb3Jf cmVzX2wpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBza2xfY29tcHV0ZV9waXBlX3dt KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+ICsJCQkJc3RydWN0IHNrbF9kZGJfYWxsb2NhdGlv biAqZGRiLAo+ID4gKwkJCQlzdHJ1Y3Qgc2tsX3BpcGVfd21fcGFyYW1ldGVycyAqcGFyYW1zLAo+ ID4gKwkJCQlzdHJ1Y3Qgc2tsX3BpcGVfd20gKnBpcGVfd20pCj4gPiArewo+ID4gKwlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2Owo+ID4gKwljb25zdCBzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ID4gKwlzdHJ1Y3QgaW50ZWxf Y3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7Cj4gPiArCWludCBsZXZlbCwg bWF4X2xldmVsID0gaWxrX3dtX21heF9sZXZlbChkZXYpOwo+ID4gKwo+ID4gKwlmb3IgKGxldmVs ID0gMDsgbGV2ZWwgPD0gbWF4X2xldmVsOyBsZXZlbCsrKSB7Cj4gPiArCQlza2xfY29tcHV0ZV93 bV9sZXZlbChkZXZfcHJpdiwgZGRiLCBwYXJhbXMsIGludGVsX2NydGMtPnBpcGUsCj4gPiArCQkJ CSAgICAgbGV2ZWwsIGludGVsX251bV9wbGFuZXMoaW50ZWxfY3J0YyksCj4gPiArCQkJCSAgICAg JnBpcGVfd20tPndtW2xldmVsXSk7Cj4gPiArCX0KPiA+ICsJcGlwZV93bS0+bGluZXRpbWUgPSBz a2xfY29tcHV0ZV9saW5ldGltZV93bShjcnRjLCBwYXJhbXMpOwo+ID4gKwo+ID4gKwlza2xfY29t cHV0ZV90cmFuc2l0aW9uX3dtKGNydGMsIHBhcmFtcywgcGlwZV93bSk7Cj4gPiArfQo+ID4gKwo+ ID4gK3N0YXRpYyB2b2lkIHNrbF9jb21wdXRlX3dtX3Jlc3VsdHMoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKPiA+ICsJCQkJICAgc3RydWN0IHNrbF9waXBlX3dtX3BhcmFtZXRlcnMgKnAsCj4gPiAr CQkJCSAgIHN0cnVjdCBza2xfcGlwZV93bSAqcF93bSwKPiA+ICsJCQkJICAgc3RydWN0IHNrbF93 bV92YWx1ZXMgKnIsCj4gPiArCQkJCSAgIHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjKQo+ ID4gK3sKPiA+ICsJaW50IGksIGxldmVsLCBtYXhfbGV2ZWwgPSBpbGtfd21fbWF4X2xldmVsKGRl dik7Cj4gPiArCXVpbnQzMl90IHRlbXA7Cj4gPiArCWVudW0gcGlwZSBwaXBlID0gaW50ZWxfY3J0 Yy0+cGlwZTsKPiA+ICsJdWludDE2X3QgZGRiX2Jsb2NrczsKPiAKPiBDb3VsZCBtb3ZlIGEgYnVu Y2ggb2YgdGhhdCB0byBhIG5hcnJvd2VyIHNjb3BlLgo+IAo+ID4gKwo+ID4gKwlmb3IgKGxldmVs ID0gMDsgbGV2ZWwgPD0gbWF4X2xldmVsOyBsZXZlbCsrKSB7Cj4gPiArCQlmb3IgKGkgPSAwOyBp IDwgaW50ZWxfbnVtX3BsYW5lcyhpbnRlbF9jcnRjKTsgaSsrKSB7Cj4gPiArCQkJdGVtcCA9IDA7 Cj4gPiArCQkJZGRiX2Jsb2NrcyA9IHNrbF9kZGJfZW50cnlfc2l6ZSgmci0+ZGRiLnBsYW5lW3Bp cGVdW2ldKTsKPiA+ICsKPiA+ICsJCQlpZiAoKHBfd20tPndtW2xldmVsXS5wbGFuZV9yZXNfYltp XSA+IGRkYl9ibG9ja3MpIHx8Cj4gPiArCQkJCShwX3dtLT53bVtsZXZlbF0ucGxhbmVfcmVzX2xb aV0gPiAzMSkpCj4gPiArCQkJCXBfd20tPndtW2xldmVsXS5wbGFuZV9lbltpXSA9IGZhbHNlOwo+ IAo+IFNvIHRoZSB2YWxpZGl0eSBjaGVjayBpcyBoZXJlIHRoYXQgSSB3YXMgZXhwZWN0aW5nIGlu IHNrbF9jb21wdXRlX3BsYW5lX3dtKCkuCj4gVGhlIHdheSB0aGlzIGlzIGRvbmUgbWFrZXMgbWUg dGhpbmsgd2UgbWlnaHQgb3ZlcmZsb3cgdGhlIHJlZ2lzdGVyCj4gYml0ZmllbGRzIGlmIGludmFs aWQgdmFsdWVzIGFyZSBwcm9wYWdhdGVkIHRoaXMgZmFyLgo+IAo+IFRoZSB3YXkgdGhlIGlsayBj b2RlIHdvcmtzIGlzIHRoYXQgaXQgd29uJ3QgZXZlciBrZWVwIGFyb3VuZCBpbnRlcm1lZGlhdGUK PiB2YWx1ZXMgdGhhdCB3b3VsZCBleGNlZWQgdGhlIHJlZ2lzdGVyIG1heGltdW0gdmFsdWVzIChz dWNoIHZhbHVlcyBhcmUKPiBhbHJlYWR5IGRyb3BwZWQgaW4gaW50ZWxfY29tcHV0ZV9waXBlX3dt KCkpLCBhbmQgdGhlbiBpdCB3aWxsIGZpbHRlciBvdXQKPiB0aGUgb3RoZXJ3aXNlIGludmFsaWQg dmFsdWVzIGluIGlsa193bV9tZXJnZSgpIGJlZm9yZSBpbGtfY29tcHV0ZV93bV9yZXN1bHRzKCkK PiBnZXRzIGNhbGxlZC4gV291bGQgc2VlbSBsZXNzIHN1cnByaXNpbmcgaWYgd2UgY291bGQgZm9s bG93IGEgc2ltaWxhcgo+IHBhdHRlcm4gaW4gdGhlIHNrbCBjb2RlLgo+IAo+ID4gKwo+ID4gKwkJ CXRlbXAgfD0gcF93bS0+d21bbGV2ZWxdLnBsYW5lX3Jlc19sW2ldIDw8Cj4gPiArCQkJCQlQTEFO RV9XTV9MSU5FU19TSElGVDsKPiA+ICsJCQl0ZW1wIHw9IHBfd20tPndtW2xldmVsXS5wbGFuZV9y ZXNfYltpXTsKPiA+ICsJCQlpZiAocF93bS0+d21bbGV2ZWxdLnBsYW5lX2VuW2ldKQo+ID4gKwkJ CQl0ZW1wIHw9IFBMQU5FX1dNX0VOOwo+ID4gKwo+ID4gKwkJCXItPnBsYW5lW3BpcGVdW2ldW2xl dmVsXSA9IHRlbXA7Cj4gPiArCQkJLyogVXNlIHRoZSBMUDAgV00gdmFsdWUgZm9yIHRyYW5zaXRp b24gV00gZm9yIG5vdy4gKi8KPiA+ICsJCQlpZiAobGV2ZWwgPT0gMCkKPiA+ICsJCQkJci0+cGxh bmVfdHJhbnNbcGlwZV1baV0gPSB0ZW1wOwo+IAo+IEknZCBzdGljayB0aGlzIHNwZWNpYWwgY2Fz ZSBpbnRvIHRoZSBjb21wdXRlIGZ1bmN0aW9uIHJhdGhlciB0aGFuIGhlcmUuCj4gCj4gPiArCQl9 Cj4gPiArCj4gPiArCQl0ZW1wID0gMDsKPiA+ICsJCWRkYl9ibG9ja3MgPSBza2xfZGRiX2VudHJ5 X3NpemUoJnItPmRkYi5jdXJzb3JbcGlwZV0pOwo+ID4gKwo+ID4gKwkJaWYgKChwX3dtLT53bVts ZXZlbF0uY3Vyc29yX3Jlc19iID4gZGRiX2Jsb2NrcykgfHwKPiA+ICsJCQkocF93bS0+d21bbGV2 ZWxdLmN1cnNvcl9yZXNfbCA+IDMxKSkKPiA+ICsJCQlwX3dtLT53bVtsZXZlbF0uY3Vyc29yX2Vu ID0gZmFsc2U7Cj4gPiArCj4gPiArCQl0ZW1wIHw9IHBfd20tPndtW2xldmVsXS5jdXJzb3JfcmVz X2wgPDwgUExBTkVfV01fTElORVNfU0hJRlQ7Cj4gPiArCQl0ZW1wIHw9IHBfd20tPndtW2xldmVs XS5jdXJzb3JfcmVzX2I7Cj4gPiArCj4gPiArCQlpZiAocF93bS0+d21bbGV2ZWxdLmN1cnNvcl9l bikKPiA+ICsJCQl0ZW1wIHw9IFBMQU5FX1dNX0VOOwo+ID4gKwo+ID4gKwkJci0+Y3Vyc29yW3Bp cGVdW2xldmVsXSA9IHRlbXA7Cj4gPiArCQkvKiBVc2UgdGhlIExQMCBXTSB2YWx1ZSBmb3IgdHJh bnNpdGlvbiBXTSBmb3Igbm93LiAqLwo+ID4gKwkJaWYgKGxldmVsID09IDApCj4gPiArCQkJci0+ Y3Vyc29yX3RyYW5zW3BpcGVdID0gdGVtcDsKPiA+ICsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyLT53 bV9saW5ldGltZVtwaXBlXSA9IHBfd20tPmxpbmV0aW1lOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0 aWMgdm9pZCBza2xfd3JpdGVfd21fdmFsdWVzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwKPiA+ICsJCQkJc3RydWN0IHNrbF93bV92YWx1ZXMgKm5ldykKPiAKPiBjb25zdAo+IAo+ ID4gK3sKPiA+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRldl9wcml2LT5kZXY7Cj4gPiAr CXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjOwo+ID4gKwlpbnQgaSwgbGV2ZWwsIG1heF9sZXZlbCA9 IGlsa193bV9tYXhfbGV2ZWwoZGV2KTsKPiA+ICsJZW51bSBwaXBlIHBpcGU7Cj4gCj4gTW9yZSBz dHVmZiB0aGF0IGNvdWxkIGxpdmUgaW4gYSBuYXJyb3dlciBzY29wZS4KPiAKPiA+ICsKPiA+ICsJ bGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGJh c2UuaGVhZCkgewo+ID4gKwkJcGlwZSA9IGNydGMtPnBpcGU7Cj4gPiArCQlpZiAobmV3LT5kaXJ0 eVtwaXBlXSkgewo+ID4gKwkJCUk5MTVfV1JJVEUoUElQRV9XTV9MSU5FVElNRShwaXBlKSwKPiA+ ICsJCQkJCW5ldy0+d21fbGluZXRpbWVbcGlwZV0pOwo+ID4gKwo+ID4gKwkJCWZvciAobGV2ZWwg PSAwOyBsZXZlbCA8PSBtYXhfbGV2ZWw7IGxldmVsKyspIHsKPiA+ICsJCQkJZm9yIChpID0gMDsg aSA8IGludGVsX251bV9wbGFuZXMoY3J0Yyk7IGkrKykKPiA+ICsJCQkJCUk5MTVfV1JJVEUoUExB TkVfV00ocGlwZSwgaSwgbGV2ZWwpLAo+ID4gKwkJCQkJCW5ldy0+cGxhbmVbcGlwZV1baV1bbGV2 ZWxdKTsKPiA+ICsJCQkJSTkxNV9XUklURShDVVJfV00ocGlwZSwgbGV2ZWwpLAo+ID4gKwkJCQkJ bmV3LT5jdXJzb3JbcGlwZV1bbGV2ZWxdKTsKPiA+ICsJCQl9Cj4gPiArCQkJZm9yIChpID0gMDsg aSA8IGludGVsX251bV9wbGFuZXMoY3J0Yyk7IGkrKykKPiA+ICsJCQkJSTkxNV9XUklURShQTEFO RV9XTV9UUkFOUyhwaXBlLCBpKSwKPiA+ICsJCQkJCQluZXctPnBsYW5lX3RyYW5zW3BpcGVdW2ld KTsKPiA+ICsJCQlJOTE1X1dSSVRFKENVUl9XTV9UUkFOUyhwaXBlKSwgbmV3LT5jdXJzb3JfdHJh bnNbcGlwZV0pOwo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiArCWRldl9wcml2LT53bS5za2xf aHcgPSAqbmV3Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgYm9vbCBza2xfdXBkYXRlX3BpcGVf d20oc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ID4gKwkJCSAgICAgICBzdHJ1Y3Qgc2tsX3BpcGVf d21fcGFyYW1ldGVycyAqcGFyYW1zLAo+ID4gKwkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfd21fY29u ZmlnICpjb25maWcsCj4gPiArCQkJICAgICAgIHN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKmRk YiwgLyogb3V0ICovCj4gPiArCQkJICAgICAgIHN0cnVjdCBza2xfcGlwZV93bSAqcGlwZV93bSAv KiBvdXQgKi8pCj4gPiArewo+ID4gKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRv X2ludGVsX2NydGMoY3J0Yyk7Cj4gPiArCj4gPiArCXNrbF9jb21wdXRlX3dtX3BpcGVfcGFyYW1l dGVycyhjcnRjLCBwYXJhbXMpOwo+ID4gKwlza2xfY29tcHV0ZV9waXBlX3dtKGNydGMsIGRkYiwg cGFyYW1zLCBwaXBlX3dtKTsKPiA+ICsKPiA+ICsJaWYgKCFtZW1jbXAoJmludGVsX2NydGMtPndt LnNrbF9hY3RpdmUsIHBpcGVfd20sIHNpemVvZigqcGlwZV93bSkpKQo+ID4gKwkJcmV0dXJuIGZh bHNlOwo+ID4gKwo+ID4gKwlpbnRlbF9jcnRjLT53bS5za2xfYWN0aXZlID0gKnBpcGVfd207Cj4g PiArCXJldHVybiB0cnVlOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBza2xfdXBkYXRl X290aGVyX3BpcGVfd20oc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiA+ICsJCQkJICAgICBzdHJ1 Y3QgZHJtX2NydGMgKmNydGMsCj4gPiArCQkJCSAgICAgc3RydWN0IGludGVsX3dtX2NvbmZpZyAq Y29uZmlnLAo+ID4gKwkJCQkgICAgIHN0cnVjdCBza2xfd21fdmFsdWVzICpyKQo+ID4gK3sKPiA+ ICsJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGM7Cj4gPiArCXN0cnVjdCBpbnRlbF9jcnRj ICp0aGlzX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwo+ID4gKwlzdHJ1Y3Qgc2tsX3BpcGVf d21fcGFyYW1ldGVycyBwYXJhbXM7Cj4gPiArCXN0cnVjdCBza2xfcGlwZV93bSBwaXBlX3dtOwo+ IAo+IE1vcmUgc3R1ZmYgdGhhdCBjYW4gYmUgbW92ZWQgdG8gYSBuYXJyb3dlciBzY29wZS4KPiAK PiBTaG91bGQgdGhlc2UgYmUgemVybyBpbml0aWFsaXpkPyBBdCBsZWFzdCB0aGUgd2F5IHRoZSBp bGsgY29kZSB3b3Jrcwo+IGlzIHRoYXQgbW9zdCBzdHJ1Y3R1cmVzIG5lZWQgemVybyBpbml0aWFs aXphdGlvbiB0byBhdm9pZCBjb25zdWx0aW5nCj4gc3RhY2sgZ2FyYmFnZSBzb21ld2hlcmUgZG93 biB0aGUgbGluZS4KPiAKPiA+ICsKPiA+ICsJLyoKPiA+ICsJICogSWYgdGhlIFdNIHVwZGF0ZSBo YXNuJ3QgY2hhbmdlZCB0aGUgYWxsb2NhdGlvbiBmb3IgdGhpc19jcnRjICh0aGUKPiA+ICsJICog Y3J0YyB3ZSBhcmUgY3VycmVudGx5IGNvbXB1dGluZyB0aGUgbmV3IFdNIHZhbHVlcyBmb3IpLCBv dGhlcgo+ID4gKwkgKiBlbmFibGVkIGNydGNzIHdpbGwga2VlcCB0aGUgc2FtZSBhbGxvY2F0aW9u IGFuZCB3ZSBkb24ndCBuZWVkIHRvCj4gPiArCSAqIHJlY29tcHV0ZSBhbnl0aGluZyBmb3IgdGhl bS4KPiA+ICsJICovCj4gPiArCWlmICghc2tsX2RkYl9hbGxvY2F0aW9uX2NoYW5nZWQoJnItPmRk YiwgdGhpc19jcnRjKSkKPiA+ICsJCXJldHVybjsKPiA+ICsKPiA+ICsJLyoKPiA+ICsJICogT3Ro ZXJ3aXNlLCBiZWNhdXNlIG9mIHRoaXNfY3J0YyBiZWluZyBmcmVzaGx5IGVuYWJsZWQvZGlzYWJs ZWQsIHRoZQo+ID4gKwkgKiBvdGhlciBhY3RpdmUgcGlwZXMgbmVlZCBuZXcgRERCIGFsbG9jYXRp b24gYW5kIFdNIHZhbHVlcy4KPiA+ICsJICovCj4gPiArCWxpc3RfZm9yX2VhY2hfZW50cnkoaW50 ZWxfY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LAo+ID4gKwkJCQliYXNlLmhlYWQp IHsKPiAKPiBOb3Qgc3VyZSBob3cgdGhlIGxvY2tpbmcgaXMgcGxhbm5lZCBoZXJlLiBJbiB0aGUg aWxrIHdtIHBhdGNoZXMgdGhhdCBhcmUKPiBzdGlsbCBwZW5kaW5nIEknbSBhZGRpbmcgYSB3bS5t dXRleCB3aGljaCBtaWdodCBmaXQgdGhlIGJpbGwuIE90aGVyd2lzZQo+IHdlJ3JlIGdvaW5nIHRv IG5lZWQgdG8gbWFrZSBzdXJlIHdlIGhhdmUgYWxsIHRoZSBjcnRjIGxvY2tzIGhlbGQgaGVyZS4K PiAKPiBBbHNvIGlmIG11bHRpcGxlIHBpcGVzIGFyZSBhY3RpdmUgd2Ugc3VyZWx5IGNhbid0IGp1 c3QgZ28gY2hhbmdpbmcgdGhlCj4gRERCIGFsbG9jYXRpb24gd2l0aG91dCBjb25zaWRlcmluZyB0 aGUgZmFjdCB0aGF0IHZibGFua3MgZm9yIGFsbCBwaXBlcwo+IGRvbid0IG9jY3VyIGF0IHRoZSBz YW1lIHRpbWUuIFNvIHNvbWUga2luZCBvZiBoZWF2eSBoYW5kZWQKPiBzeW5jaHJvbml6YXRpb24g aXMgbmVlZGVkIHRvIG1ha2Ugc3VyZSBub25lIG9mIHRoZSBEREIgYWxsb2NhdGlvbnMKPiBvdmVy bGFwIGV2ZW4gZm9yIGEgc2hvcnQgcGVyaW9kIG9mIHRpbWUuCj4gCj4gPiArCQlib29sIHdtX2No YW5nZWQ7Cj4gPiArCj4gPiArCQlpZiAodGhpc19jcnRjLT5waXBlID09IGludGVsX2NydGMtPnBp cGUpCj4gPiArCQkJY29udGludWU7Cj4gPiArCj4gPiArCQlpZiAoIWludGVsX2NydGMtPmFjdGl2 ZSkKPiA+ICsJCQljb250aW51ZTsKPiA+ICsKPiA+ICsJCXdtX2NoYW5nZWQgPSBza2xfdXBkYXRl X3BpcGVfd20oJmludGVsX2NydGMtPmJhc2UsCj4gPiArCQkJCQkJJnBhcmFtcywgY29uZmlnLAo+ ID4gKwkJCQkJCSZyLT5kZGIsICZwaXBlX3dtKTsKPiA+ICsKPiA+ICsJCS8qCj4gPiArCQkgKiBJ ZiB3ZSBlbmQgdXAgcmUtY29tcHV0aW5nIHRoZSBvdGhlciBwaXBlIFdNIHZhbHVlcywgaXQncwo+ ID4gKwkJICogYmVjYXVzZSBpdCB3YXMgcmVhbGx5IG5lZWRlZCwgc28gd2UgZXhwZWN0IHRoZSBX TSB2YWx1ZXMgdG8KPiA+ICsJCSAqIGJlIGRpZmZlcmVudC4KPiA+ICsJCSAqLwo+ID4gKwkJV0FS Tl9PTighd21fY2hhbmdlZCk7Cj4gPiArCj4gPiArCQlza2xfY29tcHV0ZV93bV9yZXN1bHRzKGRl diwgJnBhcmFtcywgJnBpcGVfd20sIHIsIGludGVsX2NydGMpOwo+ID4gKwkJci0+ZGlydHlbaW50 ZWxfY3J0Yy0+cGlwZV0gPSB0cnVlOwo+ID4gKwl9Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2 b2lkIHNrbF91cGRhdGVfd20oc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ID4gK3sKPiA+ICsJc3Ry dWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwo+ID4gKwlz dHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2Owo+ID4gKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ID4gKwlzdHJ1Y3Qgc2tsX3Bp cGVfd21fcGFyYW1ldGVycyBwYXJhbXMgPSB7fTsKPiA+ICsJc3RydWN0IHNrbF93bV92YWx1ZXMg KnJlc3VsdHMgPSAmZGV2X3ByaXYtPndtLnNrbF9yZXN1bHRzOwo+ID4gKwlzdHJ1Y3Qgc2tsX3Bp cGVfd20gcGlwZV93bSA9IHt9Owo+ID4gKwlzdHJ1Y3QgaW50ZWxfd21fY29uZmlnIGNvbmZpZyA9 IHt9Owo+ID4gKwo+ID4gKwltZW1zZXQocmVzdWx0cywgMCwgc2l6ZW9mKCpyZXN1bHRzKSk7Cj4g PiArCj4gPiArCXNrbF9jb21wdXRlX3dtX2dsb2JhbF9wYXJhbWV0ZXJzKGRldiwgJmNvbmZpZyk7 Cj4gPiArCj4gPiArCWlmICghc2tsX3VwZGF0ZV9waXBlX3dtKGNydGMsICZwYXJhbXMsICZjb25m aWcsCj4gPiArCQkJCSZyZXN1bHRzLT5kZGIsICZwaXBlX3dtKSkKPiA+ICsJCXJldHVybjsKPiA+ ICsKPiA+ICsJc2tsX2NvbXB1dGVfd21fcmVzdWx0cyhkZXYsICZwYXJhbXMsICZwaXBlX3dtLCBy ZXN1bHRzLCBpbnRlbF9jcnRjKTsKPiA+ICsJcmVzdWx0cy0+ZGlydHlbaW50ZWxfY3J0Yy0+cGlw ZV0gPSB0cnVlOwo+ID4gKwo+ID4gKwlza2xfdXBkYXRlX290aGVyX3BpcGVfd20oZGV2LCBjcnRj LCAmY29uZmlnLCByZXN1bHRzKTsKPiA+ICsJc2tsX3dyaXRlX3dtX3ZhbHVlcyhkZXZfcHJpdiwg cmVzdWx0cyk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkCj4gPiArc2tsX3VwZGF0ZV9z cHJpdGVfd20oc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywK PiA+ICsJCSAgICAgdWludDMyX3Qgc3ByaXRlX3dpZHRoLCB1aW50MzJfdCBzcHJpdGVfaGVpZ2h0 LAo+ID4gKwkJICAgICBpbnQgcGl4ZWxfc2l6ZSwgYm9vbCBlbmFibGVkLCBib29sIHNjYWxlZCkK PiA+ICt7Cj4gPiArCXN0cnVjdCBpbnRlbF9wbGFuZSAqaW50ZWxfcGxhbmUgPSB0b19pbnRlbF9w bGFuZShwbGFuZSk7Cj4gPiArCj4gPiArCWludGVsX3BsYW5lLT53bS5lbmFibGVkID0gZW5hYmxl ZDsKPiA+ICsJaW50ZWxfcGxhbmUtPndtLnNjYWxlZCA9IHNjYWxlZDsKPiA+ICsJaW50ZWxfcGxh bmUtPndtLmhvcml6X3BpeGVscyA9IHNwcml0ZV93aWR0aDsKPiA+ICsJaW50ZWxfcGxhbmUtPndt LnZlcnRfcGl4ZWxzID0gc3ByaXRlX2hlaWdodDsKPiA+ICsJaW50ZWxfcGxhbmUtPndtLmJ5dGVz X3Blcl9waXhlbCA9IHBpeGVsX3NpemU7Cj4gPiArCj4gPiArCXNrbF91cGRhdGVfd20oY3J0Yyk7 Cj4gPiArfQo+ID4gKwo+ID4gIHN0YXRpYyB2b2lkIGlsa191cGRhdGVfd20oc3RydWN0IGRybV9j cnRjICpjcnRjKQo+ID4gIHsKPiA+ICAJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0 b19pbnRlbF9jcnRjKGNydGMpOwo+ID4gQEAgLTc0NjQsNiArNzg4NSw4IEBAIHZvaWQgaW50ZWxf aW5pdF9wbShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ID4gIAkJc2tsX3NldHVwX3dtX2xhdGVu Y3koZGV2KTsKPiA+ICAKPiA+ICAJCWRldl9wcml2LT5kaXNwbGF5LmluaXRfY2xvY2tfZ2F0aW5n ID0gZ2VuOV9pbml0X2Nsb2NrX2dhdGluZzsKPiA+ICsJCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0 ZV93bSA9IHNrbF91cGRhdGVfd207Cj4gPiArCQlkZXZfcHJpdi0+ZGlzcGxheS51cGRhdGVfc3By aXRlX3dtID0gc2tsX3VwZGF0ZV9zcHJpdGVfd207Cj4gPiAgCX0gZWxzZSBpZiAoSEFTX1BDSF9T UExJVChkZXYpKSB7Cj4gPiAgCQlpbGtfc2V0dXBfd21fbGF0ZW5jeShkZXYpOwo+ID4gIAo+ID4g LS0gCj4gPiAxLjguMy4xCj4gPiAKPiA+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCj4gPiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4gPiBJbnRlbC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gPiBodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cj4gCj4gLS0gCj4gVmlsbGUgU3lyasOkbMOkCj4gSW50 ZWwgT1RDCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCklu dGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==