From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v2 4/8] drm/i915/gen11: Handle watermarks correctly for separate Y/UV planes, v2. Date: Thu, 18 Oct 2018 19:17:08 +0300 Message-ID: <20181018161708.GN9144@intel.com> References: <20181018115134.9061-1-maarten.lankhorst@linux.intel.com> <20181018115134.9061-5-maarten.lankhorst@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id C8D888919B for ; Thu, 18 Oct 2018 16:17:11 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20181018115134.9061-5-maarten.lankhorst@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Maarten Lankhorst Cc: intel-gfx@lists.freedesktop.org, Paulo Zanoni List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBPY3QgMTgsIDIwMTggYXQgMDE6NTE6MzBQTSArMDIwMCwgTWFhcnRlbiBMYW5raG9y c3Qgd3JvdGU6Cj4gU2t5bGFrZSBzdHlsZSB3YXRlcm1hcmtzIHByb2dyYW0gdGhlIFVWIHBhcmFt ZXRlcnMgaW50byB3bS0+dXZfd20sCj4gYW5kIGhhdmUgYSBzZXBhcmF0ZSBEREIgYWxsb2NhdGlv biBmb3IgVVYgYmxvY2tzIGludG8gdGhlIHNhbWUgcGxhbmUuCj4gCj4gR2VuMTEgd2F0ZXJtYXJr cyBoYXZlIGEgc2VwYXJhdGUgcGxhbmUgZm9yIFkgYW5kIFVWLCB3aXRoIHNlcGFyYXRlCj4gbWVj aGFuaXNtcy4gVGhlIHNpbXBsZXN0IHdheSB0byBtYWtlIGl0IHdvcmsgaXMgdG8ga2VlcCB0aGUg Y3VycmVudAo+IHdheSBvZiBwcm9ncmFtbWluZyB3YXRlcm1hcmtzIGFuZCBjYWxjdWxhdGUgdGhl IFkgYW5kIFVWIHBsYW5lCj4gd2F0ZXJtYXJrcyBmcm9tIHRoZSBtYXN0ZXIgcGxhbmUuCj4gCj4g Q2hhbmdlcyBzaW5jZSB2MToKPiAtIENvbnN0aWZ5IGNydGNfc3RhdGUgd2hlcmUgcG9zc2libGUu Cj4gLSBNYWtlIHNlcGFyYXRlIHBhdGhzIGZvciBwbGFuYXIgZm9ybWF0cyBpbiBza2xfYnVpbGRf cGlwZV93bSgpIChNYXR0KQo+IC0gTWFrZSBzZXBhcmF0ZSBwYXRocyBmb3IgY2FsY3VsYXRpbmcg dG90YWwgZGF0YSByYXRlLiAoTWF0dCkKPiAtIE1ha2Ugc3VyZSBVViB3YXRlcm1hcmtzIGFyZSB1 bnVzZWQgb24gZ2VuMTErIGJ5IGFkZGluZyBhIFdBUk4uIChNYXR0KQoKVGhpcyBsb29rZCBsaWtl IGl0IHNob3VsZCB3b3JrLgpSZXZpZXdlZC1ieTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJq YWxhQGxpbnV4LmludGVsLmNvbT4KCkhvd2V2ZXIgaXQncyBnb2luZyB0byBjb25mbGljdCBwcmV0 dHkgYmFkbHkgd2l0aCBQYXVsbydzIHdhdGVybWFyawpzZXJpZXMuIE9uZSBvZiB5b3UgaXMgZ29p bmcgdG8gaGF2ZSB0byByZWJhc2UgYXQgbGVhc3QsIGFuZCBub3Qgc3VyZSBpZgphbGwgb2YgUGF1 bG8ncyBzdHVmZiBldmVuIG1ha2VzIHNlbnNlIGdpdmVuIHRoaXMgcGF0Y2guLi4KCj4gCj4gU2ln bmVkLW9mZi1ieTogTWFhcnRlbiBMYW5raG9yc3QgPG1hYXJ0ZW4ubGFua2hvcnN0QGxpbnV4Lmlu dGVsLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYyB8IDMwMSAr KysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLQo+ICAxIGZpbGUgY2hhbmdlZCwgMjA3IGlu c2VydGlvbnMoKyksIDk0IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9wbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwo+ IGluZGV4IGQwMDNjMDhiZDllNC4uZWY5NWI5ZDc4ODRiIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX3BtLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9wbS5jCj4gQEAgLTM4MTQsNyArMzgxNCw3IEBAIHN0YXRpYyB1MTYgaW50ZWxfZ2V0X2RkYl9z aXplKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgfQo+ICAKPiAgc3RhdGlj IHZvaWQKPiAtc2tsX2RkYl9nZXRfcGlwZV9hbGxvY2F0aW9uX2xpbWl0cyhzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LAo+ICtza2xfZGRiX2dldF9waXBlX2FsbG9jYXRpb25fbGltaXRzKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgCQkJCSAgIGNvbnN0IHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjc3RhdGUsCj4gIAkJCQkgICBjb25zdCB1NjQgdG90YWxfZGF0YV9yYXRlLAo+ ICAJCQkJICAgc3RydWN0IHNrbF9kZGJfYWxsb2NhdGlvbiAqZGRiLAo+IEBAIC0zODIzLDcgKzM4 MjMsNiBAQCBza2xfZGRiX2dldF9waXBlX2FsbG9jYXRpb25fbGltaXRzKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsCj4gIHsKPiAgCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSA9IGNzdGF0 ZS0+YmFzZS5zdGF0ZTsKPiAgCXN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKmludGVsX3N0YXRl ID0gdG9faW50ZWxfYXRvbWljX3N0YXRlKHN0YXRlKTsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiAgCXN0cnVjdCBkcm1fY3J0YyAqZm9yX2Ny dGMgPSBjc3RhdGUtPmJhc2UuY3J0YzsKPiAgCWNvbnN0IHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAq Y3J0Y19zdGF0ZTsKPiAgCWNvbnN0IHN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKPiBAQCAtMzk0NSwx NCArMzk0NCw5IEBAIHNrbF9kZGJfZ2V0X2h3X3BsYW5lX3N0YXRlKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwKPiAgCQkJCSAgICAgIHZhbCAmIFBMQU5FX0NUTF9BTFBIQV9NQVNL KTsKPiAgCj4gIAl2YWwgPSBJOTE1X1JFQUQoUExBTkVfQlVGX0NGRyhwaXBlLCBwbGFuZV9pZCkp Owo+IC0JLyoKPiAtCSAqIEZJWE1FOiBhZGQgcHJvcGVyIE5WMTIgc3VwcG9ydCBmb3IgSUNMLiBB dm9pZCByZWFkaW5nIHVuY2xhaW1lZAo+IC0JICogcmVnaXN0ZXJzIGZvciBub3cuCj4gLQkgKi8K PiAtCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgMTEpCj4gKwlpZiAoZm91cmNjID09IERSTV9G T1JNQVRfTlYxMiAmJiBJTlRFTF9HRU4oZGV2X3ByaXYpIDwgMTEpIHsKPiAgCQl2YWwyID0gSTkx NV9SRUFEKFBMQU5FX05WMTJfQlVGX0NGRyhwaXBlLCBwbGFuZV9pZCkpOwo+ICAKPiAtCWlmIChm b3VyY2MgPT0gRFJNX0ZPUk1BVF9OVjEyKSB7Cj4gIAkJc2tsX2RkYl9lbnRyeV9pbml0X2Zyb21f aHcoZGV2X3ByaXYsCj4gIAkJCQkJICAgJmRkYi0+cGxhbmVbcGlwZV1bcGxhbmVfaWRdLCB2YWwy KTsKPiAgCQlza2xfZGRiX2VudHJ5X2luaXRfZnJvbV9odyhkZXZfcHJpdiwKPiBAQCAtNDE0MSwx MSArNDEzNSwxMSBAQCBpbnQgc2tsX2NoZWNrX3BpcGVfbWF4X3BpeGVsX3JhdGUoc3RydWN0IGlu dGVsX2NydGMgKmludGVsX2NydGMsCj4gIAo+ICBzdGF0aWMgdTY0Cj4gIHNrbF9wbGFuZV9yZWxh dGl2ZV9kYXRhX3JhdGUoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKPiAt CQkJICAgICBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwc3RhdGUsCj4gKwkJCSAgICAg Y29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICppbnRlbF9wc3RhdGUsCj4gIAkJCSAgICAg Y29uc3QgaW50IHBsYW5lKQo+ICB7Cj4gLQlzdHJ1Y3QgaW50ZWxfcGxhbmUgKmludGVsX3BsYW5l ID0gdG9faW50ZWxfcGxhbmUocHN0YXRlLT5wbGFuZSk7Cj4gLQlzdHJ1Y3QgaW50ZWxfcGxhbmVf c3RhdGUgKmludGVsX3BzdGF0ZSA9IHRvX2ludGVsX3BsYW5lX3N0YXRlKHBzdGF0ZSk7Cj4gKwlz dHJ1Y3QgaW50ZWxfcGxhbmUgKmludGVsX3BsYW5lID0KPiArCQl0b19pbnRlbF9wbGFuZShpbnRl bF9wc3RhdGUtPmJhc2UucGxhbmUpOwo+ICAJdWludDMyX3QgZGF0YV9yYXRlOwo+ICAJdWludDMy X3Qgd2lkdGggPSAwLCBoZWlnaHQgPSAwOwo+ICAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7 Cj4gQEAgLTQxNTYsNyArNDE1MCw3IEBAIHNrbF9wbGFuZV9yZWxhdGl2ZV9kYXRhX3JhdGUoY29u c3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKPiAgCWlmICghaW50ZWxfcHN0YXRl LT5iYXNlLnZpc2libGUpCj4gIAkJcmV0dXJuIDA7Cj4gIAo+IC0JZmIgPSBwc3RhdGUtPmZiOwo+ ICsJZmIgPSBpbnRlbF9wc3RhdGUtPmJhc2UuZmI7Cj4gIAlmb3JtYXQgPSBmYi0+Zm9ybWF0LT5m b3JtYXQ7Cj4gIAo+ICAJaWYgKGludGVsX3BsYW5lLT5pZCA9PSBQTEFORV9DVVJTT1IpCj4gQEAg LTQyMDYsMjUgKzQyMDAsODAgQEAgc2tsX2dldF90b3RhbF9yZWxhdGl2ZV9kYXRhX3JhdGUoc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKmludGVsX2NzdGF0ZSwKPiAgCWRybV9hdG9taWNfY3J0Y19z dGF0ZV9mb3JfZWFjaF9wbGFuZV9zdGF0ZShwbGFuZSwgcHN0YXRlLCBjc3RhdGUpIHsKPiAgCQll bnVtIHBsYW5lX2lkIHBsYW5lX2lkID0gdG9faW50ZWxfcGxhbmUocGxhbmUpLT5pZDsKPiAgCQl1 NjQgcmF0ZTsKPiArCQljb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKmludGVsX3BzdGF0 ZSA9Cj4gKwkJCXRvX2ludGVsX3BsYW5lX3N0YXRlKHBzdGF0ZSk7Cj4gIAo+ICAJCS8qIHBhY2tl ZC95ICovCj4gIAkJcmF0ZSA9IHNrbF9wbGFuZV9yZWxhdGl2ZV9kYXRhX3JhdGUoaW50ZWxfY3N0 YXRlLAo+IC0JCQkJCQkgICAgcHN0YXRlLCAwKTsKPiArCQkJCQkJICAgIGludGVsX3BzdGF0ZSwg MCk7Cj4gIAkJcGxhbmVfZGF0YV9yYXRlW3BsYW5lX2lkXSA9IHJhdGU7Cj4gLQo+ICAJCXRvdGFs X2RhdGFfcmF0ZSArPSByYXRlOwo+ICAKPiAgCQkvKiB1di1wbGFuZSAqLwo+ICAJCXJhdGUgPSBz a2xfcGxhbmVfcmVsYXRpdmVfZGF0YV9yYXRlKGludGVsX2NzdGF0ZSwKPiAtCQkJCQkJICAgIHBz dGF0ZSwgMSk7Cj4gKwkJCQkJCSAgICBpbnRlbF9wc3RhdGUsIDEpOwo+ICAJCXV2X3BsYW5lX2Rh dGFfcmF0ZVtwbGFuZV9pZF0gPSByYXRlOwo+IC0KPiAgCQl0b3RhbF9kYXRhX3JhdGUgKz0gcmF0 ZTsKPiAgCX0KPiAgCj4gIAlyZXR1cm4gdG90YWxfZGF0YV9yYXRlOwo+ICB9Cj4gIAo+ICtzdGF0 aWMgdTY0Cj4gK2ljbF9nZXRfdG90YWxfcmVsYXRpdmVfZGF0YV9yYXRlKHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICppbnRlbF9jc3RhdGUsCj4gKwkJCQkgdTY0ICpwbGFuZV9kYXRhX3JhdGUpCj4g K3sKPiArCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3N0YXRlID0gJmludGVsX2NzdGF0ZS0+YmFz ZTsKPiArCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSA9IGNzdGF0ZS0+c3RhdGU7Cj4g KwlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZTsKPiArCWNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfc3Rh dGUgKnBzdGF0ZTsKPiArCXU2NCB0b3RhbF9kYXRhX3JhdGUgPSAwOwo+ICsKPiArCWlmIChXQVJO X09OKCFzdGF0ZSkpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJLyogQ2FsY3VsYXRlIGFuZCBjYWNo ZSBkYXRhIHJhdGUgZm9yIGVhY2ggcGxhbmUgKi8KPiArCWRybV9hdG9taWNfY3J0Y19zdGF0ZV9m b3JfZWFjaF9wbGFuZV9zdGF0ZShwbGFuZSwgcHN0YXRlLCBjc3RhdGUpIHsKPiArCQljb25zdCBz dHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKmludGVsX3BzdGF0ZSA9Cj4gKwkJCXRvX2ludGVsX3Bs YW5lX3N0YXRlKHBzdGF0ZSk7Cj4gKwkJZW51bSBwbGFuZV9pZCBwbGFuZV9pZCA9IHRvX2ludGVs X3BsYW5lKHBsYW5lKS0+aWQ7Cj4gKwkJdTY0IHJhdGU7Cj4gKwo+ICsJCWlmICghaW50ZWxfcHN0 YXRlLT5saW5rZWRfcGxhbmUpIHsKPiArCQkJcmF0ZSA9IHNrbF9wbGFuZV9yZWxhdGl2ZV9kYXRh X3JhdGUoaW50ZWxfY3N0YXRlLAo+ICsJCQkJCQkJICAgIGludGVsX3BzdGF0ZSwgMCk7Cj4gKwkJ CXBsYW5lX2RhdGFfcmF0ZVtwbGFuZV9pZF0gPSByYXRlOwo+ICsJCQl0b3RhbF9kYXRhX3JhdGUg Kz0gcmF0ZTsKPiArCQl9IGVsc2Ugewo+ICsJCQllbnVtIHBsYW5lX2lkIHlfcGxhbmVfaWQ7Cj4g Kwo+ICsJCQkvKgo+ICsJCQkgKiBUaGUgc2xhdmUgcGxhbmUgbWlnaHQgbm90IGl0ZXJhdGUgaW4K PiArCQkJICogZHJtX2F0b21pY19jcnRjX3N0YXRlX2Zvcl9lYWNoX3BsYW5lX3N0YXRlKCksCj4g KwkJCSAqIGFuZCBuZWVkcyB0aGUgbWFzdGVyIHBsYW5lIHN0YXRlIHdoaWNoIG1heSBiZQo+ICsJ CQkgKiBOVUxMIGlmIHdlIHRyeSBnZXRfbmV3X3BsYW5lX3N0YXRlKCksIHNvIHdlCj4gKwkJCSAq IGFsd2F5cyBjYWxjdWxhdGUgZnJvbSB0aGUgbWFzdGVyLgo+ICsJCQkgKi8KPiArCQkJaWYgKGlu dGVsX3BzdGF0ZS0+c2xhdmUpCj4gKwkJCQljb250aW51ZTsKPiArCj4gKwkJCS8qIFkgcGxhbmUg cmF0ZSBpcyBjYWxjdWxhdGVkIG9uIHRoZSBzbGF2ZSAqLwo+ICsJCQlyYXRlID0gc2tsX3BsYW5l X3JlbGF0aXZlX2RhdGFfcmF0ZShpbnRlbF9jc3RhdGUsCj4gKwkJCQkJCQkgICAgaW50ZWxfcHN0 YXRlLCAwKTsKPiArCQkJeV9wbGFuZV9pZCA9IGludGVsX3BzdGF0ZS0+bGlua2VkX3BsYW5lLT5p ZDsKPiArCQkJcGxhbmVfZGF0YV9yYXRlW3lfcGxhbmVfaWRdID0gcmF0ZTsKPiArCQkJdG90YWxf ZGF0YV9yYXRlICs9IHJhdGU7Cj4gKwo+ICsJCQlyYXRlID0gc2tsX3BsYW5lX3JlbGF0aXZlX2Rh dGFfcmF0ZShpbnRlbF9jc3RhdGUsCj4gKwkJCQkJCQkgICAgaW50ZWxfcHN0YXRlLCAxKTsKPiAr CQkJcGxhbmVfZGF0YV9yYXRlW3BsYW5lX2lkXSA9IHJhdGU7Cj4gKwkJCXRvdGFsX2RhdGFfcmF0 ZSArPSByYXRlOwo+ICsJCX0KPiArCX0KPiArCj4gKwlyZXR1cm4gdG90YWxfZGF0YV9yYXRlOwo+ ICt9Cj4gKwo+ICBzdGF0aWMgdWludDE2X3QKPiAgc2tsX2RkYl9taW5fYWxsb2MoY29uc3Qgc3Ry dWN0IGRybV9wbGFuZV9zdGF0ZSAqcHN0YXRlLCBjb25zdCBpbnQgcGxhbmUpCj4gIHsKPiBAQCAt NDI5NywxNSArNDM0NiwyNSBAQCBza2xfZGRiX2NhbGNfbWluKGNvbnN0IHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjc3RhdGUsIGludCBudW1fYWN0aXZlLAo+ICAKPiAgCWRybV9hdG9taWNfY3J0 Y19zdGF0ZV9mb3JfZWFjaF9wbGFuZV9zdGF0ZShwbGFuZSwgcHN0YXRlLCAmY3N0YXRlLT5iYXNl KSB7Cj4gIAkJZW51bSBwbGFuZV9pZCBwbGFuZV9pZCA9IHRvX2ludGVsX3BsYW5lKHBsYW5lKS0+ aWQ7Cj4gKwkJc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSA9IHRvX2ludGVs X3BsYW5lX3N0YXRlKHBzdGF0ZSk7Cj4gIAo+ICAJCWlmIChwbGFuZV9pZCA9PSBQTEFORV9DVVJT T1IpCj4gIAkJCWNvbnRpbnVlOwo+ICAKPiAtCQlpZiAoIXBzdGF0ZS0+dmlzaWJsZSkKPiArCQkv KiBzbGF2ZSBwbGFuZSBtdXN0IGJlIGludmlzaWJsZSBhbmQgY2FsY3VsYXRlZCBmcm9tIG1hc3Rl ciAqLwo+ICsJCWlmICghcHN0YXRlLT52aXNpYmxlIHx8IFdBUk5fT04ocGxhbmVfc3RhdGUtPnNs YXZlKSkKPiAgCQkJY29udGludWU7Cj4gIAo+IC0JCW1pbmltdW1bcGxhbmVfaWRdID0gc2tsX2Rk Yl9taW5fYWxsb2MocHN0YXRlLCAwKTsKPiAtCQl1dl9taW5pbXVtW3BsYW5lX2lkXSA9IHNrbF9k ZGJfbWluX2FsbG9jKHBzdGF0ZSwgMSk7Cj4gKwkJaWYgKCFwbGFuZV9zdGF0ZS0+bGlua2VkX3Bs YW5lKSB7Cj4gKwkJCW1pbmltdW1bcGxhbmVfaWRdID0gc2tsX2RkYl9taW5fYWxsb2MocHN0YXRl LCAwKTsKPiArCQkJdXZfbWluaW11bVtwbGFuZV9pZF0gPSBza2xfZGRiX21pbl9hbGxvYyhwc3Rh dGUsIDEpOwo+ICsJCX0gZWxzZSB7Cj4gKwkJCWVudW0gcGxhbmVfaWQgeV9wbGFuZV9pZCA9Cj4g KwkJCQlwbGFuZV9zdGF0ZS0+bGlua2VkX3BsYW5lLT5pZDsKPiArCj4gKwkJCW1pbmltdW1beV9w bGFuZV9pZF0gPSBza2xfZGRiX21pbl9hbGxvYyhwc3RhdGUsIDApOwo+ICsJCQltaW5pbXVtW3Bs YW5lX2lkXSA9IHNrbF9kZGJfbWluX2FsbG9jKHBzdGF0ZSwgMSk7Cj4gKwkJfQo+ICAJfQo+ICAK PiAgCW1pbmltdW1bUExBTkVfQ1VSU09SXSA9IHNrbF9jdXJzb3JfYWxsb2NhdGlvbihudW1fYWN0 aXZlKTsKPiBAQCAtNDMxNyw3ICs0Mzc2LDcgQEAgc2tsX2FsbG9jYXRlX3BpcGVfZGRiKHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCj4gIHsKPiAgCXN0cnVjdCBkcm1fYXRvbWljX3N0 YXRlICpzdGF0ZSA9IGNzdGF0ZS0+YmFzZS5zdGF0ZTsKPiAgCXN0cnVjdCBkcm1fY3J0YyAqY3J0 YyA9IGNzdGF0ZS0+YmFzZS5jcnRjOwo+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMt PmRldjsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0 Yy0+ZGV2KTsKPiAgCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0 YyhjcnRjKTsKPiAgCWVudW0gcGlwZSBwaXBlID0gaW50ZWxfY3J0Yy0+cGlwZTsKPiAgCXN0cnVj dCBza2xfZGRiX2VudHJ5ICphbGxvYyA9ICZjc3RhdGUtPndtLnNrbC5kZGI7Cj4gQEAgLTQzNDMs MTEgKzQ0MDIsMTggQEAgc2tsX2FsbG9jYXRlX3BpcGVfZGRiKHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpjc3RhdGUsCj4gIAkJcmV0dXJuIDA7Cj4gIAl9Cj4gIAo+IC0JdG90YWxfZGF0YV9yYXRl ID0gc2tsX2dldF90b3RhbF9yZWxhdGl2ZV9kYXRhX3JhdGUoY3N0YXRlLAo+IC0JCQkJCQkJICAg cGxhbmVfZGF0YV9yYXRlLAo+IC0JCQkJCQkJICAgdXZfcGxhbmVfZGF0YV9yYXRlKTsKPiAtCXNr bF9kZGJfZ2V0X3BpcGVfYWxsb2NhdGlvbl9saW1pdHMoZGV2LCBjc3RhdGUsIHRvdGFsX2RhdGFf cmF0ZSwgZGRiLAo+IC0JCQkJCSAgIGFsbG9jLCAmbnVtX2FjdGl2ZSk7Cj4gKwlpZiAoSU5URUxf R0VOKGRldl9wcml2KSA8IDExKQo+ICsJCXRvdGFsX2RhdGFfcmF0ZSA9Cj4gKwkJCXNrbF9nZXRf dG90YWxfcmVsYXRpdmVfZGF0YV9yYXRlKGNzdGF0ZSwKPiArCQkJCQkJCSBwbGFuZV9kYXRhX3Jh dGUsCj4gKwkJCQkJCQkgdXZfcGxhbmVfZGF0YV9yYXRlKTsKPiArCWVsc2UKPiArCQl0b3RhbF9k YXRhX3JhdGUgPQo+ICsJCQlpY2xfZ2V0X3RvdGFsX3JlbGF0aXZlX2RhdGFfcmF0ZShjc3RhdGUs Cj4gKwkJCQkJCQkgcGxhbmVfZGF0YV9yYXRlKTsKPiArCgpJIHdvdWxkIGZsaXAgdGhlc2UgYXJv dW5kLiBJIHRoaW5rIG1vc3QgcGVvcGxlIGdlbmVyYWxseSBwcmVmZXIgdGhlCm5ldyBmaXJzdCwg b2xkIGxhc3Qgb3JkZXIuCgo+ICsJc2tsX2RkYl9nZXRfcGlwZV9hbGxvY2F0aW9uX2xpbWl0cyhk ZXZfcHJpdiwgY3N0YXRlLCB0b3RhbF9kYXRhX3JhdGUsCj4gKwkJCQkJICAgZGRiLCBhbGxvYywg Jm51bV9hY3RpdmUpOwo+ICAJYWxsb2Nfc2l6ZSA9IHNrbF9kZGJfZW50cnlfc2l6ZShhbGxvYyk7 Cj4gIAlpZiAoYWxsb2Nfc2l6ZSA9PSAwKQo+ICAJCXJldHVybiAwOwo+IEBAIC00NDE3LDYgKzQ0 ODMsOSBAQCBza2xfYWxsb2NhdGVfcGlwZV9kZGIoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNz dGF0ZSwKPiAgCQl1dl9wbGFuZV9ibG9ja3MgPSB1dl9taW5pbXVtW3BsYW5lX2lkXTsKPiAgCQl1 dl9wbGFuZV9ibG9ja3MgKz0gYWxsb2Nfc2l6ZSAqIHV2X2RhdGFfcmF0ZSAvIHRvdGFsX2RhdGFf cmF0ZTsKPiAgCj4gKwkJLyogR2VuMTErIHVzZXMgYSBzZXBhcmF0ZSBwbGFuZSBmb3IgVVYgd2F0 ZXJtYXJrcyAqLwo+ICsJCVdBUk5fT04oSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSAmJiB1dl9w bGFuZV9ibG9ja3MpOwo+ICsKPiAgCQlpZiAodXZfZGF0YV9yYXRlKSB7Cj4gIAkJCWRkYi0+dXZf cGxhbmVbcGlwZV1bcGxhbmVfaWRdLnN0YXJ0ID0gc3RhcnQ7Cj4gIAkJCWRkYi0+dXZfcGxhbmVb cGlwZV1bcGxhbmVfaWRdLmVuZCA9Cj4gQEAgLTQ0NzMsNyArNDU0Miw3IEBAIHN0YXRpYyB1aW50 X2ZpeGVkXzE2XzE2X3Qgc2tsX3dtX21ldGhvZDIodWludDMyX3QgcGl4ZWxfcmF0ZSwKPiAgfQo+ ICAKPiAgc3RhdGljIHVpbnRfZml4ZWRfMTZfMTZfdAo+IC1pbnRlbF9nZXRfbGluZXRpbWVfdXMo c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSkKPiAraW50ZWxfZ2V0X2xpbmV0aW1lX3Vz KGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUpCj4gIHsKPiAgCXVpbnQzMl90 IHBpeGVsX3JhdGU7Cj4gIAl1aW50MzJfdCBjcnRjX2h0b3RhbDsKPiBAQCAtNDUxNyw3ICs0NTg2 LDcgQEAgc2tsX2FkanVzdGVkX3BsYW5lX3BpeGVsX3JhdGUoY29uc3Qgc3RydWN0IGludGVsX2Ny dGNfc3RhdGUgKmNzdGF0ZSwKPiAgCj4gIHN0YXRpYyBpbnQKPiAgc2tsX2NvbXB1dGVfcGxhbmVf d21fcGFyYW1zKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAtCQkJ ICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCj4gKwkJCSAgICBjb25zdCBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAo+ICAJCQkgICAgY29uc3Qgc3RydWN0IGludGVs X3BsYW5lX3N0YXRlICppbnRlbF9wc3RhdGUsCj4gIAkJCSAgICBzdHJ1Y3Qgc2tsX3dtX3BhcmFt cyAqd3AsIGludCBwbGFuZV9pZCkKPiAgewo+IEBAIC00NjI0LDcgKzQ2OTMsNyBAQCBza2xfY29t cHV0ZV9wbGFuZV93bV9wYXJhbXMoY29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LAo+ICB9Cj4gIAo+ICBzdGF0aWMgaW50IHNrbF9jb21wdXRlX3BsYW5lX3dtKGNvbnN0IHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAtCQkJCXN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjc3RhdGUsCj4gKwkJCQljb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0 YXRlLAo+ICAJCQkJY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICppbnRlbF9wc3RhdGUs Cj4gIAkJCQl1aW50MTZfdCBkZGJfYWxsb2NhdGlvbiwKPiAgCQkJCWludCBsZXZlbCwKPiBAQCAt NDc4NCwzOCArNDg1MywyMiBAQCBzdGF0aWMgaW50IHNrbF9jb21wdXRlX3BsYW5lX3dtKGNvbnN0 IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgc3RhdGljIGludAo+ICBza2xf Y29tcHV0ZV93bV9sZXZlbHMoY29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LAo+ICAJCSAgICAgIHN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKmRkYiwKPiAtCQkgICAgICBz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAo+ICsJCSAgICAgIGNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCj4gIAkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX3Bs YW5lX3N0YXRlICppbnRlbF9wc3RhdGUsCj4gKwkJICAgICAgdWludDE2X3QgZGRiX2Jsb2NrcywK PiAgCQkgICAgICBjb25zdCBzdHJ1Y3Qgc2tsX3dtX3BhcmFtcyAqd21fcGFyYW1zLAo+ICAJCSAg ICAgIHN0cnVjdCBza2xfcGxhbmVfd20gKndtLAo+IC0JCSAgICAgIGludCBwbGFuZV9pZCkKPiAr CQkgICAgICBzdHJ1Y3Qgc2tsX3dtX2xldmVsICpsZXZlbHMpCj4gIHsKPiAtCXN0cnVjdCBpbnRl bF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0Yyhjc3RhdGUtPmJhc2UuY3J0Yyk7Cj4g LQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9IGludGVsX3BzdGF0ZS0+YmFzZS5wbGFuZTsKPiAt CXN0cnVjdCBpbnRlbF9wbGFuZSAqaW50ZWxfcGxhbmUgPSB0b19pbnRlbF9wbGFuZShwbGFuZSk7 Cj4gLQl1aW50MTZfdCBkZGJfYmxvY2tzOwo+IC0JZW51bSBwaXBlIHBpcGUgPSBpbnRlbF9jcnRj LT5waXBlOwo+ICAJaW50IGxldmVsLCBtYXhfbGV2ZWwgPSBpbGtfd21fbWF4X2xldmVsKGRldl9w cml2KTsKPiAtCWVudW0gcGxhbmVfaWQgaW50ZWxfcGxhbmVfaWQgPSBpbnRlbF9wbGFuZS0+aWQ7 Cj4gKwlzdHJ1Y3Qgc2tsX3dtX2xldmVsICpyZXN1bHRfcHJldiA9ICZsZXZlbHNbMF07Cj4gIAlp bnQgcmV0Owo+ICAKPiAgCWlmIChXQVJOX09OKCFpbnRlbF9wc3RhdGUtPmJhc2UuZmIpKQo+ICAJ CXJldHVybiAtRUlOVkFMOwo+ICAKPiAtCWRkYl9ibG9ja3MgPSBwbGFuZV9pZCA/Cj4gLQkJICAg ICBza2xfZGRiX2VudHJ5X3NpemUoJmRkYi0+dXZfcGxhbmVbcGlwZV1baW50ZWxfcGxhbmVfaWRd KSA6Cj4gLQkJICAgICBza2xfZGRiX2VudHJ5X3NpemUoJmRkYi0+cGxhbmVbcGlwZV1baW50ZWxf cGxhbmVfaWRdKTsKPiAtCj4gIAlmb3IgKGxldmVsID0gMDsgbGV2ZWwgPD0gbWF4X2xldmVsOyBs ZXZlbCsrKSB7Cj4gLQkJc3RydWN0IHNrbF93bV9sZXZlbCAqcmVzdWx0ID0gcGxhbmVfaWQgPyAm d20tPnV2X3dtW2xldmVsXSA6Cj4gLQkJCQkJCQkgICZ3bS0+d21bbGV2ZWxdOwo+IC0JCXN0cnVj dCBza2xfd21fbGV2ZWwgKnJlc3VsdF9wcmV2Owo+IC0KPiAtCQlpZiAobGV2ZWwpCj4gLQkJCXJl c3VsdF9wcmV2ID0gcGxhbmVfaWQgPyAmd20tPnV2X3dtW2xldmVsIC0gMV0gOgo+IC0JCQkJCQkg ICZ3bS0+d21bbGV2ZWwgLSAxXTsKPiAtCQllbHNlCj4gLQkJCXJlc3VsdF9wcmV2ID0gcGxhbmVf aWQgPyAmd20tPnV2X3dtWzBdIDogJndtLT53bVswXTsKPiArCQlzdHJ1Y3Qgc2tsX3dtX2xldmVs ICpyZXN1bHQgPSAmbGV2ZWxzW2xldmVsXTsKPiAgCj4gIAkJcmV0ID0gc2tsX2NvbXB1dGVfcGxh bmVfd20oZGV2X3ByaXYsCj4gIAkJCQkJICAgY3N0YXRlLAo+IEBAIC00ODI3LDYgKzQ4ODAsOCBA QCBza2xfY29tcHV0ZV93bV9sZXZlbHMoY29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LAo+ICAJCQkJCSAgIHJlc3VsdCk7Cj4gIAkJaWYgKHJldCkKPiAgCQkJcmV0dXJuIHJl dDsKPiArCj4gKwkJcmVzdWx0X3ByZXYgPSByZXN1bHQ7Cj4gIAl9Cj4gIAo+ICAJaWYgKGludGVs X3BzdGF0ZS0+YmFzZS5mYi0+Zm9ybWF0LT5mb3JtYXQgPT0gRFJNX0ZPUk1BVF9OVjEyKQo+IEBA IC00ODM2LDcgKzQ4OTEsNyBAQCBza2xfY29tcHV0ZV93bV9sZXZlbHMoY29uc3Qgc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICB9Cj4gIAo+ICBzdGF0aWMgdWludDMyX3QKPiAt c2tsX2NvbXB1dGVfbGluZXRpbWVfd20oc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSkK PiArc2tsX2NvbXB1dGVfbGluZXRpbWVfd20oY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmNzdGF0ZSkKPiAgewo+ICAJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlID0gY3N0YXRl LT5iYXNlLnN0YXRlOwo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9f aTkxNShzdGF0ZS0+ZGV2KTsKPiBAQCAtNDg1OCw3ICs0OTEzLDcgQEAgc2tsX2NvbXB1dGVfbGlu ZXRpbWVfd20oc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSkKPiAgCXJldHVybiBsaW5l dGltZV93bTsKPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQgc2tsX2NvbXB1dGVfdHJhbnNpdGlvbl93 bShzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAo+ICtzdGF0aWMgdm9pZCBza2xfY29t cHV0ZV90cmFuc2l0aW9uX3dtKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUs Cj4gIAkJCQkgICAgICBzdHJ1Y3Qgc2tsX3dtX3BhcmFtcyAqd3AsCj4gIAkJCQkgICAgICBzdHJ1 Y3Qgc2tsX3dtX2xldmVsICp3bV9sMCwKPiAgCQkJCSAgICAgIHVpbnQxNl90IGRkYl9hbGxvY2F0 aW9uLAo+IEBAIC00OTI1LDE2ICs0OTgwLDEwMSBAQCBzdGF0aWMgdm9pZCBza2xfY29tcHV0ZV90 cmFuc2l0aW9uX3dtKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCj4gIAl0cmFuc193 bS0+cGxhbmVfZW4gPSBmYWxzZTsKPiAgfQo+ICAKPiArc3RhdGljIGludCBfX3NrbF9idWlsZF9w bGFuZV93bV9zaW5nbGUoc3RydWN0IHNrbF9kZGJfYWxsb2NhdGlvbiAqZGRiLAo+ICsJCQkJICAg ICAgIHN0cnVjdCBza2xfcGlwZV93bSAqcGlwZV93bSwKPiArCQkJCSAgICAgICBlbnVtIHBsYW5l X2lkIHBsYW5lX2lkLAo+ICsJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpjc3RhdGUsCj4gKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpw c3RhdGUsCgpjcnRjX3N0YXRlL3BsYW5lX3N0YXRlIGluIG5ldyBjb2RlIHBscy4KCj4gKwkJCQkg ICAgICAgaW50IGNvbG9yX3BsYW5lKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSB0b19pOTE1KHBzdGF0ZS0+YmFzZS5wbGFuZS0+ZGV2KTsKPiArCXN0cnVjdCBz a2xfcGxhbmVfd20gKndtID0gJnBpcGVfd20tPnBsYW5lc1twbGFuZV9pZF07Cj4gKwllbnVtIHBp cGUgcGlwZSA9IHRvX2ludGVsX3BsYW5lKHBzdGF0ZS0+YmFzZS5wbGFuZSktPnBpcGU7Cj4gKwlz dHJ1Y3Qgc2tsX3dtX3BhcmFtcyB3bV9wYXJhbXM7Cj4gKwl1aW50MTZfdCBkZGJfYmxvY2tzID0g c2tsX2RkYl9lbnRyeV9zaXplKCZkZGItPnBsYW5lW3BpcGVdW3BsYW5lX2lkXSk7Cj4gKwlpbnQg cmV0Owo+ICsKPiArCXJldCA9IHNrbF9jb21wdXRlX3BsYW5lX3dtX3BhcmFtcyhkZXZfcHJpdiwg Y3N0YXRlLCBwc3RhdGUsCj4gKwkJCQkJICAmd21fcGFyYW1zLCBjb2xvcl9wbGFuZSk7Cj4gKwlp ZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0ID0gc2tsX2NvbXB1dGVfd21fbGV2 ZWxzKGRldl9wcml2LCBkZGIsIGNzdGF0ZSwgcHN0YXRlLAo+ICsJCQkJICAgIGRkYl9ibG9ja3Ms ICZ3bV9wYXJhbXMsIHdtLCB3bS0+d20pOwo+ICsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJl dDsKPiArCj4gKwlza2xfY29tcHV0ZV90cmFuc2l0aW9uX3dtKGNzdGF0ZSwgJndtX3BhcmFtcywg JndtLT53bVswXSwKPiArCQkJCSAgZGRiX2Jsb2NrcywgJndtLT50cmFuc193bSk7Cj4gKwo+ICsJ cmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgc2tsX2J1aWxkX3BsYW5lX3dtX3Npbmds ZShzdHJ1Y3Qgc2tsX2RkYl9hbGxvY2F0aW9uICpkZGIsCj4gKwkJCQkgICAgIHN0cnVjdCBza2xf cGlwZV93bSAqcGlwZV93bSwKPiArCQkJCSAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKmNzdGF0ZSwKPiArCQkJCSAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpw c3RhdGUpCj4gK3sKPiArCWVudW0gcGxhbmVfaWQgcGxhbmVfaWQgPSB0b19pbnRlbF9wbGFuZShw c3RhdGUtPmJhc2UucGxhbmUpLT5pZDsKPiArCj4gKwlyZXR1cm4gX19za2xfYnVpbGRfcGxhbmVf d21fc2luZ2xlKGRkYiwgcGlwZV93bSwgcGxhbmVfaWQsIGNzdGF0ZSwgcHN0YXRlLCAwKTsKPiAr fQo+ICsKPiArc3RhdGljIGludCBza2xfYnVpbGRfcGxhbmVfd21fcGxhbmFyKHN0cnVjdCBza2xf ZGRiX2FsbG9jYXRpb24gKmRkYiwKPiArCQkJCSAgICAgc3RydWN0IHNrbF9waXBlX3dtICpwaXBl X3dtLAo+ICsJCQkJICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAo+ ICsJCQkJICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBzdGF0ZSkKPiArewo+ ICsJc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKHBzdGF0ZS0+YmFz ZS5wbGFuZSk7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1 KHBsYW5lLT5iYXNlLmRldik7Cj4gKwllbnVtIHBsYW5lX2lkIHBsYW5lX2lkID0gcGxhbmUtPmlk Owo+ICsJc3RydWN0IHNrbF9wbGFuZV93bSAqd20gPSAmcGlwZV93bS0+cGxhbmVzW3BsYW5lX2lk XTsKPiArCXN0cnVjdCBza2xfd21fcGFyYW1zIHdtX3BhcmFtczsKPiArCWVudW0gcGlwZSBwaXBl ID0gcGxhbmUtPnBpcGU7Cj4gKwl1aW50MTZfdCBkZGJfYmxvY2tzID0gc2tsX2RkYl9lbnRyeV9z aXplKCZkZGItPnBsYW5lW3BpcGVdW3BsYW5lX2lkXSk7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJl dCA9IF9fc2tsX2J1aWxkX3BsYW5lX3dtX3NpbmdsZShkZGIsIHBpcGVfd20sIHBsYW5lX2lkLCBj c3RhdGUsIHBzdGF0ZSwgMCk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJ LyogdXYgcGxhbmUgd2F0ZXJtYXJrcyBtdXN0IGFsc28gYmUgdmFsaWRhdGVkIGZvciBOVjEyL1Bs YW5hciAqLwo+ICsJZGRiX2Jsb2NrcyA9IHNrbF9kZGJfZW50cnlfc2l6ZSgmZGRiLT51dl9wbGFu ZVtwaXBlXVtwbGFuZV9pZF0pOwo+ICsKPiArCXJldCA9IHNrbF9jb21wdXRlX3BsYW5lX3dtX3Bh cmFtcyhkZXZfcHJpdiwgY3N0YXRlLCBwc3RhdGUsICZ3bV9wYXJhbXMsIDEpOwo+ICsJaWYgKHJl dCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCXJldHVybiBza2xfY29tcHV0ZV93bV9sZXZlbHMo ZGV2X3ByaXYsIGRkYiwgY3N0YXRlLCBwc3RhdGUsCj4gKwkJCQkgICAgIGRkYl9ibG9ja3MsICZ3 bV9wYXJhbXMsIHdtLCB3bS0+dXZfd20pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGljbF9idWls ZF9wbGFuZV93bV9wbGFuYXIoc3RydWN0IHNrbF9kZGJfYWxsb2NhdGlvbiAqZGRiLAo+ICsJCQkJ ICAgICBzdHJ1Y3Qgc2tsX3BpcGVfd20gKnBpcGVfd20sCj4gKwkJCQkgICAgIGNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCj4gKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBpbnRl bF9wbGFuZV9zdGF0ZSAqcHN0YXRlKQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsJZW51bSBwbGFuZV9p ZCB5X3BsYW5lX2lkID0gcHN0YXRlLT5saW5rZWRfcGxhbmUtPmlkOwo+ICsJZW51bSBwbGFuZV9p ZCB1dl9wbGFuZV9pZCA9IHRvX2ludGVsX3BsYW5lKHBzdGF0ZS0+YmFzZS5wbGFuZSktPmlkOwo+ ICsKPiArCXJldCA9IF9fc2tsX2J1aWxkX3BsYW5lX3dtX3NpbmdsZShkZGIsIHBpcGVfd20sIHlf cGxhbmVfaWQsCj4gKwkJCQkJICBjc3RhdGUsIHBzdGF0ZSwgMCk7Cj4gKwlpZiAocmV0KQo+ICsJ CXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0dXJuIF9fc2tsX2J1aWxkX3BsYW5lX3dtX3NpbmdsZShk ZGIsIHBpcGVfd20sIHV2X3BsYW5lX2lkLAo+ICsJCQkJCSAgIGNzdGF0ZSwgcHN0YXRlLCAxKTsK PiArfQo+ICsKPiAgc3RhdGljIGludCBza2xfYnVpbGRfcGlwZV93bShzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqY3N0YXRlLAo+ICAJCQkgICAgIHN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKmRk YiwKPiAgCQkJICAgICBzdHJ1Y3Qgc2tsX3BpcGVfd20gKnBpcGVfd20pCj4gIHsKPiAtCXN0cnVj dCBkcm1fZGV2aWNlICpkZXYgPSBjc3RhdGUtPmJhc2UuY3J0Yy0+ZGV2Owo+ICAJc3RydWN0IGRy bV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlID0gJmNzdGF0ZS0+YmFzZTsKPiAtCWNvbnN0IHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiAgCXN0cnVjdCBk cm1fcGxhbmUgKnBsYW5lOwo+ICAJY29uc3Qgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcHN0YXRl Owo+IC0Jc3RydWN0IHNrbF9wbGFuZV93bSAqd207Cj4gIAlpbnQgcmV0Owo+ICAKPiAgCS8qCj4g QEAgLTQ5NDYsNDQgKzUwODYsMjEgQEAgc3RhdGljIGludCBza2xfYnVpbGRfcGlwZV93bShzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAo+ICAJZHJtX2F0b21pY19jcnRjX3N0YXRlX2Zv cl9lYWNoX3BsYW5lX3N0YXRlKHBsYW5lLCBwc3RhdGUsIGNydGNfc3RhdGUpIHsKPiAgCQljb25z dCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKmludGVsX3BzdGF0ZSA9Cj4gIAkJCQkJCXRvX2lu dGVsX3BsYW5lX3N0YXRlKHBzdGF0ZSk7Cj4gLQkJZW51bSBwbGFuZV9pZCBwbGFuZV9pZCA9IHRv X2ludGVsX3BsYW5lKHBsYW5lKS0+aWQ7Cj4gLQkJc3RydWN0IHNrbF93bV9wYXJhbXMgd21fcGFy YW1zOwo+IC0JCWVudW0gcGlwZSBwaXBlID0gdG9faW50ZWxfY3J0Yyhjc3RhdGUtPmJhc2UuY3J0 YyktPnBpcGU7Cj4gLQkJdWludDE2X3QgZGRiX2Jsb2NrczsKPiAgCj4gLQkJd20gPSAmcGlwZV93 bS0+cGxhbmVzW3BsYW5lX2lkXTsKPiAtCQlkZGJfYmxvY2tzID0gc2tsX2RkYl9lbnRyeV9zaXpl KCZkZGItPnBsYW5lW3BpcGVdW3BsYW5lX2lkXSk7Cj4gKwkJLyogV2F0ZXJtYXJrcyBjYWxjdWxh dGVkIGluIG1hc3RlciAqLwo+ICsJCWlmIChpbnRlbF9wc3RhdGUtPnNsYXZlKQo+ICsJCQljb250 aW51ZTsKPiAgCj4gLQkJcmV0ID0gc2tsX2NvbXB1dGVfcGxhbmVfd21fcGFyYW1zKGRldl9wcml2 LCBjc3RhdGUsCj4gLQkJCQkJCSAgaW50ZWxfcHN0YXRlLCAmd21fcGFyYW1zLCAwKTsKPiAtCQlp ZiAocmV0KQo+IC0JCQlyZXR1cm4gcmV0Owo+ICsJCWlmIChpbnRlbF9wc3RhdGUtPmxpbmtlZF9w bGFuZSkKPiArCQkJcmV0ID0gaWNsX2J1aWxkX3BsYW5lX3dtX3BsYW5hcihkZGIsIHBpcGVfd20s IGNzdGF0ZSwgaW50ZWxfcHN0YXRlKTsKPiArCQllbHNlIGlmIChpbnRlbF9wc3RhdGUtPmJhc2Uu ZmIgJiYKPiArCQkJIGludGVsX3BzdGF0ZS0+YmFzZS5mYi0+Zm9ybWF0LT5mb3JtYXQgPT0gRFJN X0ZPUk1BVF9OVjEyKQo+ICsJCQlyZXQgPSBza2xfYnVpbGRfcGxhbmVfd21fcGxhbmFyKGRkYiwg cGlwZV93bSwgY3N0YXRlLCBpbnRlbF9wc3RhdGUpOwo+ICsJCWVsc2UKPiArCQkJcmV0ID0gc2ts X2J1aWxkX3BsYW5lX3dtX3NpbmdsZShkZGIsIHBpcGVfd20sIGNzdGF0ZSwgaW50ZWxfcHN0YXRl KTsKPiAgCj4gLQkJcmV0ID0gc2tsX2NvbXB1dGVfd21fbGV2ZWxzKGRldl9wcml2LCBkZGIsIGNz dGF0ZSwKPiAtCQkJCQkgICAgaW50ZWxfcHN0YXRlLCAmd21fcGFyYW1zLCB3bSwgMCk7Cj4gIAkJ aWYgKHJldCkKPiAgCQkJcmV0dXJuIHJldDsKPiAtCj4gLQkJc2tsX2NvbXB1dGVfdHJhbnNpdGlv bl93bShjc3RhdGUsICZ3bV9wYXJhbXMsICZ3bS0+d21bMF0sCj4gLQkJCQkJICBkZGJfYmxvY2tz LCAmd20tPnRyYW5zX3dtKTsKPiAtCj4gLQkJLyogdXYgcGxhbmUgd2F0ZXJtYXJrcyBtdXN0IGFs c28gYmUgdmFsaWRhdGVkIGZvciBOVjEyL1BsYW5hciAqLwo+IC0JCWlmICh3bV9wYXJhbXMuaXNf cGxhbmFyKSB7Cj4gLQkJCW1lbXNldCgmd21fcGFyYW1zLCAwLCBzaXplb2Yoc3RydWN0IHNrbF93 bV9wYXJhbXMpKTsKPiAtCQkJd20tPmlzX3BsYW5hciA9IHRydWU7Cj4gLQo+IC0JCQlyZXQgPSBz a2xfY29tcHV0ZV9wbGFuZV93bV9wYXJhbXMoZGV2X3ByaXYsIGNzdGF0ZSwKPiAtCQkJCQkJCSAg aW50ZWxfcHN0YXRlLAo+IC0JCQkJCQkJICAmd21fcGFyYW1zLCAxKTsKPiAtCQkJaWYgKHJldCkK PiAtCQkJCXJldHVybiByZXQ7Cj4gLQo+IC0JCQlyZXQgPSBza2xfY29tcHV0ZV93bV9sZXZlbHMo ZGV2X3ByaXYsIGRkYiwgY3N0YXRlLAo+IC0JCQkJCQkgICAgaW50ZWxfcHN0YXRlLCAmd21fcGFy YW1zLAo+IC0JCQkJCQkgICAgd20sIDEpOwo+IC0JCQlpZiAocmV0KQo+IC0JCQkJcmV0dXJuIHJl dDsKPiAtCQl9Cj4gIAl9Cj4gIAo+ICAJcGlwZV93bS0+bGluZXRpbWUgPSBza2xfY29tcHV0ZV9s aW5ldGltZV93bShjc3RhdGUpOwo+IEBAIC01MDM0LDEyICs1MTUxLDcgQEAgc3RhdGljIHZvaWQg c2tsX3dyaXRlX3BsYW5lX3dtKHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjLAo+ICAJc2ts X3dyaXRlX3dtX2xldmVsKGRldl9wcml2LCBQTEFORV9XTV9UUkFOUyhwaXBlLCBwbGFuZV9pZCks Cj4gIAkJCSAgICZ3bS0+dHJhbnNfd20pOwo+ICAKPiAtCS8qIEZJWE1FOiBhZGQgcHJvcGVyIE5W MTIgc3VwcG9ydCBmb3IgSUNMLiAqLwo+IC0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTEp Cj4gLQkJcmV0dXJuIHNrbF9kZGJfZW50cnlfd3JpdGUoZGV2X3ByaXYsCj4gLQkJCQkJICAgUExB TkVfQlVGX0NGRyhwaXBlLCBwbGFuZV9pZCksCj4gLQkJCQkJICAgJmRkYi0+cGxhbmVbcGlwZV1b cGxhbmVfaWRdKTsKPiAtCWlmICh3bS0+aXNfcGxhbmFyKSB7Cj4gKwlpZiAod20tPmlzX3BsYW5h ciAmJiBJTlRFTF9HRU4oZGV2X3ByaXYpIDwgMTEpIHsKPiAgCQlza2xfZGRiX2VudHJ5X3dyaXRl KGRldl9wcml2LCBQTEFORV9CVUZfQ0ZHKHBpcGUsIHBsYW5lX2lkKSwKPiAgCQkJCSAgICAmZGRi LT51dl9wbGFuZVtwaXBlXVtwbGFuZV9pZF0pOwo+ICAJCXNrbF9kZGJfZW50cnlfd3JpdGUoZGV2 X3ByaXYsCj4gQEAgLTUwNDgsNyArNTE2MCw4IEBAIHN0YXRpYyB2b2lkIHNrbF93cml0ZV9wbGFu ZV93bShzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YywKPiAgCX0gZWxzZSB7Cj4gIAkJc2ts X2RkYl9lbnRyeV93cml0ZShkZXZfcHJpdiwgUExBTkVfQlVGX0NGRyhwaXBlLCBwbGFuZV9pZCks Cj4gIAkJCQkgICAgJmRkYi0+cGxhbmVbcGlwZV1bcGxhbmVfaWRdKTsKPiAtCQlJOTE1X1dSSVRF KFBMQU5FX05WMTJfQlVGX0NGRyhwaXBlLCBwbGFuZV9pZCksIDB4MCk7Cj4gKwkJaWYgKElOVEVM X0dFTihkZXZfcHJpdikgPCAxMSkKPiArCQkJSTkxNV9XUklURShQTEFORV9OVjEyX0JVRl9DRkco cGlwZSwgcGxhbmVfaWQpLCAweDApOwo+ICAJfQo+ICB9Cj4gIAo+IC0tIAo+IDIuMTkuMQo+IAo+ IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gSW50ZWwt Z2Z4IG1haWxpbmcgbGlzdAo+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRw czovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAoKLS0g ClZpbGxlIFN5cmrDpGzDpApJbnRlbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9pbnRlbC1nZngK