From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v3 2/2] drm/i915: Switch to level-based DDB allocation algorithm (v4) Date: Tue, 11 Dec 2018 19:17:33 +0200 Message-ID: <20181211171733.GY9144@intel.com> References: <20181211170346.6608-1-matthew.d.roper@intel.com> <20181211170346.6608-2-matthew.d.roper@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id 84AEF6E2DE for ; Tue, 11 Dec 2018 17:17:37 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20181211170346.6608-2-matthew.d.roper@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Matt Roper Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCBEZWMgMTEsIDIwMTggYXQgMDk6MDM6NDZBTSAtMDgwMCwgTWF0dCBSb3BlciB3cm90 ZToKPiBUaGUgRERCIGFsbG9jYXRpb24gYWxnb3JpdGhtIGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBk cml2ZXIgZ3JhbnRzIGVhY2gKPiBwbGFuZSBhIHZlcnkgc21hbGwgbWluaW11bSBhbGxvY2F0aW9u IG9mIEREQiBibG9ja3MgYW5kIHRoZW4gZGl2aWVzIHVwCj4gYWxsIG9mIHRoZSByZW1haW5pbmcg YmxvY2tzIGJhc2VkIG9uIHRoZSBwZXJjZW50YWdlIG9mIHRoZSB0b3RhbCBkYXRhCj4gcmF0ZSB0 aGF0IHRoZSBwbGFuZSBtYWtlcyB1cC4gIEl0IHR1cm5zIG91dCB0aGF0IHRoaXMgcHJvcG9ydGlv bmFsCj4gYWxsb2NhdGlvbiBhcHByb2FjaCBpcyBvdmVybHktZ2VuZXJvdXMgd2l0aCB0aGUgbGFy Z2VyIHBsYW5lcyBhbmQgY2FuCj4gbGVhdmUgdmVyeSBzbWFsbCBwbGFuZXMgd3Rob3V0IGEgYmln IGVub3VnaCBhbGxvY2F0aW9uIHRvIGV2ZW4gaGl0IHRoZWlyCj4gbGV2ZWwgMCB3YXRlcm1hcmsg cmVxdWlyZW1lbnRzIChlc3BlY2lhbGx5IG9uIEFQTCwgd2hpY2ggaGFzIGEgc21hbGxlcgo+IERE QiBpbiBnZW5lcmFsIHRoYW4gb3RoZXIgZ2VuOSBwbGF0Zm9ybXMpLiAgT3IgdGhlcmUgY2FuIGJl IHNpdHVhdGlvbnMKPiB3aGVyZSB0aGUgc21hbGxlc3QgcGxhbmVzIGhpdCBhIGxvd2VyIHdhdGVy bWFyayBsZXZlbCB0aGFuIHRoZXkgc2hvdWxkCj4gaGF2ZSBiZWVuIGFibGUgdG8gaGl0IHdpdGgg YSBtb3JlIGVxdWl0YWJsZSBkaXZpc2lvbiBvZiBEREIgYmxvY2tzLCB0aHVzCj4gbGltaXRpbmcg dGhlIG92ZXJhbGwgc3lzdGVtIHNsZWVwIHN0YXRlIHRoYXQgY2FuIGJlIGFjaGlldmVkLgo+IAo+ IFRoZSBic3BlYyBub3cgZGVzY3JpYmVzIGFuIGFsdGVybmF0ZSBhbGdvcml0aG0gdGhhdCBjYW4g YmUgdXNlZCB0bwo+IG92ZXJjb21lIHRoZXNlIHR5cGVzIG9mIGlzc3Vlcy4gIFdpdGggdGhlIG5l dyBhbGdvcml0aG0sIHdlIGNhbGN1bGF0ZQo+IGFsbCBwbGFuZSB3YXRlcm1hcmsgdmFsdWVzIGZv ciBhbGwgd20gbGV2ZWxzIGZpcnN0LCB0aGVuIGdvIGJhY2sgYW5kCj4gcGFydGl0aW9uIGEgcGlw ZSdzIEREQiBzcGFjZSBzZWNvbmQuICBUaGUgRERCIGFsbG9jYXRpb24gd2lsbCBjYWxjdWxhdGUK PiB3aGF0IHRoZSBoaWdoZXN0IHdhdGVybWFyayBsZXZlbCB0aGF0IGNhbiBiZSBhY2hpZXZlZCBv biAqYWxsKiBhY3RpdmUKPiBwbGFuZXMsIGFuZCB0aGVuIGdyYW50IHRoZSBibG9ja3MgbmVjZXNz YXJ5IHRvIGhpdCB0aGF0IGxldmVsIHRvIGVhY2gKPiBwbGFuZS4gIEFueSByZW1haW5pbmcgYmxv Y2tzIGFyZSB0aGVuIGRpdmlkZWQgdXAgcHJvcG9ydGlvbmFsbHkKPiBhY2NvcmRpbmcgdG8gZGF0 YSByYXRlLCBzaW1pbGFyIHRvIHRoZSBvbGQgYWxnb3JpdGhtLgo+IAo+IFRoZXJlIHdhcyBhIHBy ZXZpb3VzIGF0dGVtcHQgdG8gaW1wbGVtZW50IHRoaXMgYWxnb3JpdGhtIGEgY291cGxlIHllYXJz Cj4gYWdvIGluIGJiOWQ4NWY2ZTlkICgiZHJtL2k5MTUvc2tsOiBOZXcgZGRiIGFsbG9jYXRpb24g YWxnb3JpdGhtIiksIGJ1dAo+IHNvbWUgcmVncmVzc2lvbnMgd2VyZSByZXBvcnRlZCwgdGhlIHBh dGNoIHdhcyByZXZlcnRlZCwgYW5kIG5vYm9keQo+IGV2ZXIgZ290IGFyb3VuZCB0byBmaWd1cmlu ZyBvdXQgZXhhY3RseSB3aGVyZSB0aGUgYnVnIHdhcyBpbiB0aGF0Cj4gdmVyc2lvbi4gIE91ciB3 YXRlcm1hcmsgY29kZSBoYXMgZXZvbHZlZCBzaWduaWZpY2FudGx5IGluIHRoZSBtZWFudGltZSwK PiBidXQgd2UncmUgc3RpbGwgZ2V0dGluZyBidWcgcmVwb3J0cyBjYXVzZWQgYnkgdGhlIHVuZmFp ciBwcm9wb3J0aW9uYWwKPiBhbGdvcml0aG0sIHNvIGxldCdzIGdpdmUgdGhpcyBhbm90aGVyIHNo b3QuCj4gCj4gdjI6Cj4gIC0gTWFrZSBzdXJlIGN1cnNvciBhbGxvY2F0aW9uIHN0YXlzIGNvbnN0 YW50IGFuZCBmaXhlZCBhdCB0aGUgZW5kIG9mCj4gICAgdGhlIHBpcGUgYWxsb2NhdGlvbi4KPiAg LSBGaXggc29tZSB3YXRlcm1hcmsgbGV2ZWwgaXRlcmF0b3JzIHRoYXQgd2VyZW4ndCBoYW5kbGlu ZyB0aGUgbWF4Cj4gICAgbGV2ZWwuCj4gCj4gdjM6Cj4gIC0gRW5zdXJlIHdlIGRvbid0IGxlYXZl IGFueSBEREIgYmxvY2tzIHVudXNlZCBieSB1c2luZyBESVZfUk9VTkRfVVArbWluCj4gICAgdG8g Y2FsY3VsYXRlIHRoZSBleHRyYSBibG9ja3MgZm9yIGVhY2ggcGxhbmUuICAoVmlsbGUpCj4gIC0g UmVwbGFjZSBhIHdoaWxlKCkgbG9vcCB3aXRoIGEgZm9yKCkgbG9vcCB0byBiZSBtb3JlIGNvbnNp c3RlbnQgd2l0aAo+ICAgIHN1cnJvdW5kaW5nIGNvZGUuICAoVmlsbGUpCj4gIC0gQ2xlYW4gdW5h dHRhaW5hYmxlIHdhdGVybWFyayBsZXZlbHMgd2l0aCBtZW1zZXQgcmF0aGVyIHRoYW4gZGlyZWN0 bHkKPiAgICBjbGVhcmluZyB0aGUgbWVtYmVyIGZpZWxkcy4gIEFsc28gZG8gdGhlIHNhbWUgZm9y IHRoZSB0cmFuc2l0aW9uCj4gICAgd2F0ZXJtYXJrIHZhbHVlcyBpZiB0aGV5IGNhbid0IGJlIGFj aGlldmVkLiAgKFZpbGxlKQo+ICAtIERyb3AgbWluX2Rpc3BfYnVmX25lZWRlZCBjYWxjdWxhdGlv bnMgaW4gc2tsX2NvbXB1dGVfcGxhbmVfd20oKSBzaW5jZQo+ICAgIHRoZSByZXN1bHRzIGFyZSBu byBsb25nZXIgbmVlZGVkIG9yIHVzZWQuICAoVmlsbGUpCj4gIC0gRHJvcCBza2xfbGF0ZW5jeVsw XSAhPSAwIHNhbml0eSBjaGVjazsgYm90aCB3YXRlcm1hcmsgbWV0aG9kcyBhbHJlYWR5Cj4gICAg YWNjb3VudCBmb3IgYW4gaW52YWxpZCAwIGxhdGVuY3kgYnkgcmV0dXJuaW5nIEZQXzE2XzE2X01B WC4gIChWaWxsZSkKPiAKPiB2NDoKPiAgLSBCcmVhayBEREIgYWxsb2NhdGlvbiBsb29wIHdoZW4g dG90YWxfZGF0YV9yYXRlPTAgcmF0aGVyIHRoYW4KPiAgICBhbGxvY19zaXplPTAuICBJZiB0b3Rh bF9kYXRhX3JhdGUgaGFzIGRyb3BwZWQgdG8gMCwgYWxsIHJlbWFpbmluZwo+ICAgIHBsYW5lcyBh cmUgZGlzYWJsZWQsIHdoaWNoIGlzbid0IHRydWUgZm9yIGFsbG9jX3NpemUgKHdlIG1pZ2h0IGp1 c3QKPiAgICBoYXZlIG5vdCBoYWQgYW55IHJlbWFpbmluZyBibG9ja3MgdG8gaGFuZCBvdXQpLiAg UGx1cwo+ICAgIHRvdGFsX2RhdGFfcmF0ZT0wIGlzIHRoZSBjYXNlIHdlIG5lZWQgdG8gYXZvaWQg dG8gYSBwcmV2ZW50IGEKPiAgICBkaXYtYnktMC4gIChWaWxsZSkKPiAgLSBzL0RJVl9ST1VORF9V UC9ESVY2NF9VNjRfUk9VTkRfVVAvIHRvIHByZXZlbnQgMzItYml0IGJyZWFrYWdlIChWaWxsZSkK PiAKPiBDYzogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4K PiBCdWd6aWxsYTogaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9 MTA1NDU4Cj4gU2lnbmVkLW9mZi1ieTogTWF0dCBSb3BlciA8bWF0dGhldy5kLnJvcGVyQGludGVs LmNvbT4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYyB8IDM4MSArKysr KysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gIDEgZmlsZSBjaGFuZ2VkLCAx MzggaW5zZXJ0aW9ucygrKSwgMjQzIGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf cG0uYwo+IGluZGV4IGJmOTcwY2Y3YjhhNS4uM2JkZDhmYTQwZWFjIDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9wbS5jCj4gQEAgLTQzMDEsMTAyICs0MzAxLDYgQEAgaWNsX2dldF90b3RhbF9yZWxh dGl2ZV9kYXRhX3JhdGUoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmludGVsX2NzdGF0ZSwKPiAg CXJldHVybiB0b3RhbF9kYXRhX3JhdGU7Cj4gIH0KPiAgCj4gLXN0YXRpYyB1aW50MTZfdAo+IC1z a2xfZGRiX21pbl9hbGxvYyhjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0 YXRlLCBjb25zdCBpbnQgcGxhbmUpCj4gLXsKPiAtCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi ID0gcGxhbmVfc3RhdGUtPmJhc2UuZmI7Cj4gLQl1aW50MzJfdCBzcmNfdywgc3JjX2g7Cj4gLQl1 aW50MzJfdCBtaW5fc2NhbmxpbmVzID0gODsKPiAtCXVpbnQ4X3QgcGxhbmVfYnBwOwo+IC0KPiAt CWlmIChXQVJOX09OKCFmYikpCj4gLQkJcmV0dXJuIDA7Cj4gLQo+IC0JLyogRm9yIHBhY2tlZCBm b3JtYXRzLCBhbmQgdXYtcGxhbmUsIHJldHVybiAwICovCj4gLQlpZiAocGxhbmUgPT0gMSAmJiBm Yi0+Zm9ybWF0LT5mb3JtYXQgIT0gRFJNX0ZPUk1BVF9OVjEyKQo+IC0JCXJldHVybiAwOwo+IC0K PiAtCS8qIEZvciBOb24gWS10aWxlIHJldHVybiA4LWJsb2NrcyAqLwo+IC0JaWYgKGZiLT5tb2Rp ZmllciAhPSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCAmJgo+IC0JICAgIGZiLT5tb2RpZmllciAh PSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQgJiYKPiAtCSAgICBmYi0+bW9kaWZpZXIgIT0gSTkx NV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTICYmCj4gLQkgICAgZmItPm1vZGlmaWVyICE9IEk5MTVf Rk9STUFUX01PRF9ZZl9USUxFRF9DQ1MpCj4gLQkJcmV0dXJuIDg7Cj4gLQo+IC0JLyoKPiAtCSAq IFNyYyBjb29yZGluYXRlcyBhcmUgYWxyZWFkeSByb3RhdGVkIGJ5IDI3MCBkZWdyZWVzIGZvcgo+ IC0JICogdGhlIDkwLzI3MCBkZWdyZWUgcGxhbmUgcm90YXRpb24gY2FzZXMgKHRvIG1hdGNoIHRo ZQo+IC0JICogR1RUIG1hcHBpbmcpLCBoZW5jZSBubyBuZWVkIHRvIGFjY291bnQgZm9yIHJvdGF0 aW9uIGhlcmUuCj4gLQkgKi8KPiAtCXNyY193ID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRl LT5iYXNlLnNyYykgPj4gMTY7Cj4gLQlzcmNfaCA9IGRybV9yZWN0X2hlaWdodCgmcGxhbmVfc3Rh dGUtPmJhc2Uuc3JjKSA+PiAxNjsKPiAtCj4gLQkvKiBIYWx2ZSBVViBwbGFuZSB3aWR0aCBhbmQg aGVpZ2h0IGZvciBOVjEyICovCj4gLQlpZiAocGxhbmUgPT0gMSkgewo+IC0JCXNyY193IC89IDI7 Cj4gLQkJc3JjX2ggLz0gMjsKPiAtCX0KPiAtCj4gLQlwbGFuZV9icHAgPSBmYi0+Zm9ybWF0LT5j cHBbcGxhbmVdOwo+IC0KPiAtCWlmIChkcm1fcm90YXRpb25fOTBfb3JfMjcwKHBsYW5lX3N0YXRl LT5iYXNlLnJvdGF0aW9uKSkgewo+IC0JCXN3aXRjaCAocGxhbmVfYnBwKSB7Cj4gLQkJY2FzZSAx Ogo+IC0JCQltaW5fc2NhbmxpbmVzID0gMzI7Cj4gLQkJCWJyZWFrOwo+IC0JCWNhc2UgMjoKPiAt CQkJbWluX3NjYW5saW5lcyA9IDE2Owo+IC0JCQlicmVhazsKPiAtCQljYXNlIDQ6Cj4gLQkJCW1p bl9zY2FubGluZXMgPSA4Owo+IC0JCQlicmVhazsKPiAtCQljYXNlIDg6Cj4gLQkJCW1pbl9zY2Fu bGluZXMgPSA0Owo+IC0JCQlicmVhazsKPiAtCQlkZWZhdWx0Ogo+IC0JCQlXQVJOKDEsICJVbnN1 cHBvcnRlZCBwaXhlbCBkZXB0aCAldSBmb3Igcm90YXRpb24iLAo+IC0JCQkgICAgIHBsYW5lX2Jw cCk7Cj4gLQkJCW1pbl9zY2FubGluZXMgPSAzMjsKPiAtCQl9Cj4gLQl9Cj4gLQo+IC0JcmV0dXJu IERJVl9ST1VORF9VUCgoNCAqIHNyY193ICogcGxhbmVfYnBwKSwgNTEyKSAqIG1pbl9zY2FubGlu ZXMvNCArIDM7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkCj4gLXNrbF9kZGJfY2FsY19taW4oY29u c3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwgaW50IG51bV9hY3RpdmUsCj4gLQkJ IHVpbnQxNl90ICptaW5pbXVtLCB1aW50MTZfdCAqdXZfbWluaW11bSkKPiAtewo+IC0JY29uc3Qg c3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcHN0YXRlOwo+IC0Jc3RydWN0IGRybV9wbGFuZSAqcGxh bmU7Cj4gLQo+IC0JZHJtX2F0b21pY19jcnRjX3N0YXRlX2Zvcl9lYWNoX3BsYW5lX3N0YXRlKHBs YW5lLCBwc3RhdGUsICZjc3RhdGUtPmJhc2UpIHsKPiAtCQllbnVtIHBsYW5lX2lkIHBsYW5lX2lk ID0gdG9faW50ZWxfcGxhbmUocGxhbmUpLT5pZDsKPiAtCQlzdHJ1Y3QgaW50ZWxfcGxhbmVfc3Rh dGUgKnBsYW5lX3N0YXRlID0gdG9faW50ZWxfcGxhbmVfc3RhdGUocHN0YXRlKTsKPiAtCj4gLQkJ aWYgKHBsYW5lX2lkID09IFBMQU5FX0NVUlNPUikKPiAtCQkJY29udGludWU7Cj4gLQo+IC0JCS8q IHNsYXZlIHBsYW5lIG11c3QgYmUgaW52aXNpYmxlIGFuZCBjYWxjdWxhdGVkIGZyb20gbWFzdGVy ICovCj4gLQkJaWYgKCFwc3RhdGUtPnZpc2libGUgfHwgV0FSTl9PTihwbGFuZV9zdGF0ZS0+c2xh dmUpKQo+IC0JCQljb250aW51ZTsKPiAtCj4gLQkJaWYgKCFwbGFuZV9zdGF0ZS0+bGlua2VkX3Bs YW5lKSB7Cj4gLQkJCW1pbmltdW1bcGxhbmVfaWRdID0gc2tsX2RkYl9taW5fYWxsb2MocGxhbmVf c3RhdGUsIDApOwo+IC0JCQl1dl9taW5pbXVtW3BsYW5lX2lkXSA9Cj4gLQkJCQlza2xfZGRiX21p bl9hbGxvYyhwbGFuZV9zdGF0ZSwgMSk7Cj4gLQkJfSBlbHNlIHsKPiAtCQkJZW51bSBwbGFuZV9p ZCB5X3BsYW5lX2lkID0KPiAtCQkJCXBsYW5lX3N0YXRlLT5saW5rZWRfcGxhbmUtPmlkOwo+IC0K PiAtCQkJbWluaW11bVt5X3BsYW5lX2lkXSA9IHNrbF9kZGJfbWluX2FsbG9jKHBsYW5lX3N0YXRl LCAwKTsKPiAtCQkJbWluaW11bVtwbGFuZV9pZF0gPSBza2xfZGRiX21pbl9hbGxvYyhwbGFuZV9z dGF0ZSwgMSk7Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCW1pbmltdW1bUExBTkVfQ1VSU09SXSA9IHNr bF9jdXJzb3JfYWxsb2NhdGlvbihudW1fYWN0aXZlKTsKPiAtfQo+IC0KPiAgc3RhdGljIGludAo+ ICBza2xfYWxsb2NhdGVfcGlwZV9kZGIoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwK PiAgCQkgICAgICBzdHJ1Y3Qgc2tsX2RkYl9hbGxvY2F0aW9uICpkZGIgLyogb3V0ICovKQo+IEBA IC00NDA2LDE1ICs0MzEwLDE3IEBAIHNrbF9hbGxvY2F0ZV9waXBlX2RkYihzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqY3N0YXRlLAo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gdG9faTkxNShjcnRjLT5kZXYpOwo+ICAJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMg PSB0b19pbnRlbF9jcnRjKGNydGMpOwo+ICAJc3RydWN0IHNrbF9kZGJfZW50cnkgKmFsbG9jID0g JmNzdGF0ZS0+d20uc2tsLmRkYjsKPiAtCXVpbnQxNl90IGFsbG9jX3NpemUsIHN0YXJ0Owo+IC0J dWludDE2X3QgbWluaW11bVtJOTE1X01BWF9QTEFORVNdID0ge307Cj4gLQl1aW50MTZfdCB1dl9t aW5pbXVtW0k5MTVfTUFYX1BMQU5FU10gPSB7fTsKPiArCXN0cnVjdCBza2xfcGxhbmVfd20gKndt Owo+ICsJdWludDE2X3QgYWxsb2Nfc2l6ZSwgc3RhcnQgPSAwOwo+ICsJdWludDE2X3QgdG90YWxb STkxNV9NQVhfUExBTkVTXSA9IHt9Owo+ICsJdWludDE2X3QgdXZfdG90YWxbSTkxNV9NQVhfUExB TkVTXSA9IHt9Owo+ICAJdTY0IHRvdGFsX2RhdGFfcmF0ZTsKPiAgCWVudW0gcGxhbmVfaWQgcGxh bmVfaWQ7Cj4gIAlpbnQgbnVtX2FjdGl2ZTsKPiAgCXU2NCBwbGFuZV9kYXRhX3JhdGVbSTkxNV9N QVhfUExBTkVTXSA9IHt9Owo+ICAJdTY0IHV2X3BsYW5lX2RhdGFfcmF0ZVtJOTE1X01BWF9QTEFO RVNdID0ge307Cj4gLQl1aW50MTZfdCB0b3RhbF9taW5fYmxvY2tzID0gMDsKPiArCXVpbnQxNl90 IGJsb2NrcyA9IDA7Cj4gKwlpbnQgbGV2ZWw7Cj4gIAo+ICAJLyogQ2xlYXIgdGhlIHBhcnRpdGlv bmluZyBmb3IgZGlzYWJsZWQgcGxhbmVzLiAqLwo+ICAJbWVtc2V0KGNzdGF0ZS0+d20uc2tsLnBs YW5lX2RkYl95LCAwLCBzaXplb2YoY3N0YXRlLT53bS5za2wucGxhbmVfZGRiX3kpKTsKPiBAQCAt NDQ0NCw4MSArNDM1MCwxMzIgQEAgc2tsX2FsbG9jYXRlX3BpcGVfZGRiKHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjc3RhdGUsCj4gIAlpZiAoYWxsb2Nfc2l6ZSA9PSAwKQo+ICAJCXJldHVybiAw Owo+ICAKPiAtCXNrbF9kZGJfY2FsY19taW4oY3N0YXRlLCBudW1fYWN0aXZlLCBtaW5pbXVtLCB1 dl9taW5pbXVtKTsKPiArCS8qIEFsbG9jYXRlIGZpeGVkIG51bWJlciBvZiBibG9ja3MgZm9yIGN1 cnNvci4gKi8KPiArCXRvdGFsW1BMQU5FX0NVUlNPUl0gPSBza2xfY3Vyc29yX2FsbG9jYXRpb24o bnVtX2FjdGl2ZSk7Cj4gKwlhbGxvY19zaXplIC09IHRvdGFsW1BMQU5FX0NVUlNPUl07Cj4gKwlj c3RhdGUtPndtLnNrbC5wbGFuZV9kZGJfeVtQTEFORV9DVVJTT1JdLnN0YXJ0ID0KPiArCQlhbGxv Yy0+ZW5kIC0gdG90YWxbUExBTkVfQ1VSU09SXTsKPiArCWNzdGF0ZS0+d20uc2tsLnBsYW5lX2Rk Yl95W1BMQU5FX0NVUlNPUl0uZW5kID0gYWxsb2MtPmVuZDsKPiArCj4gKwlpZiAodG90YWxfZGF0 YV9yYXRlID09IDApCj4gKwkJcmV0dXJuIDA7Cj4gIAo+ICAJLyoKPiAtCSAqIDEuIEFsbG9jYXRl IHRoZSBtaW5pbnVtIHJlcXVpcmVkIGJsb2NrcyBmb3IgZWFjaCBhY3RpdmUgcGxhbmUKPiAtCSAq IGFuZCBhbGxvY2F0ZSB0aGUgY3Vyc29yLCBpdCBkb2Vzbid0IHJlcXVpcmUgZXh0cmEgYWxsb2Nh dGlvbgo+IC0JICogcHJvcG9ydGlvbmFsIHRvIHRoZSBkYXRhIHJhdGUuCj4gKwkgKiBGaW5kIHRo ZSBoaWdoZXN0IHdhdGVybWFyayBsZXZlbCBmb3Igd2hpY2ggd2UgY2FuIHNhdGlzZnkgdGhlIGJs b2NrCj4gKwkgKiByZXF1aXJlbWVudCBvZiBhY3RpdmUgcGxhbmVzLgo+ICAJICovCj4gKwlmb3Ig KGxldmVsID0gaWxrX3dtX21heF9sZXZlbChkZXZfcHJpdik7IGxldmVsID49IDA7IGxldmVsLS0p IHsKPiArCQlmb3JfZWFjaF9wbGFuZV9pZF9vbl9jcnRjKGludGVsX2NydGMsIHBsYW5lX2lkKSB7 Cj4gKwkJCWlmIChwbGFuZV9pZCA9PSBQTEFORV9DVVJTT1IpCj4gKwkJCQljb250aW51ZTsKPiAg Cj4gLQlmb3JfZWFjaF9wbGFuZV9pZF9vbl9jcnRjKGludGVsX2NydGMsIHBsYW5lX2lkKSB7Cj4g LQkJdG90YWxfbWluX2Jsb2NrcyArPSBtaW5pbXVtW3BsYW5lX2lkXTsKPiAtCQl0b3RhbF9taW5f YmxvY2tzICs9IHV2X21pbmltdW1bcGxhbmVfaWRdOwo+ICsJCQl3bSA9ICZjc3RhdGUtPndtLnNr bC5vcHRpbWFsLnBsYW5lc1twbGFuZV9pZF07Cj4gKwkJCWJsb2NrcyArPSB3bS0+d21bbGV2ZWxd LnBsYW5lX3Jlc19iOwo+ICsJCQlibG9ja3MgKz0gd20tPnV2X3dtW2xldmVsXS5wbGFuZV9yZXNf YjsKPiArCQl9Cj4gKwo+ICsJCWlmIChibG9ja3MgPCBhbGxvY19zaXplKSB7Cj4gKwkJCWFsbG9j X3NpemUgLT0gYmxvY2tzOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gIAl9Cj4gIAo+IC0JaWYgKHRv dGFsX21pbl9ibG9ja3MgPiBhbGxvY19zaXplKSB7Cj4gKwlpZiAobGV2ZWwgPCAwKSB7Cj4gIAkJ RFJNX0RFQlVHX0tNUygiUmVxdWVzdGVkIGRpc3BsYXkgY29uZmlndXJhdGlvbiBleGNlZWRzIHN5 c3RlbSBEREIgbGltaXRhdGlvbnMiKTsKPiAtCQlEUk1fREVCVUdfS01TKCJtaW5pbXVtIHJlcXVp cmVkICVkLyVkXG4iLCB0b3RhbF9taW5fYmxvY2tzLAo+IC0JCQkJCQkJYWxsb2Nfc2l6ZSk7Cj4g KwkJRFJNX0RFQlVHX0tNUygibWluaW11bSByZXF1aXJlZCAlZC8lZFxuIiwgYmxvY2tzLAo+ICsJ CQkgICAgICBhbGxvY19zaXplKTsKPiAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgCX0KPiAgCj4gLQlh bGxvY19zaXplIC09IHRvdGFsX21pbl9ibG9ja3M7Cj4gLQljc3RhdGUtPndtLnNrbC5wbGFuZV9k ZGJfeVtQTEFORV9DVVJTT1JdLnN0YXJ0ID0gYWxsb2MtPmVuZCAtIG1pbmltdW1bUExBTkVfQ1VS U09SXTsKPiAtCWNzdGF0ZS0+d20uc2tsLnBsYW5lX2RkYl95W1BMQU5FX0NVUlNPUl0uZW5kID0g YWxsb2MtPmVuZDsKPiAtCj4gIAkvKgo+IC0JICogMi4gRGlzdHJpYnV0ZSB0aGUgcmVtYWluaW5n IHNwYWNlIGluIHByb3BvcnRpb24gdG8gdGhlIGFtb3VudCBvZgo+IC0JICogZGF0YSBlYWNoIHBs YW5lIG5lZWRzIHRvIGZldGNoIGZyb20gbWVtb3J5Lgo+IC0JICoKPiAtCSAqIEZJWE1FOiB3ZSBt YXkgbm90IGFsbG9jYXRlIGV2ZXJ5IHNpbmdsZSBibG9jayBoZXJlLgo+ICsJICogR3JhbnQgZWFj aCBwbGFuZSB0aGUgYmxvY2tzIGl0IHJlcXVpcmVzIGF0IHRoZSBoaWdoZXN0IGFjaGlldmFibGUK PiArCSAqIHdhdGVybWFyayBsZXZlbCwgcGx1cyBhbiBleHRyYSBzaGFyZSBvZiB0aGUgbGVmdG92 ZXIgYmxvY2tzCj4gKwkgKiBwcm9wb3J0aW9uYWwgdG8gaXRzIHJlbGF0aXZlIGRhdGEgcmF0ZS4K PiAgCSAqLwo+IC0JaWYgKHRvdGFsX2RhdGFfcmF0ZSA9PSAwKQo+IC0JCXJldHVybiAwOwo+IC0K PiAtCXN0YXJ0ID0gYWxsb2MtPnN0YXJ0Owo+ICAJZm9yX2VhY2hfcGxhbmVfaWRfb25fY3J0Yyhp bnRlbF9jcnRjLCBwbGFuZV9pZCkgewo+IC0JCXU2NCBkYXRhX3JhdGUsIHV2X2RhdGFfcmF0ZTsK PiAtCQl1aW50MTZfdCBwbGFuZV9ibG9ja3MsIHV2X3BsYW5lX2Jsb2NrczsKPiArCQl1NjQgcmF0 ZTsKPiArCQl1MTYgZXh0cmE7Cj4gIAo+ICAJCWlmIChwbGFuZV9pZCA9PSBQTEFORV9DVVJTT1Ip Cj4gIAkJCWNvbnRpbnVlOwo+ICAKPiAtCQlkYXRhX3JhdGUgPSBwbGFuZV9kYXRhX3JhdGVbcGxh bmVfaWRdOwo+IC0KPiAgCQkvKgo+IC0JCSAqIGFsbG9jYXRpb24gZm9yIChwYWNrZWQgZm9ybWF0 cykgb3IgKHV2LXBsYW5lIHBhcnQgb2YgcGxhbmFyIGZvcm1hdCk6Cj4gLQkJICogcHJvbW90ZSB0 aGUgZXhwcmVzc2lvbiB0byA2NCBiaXRzIHRvIGF2b2lkIG92ZXJmbG93aW5nLCB0aGUKPiAtCQkg KiByZXN1bHQgaXMgPCBhdmFpbGFibGUgYXMgZGF0YV9yYXRlIC8gdG90YWxfZGF0YV9yYXRlIDwg MQo+ICsJCSAqIFdlJ3ZlIGFjY291bnRlZCBmb3IgYWxsIGFjdGl2ZSBwbGFuZXM7IHJlbWFpbmlu ZyBwbGFuZXMgYXJlCj4gKwkJICogYWxsIGRpc2FibGVkLgo+ICAJCSAqLwo+IC0JCXBsYW5lX2Js b2NrcyA9IG1pbmltdW1bcGxhbmVfaWRdOwo+IC0JCXBsYW5lX2Jsb2NrcyArPSBkaXY2NF91NjQo YWxsb2Nfc2l6ZSAqIGRhdGFfcmF0ZSwgdG90YWxfZGF0YV9yYXRlKTsKPiArCQlpZiAodG90YWxf ZGF0YV9yYXRlID09IDApCj4gKwkJCWJyZWFrOwo+ICAKPiAtCQkvKiBMZWF2ZSBkaXNhYmxlZCBw bGFuZXMgYXQgKDAsMCkgKi8KPiAtCQlpZiAoZGF0YV9yYXRlKSB7Cj4gLQkJCWNzdGF0ZS0+d20u c2tsLnBsYW5lX2RkYl95W3BsYW5lX2lkXS5zdGFydCA9IHN0YXJ0Owo+IC0JCQljc3RhdGUtPndt LnNrbC5wbGFuZV9kZGJfeVtwbGFuZV9pZF0uZW5kID0gc3RhcnQgKyBwbGFuZV9ibG9ja3M7Cj4g LQkJfQo+ICsJCXdtID0gJmNzdGF0ZS0+d20uc2tsLm9wdGltYWwucGxhbmVzW3BsYW5lX2lkXTsK PiAgCj4gLQkJc3RhcnQgKz0gcGxhbmVfYmxvY2tzOwo+ICsJCXJhdGUgPSBwbGFuZV9kYXRhX3Jh dGVbcGxhbmVfaWRdOwo+ICsJCWV4dHJhID0gbWluX3QodTE2LCBhbGxvY19zaXplLAo+ICsJCQkg ICAgICBESVY2NF9VNjRfUk9VTkRfVVAoYWxsb2Nfc2l6ZSAqIHJhdGUsCj4gKwkJCQkJCSB0b3Rh bF9kYXRhX3JhdGUpKTsKPiArCQl0b3RhbFtwbGFuZV9pZF0gPSB3bS0+d21bbGV2ZWxdLnBsYW5l X3Jlc19iICsgZXh0cmE7Cj4gKwkJYWxsb2Nfc2l6ZSAtPSBleHRyYTsKPiArCQl0b3RhbF9kYXRh X3JhdGUgLT0gcmF0ZTsKPiAgCj4gLQkJLyogQWxsb2NhdGUgRERCIGZvciBVViBwbGFuZSBmb3Ig cGxhbmFyIGZvcm1hdC9OVjEyICovCj4gLQkJdXZfZGF0YV9yYXRlID0gdXZfcGxhbmVfZGF0YV9y YXRlW3BsYW5lX2lkXTsKPiArCQlpZiAodG90YWxfZGF0YV9yYXRlID09IDApCj4gKwkJCWJyZWFr Owo+ICAKPiAtCQl1dl9wbGFuZV9ibG9ja3MgPSB1dl9taW5pbXVtW3BsYW5lX2lkXTsKPiAtCQl1 dl9wbGFuZV9ibG9ja3MgKz0gZGl2NjRfdTY0KGFsbG9jX3NpemUgKiB1dl9kYXRhX3JhdGUsIHRv dGFsX2RhdGFfcmF0ZSk7Cj4gKwkJcmF0ZSA9IHV2X3BsYW5lX2RhdGFfcmF0ZVtwbGFuZV9pZF07 Cj4gKwkJZXh0cmEgPSBtaW5fdCh1MTYsIGFsbG9jX3NpemUsCj4gKwkJCSAgICAgIERJVjY0X1U2 NF9ST1VORF9VUChhbGxvY19zaXplICogcmF0ZSwKPiArCQkJCQkJIHRvdGFsX2RhdGFfcmF0ZSkp Owo+ICsJCXV2X3RvdGFsW3BsYW5lX2lkXSA9IHdtLT51dl93bVtsZXZlbF0ucGxhbmVfcmVzX2Ig KyBleHRyYTsKPiArCQlhbGxvY19zaXplIC09IGV4dHJhOwo+ICsJCXRvdGFsX2RhdGFfcmF0ZSAt PSByYXRlOwo+ICsJfQo+ICsJV0FSTl9PTihhbGxvY19zaXplICE9IDAgfHwgdG90YWxfZGF0YV9y YXRlICE9IDApOwo+ICsKPiArCS8qIFNldCB0aGUgYWN0dWFsIEREQiBzdGFydC9lbmQgcG9pbnRz IGZvciBlYWNoIHBsYW5lICovCj4gKwlzdGFydCA9IGFsbG9jLT5zdGFydDsKPiArCWZvcl9lYWNo X3BsYW5lX2lkX29uX2NydGMoaW50ZWxfY3J0YywgcGxhbmVfaWQpIHsKPiArCQlzdHJ1Y3Qgc2ts X2RkYl9lbnRyeSAqcGxhbmVfYWxsb2MsICp1dl9wbGFuZV9hbGxvYzsKPiArCj4gKwkJaWYgKHBs YW5lX2lkID09IFBMQU5FX0NVUlNPUikKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCXBsYW5lX2Fs bG9jID0gJmNzdGF0ZS0+d20uc2tsLnBsYW5lX2RkYl95W3BsYW5lX2lkXTsKPiArCQl1dl9wbGFu ZV9hbGxvYyA9ICZjc3RhdGUtPndtLnNrbC5wbGFuZV9kZGJfdXZbcGxhbmVfaWRdOwo+ICAKPiAg CQkvKiBHZW4xMSsgdXNlcyBhIHNlcGFyYXRlIHBsYW5lIGZvciBVViB3YXRlcm1hcmtzICovCj4g LQkJV0FSTl9PTihJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExICYmIHV2X3BsYW5lX2Jsb2Nrcyk7 Cj4gKwkJV0FSTl9PTihJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExICYmIHV2X3RvdGFsW3BsYW5l X2lkXSk7Cj4gKwo+ICsJCS8qIExlYXZlIGRpc2FibGVkIHBsYW5lcyBhdCAoMCwwKSAqLwo+ICsJ CWlmICh0b3RhbFtwbGFuZV9pZF0pIHsKPiArCQkJcGxhbmVfYWxsb2MtPnN0YXJ0ID0gc3RhcnQ7 Cj4gKwkJCXBsYW5lX2FsbG9jLT5lbmQgPSBzdGFydCArPSB0b3RhbFtwbGFuZV9pZF07CgpUaGF0 ICs9IGlzIGtpbmRhIGVhc3kgdG8gbWlzcy4KCj4gKwkJfQo+ICAKPiAtCQlpZiAodXZfZGF0YV9y YXRlKSB7Cj4gLQkJCWNzdGF0ZS0+d20uc2tsLnBsYW5lX2RkYl91dltwbGFuZV9pZF0uc3RhcnQg PSBzdGFydDsKPiAtCQkJY3N0YXRlLT53bS5za2wucGxhbmVfZGRiX3V2W3BsYW5lX2lkXS5lbmQg PQo+IC0JCQkJc3RhcnQgKyB1dl9wbGFuZV9ibG9ja3M7Cj4gKwkJaWYgKHV2X3RvdGFsW3BsYW5l X2lkXSkgewo+ICsJCQl1dl9wbGFuZV9hbGxvYy0+c3RhcnQgPSBzdGFydDsKPiArCQkJdXZfcGxh bmVfYWxsb2MtPmVuZCA9IHN0YXJ0ICsgdXZfdG90YWxbcGxhbmVfaWRdOwoKQW5kIGhlcmUgd2Ug bWlzcyBpdC4KCkknZCBwcm9iYWJseSBzdGljayB0aGUgKz0gb24gdGhlaXIgb3duIGxpbmVzIGp1 c3QgdG8gbWFrZSBpdCBhYnNvbHV0ZWx5Cm9idmlvdXMgd2hhdCdzIGdvaW5nIG9uLgoKV2l0aCB0 aGF0IGZpeGVkIHRoaXMgaXMgbG9va2luZyBncmVhdCBzbwpSZXZpZXdlZC1ieTogVmlsbGUgU3ly asOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KZm9yIGJvdGggcGF0Y2hlcy4K Cj4gIAkJfQo+ICsJfQo+ICAKPiAtCQlzdGFydCArPSB1dl9wbGFuZV9ibG9ja3M7Cj4gKwkvKgo+ ICsJICogV2hlbiB3ZSBjYWxjdWxhdGVkIHdhdGVybWFyayB2YWx1ZXMgd2UgZGlkbid0IGtub3cg aG93IGhpZ2gKPiArCSAqIG9mIGEgbGV2ZWwgd2UnZCBhY3R1YWxseSBiZSBhYmxlIHRvIGhpdCwg c28gd2UganVzdCBtYXJrZWQKPiArCSAqIGFsbCBsZXZlbHMgYXMgImVuYWJsZWQuIiAgR28gYmFj ayBub3cgYW5kIGRpc2FibGUgdGhlIG9uZXMKPiArCSAqIHRoYXQgYXJlbid0IGFjdHVhbGx5IHBv c3NpYmxlLgo+ICsJICovCj4gKwlmb3IgKGxldmVsKys7IGxldmVsIDw9IGlsa193bV9tYXhfbGV2 ZWwoZGV2X3ByaXYpOyBsZXZlbCsrKSB7Cj4gKwkJZm9yX2VhY2hfcGxhbmVfaWRfb25fY3J0Yyhp bnRlbF9jcnRjLCBwbGFuZV9pZCkgewo+ICsJCQl3bSA9ICZjc3RhdGUtPndtLnNrbC5vcHRpbWFs LnBsYW5lc1twbGFuZV9pZF07Cj4gKwkJCW1lbXNldCgmd20tPndtW2xldmVsXSwgMCwgc2l6ZW9m KHdtLT53bVtsZXZlbF0pKTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJLyoKPiArCSAqIEdvIGJhY2sg YW5kIGRpc2FibGUgdGhlIHRyYW5zaXRpb24gd2F0ZXJtYXJrIGlmIGl0IHR1cm5zIG91dCB3ZQo+ ICsJICogZG9uJ3QgaGF2ZSBlbm91Z2ggRERCIGJsb2NrcyBmb3IgaXQuCj4gKwkgKi8KPiArCWZv cl9lYWNoX3BsYW5lX2lkX29uX2NydGMoaW50ZWxfY3J0YywgcGxhbmVfaWQpIHsKPiArCQl3bSA9 ICZjc3RhdGUtPndtLnNrbC5vcHRpbWFsLnBsYW5lc1twbGFuZV9pZF07Cj4gKwkJaWYgKHdtLT50 cmFuc193bS5wbGFuZV9yZXNfYiA+IHRvdGFsW3BsYW5lX2lkXSkKPiArCQkJbWVtc2V0KCZ3bS0+ dHJhbnNfd20sIDAsIHNpemVvZih3bS0+dHJhbnNfd20pKTsKPiAgCX0KPiAgCj4gIAlyZXR1cm4g MDsKPiBAQCAtNDcxNSwxNyArNDY3MiwxNSBAQCBza2xfY29tcHV0ZV9wbGFuZV93bV9wYXJhbXMo Y29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKPiAgCXJldHVybiAwOwo+ICB9 Cj4gIAo+IC1zdGF0aWMgaW50IHNrbF9jb21wdXRlX3BsYW5lX3dtKGNvbnN0IHN0cnVjdCBpbnRl bF9jcnRjX3N0YXRlICpjc3RhdGUsCj4gLQkJCQljb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3Rh dGUgKmludGVsX3BzdGF0ZSwKPiAtCQkJCXVpbnQxNl90IGRkYl9hbGxvY2F0aW9uLAo+IC0JCQkJ aW50IGxldmVsLAo+IC0JCQkJY29uc3Qgc3RydWN0IHNrbF93bV9wYXJhbXMgKndwLAo+IC0JCQkJ Y29uc3Qgc3RydWN0IHNrbF93bV9sZXZlbCAqcmVzdWx0X3ByZXYsCj4gLQkJCQlzdHJ1Y3Qgc2ts X3dtX2xldmVsICpyZXN1bHQgLyogb3V0ICovKQo+ICtzdGF0aWMgdm9pZCBza2xfY29tcHV0ZV9w bGFuZV93bShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAo+ICsJCQkJIGNv bnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqaW50ZWxfcHN0YXRlLAo+ICsJCQkJIGludCBs ZXZlbCwKPiArCQkJCSBjb25zdCBzdHJ1Y3Qgc2tsX3dtX3BhcmFtcyAqd3AsCj4gKwkJCQkgY29u c3Qgc3RydWN0IHNrbF93bV9sZXZlbCAqcmVzdWx0X3ByZXYsCj4gKwkJCQkgc3RydWN0IHNrbF93 bV9sZXZlbCAqcmVzdWx0IC8qIG91dCAqLykKPiAgewo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0KPiAgCQl0b19pOTE1KGludGVsX3BzdGF0ZS0+YmFzZS5wbGFuZS0+ZGV2 KTsKPiAtCWNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBzdGF0ZSA9ICZpbnRlbF9wc3Rh dGUtPmJhc2U7Cj4gIAl1aW50MzJfdCBsYXRlbmN5ID0gZGV2X3ByaXYtPndtLnNrbF9sYXRlbmN5 W2xldmVsXTsKPiAgCXVpbnRfZml4ZWRfMTZfMTZfdCBtZXRob2QxLCBtZXRob2QyOwo+ICAJdWlu dF9maXhlZF8xNl8xNl90IHNlbGVjdGVkX3Jlc3VsdDsKPiBAQCAtNDczMywxMCArNDY4OCw2IEBA IHN0YXRpYyBpbnQgc2tsX2NvbXB1dGVfcGxhbmVfd20oY29uc3Qgc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNzdGF0ZSwKPiAgCXN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlID0KPiAg CQl0b19pbnRlbF9hdG9taWNfc3RhdGUoY3N0YXRlLT5iYXNlLnN0YXRlKTsKPiAgCWJvb2wgYXBw bHlfbWVtb3J5X2J3X3dhID0gc2tsX25lZWRzX21lbW9yeV9id193YShzdGF0ZSk7Cj4gLQl1aW50 MzJfdCBtaW5fZGlzcF9idWZfbmVlZGVkOwo+IC0KPiAtCWlmIChsYXRlbmN5ID09IDApCj4gLQkJ cmV0dXJuIGxldmVsID09IDAgPyAtRUlOVkFMIDogMDsKPiAgCj4gIAkvKiBEaXNwbGF5IFdBICMx MTQxOiBrYmwsY2ZsICovCj4gIAlpZiAoKElTX0tBQllMQUtFKGRldl9wcml2KSB8fCBJU19DT0ZG RUVMQUtFKGRldl9wcml2KSB8fAo+IEBAIC00ODAwLDYxICs0NzUxLDI0IEBAIHN0YXRpYyBpbnQg c2tsX2NvbXB1dGVfcGxhbmVfd20oY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0 ZSwKPiAgCQkJcmVzX2Jsb2NrcyA9IHJlc3VsdF9wcmV2LT5wbGFuZV9yZXNfYjsKPiAgCX0KPiAg Cj4gLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSkgewo+IC0JCWlmICh3cC0+eV90aWxl ZCkgewo+IC0JCQl1aW50MzJfdCBleHRyYV9saW5lczsKPiAtCQkJdWludF9maXhlZF8xNl8xNl90 IGZwX21pbl9kaXNwX2J1Zl9uZWVkZWQ7Cj4gLQo+IC0JCQlpZiAocmVzX2xpbmVzICUgd3AtPnlf bWluX3NjYW5saW5lcyA9PSAwKQo+IC0JCQkJZXh0cmFfbGluZXMgPSB3cC0+eV9taW5fc2Nhbmxp bmVzOwo+IC0JCQllbHNlCj4gLQkJCQlleHRyYV9saW5lcyA9IHdwLT55X21pbl9zY2FubGluZXMg KiAyIC0KPiAtCQkJCQkgICAgICByZXNfbGluZXMgJSB3cC0+eV9taW5fc2NhbmxpbmVzOwo+IC0K PiAtCQkJZnBfbWluX2Rpc3BfYnVmX25lZWRlZCA9IG11bF91MzJfZml4ZWQxNihyZXNfbGluZXMg Kwo+IC0JCQkJCQlleHRyYV9saW5lcywKPiAtCQkJCQkJd3AtPnBsYW5lX2Jsb2Nrc19wZXJfbGlu ZSk7Cj4gLQkJCW1pbl9kaXNwX2J1Zl9uZWVkZWQgPSBmaXhlZDE2X3RvX3UzMl9yb3VuZF91cCgK PiAtCQkJCQkJZnBfbWluX2Rpc3BfYnVmX25lZWRlZCk7Cj4gLQkJfSBlbHNlIHsKPiAtCQkJbWlu X2Rpc3BfYnVmX25lZWRlZCA9IERJVl9ST1VORF9VUChyZXNfYmxvY2tzICogMTEsIDEwKTsKPiAt CQl9Cj4gLQl9IGVsc2Ugewo+IC0JCW1pbl9kaXNwX2J1Zl9uZWVkZWQgPSByZXNfYmxvY2tzOwo+ IC0JfQo+IC0KPiAtCWlmICgobGV2ZWwgPiAwICYmIHJlc19saW5lcyA+IDMxKSB8fAo+IC0JICAg IHJlc19ibG9ja3MgPj0gZGRiX2FsbG9jYXRpb24gfHwKPiAtCSAgICBtaW5fZGlzcF9idWZfbmVl ZGVkID49IGRkYl9hbGxvY2F0aW9uKSB7Cj4gLQkJLyoKPiAtCQkgKiBJZiB0aGVyZSBhcmUgbm8g dmFsaWQgbGV2ZWwgMCB3YXRlcm1hcmtzLCB0aGVuIHdlIGNhbid0Cj4gLQkJICogc3VwcG9ydCB0 aGlzIGRpc3BsYXkgY29uZmlndXJhdGlvbi4KPiAtCQkgKi8KPiAtCQlpZiAobGV2ZWwpIHsKPiAt CQkJcmV0dXJuIDA7Cj4gLQkJfSBlbHNlIHsKPiAtCQkJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUg PSBwc3RhdGUtPnBsYW5lOwo+IC0KPiAtCQkJRFJNX0RFQlVHX0tNUygiUmVxdWVzdGVkIGRpc3Bs YXkgY29uZmlndXJhdGlvbiBleGNlZWRzIHN5c3RlbSB3YXRlcm1hcmsgbGltaXRhdGlvbnNcbiIp Owo+IC0JCQlEUk1fREVCVUdfS01TKCJbUExBTkU6JWQ6JXNdIGJsb2NrcyByZXF1aXJlZCA9ICV1 LyV1LCBsaW5lcyByZXF1aXJlZCA9ICV1LzMxXG4iLAo+IC0JCQkJICAgICAgcGxhbmUtPmJhc2Uu aWQsIHBsYW5lLT5uYW1lLAo+IC0JCQkJICAgICAgcmVzX2Jsb2NrcywgZGRiX2FsbG9jYXRpb24s IHJlc19saW5lcyk7Cj4gLQkJCXJldHVybiAtRUlOVkFMOwo+IC0JCX0KPiAtCX0KPiAtCj4gIAkv KiBUaGUgbnVtYmVyIG9mIGxpbmVzIGFyZSBpZ25vcmVkIGZvciB0aGUgbGV2ZWwgMCB3YXRlcm1h cmsuICovCj4gKwlpZiAobGV2ZWwgPiAwICYmIHJlc19saW5lcyA+IDMxKQo+ICsJCXJldHVybjsK PiArCj4gKwkvKgo+ICsJICogSWYgcmVzX2xpbmVzIGlzIHZhbGlkLCBhc3N1bWUgd2UgY2FuIHVz ZSB0aGlzIHdhdGVybWFyayBsZXZlbAo+ICsJICogZm9yIG5vdy4gIFdlJ2xsIGNvbWUgYmFjayBh bmQgZGlzYWJsZSBpdCBhZnRlciB3ZSBjYWxjdWxhdGUgdGhlCj4gKwkgKiBEREIgYWxsb2NhdGlv biBpZiBpdCB0dXJucyBvdXQgd2UgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBlbm91Z2gKPiArCSAqIGJs b2NrcyB0byBzYXRpc2Z5IGl0Lgo+ICsJICovCj4gIAlyZXN1bHQtPnBsYW5lX3Jlc19iID0gcmVz X2Jsb2NrczsKPiAgCXJlc3VsdC0+cGxhbmVfcmVzX2wgPSByZXNfbGluZXM7Cj4gIAlyZXN1bHQt PnBsYW5lX2VuID0gdHJ1ZTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAgfQo+ICAKPiAtc3RhdGljIGlu dAo+ICtzdGF0aWMgdm9pZAo+ICBza2xfY29tcHV0ZV93bV9sZXZlbHMoY29uc3Qgc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKPiAgCQkgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxh bmVfc3RhdGUgKmludGVsX3BzdGF0ZSwKPiAtCQkgICAgICB1aW50MTZfdCBkZGJfYmxvY2tzLAo+ ICAJCSAgICAgIGNvbnN0IHN0cnVjdCBza2xfd21fcGFyYW1zICp3bV9wYXJhbXMsCj4gIAkJICAg ICAgc3RydWN0IHNrbF93bV9sZXZlbCAqbGV2ZWxzKQo+ICB7Cj4gQEAgLTQ4NjIsMjUgKzQ3NzYs MTUgQEAgc2tsX2NvbXB1dGVfd21fbGV2ZWxzKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpjc3RhdGUsCj4gIAkJdG9faTkxNShpbnRlbF9wc3RhdGUtPmJhc2UucGxhbmUtPmRldik7Cj4g IAlpbnQgbGV2ZWwsIG1heF9sZXZlbCA9IGlsa193bV9tYXhfbGV2ZWwoZGV2X3ByaXYpOwo+ICAJ c3RydWN0IHNrbF93bV9sZXZlbCAqcmVzdWx0X3ByZXYgPSAmbGV2ZWxzWzBdOwo+IC0JaW50IHJl dDsKPiAgCj4gIAlmb3IgKGxldmVsID0gMDsgbGV2ZWwgPD0gbWF4X2xldmVsOyBsZXZlbCsrKSB7 Cj4gIAkJc3RydWN0IHNrbF93bV9sZXZlbCAqcmVzdWx0ID0gJmxldmVsc1tsZXZlbF07Cj4gIAo+ IC0JCXJldCA9IHNrbF9jb21wdXRlX3BsYW5lX3dtKGNzdGF0ZSwKPiAtCQkJCQkgICBpbnRlbF9w c3RhdGUsCj4gLQkJCQkJICAgZGRiX2Jsb2NrcywKPiAtCQkJCQkgICBsZXZlbCwKPiAtCQkJCQkg ICB3bV9wYXJhbXMsCj4gLQkJCQkJICAgcmVzdWx0X3ByZXYsCj4gLQkJCQkJICAgcmVzdWx0KTsK PiAtCQlpZiAocmV0KQo+IC0JCQlyZXR1cm4gcmV0Owo+ICsJCXNrbF9jb21wdXRlX3BsYW5lX3dt KGNzdGF0ZSwgaW50ZWxfcHN0YXRlLCBsZXZlbCwgd21fcGFyYW1zLAo+ICsJCQkJICAgICByZXN1 bHRfcHJldiwgcmVzdWx0KTsKPiAgCj4gIAkJcmVzdWx0X3ByZXYgPSByZXN1bHQ7Cj4gIAl9Cj4g LQo+IC0JcmV0dXJuIDA7Cj4gIH0KPiAgCj4gIHN0YXRpYyB1aW50MzJfdAo+IEBAIC00OTA4LDgg KzQ4MTIsNyBAQCBza2xfY29tcHV0ZV9saW5ldGltZV93bShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqY3N0YXRlKQo+ICAKPiAgc3RhdGljIHZvaWQgc2tsX2NvbXB1dGVfdHJhbnNpdGlv bl93bShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAo+ICAJCQkJICAgICAg Y29uc3Qgc3RydWN0IHNrbF93bV9wYXJhbXMgKndwLAo+IC0JCQkJICAgICAgc3RydWN0IHNrbF9w bGFuZV93bSAqd20sCj4gLQkJCQkgICAgICB1aW50MTZfdCBkZGJfYWxsb2NhdGlvbikKPiArCQkJ CSAgICAgIHN0cnVjdCBza2xfcGxhbmVfd20gKndtKQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2ID0gY3N0YXRlLT5iYXNlLmNydGMtPmRldjsKPiAgCWNvbnN0IHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiBAQCAtNDk1NywxMiArNDg2MCwx MyBAQCBzdGF0aWMgdm9pZCBza2xfY29tcHV0ZV90cmFuc2l0aW9uX3dtKGNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCj4gIAo+ICAJfQo+ICAKPiAtCXJlc19ibG9ja3MgKz0g MTsKPiAtCj4gLQlpZiAocmVzX2Jsb2NrcyA8IGRkYl9hbGxvY2F0aW9uKSB7Cj4gLQkJd20tPnRy YW5zX3dtLnBsYW5lX3Jlc19iID0gcmVzX2Jsb2NrczsKPiAtCQl3bS0+dHJhbnNfd20ucGxhbmVf ZW4gPSB0cnVlOwo+IC0JfQo+ICsJLyoKPiArCSAqIEp1c3QgYXNzdW1lIHdlIGNhbiBlbmFibGUg dGhlIHRyYW5zaXRpb24gd2F0ZXJtYXJrLiAgQWZ0ZXIKPiArCSAqIGNvbXB1dGluZyB0aGUgRERC IHdlJ2xsIGNvbWUgYmFjayBhbmQgZGlzYWJsZSBpdCBpZiB0aGF0Cj4gKwkgKiBhc3N1bXB0aW9u IHR1cm5zIG91dCB0byBiZSBmYWxzZS4KPiArCSAqLwo+ICsJd20tPnRyYW5zX3dtLnBsYW5lX3Jl c19iID0gcmVzX2Jsb2NrcyArIDE7Cj4gKwl3bS0+dHJhbnNfd20ucGxhbmVfZW4gPSB0cnVlOwo+ ICB9Cj4gIAo+ICBzdGF0aWMgaW50IHNrbF9idWlsZF9wbGFuZV93bV9zaW5nbGUoc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gQEAgLTQ5NzAsNyArNDg3NCw2IEBAIHN0YXRp YyBpbnQgc2tsX2J1aWxkX3BsYW5lX3dtX3NpbmdsZShzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAq Y3J0Y19zdGF0ZSwKPiAgCQkJCSAgICAgZW51bSBwbGFuZV9pZCBwbGFuZV9pZCwgaW50IGNvbG9y X3BsYW5lKQo+ICB7Cj4gIAlzdHJ1Y3Qgc2tsX3BsYW5lX3dtICp3bSA9ICZjcnRjX3N0YXRlLT53 bS5za2wub3B0aW1hbC5wbGFuZXNbcGxhbmVfaWRdOwo+IC0JdTE2IGRkYl9ibG9ja3MgPSBza2xf ZGRiX2VudHJ5X3NpemUoJmNydGNfc3RhdGUtPndtLnNrbC5wbGFuZV9kZGJfeVtwbGFuZV9pZF0p Owo+ICAJc3RydWN0IHNrbF93bV9wYXJhbXMgd21fcGFyYW1zOwo+ICAJaW50IHJldDsKPiAgCj4g QEAgLTQ5NzksMTIgKzQ4ODIsOCBAQCBzdGF0aWMgaW50IHNrbF9idWlsZF9wbGFuZV93bV9zaW5n bGUoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gIAlpZiAocmV0KQo+ICAJ CXJldHVybiByZXQ7Cj4gIAo+IC0JcmV0ID0gc2tsX2NvbXB1dGVfd21fbGV2ZWxzKGNydGNfc3Rh dGUsIHBsYW5lX3N0YXRlLAo+IC0JCQkJICAgIGRkYl9ibG9ja3MsICZ3bV9wYXJhbXMsIHdtLT53 bSk7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gLQo+IC0Jc2tsX2NvbXB1dGVfdHJh bnNpdGlvbl93bShjcnRjX3N0YXRlLCAmd21fcGFyYW1zLCB3bSwgZGRiX2Jsb2Nrcyk7Cj4gKwlz a2xfY29tcHV0ZV93bV9sZXZlbHMoY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUsICZ3bV9wYXJhbXMs IHdtLT53bSk7Cj4gKwlza2xfY29tcHV0ZV90cmFuc2l0aW9uX3dtKGNydGNfc3RhdGUsICZ3bV9w YXJhbXMsIHdtKTsKPiAgCj4gIAlyZXR1cm4gMDsKPiAgfQo+IEBAIC00OTk0LDcgKzQ4OTMsNiBA QCBzdGF0aWMgaW50IHNrbF9idWlsZF9wbGFuZV93bV91dihzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZSAqY3J0Y19zdGF0ZSwKPiAgCQkJCSBlbnVtIHBsYW5lX2lkIHBsYW5lX2lkKQo+ICB7Cj4gIAlz dHJ1Y3Qgc2tsX3BsYW5lX3dtICp3bSA9ICZjcnRjX3N0YXRlLT53bS5za2wub3B0aW1hbC5wbGFu ZXNbcGxhbmVfaWRdOwo+IC0JdTE2IGRkYl9ibG9ja3MgPSBza2xfZGRiX2VudHJ5X3NpemUoJmNy dGNfc3RhdGUtPndtLnNrbC5wbGFuZV9kZGJfdXZbcGxhbmVfaWRdKTsKPiAgCXN0cnVjdCBza2xf d21fcGFyYW1zIHdtX3BhcmFtczsKPiAgCWludCByZXQ7Cj4gIAo+IEBAIC01MDA2LDEwICs0OTA0 LDcgQEAgc3RhdGljIGludCBza2xfYnVpbGRfcGxhbmVfd21fdXYoc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUsCj4gIAlpZiAocmV0KQo+ICAJCXJldHVybiByZXQ7Cj4gIAo+IC0J cmV0ID0gc2tsX2NvbXB1dGVfd21fbGV2ZWxzKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlLAo+IC0J CQkJICAgIGRkYl9ibG9ja3MsICZ3bV9wYXJhbXMsIHdtLT51dl93bSk7Cj4gLQlpZiAocmV0KQo+ IC0JCXJldHVybiByZXQ7Cj4gKwlza2xfY29tcHV0ZV93bV9sZXZlbHMoY3J0Y19zdGF0ZSwgcGxh bmVfc3RhdGUsICZ3bV9wYXJhbXMsIHdtLT51dl93bSk7Cj4gIAo+ICAJcmV0dXJuIDA7Cj4gIH0K PiBAQCAtNTUyMSwxMyArNTQxNiw5IEBAIHNrbF9jb21wdXRlX3dtKHN0cnVjdCBpbnRlbF9hdG9t aWNfc3RhdGUgKnN0YXRlKQo+ICAJaWYgKHJldCB8fCAhY2hhbmdlZCkKPiAgCQlyZXR1cm4gcmV0 Owo+ICAKPiAtCXJldCA9IHNrbF9jb21wdXRlX2RkYihzdGF0ZSk7Cj4gLQlpZiAocmV0KQo+IC0J CXJldHVybiByZXQ7Cj4gLQo+ICAJLyoKPiAgCSAqIENhbGN1bGF0ZSBXTSdzIGZvciBhbGwgcGlw ZXMgdGhhdCBhcmUgcGFydCBvZiB0aGlzIHRyYW5zYWN0aW9uLgo+IC0JICogTm90ZSB0aGF0IHRo ZSBEREIgYWxsb2NhdGlvbiBhYm92ZSBtYXkgaGF2ZSBhZGRlZCBtb3JlIENSVEMncyB0aGF0Cj4g KwkgKiBOb3RlIHRoYXQgc2tsX2RkYl9hZGRfYWZmZWN0ZWRfcGlwZXMgbWF5IGhhdmUgYWRkZWQg bW9yZSBDUlRDJ3MgdGhhdAo+ICAJICogd2VyZW4ndCBvdGhlcndpc2UgYmVpbmcgbW9kaWZpZWQg KGFuZCBzZXQgYml0cyBpbiBkaXJ0eV9waXBlcykgaWYKPiAgCSAqIHBpcGUgYWxsb2NhdGlvbnMg aGFkIHRvIGNoYW5nZS4KPiAgCSAqLwo+IEBAIC01NTQ5LDYgKzU0NDAsMTAgQEAgc2tsX2NvbXB1 dGVfd20oc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUpCj4gIAkJCXJlc3VsdHMtPmRp cnR5X3BpcGVzIHw9IGRybV9jcnRjX21hc2soJmNydGMtPmJhc2UpOwo+ICAJfQo+ICAKPiArCXJl dCA9IHNrbF9jb21wdXRlX2RkYihzdGF0ZSk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7 Cj4gKwo+ICAJc2tsX3ByaW50X3dtX2NoYW5nZXMoc3RhdGUpOwo+ICAKPiAgCXJldHVybiAwOwo+ IC0tIAo+IDIuMTQuNAoKLS0gClZpbGxlIFN5cmrDpGzDpApJbnRlbApfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0Cklu dGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK