From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rodrigo Vivi Subject: Re: [PATCH v2] drm/i915/skl+: ddb allocation algorithm optimization Date: Mon, 2 Jul 2018 16:26:41 -0700 Message-ID: <20180702232641.GJ31287@intel.com> References: <20180629094335.15242-1-mahesh1.kumar@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 E21826E568 for ; Mon, 2 Jul 2018 23:26:44 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20180629094335.15242-1-mahesh1.kumar@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Mahesh Kumar Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCBKdW4gMjksIDIwMTggYXQgMDM6MTM6MzVQTSArMDUzMCwgTWFoZXNoIEt1bWFyIHdy b3RlOgo+IFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBuZXcgRERCIGFsbG9jYXRpb24gYWxnb3JpdGht IGFzIHBlciBIVyB0ZWFtCj4gcmVjb21tZW5kYXRpb24uIFRoaXMgYWxnbyB0YWtlY2FyZSBvZiBz Y2VuYXJpbyB3aGVyZSB3ZSBhbGxvY2F0ZSBsZXNzIEREQgo+IGZvciB0aGUgcGxhbmVzIHdpdGgg bG93ZXIgcmVsYXRpdmUgcGl4ZWwgcmF0ZSwgYnV0IHRoZXkgcmVxdWlyZSBtb3JlIEREQgo+IHRv IHdvcmsuCj4gSXQgYWxzbyB0YWtlcyBjYXJlIG9mIGVuYWJsaW5nIHNhbWUgd2F0ZXJtYXJrIGxl dmVsIGZvciBlYWNoCgpVc3VhbGx5ICJJdCBhbHNvIiBpbiBhIGNvbW1pdCBtZXNzYWdlIGlzIGEg Z29vZCBpbmRpY2F0aW9uIHRoYXQgd2Ugc2hvdWxkCmJlIGRvaW5nIG1vcmUgdGhhbiBvbmUgcGF0 Y2guCgo+IHBsYW5lIGluIGNydGMsIGZvciBlZmZpY2llbnQgcG93ZXIgc2F2aW5nLgo+IFRoaXMg YWxnb3JpdGhtIHVzZXMgZml4ZWQgZGRiIGFsbG9jYXRpb24gZm9yIGN1cnNvciBwbGFuZXMuCj4g Cj4gRWFsaWVyIHZlcnNpb24gb2YgdGhpcyBwYXRjaCByZXZlcnRlZCBkdWUgdG8gcmVncmVzc2lv bi4gQW5kIGl0IHdhcyByb290Cj4gY2F1c2VkIHRvIGZvbGxvd2luZzoKPiBOZXcgYWxnb3JpdGht IHJlcXVpcmVkIG1vcmUgRERCIGZvciBjdXJzb3IgcGxhbmUgYnV0IGFzIGN1cnNvciBwbGFuZSBo YXMKPiBmaXhlZCBhbGxvY2F0aW9uIGl0J3MgRERCIHdhcyBub3Qgc3VmZmljaWVudCBhbmQgV00g bGV2ZWwtMCB3YXMgZ2V0dGluZwo+IGRpc2FibGVkLCByZXN1bHRpbmcgaW4gYmxhbmsgc2NyZWVu LiBOb3cgd2UgdXNlIG9sZCBEREIgYWxsb2NhdGlvbiBsb2dpYwo+IG9ubHkgZm9yIGN1cnNvciBw bGFuZS4KCkkgcmVhbGx5IGRvbid0IHNlZSBvbiBzcGVjIG9sZCBhbmQgbmV3IEREQiBhbGxvY2F0 aW9uIGxvZ2ljcy4KCk9ubHkgdGhpbmcgZGlmZmVyZW50IGZvciBjdXJzb3IgdGhhdCBJIHNlZSB0 aGVyZSBpcyB0aGF0IGEgd29ya2Fyb3VuZCBvbgp3YXRlcm1hcmsgY2FsY3VsYXRpb24gd2hlcmUg IkZvciBlYWNoIHBsYW5lLCBleGNlcHQgY3Vyc29yLi4uIgoKIk51bWJlciBvZiBwbGFuZXMsIGV4 Y2VwdCBjdXJzb3IuLi4iCgpUaGlzIGlzIG5vdCB3aGF0IEkgc2VlIGluIHRoaXMgcGF0Y2gsIGJ1 dCBtYXliZSBiZWNhdXNlIHRoZSBwYXRjaCBpcyB0b28gYmlnLgoKPiAKPiBDaGFuZ2VzOgo+ICAt IGFkZCByZWFzb24gZm9yIHJldmVydCBpbiBjb21taXQgbXNnIChNYWFydGVuKQo+ICAtIEZpeCBj aGVja3BhdGNoIGNoZWNrcwo+IAo+IFRlc3RjYXNlOiBpZ3Qva21zX3BsYW5lX211bHRpcGxlCj4g U2lnbmVkLW9mZi1ieTogTWFoZXNoIEt1bWFyIDxtYWhlc2gxLmt1bWFyQGludGVsLmNvbT4KPiBD YzogUm9kcmlnbyBWaXZpIDxyb2RyaWdvLnZpdmlAaW50ZWwuY29tPgoKV2VsbCwgc2luY2UgSSdt IG9uIGNjIGFuZCBJIHdhcyB0aGUgb25lIHRoYXQgcmV2ZXJ0ZWQgdGhhdCBiZWNhdXNlIEkgbm90 aWNlZApvbiBteSBvd24gbWFjaGluZSBJIG9wZW5lZCB0aGlzIHBhdGNoIGZvciByZXZpZXcgbWFu eSB0aW1lcyBoZXJlIGFscmVhZHksCmJ1dCBJIGdhdmUgdXAgY29tcGxldGVseSBldmVyeSB0aW1l IGJlY2F1c2UgdGhpcyBwYXRjaCBpcyBoYXJkIHRvIHJldmlldy4KClNvIHRoaXMgdGltZSBJIHdv bid0IGZ1bGx5IGdpdmUgdXAgYW5kIGF0IGxlYXN0IHB1dCBzb21lIGNvbW1lbnRzLi4uCgpTbywg b3ZlcmFsbCBpdCBpcyBoYXJkIHRvIG1hdGNoIHRoZSBzcGVjIGRpZmZlcmVuY2VzIGJlY2F1c2Ug dGhpcyBwYXRjaAppcyB0cnlpbmcgdG8gZG8gYWxsIGF0IG9uY2UuIFNtYWxsZXIgcGF0Y2hlcyBz aG91bGQgYmUgYmV0dGVyLgoKPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYu aCB8ICAgNSArLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jIHwgMzc2ICsrKysr KysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0KPiAgMiBmaWxlcyBjaGFuZ2VkLCAy MTkgaW5zZXJ0aW9ucygrKSwgMTYyIGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuaAo+IGluZGV4IDJiNjg0ZjQzMWM2MC4uZjVkNjM2YTZkMTIxIDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2Rydi5oCj4gQEAgLTEyMTIsOCArMTIxMiw5IEBAIHN0cnVjdCBza2xfZGRiX3ZhbHVl cyB7Cj4gIAo+ICBzdHJ1Y3Qgc2tsX3dtX2xldmVsIHsKPiAgCWJvb2wgcGxhbmVfZW47Cj4gLQl1 aW50MTZfdCBwbGFuZV9yZXNfYjsKPiAtCXVpbnQ4X3QgcGxhbmVfcmVzX2w7Cj4gKwl1MTYgcGxh bmVfcmVzX2I7Cj4gKwl1OCBwbGFuZV9yZXNfbDsKPiArCXUxNiBtaW5fZGJ1Zl9yZXE7Cj4gIH07 Cj4gIAo+ICAvKiBTdG9yZXMgcGxhbmUgc3BlY2lmaWMgV00gcGFyYW1ldGVycyAqLwo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfcG0uYwo+IGluZGV4IDUzYWFhYTNlNjg4Ni4uZDE1NjRhMDhhMjAyIDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCj4gQEAgLTM4MDIsMTcgKzM4MDIsMzcgQEAgc3RhdGlj IHVuc2lnbmVkIGludCBpbnRlbF9nZXRfZGRiX3NpemUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LAo+ICAJcmV0dXJuIGRkYl9zaXplOwo+ICB9Cj4gIAo+ICtzdGF0aWMgaW50Cj4g K3NrbF9nZXRfbnVtX3BpcGVzX2FjdGl2ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsCj4gKwkJCSBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlKQo+ICt7Cj4g KwlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUgPSBjc3RhdGUtPmJhc2Uuc3RhdGU7Cj4g Kwljb25zdCBzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICppbnRlbF9zdGF0ZTsKPiArCWludCBu dW1fYWN0aXZlOwo+ICsKPiArCWlmIChXQVJOX09OKCFzdGF0ZSkgfHwgIWNzdGF0ZS0+YmFzZS5h Y3RpdmUpCj4gKwkJcmV0dXJuIGh3ZWlnaHQzMihkZXZfcHJpdi0+YWN0aXZlX2NydGNzKTsKPiAr Cj4gKwlpbnRlbF9zdGF0ZSA9IHRvX2ludGVsX2F0b21pY19zdGF0ZShzdGF0ZSk7Cj4gKwo+ICsJ aWYgKGludGVsX3N0YXRlLT5hY3RpdmVfcGlwZV9jaGFuZ2VzKQo+ICsJCW51bV9hY3RpdmUgPSBo d2VpZ2h0MzIoaW50ZWxfc3RhdGUtPmFjdGl2ZV9jcnRjcyk7Cj4gKwllbHNlCj4gKwkJbnVtX2Fj dGl2ZSA9IGh3ZWlnaHQzMihkZXZfcHJpdi0+YWN0aXZlX2NydGNzKTsKPiArCj4gKwlyZXR1cm4g bnVtX2FjdGl2ZTsKPiArfQoKVGhpcyBlbnRpcmUgZnVuY3Rpb24gaGVyZSBpcyBzb21ldGhpbmcg dGhhdCBzaG91bGQgY29tZSBpbiBhIHNlcGFyYXRlZCBwYXRjaC4KCj4gKwo+ICBzdGF0aWMgdm9p ZAo+IC1za2xfZGRiX2dldF9waXBlX2FsbG9jYXRpb25fbGltaXRzKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsCj4gK3NrbF9kZGJfZ2V0X3BpcGVfYWxsb2NhdGlvbl9saW1pdHMoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAJCQkJICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNzdGF0ZSwKPiAgCQkJCSAgIGNvbnN0IHVuc2lnbmVkIGludCB0b3RhbF9kYXRhX3Jh dGUsCj4gIAkJCQkgICBzdHJ1Y3Qgc2tsX2RkYl9hbGxvY2F0aW9uICpkZGIsCj4gLQkJCQkgICBz dHJ1Y3Qgc2tsX2RkYl9lbnRyeSAqYWxsb2MsIC8qIG91dCAqLwo+IC0JCQkJICAgaW50ICpudW1f YWN0aXZlIC8qIG91dCAqLykKPiArCQkJCSAgIGludCBudW1fYWN0aXZlLAo+ICsJCQkJICAgc3Ry dWN0IHNrbF9kZGJfZW50cnkgKmFsbG9jIC8qIG91dCAqLykKCnlvdSBkb24ndCBuZWVkIHRvIGlu dmVydCB0aGUgb3JkZXIgd2hlbiByZW1vdmluZyB0aGUgcG9pbnRlci4uLgoKYnV0IGFnYWluLCBh bGwgdGhpcyBudW1fYWN0aXZlIHNlZW1zIHRvIGJlIGluIGEgc2VwYXJhdGVkIHBhdGNoLi4uLgoK PiAgewo+ICAJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlID0gY3N0YXRlLT5iYXNlLnN0 YXRlOwo+ICAJc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqaW50ZWxfc3RhdGUgPSB0b19pbnRl bF9hdG9taWNfc3RhdGUoc3RhdGUpOwo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gdG9faTkxNShkZXYpOwo+ICAJc3RydWN0IGRybV9jcnRjICpmb3JfY3J0YyA9IGNzdGF0 ZS0+YmFzZS5jcnRjOwo+ICAJdW5zaWduZWQgaW50IHBpcGVfc2l6ZSwgZGRiX3NpemU7Cj4gIAlp bnQgbnRoX2FjdGl2ZV9waXBlOwo+IEBAIC0zODIwLDE3ICszODQwLDExIEBAIHNrbF9kZGJfZ2V0 X3BpcGVfYWxsb2NhdGlvbl9saW1pdHMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgCWlmIChX QVJOX09OKCFzdGF0ZSkgfHwgIWNzdGF0ZS0+YmFzZS5hY3RpdmUpIHsKPiAgCQlhbGxvYy0+c3Rh cnQgPSAwOwo+ICAJCWFsbG9jLT5lbmQgPSAwOwo+IC0JCSpudW1fYWN0aXZlID0gaHdlaWdodDMy KGRldl9wcml2LT5hY3RpdmVfY3J0Y3MpOwo+ICAJCXJldHVybjsKPiAgCX0KPiAgCj4gLQlpZiAo aW50ZWxfc3RhdGUtPmFjdGl2ZV9waXBlX2NoYW5nZXMpCj4gLQkJKm51bV9hY3RpdmUgPSBod2Vp Z2h0MzIoaW50ZWxfc3RhdGUtPmFjdGl2ZV9jcnRjcyk7Cj4gLQllbHNlCj4gLQkJKm51bV9hY3Rp dmUgPSBod2VpZ2h0MzIoZGV2X3ByaXYtPmFjdGl2ZV9jcnRjcyk7Cj4gLQo+ICAJZGRiX3NpemUg PSBpbnRlbF9nZXRfZGRiX3NpemUoZGV2X3ByaXYsIGNzdGF0ZSwgdG90YWxfZGF0YV9yYXRlLAo+ IC0JCQkJICAgICAgKm51bV9hY3RpdmUsIGRkYik7Cj4gKwkJCQkgICAgICBudW1fYWN0aXZlLCBk ZGIpOwo+ICAKPiAgCS8qCj4gIAkgKiBJZiB0aGUgc3RhdGUgZG9lc24ndCBjaGFuZ2UgdGhlIGFj dGl2ZSBDUlRDJ3MsIHRoZW4gdGhlcmUncwo+IEBAIC0zODUyLDcgKzM4NjYsNyBAQCBza2xfZGRi X2dldF9waXBlX2FsbG9jYXRpb25fbGltaXRzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gIAlu dGhfYWN0aXZlX3BpcGUgPSBod2VpZ2h0MzIoaW50ZWxfc3RhdGUtPmFjdGl2ZV9jcnRjcyAmCj4g IAkJCQkgICAgKGRybV9jcnRjX21hc2soZm9yX2NydGMpIC0gMSkpOwo+ICAJcGlwZV9zaXplID0g ZGRiX3NpemUgLyBod2VpZ2h0MzIoaW50ZWxfc3RhdGUtPmFjdGl2ZV9jcnRjcyk7Cj4gLQlhbGxv Yy0+c3RhcnQgPSBudGhfYWN0aXZlX3BpcGUgKiBkZGJfc2l6ZSAvICpudW1fYWN0aXZlOwo+ICsJ YWxsb2MtPnN0YXJ0ID0gbnRoX2FjdGl2ZV9waXBlICogZGRiX3NpemUgLyBudW1fYWN0aXZlOwo+ ICAJYWxsb2MtPmVuZCA9IGFsbG9jLT5zdGFydCArIHBpcGVfc2l6ZTsKPiAgfQo+ICAKPiBAQCAt NDI3MSwxMyArNDI4NSw1OCBAQCBza2xfZGRiX2NhbGNfbWluKGNvbnN0IHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjc3RhdGUsIGludCBudW1fYWN0aXZlLAo+ICAJbWluaW11bVtQTEFORV9DVVJT T1JdID0gc2tsX2N1cnNvcl9hbGxvY2F0aW9uKG51bV9hY3RpdmUpOwo+ICB9Cj4gIAo+ICtzdGF0 aWMgdm9pZAo+ICtza2xfZW5hYmxlX3BsYW5lX3dtX2xldmVscyhjb25zdCBzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gKwkJCSAgIHUxNiBwbGFuZV9kZGIsCj4gKwkJCSAgIHUx NiBtYXhfbGV2ZWwsCj4gKwkJCSAgIHN0cnVjdCBza2xfcGxhbmVfd20gKndtKQo+ICt7Cj4gKwlp bnQgbGV2ZWw7Cj4gKwkvKgo+ICsJICogTm93IGVuYWJsZSBhbGwgbGV2ZWxzIGluIFdNIHN0cnVj dHVyZSB3aGljaCBjYW4gYmUgZW5hYmxlZAo+ICsJICogdXNpbmcgY3VycmVudCBEREIgYWxsb2Nh dGlvbgo+ICsJICovCgpUaGlzIHN0YXRlbWVudCBjb25mdXNlcyBtZSBhIGJpdC4uLiAiTm93IiBp cyBwcm9iYWJseSBub3QgdGhlIHJpZ2h0IHdvcmQgZm9yCnRoZSBhdG9taWMgY2hlY2sgcGFydC4K Cj4gKwlmb3IgKGxldmVsID0gaWxrX3dtX21heF9sZXZlbChkZXZfcHJpdik7IGxldmVsID49IDA7 IGxldmVsLS0pIHsKPiArCQlzdHJ1Y3Qgc2tsX3dtX2xldmVsICpsZXZlbF93bSA9ICZ3bS0+d21b bGV2ZWxdOwo+ICsKPiArCQlpZiAobGV2ZWxfd20tPm1pbl9kYnVmX3JlcSA+IHBsYW5lX2RkYiB8 fCBsZXZlbCA+IG1heF9sZXZlbCB8fAo+ICsJCSAgICAobGV2ZWwgJiYgbGV2ZWxfd20tPnBsYW5l X3Jlc19sID49IDMxKSB8fAo+ICsJCSAgICBsZXZlbF93bS0+cGxhbmVfcmVzX2IgPT0gMCkgewo+ ICsJCQlsZXZlbF93bS0+cGxhbmVfZW4gPSBmYWxzZTsKPiArCQkJbGV2ZWxfd20tPnBsYW5lX3Jl c19iID0gMDsKPiArCQkJbGV2ZWxfd20tPnBsYW5lX3Jlc19sID0gMDsKPiArCQl9IGVsc2Ugewo+ ICsJCQlsZXZlbF93bS0+cGxhbmVfZW4gPSB0cnVlOwo+ICsJCX0KPiArCj4gKwkJLyoKPiArCQkg KiBEaXNwbGF5IFdBICM4MjYgKFNLTDpBTEwsIEJYVDpBTEwpICYgIzEwNTkgKENOTDpBKQo+ICsJ CSAqIGRpc2FibGUgd20gbGV2ZWwgMS03IG9uIE5WMTIgcGxhbmVzCj4gKwkJICovCj4gKwkJaWYg KHdtLT5pc19wbGFuYXIgJiYgbGV2ZWwgPj0gMSAmJgo+ICsJCSAgICAoSVNfU0tZTEFLRShkZXZf cHJpdikgfHwgSVNfQlJPWFRPTihkZXZfcHJpdikgfHwKPiArCQkgICAgIElTX0NOTF9SRVZJRChk ZXZfcHJpdiwgQ05MX1JFVklEX0EwLCBDTkxfUkVWSURfQTApKSkgewo+ICsJCQlsZXZlbF93bS0+ cGxhbmVfZW4gPSBmYWxzZTsKPiArCQkJbGV2ZWxfd20tPnBsYW5lX3Jlc19iID0gMDsKPiArCQkJ bGV2ZWxfd20tPnBsYW5lX3Jlc19sID0gMDsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJaWYgKHdtLT50 cmFuc193bS5wbGFuZV9yZXNfYiAmJiB3bS0+dHJhbnNfd20ucGxhbmVfcmVzX2IgPCBwbGFuZV9k ZGIpCj4gKwkJd20tPnRyYW5zX3dtLnBsYW5lX2VuID0gdHJ1ZTsKPiArCWVsc2UKPiArCQl3bS0+ dHJhbnNfd20ucGxhbmVfZW4gPSBmYWxzZTsKPiArfQo+ICsKPiAgc3RhdGljIGludAo+ICBza2xf YWxsb2NhdGVfcGlwZV9kZGIoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKPiArCQkg ICAgICBzdHJ1Y3Qgc2tsX3BpcGVfd20gKnBpcGVfd20sCj4gIAkJICAgICAgc3RydWN0IHNrbF9k ZGJfYWxsb2NhdGlvbiAqZGRiIC8qIG91dCAqLykKPiAgewo+ICAJc3RydWN0IGRybV9hdG9taWNf c3RhdGUgKnN0YXRlID0gY3N0YXRlLT5iYXNlLnN0YXRlOwo+ICAJc3RydWN0IGRybV9jcnRjICpj cnRjID0gY3N0YXRlLT5iYXNlLmNydGM7Cj4gIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0 Yy0+ZGV2Owo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShk ZXYpOwo+ICAJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNy dGMpOwo+ICAJZW51bSBwaXBlIHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOwo+ICAJc3RydWN0IHNr bF9kZGJfZW50cnkgKmFsbG9jID0gJmNzdGF0ZS0+d20uc2tsLmRkYjsKPiBAQCAtNDI5MCw2ICs0 MzQ5LDggQEAgc2tsX2FsbG9jYXRlX3BpcGVfZGRiKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj c3RhdGUsCj4gIAl1bnNpZ25lZCBpbnQgcGxhbmVfZGF0YV9yYXRlW0k5MTVfTUFYX1BMQU5FU10g PSB7fTsKPiAgCXVuc2lnbmVkIGludCB1dl9wbGFuZV9kYXRhX3JhdGVbSTkxNV9NQVhfUExBTkVT XSA9IHt9Owo+ICAJdWludDE2X3QgdG90YWxfbWluX2Jsb2NrcyA9IDA7Cj4gKwl1MTYgdG90YWxf bGV2ZWxfZGRiLCBwbGFuZV9ibG9ja3MgPSAwOwo+ICsJaW50IG1heF9sZXZlbCwgbGV2ZWw7Cj4g IAo+ICAJLyogQ2xlYXIgdGhlIHBhcnRpdGlvbmluZyBmb3IgZGlzYWJsZWQgcGxhbmVzLiAqLwo+ ICAJbWVtc2V0KGRkYi0+cGxhbmVbcGlwZV0sIDAsIHNpemVvZihkZGItPnBsYW5lW3BpcGVdKSk7 Cj4gQEAgLTQzMDYsMTQgKzQzNjcsMTYgQEAgc2tsX2FsbG9jYXRlX3BpcGVfZGRiKHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCj4gIAl0b3RhbF9kYXRhX3JhdGUgPSBza2xfZ2V0X3Rv dGFsX3JlbGF0aXZlX2RhdGFfcmF0ZShjc3RhdGUsCj4gIAkJCQkJCQkgICBwbGFuZV9kYXRhX3Jh dGUsCj4gIAkJCQkJCQkgICB1dl9wbGFuZV9kYXRhX3JhdGUpOwo+IC0Jc2tsX2RkYl9nZXRfcGlw ZV9hbGxvY2F0aW9uX2xpbWl0cyhkZXYsIGNzdGF0ZSwgdG90YWxfZGF0YV9yYXRlLCBkZGIsCj4g LQkJCQkJICAgYWxsb2MsICZudW1fYWN0aXZlKTsKPiArCj4gKwludW1fYWN0aXZlID0gc2tsX2dl dF9udW1fcGlwZXNfYWN0aXZlKGRldl9wcml2LCBjc3RhdGUpOwo+ICsJc2tsX2RkYl9jYWxjX21p bihjc3RhdGUsIG51bV9hY3RpdmUsIG1pbmltdW0sIHV2X21pbmltdW0pOwo+ICsKPiArCXNrbF9k ZGJfZ2V0X3BpcGVfYWxsb2NhdGlvbl9saW1pdHMoZGV2X3ByaXYsIGNzdGF0ZSwgdG90YWxfZGF0 YV9yYXRlLAo+ICsJCQkJCSAgIGRkYiwgbnVtX2FjdGl2ZSwgYWxsb2MpOwo+ICAJYWxsb2Nfc2l6 ZSA9IHNrbF9kZGJfZW50cnlfc2l6ZShhbGxvYyk7Cj4gIAlpZiAoYWxsb2Nfc2l6ZSA9PSAwKQo+ ICAJCXJldHVybiAwOwo+ICAKPiAtCXNrbF9kZGJfY2FsY19taW4oY3N0YXRlLCBudW1fYWN0aXZl LCBtaW5pbXVtLCB1dl9taW5pbXVtKTsKPiAtCj4gIAkvKgo+ICAJICogMS4gQWxsb2NhdGUgdGhl IG1pbmludW0gcmVxdWlyZWQgYmxvY2tzIGZvciBlYWNoIGFjdGl2ZSBwbGFuZQo+ICAJICogYW5k IGFsbG9jYXRlIHRoZSBjdXJzb3IsIGl0IGRvZXNuJ3QgcmVxdWlyZSBleHRyYSBhbGxvY2F0aW9u Cj4gQEAgLTQzMjUsMTYgKzQzODgsNTIgQEAgc2tsX2FsbG9jYXRlX3BpcGVfZGRiKHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCj4gIAkJdG90YWxfbWluX2Jsb2NrcyArPSB1dl9taW5p bXVtW3BsYW5lX2lkXTsKPiAgCX0KPiAgCj4gLQlpZiAodG90YWxfbWluX2Jsb2NrcyA+IGFsbG9j X3NpemUpIHsKPiArCWFsbG9jX3NpemUgLT0gbWluaW11bVtQTEFORV9DVVJTT1JdOwo+ICsJZGRi LT5wbGFuZVtwaXBlXVtQTEFORV9DVVJTT1JdLnN0YXJ0ID0gYWxsb2MtPmVuZCAtCj4gKwkJCQkJ CQltaW5pbXVtW1BMQU5FX0NVUlNPUl07Cj4gKwlkZGItPnBsYW5lW3BpcGVdW1BMQU5FX0NVUlNP Ul0uZW5kID0gYWxsb2MtPmVuZDsKPiArCj4gKwlmb3IgKGxldmVsID0gaWxrX3dtX21heF9sZXZl bChkZXZfcHJpdik7IGxldmVsID49IDA7IGxldmVsLS0pIHsKPiArCQl0b3RhbF9sZXZlbF9kZGIg PSAwOwo+ICsJCWZvcl9lYWNoX3BsYW5lX2lkX29uX2NydGMoaW50ZWxfY3J0YywgcGxhbmVfaWQp IHsKPiArCQkJc3RydWN0IHNrbF9wbGFuZV93bSAqd20gPSAmcGlwZV93bS0+cGxhbmVzW3BsYW5l X2lkXTsKPiArCQkJdTE2IHBsYW5lX3Jlc19iID0gd20tPndtW2xldmVsXS5taW5fZGJ1Zl9yZXEg Kwo+ICsJCQkJCQl3bS0+dXZfd21bbGV2ZWxdLm1pbl9kYnVmX3JlcTsKPiArCQkJdTE2IG1pbiA9 IG1pbmltdW1bcGxhbmVfaWRdICsgdXZfbWluaW11bVtwbGFuZV9pZF07Cj4gKwo+ICsJCQlpZiAo cGxhbmVfaWQgPT0gUExBTkVfQ1VSU09SKQo+ICsJCQkJY29udGludWU7Cj4gKwo+ICsJCQl0b3Rh bF9sZXZlbF9kZGIgKz0gbWF4KHBsYW5lX3Jlc19iLCBtaW4pOwo+ICsJCX0KPiArCj4gKwkJLyoK PiArCQkgKiBJZiBUaGlzIGxldmVsIGNhbiBzdWNjZXNzZnVsbHkgYmUgZW5hYmxlZCB3aXRoIHRo ZQo+ICsJCSAqIHBpcGUncyBjdXJyZW50IEREQiBhbGxvY2F0aW9uLCB0aGVuIGFsbCBsb3dlciBs ZXZlbHMgYXJlCj4gKwkJICogZ3VhcmFudGVlZCB0byBzdWNjZWVkIGFzIHdlbGwuCj4gKwkJICov Cj4gKwkJaWYgKHRvdGFsX2xldmVsX2RkYiA8PSBhbGxvY19zaXplKQo+ICsJCQlicmVhazsKPiAr CX0KPiArCj4gKwlpZiAobGV2ZWwgPCAwIHx8IHRvdGFsX21pbl9ibG9ja3MgPiBhbGxvY19zaXpl KSB7Cj4gIAkJRFJNX0RFQlVHX0tNUygiUmVxdWVzdGVkIGRpc3BsYXkgY29uZmlndXJhdGlvbiBl eGNlZWRzIHN5c3RlbSBEREIgbGltaXRhdGlvbnMiKTsKPiAtCQlEUk1fREVCVUdfS01TKCJtaW5p bXVtIHJlcXVpcmVkICVkLyVkXG4iLCB0b3RhbF9taW5fYmxvY2tzLAo+IC0JCQkJCQkJYWxsb2Nf c2l6ZSk7Cj4gKwkJRFJNX0RFQlVHX0tNUygibWluaW11bSByZXF1aXJlZCAlZC8lZFxuIiwgKGxl dmVsIDwgMCkgPwo+ICsJCQkJdG90YWxfbGV2ZWxfZGRiIDogdG90YWxfbWluX2Jsb2NrcywgYWxs b2Nfc2l6ZSk7Cj4gIAkJcmV0dXJuIC1FSU5WQUw7Cj4gIAl9Cj4gKwltYXhfbGV2ZWwgPSBsZXZl bDsKPiArCWFsbG9jX3NpemUgLT0gdG90YWxfbGV2ZWxfZGRiOwo+ICAKPiAtCWFsbG9jX3NpemUg LT0gdG90YWxfbWluX2Jsb2NrczsKPiAtCWRkYi0+cGxhbmVbcGlwZV1bUExBTkVfQ1VSU09SXS5z dGFydCA9IGFsbG9jLT5lbmQgLSBtaW5pbXVtW1BMQU5FX0NVUlNPUl07Cj4gLQlkZGItPnBsYW5l W3BpcGVdW1BMQU5FX0NVUlNPUl0uZW5kID0gYWxsb2MtPmVuZDsKPiArCS8qCj4gKwkgKiBQTEFO RV9DVVJTT1IgZGF0YSByYXRlIGlzIG5vdCBpbmNsdWRlZCBpbiB0b3RhbF9kYXRhX3JhdGUuCj4g KwkgKiBJZiBvbmx5IGN1cnNvciBwbGFuZSBpcyBlbmFibGVkIHdlIGhhdmUgdG8gZW5hYmxlIGl0 cyBXTSBsZXZlbHMKPiArCSAqIGV4cGxpY2l0bHkgYmVmb3JlIHJldHVybmluZy4gQ3Vyc29yIGhh cyBmaXhlZCBkZGIgYWxsb2NhdGlvbiwKPiArCSAqIFNvIGl0J3Mgb2sgdG8gYWx3YXlzIGNoZWNr IGN1cnNvciBXTSBlbmFibGluZyBiZWZvcmUgcmV0dXJuLgo+ICsJICovCj4gKwlwbGFuZV9ibG9j a3MgPSBza2xfZGRiX2VudHJ5X3NpemUoJmRkYi0+cGxhbmVbcGlwZV1bUExBTkVfQ1VSU09SXSk7 Cj4gKwlza2xfZW5hYmxlX3BsYW5lX3dtX2xldmVscyhkZXZfcHJpdiwgcGxhbmVfYmxvY2tzLCBt YXhfbGV2ZWwsCj4gKwkJCQkgICAmcGlwZV93bS0+cGxhbmVzW1BMQU5FX0NVUlNPUl0pOwo+ICAK PiAgCS8qCj4gIAkgKiAyLiBEaXN0cmlidXRlIHRoZSByZW1haW5pbmcgc3BhY2UgaW4gcHJvcG9y dGlvbiB0byB0aGUgYW1vdW50IG9mCj4gQEAgLTQzNDgsNDQgKzQ0NDcsNDkgQEAgc2tsX2FsbG9j YXRlX3BpcGVfZGRiKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCj4gIAlzdGFydCA9 IGFsbG9jLT5zdGFydDsKPiAgCWZvcl9lYWNoX3BsYW5lX2lkX29uX2NydGMoaW50ZWxfY3J0Yywg cGxhbmVfaWQpIHsKPiAgCQl1bnNpZ25lZCBpbnQgZGF0YV9yYXRlLCB1dl9kYXRhX3JhdGU7Cj4g LQkJdWludDE2X3QgcGxhbmVfYmxvY2tzLCB1dl9wbGFuZV9ibG9ja3M7Cj4gKwkJdTE2IHBsYW5l X2Jsb2NrcyA9IDAsIHV2X3BsYW5lX2Jsb2NrcyA9IDA7Cj4gKwkJc3RydWN0IHNrbF9wbGFuZV93 bSAqd20gPSAmcGlwZV93bS0+cGxhbmVzW3BsYW5lX2lkXTsKPiArCQl1MTYgbWluX3JlcV9ibGsg PSB3bS0+d21bbWF4X2xldmVsXS5taW5fZGJ1Zl9yZXE7Cj4gKwkJdTE2IHV2X21pbl9yZXFfYmxr ID0gd20tPnV2X3dtW21heF9sZXZlbF0ubWluX2RidWZfcmVxOwo+ICAKPiAgCQlpZiAocGxhbmVf aWQgPT0gUExBTkVfQ1VSU09SKQo+ICAJCQljb250aW51ZTsKPiAgCj4gIAkJZGF0YV9yYXRlID0g cGxhbmVfZGF0YV9yYXRlW3BsYW5lX2lkXTsKPiAgCj4gLQkJLyoKPiAtCQkgKiBhbGxvY2F0aW9u IGZvciAocGFja2VkIGZvcm1hdHMpIG9yICh1di1wbGFuZSBwYXJ0IG9mIHBsYW5hciBmb3JtYXQp Ogo+IC0JCSAqIHByb21vdGUgdGhlIGV4cHJlc3Npb24gdG8gNjQgYml0cyB0byBhdm9pZCBvdmVy Zmxvd2luZywgdGhlCj4gLQkJICogcmVzdWx0IGlzIDwgYXZhaWxhYmxlIGFzIGRhdGFfcmF0ZSAv IHRvdGFsX2RhdGFfcmF0ZSA8IDEKPiAtCQkgKi8KPiAtCQlwbGFuZV9ibG9ja3MgPSBtaW5pbXVt W3BsYW5lX2lkXTsKPiAtCQlwbGFuZV9ibG9ja3MgKz0gZGl2X3U2NCgodWludDY0X3QpYWxsb2Nf c2l6ZSAqIGRhdGFfcmF0ZSwKPiAtCQkJCQl0b3RhbF9kYXRhX3JhdGUpOwo+IC0KPiAgCQkvKiBM ZWF2ZSBkaXNhYmxlZCBwbGFuZXMgYXQgKDAsMCkgKi8KPiAgCQlpZiAoZGF0YV9yYXRlKSB7Cj4g KwkJCS8qCj4gKwkJCSAqIGFsbG9jYXRpb24gZm9yIChwYWNrZWQgZm9ybWF0cykgb3IgKHV2LXBs YW5lIHBhcnQgb2YKPiArCQkJICogcGxhbmFyIGZvcm1hdCk6IHByb21vdGUgdGhlIGV4cHJlc3Np b24gdG8gNjQgYml0cyB0bwo+ICsJCQkgKiBhdm9pZCBvdmVyZmxvd2luZywgdGhlIHJlc3VsdCBp cyA8IGF2YWlsYWJsZSBhcwo+ICsJCQkgKiBkYXRhX3JhdGUgLyB0b3RhbF9kYXRhX3JhdGUgPCAx Cj4gKwkJCSAqLwo+ICsKPiArCQkJcGxhbmVfYmxvY2tzID0gbWF4KG1pbmltdW1bcGxhbmVfaWRd LCBtaW5fcmVxX2Jsayk7Cj4gKwkJCXBsYW5lX2Jsb2NrcyArPSBkaXZfdTY0KCh1NjQpYWxsb2Nf c2l6ZSAqCj4gKwkJCQkJCWRhdGFfcmF0ZSwgdG90YWxfZGF0YV9yYXRlKTsKPiAgCQkJZGRiLT5w bGFuZVtwaXBlXVtwbGFuZV9pZF0uc3RhcnQgPSBzdGFydDsKPiAgCQkJZGRiLT5wbGFuZVtwaXBl XVtwbGFuZV9pZF0uZW5kID0gc3RhcnQgKyBwbGFuZV9ibG9ja3M7Cj4gKwkJCXN0YXJ0ICs9IHBs YW5lX2Jsb2NrczsKPiAgCQl9Cj4gIAo+IC0JCXN0YXJ0ICs9IHBsYW5lX2Jsb2NrczsKPiAtCj4g IAkJLyogQWxsb2NhdGUgRERCIGZvciBVViBwbGFuZSBmb3IgcGxhbmFyIGZvcm1hdC9OVjEyICov Cj4gIAkJdXZfZGF0YV9yYXRlID0gdXZfcGxhbmVfZGF0YV9yYXRlW3BsYW5lX2lkXTsKPiAgCj4g LQkJdXZfcGxhbmVfYmxvY2tzID0gdXZfbWluaW11bVtwbGFuZV9pZF07Cj4gLQkJdXZfcGxhbmVf YmxvY2tzICs9IGRpdl91NjQoKHVpbnQ2NF90KWFsbG9jX3NpemUgKiB1dl9kYXRhX3JhdGUsCj4g LQkJCQkJICAgdG90YWxfZGF0YV9yYXRlKTsKPiAtCj4gIAkJaWYgKHV2X2RhdGFfcmF0ZSkgewo+ ICsJCQl1dl9wbGFuZV9ibG9ja3MgPSBtYXgodXZfbWluaW11bVtwbGFuZV9pZF0sCj4gKwkJCQkJ ICAgICAgdXZfbWluX3JlcV9ibGspOwo+ICsJCQl1dl9wbGFuZV9ibG9ja3MgKz0gZGl2X3U2NCgo dTY0KWFsbG9jX3NpemUgKgo+ICsJCQkJCQl1dl9kYXRhX3JhdGUsIHRvdGFsX2RhdGFfcmF0ZSk7 Cj4gIAkJCWRkYi0+dXZfcGxhbmVbcGlwZV1bcGxhbmVfaWRdLnN0YXJ0ID0gc3RhcnQ7Cj4gLQkJ CWRkYi0+dXZfcGxhbmVbcGlwZV1bcGxhbmVfaWRdLmVuZCA9Cj4gLQkJCQlzdGFydCArIHV2X3Bs YW5lX2Jsb2NrczsKPiArCQkJZGRiLT51dl9wbGFuZVtwaXBlXVtwbGFuZV9pZF0uZW5kID0gc3Rh cnQgKwo+ICsJCQkJCQkJICAgIHV2X3BsYW5lX2Jsb2NrczsKPiArCQkJc3RhcnQgKz0gdXZfcGxh bmVfYmxvY2tzOwo+ICAJCX0KPiAgCj4gLQkJc3RhcnQgKz0gdXZfcGxhbmVfYmxvY2tzOwo+ICsJ CXNrbF9lbmFibGVfcGxhbmVfd21fbGV2ZWxzKGRldl9wcml2LCBwbGFuZV9ibG9ja3MsCj4gKwkJ CQkJICAgbWF4X2xldmVsLCB3bSk7Cj4gIAl9Cj4gIAo+ICAJcmV0dXJuIDA7Cj4gQEAgLTQ1OTQs NyArNDY5OCw2IEBAIHN0YXRpYyBpbnQgc2tsX2NvbXB1dGVfcGxhbmVfd20oY29uc3Qgc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAJCQkJY29uc3Qgc3RydWN0IHNrbF93bV9s ZXZlbCAqcmVzdWx0X3ByZXYsCj4gIAkJCQlzdHJ1Y3Qgc2tsX3dtX2xldmVsICpyZXN1bHQgLyog b3V0ICovKQo+ICB7Cj4gLQljb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwc3RhdGUgPSAm aW50ZWxfcHN0YXRlLT5iYXNlOwo+ICAJdWludDMyX3QgbGF0ZW5jeSA9IGRldl9wcml2LT53bS5z a2xfbGF0ZW5jeVtsZXZlbF07Cj4gIAl1aW50X2ZpeGVkXzE2XzE2X3QgbWV0aG9kMSwgbWV0aG9k MjsKPiAgCXVpbnRfZml4ZWRfMTZfMTZfdCBzZWxlY3RlZF9yZXN1bHQ7Cj4gQEAgLTQ2OTMsNjEg KzQ3OTYsMjcgQEAgc3RhdGljIGludCBza2xfY29tcHV0ZV9wbGFuZV93bShjb25zdCBzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gIAkJbWluX2Rpc3BfYnVmX25lZWRlZCA9IHJl c19ibG9ja3M7Cj4gIAl9Cj4gIAo+IC0JaWYgKChsZXZlbCA+IDAgJiYgcmVzX2xpbmVzID4gMzEp IHx8Cj4gLQkgICAgcmVzX2Jsb2NrcyA+PSBkZGJfYWxsb2NhdGlvbiB8fAo+IC0JICAgIG1pbl9k aXNwX2J1Zl9uZWVkZWQgPj0gZGRiX2FsbG9jYXRpb24pIHsKPiAtCQlyZXN1bHQtPnBsYW5lX2Vu ID0gZmFsc2U7Cj4gLQo+IC0JCS8qCj4gLQkJICogSWYgdGhlcmUgYXJlIG5vIHZhbGlkIGxldmVs IDAgd2F0ZXJtYXJrcywgdGhlbiB3ZSBjYW4ndAo+IC0JCSAqIHN1cHBvcnQgdGhpcyBkaXNwbGF5 IGNvbmZpZ3VyYXRpb24uCj4gLQkJICovCj4gLQkJaWYgKGxldmVsKSB7Cj4gLQkJCXJldHVybiAw Owo+IC0JCX0gZWxzZSB7Cj4gLQkJCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gcHN0YXRlLT5w bGFuZTsKPiAtCj4gLQkJCURSTV9ERUJVR19LTVMoIlJlcXVlc3RlZCBkaXNwbGF5IGNvbmZpZ3Vy YXRpb24gZXhjZWVkcyBzeXN0ZW0gd2F0ZXJtYXJrIGxpbWl0YXRpb25zXG4iKTsKPiAtCQkJRFJN X0RFQlVHX0tNUygiW1BMQU5FOiVkOiVzXSBibG9ja3MgcmVxdWlyZWQgPSAldS8ldSwgbGluZXMg cmVxdWlyZWQgPSAldS8zMVxuIiwKPiAtCQkJCSAgICAgIHBsYW5lLT5iYXNlLmlkLCBwbGFuZS0+ bmFtZSwKPiAtCQkJCSAgICAgIHJlc19ibG9ja3MsIGRkYl9hbGxvY2F0aW9uLCByZXNfbGluZXMp Owo+IC0JCQlyZXR1cm4gLUVJTlZBTDsKPiAtCQl9Cj4gLQl9Cj4gLQo+IC0JLyoKPiAtCSAqIERp c3BsYXkgV0EgIzgyNiAoU0tMOkFMTCwgQlhUOkFMTCkgJiAjMTA1OSAoQ05MOkEpCj4gLQkgKiBk aXNhYmxlIHdtIGxldmVsIDEtNyBvbiBOVjEyIHBsYW5lcwo+IC0JICovCj4gLQlpZiAod3AtPmlz X3BsYW5hciAmJiBsZXZlbCA+PSAxICYmCj4gLQkgICAgKElTX1NLWUxBS0UoZGV2X3ByaXYpIHx8 IElTX0JST1hUT04oZGV2X3ByaXYpIHx8Cj4gLQkgICAgIElTX0NOTF9SRVZJRChkZXZfcHJpdiwg Q05MX1JFVklEX0EwLCBDTkxfUkVWSURfQTApKSkgewo+IC0JCXJlc3VsdC0+cGxhbmVfZW4gPSBm YWxzZTsKPiAtCQlyZXR1cm4gMDsKPiAtCX0KPiAtCj4gIAkvKiBUaGUgbnVtYmVyIG9mIGxpbmVz IGFyZSBpZ25vcmVkIGZvciB0aGUgbGV2ZWwgMCB3YXRlcm1hcmsuICovCj4gIAlyZXN1bHQtPnBs YW5lX3Jlc19iID0gcmVzX2Jsb2NrczsKPiArCXJlc3VsdC0+bWluX2RidWZfcmVxID0gbWluX2Rp c3BfYnVmX25lZWRlZCArIDE7Cj4gIAlyZXN1bHQtPnBsYW5lX3Jlc19sID0gcmVzX2xpbmVzOwo+ IC0JcmVzdWx0LT5wbGFuZV9lbiA9IHRydWU7Cj4gIAo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4g IHN0YXRpYyBpbnQKPiAgc2tsX2NvbXB1dGVfd21fbGV2ZWxzKGNvbnN0IHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwKPiAtCQkgICAgICBzdHJ1Y3Qgc2tsX2RkYl9hbGxvY2F0aW9u ICpkZGIsCj4gIAkJICAgICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKPiAgCQkg ICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKmludGVsX3BzdGF0ZSwKPiAgCQkg ICAgICBjb25zdCBzdHJ1Y3Qgc2tsX3dtX3BhcmFtcyAqd21fcGFyYW1zLAo+ICAJCSAgICAgIHN0 cnVjdCBza2xfcGxhbmVfd20gKndtLAo+ICAJCSAgICAgIGludCBwbGFuZV9pZCkKPiAgewo+IC0J c3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNzdGF0ZS0+YmFz ZS5jcnRjKTsKPiAgCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gaW50ZWxfcHN0YXRlLT5iYXNl LnBsYW5lOwo+ICAJc3RydWN0IGludGVsX3BsYW5lICppbnRlbF9wbGFuZSA9IHRvX2ludGVsX3Bs YW5lKHBsYW5lKTsKPiAtCXVpbnQxNl90IGRkYl9ibG9ja3M7Cj4gLQllbnVtIHBpcGUgcGlwZSA9 IGludGVsX2NydGMtPnBpcGU7Cj4gKwlzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICppbnRlbF9z dGF0ZSA9Cj4gKwkJCXRvX2ludGVsX2F0b21pY19zdGF0ZShjc3RhdGUtPmJhc2Uuc3RhdGUpOwo+ ICsJdTE2IGRkYl9ibG9ja3MgPSAwOwo+ICAJaW50IGxldmVsLCBtYXhfbGV2ZWwgPSBpbGtfd21f bWF4X2xldmVsKGRldl9wcml2KTsKPiAgCWVudW0gcGxhbmVfaWQgaW50ZWxfcGxhbmVfaWQgPSBp bnRlbF9wbGFuZS0+aWQ7Cj4gIAlpbnQgcmV0Owo+IEBAIC00NzU1LDkgKzQ4MjQsMTcgQEAgc2ts X2NvbXB1dGVfd21fbGV2ZWxzKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwKPiAgCWlmIChXQVJOX09OKCFpbnRlbF9wc3RhdGUtPmJhc2UuZmIpKQo+ICAJCXJldHVybiAt RUlOVkFMOwo+ICAKPiAtCWRkYl9ibG9ja3MgPSBwbGFuZV9pZCA/Cj4gLQkJICAgICBza2xfZGRi X2VudHJ5X3NpemUoJmRkYi0+dXZfcGxhbmVbcGlwZV1baW50ZWxfcGxhbmVfaWRdKSA6Cj4gLQkJ ICAgICBza2xfZGRiX2VudHJ5X3NpemUoJmRkYi0+cGxhbmVbcGlwZV1baW50ZWxfcGxhbmVfaWRd KTsKPiArCS8qIEZpeCBEREIgYWxsb2NhdGlvbiBpcyBhdmFpbGFibGUgb25seSBmb3IgY3Vyc29y IHBsYW5lICovCj4gKwlpZiAoaW50ZWxfcGxhbmVfaWQgPT0gUExBTkVfQ1VSU09SKSB7Cj4gKwkJ aW50IG51bV9hY3RpdmU7Cj4gKwo+ICsJCWlmIChpbnRlbF9zdGF0ZS0+YWN0aXZlX3BpcGVfY2hh bmdlcykKPiArCQkJbnVtX2FjdGl2ZSA9IGh3ZWlnaHQzMihpbnRlbF9zdGF0ZS0+YWN0aXZlX2Ny dGNzKTsKPiArCQllbHNlCj4gKwkJCW51bV9hY3RpdmUgPSBod2VpZ2h0MzIoZGV2X3ByaXYtPmFj dGl2ZV9jcnRjcyk7Cj4gKwoKYW5kIHlvdSBqdXN0IGFkZGVkIGEgZnVuY3Rpb24gZm9yIHRoYXQs IHdoeSB0byBkdXBsaWNhdGU/CmJ1dCBpZiBub3QgZW5vdWdoOiB3aHkgbm90IG1ha2luZyBzb21l dGhpbmcgZ2VuZXJpYyBlbm91Z2ggdG8gYXZvaWQgdGhpcyBkdXBsaWNhdGlvbj8KCj4gKwkJZGRi X2Jsb2NrcyA9IHNrbF9jdXJzb3JfYWxsb2NhdGlvbihudW1fYWN0aXZlKTsKCml0IHNlZW1zIHRo aXMgcmUtb3JnIGZvciBjdXJzb3IgYWxzbyBkZXNlcnZlcyBhIGRpZmZlcmVudCBwYXRjaC4uLgoK PiArCX0KPiAgCj4gIAlmb3IgKGxldmVsID0gMDsgbGV2ZWwgPD0gbWF4X2xldmVsOyBsZXZlbCsr KSB7Cj4gIAkJc3RydWN0IHNrbF93bV9sZXZlbCAqcmVzdWx0ID0gcGxhbmVfaWQgPyAmd20tPnV2 X3dtW2xldmVsXSA6Cj4gQEAgLTQ4MTQsNyArNDg5MSw2IEBAIHNrbF9jb21wdXRlX2xpbmV0aW1l X3dtKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUpCj4gIHN0YXRpYyB2b2lkIHNrbF9j b21wdXRlX3RyYW5zaXRpb25fd20oc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKPiAg CQkJCSAgICAgIHN0cnVjdCBza2xfd21fcGFyYW1zICp3cCwKPiAgCQkJCSAgICAgIHN0cnVjdCBz a2xfd21fbGV2ZWwgKndtX2wwLAo+IC0JCQkJICAgICAgdWludDE2X3QgZGRiX2FsbG9jYXRpb24s Cj4gIAkJCQkgICAgICBzdHJ1Y3Qgc2tsX3dtX2xldmVsICp0cmFuc193bSAvKiBvdXQgKi8pCj4g IHsKPiAgCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjc3RhdGUtPmJhc2UuY3J0Yy0+ZGV2Owo+ IEBAIC00ODUxLDIzICs0OTI3LDE2IEBAIHN0YXRpYyB2b2lkIHNrbF9jb21wdXRlX3RyYW5zaXRp b25fd20oc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKPiAgCQkvKiBXQSBCVUc6MTkz ODQ2NiBhZGQgb25lIGJsb2NrIGZvciBub24geS10aWxlIHBsYW5lcyAqLwo+ICAJCWlmIChJU19D TkxfUkVWSUQoZGV2X3ByaXYsIENOTF9SRVZJRF9BMCwgQ05MX1JFVklEX0EwKSkKPiAgCQkJcmVz X2Jsb2NrcyArPSAxOwo+IC0KPiAgCX0KPiAgCj4gLQlyZXNfYmxvY2tzICs9IDE7Cj4gLQo+IC0J aWYgKHJlc19ibG9ja3MgPCBkZGJfYWxsb2NhdGlvbikgewo+IC0JCXRyYW5zX3dtLT5wbGFuZV9y ZXNfYiA9IHJlc19ibG9ja3M7Cj4gLQkJdHJhbnNfd20tPnBsYW5lX2VuID0gdHJ1ZTsKPiAtCQly ZXR1cm47Cj4gLQl9Cj4gKwl0cmFuc193bS0+cGxhbmVfcmVzX2IgPSByZXNfYmxvY2tzICsgMTsK PiArCXJldHVybjsKPiAgCj4gIGV4aXQ6Cj4gLQl0cmFuc193bS0+cGxhbmVfZW4gPSBmYWxzZTsK PiArCXRyYW5zX3dtLT5wbGFuZV9yZXNfYiA9IDA7Cj4gIH0KPiAgCj4gIHN0YXRpYyBpbnQgc2ts X2J1aWxkX3BpcGVfd20oc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKPiAtCQkJICAg ICBzdHJ1Y3Qgc2tsX2RkYl9hbGxvY2F0aW9uICpkZGIsCj4gIAkJCSAgICAgc3RydWN0IHNrbF9w aXBlX3dtICpwaXBlX3dtKQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3N0YXRl LT5iYXNlLmNydGMtPmRldjsKPiBAQCAtNDg4OSwyNCArNDk1OCwyMSBAQCBzdGF0aWMgaW50IHNr bF9idWlsZF9waXBlX3dtKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCj4gIAkJCQkJ CXRvX2ludGVsX3BsYW5lX3N0YXRlKHBzdGF0ZSk7Cj4gIAkJZW51bSBwbGFuZV9pZCBwbGFuZV9p ZCA9IHRvX2ludGVsX3BsYW5lKHBsYW5lKS0+aWQ7Cj4gIAkJc3RydWN0IHNrbF93bV9wYXJhbXMg d21fcGFyYW1zOwo+IC0JCWVudW0gcGlwZSBwaXBlID0gdG9faW50ZWxfY3J0Yyhjc3RhdGUtPmJh c2UuY3J0YyktPnBpcGU7Cj4gLQkJdWludDE2X3QgZGRiX2Jsb2NrczsKPiAgCj4gIAkJd20gPSAm cGlwZV93bS0+cGxhbmVzW3BsYW5lX2lkXTsKPiAtCQlkZGJfYmxvY2tzID0gc2tsX2RkYl9lbnRy eV9zaXplKCZkZGItPnBsYW5lW3BpcGVdW3BsYW5lX2lkXSk7Cj4gIAo+ICAJCXJldCA9IHNrbF9j b21wdXRlX3BsYW5lX3dtX3BhcmFtcyhkZXZfcHJpdiwgY3N0YXRlLAo+ICAJCQkJCQkgIGludGVs X3BzdGF0ZSwgJndtX3BhcmFtcywgMCk7Cj4gIAkJaWYgKHJldCkKPiAgCQkJcmV0dXJuIHJldDsK PiAgCj4gLQkJcmV0ID0gc2tsX2NvbXB1dGVfd21fbGV2ZWxzKGRldl9wcml2LCBkZGIsIGNzdGF0 ZSwKPiAtCQkJCQkgICAgaW50ZWxfcHN0YXRlLCAmd21fcGFyYW1zLCB3bSwgMCk7Cj4gKwkJcmV0 ID0gc2tsX2NvbXB1dGVfd21fbGV2ZWxzKGRldl9wcml2LCBjc3RhdGUsIGludGVsX3BzdGF0ZSwK PiArCQkJCQkgICAgJndtX3BhcmFtcywgd20sIDApOwo+ICAJCWlmIChyZXQpCj4gIAkJCXJldHVy biByZXQ7Cj4gIAo+ICAJCXNrbF9jb21wdXRlX3RyYW5zaXRpb25fd20oY3N0YXRlLCAmd21fcGFy YW1zLCAmd20tPndtWzBdLAo+IC0JCQkJCSAgZGRiX2Jsb2NrcywgJndtLT50cmFuc193bSk7Cj4g KwkJCQkJICAmd20tPnRyYW5zX3dtKTsKPiAgCj4gIAkJLyogdXYgcGxhbmUgd2F0ZXJtYXJrcyBt dXN0IGFsc28gYmUgdmFsaWRhdGVkIGZvciBOVjEyL1BsYW5hciAqLwo+ICAJCWlmICh3bV9wYXJh bXMuaXNfcGxhbmFyKSB7Cj4gQEAgLTQ5MTksNyArNDk4NSw3IEBAIHN0YXRpYyBpbnQgc2tsX2J1 aWxkX3BpcGVfd20oc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKPiAgCQkJaWYgKHJl dCkKPiAgCQkJCXJldHVybiByZXQ7Cj4gIAo+IC0JCQlyZXQgPSBza2xfY29tcHV0ZV93bV9sZXZl bHMoZGV2X3ByaXYsIGRkYiwgY3N0YXRlLAo+ICsJCQlyZXQgPSBza2xfY29tcHV0ZV93bV9sZXZl bHMoZGV2X3ByaXYsIGNzdGF0ZSwKPiAgCQkJCQkJICAgIGludGVsX3BzdGF0ZSwgJndtX3BhcmFt cywKPiAgCQkJCQkJICAgIHdtLCAxKTsKPiAgCQkJaWYgKHJldCkKPiBAQCAtNTA1MCw0MiArNTEx NiwxMCBAQCBib29sIHNrbF9kZGJfYWxsb2NhdGlvbl9vdmVybGFwcyhzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYsCj4gIAlyZXR1cm4gZmFsc2U7Cj4gIH0KPiAgCj4gLXN0YXRpYyBp bnQgc2tsX3VwZGF0ZV9waXBlX3dtKHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3N0YXRlLAo+IC0J CQkgICAgICBjb25zdCBzdHJ1Y3Qgc2tsX3BpcGVfd20gKm9sZF9waXBlX3dtLAo+IC0JCQkgICAg ICBzdHJ1Y3Qgc2tsX3BpcGVfd20gKnBpcGVfd20sIC8qIG91dCAqLwo+IC0JCQkgICAgICBzdHJ1 Y3Qgc2tsX2RkYl9hbGxvY2F0aW9uICpkZGIsIC8qIG91dCAqLwo+IC0JCQkgICAgICBib29sICpj aGFuZ2VkIC8qIG91dCAqLykKPiAtewo+IC0Jc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmludGVs X2NzdGF0ZSA9IHRvX2ludGVsX2NydGNfc3RhdGUoY3N0YXRlKTsKPiAtCWludCByZXQ7Cj4gLQo+ IC0JcmV0ID0gc2tsX2J1aWxkX3BpcGVfd20oaW50ZWxfY3N0YXRlLCBkZGIsIHBpcGVfd20pOwo+ IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+IC0KPiAtCWlmICghbWVtY21wKG9sZF9waXBl X3dtLCBwaXBlX3dtLCBzaXplb2YoKnBpcGVfd20pKSkKPiAtCQkqY2hhbmdlZCA9IGZhbHNlOwo+ IC0JZWxzZQo+IC0JCSpjaGFuZ2VkID0gdHJ1ZTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0K PiAtc3RhdGljIHVpbnQzMl90Cj4gLXBpcGVzX21vZGlmaWVkKHN0cnVjdCBkcm1fYXRvbWljX3N0 YXRlICpzdGF0ZSkKPiAtewo+IC0Jc3RydWN0IGRybV9jcnRjICpjcnRjOwo+IC0Jc3RydWN0IGRy bV9jcnRjX3N0YXRlICpjc3RhdGU7Cj4gLQl1aW50MzJfdCBpLCByZXQgPSAwOwo+IC0KPiAtCWZv cl9lYWNoX25ld19jcnRjX2luX3N0YXRlKHN0YXRlLCBjcnRjLCBjc3RhdGUsIGkpCj4gLQkJcmV0 IHw9IGRybV9jcnRjX21hc2soY3J0Yyk7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiAtfQo+IC0KPiAg c3RhdGljIGludAo+IC1za2xfZGRiX2FkZF9hZmZlY3RlZF9wbGFuZXMoc3RydWN0IGludGVsX2Ny dGNfc3RhdGUgKmNzdGF0ZSkKPiArc2tsX2RkYl9hZGRfYWZmZWN0ZWRfcGxhbmVzKHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCj4gKwkJCSAgICBjb25zdCBzdHJ1Y3Qgc2tsX3BpcGVf d20gKm9sZF9waXBlX3dtLAo+ICsJCQkgICAgY29uc3Qgc3RydWN0IHNrbF9waXBlX3dtICpwaXBl X3dtKQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUgPSBjc3RhdGUtPmJh c2Uuc3RhdGU7Cj4gIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gc3RhdGUtPmRldjsKPiBAQCAt NTEwMSwxMSArNTEzNSwxNSBAQCBza2xfZGRiX2FkZF9hZmZlY3RlZF9wbGFuZXMoc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKmNzdGF0ZSkKPiAgCj4gIAlkcm1fZm9yX2VhY2hfcGxhbmVfbWFzayhw bGFuZSwgZGV2LCBjc3RhdGUtPmJhc2UucGxhbmVfbWFzaykgewo+ICAJCWVudW0gcGxhbmVfaWQg cGxhbmVfaWQgPSB0b19pbnRlbF9wbGFuZShwbGFuZSktPmlkOwo+ICsJCWNvbnN0IHN0cnVjdCBz a2xfcGxhbmVfd20gKndtID0gJnBpcGVfd20tPnBsYW5lc1twbGFuZV9pZF07Cj4gKwkJY29uc3Qg c3RydWN0IHNrbF9wbGFuZV93bSAqb2xkX3dtID0KPiArCQkJCQkJJm9sZF9waXBlX3dtLT5wbGFu ZXNbcGxhbmVfaWRdOwo+ICAKPiAtCQlpZiAoc2tsX2RkYl9lbnRyeV9lcXVhbCgmY3VyX2RkYi0+ cGxhbmVbcGlwZV1bcGxhbmVfaWRdLAo+IC0JCQkJCSZuZXdfZGRiLT5wbGFuZVtwaXBlXVtwbGFu ZV9pZF0pICYmCj4gKwkJaWYgKChza2xfZGRiX2VudHJ5X2VxdWFsKCZjdXJfZGRiLT5wbGFuZVtw aXBlXVtwbGFuZV9pZF0sCj4gKwkJCQkJICZuZXdfZGRiLT5wbGFuZVtwaXBlXVtwbGFuZV9pZF0p ICYmCj4gIAkJICAgIHNrbF9kZGJfZW50cnlfZXF1YWwoJmN1cl9kZGItPnV2X3BsYW5lW3BpcGVd W3BsYW5lX2lkXSwKPiAtCQkJCQkmbmV3X2RkYi0+dXZfcGxhbmVbcGlwZV1bcGxhbmVfaWRdKSkK PiArCQkJCQkmbmV3X2RkYi0+dXZfcGxhbmVbcGlwZV1bcGxhbmVfaWRdKSkgJiYKPiArCQkgICAg IW1lbWNtcCh3bSwgb2xkX3dtLCBzaXplb2Yoc3RydWN0IHNrbF9wbGFuZV93bSkpKQo+ICAJCQlj b250aW51ZTsKPiAgCj4gIAkJcGxhbmVfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9wbGFuZV9zdGF0 ZShzdGF0ZSwgcGxhbmUpOwo+IEBAIC01MTE2LDMxICs1MTU0LDUxIEBAIHNrbF9kZGJfYWRkX2Fm ZmVjdGVkX3BsYW5lcyhzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlKQo+ICAJcmV0dXJu IDA7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbnQKPiAtc2tsX2NvbXB1dGVfZGRiKHN0cnVjdCBkcm1f YXRvbWljX3N0YXRlICpzdGF0ZSkKPiArc3RhdGljIGludCBza2xfdXBkYXRlX3BpcGVfd20oc3Ry dWN0IGRybV9jcnRjX3N0YXRlICpjc3RhdGUsCj4gKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBza2xf cGlwZV93bSAqb2xkX3BpcGVfd20sCj4gKwkJCSAgICAgIHN0cnVjdCBza2xfcGlwZV93bSAqcGlw ZV93bSwgLyogb3V0ICovCj4gKwkJCSAgICAgIHN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKmRk YiwgLyogb3V0ICovCj4gKwkJCSAgICAgIGJvb2wgKmNoYW5nZWQgLyogb3V0ICovKQo+ICB7Cj4g LQljb25zdCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHN0YXRl LT5kZXYpOwo+IC0Jc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqaW50ZWxfc3RhdGUgPSB0b19p bnRlbF9hdG9taWNfc3RhdGUoc3RhdGUpOwo+IC0Jc3RydWN0IHNrbF9kZGJfYWxsb2NhdGlvbiAq ZGRiID0gJmludGVsX3N0YXRlLT53bV9yZXN1bHRzLmRkYjsKPiAtCXN0cnVjdCBpbnRlbF9jcnRj ICpjcnRjOwo+IC0Jc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZTsKPiAtCWludCByZXQs IGk7Cj4gKwlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqaW50ZWxfY3N0YXRlID0gdG9faW50ZWxf Y3J0Y19zdGF0ZShjc3RhdGUpOwo+ICsJaW50IHJldDsKPiAgCj4gLQltZW1jcHkoZGRiLCAmZGV2 X3ByaXYtPndtLnNrbF9ody5kZGIsIHNpemVvZigqZGRiKSk7Cj4gKwlyZXQgPSBza2xfYnVpbGRf cGlwZV93bShpbnRlbF9jc3RhdGUsIHBpcGVfd20pOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4g cmV0Owo+ICAKPiAtCWZvcl9lYWNoX25ld19pbnRlbF9jcnRjX2luX3N0YXRlKGludGVsX3N0YXRl LCBjcnRjLCBjc3RhdGUsIGkpIHsKPiAtCQlyZXQgPSBza2xfYWxsb2NhdGVfcGlwZV9kZGIoY3N0 YXRlLCBkZGIpOwo+IC0JCWlmIChyZXQpCj4gLQkJCXJldHVybiByZXQ7Cj4gKwlyZXQgPSBza2xf YWxsb2NhdGVfcGlwZV9kZGIoaW50ZWxfY3N0YXRlLCBwaXBlX3dtLCBkZGIpOwo+ICsJaWYgKHJl dCkKPiArCQlyZXR1cm4gcmV0Owo+ICsJLyoKPiArCSAqIFRPRE86IFBsYW5lcyBhcmUgaW5jbHVk ZWQgaW4gc3RhdGUgdG8gYXJtIFdNIHJlZ2lzdGVycy4KPiArCSAqIFNjb3BlIHRvIG9wdGltaXpl IGZ1cnRoZXIsIGJ5IGp1c3QgcmV3cml0aW5nIHBsYW5lIHN1cmYgcmVnaXN0ZXIuCj4gKwkgKi8K PiArCXJldCA9IHNrbF9kZGJfYWRkX2FmZmVjdGVkX3BsYW5lcyhpbnRlbF9jc3RhdGUsIG9sZF9w aXBlX3dtLCBwaXBlX3dtKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiAgCj4gLQkJ cmV0ID0gc2tsX2RkYl9hZGRfYWZmZWN0ZWRfcGxhbmVzKGNzdGF0ZSk7Cj4gLQkJaWYgKHJldCkK PiAtCQkJcmV0dXJuIHJldDsKPiAtCX0KPiArCWlmICghbWVtY21wKG9sZF9waXBlX3dtLCBwaXBl X3dtLCBzaXplb2YoKnBpcGVfd20pKSkKPiArCQkqY2hhbmdlZCA9IGZhbHNlOwo+ICsJZWxzZQo+ ICsJCSpjaGFuZ2VkID0gdHJ1ZTsKPiAgCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiArc3RhdGlj IHVpbnQzMl90Cj4gK3BpcGVzX21vZGlmaWVkKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0 ZSkKPiArewo+ICsJc3RydWN0IGRybV9jcnRjICpjcnRjOwo+ICsJc3RydWN0IGRybV9jcnRjX3N0 YXRlICpjc3RhdGU7Cj4gKwl1MzIgaSwgcmV0ID0gMDsKPiArCj4gKwlmb3JfZWFjaF9uZXdfY3J0 Y19pbl9zdGF0ZShzdGF0ZSwgY3J0YywgY3N0YXRlLCBpKQo+ICsJCXJldCB8PSBkcm1fY3J0Y19t YXNrKGNydGMpOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gIHN0YXRpYyB2b2lkCj4g IHNrbF9jb3B5X2RkYl9mb3JfcGlwZShzdHJ1Y3Qgc2tsX2RkYl92YWx1ZXMgKmRzdCwKPiAgCQkg ICAgICBzdHJ1Y3Qgc2tsX2RkYl92YWx1ZXMgKnNyYywKPiBAQCAtNTI4NSw2ICs1MzQzLDcgQEAg c2tsX2NvbXB1dGVfd20oc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ICAJc3RydWN0 IGRybV9jcnRjICpjcnRjOwo+ICAJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjc3RhdGU7Cj4gIAlz dHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICppbnRlbF9zdGF0ZSA9IHRvX2ludGVsX2F0b21pY19z dGF0ZShzdGF0ZSk7Cj4gKwljb25zdCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSB0b19pOTE1KHN0YXRlLT5kZXYpOwo+ICAJc3RydWN0IHNrbF9kZGJfdmFsdWVzICpyZXN1bHRz ID0gJmludGVsX3N0YXRlLT53bV9yZXN1bHRzOwo+ICAJc3RydWN0IHNrbF9waXBlX3dtICpwaXBl X3dtOwo+ICAJYm9vbCBjaGFuZ2VkID0gZmFsc2U7Cj4gQEAgLTUyOTcsMTAgKzUzNTYsNyBAQCBz a2xfY29tcHV0ZV93bShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCj4gIAlpZiAocmV0 IHx8ICFjaGFuZ2VkKQo+ICAJCXJldHVybiByZXQ7Cj4gIAo+IC0JcmV0ID0gc2tsX2NvbXB1dGVf ZGRiKHN0YXRlKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIHJldDsKPiAtCj4gKwltZW1jcHko JnJlc3VsdHMtPmRkYiwgJmRldl9wcml2LT53bS5za2xfaHcuZGRiLCBzaXplb2YocmVzdWx0cy0+ ZGRiKSk7Cj4gIAkvKgo+ICAJICogQ2FsY3VsYXRlIFdNJ3MgZm9yIGFsbCBwaXBlcyB0aGF0IGFy ZSBwYXJ0IG9mIHRoaXMgdHJhbnNhY3Rpb24uCj4gIAkgKiBOb3RlIHRoYXQgdGhlIEREQiBhbGxv Y2F0aW9uIGFib3ZlIG1heSBoYXZlIGFkZGVkIG1vcmUgQ1JUQydzIHRoYXQKPiAtLSAKPiAyLjE2 LjIKPiAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50 ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==