From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH 3/3] drm/i915: Switch to level-based DDB allocation algorithm (v2) Date: Mon, 10 Dec 2018 22:16:27 +0200 Message-ID: <20181210201627.GM9144@intel.com> References: <20181206170944.16539-4-matthew.d.roper@intel.com> <20181206235541.2732-1-matthew.d.roper@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7ABEA89D52 for ; Mon, 10 Dec 2018 20:16:31 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20181206235541.2732-1-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 T24gVGh1LCBEZWMgMDYsIDIwMTggYXQgMDM6NTU6NDFQTSAtMDgwMCwgTWF0dCBSb3BlciB3cm90 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 YSByYXRlLCBzaW1pbGFyIHRvIHRoZSBvbGQgYWxnb3JpdGhtLgoKT0ssIHNvIGl0J3Mgc29tZXdo YXQgc2ltaWxhciB0byB3aGF0IEkgYWxyZWFkeSBkaWQgZm9yIFZMVi9DSFYuIFRoZQpkaWZmZXJl bmNlIGJlaW5nIHRoYXQgb24gVkxWL0NIViBJIGRpc3RyaWJ1dGUgcHVyZWx5IGJhc2VkIG9uIHRo ZQpsZXZlbCAwIHdhdGVybWFyayBhbmQgZG9uJ3QgZXZlbiBjb25zaWRlciB0aGUgZGF0YSByYXRl cy4gTm90IHN1cmUKaWYgdGhlcmUncyBhIHNpZ25pZmljYW50IGRpZmZlcmVuY2UgYmV0d2VlbiB0 aGUgdHdvIGFwcHJvYWNoZXMuCgo+IAo+IFRoZXJlIHdhcyBhIHByZXZpb3VzIGF0dGVtcHQgdG8g aW1wbGVtZW50IHRoaXMgYWxnb3JpdGhtIGEgY291cGxlIHllYXJzCj4gYWdvIGluIGJiOWQ4NWY2 ZTlkICgiZHJtL2k5MTUvc2tsOiBOZXcgZGRiIGFsbG9jYXRpb24gYWxnb3JpdGhtIiksIGJ1dAo+ IHNvbWUgcmVncmVzc2lvbnMgd2VyZSByZXBvcnRlZCwgdGhlIHBhdGNoIHdhcyByZXZlcnRlZCwg YW5kIG5vYm9keQo+IGV2ZXIgZ290IGFyb3VuZCB0byBmaWd1cmluZyBvdXQgZXhhY3RseSB3aGVy ZSB0aGUgYnVnIHdhcyBpbiB0aGF0Cj4gdmVyc2lvbi4gIE91ciB3YXRlcm1hcmsgY29kZSBoYXMg ZXZvbHZlZCBzaWduaWZpY2FudGx5IGluIHRoZSBtZWFudGltZSwKPiBidXQgd2UncmUgc3RpbGwg Z2V0dGluZyBidWcgcmVwb3J0cyBjYXVzZWQgYnkgdGhlIHVuZmFpciBwcm9wb3J0aW9uYWwKPiBh bGdvcml0aG0sIHNvIGxldCdzIGdpdmUgdGhpcyBhbm90aGVyIHNob3QuCj4gCj4gdjI6Cj4gIC0g TWFrZSBzdXJlIGN1cnNvciBhbGxvY2F0aW9uIHN0YXlzIGNvbnN0YW50IGFuZCBmaXhlZCBhdCB0 aGUgZW5kIG9mCj4gICAgdGhlIHBpcGUgYWxsb2NhdGlvbi4KPiAgLSBGaXggc29tZSB3YXRlcm1h cmsgbGV2ZWwgaXRlcmF0b3JzIHRoYXQgd2VyZW4ndCBoYW5kbGluZyB0aGUgbWF4Cj4gICAgbGV2 ZWwuCj4gCj4gQnVnemlsbGE6IGh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcu Y2dpP2lkPTEwNTQ1OAo+IFNpZ25lZC1vZmYtYnk6IE1hdHQgUm9wZXIgPG1hdHRoZXcuZC5yb3Bl ckBpbnRlbC5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMgfCAz NTAgKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICAxIGZpbGUgY2hh bmdlZCwgMTI5IGluc2VydGlvbnMoKyksIDIyMSBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3BtLmMKPiBpbmRleCBiMDljMmEyNTdmZjEuLjZkYjJiZjdiMDM3YyAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfcG0uYwo+IEBAIC00MzA2LDEwMiArNDMwNiw2IEBAIGljbF9nZXRfdG90 YWxfcmVsYXRpdmVfZGF0YV9yYXRlKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICppbnRlbF9jc3Rh dGUsCj4gIAlyZXR1cm4gdG90YWxfZGF0YV9yYXRlOwo+ICB9Cj4gIAo+IC1zdGF0aWMgdWludDE2 X3QKPiAtc2tsX2RkYl9taW5fYWxsb2MoY29uc3Qgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcHN0 YXRlLCBjb25zdCBpbnQgcGxhbmUpCj4gLXsKPiAtCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi ID0gcHN0YXRlLT5mYjsKPiAtCXN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqaW50ZWxfcHN0YXRl ID0gdG9faW50ZWxfcGxhbmVfc3RhdGUocHN0YXRlKTsKPiAtCXVpbnQzMl90IHNyY193LCBzcmNf aDsKPiAtCXVpbnQzMl90IG1pbl9zY2FubGluZXMgPSA4Owo+IC0JdWludDhfdCBwbGFuZV9icHA7 Cj4gLQo+IC0JaWYgKFdBUk5fT04oIWZiKSkKPiAtCQlyZXR1cm4gMDsKPiAtCj4gLQkvKiBGb3Ig cGFja2VkIGZvcm1hdHMsIGFuZCB1di1wbGFuZSwgcmV0dXJuIDAgKi8KPiAtCWlmIChwbGFuZSA9 PSAxICYmIGZiLT5mb3JtYXQtPmZvcm1hdCAhPSBEUk1fRk9STUFUX05WMTIpCj4gLQkJcmV0dXJu IDA7Cj4gLQo+IC0JLyogRm9yIE5vbiBZLXRpbGUgcmV0dXJuIDgtYmxvY2tzICovCj4gLQlpZiAo ZmItPm1vZGlmaWVyICE9IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEICYmCj4gLQkgICAgZmItPm1v ZGlmaWVyICE9IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRCAmJgo+IC0JICAgIGZiLT5tb2RpZmll ciAhPSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1MgJiYKPiAtCSAgICBmYi0+bW9kaWZpZXIg IT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUykKPiAtCQlyZXR1cm4gODsKPiAtCj4gLQkv Kgo+IC0JICogU3JjIGNvb3JkaW5hdGVzIGFyZSBhbHJlYWR5IHJvdGF0ZWQgYnkgMjcwIGRlZ3Jl ZXMgZm9yCj4gLQkgKiB0aGUgOTAvMjcwIGRlZ3JlZSBwbGFuZSByb3RhdGlvbiBjYXNlcyAodG8g bWF0Y2ggdGhlCj4gLQkgKiBHVFQgbWFwcGluZyksIGhlbmNlIG5vIG5lZWQgdG8gYWNjb3VudCBm b3Igcm90YXRpb24gaGVyZS4KPiAtCSAqLwo+IC0Jc3JjX3cgPSBkcm1fcmVjdF93aWR0aCgmaW50 ZWxfcHN0YXRlLT5iYXNlLnNyYykgPj4gMTY7Cj4gLQlzcmNfaCA9IGRybV9yZWN0X2hlaWdodCgm aW50ZWxfcHN0YXRlLT5iYXNlLnNyYykgPj4gMTY7Cj4gLQo+IC0JLyogSGFsdmUgVVYgcGxhbmUg d2lkdGggYW5kIGhlaWdodCBmb3IgTlYxMiAqLwo+IC0JaWYgKHBsYW5lID09IDEpIHsKPiAtCQlz cmNfdyAvPSAyOwo+IC0JCXNyY19oIC89IDI7Cj4gLQl9Cj4gLQo+IC0JcGxhbmVfYnBwID0gZmIt PmZvcm1hdC0+Y3BwW3BsYW5lXTsKPiAtCj4gLQlpZiAoZHJtX3JvdGF0aW9uXzkwX29yXzI3MChw c3RhdGUtPnJvdGF0aW9uKSkgewo+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 YW5lKSB7Cj4gLQkJCW1pbmltdW1bcGxhbmVfaWRdID0gc2tsX2RkYl9taW5fYWxsb2MocHN0YXRl LCAwKTsKPiAtCQkJdXZfbWluaW11bVtwbGFuZV9pZF0gPSBza2xfZGRiX21pbl9hbGxvYyhwc3Rh dGUsIDEpOwo+IC0JCX0gZWxzZSB7Cj4gLQkJCWVudW0gcGxhbmVfaWQgeV9wbGFuZV9pZCA9Cj4g LQkJCQlwbGFuZV9zdGF0ZS0+bGlua2VkX3BsYW5lLT5pZDsKPiAtCj4gLQkJCW1pbmltdW1beV9w bGFuZV9pZF0gPSBza2xfZGRiX21pbl9hbGxvYyhwc3RhdGUsIDApOwo+IC0JCQltaW5pbXVtW3Bs YW5lX2lkXSA9IHNrbF9kZGJfbWluX2FsbG9jKHBzdGF0ZSwgMSk7Cj4gLQkJfQo+IC0JfQo+IC0K PiAtCW1pbmltdW1bUExBTkVfQ1VSU09SXSA9IHNrbF9jdXJzb3JfYWxsb2NhdGlvbihudW1fYWN0 aXZlKTsKPiAtfQo+IC0KPiAgc3RhdGljIGludAo+ICBza2xfYWxsb2NhdGVfcGlwZV9kZGIoc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKPiAgCQkgICAgICBzdHJ1Y3Qgc2tsX2RkYl9h bGxvY2F0aW9uICpkZGIgLyogb3V0ICovKQo+IEBAIC00NDExLDE1ICs0MzE1LDE4IEBAIHNrbF9h bGxvY2F0ZV9waXBlX2RkYihzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAo+ICAJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5kZXYpOwo+ICAJ c3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwo+ICAJ c3RydWN0IHNrbF9kZGJfZW50cnkgKmFsbG9jID0gJmNzdGF0ZS0+d20uc2tsLmRkYjsKPiAtCXVp bnQxNl90IGFsbG9jX3NpemUsIHN0YXJ0Owo+IC0JdWludDE2X3QgbWluaW11bVtJOTE1X01BWF9Q TEFORVNdID0ge307Cj4gLQl1aW50MTZfdCB1dl9taW5pbXVtW0k5MTVfTUFYX1BMQU5FU10gPSB7 fTsKPiArCXN0cnVjdCBza2xfZGRiX2VudHJ5ICpwbGFuZV9hbGxvYywgKnV2X3BsYW5lX2FsbG9j Owo+ICsJc3RydWN0IHNrbF9wbGFuZV93bSAqd207CgpUaGlzIG9uZSBhdCBsZWFzdCBjb3VsZCBi ZSBtb3ZlZCBpbnRvIGEgdGlnaHRlciBzY29wZSBBRkFJQ1MuCgo+ICsJdWludDE2X3QgYWxsb2Nf c2l6ZSwgc3RhcnQgPSAwOwo+ICsJdWludDE2X3QgdG90YWxbSTkxNV9NQVhfUExBTkVTXSA9IHt9 Owo+ICsJdWludDE2X3QgdXZfdG90YWxbSTkxNV9NQVhfUExBTkVTXSA9IHt9Owo+ICAJdTY0IHRv dGFsX2RhdGFfcmF0ZTsKPiAgCWVudW0gcGxhbmVfaWQgcGxhbmVfaWQ7Cj4gIAlpbnQgbnVtX2Fj dGl2ZTsKPiAgCXU2NCBwbGFuZV9kYXRhX3JhdGVbSTkxNV9NQVhfUExBTkVTXSA9IHt9Owo+ICAJ dTY0IHV2X3BsYW5lX2RhdGFfcmF0ZVtJOTE1X01BWF9QTEFORVNdID0ge307Cj4gLQl1aW50MTZf dCB0b3RhbF9taW5fYmxvY2tzID0gMDsKPiArCXVpbnQxNl90IGJsb2NrcyA9IDA7Cj4gKwlpbnQg bGV2ZWw7Cj4gIAo+ICAJLyogQ2xlYXIgdGhlIHBhcnRpdGlvbmluZyBmb3IgZGlzYWJsZWQgcGxh bmVzLiAqLwo+ICAJbWVtc2V0KGNzdGF0ZS0+d20uc2tsLnBsYW5lX2RkYl95LCAwLCBzaXplb2Yo Y3N0YXRlLT53bS5za2wucGxhbmVfZGRiX3kpKTsKPiBAQCAtNDQ0OSw4MSArNDM1NiwxMTIgQEAg c2tsX2FsbG9jYXRlX3BpcGVfZGRiKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCj4g IAlpZiAoYWxsb2Nfc2l6ZSA9PSAwKQo+ICAJCXJldHVybiAwOwo+ICAKPiAtCXNrbF9kZGJfY2Fs Y19taW4oY3N0YXRlLCBudW1fYWN0aXZlLCBtaW5pbXVtLCB1dl9taW5pbXVtKTsKPiArCS8qIEFs bG9jYXRlIGZpeGVkIG51bWJlciBvZiBibG9ja3MgZm9yIGN1cnNvci4gKi8KPiArCXRvdGFsW1BM QU5FX0NVUlNPUl0gPSBza2xfY3Vyc29yX2FsbG9jYXRpb24obnVtX2FjdGl2ZSk7Cj4gKwlhbGxv Y19zaXplIC09IHRvdGFsW1BMQU5FX0NVUlNPUl07Cj4gKwljc3RhdGUtPndtLnNrbC5wbGFuZV9k ZGJfeVtQTEFORV9DVVJTT1JdLnN0YXJ0ID0KPiArCQlhbGxvYy0+ZW5kIC0gdG90YWxbUExBTkVf Q1VSU09SXTsKPiArCWNzdGF0ZS0+d20uc2tsLnBsYW5lX2RkYl95W1BMQU5FX0NVUlNPUl0uZW5k ID0gYWxsb2MtPmVuZDsKPiArCj4gKwlpZiAodG90YWxfZGF0YV9yYXRlID09IDApCj4gKwkJcmV0 dXJuIDA7Cj4gIAo+ICAJLyoKPiAtCSAqIDEuIEFsbG9jYXRlIHRoZSBtaW5pbnVtIHJlcXVpcmVk IGJsb2NrcyBmb3IgZWFjaCBhY3RpdmUgcGxhbmUKPiAtCSAqIGFuZCBhbGxvY2F0ZSB0aGUgY3Vy c29yLCBpdCBkb2Vzbid0IHJlcXVpcmUgZXh0cmEgYWxsb2NhdGlvbgo+IC0JICogcHJvcG9ydGlv bmFsIHRvIHRoZSBkYXRhIHJhdGUuCj4gKwkgKiBGaW5kIHRoZSBoaWdoZXN0IHdhdGVybWFyayBs ZXZlbCBmb3Igd2hpY2ggd2UgY2FuIHNhdGlzZnkgdGhlIGJsb2NrCj4gKwkgKiByZXF1aXJlbWVu dCBvZiBhY3RpdmUgcGxhbmVzLgo+ICAJICovCj4gKwlmb3IgKGxldmVsID0gaWxrX3dtX21heF9s ZXZlbChkZXZfcHJpdik7IGxldmVsID49IDA7IGxldmVsLS0pIHsKPiArCQlmb3JfZWFjaF9wbGFu ZV9pZF9vbl9jcnRjKGludGVsX2NydGMsIHBsYW5lX2lkKSB7Cj4gKwkJCWlmIChwbGFuZV9pZCA9 PSBQTEFORV9DVVJTT1IpCj4gKwkJCQljb250aW51ZTsKPiAgCj4gLQlmb3JfZWFjaF9wbGFuZV9p ZF9vbl9jcnRjKGludGVsX2NydGMsIHBsYW5lX2lkKSB7Cj4gLQkJdG90YWxfbWluX2Jsb2NrcyAr PSBtaW5pbXVtW3BsYW5lX2lkXTsKPiAtCQl0b3RhbF9taW5fYmxvY2tzICs9IHV2X21pbmltdW1b cGxhbmVfaWRdOwo+ICsJCQl3bSA9ICZjc3RhdGUtPndtLnNrbC5vcHRpbWFsLnBsYW5lc1twbGFu ZV9pZF07Cj4gKwkJCWJsb2NrcyArPSB3bS0+d21bbGV2ZWxdLnBsYW5lX3Jlc19iOwo+ICsJCQli bG9ja3MgKz0gd20tPnV2X3dtW2xldmVsXS5wbGFuZV9yZXNfYjsKPiArCQl9Cj4gKwo+ICsJCWlm IChibG9ja3MgPCBhbGxvY19zaXplKSB7Cj4gKwkJCWFsbG9jX3NpemUgLT0gYmxvY2tzOwo+ICsJ CQlicmVhazsKPiArCQl9Cj4gIAl9Cj4gIAo+IC0JaWYgKHRvdGFsX21pbl9ibG9ja3MgPiBhbGxv Y19zaXplKSB7Cj4gKwlpZiAobGV2ZWwgPCAwKSB7Cj4gIAkJRFJNX0RFQlVHX0tNUygiUmVxdWVz dGVkIGRpc3BsYXkgY29uZmlndXJhdGlvbiBleGNlZWRzIHN5c3RlbSBEREIgbGltaXRhdGlvbnMi KTsKPiAtCQlEUk1fREVCVUdfS01TKCJtaW5pbXVtIHJlcXVpcmVkICVkLyVkXG4iLCB0b3RhbF9t aW5fYmxvY2tzLAo+IC0JCQkJCQkJYWxsb2Nfc2l6ZSk7Cj4gKwkJRFJNX0RFQlVHX0tNUygibWlu aW11bSByZXF1aXJlZCAlZC8lZFxuIiwgYmxvY2tzLAo+ICsJCQkgICAgICBhbGxvY19zaXplKTsK PiAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgCX0KPiAgCj4gLQlhbGxvY19zaXplIC09IHRvdGFsX21p bl9ibG9ja3M7Cj4gLQljc3RhdGUtPndtLnNrbC5wbGFuZV9kZGJfeVtQTEFORV9DVVJTT1JdLnN0 YXJ0ID0gYWxsb2MtPmVuZCAtIG1pbmltdW1bUExBTkVfQ1VSU09SXTsKPiAtCWNzdGF0ZS0+d20u c2tsLnBsYW5lX2RkYl95W1BMQU5FX0NVUlNPUl0uZW5kID0gYWxsb2MtPmVuZDsKPiAtCj4gIAkv Kgo+IC0JICogMi4gRGlzdHJpYnV0ZSB0aGUgcmVtYWluaW5nIHNwYWNlIGluIHByb3BvcnRpb24g dG8gdGhlIGFtb3VudCBvZgo+IC0JICogZGF0YSBlYWNoIHBsYW5lIG5lZWRzIHRvIGZldGNoIGZy b20gbWVtb3J5Lgo+IC0JICoKPiAtCSAqIEZJWE1FOiB3ZSBtYXkgbm90IGFsbG9jYXRlIGV2ZXJ5 IHNpbmdsZSBibG9jayBoZXJlLgo+ICsJICogR3JhbnQgZWFjaCBwbGFuZSB0aGUgYmxvY2tzIGl0 IHJlcXVpcmVzIGF0IHRoZSBoaWdoZXN0IGFjaGlldmFibGUKPiArCSAqIHdhdGVybWFyayBsZXZl bCwgcGx1cyBhbiBleHRyYSBzaGFyZSBvZiB0aGUgbGVmdG92ZXIgYmxvY2tzCj4gKwkgKiBwcm9w b3J0aW9uYWwgdG8gaXRzIHJlbGF0aXZlIGRhdGEgcmF0ZS4KPiAgCSAqLwo+IC0JaWYgKHRvdGFs X2RhdGFfcmF0ZSA9PSAwKQo+IC0JCXJldHVybiAwOwo+IC0KPiAtCXN0YXJ0ID0gYWxsb2MtPnN0 YXJ0Owo+ICAJZm9yX2VhY2hfcGxhbmVfaWRfb25fY3J0YyhpbnRlbF9jcnRjLCBwbGFuZV9pZCkg ewo+IC0JCXU2NCBkYXRhX3JhdGUsIHV2X2RhdGFfcmF0ZTsKPiAtCQl1aW50MTZfdCBwbGFuZV9i bG9ja3MsIHV2X3BsYW5lX2Jsb2NrczsKPiArCQl1NjQgcmF0ZTsKPiAgCj4gIAkJaWYgKHBsYW5l X2lkID09IFBMQU5FX0NVUlNPUikKPiAgCQkJY29udGludWU7Cj4gIAo+IC0JCWRhdGFfcmF0ZSA9 IHBsYW5lX2RhdGFfcmF0ZVtwbGFuZV9pZF07Cj4gKwkJd20gPSAmY3N0YXRlLT53bS5za2wub3B0 aW1hbC5wbGFuZXNbcGxhbmVfaWRdOwo+ICAKPiAtCQkvKgo+IC0JCSAqIGFsbG9jYXRpb24gZm9y IChwYWNrZWQgZm9ybWF0cykgb3IgKHV2LXBsYW5lIHBhcnQgb2YgcGxhbmFyIGZvcm1hdCk6Cj4g LQkJICogcHJvbW90ZSB0aGUgZXhwcmVzc2lvbiB0byA2NCBiaXRzIHRvIGF2b2lkIG92ZXJmbG93 aW5nLCB0aGUKPiAtCQkgKiByZXN1bHQgaXMgPCBhdmFpbGFibGUgYXMgZGF0YV9yYXRlIC8gdG90 YWxfZGF0YV9yYXRlIDwgMQo+IC0JCSAqLwo+IC0JCXBsYW5lX2Jsb2NrcyA9IG1pbmltdW1bcGxh bmVfaWRdOwo+IC0JCXBsYW5lX2Jsb2NrcyArPSBkaXY2NF91NjQoYWxsb2Nfc2l6ZSAqIGRhdGFf cmF0ZSwgdG90YWxfZGF0YV9yYXRlKTsKPiArCQlyYXRlID0gcGxhbmVfZGF0YV9yYXRlW3BsYW5l X2lkXTsKPiArCQl0b3RhbFtwbGFuZV9pZF0gPSB3bS0+d21bbGV2ZWxdLnBsYW5lX3Jlc19iICsK PiArCQkJZGl2NjRfdTY0KGFsbG9jX3NpemUgKiByYXRlLCB0b3RhbF9kYXRhX3JhdGUpOwoKVGhp cyBtaWdodCBzdGlsbCBsZWF2ZSBzb21lIGJsb2NrcyB1bnVzZWQgbm8/IE9uIFZMVi9DSFYgSSB1 c2VkCkRJVl9ST1VORF9VUCgpK21pbigpK1dBUk4oKSB0byBtYWtlIHN1cmUgd2UgbmV2ZXIgYSBi bG9jayBiZWhpbmQuCgo+ICAKPiAtCQkvKiBMZWF2ZSBkaXNhYmxlZCBwbGFuZXMgYXQgKDAsMCkg Ki8KPiAtCQlpZiAoZGF0YV9yYXRlKSB7Cj4gLQkJCWNzdGF0ZS0+d20uc2tsLnBsYW5lX2RkYl95 W3BsYW5lX2lkXS5zdGFydCA9IHN0YXJ0Owo+IC0JCQljc3RhdGUtPndtLnNrbC5wbGFuZV9kZGJf eVtwbGFuZV9pZF0uZW5kID0gc3RhcnQgKyBwbGFuZV9ibG9ja3M7Cj4gLQkJfQo+IC0KPiAtCQlz dGFydCArPSBwbGFuZV9ibG9ja3M7Cj4gKwkJcmF0ZSA9IHV2X3BsYW5lX2RhdGFfcmF0ZVtwbGFu ZV9pZF07Cj4gKwkJdXZfdG90YWxbcGxhbmVfaWRdID0gd20tPnV2X3dtW2xldmVsXS5wbGFuZV9y ZXNfYiArCj4gKwkJCWRpdjY0X3U2NChhbGxvY19zaXplICogcmF0ZSwgdG90YWxfZGF0YV9yYXRl KTsKPiArCX0KPiAgCj4gLQkJLyogQWxsb2NhdGUgRERCIGZvciBVViBwbGFuZSBmb3IgcGxhbmFy IGZvcm1hdC9OVjEyICovCj4gLQkJdXZfZGF0YV9yYXRlID0gdXZfcGxhbmVfZGF0YV9yYXRlW3Bs YW5lX2lkXTsKPiArCS8qIFNldCB0aGUgYWN0dWFsIEREQiBzdGFydC9lbmQgcG9pbnRzIGZvciBl YWNoIHBsYW5lICovCj4gKwlzdGFydCA9IGFsbG9jLT5zdGFydDsKPiArCWZvcl9lYWNoX3BsYW5l X2lkX29uX2NydGMoaW50ZWxfY3J0YywgcGxhbmVfaWQpIHsKPiArCQlpZiAocGxhbmVfaWQgPT0g UExBTkVfQ1VSU09SKQo+ICsJCQljb250aW51ZTsKPiAgCj4gLQkJdXZfcGxhbmVfYmxvY2tzID0g dXZfbWluaW11bVtwbGFuZV9pZF07Cj4gLQkJdXZfcGxhbmVfYmxvY2tzICs9IGRpdjY0X3U2NChh bGxvY19zaXplICogdXZfZGF0YV9yYXRlLCB0b3RhbF9kYXRhX3JhdGUpOwo+ICsJCXBsYW5lX2Fs bG9jID0gJmNzdGF0ZS0+d20uc2tsLnBsYW5lX2RkYl95W3BsYW5lX2lkXTsKPiArCQl1dl9wbGFu ZV9hbGxvYyA9ICZjc3RhdGUtPndtLnNrbC5wbGFuZV9kZGJfdXZbcGxhbmVfaWRdOwo+ICAKPiAg CQkvKiBHZW4xMSsgdXNlcyBhIHNlcGFyYXRlIHBsYW5lIGZvciBVViB3YXRlcm1hcmtzICovCj4g LQkJV0FSTl9PTihJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExICYmIHV2X3BsYW5lX2Jsb2Nrcyk7 Cj4gKwkJV0FSTl9PTihJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExICYmIHV2X3RvdGFsW3BsYW5l X2lkXSk7Cj4gIAo+IC0JCWlmICh1dl9kYXRhX3JhdGUpIHsKPiAtCQkJY3N0YXRlLT53bS5za2wu cGxhbmVfZGRiX3V2W3BsYW5lX2lkXS5zdGFydCA9IHN0YXJ0Owo+IC0JCQljc3RhdGUtPndtLnNr bC5wbGFuZV9kZGJfdXZbcGxhbmVfaWRdLmVuZCA9Cj4gLQkJCQlzdGFydCArIHV2X3BsYW5lX2Js b2NrczsKPiArCQkvKiBMZWF2ZSBkaXNhYmxlZCBwbGFuZXMgYXQgKDAsMCkgKi8KPiArCQlpZiAo dG90YWxbcGxhbmVfaWRdKSB7Cj4gKwkJCXBsYW5lX2FsbG9jLT5zdGFydCA9IHN0YXJ0Owo+ICsJ CQlwbGFuZV9hbGxvYy0+ZW5kID0gc3RhcnQgKz0gdG90YWxbcGxhbmVfaWRdOwo+ICsJCX0KPiAr Cj4gKwkJaWYgKHV2X3RvdGFsW3BsYW5lX2lkXSkgewo+ICsJCQl1dl9wbGFuZV9hbGxvYy0+c3Rh cnQgPSBzdGFydDsKPiArCQkJdXZfcGxhbmVfYWxsb2MtPmVuZCA9IHN0YXJ0ICsgdXZfdG90YWxb cGxhbmVfaWRdOwo+ICsJCX0KPiArCX0KPiArCj4gKwkvKgo+ICsJICogV2hlbiB3ZSBjYWxjdWxh dGVkIHdhdGVybWFyayB2YWx1ZXMgd2UgZGlkbid0IGtub3cgaG93IGhpZ2gKPiArCSAqIG9mIGEg bGV2ZWwgd2UnZCBhY3R1YWxseSBiZSBhYmxlIHRvIGhpdCwgc28gd2UganVzdCBtYXJrZWQKPiAr CSAqIGFsbCBsZXZlbHMgYXMgImVuYWJsZWQuIiAgR28gYmFjayBub3cgYW5kIGRpc2FibGUgdGhl IG9uZXMKPiArCSAqIHRoYXQgYXJlbid0IGFjdHVhbGx5IHBvc3NpYmxlLgo+ICsJICovCj4gKwl3 aGlsZSAobGV2ZWwrKyA8PSBpbGtfd21fbWF4X2xldmVsKGRldl9wcml2KSkgewoKSSdkIHByZWZl ciBhIGZvci1sb29wLgoKPiArCQlmb3JfZWFjaF9wbGFuZV9pZF9vbl9jcnRjKGludGVsX2NydGMs IHBsYW5lX2lkKSB7Cj4gKwkJCXdtID0gJmNzdGF0ZS0+d20uc2tsLm9wdGltYWwucGxhbmVzW3Bs YW5lX2lkXTsKPiArCQkJd20tPndtW2xldmVsXS5wbGFuZV9lbiA9IGZhbHNlOwo+ICsJCQl3bS0+ d21bbGV2ZWxdLnBsYW5lX3Jlc19iID0gMDsKPiArCQkJd20tPndtW2xldmVsXS5wbGFuZV9yZXNf bCA9IDA7Cj4gIAkJfQo+ICsJfQo+ICAKPiAtCQlzdGFydCArPSB1dl9wbGFuZV9ibG9ja3M7Cj4g KwkvKgo+ICsJICogR28gYmFjayBhbmQgZGlzYWJsZSB0aGUgdHJhbnNpdGlvbiB3YXRlcm1hcmsg aWYgaXQgdHVybnMgb3V0IHdlCj4gKwkgKiBkb24ndCBoYXZlIGVub3VnaCBEREIgYmxvY2tzIGZv ciBpdC4KPiArCSAqLwo+ICsJZm9yX2VhY2hfcGxhbmVfaWRfb25fY3J0YyhpbnRlbF9jcnRjLCBw bGFuZV9pZCkgewo+ICsJCXdtID0gJmNzdGF0ZS0+d20uc2tsLm9wdGltYWwucGxhbmVzW3BsYW5l X2lkXTsKPiArCQlpZiAod20tPnRyYW5zX3dtLnBsYW5lX3Jlc19iID4gdG90YWxbcGxhbmVfaWRd KQo+ICsJCQl3bS0+dHJhbnNfd20ucGxhbmVfZW4gPSBmYWxzZTsKClNpbmNlIHdlIHVzZSBtZW1j bXAoKSB0byBjaGVjayBmb3IgZGlydHkgd2F0ZXJtYXJrcyB3ZSBzaG91bGQKcHJvYmFibHkgemVy byBvdXQgcGxhbmVfcmVzX2IvbCBoZXJlIHRvby4gTWF5YmUgZXZlbiB1c2UgbWVtc2V0KCkKZm9y IGNsZWFyaW5nIGVhY2ggZGlzYWJsZWQgdHJhbnMvbm9ybWFsIHdtLgoKPiAgCX0KPiAgCj4gIAly ZXR1cm4gMDsKPiBAQCAtNDcyMCwxNyArNDY1OCwxNSBAQCBza2xfY29tcHV0ZV9wbGFuZV93bV9w YXJhbXMoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKPiAgCXJldHVybiAw Owo+ICB9Cj4gIAo+IC1zdGF0aWMgaW50IHNrbF9jb21wdXRlX3BsYW5lX3dtKGNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCj4gLQkJCQljb25zdCBzdHJ1Y3QgaW50ZWxfcGxh bmVfc3RhdGUgKmludGVsX3BzdGF0ZSwKPiAtCQkJCXVpbnQxNl90IGRkYl9hbGxvY2F0aW9uLAo+ IC0JCQkJaW50IGxldmVsLAo+IC0JCQkJY29uc3Qgc3RydWN0IHNrbF93bV9wYXJhbXMgKndwLAo+ IC0JCQkJY29uc3Qgc3RydWN0IHNrbF93bV9sZXZlbCAqcmVzdWx0X3ByZXYsCj4gLQkJCQlzdHJ1 Y3Qgc2tsX3dtX2xldmVsICpyZXN1bHQgLyogb3V0ICovKQo+ICtzdGF0aWMgdm9pZCBza2xfY29t cHV0ZV9wbGFuZV93bShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAo+ICsJ CQkJIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqaW50ZWxfcHN0YXRlLAo+ICsJCQkJ IGludCBsZXZlbCwKPiArCQkJCSBjb25zdCBzdHJ1Y3Qgc2tsX3dtX3BhcmFtcyAqd3AsCj4gKwkJ CQkgY29uc3Qgc3RydWN0IHNrbF93bV9sZXZlbCAqcmVzdWx0X3ByZXYsCj4gKwkJCQkgc3RydWN0 IHNrbF93bV9sZXZlbCAqcmVzdWx0IC8qIG91dCAqLykKPiAgewo+ICAJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0KPiAgCQl0b19pOTE1KGludGVsX3BzdGF0ZS0+YmFzZS5wbGFu ZS0+ZGV2KTsKPiAtCWNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBzdGF0ZSA9ICZpbnRl bF9wc3RhdGUtPmJhc2U7Cj4gIAl1aW50MzJfdCBsYXRlbmN5ID0gZGV2X3ByaXYtPndtLnNrbF9s YXRlbmN5W2xldmVsXTsKPiAgCXVpbnRfZml4ZWRfMTZfMTZfdCBtZXRob2QxLCBtZXRob2QyOwo+ ICAJdWludF9maXhlZF8xNl8xNl90IHNlbGVjdGVkX3Jlc3VsdDsKPiBAQCAtNDc0MCw5ICs0Njc2 LDYgQEAgc3RhdGljIGludCBza2xfY29tcHV0ZV9wbGFuZV93bShjb25zdCBzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqY3N0YXRlLAo+ICAJYm9vbCBhcHBseV9tZW1vcnlfYndfd2EgPSBza2xfbmVl ZHNfbWVtb3J5X2J3X3dhKHN0YXRlKTsKPiAgCXVpbnQzMl90IG1pbl9kaXNwX2J1Zl9uZWVkZWQ7 Cj4gIAo+IC0JaWYgKGxhdGVuY3kgPT0gMCkKPiAtCQlyZXR1cm4gbGV2ZWwgPT0gMCA/IC1FSU5W QUwgOiAwOwo+IC0KPiAgCS8qIERpc3BsYXkgV0EgIzExNDE6IGtibCxjZmwgKi8KPiAgCWlmICgo SVNfS0FCWUxBS0UoZGV2X3ByaXYpIHx8IElTX0NPRkZFRUxBS0UoZGV2X3ByaXYpIHx8Cj4gIAkg ICAgSVNfQ05MX1JFVklEKGRldl9wcml2LCBDTkxfUkVWSURfQTAsIENOTF9SRVZJRF9CMCkpICYm Cj4gQEAgLTQ4MjgsMzggKzQ3NjEsMjQgQEAgc3RhdGljIGludCBza2xfY29tcHV0ZV9wbGFuZV93 bShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAo+ICAJCW1pbl9kaXNwX2J1 Zl9uZWVkZWQgPSByZXNfYmxvY2tzOwo+ICAJfQo+ICAKPiAtCWlmICgobGV2ZWwgPiAwICYmIHJl c19saW5lcyA+IDMxKSB8fAo+IC0JICAgIHJlc19ibG9ja3MgPj0gZGRiX2FsbG9jYXRpb24gfHwK PiAtCSAgICBtaW5fZGlzcF9idWZfbmVlZGVkID49IGRkYl9hbGxvY2F0aW9uKSB7CgpTaW5jZSB5 b3UncmUgcmVtb3ZpbmcgdGhpcyB0aGluZyB0aGUgY2FsY3VsYXRpb24gb2YgbWluX2Rpc3BfYnVm X25lZWRlZAppcyBub3cgcG9pbnRsZXNzIEFGQUlDUy4KCj4gLQkJLyoKPiAtCQkgKiBJZiB0aGVy ZSBhcmUgbm8gdmFsaWQgbGV2ZWwgMCB3YXRlcm1hcmtzLCB0aGVuIHdlIGNhbid0Cj4gLQkJICog c3VwcG9ydCB0aGlzIGRpc3BsYXkgY29uZmlndXJhdGlvbi4KPiAtCQkgKi8KPiAtCQlpZiAobGV2 ZWwpIHsKPiAtCQkJcmV0dXJuIDA7Cj4gLQkJfSBlbHNlIHsKPiAtCQkJc3RydWN0IGRybV9wbGFu ZSAqcGxhbmUgPSBwc3RhdGUtPnBsYW5lOwo+IC0KPiAtCQkJRFJNX0RFQlVHX0tNUygiUmVxdWVz dGVkIGRpc3BsYXkgY29uZmlndXJhdGlvbiBleGNlZWRzIHN5c3RlbSB3YXRlcm1hcmsgbGltaXRh dGlvbnNcbiIpOwo+IC0JCQlEUk1fREVCVUdfS01TKCJbUExBTkU6JWQ6JXNdIGJsb2NrcyByZXF1 aXJlZCA9ICV1LyV1LCBsaW5lcyByZXF1aXJlZCA9ICV1LzMxXG4iLAo+IC0JCQkJICAgICAgcGxh bmUtPmJhc2UuaWQsIHBsYW5lLT5uYW1lLAo+IC0JCQkJICAgICAgcmVzX2Jsb2NrcywgZGRiX2Fs bG9jYXRpb24sIHJlc19saW5lcyk7Cj4gLQkJCXJldHVybiAtRUlOVkFMOwo+IC0JCX0KPiAtCX0K PiAtCj4gIAkvKiBUaGUgbnVtYmVyIG9mIGxpbmVzIGFyZSBpZ25vcmVkIGZvciB0aGUgbGV2ZWwg MCB3YXRlcm1hcmsuICovCj4gKwlpZiAobGV2ZWwgPiAwICYmIHJlc19saW5lcyA+IDMxKQo+ICsJ CXJldHVybjsKPiArCj4gKwkvKgo+ICsJICogSWYgcmVzX2xpbmVzIGlzIHZhbGlkLCBhc3N1bWUg d2UgY2FuIHVzZSB0aGlzIHdhdGVybWFyayBsZXZlbAo+ICsJICogZm9yIG5vdy4gIFdlJ2xsIGNv bWUgYmFjayBhbmQgZGlzYWJsZSBpdCBhZnRlciB3ZSBjYWxjdWxhdGUgdGhlCj4gKwkgKiBEREIg YWxsb2NhdGlvbiBpZiBpdCB0dXJucyBvdXQgd2UgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBlbm91Z2gK PiArCSAqIGJsb2NrcyB0byBzYXRpc2Z5IGl0Lgo+ICsJICovCj4gIAlyZXN1bHQtPnBsYW5lX3Jl c19iID0gcmVzX2Jsb2NrczsKPiAgCXJlc3VsdC0+cGxhbmVfcmVzX2wgPSByZXNfbGluZXM7Cj4g IAlyZXN1bHQtPnBsYW5lX2VuID0gdHJ1ZTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAgfQo+ICAKPiAt c3RhdGljIGludAo+ICtzdGF0aWMgdm9pZAo+ICBza2xfY29tcHV0ZV93bV9sZXZlbHMoY29uc3Qg c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKPiAgCQkgICAgICBjb25zdCBzdHJ1Y3Qg aW50ZWxfcGxhbmVfc3RhdGUgKmludGVsX3BzdGF0ZSwKPiAtCQkgICAgICB1aW50MTZfdCBkZGJf YmxvY2tzLAo+ICAJCSAgICAgIGNvbnN0IHN0cnVjdCBza2xfd21fcGFyYW1zICp3bV9wYXJhbXMs Cj4gIAkJICAgICAgc3RydWN0IHNrbF93bV9sZXZlbCAqbGV2ZWxzKQo+ICB7Cj4gQEAgLTQ4Njcs MjUgKzQ3ODYsMTUgQEAgc2tsX2NvbXB1dGVfd21fbGV2ZWxzKGNvbnN0IHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjc3RhdGUsCj4gIAkJdG9faTkxNShpbnRlbF9wc3RhdGUtPmJhc2UucGxhbmUt PmRldik7Cj4gIAlpbnQgbGV2ZWwsIG1heF9sZXZlbCA9IGlsa193bV9tYXhfbGV2ZWwoZGV2X3By aXYpOwo+ICAJc3RydWN0IHNrbF93bV9sZXZlbCAqcmVzdWx0X3ByZXYgPSAmbGV2ZWxzWzBdOwo+ IC0JaW50IHJldDsKPiAgCj4gIAlmb3IgKGxldmVsID0gMDsgbGV2ZWwgPD0gbWF4X2xldmVsOyBs ZXZlbCsrKSB7Cj4gIAkJc3RydWN0IHNrbF93bV9sZXZlbCAqcmVzdWx0ID0gJmxldmVsc1tsZXZl bF07Cj4gIAo+IC0JCXJldCA9IHNrbF9jb21wdXRlX3BsYW5lX3dtKGNzdGF0ZSwKPiAtCQkJCQkg ICBpbnRlbF9wc3RhdGUsCj4gLQkJCQkJICAgZGRiX2Jsb2NrcywKPiAtCQkJCQkgICBsZXZlbCwK PiAtCQkJCQkgICB3bV9wYXJhbXMsCj4gLQkJCQkJICAgcmVzdWx0X3ByZXYsCj4gLQkJCQkJICAg cmVzdWx0KTsKPiAtCQlpZiAocmV0KQo+IC0JCQlyZXR1cm4gcmV0Owo+ICsJCXNrbF9jb21wdXRl X3BsYW5lX3dtKGNzdGF0ZSwgaW50ZWxfcHN0YXRlLCBsZXZlbCwgd21fcGFyYW1zLAo+ICsJCQkJ ICAgICByZXN1bHRfcHJldiwgcmVzdWx0KTsKPiAgCj4gIAkJcmVzdWx0X3ByZXYgPSByZXN1bHQ7 Cj4gIAl9Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gIH0KPiAgCj4gIHN0YXRpYyB1aW50MzJfdAo+IEBA IC00OTEzLDggKzQ4MjIsNyBAQCBza2xfY29tcHV0ZV9saW5ldGltZV93bShjb25zdCBzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlKQo+ICAKPiAgc3RhdGljIHZvaWQgc2tsX2NvbXB1dGVf dHJhbnNpdGlvbl93bShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAo+ICAJ CQkJICAgICAgY29uc3Qgc3RydWN0IHNrbF93bV9wYXJhbXMgKndwLAo+IC0JCQkJICAgICAgc3Ry dWN0IHNrbF9wbGFuZV93bSAqd20sCj4gLQkJCQkgICAgICB1aW50MTZfdCBkZGJfYWxsb2NhdGlv bikKPiArCQkJCSAgICAgIHN0cnVjdCBza2xfcGxhbmVfd20gKndtKQo+ICB7Cj4gIAlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gY3N0YXRlLT5iYXNlLmNydGMtPmRldjsKPiAgCWNvbnN0IHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiBAQCAtNDk2Miwz NCArNDg3MCwzOCBAQCBzdGF0aWMgdm9pZCBza2xfY29tcHV0ZV90cmFuc2l0aW9uX3dtKGNvbnN0 IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCj4gIAo+ICAJfQo+ICAKPiAtCXJlc19i bG9ja3MgKz0gMTsKPiAtCj4gLQlpZiAocmVzX2Jsb2NrcyA8IGRkYl9hbGxvY2F0aW9uKSB7Cj4g LQkJd20tPnRyYW5zX3dtLnBsYW5lX3Jlc19iID0gcmVzX2Jsb2NrczsKPiAtCQl3bS0+dHJhbnNf d20ucGxhbmVfZW4gPSB0cnVlOwo+IC0JfQo+ICsJLyoKPiArCSAqIEp1c3QgYXNzdW1lIHdlIGNh biBlbmFibGUgdGhlIHRyYW5zaXRpb24gd2F0ZXJtYXJrLiAgQWZ0ZXIKPiArCSAqIGNvbXB1dGlu ZyB0aGUgRERCIHdlJ2xsIGNvbWUgYmFjayBhbmQgZGlzYWJsZSBpdCBpZiB0aGF0Cj4gKwkgKiBh c3N1bXB0aW9uIHR1cm5zIG91dCB0byBiZSBmYWxzZS4KPiArCSAqLwo+ICsJd20tPnRyYW5zX3dt LnBsYW5lX3Jlc19iID0gcmVzX2Jsb2NrcyArIDE7Cj4gKwl3bS0+dHJhbnNfd20ucGxhbmVfZW4g PSB0cnVlOwo+ICB9Cj4gIAo+ICBzdGF0aWMgaW50IHNrbF9idWlsZF9wbGFuZV93bV9zaW5nbGUo c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gIAkJCQkgICAgIGNvbnN0IHN0 cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUsCj4gIAkJCQkgICAgIGVudW0gcGxh bmVfaWQgcGxhbmVfaWQsIGludCBjb2xvcl9wbGFuZSkKPiAgewo+ICsJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjX3N0YXRlLT5iYXNlLmNydGMtPmRldik7 Cj4gIAlzdHJ1Y3Qgc2tsX3BsYW5lX3dtICp3bSA9ICZjcnRjX3N0YXRlLT53bS5za2wub3B0aW1h bC5wbGFuZXNbcGxhbmVfaWRdOwo+IC0JdTE2IGRkYl9ibG9ja3MgPSBza2xfZGRiX2VudHJ5X3Np emUoJmNydGNfc3RhdGUtPndtLnNrbC5wbGFuZV9kZGJfeVtwbGFuZV9pZF0pOwo+ICAJc3RydWN0 IHNrbF93bV9wYXJhbXMgd21fcGFyYW1zOwo+ICAJaW50IHJldDsKPiAgCj4gKwkvKgo+ICsJICog VGhpcyBjYW4gb25seSBoYXBwZW4gaWYgc29tZW9uZSBvdmVycmlkZXMgdGhlIGxhdGVuY3kgdG8g YW4gaW52YWxpZAo+ICsJICogdmFsdWUgb2YgMCBpbiBkZWJ1Z2ZzLgo+ICsJICovCj4gKwlpZiAo ZGV2X3ByaXYtPndtLnNrbF9sYXRlbmN5WzBdID09IDApCj4gKwkJcmV0dXJuIC1FSU5WQUw7CgpJ IGd1ZXNzIHdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdGhpcyBhbnltb3JlLiBJIHRoaW5rIGl0IHNo b3VsZCBlbmQKdXAgYXV0b21hZ2ljYWxseSBoYW5kbGVkIGJ5IHRoZSBkZGIgYWxsb2NhdGlvbiBm YWlsaW5nIG9uIGFjY291bnQKb2Ygc2tsX3dtX21ldGhvZHsxLDJ9KCkgcmV0dXJuaW5nICJzb21l IGJpZyBudW1iZXIiLgoKPiArCj4gIAlyZXQgPSBza2xfY29tcHV0ZV9wbGFuZV93bV9wYXJhbXMo Y3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUsCj4gIAkJCQkJICAmd21fcGFyYW1zLCBjb2xvcl9wbGFu ZSk7Cj4gIAlpZiAocmV0KQo+ICAJCXJldHVybiByZXQ7Cj4gIAo+IC0JcmV0ID0gc2tsX2NvbXB1 dGVfd21fbGV2ZWxzKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlLAo+IC0JCQkJICAgIGRkYl9ibG9j a3MsICZ3bV9wYXJhbXMsIHdtLT53bSk7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4g LQo+IC0Jc2tsX2NvbXB1dGVfdHJhbnNpdGlvbl93bShjcnRjX3N0YXRlLCAmd21fcGFyYW1zLCB3 bSwgZGRiX2Jsb2Nrcyk7Cj4gKwlza2xfY29tcHV0ZV93bV9sZXZlbHMoY3J0Y19zdGF0ZSwgcGxh bmVfc3RhdGUsICZ3bV9wYXJhbXMsIHdtLT53bSk7Cj4gKwlza2xfY29tcHV0ZV90cmFuc2l0aW9u X3dtKGNydGNfc3RhdGUsICZ3bV9wYXJhbXMsIHdtKTsKPiAgCj4gIAlyZXR1cm4gMDsKPiAgfQo+ IEBAIC00OTk5LDcgKzQ5MTEsNiBAQCBzdGF0aWMgaW50IHNrbF9idWlsZF9wbGFuZV93bV91dihz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiAgCQkJCSBlbnVtIHBsYW5lX2lk IHBsYW5lX2lkKQo+ICB7Cj4gIAlzdHJ1Y3Qgc2tsX3BsYW5lX3dtICp3bSA9ICZjcnRjX3N0YXRl LT53bS5za2wub3B0aW1hbC5wbGFuZXNbcGxhbmVfaWRdOwo+IC0JdTE2IGRkYl9ibG9ja3MgPSBz a2xfZGRiX2VudHJ5X3NpemUoJmNydGNfc3RhdGUtPndtLnNrbC5wbGFuZV9kZGJfdXZbcGxhbmVf aWRdKTsKPiAgCXN0cnVjdCBza2xfd21fcGFyYW1zIHdtX3BhcmFtczsKPiAgCWludCByZXQ7Cj4g IAo+IEBAIC01MDExLDEwICs0OTIyLDcgQEAgc3RhdGljIGludCBza2xfYnVpbGRfcGxhbmVfd21f dXYoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gIAlpZiAocmV0KQo+ICAJ CXJldHVybiByZXQ7Cj4gIAo+IC0JcmV0ID0gc2tsX2NvbXB1dGVfd21fbGV2ZWxzKGNydGNfc3Rh dGUsIHBsYW5lX3N0YXRlLAo+IC0JCQkJICAgIGRkYl9ibG9ja3MsICZ3bV9wYXJhbXMsIHdtLT51 dl93bSk7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gKwlza2xfY29tcHV0ZV93bV9s ZXZlbHMoY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUsICZ3bV9wYXJhbXMsIHdtLT51dl93bSk7Cj4g IAo+ICAJcmV0dXJuIDA7Cj4gIH0KPiBAQCAtNTUzMiwxMyArNTQ0MCw5IEBAIHNrbF9jb21wdXRl X3dtKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKPiAgCWlmIChyZXQgfHwgIWNoYW5n ZWQpCj4gIAkJcmV0dXJuIHJldDsKPiAgCj4gLQlyZXQgPSBza2xfY29tcHV0ZV9kZGIoc3RhdGUp Owo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+IC0KPiAgCS8qCj4gIAkgKiBDYWxjdWxh dGUgV00ncyBmb3IgYWxsIHBpcGVzIHRoYXQgYXJlIHBhcnQgb2YgdGhpcyB0cmFuc2FjdGlvbi4K PiAtCSAqIE5vdGUgdGhhdCB0aGUgRERCIGFsbG9jYXRpb24gYWJvdmUgbWF5IGhhdmUgYWRkZWQg bW9yZSBDUlRDJ3MgdGhhdAo+ICsJICogTm90ZSB0aGF0IHNrbF9kZGJfYWRkX2FmZmVjdGVkX3Bp cGVzIG1heSBoYXZlIGFkZGVkIG1vcmUgQ1JUQydzIHRoYXQKPiAgCSAqIHdlcmVuJ3Qgb3RoZXJ3 aXNlIGJlaW5nIG1vZGlmaWVkIChhbmQgc2V0IGJpdHMgaW4gZGlydHlfcGlwZXMpIGlmCj4gIAkg KiBwaXBlIGFsbG9jYXRpb25zIGhhZCB0byBjaGFuZ2UuCj4gIAkgKi8KPiBAQCAtNTU2OCw2ICs1 NDcyLDEwIEBAIHNrbF9jb21wdXRlX3dtKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkK PiAgCQlpbnRlbF9jc3RhdGUtPnVwZGF0ZV93bV9wcmUgPSB0cnVlOwo+ICAJfQo+ICAKPiArCXJl dCA9IHNrbF9jb21wdXRlX2RkYihzdGF0ZSk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7 Cj4gKwo+ICAJc2tsX3ByaW50X3dtX2NoYW5nZXMoaW50ZWxfc3RhdGUpOwo+ICAKPiAgCXJldHVy biAwOwo+IC0tIAo+IDIuMTQuNAo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCj4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+IEludGVsLWdmeEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2ludGVsLWdmeAoKLS0gClZpbGxlIFN5cmrDpGzDpApJbnRlbApfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBs aXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK