From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v2 2/2] drm/i915: Switch to level-based DDB allocation algorithm (v3) Date: Tue, 11 Dec 2018 17:59:56 +0200 Message-ID: <20181211155956.GS9144@intel.com> References: <20181211010543.13309-1-matthew.d.roper@intel.com> <20181211010543.13309-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 mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5F9A96E277 for ; Tue, 11 Dec 2018 16:00:00 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20181211010543.13309-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 T24gTW9uLCBEZWMgMTAsIDIwMTggYXQgMDU6MDU6NDNQTSAtMDgwMCwgTWF0dCBSb3BlciB3cm90 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 WC4gIChWaWxsZSkKPiAKPiBDYzogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4 LmludGVsLmNvbT4KPiBCdWd6aWxsYTogaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93 X2J1Zy5jZ2k/aWQ9MTA1NDU4Cj4gU2lnbmVkLW9mZi1ieTogTWF0dCBSb3BlciA8bWF0dGhldy5k LnJvcGVyQGludGVsLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0u YyB8IDM3NiArKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gIDEgZmls ZSBjaGFuZ2VkLCAxMzIgaW5zZXJ0aW9ucygrKSwgMjQ0IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfcG0uYwo+IGluZGV4IGJmOTcwY2Y3YjhhNS4uZjVmODY3NTc0NTdkIDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCj4gQEAgLTQzMDEsMTAyICs0MzAxLDYgQEAgaWNsX2dl dF90b3RhbF9yZWxhdGl2ZV9kYXRhX3JhdGUoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmludGVs X2NzdGF0ZSwKPiAgCXJldHVybiB0b3RhbF9kYXRhX3JhdGU7Cj4gIH0KPiAgCj4gLXN0YXRpYyB1 aW50MTZfdAo+IC1za2xfZGRiX21pbl9hbGxvYyhjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3Rh dGUgKnBsYW5lX3N0YXRlLCBjb25zdCBpbnQgcGxhbmUpCj4gLXsKPiAtCXN0cnVjdCBkcm1fZnJh bWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmJhc2UuZmI7Cj4gLQl1aW50MzJfdCBzcmNfdywg c3JjX2g7Cj4gLQl1aW50MzJfdCBtaW5fc2NhbmxpbmVzID0gODsKPiAtCXVpbnQ4X3QgcGxhbmVf YnBwOwo+IC0KPiAtCWlmIChXQVJOX09OKCFmYikpCj4gLQkJcmV0dXJuIDA7Cj4gLQo+IC0JLyog Rm9yIHBhY2tlZCBmb3JtYXRzLCBhbmQgdXYtcGxhbmUsIHJldHVybiAwICovCj4gLQlpZiAocGxh bmUgPT0gMSAmJiBmYi0+Zm9ybWF0LT5mb3JtYXQgIT0gRFJNX0ZPUk1BVF9OVjEyKQo+IC0JCXJl dHVybiAwOwo+IC0KPiAtCS8qIEZvciBOb24gWS10aWxlIHJldHVybiA4LWJsb2NrcyAqLwo+IC0J aWYgKGZiLT5tb2RpZmllciAhPSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCAmJgo+IC0JICAgIGZi LT5tb2RpZmllciAhPSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQgJiYKPiAtCSAgICBmYi0+bW9k aWZpZXIgIT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTICYmCj4gLQkgICAgZmItPm1vZGlm aWVyICE9IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1MpCj4gLQkJcmV0dXJuIDg7Cj4gLQo+ IC0JLyoKPiAtCSAqIFNyYyBjb29yZGluYXRlcyBhcmUgYWxyZWFkeSByb3RhdGVkIGJ5IDI3MCBk ZWdyZWVzIGZvcgo+IC0JICogdGhlIDkwLzI3MCBkZWdyZWUgcGxhbmUgcm90YXRpb24gY2FzZXMg KHRvIG1hdGNoIHRoZQo+IC0JICogR1RUIG1hcHBpbmcpLCBoZW5jZSBubyBuZWVkIHRvIGFjY291 bnQgZm9yIHJvdGF0aW9uIGhlcmUuCj4gLQkgKi8KPiAtCXNyY193ID0gZHJtX3JlY3Rfd2lkdGgo JnBsYW5lX3N0YXRlLT5iYXNlLnNyYykgPj4gMTY7Cj4gLQlzcmNfaCA9IGRybV9yZWN0X2hlaWdo dCgmcGxhbmVfc3RhdGUtPmJhc2Uuc3JjKSA+PiAxNjsKPiAtCj4gLQkvKiBIYWx2ZSBVViBwbGFu ZSB3aWR0aCBhbmQgaGVpZ2h0IGZvciBOVjEyICovCj4gLQlpZiAocGxhbmUgPT0gMSkgewo+IC0J CXNyY193IC89IDI7Cj4gLQkJc3JjX2ggLz0gMjsKPiAtCX0KPiAtCj4gLQlwbGFuZV9icHAgPSBm Yi0+Zm9ybWF0LT5jcHBbcGxhbmVdOwo+IC0KPiAtCWlmIChkcm1fcm90YXRpb25fOTBfb3JfMjcw KHBsYW5lX3N0YXRlLT5iYXNlLnJvdGF0aW9uKSkgewo+IC0JCXN3aXRjaCAocGxhbmVfYnBwKSB7 Cj4gLQkJY2FzZSAxOgo+IC0JCQltaW5fc2NhbmxpbmVzID0gMzI7Cj4gLQkJCWJyZWFrOwo+IC0J CWNhc2UgMjoKPiAtCQkJbWluX3NjYW5saW5lcyA9IDE2Owo+IC0JCQlicmVhazsKPiAtCQljYXNl IDQ6Cj4gLQkJCW1pbl9zY2FubGluZXMgPSA4Owo+IC0JCQlicmVhazsKPiAtCQljYXNlIDg6Cj4g LQkJCW1pbl9zY2FubGluZXMgPSA0Owo+IC0JCQlicmVhazsKPiAtCQlkZWZhdWx0Ogo+IC0JCQlX QVJOKDEsICJVbnN1cHBvcnRlZCBwaXhlbCBkZXB0aCAldSBmb3Igcm90YXRpb24iLAo+IC0JCQkg ICAgIHBsYW5lX2JwcCk7Cj4gLQkJCW1pbl9zY2FubGluZXMgPSAzMjsKPiAtCQl9Cj4gLQl9Cj4g LQo+IC0JcmV0dXJuIERJVl9ST1VORF9VUCgoNCAqIHNyY193ICogcGxhbmVfYnBwKSwgNTEyKSAq IG1pbl9zY2FubGluZXMvNCArIDM7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkCj4gLXNrbF9kZGJf Y2FsY19taW4oY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwgaW50IG51bV9h Y3RpdmUsCj4gLQkJIHVpbnQxNl90ICptaW5pbXVtLCB1aW50MTZfdCAqdXZfbWluaW11bSkKPiAt ewo+IC0JY29uc3Qgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcHN0YXRlOwo+IC0Jc3RydWN0IGRy bV9wbGFuZSAqcGxhbmU7Cj4gLQo+IC0JZHJtX2F0b21pY19jcnRjX3N0YXRlX2Zvcl9lYWNoX3Bs YW5lX3N0YXRlKHBsYW5lLCBwc3RhdGUsICZjc3RhdGUtPmJhc2UpIHsKPiAtCQllbnVtIHBsYW5l X2lkIHBsYW5lX2lkID0gdG9faW50ZWxfcGxhbmUocGxhbmUpLT5pZDsKPiAtCQlzdHJ1Y3QgaW50 ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlID0gdG9faW50ZWxfcGxhbmVfc3RhdGUocHN0YXRl KTsKPiAtCj4gLQkJaWYgKHBsYW5lX2lkID09IFBMQU5FX0NVUlNPUikKPiAtCQkJY29udGludWU7 Cj4gLQo+IC0JCS8qIHNsYXZlIHBsYW5lIG11c3QgYmUgaW52aXNpYmxlIGFuZCBjYWxjdWxhdGVk IGZyb20gbWFzdGVyICovCj4gLQkJaWYgKCFwc3RhdGUtPnZpc2libGUgfHwgV0FSTl9PTihwbGFu ZV9zdGF0ZS0+c2xhdmUpKQo+IC0JCQljb250aW51ZTsKPiAtCj4gLQkJaWYgKCFwbGFuZV9zdGF0 ZS0+bGlua2VkX3BsYW5lKSB7Cj4gLQkJCW1pbmltdW1bcGxhbmVfaWRdID0gc2tsX2RkYl9taW5f YWxsb2MocGxhbmVfc3RhdGUsIDApOwo+IC0JCQl1dl9taW5pbXVtW3BsYW5lX2lkXSA9Cj4gLQkJ CQlza2xfZGRiX21pbl9hbGxvYyhwbGFuZV9zdGF0ZSwgMSk7Cj4gLQkJfSBlbHNlIHsKPiAtCQkJ ZW51bSBwbGFuZV9pZCB5X3BsYW5lX2lkID0KPiAtCQkJCXBsYW5lX3N0YXRlLT5saW5rZWRfcGxh bmUtPmlkOwo+IC0KPiAtCQkJbWluaW11bVt5X3BsYW5lX2lkXSA9IHNrbF9kZGJfbWluX2FsbG9j KHBsYW5lX3N0YXRlLCAwKTsKPiAtCQkJbWluaW11bVtwbGFuZV9pZF0gPSBza2xfZGRiX21pbl9h bGxvYyhwbGFuZV9zdGF0ZSwgMSk7Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCW1pbmltdW1bUExBTkVf Q1VSU09SXSA9IHNrbF9jdXJzb3JfYWxsb2NhdGlvbihudW1fYWN0aXZlKTsKPiAtfQo+IC0KPiAg c3RhdGljIGludAo+ICBza2xfYWxsb2NhdGVfcGlwZV9kZGIoc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKmNzdGF0ZSwKPiAgCQkgICAgICBzdHJ1Y3Qgc2tsX2RkYl9hbGxvY2F0aW9uICpkZGIgLyog b3V0ICovKQo+IEBAIC00NDA2LDE1ICs0MzEwLDE3IEBAIHNrbF9hbGxvY2F0ZV9waXBlX2RkYihz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5kZXYpOwo+ICAJc3RydWN0IGludGVsX2NydGMg KmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwo+ICAJc3RydWN0IHNrbF9kZGJfZW50 cnkgKmFsbG9jID0gJmNzdGF0ZS0+d20uc2tsLmRkYjsKPiAtCXVpbnQxNl90IGFsbG9jX3NpemUs IHN0YXJ0Owo+IC0JdWludDE2X3QgbWluaW11bVtJOTE1X01BWF9QTEFORVNdID0ge307Cj4gLQl1 aW50MTZfdCB1dl9taW5pbXVtW0k5MTVfTUFYX1BMQU5FU10gPSB7fTsKPiArCXN0cnVjdCBza2xf cGxhbmVfd20gKndtOwo+ICsJdWludDE2X3QgYWxsb2Nfc2l6ZSwgc3RhcnQgPSAwOwo+ICsJdWlu dDE2X3QgdG90YWxbSTkxNV9NQVhfUExBTkVTXSA9IHt9Owo+ICsJdWludDE2X3QgdXZfdG90YWxb STkxNV9NQVhfUExBTkVTXSA9IHt9Owo+ICAJdTY0IHRvdGFsX2RhdGFfcmF0ZTsKPiAgCWVudW0g cGxhbmVfaWQgcGxhbmVfaWQ7Cj4gIAlpbnQgbnVtX2FjdGl2ZTsKPiAgCXU2NCBwbGFuZV9kYXRh X3JhdGVbSTkxNV9NQVhfUExBTkVTXSA9IHt9Owo+ICAJdTY0IHV2X3BsYW5lX2RhdGFfcmF0ZVtJ OTE1X01BWF9QTEFORVNdID0ge307Cj4gLQl1aW50MTZfdCB0b3RhbF9taW5fYmxvY2tzID0gMDsK PiArCXVpbnQxNl90IGJsb2NrcyA9IDA7Cj4gKwlpbnQgbGV2ZWw7Cj4gIAo+ICAJLyogQ2xlYXIg dGhlIHBhcnRpdGlvbmluZyBmb3IgZGlzYWJsZWQgcGxhbmVzLiAqLwo+ICAJbWVtc2V0KGNzdGF0 ZS0+d20uc2tsLnBsYW5lX2RkYl95LCAwLCBzaXplb2YoY3N0YXRlLT53bS5za2wucGxhbmVfZGRi X3kpKTsKPiBAQCAtNDQ0NCw4MSArNDM1MCwxMjUgQEAgc2tsX2FsbG9jYXRlX3BpcGVfZGRiKHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCj4gIAlpZiAoYWxsb2Nfc2l6ZSA9PSAwKQo+ ICAJCXJldHVybiAwOwo+ICAKPiAtCXNrbF9kZGJfY2FsY19taW4oY3N0YXRlLCBudW1fYWN0aXZl LCBtaW5pbXVtLCB1dl9taW5pbXVtKTsKPiArCS8qIEFsbG9jYXRlIGZpeGVkIG51bWJlciBvZiBi bG9ja3MgZm9yIGN1cnNvci4gKi8KPiArCXRvdGFsW1BMQU5FX0NVUlNPUl0gPSBza2xfY3Vyc29y X2FsbG9jYXRpb24obnVtX2FjdGl2ZSk7Cj4gKwlhbGxvY19zaXplIC09IHRvdGFsW1BMQU5FX0NV UlNPUl07Cj4gKwljc3RhdGUtPndtLnNrbC5wbGFuZV9kZGJfeVtQTEFORV9DVVJTT1JdLnN0YXJ0 ID0KPiArCQlhbGxvYy0+ZW5kIC0gdG90YWxbUExBTkVfQ1VSU09SXTsKPiArCWNzdGF0ZS0+d20u c2tsLnBsYW5lX2RkYl95W1BMQU5FX0NVUlNPUl0uZW5kID0gYWxsb2MtPmVuZDsKPiArCj4gKwlp ZiAodG90YWxfZGF0YV9yYXRlID09IDApCj4gKwkJcmV0dXJuIDA7Cj4gIAo+ICAJLyoKPiAtCSAq IDEuIEFsbG9jYXRlIHRoZSBtaW5pbnVtIHJlcXVpcmVkIGJsb2NrcyBmb3IgZWFjaCBhY3RpdmUg cGxhbmUKPiAtCSAqIGFuZCBhbGxvY2F0ZSB0aGUgY3Vyc29yLCBpdCBkb2Vzbid0IHJlcXVpcmUg ZXh0cmEgYWxsb2NhdGlvbgo+IC0JICogcHJvcG9ydGlvbmFsIHRvIHRoZSBkYXRhIHJhdGUuCj4g KwkgKiBGaW5kIHRoZSBoaWdoZXN0IHdhdGVybWFyayBsZXZlbCBmb3Igd2hpY2ggd2UgY2FuIHNh dGlzZnkgdGhlIGJsb2NrCj4gKwkgKiByZXF1aXJlbWVudCBvZiBhY3RpdmUgcGxhbmVzLgo+ICAJ ICovCj4gKwlmb3IgKGxldmVsID0gaWxrX3dtX21heF9sZXZlbChkZXZfcHJpdik7IGxldmVsID49 IDA7IGxldmVsLS0pIHsKPiArCQlmb3JfZWFjaF9wbGFuZV9pZF9vbl9jcnRjKGludGVsX2NydGMs IHBsYW5lX2lkKSB7Cj4gKwkJCWlmIChwbGFuZV9pZCA9PSBQTEFORV9DVVJTT1IpCj4gKwkJCQlj b250aW51ZTsKPiAgCj4gLQlmb3JfZWFjaF9wbGFuZV9pZF9vbl9jcnRjKGludGVsX2NydGMsIHBs YW5lX2lkKSB7Cj4gLQkJdG90YWxfbWluX2Jsb2NrcyArPSBtaW5pbXVtW3BsYW5lX2lkXTsKPiAt CQl0b3RhbF9taW5fYmxvY2tzICs9IHV2X21pbmltdW1bcGxhbmVfaWRdOwo+ICsJCQl3bSA9ICZj c3RhdGUtPndtLnNrbC5vcHRpbWFsLnBsYW5lc1twbGFuZV9pZF07Cj4gKwkJCWJsb2NrcyArPSB3 bS0+d21bbGV2ZWxdLnBsYW5lX3Jlc19iOwo+ICsJCQlibG9ja3MgKz0gd20tPnV2X3dtW2xldmVs XS5wbGFuZV9yZXNfYjsKPiArCQl9Cj4gKwo+ICsJCWlmIChibG9ja3MgPCBhbGxvY19zaXplKSB7 Cj4gKwkJCWFsbG9jX3NpemUgLT0gYmxvY2tzOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gIAl9Cj4g IAo+IC0JaWYgKHRvdGFsX21pbl9ibG9ja3MgPiBhbGxvY19zaXplKSB7Cj4gKwlpZiAobGV2ZWwg PCAwKSB7Cj4gIAkJRFJNX0RFQlVHX0tNUygiUmVxdWVzdGVkIGRpc3BsYXkgY29uZmlndXJhdGlv biBleGNlZWRzIHN5c3RlbSBEREIgbGltaXRhdGlvbnMiKTsKPiAtCQlEUk1fREVCVUdfS01TKCJt aW5pbXVtIHJlcXVpcmVkICVkLyVkXG4iLCB0b3RhbF9taW5fYmxvY2tzLAo+IC0JCQkJCQkJYWxs b2Nfc2l6ZSk7Cj4gKwkJRFJNX0RFQlVHX0tNUygibWluaW11bSByZXF1aXJlZCAlZC8lZFxuIiwg YmxvY2tzLAo+ICsJCQkgICAgICBhbGxvY19zaXplKTsKPiAgCQlyZXR1cm4gLUVJTlZBTDsKPiAg CX0KPiAgCj4gLQlhbGxvY19zaXplIC09IHRvdGFsX21pbl9ibG9ja3M7Cj4gLQljc3RhdGUtPndt LnNrbC5wbGFuZV9kZGJfeVtQTEFORV9DVVJTT1JdLnN0YXJ0ID0gYWxsb2MtPmVuZCAtIG1pbmlt dW1bUExBTkVfQ1VSU09SXTsKPiAtCWNzdGF0ZS0+d20uc2tsLnBsYW5lX2RkYl95W1BMQU5FX0NV UlNPUl0uZW5kID0gYWxsb2MtPmVuZDsKPiAtCj4gIAkvKgo+IC0JICogMi4gRGlzdHJpYnV0ZSB0 aGUgcmVtYWluaW5nIHNwYWNlIGluIHByb3BvcnRpb24gdG8gdGhlIGFtb3VudCBvZgo+IC0JICog ZGF0YSBlYWNoIHBsYW5lIG5lZWRzIHRvIGZldGNoIGZyb20gbWVtb3J5Lgo+IC0JICoKPiAtCSAq IEZJWE1FOiB3ZSBtYXkgbm90IGFsbG9jYXRlIGV2ZXJ5IHNpbmdsZSBibG9jayBoZXJlLgo+ICsJ ICogR3JhbnQgZWFjaCBwbGFuZSB0aGUgYmxvY2tzIGl0IHJlcXVpcmVzIGF0IHRoZSBoaWdoZXN0 IGFjaGlldmFibGUKPiArCSAqIHdhdGVybWFyayBsZXZlbCwgcGx1cyBhbiBleHRyYSBzaGFyZSBv ZiB0aGUgbGVmdG92ZXIgYmxvY2tzCj4gKwkgKiBwcm9wb3J0aW9uYWwgdG8gaXRzIHJlbGF0aXZl IGRhdGEgcmF0ZS4KPiAgCSAqLwo+IC0JaWYgKHRvdGFsX2RhdGFfcmF0ZSA9PSAwKQo+IC0JCXJl dHVybiAwOwo+IC0KPiAtCXN0YXJ0ID0gYWxsb2MtPnN0YXJ0Owo+ICAJZm9yX2VhY2hfcGxhbmVf aWRfb25fY3J0YyhpbnRlbF9jcnRjLCBwbGFuZV9pZCkgewo+IC0JCXU2NCBkYXRhX3JhdGUsIHV2 X2RhdGFfcmF0ZTsKPiAtCQl1aW50MTZfdCBwbGFuZV9ibG9ja3MsIHV2X3BsYW5lX2Jsb2NrczsK PiArCQl1NjQgcmF0ZTsKPiArCQl1MTYgZXh0cmE7Cj4gIAo+ICAJCWlmIChwbGFuZV9pZCA9PSBQ TEFORV9DVVJTT1IpCj4gIAkJCWNvbnRpbnVlOwo+ICsJCWlmIChhbGxvY19zaXplID09IDApCj4g KwkJCWNvbnRpbnVlOwoKVGhpcyBzZWVtcyB3cm9uZy4gV2Ugd291bGRuJ3QgYXNzaWduIGFueXRo aW5nIHRvIHRvdGFsL3V2X3RvdGFsIGZvciB0aGUKcGxhbmUgaW4gdGhpcyBjYXNlLiBJIGd1ZXNz IHlvdSBjb3VsZCBtb3ZlIHRob3NlIGFzc2lnbm1lbnRzIHRvIHRoZQplYXJsaWVyIGxvb3AgYW5k IHRoZW4gcy9jb250aW51ZS9icmVhay8gaGVyZT8gT3Igd2UganVzdCByZW1vdmUgdGhlCmNvbnRp bnVlIGVudGlyZWx5IGFuZCBsZXQgdGhlIGNhbGN1bGF0aW9ucyBnbyB0aHJvdWdoIGV2ZW4gaWYK YWxsb2Nfc2l6ZT09MC4KCj4gIAo+IC0JCWRhdGFfcmF0ZSA9IHBsYW5lX2RhdGFfcmF0ZVtwbGFu ZV9pZF07Cj4gKwkJd20gPSAmY3N0YXRlLT53bS5za2wub3B0aW1hbC5wbGFuZXNbcGxhbmVfaWRd Owo+ICAKPiAtCQkvKgo+IC0JCSAqIGFsbG9jYXRpb24gZm9yIChwYWNrZWQgZm9ybWF0cykgb3Ig KHV2LXBsYW5lIHBhcnQgb2YgcGxhbmFyIGZvcm1hdCk6Cj4gLQkJICogcHJvbW90ZSB0aGUgZXhw cmVzc2lvbiB0byA2NCBiaXRzIHRvIGF2b2lkIG92ZXJmbG93aW5nLCB0aGUKPiAtCQkgKiByZXN1 bHQgaXMgPCBhdmFpbGFibGUgYXMgZGF0YV9yYXRlIC8gdG90YWxfZGF0YV9yYXRlIDwgMQo+IC0J CSAqLwo+IC0JCXBsYW5lX2Jsb2NrcyA9IG1pbmltdW1bcGxhbmVfaWRdOwo+IC0JCXBsYW5lX2Js b2NrcyArPSBkaXY2NF91NjQoYWxsb2Nfc2l6ZSAqIGRhdGFfcmF0ZSwgdG90YWxfZGF0YV9yYXRl KTsKPiArCQlyYXRlID0gcGxhbmVfZGF0YV9yYXRlW3BsYW5lX2lkXTsKPiArCQlleHRyYSA9IG1p bl90KHUxNiwgYWxsb2Nfc2l6ZSwKPiArCQkJICAgICAgRElWX1JPVU5EX1VQKGFsbG9jX3NpemUg KiByYXRlLCB0b3RhbF9kYXRhX3JhdGUpKTsKPiArCQl0b3RhbFtwbGFuZV9pZF0gPSB3bS0+d21b bGV2ZWxdLnBsYW5lX3Jlc19iICsgZXh0cmE7Cj4gKwkJYWxsb2Nfc2l6ZSAtPSBleHRyYTsKPiAr CQl0b3RhbF9kYXRhX3JhdGUgLT0gcmF0ZTsKPiAgCj4gLQkJLyogTGVhdmUgZGlzYWJsZWQgcGxh bmVzIGF0ICgwLDApICovCj4gLQkJaWYgKGRhdGFfcmF0ZSkgewo+IC0JCQljc3RhdGUtPndtLnNr bC5wbGFuZV9kZGJfeVtwbGFuZV9pZF0uc3RhcnQgPSBzdGFydDsKPiAtCQkJY3N0YXRlLT53bS5z a2wucGxhbmVfZGRiX3lbcGxhbmVfaWRdLmVuZCA9IHN0YXJ0ICsgcGxhbmVfYmxvY2tzOwo+IC0J CX0KPiArCQlpZiAoYWxsb2Nfc2l6ZSA9PSAwKQo+ICsJCQljb250aW51ZTsKPiAgCj4gLQkJc3Rh cnQgKz0gcGxhbmVfYmxvY2tzOwo+ICsJCXJhdGUgPSB1dl9wbGFuZV9kYXRhX3JhdGVbcGxhbmVf aWRdOwo+ICsJCWV4dHJhID0gbWluX3QodTE2LCBhbGxvY19zaXplLAo+ICsJCQkgICAgICBESVZf Uk9VTkRfVVAoYWxsb2Nfc2l6ZSAqIHJhdGUsIHRvdGFsX2RhdGFfcmF0ZSkpOwo+ICsJCXV2X3Rv dGFsW3BsYW5lX2lkXSA9IHdtLT51dl93bVtsZXZlbF0ucGxhbmVfcmVzX2IgKyBleHRyYTsKPiAr CQlhbGxvY19zaXplIC09IGV4dHJhOwo+ICsJCXRvdGFsX2RhdGFfcmF0ZSAtPSByYXRlOwo+ICsJ fQo+ICsJV0FSTl9PTihhbGxvY19zaXplICE9IDAgfHwgdG90YWxfZGF0YV9yYXRlICE9IDApOwo+ ICAKPiAtCQkvKiBBbGxvY2F0ZSBEREIgZm9yIFVWIHBsYW5lIGZvciBwbGFuYXIgZm9ybWF0L05W MTIgKi8KPiAtCQl1dl9kYXRhX3JhdGUgPSB1dl9wbGFuZV9kYXRhX3JhdGVbcGxhbmVfaWRdOwo+ ICsJLyogU2V0IHRoZSBhY3R1YWwgRERCIHN0YXJ0L2VuZCBwb2ludHMgZm9yIGVhY2ggcGxhbmUg Ki8KPiArCXN0YXJ0ID0gYWxsb2MtPnN0YXJ0Owo+ICsJZm9yX2VhY2hfcGxhbmVfaWRfb25fY3J0 YyhpbnRlbF9jcnRjLCBwbGFuZV9pZCkgewo+ICsJCXN0cnVjdCBza2xfZGRiX2VudHJ5ICpwbGFu ZV9hbGxvYywgKnV2X3BsYW5lX2FsbG9jOwo+ICAKPiAtCQl1dl9wbGFuZV9ibG9ja3MgPSB1dl9t aW5pbXVtW3BsYW5lX2lkXTsKPiAtCQl1dl9wbGFuZV9ibG9ja3MgKz0gZGl2NjRfdTY0KGFsbG9j X3NpemUgKiB1dl9kYXRhX3JhdGUsIHRvdGFsX2RhdGFfcmF0ZSk7Cj4gKwkJaWYgKHBsYW5lX2lk ID09IFBMQU5FX0NVUlNPUikKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCXBsYW5lX2FsbG9jID0g JmNzdGF0ZS0+d20uc2tsLnBsYW5lX2RkYl95W3BsYW5lX2lkXTsKPiArCQl1dl9wbGFuZV9hbGxv YyA9ICZjc3RhdGUtPndtLnNrbC5wbGFuZV9kZGJfdXZbcGxhbmVfaWRdOwo+ICAKPiAgCQkvKiBH ZW4xMSsgdXNlcyBhIHNlcGFyYXRlIHBsYW5lIGZvciBVViB3YXRlcm1hcmtzICovCj4gLQkJV0FS Tl9PTihJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExICYmIHV2X3BsYW5lX2Jsb2Nrcyk7Cj4gKwkJ V0FSTl9PTihJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExICYmIHV2X3RvdGFsW3BsYW5lX2lkXSk7 Cj4gKwo+ICsJCS8qIExlYXZlIGRpc2FibGVkIHBsYW5lcyBhdCAoMCwwKSAqLwo+ICsJCWlmICh0 b3RhbFtwbGFuZV9pZF0pIHsKPiArCQkJcGxhbmVfYWxsb2MtPnN0YXJ0ID0gc3RhcnQ7Cj4gKwkJ CXBsYW5lX2FsbG9jLT5lbmQgPSBzdGFydCArPSB0b3RhbFtwbGFuZV9pZF07Cj4gKwkJfQo+ICAK PiAtCQlpZiAodXZfZGF0YV9yYXRlKSB7Cj4gLQkJCWNzdGF0ZS0+d20uc2tsLnBsYW5lX2RkYl91 dltwbGFuZV9pZF0uc3RhcnQgPSBzdGFydDsKPiAtCQkJY3N0YXRlLT53bS5za2wucGxhbmVfZGRi X3V2W3BsYW5lX2lkXS5lbmQgPQo+IC0JCQkJc3RhcnQgKyB1dl9wbGFuZV9ibG9ja3M7Cj4gKwkJ aWYgKHV2X3RvdGFsW3BsYW5lX2lkXSkgewo+ICsJCQl1dl9wbGFuZV9hbGxvYy0+c3RhcnQgPSBz dGFydDsKPiArCQkJdXZfcGxhbmVfYWxsb2MtPmVuZCA9IHN0YXJ0ICsgdXZfdG90YWxbcGxhbmVf aWRdOwo+ICAJCX0KPiArCX0KPiAgCj4gLQkJc3RhcnQgKz0gdXZfcGxhbmVfYmxvY2tzOwo+ICsJ LyoKPiArCSAqIFdoZW4gd2UgY2FsY3VsYXRlZCB3YXRlcm1hcmsgdmFsdWVzIHdlIGRpZG4ndCBr bm93IGhvdyBoaWdoCj4gKwkgKiBvZiBhIGxldmVsIHdlJ2QgYWN0dWFsbHkgYmUgYWJsZSB0byBo aXQsIHNvIHdlIGp1c3QgbWFya2VkCj4gKwkgKiBhbGwgbGV2ZWxzIGFzICJlbmFibGVkLiIgIEdv IGJhY2sgbm93IGFuZCBkaXNhYmxlIHRoZSBvbmVzCj4gKwkgKiB0aGF0IGFyZW4ndCBhY3R1YWxs eSBwb3NzaWJsZS4KPiArCSAqLwo+ICsJZm9yIChsZXZlbCsrOyBsZXZlbCA8PSBpbGtfd21fbWF4 X2xldmVsKGRldl9wcml2KTsgbGV2ZWwrKykgewo+ICsJCWZvcl9lYWNoX3BsYW5lX2lkX29uX2Ny dGMoaW50ZWxfY3J0YywgcGxhbmVfaWQpIHsKPiArCQkJd20gPSAmY3N0YXRlLT53bS5za2wub3B0 aW1hbC5wbGFuZXNbcGxhbmVfaWRdOwo+ICsJCQltZW1zZXQoJndtLT53bVtsZXZlbF0sIDAsIHNp emVvZih3bS0+d21bbGV2ZWxdKSk7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCS8qCj4gKwkgKiBHbyBi YWNrIGFuZCBkaXNhYmxlIHRoZSB0cmFuc2l0aW9uIHdhdGVybWFyayBpZiBpdCB0dXJucyBvdXQg d2UKPiArCSAqIGRvbid0IGhhdmUgZW5vdWdoIEREQiBibG9ja3MgZm9yIGl0Lgo+ICsJICovCj4g Kwlmb3JfZWFjaF9wbGFuZV9pZF9vbl9jcnRjKGludGVsX2NydGMsIHBsYW5lX2lkKSB7Cj4gKwkJ d20gPSAmY3N0YXRlLT53bS5za2wub3B0aW1hbC5wbGFuZXNbcGxhbmVfaWRdOwo+ICsJCWlmICh3 bS0+dHJhbnNfd20ucGxhbmVfcmVzX2IgPiB0b3RhbFtwbGFuZV9pZF0pCj4gKwkJCW1lbXNldCgm d20tPnRyYW5zX3dtLCAwLCBzaXplb2Yod20tPnRyYW5zX3dtKSk7Cj4gIAl9Cj4gIAo+ICAJcmV0 dXJuIDA7Cj4gQEAgLTQ3MTUsMTcgKzQ2NjUsMTUgQEAgc2tsX2NvbXB1dGVfcGxhbmVfd21fcGFy YW1zKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCj4gIAlyZXR1cm4gMDsK PiAgfQo+ICAKPiAtc3RhdGljIGludCBza2xfY29tcHV0ZV9wbGFuZV93bShjb25zdCBzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAo+IC0JCQkJY29uc3Qgc3RydWN0IGludGVsX3BsYW5l X3N0YXRlICppbnRlbF9wc3RhdGUsCj4gLQkJCQl1aW50MTZfdCBkZGJfYWxsb2NhdGlvbiwKPiAt CQkJCWludCBsZXZlbCwKPiAtCQkJCWNvbnN0IHN0cnVjdCBza2xfd21fcGFyYW1zICp3cCwKPiAt CQkJCWNvbnN0IHN0cnVjdCBza2xfd21fbGV2ZWwgKnJlc3VsdF9wcmV2LAo+IC0JCQkJc3RydWN0 IHNrbF93bV9sZXZlbCAqcmVzdWx0IC8qIG91dCAqLykKPiArc3RhdGljIHZvaWQgc2tsX2NvbXB1 dGVfcGxhbmVfd20oY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKPiArCQkJ CSBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKmludGVsX3BzdGF0ZSwKPiArCQkJCSBp bnQgbGV2ZWwsCj4gKwkJCQkgY29uc3Qgc3RydWN0IHNrbF93bV9wYXJhbXMgKndwLAo+ICsJCQkJ IGNvbnN0IHN0cnVjdCBza2xfd21fbGV2ZWwgKnJlc3VsdF9wcmV2LAo+ICsJCQkJIHN0cnVjdCBz a2xfd21fbGV2ZWwgKnJlc3VsdCAvKiBvdXQgKi8pCj4gIHsKPiAgCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9Cj4gIAkJdG9faTkxNShpbnRlbF9wc3RhdGUtPmJhc2UucGxhbmUt PmRldik7Cj4gLQljb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwc3RhdGUgPSAmaW50ZWxf cHN0YXRlLT5iYXNlOwo+ICAJdWludDMyX3QgbGF0ZW5jeSA9IGRldl9wcml2LT53bS5za2xfbGF0 ZW5jeVtsZXZlbF07Cj4gIAl1aW50X2ZpeGVkXzE2XzE2X3QgbWV0aG9kMSwgbWV0aG9kMjsKPiAg CXVpbnRfZml4ZWRfMTZfMTZfdCBzZWxlY3RlZF9yZXN1bHQ7Cj4gQEAgLTQ3MzMsMTAgKzQ2ODEs NiBAQCBzdGF0aWMgaW50IHNrbF9jb21wdXRlX3BsYW5lX3dtKGNvbnN0IHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjc3RhdGUsCj4gIAlzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSA9 Cj4gIAkJdG9faW50ZWxfYXRvbWljX3N0YXRlKGNzdGF0ZS0+YmFzZS5zdGF0ZSk7Cj4gIAlib29s IGFwcGx5X21lbW9yeV9id193YSA9IHNrbF9uZWVkc19tZW1vcnlfYndfd2Eoc3RhdGUpOwo+IC0J dWludDMyX3QgbWluX2Rpc3BfYnVmX25lZWRlZDsKPiAtCj4gLQlpZiAobGF0ZW5jeSA9PSAwKQo+ IC0JCXJldHVybiBsZXZlbCA9PSAwID8gLUVJTlZBTCA6IDA7Cj4gIAo+ICAJLyogRGlzcGxheSBX QSAjMTE0MToga2JsLGNmbCAqLwo+ICAJaWYgKChJU19LQUJZTEFLRShkZXZfcHJpdikgfHwgSVNf Q09GRkVFTEFLRShkZXZfcHJpdikgfHwKPiBAQCAtNDgwMCw2MSArNDc0NCwyNCBAQCBzdGF0aWMg aW50IHNrbF9jb21wdXRlX3BsYW5lX3dtKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj c3RhdGUsCj4gIAkJCXJlc19ibG9ja3MgPSByZXN1bHRfcHJldi0+cGxhbmVfcmVzX2I7Cj4gIAl9 Cj4gIAo+IC0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTEpIHsKPiAtCQlpZiAod3AtPnlf dGlsZWQpIHsKPiAtCQkJdWludDMyX3QgZXh0cmFfbGluZXM7Cj4gLQkJCXVpbnRfZml4ZWRfMTZf MTZfdCBmcF9taW5fZGlzcF9idWZfbmVlZGVkOwo+IC0KPiAtCQkJaWYgKHJlc19saW5lcyAlIHdw LT55X21pbl9zY2FubGluZXMgPT0gMCkKPiAtCQkJCWV4dHJhX2xpbmVzID0gd3AtPnlfbWluX3Nj YW5saW5lczsKPiAtCQkJZWxzZQo+IC0JCQkJZXh0cmFfbGluZXMgPSB3cC0+eV9taW5fc2Nhbmxp bmVzICogMiAtCj4gLQkJCQkJICAgICAgcmVzX2xpbmVzICUgd3AtPnlfbWluX3NjYW5saW5lczsK PiAtCj4gLQkJCWZwX21pbl9kaXNwX2J1Zl9uZWVkZWQgPSBtdWxfdTMyX2ZpeGVkMTYocmVzX2xp bmVzICsKPiAtCQkJCQkJZXh0cmFfbGluZXMsCj4gLQkJCQkJCXdwLT5wbGFuZV9ibG9ja3NfcGVy X2xpbmUpOwo+IC0JCQltaW5fZGlzcF9idWZfbmVlZGVkID0gZml4ZWQxNl90b191MzJfcm91bmRf dXAoCj4gLQkJCQkJCWZwX21pbl9kaXNwX2J1Zl9uZWVkZWQpOwo+IC0JCX0gZWxzZSB7Cj4gLQkJ CW1pbl9kaXNwX2J1Zl9uZWVkZWQgPSBESVZfUk9VTkRfVVAocmVzX2Jsb2NrcyAqIDExLCAxMCk7 Cj4gLQkJfQo+IC0JfSBlbHNlIHsKPiAtCQltaW5fZGlzcF9idWZfbmVlZGVkID0gcmVzX2Jsb2Nr czsKPiAtCX0KPiAtCj4gLQlpZiAoKGxldmVsID4gMCAmJiByZXNfbGluZXMgPiAzMSkgfHwKPiAt CSAgICByZXNfYmxvY2tzID49IGRkYl9hbGxvY2F0aW9uIHx8Cj4gLQkgICAgbWluX2Rpc3BfYnVm X25lZWRlZCA+PSBkZGJfYWxsb2NhdGlvbikgewo+IC0JCS8qCj4gLQkJICogSWYgdGhlcmUgYXJl IG5vIHZhbGlkIGxldmVsIDAgd2F0ZXJtYXJrcywgdGhlbiB3ZSBjYW4ndAo+IC0JCSAqIHN1cHBv cnQgdGhpcyBkaXNwbGF5IGNvbmZpZ3VyYXRpb24uCj4gLQkJICovCj4gLQkJaWYgKGxldmVsKSB7 Cj4gLQkJCXJldHVybiAwOwo+IC0JCX0gZWxzZSB7Cj4gLQkJCXN0cnVjdCBkcm1fcGxhbmUgKnBs YW5lID0gcHN0YXRlLT5wbGFuZTsKPiAtCj4gLQkJCURSTV9ERUJVR19LTVMoIlJlcXVlc3RlZCBk aXNwbGF5IGNvbmZpZ3VyYXRpb24gZXhjZWVkcyBzeXN0ZW0gd2F0ZXJtYXJrIGxpbWl0YXRpb25z XG4iKTsKPiAtCQkJRFJNX0RFQlVHX0tNUygiW1BMQU5FOiVkOiVzXSBibG9ja3MgcmVxdWlyZWQg PSAldS8ldSwgbGluZXMgcmVxdWlyZWQgPSAldS8zMVxuIiwKPiAtCQkJCSAgICAgIHBsYW5lLT5i YXNlLmlkLCBwbGFuZS0+bmFtZSwKPiAtCQkJCSAgICAgIHJlc19ibG9ja3MsIGRkYl9hbGxvY2F0 aW9uLCByZXNfbGluZXMpOwo+IC0JCQlyZXR1cm4gLUVJTlZBTDsKPiAtCQl9Cj4gLQl9Cj4gLQo+ ICAJLyogVGhlIG51bWJlciBvZiBsaW5lcyBhcmUgaWdub3JlZCBmb3IgdGhlIGxldmVsIDAgd2F0 ZXJtYXJrLiAqLwo+ICsJaWYgKGxldmVsID4gMCAmJiByZXNfbGluZXMgPiAzMSkKPiArCQlyZXR1 cm47Cj4gKwo+ICsJLyoKPiArCSAqIElmIHJlc19saW5lcyBpcyB2YWxpZCwgYXNzdW1lIHdlIGNh biB1c2UgdGhpcyB3YXRlcm1hcmsgbGV2ZWwKPiArCSAqIGZvciBub3cuICBXZSdsbCBjb21lIGJh Y2sgYW5kIGRpc2FibGUgaXQgYWZ0ZXIgd2UgY2FsY3VsYXRlIHRoZQo+ICsJICogRERCIGFsbG9j YXRpb24gaWYgaXQgdHVybnMgb3V0IHdlIGRvbid0IGFjdHVhbGx5IGhhdmUgZW5vdWdoCj4gKwkg KiBibG9ja3MgdG8gc2F0aXNmeSBpdC4KPiArCSAqLwo+ICAJcmVzdWx0LT5wbGFuZV9yZXNfYiA9 IHJlc19ibG9ja3M7Cj4gIAlyZXN1bHQtPnBsYW5lX3Jlc19sID0gcmVzX2xpbmVzOwo+ICAJcmVz dWx0LT5wbGFuZV9lbiA9IHRydWU7Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gIH0KPiAgCj4gLXN0YXRp YyBpbnQKPiArc3RhdGljIHZvaWQKPiAgc2tsX2NvbXB1dGVfd21fbGV2ZWxzKGNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCj4gIAkJICAgICAgY29uc3Qgc3RydWN0IGludGVs X3BsYW5lX3N0YXRlICppbnRlbF9wc3RhdGUsCj4gLQkJICAgICAgdWludDE2X3QgZGRiX2Jsb2Nr cywKPiAgCQkgICAgICBjb25zdCBzdHJ1Y3Qgc2tsX3dtX3BhcmFtcyAqd21fcGFyYW1zLAo+ICAJ CSAgICAgIHN0cnVjdCBza2xfd21fbGV2ZWwgKmxldmVscykKPiAgewo+IEBAIC00ODYyLDI1ICs0 NzY5LDE1IEBAIHNrbF9jb21wdXRlX3dtX2xldmVscyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3N0YXRlLAo+ICAJCXRvX2k5MTUoaW50ZWxfcHN0YXRlLT5iYXNlLnBsYW5lLT5kZXYp Owo+ICAJaW50IGxldmVsLCBtYXhfbGV2ZWwgPSBpbGtfd21fbWF4X2xldmVsKGRldl9wcml2KTsK PiAgCXN0cnVjdCBza2xfd21fbGV2ZWwgKnJlc3VsdF9wcmV2ID0gJmxldmVsc1swXTsKPiAtCWlu dCByZXQ7Cj4gIAo+ICAJZm9yIChsZXZlbCA9IDA7IGxldmVsIDw9IG1heF9sZXZlbDsgbGV2ZWwr Kykgewo+ICAJCXN0cnVjdCBza2xfd21fbGV2ZWwgKnJlc3VsdCA9ICZsZXZlbHNbbGV2ZWxdOwo+ ICAKPiAtCQlyZXQgPSBza2xfY29tcHV0ZV9wbGFuZV93bShjc3RhdGUsCj4gLQkJCQkJICAgaW50 ZWxfcHN0YXRlLAo+IC0JCQkJCSAgIGRkYl9ibG9ja3MsCj4gLQkJCQkJICAgbGV2ZWwsCj4gLQkJ CQkJICAgd21fcGFyYW1zLAo+IC0JCQkJCSAgIHJlc3VsdF9wcmV2LAo+IC0JCQkJCSAgIHJlc3Vs dCk7Cj4gLQkJaWYgKHJldCkKPiAtCQkJcmV0dXJuIHJldDsKPiArCQlza2xfY29tcHV0ZV9wbGFu ZV93bShjc3RhdGUsIGludGVsX3BzdGF0ZSwgbGV2ZWwsIHdtX3BhcmFtcywKPiArCQkJCSAgICAg cmVzdWx0X3ByZXYsIHJlc3VsdCk7Cj4gIAo+ICAJCXJlc3VsdF9wcmV2ID0gcmVzdWx0Owo+ICAJ fQo+IC0KPiAtCXJldHVybiAwOwo+ICB9Cj4gIAo+ICBzdGF0aWMgdWludDMyX3QKPiBAQCAtNDkw OCw4ICs0ODA1LDcgQEAgc2tsX2NvbXB1dGVfbGluZXRpbWVfd20oY29uc3Qgc3RydWN0IGludGVs X2NydGNfc3RhdGUgKmNzdGF0ZSkKPiAgCj4gIHN0YXRpYyB2b2lkIHNrbF9jb21wdXRlX3RyYW5z aXRpb25fd20oY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKPiAgCQkJCSAg ICAgIGNvbnN0IHN0cnVjdCBza2xfd21fcGFyYW1zICp3cCwKPiAtCQkJCSAgICAgIHN0cnVjdCBz a2xfcGxhbmVfd20gKndtLAo+IC0JCQkJICAgICAgdWludDE2X3QgZGRiX2FsbG9jYXRpb24pCj4g KwkJCQkgICAgICBzdHJ1Y3Qgc2tsX3BsYW5lX3dtICp3bSkKPiAgewo+ICAJc3RydWN0IGRybV9k ZXZpY2UgKmRldiA9IGNzdGF0ZS0+YmFzZS5jcnRjLT5kZXY7Cj4gIAljb25zdCBzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gQEAgLTQ5NTcsMTIgKzQ4 NTMsMTMgQEAgc3RhdGljIHZvaWQgc2tsX2NvbXB1dGVfdHJhbnNpdGlvbl93bShjb25zdCBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAo+ICAKPiAgCX0KPiAgCj4gLQlyZXNfYmxvY2tz ICs9IDE7Cj4gLQo+IC0JaWYgKHJlc19ibG9ja3MgPCBkZGJfYWxsb2NhdGlvbikgewo+IC0JCXdt LT50cmFuc193bS5wbGFuZV9yZXNfYiA9IHJlc19ibG9ja3M7Cj4gLQkJd20tPnRyYW5zX3dtLnBs YW5lX2VuID0gdHJ1ZTsKPiAtCX0KPiArCS8qCj4gKwkgKiBKdXN0IGFzc3VtZSB3ZSBjYW4gZW5h YmxlIHRoZSB0cmFuc2l0aW9uIHdhdGVybWFyay4gIEFmdGVyCj4gKwkgKiBjb21wdXRpbmcgdGhl IEREQiB3ZSdsbCBjb21lIGJhY2sgYW5kIGRpc2FibGUgaXQgaWYgdGhhdAo+ICsJICogYXNzdW1w dGlvbiB0dXJucyBvdXQgdG8gYmUgZmFsc2UuCj4gKwkgKi8KPiArCXdtLT50cmFuc193bS5wbGFu ZV9yZXNfYiA9IHJlc19ibG9ja3MgKyAxOwo+ICsJd20tPnRyYW5zX3dtLnBsYW5lX2VuID0gdHJ1 ZTsKPiAgfQo+ICAKPiAgc3RhdGljIGludCBza2xfYnVpbGRfcGxhbmVfd21fc2luZ2xlKHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+IEBAIC00OTcwLDcgKzQ4NjcsNiBAQCBz dGF0aWMgaW50IHNrbF9idWlsZF9wbGFuZV93bV9zaW5nbGUoc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKmNydGNfc3RhdGUsCj4gIAkJCQkgICAgIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQsIGludCBj b2xvcl9wbGFuZSkKPiAgewo+ICAJc3RydWN0IHNrbF9wbGFuZV93bSAqd20gPSAmY3J0Y19zdGF0 ZS0+d20uc2tsLm9wdGltYWwucGxhbmVzW3BsYW5lX2lkXTsKPiAtCXUxNiBkZGJfYmxvY2tzID0g c2tsX2RkYl9lbnRyeV9zaXplKCZjcnRjX3N0YXRlLT53bS5za2wucGxhbmVfZGRiX3lbcGxhbmVf aWRdKTsKPiAgCXN0cnVjdCBza2xfd21fcGFyYW1zIHdtX3BhcmFtczsKPiAgCWludCByZXQ7Cj4g IAo+IEBAIC00OTc5LDEyICs0ODc1LDggQEAgc3RhdGljIGludCBza2xfYnVpbGRfcGxhbmVfd21f c2luZ2xlKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ICAJaWYgKHJldCkK PiAgCQlyZXR1cm4gcmV0Owo+ICAKPiAtCXJldCA9IHNrbF9jb21wdXRlX3dtX2xldmVscyhjcnRj X3N0YXRlLCBwbGFuZV9zdGF0ZSwKPiAtCQkJCSAgICBkZGJfYmxvY2tzLCAmd21fcGFyYW1zLCB3 bS0+d20pOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+IC0KPiAtCXNrbF9jb21wdXRl X3RyYW5zaXRpb25fd20oY3J0Y19zdGF0ZSwgJndtX3BhcmFtcywgd20sIGRkYl9ibG9ja3MpOwo+ ICsJc2tsX2NvbXB1dGVfd21fbGV2ZWxzKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlLCAmd21fcGFy YW1zLCB3bS0+d20pOwo+ICsJc2tsX2NvbXB1dGVfdHJhbnNpdGlvbl93bShjcnRjX3N0YXRlLCAm d21fcGFyYW1zLCB3bSk7Cj4gIAo+ICAJcmV0dXJuIDA7Cj4gIH0KPiBAQCAtNDk5NCw3ICs0ODg2 LDYgQEAgc3RhdGljIGludCBza2xfYnVpbGRfcGxhbmVfd21fdXYoc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUsCj4gIAkJCQkgZW51bSBwbGFuZV9pZCBwbGFuZV9pZCkKPiAgewo+ ICAJc3RydWN0IHNrbF9wbGFuZV93bSAqd20gPSAmY3J0Y19zdGF0ZS0+d20uc2tsLm9wdGltYWwu cGxhbmVzW3BsYW5lX2lkXTsKPiAtCXUxNiBkZGJfYmxvY2tzID0gc2tsX2RkYl9lbnRyeV9zaXpl KCZjcnRjX3N0YXRlLT53bS5za2wucGxhbmVfZGRiX3V2W3BsYW5lX2lkXSk7Cj4gIAlzdHJ1Y3Qg c2tsX3dtX3BhcmFtcyB3bV9wYXJhbXM7Cj4gIAlpbnQgcmV0Owo+ICAKPiBAQCAtNTAwNiwxMCAr NDg5Nyw3IEBAIHN0YXRpYyBpbnQgc2tsX2J1aWxkX3BsYW5lX3dtX3V2KHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ICAJaWYgKHJldCkKPiAgCQlyZXR1cm4gcmV0Owo+ICAK PiAtCXJldCA9IHNrbF9jb21wdXRlX3dtX2xldmVscyhjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSwK PiAtCQkJCSAgICBkZGJfYmxvY2tzLCAmd21fcGFyYW1zLCB3bS0+dXZfd20pOwo+IC0JaWYgKHJl dCkKPiAtCQlyZXR1cm4gcmV0Owo+ICsJc2tsX2NvbXB1dGVfd21fbGV2ZWxzKGNydGNfc3RhdGUs IHBsYW5lX3N0YXRlLCAmd21fcGFyYW1zLCB3bS0+dXZfd20pOwo+ICAKPiAgCXJldHVybiAwOwo+ ICB9Cj4gQEAgLTU1MjEsMTMgKzU0MDksOSBAQCBza2xfY29tcHV0ZV93bShzdHJ1Y3QgaW50ZWxf YXRvbWljX3N0YXRlICpzdGF0ZSkKPiAgCWlmIChyZXQgfHwgIWNoYW5nZWQpCj4gIAkJcmV0dXJu IHJldDsKPiAgCj4gLQlyZXQgPSBza2xfY29tcHV0ZV9kZGIoc3RhdGUpOwo+IC0JaWYgKHJldCkK PiAtCQlyZXR1cm4gcmV0Owo+IC0KPiAgCS8qCj4gIAkgKiBDYWxjdWxhdGUgV00ncyBmb3IgYWxs IHBpcGVzIHRoYXQgYXJlIHBhcnQgb2YgdGhpcyB0cmFuc2FjdGlvbi4KPiAtCSAqIE5vdGUgdGhh dCB0aGUgRERCIGFsbG9jYXRpb24gYWJvdmUgbWF5IGhhdmUgYWRkZWQgbW9yZSBDUlRDJ3MgdGhh dAo+ICsJICogTm90ZSB0aGF0IHNrbF9kZGJfYWRkX2FmZmVjdGVkX3BpcGVzIG1heSBoYXZlIGFk ZGVkIG1vcmUgQ1JUQydzIHRoYXQKPiAgCSAqIHdlcmVuJ3Qgb3RoZXJ3aXNlIGJlaW5nIG1vZGlm aWVkIChhbmQgc2V0IGJpdHMgaW4gZGlydHlfcGlwZXMpIGlmCj4gIAkgKiBwaXBlIGFsbG9jYXRp b25zIGhhZCB0byBjaGFuZ2UuCj4gIAkgKi8KPiBAQCAtNTU0OSw2ICs1NDMzLDEwIEBAIHNrbF9j b21wdXRlX3dtKHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ICAJCQlyZXN1bHRz LT5kaXJ0eV9waXBlcyB8PSBkcm1fY3J0Y19tYXNrKCZjcnRjLT5iYXNlKTsKPiAgCX0KPiAgCj4g KwlyZXQgPSBza2xfY29tcHV0ZV9kZGIoc3RhdGUpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4g cmV0Owo+ICsKPiAgCXNrbF9wcmludF93bV9jaGFuZ2VzKHN0YXRlKTsKPiAgCj4gIAlyZXR1cm4g MDsKPiAtLSAKPiAyLjE0LjQKCi0tIApWaWxsZSBTeXJqw6Rsw6QKSW50ZWwKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlz dApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==