From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v2 06/12] drm/fb-helper: Remove drm_fb_helper_crtc Date: Tue, 16 Apr 2019 10:34:02 +0200 Message-ID: <20190416083402.GA13337@phenom.ffwll.local> References: <20190407165243.54043-1-noralf@tronnes.org> <20190407165243.54043-7-noralf@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x543.google.com (mail-ed1-x543.google.com [IPv6:2a00:1450:4864:20::543]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9F11F89A57 for ; Tue, 16 Apr 2019 08:34:14 +0000 (UTC) Received: by mail-ed1-x543.google.com with SMTP id x61so17112314edc.9 for ; Tue, 16 Apr 2019 01:34:14 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20190407165243.54043-7-noralf@tronnes.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Noralf =?iso-8859-1?Q?Tr=F8nnes?= Cc: daniel.vetter@ffwll.ch, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gU3VuLCBBcHIgMDcsIDIwMTkgYXQgMDY6NTI6MzdQTSArMDIwMCwgTm9yYWxmIFRyw7hubmVz IHdyb3RlOgo+IEl0IG5vdyBvbmx5IGNvbnRhaW5zIHRoZSBtb2Rlc2V0IHNvIHVzZSB0aGF0IGRp cmVjdGx5IGluc3RlYWQgYW5kIGF0dGFjaAo+IGEgbW9kZXNldCBhcnJheSB0byBkcm1fY2xpZW50 X2Rldi4gZHJtX2ZiX2hlbHBlciB3aWxsIHVzZSB0aGlzIGFycmF5Lgo+IENvZGUgd2lsbCBsYXRl ciBiZSBtb3ZlZCB0byBkcm1fY2xpZW50LCBzbyBhZGQgY29kZSB0aGVyZSBpbiBhIG5ldyBmaWxl Cj4gZHJtX2NsaWVudF9tb2Rlc2V0LmMgd2l0aCBNSVQgbGljZW5zZSB0byBtYXRjaCBkcm1fZmJf aGVscGVyLmMuCj4gCj4gVGhlIG1vZGVzZXQgY29ubmVjdG9yIGFycmF5IHNpemUgaXMgaGFyZGNv ZGVkIGZvciB0aGUgY2xvbmVkIGNhc2UgdG8gYXZvaWQKPiBoYXZpbmcgdG8gcGFzcyBpbiBhIHZh bHVlIGZyb20gdGhlIGRyaXZlci4gQSB2YWx1ZSBvZiA4IGlzIGNob3NlbiB0byBlcnIKPiBvbiB0 aGUgc2FmZSBzaWRlLiBUaGlzIG1lYW5zIHRoYXQgdGhlIG1heCBjb25uZWN0b3IgYXJndW1lbnQg Zm9yCj4gZHJtX2ZiX2hlbHBlcl9pbml0KCkgYW5kIGRybV9mYl9oZWxwZXJfZmJkZXZfc2V0dXAo KSBpc24ndCB1c2VkIGFueW1vcmUsCj4gYSB0b2RvIGVudHJ5IGZvciB0aGlzIGlzIGFkZGVkLgo+ IAo+IEluIHBhbl9kaXNwbGF5X2F0b21pYygpIHJlc3RvcmVfZmJkZXZfbW9kZV9mb3JjZSgpIGlz IHVzZWQgaW5zdGVhZCBvZgo+IHJlc3RvcmVfZmJkZXZfbW9kZV9hdG9taWMoKSBiZWNhdXNlIHRo YXQgb25lIHdpbGwgbGF0ZXIgYmVjb21lIGludGVybmFsCj4gdG8gZHJtX2NsaWVudF9tb2Rlc2V0 Lgo+IAo+IExvY2tpbmcgb3JkZXI6Cj4gMS4gZHJtX2ZiX2hlbHBlci0+bG9jawo+IDIuIGRybV9t YXN0ZXJfaW50ZXJuYWxfYWNxdWlyZQo+IDMuIGRybV9jbGllbnRfZGV2LT5tb2Rlc2V0X211dGV4 Cj4gCj4gdjI6Cj4gLSBBZGQgbW9kZXNldHMgYXJyYXkgdG8gZHJtX2NsaWVudCAoRGFuaWVsIFZl dHRlcikKPiAtIFVzZSBhIG5ldyBmaWxlIGZvciB0aGUgbW9kZXNldCBjb2RlIChEYW5pZWwgVmV0 dGVyKQo+IC0gRmlsZSBoYXMgdG8gYmUgTUlUIGxpY2Vuc2VkIChFbW1hbnVlbCBWYWRvdCkKPiAt IEFkZCBjb3B5cmlnaHRzIGZyb20gZHJtX2ZiX2hlbHBlci5jCj4gCj4gU2lnbmVkLW9mZi1ieTog Tm9yYWxmIFRyw7hubmVzIDxub3JhbGZAdHJvbm5lcy5vcmc+Cj4gLS0tCj4gIERvY3VtZW50YXRp b24vZ3B1L3RvZG8ucnN0ICAgICAgICAgICB8ICAgNyArCj4gIGRyaXZlcnMvZ3B1L2RybS9NYWtl ZmlsZSAgICAgICAgICAgICB8ICAgMiArLQo+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2NsaWVudC5j ICAgICAgICAgfCAgMTAgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2RybV9jbGllbnRfbW9kZXNldC5j IHwgMTAyICsrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jICAgICAg fCAzMDEgKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tCj4gIGluY2x1ZGUvZHJtL2RybV9jbGll bnQuaCAgICAgICAgICAgICB8ICAyOCArKysKPiAgaW5jbHVkZS9kcm0vZHJtX2ZiX2hlbHBlci5o ICAgICAgICAgIHwgICA4IC0KPiAgNyBmaWxlcyBjaGFuZ2VkLCAyNzIgaW5zZXJ0aW9ucygrKSwg MTg2IGRlbGV0aW9ucygtKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2Ry bV9jbGllbnRfbW9kZXNldC5jCj4gCj4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1L3Rv ZG8ucnN0IGIvRG9jdW1lbnRhdGlvbi9ncHUvdG9kby5yc3QKPiBpbmRleCAxNTI4YWQyZDU5OGIu LjhmYTA4YjVmZWFiNyAxMDA2NDQKPiAtLS0gYS9Eb2N1bWVudGF0aW9uL2dwdS90b2RvLnJzdAo+ ICsrKyBiL0RvY3VtZW50YXRpb24vZ3B1L3RvZG8ucnN0Cj4gQEAgLTMwMCw2ICszMDAsMTMgQEAg aXQgdG8gdXNlIGRybV9tb2RlX2hzeW5jKCkgaW5zdGVhZC4KPiAgCj4gIENvbnRhY3Q6IFNlYW4g UGF1bAo+ICAKPiArZHJtX2ZiX2hlbHBlciBjbGVhbnVwIHRhc2tzCj4gKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQo+ICsKPiArLSBUaGUgbWF4IGNvbm5lY3RvciBhcmd1bWVudCBmb3IgZHJt X2ZiX2hlbHBlcl9pbml0KCkgYW5kCj4gKyAgZHJtX2ZiX2hlbHBlcl9mYmRldl9zZXR1cCgpIGlz bid0IHVzZWQgYW55bW9yZSBhbmQgY2FuIGJlIHJlbW92ZWQuCj4gKwo+ICsKPiAgQ29yZSByZWZh Y3RvcmluZ3MKPiAgPT09PT09PT09PT09PT09PT0KPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+IGluZGV4IDZjN2U4 ZDE2MmI0ZS4uMDhjNzdjMTBjY2JiIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtl ZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+IEBAIC0xOSw3ICsxOSw3IEBA IGRybS15ICAgICAgIDo9CWRybV9hdXRoLm8gZHJtX2J1ZnMubyBkcm1fY2FjaGUubyBcCj4gIAkJ ZHJtX3BsYW5lLm8gZHJtX2NvbG9yX21nbXQubyBkcm1fcHJpbnQubyBcCj4gIAkJZHJtX2R1bWJf YnVmZmVycy5vIGRybV9tb2RlX2NvbmZpZy5vIGRybV92YmxhbmsubyBcCj4gIAkJZHJtX3N5bmNv YmoubyBkcm1fbGVhc2UubyBkcm1fd3JpdGViYWNrLm8gZHJtX2NsaWVudC5vIFwKPiAtCQlkcm1f YXRvbWljX3VhcGkubwo+ICsJCWRybV9jbGllbnRfbW9kZXNldC5vIGRybV9hdG9taWNfdWFwaS5v Cj4gIAo+ICBkcm0tJChDT05GSUdfRFJNX0xJQl9SQU5ET00pICs9IGxpYi9kcm1fcmFuZG9tLm8K PiAgZHJtLSQoQ09ORklHX0RSTV9WTSkgKz0gZHJtX3ZtLm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2RybV9jbGllbnQuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY2xpZW50LmMKPiBp bmRleCA5YjJiZDI4ZGRlMGEuLjNhZDViNTdjMTQxOSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vZHJtX2NsaWVudC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jbGllbnQuYwo+ IEBAIC05MSwxNCArOTEsMjAgQEAgaW50IGRybV9jbGllbnRfaW5pdChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LCBzdHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVudCwKPiAgCWNsaWVudC0+bmFtZSA9 IG5hbWU7Cj4gIAljbGllbnQtPmZ1bmNzID0gZnVuY3M7Cj4gIAo+IC0JcmV0ID0gZHJtX2NsaWVu dF9vcGVuKGNsaWVudCk7Cj4gKwlyZXQgPSBkcm1fY2xpZW50X21vZGVzZXRfY3JlYXRlKGNsaWVu dCk7Cj4gIAlpZiAocmV0KQo+ICAJCWdvdG8gZXJyX3B1dF9tb2R1bGU7Cj4gIAo+ICsJcmV0ID0g ZHJtX2NsaWVudF9vcGVuKGNsaWVudCk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZXJyX2ZyZWU7 Cj4gKwo+ICAJZHJtX2Rldl9nZXQoZGV2KTsKPiAgCj4gIAlyZXR1cm4gMDsKPiAgCj4gK2Vycl9m cmVlOgo+ICsJZHJtX2NsaWVudF9tb2Rlc2V0X2ZyZWUoY2xpZW50KTsKPiAgZXJyX3B1dF9tb2R1 bGU6Cj4gIAlpZiAoZnVuY3MpCj4gIAkJbW9kdWxlX3B1dChmdW5jcy0+b3duZXIpOwo+IEBAIC0x NDcsNiArMTUzLDggQEAgdm9pZCBkcm1fY2xpZW50X3JlbGVhc2Uoc3RydWN0IGRybV9jbGllbnRf ZGV2ICpjbGllbnQpCj4gIAo+ICAJRFJNX0RFVl9ERUJVR19LTVMoZGV2LT5kZXYsICIlc1xuIiwg Y2xpZW50LT5uYW1lKTsKPiAgCj4gKwlkcm1fY2xpZW50X21vZGVzZXRfcmVsZWFzZShjbGllbnQp Owo+ICsJZHJtX2NsaWVudF9tb2Rlc2V0X2ZyZWUoY2xpZW50KTsKPiAgCWRybV9jbGllbnRfY2xv c2UoY2xpZW50KTsKPiAgCWRybV9kZXZfcHV0KGRldik7Cj4gIAlpZiAoY2xpZW50LT5mdW5jcykK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9jbGllbnRfbW9kZXNldC5jIGIvZHJp dmVycy9ncHUvZHJtL2RybV9jbGllbnRfbW9kZXNldC5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK PiBpbmRleCAwMDAwMDAwMDAwMDAuLmJiMzQyMjJjOWRiOAo+IC0tLSAvZGV2L251bGwKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NsaWVudF9tb2Rlc2V0LmMKPiBAQCAtMCwwICsxLDEwMiBA QAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCj4gKy8qCj4gKyAqIENvcHlyaWdo dCAyMDE4IE5vcmFsZiBUcsO4bm5lcwo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOSBSZWQg SGF0IEluYy4KPiArICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDggSW50ZWwgQ29ycG9yYXRpb24K PiArICogICBKZXNzZSBCYXJuZXMgPGplc3NlLmJhcm5lc0BpbnRlbC5jb20+Cj4gKyAqIENvcHly aWdodCAoYykgMjAwNyBEYXZlIEFpcmxpZSA8YWlybGllZEBsaW51eC5pZT4KPiArICovCj4gKwo+ ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgo+ ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ICsKPiArI2luY2x1ZGUgPGRybS9kcm1fY2xpZW50 Lmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZGV2 aWNlLmg+Cj4gKwo+ICsvKiBVc2VkIGJ5IGRybV9jbGllbnQgYW5kIGRybV9mYl9oZWxwZXIgKi8K PiAraW50IGRybV9jbGllbnRfbW9kZXNldF9jcmVhdGUoc3RydWN0IGRybV9jbGllbnRfZGV2ICpj bGllbnQpCj4gK3sKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjbGllbnQtPmRldjsKPiAr CXVuc2lnbmVkIGludCBudW1fY3J0YyA9IGRldi0+bW9kZV9jb25maWcubnVtX2NydGM7Cj4gKwl1 bnNpZ25lZCBpbnQgbWF4X2Nvbm5lY3Rvcl9jb3VudCA9IDE7Cj4gKwlzdHJ1Y3QgZHJtX21vZGVf c2V0ICptb2Rlc2V0Owo+ICsJc3RydWN0IGRybV9jcnRjICpjcnRjOwo+ICsJdW5zaWduZWQgaW50 IGkgPSAwOwo+ICsKPiArCS8qIEFkZCB0ZXJtaW5hdGluZyB6ZXJvIGVudHJ5IHRvIGVuYWJsZSBp bmRleCBsZXNzIGl0ZXJhdGlvbiAqLwo+ICsJY2xpZW50LT5tb2Rlc2V0cyA9IGtjYWxsb2MobnVt X2NydGMgKyAxLCBzaXplb2YoKmNsaWVudC0+bW9kZXNldHMpLCBHRlBfS0VSTkVMKTsKPiArCWlm ICghY2xpZW50LT5tb2Rlc2V0cykKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwltdXRleF9p bml0KCZjbGllbnQtPm1vZGVzZXRfbXV0ZXgpOwo+ICsKPiArCWRybV9mb3JfZWFjaF9jcnRjKGNy dGMsIGRldikKPiArCQljbGllbnQtPm1vZGVzZXRzW2krK10uY3J0YyA9IGNydGM7Cj4gKwo+ICsJ LyogQ2xvbmluZyBpcyBvbmx5IHN1cHBvcnRlZCBpbiB0aGUgc2luZ2xlIGNydGMgY2FzZS4gKi8K PiArCWlmIChudW1fY3J0YyA9PSAxKQo+ICsJCW1heF9jb25uZWN0b3JfY291bnQgPSBEUk1fQ0xJ RU5UX01BWF9DTE9ORURfQ09OTkVDVE9SUzsKPiArCj4gKwlkcm1fY2xpZW50X2Zvcl9lYWNoX21v ZGVzZXQobW9kZXNldCwgY2xpZW50KSB7Cj4gKwkJbW9kZXNldC0+Y29ubmVjdG9ycyA9IGtjYWxs b2MobWF4X2Nvbm5lY3Rvcl9jb3VudCwKPiArCQkJCQkgICAgICBzaXplb2YoKm1vZGVzZXQtPmNv bm5lY3RvcnMpLCBHRlBfS0VSTkVMKTsKPiArCQlpZiAoIW1vZGVzZXQtPmNvbm5lY3RvcnMpCj4g KwkJCWdvdG8gZXJyX2ZyZWU7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtlcnJfZnJl ZToKPiArCWRybV9jbGllbnRfbW9kZXNldF9mcmVlKGNsaWVudCk7Cj4gKwo+ICsJcmV0dXJuIC1F Tk9NRU07Cj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1fY2xpZW50X21vZGVzZXRfY3JlYXRlKTsK PiArCj4gKy8qIFVzZWQgYnkgZHJtX2NsaWVudCBhbmQgZHJtX2ZiX2hlbHBlciAqLwo+ICt2b2lk IGRybV9jbGllbnRfbW9kZXNldF9mcmVlKHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50KQo+ ICt7Cj4gKwlzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2Rlc2V0Owo+ICsKPiArCW11dGV4X2Rlc3Ry b3koJmNsaWVudC0+bW9kZXNldF9tdXRleCk7Cj4gKwo+ICsJZHJtX2NsaWVudF9mb3JfZWFjaF9t b2Rlc2V0KG1vZGVzZXQsIGNsaWVudCkKPiArCQlrZnJlZShtb2Rlc2V0LT5jb25uZWN0b3JzKTsK PiArCWtmcmVlKGNsaWVudC0+bW9kZXNldHMpOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2Ns aWVudF9tb2Rlc2V0X2ZyZWUpOwo+ICsKPiArLyogVXNlZCBieSBkcm1fY2xpZW50IGFuZCBkcm1f ZmJfaGVscGVyICovCj4gK3ZvaWQgZHJtX2NsaWVudF9tb2Rlc2V0X3JlbGVhc2Uoc3RydWN0IGRy bV9jbGllbnRfZGV2ICpjbGllbnQpCj4gK3sKPiArCXN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVz ZXQ7Cj4gKwl1bnNpZ25lZCBpbnQgaTsKPiArCj4gKwlkcm1fY2xpZW50X2Zvcl9lYWNoX21vZGVz ZXQobW9kZXNldCwgY2xpZW50KSB7Cj4gKwkJZHJtX21vZGVfZGVzdHJveShjbGllbnQtPmRldiwg bW9kZXNldC0+bW9kZSk7Cj4gKwkJbW9kZXNldC0+bW9kZSA9IE5VTEw7Cj4gKwkJbW9kZXNldC0+ ZmIgPSBOVUxMOwo+ICsKPiArCQlmb3IgKGkgPSAwOyBpIDwgbW9kZXNldC0+bnVtX2Nvbm5lY3Rv cnM7IGkrKykgewo+ICsJCQlkcm1fY29ubmVjdG9yX3B1dChtb2Rlc2V0LT5jb25uZWN0b3JzW2ld KTsKPiArCQkJbW9kZXNldC0+Y29ubmVjdG9yc1tpXSA9IE5VTEw7Cj4gKwkJfQo+ICsJCW1vZGVz ZXQtPm51bV9jb25uZWN0b3JzID0gMDsKPiArCX0KPiArfQo+ICtFWFBPUlRfU1lNQk9MKGRybV9j bGllbnRfbW9kZXNldF9yZWxlYXNlKTsKPiArCj4gK3N0cnVjdCBkcm1fbW9kZV9zZXQgKmRybV9j bGllbnRfZmluZF9tb2Rlc2V0KHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50LCBzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMpCj4gK3sKPiArCXN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVzZXQ7Cj4g Kwo+ICsJZHJtX2NsaWVudF9mb3JfZWFjaF9tb2Rlc2V0KG1vZGVzZXQsIGNsaWVudCkKPiArCQlp ZiAobW9kZXNldC0+Y3J0YyA9PSBjcnRjKQo+ICsJCQlyZXR1cm4gbW9kZXNldDsKPiArCj4gKwly ZXR1cm4gTlVMTDsKPiArfQo+ICsvKiBUT0RPOiBSZW1vdmUgZXhwb3J0IHdoZW4gbW9kZXNldCBj b2RlIGhhcyBiZWVuIG1vdmVkIG92ZXIgKi8KPiArRVhQT1JUX1NZTUJPTChkcm1fY2xpZW50X2Zp bmRfbW9kZXNldCk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVy LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCj4gaW5kZXggNjlkZGRjNGE5MjMx Li5iNjVlZGZjOTlmZWIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxw ZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKPiBAQCAtMzE3LDEz ICszMTcsMTEgQEAgaW50IGRybV9mYl9oZWxwZXJfZGVidWdfZW50ZXIoc3RydWN0IGZiX2luZm8g KmluZm8pCj4gIHsKPiAgCXN0cnVjdCBkcm1fZmJfaGVscGVyICpoZWxwZXIgPSBpbmZvLT5wYXI7 Cj4gIAljb25zdCBzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzICpmdW5jczsKPiAtCWludCBp Owo+ICsJc3RydWN0IGRybV9tb2RlX3NldCAqbW9kZV9zZXQ7Cj4gIAo+ICAJbGlzdF9mb3JfZWFj aF9lbnRyeShoZWxwZXIsICZrZXJuZWxfZmJfaGVscGVyX2xpc3QsIGtlcm5lbF9mYl9saXN0KSB7 Cj4gLQkJZm9yIChpID0gMDsgaSA8IGhlbHBlci0+Y3J0Y19jb3VudDsgaSsrKSB7Cj4gLQkJCXN0 cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVfc2V0ID0KPiAtCQkJCSZoZWxwZXItPmNydGNfaW5mb1tp XS5tb2RlX3NldDsKPiAtCj4gKwkJbXV0ZXhfbG9jaygmaGVscGVyLT5jbGllbnQubW9kZXNldF9t dXRleCk7Cj4gKwkJZHJtX2NsaWVudF9mb3JfZWFjaF9tb2Rlc2V0KG1vZGVfc2V0LCAmaGVscGVy LT5jbGllbnQpIHsKPiAgCQkJaWYgKCFtb2RlX3NldC0+Y3J0Yy0+ZW5hYmxlZCkKPiAgCQkJCWNv bnRpbnVlOwo+ICAKPiBAQCAtMzQwLDYgKzMzOCw3IEBAIGludCBkcm1fZmJfaGVscGVyX2RlYnVn X2VudGVyKHN0cnVjdCBmYl9pbmZvICppbmZvKQo+ICAJCQkJCQkgICAgbW9kZV9zZXQtPnksCj4g IAkJCQkJCSAgICBFTlRFUl9BVE9NSUNfTU9ERV9TRVQpOwo+ICAJCX0KPiArCQltdXRleF91bmxv Y2soJmhlbHBlci0+Y2xpZW50Lm1vZGVzZXRfbXV0ZXgpOwo+ICAJfQo+ICAKPiAgCXJldHVybiAw Owo+IEBAIC0zNTMsMTQgKzM1MiwxNCBAQCBFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfZGVi dWdfZW50ZXIpOwo+ICBpbnQgZHJtX2ZiX2hlbHBlcl9kZWJ1Z19sZWF2ZShzdHJ1Y3QgZmJfaW5m byAqaW5mbykKPiAgewo+ICAJc3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlciA9IGluZm8tPnBh cjsKPiArCXN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50ID0gJmhlbHBlci0+Y2xpZW50Owo+ ICAJc3RydWN0IGRybV9jcnRjICpjcnRjOwo+ICAJY29uc3Qgc3RydWN0IGRybV9jcnRjX2hlbHBl cl9mdW5jcyAqZnVuY3M7Cj4gKwlzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2RlX3NldDsKPiAgCXN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOwo+IC0JaW50IGk7Cj4gLQo+IC0JZm9yIChpID0gMDsg aSA8IGhlbHBlci0+Y3J0Y19jb3VudDsgaSsrKSB7Cj4gLQkJc3RydWN0IGRybV9tb2RlX3NldCAq bW9kZV9zZXQgPSAmaGVscGVyLT5jcnRjX2luZm9baV0ubW9kZV9zZXQ7Cj4gIAo+ICsJbXV0ZXhf bG9jaygmY2xpZW50LT5tb2Rlc2V0X211dGV4KTsKPiArCWRybV9jbGllbnRfZm9yX2VhY2hfbW9k ZXNldChtb2RlX3NldCwgY2xpZW50KSB7Cj4gIAkJY3J0YyA9IG1vZGVfc2V0LT5jcnRjOwo+ICAJ CWlmIChkcm1fZHJ2X3VzZXNfYXRvbWljX21vZGVzZXQoY3J0Yy0+ZGV2KSkKPiAgCQkJY29udGlu dWU7Cj4gQEAgLTM4Myw2ICszODIsNyBAQCBpbnQgZHJtX2ZiX2hlbHBlcl9kZWJ1Z19sZWF2ZShz dHJ1Y3QgZmJfaW5mbyAqaW5mbykKPiAgCQlmdW5jcy0+bW9kZV9zZXRfYmFzZV9hdG9taWMobW9k ZV9zZXQtPmNydGMsIGZiLCBjcnRjLT54LAo+ICAJCQkJCSAgICBjcnRjLT55LCBMRUFWRV9BVE9N SUNfTU9ERV9TRVQpOwo+ICAJfQo+ICsJbXV0ZXhfdW5sb2NrKCZjbGllbnQtPm1vZGVzZXRfbXV0 ZXgpOwo+ICAKPiAgCXJldHVybiAwOwo+ICB9Cj4gQEAgLTQzMywxMiArNDMzLDE0IEBAIHN0YXRp YyBib29sIGRybV9mYl9oZWxwZXJfcGFuZWxfcm90YXRpb24oc3RydWN0IGRybV9tb2RlX3NldCAq bW9kZXNldCwKPiAgCj4gIHN0YXRpYyBpbnQgcmVzdG9yZV9mYmRldl9tb2RlX2F0b21pYyhzdHJ1 Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLCBib29sIGFjdGl2ZSkKPiAgewo+ICsJc3RydWN0 IGRybV9jbGllbnRfZGV2ICpjbGllbnQgPSAmZmJfaGVscGVyLT5jbGllbnQ7Cj4gIAlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gZmJfaGVscGVyLT5kZXY7Cj4gIAlzdHJ1Y3QgZHJtX3BsYW5lX3N0 YXRlICpwbGFuZV9zdGF0ZTsKPiAgCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOwo+ICAJc3RydWN0 IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlOwo+IC0JaW50IGksIHJldDsKPiAgCXN0cnVjdCBkcm1f bW9kZXNldF9hY3F1aXJlX2N0eCBjdHg7Cj4gKwlzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2RlX3Nl dDsKPiArCWludCByZXQ7Cj4gIAo+ICAJZHJtX21vZGVzZXRfYWNxdWlyZV9pbml0KCZjdHgsIDAp Owo+ICAKPiBAQCAtNDY4LDggKzQ3MCw3IEBAIHN0YXRpYyBpbnQgcmVzdG9yZV9mYmRldl9tb2Rl X2F0b21pYyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLCBib29sIGFjdGl2Cj4gIAkJ CWdvdG8gb3V0X3N0YXRlOwo+ICAJfQo+ICAKPiAtCWZvciAoaSA9IDA7IGkgPCBmYl9oZWxwZXIt PmNydGNfY291bnQ7IGkrKykgewo+IC0JCXN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVfc2V0ID0g JmZiX2hlbHBlci0+Y3J0Y19pbmZvW2ldLm1vZGVfc2V0Owo+ICsJZHJtX2NsaWVudF9mb3JfZWFj aF9tb2Rlc2V0KG1vZGVfc2V0LCBjbGllbnQpIHsKPiAgCQlzdHJ1Y3QgZHJtX3BsYW5lICpwcmlt YXJ5ID0gbW9kZV9zZXQtPmNydGMtPnByaW1hcnk7Cj4gIAkJdW5zaWduZWQgaW50IHJvdGF0aW9u Owo+ICAKPiBAQCAtNTE3LDkgKzUxOCwxMSBAQCBzdGF0aWMgaW50IHJlc3RvcmVfZmJkZXZfbW9k ZV9hdG9taWMoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwgYm9vbCBhY3Rpdgo+ICAK PiAgc3RhdGljIGludCByZXN0b3JlX2ZiZGV2X21vZGVfbGVnYWN5KHN0cnVjdCBkcm1fZmJfaGVs cGVyICpmYl9oZWxwZXIpCj4gIHsKPiArCXN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50ID0g JmZiX2hlbHBlci0+Y2xpZW50Owo+ICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGZiX2hlbHBl ci0+ZGV2Owo+ICsJc3RydWN0IGRybV9tb2RlX3NldCAqbW9kZV9zZXQ7Cj4gIAlzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZTsKPiAtCWludCBpLCByZXQgPSAwOwo+ICsJaW50IHJldCA9IDA7Cj4gIAo+ ICAJZHJtX21vZGVzZXRfbG9ja19hbGwoZmJfaGVscGVyLT5kZXYpOwo+ICAJZHJtX2Zvcl9lYWNo X3BsYW5lKHBsYW5lLCBkZXYpIHsKPiBAQCAtNTMyLDggKzUzNSw3IEBAIHN0YXRpYyBpbnQgcmVz dG9yZV9mYmRldl9tb2RlX2xlZ2FjeShzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyKQo+ ICAJCQkJCQkgICAgRFJNX01PREVfUk9UQVRFXzApOwo+ICAJfQo+ICAKPiAtCWZvciAoaSA9IDA7 IGkgPCBmYl9oZWxwZXItPmNydGNfY291bnQ7IGkrKykgewo+IC0JCXN0cnVjdCBkcm1fbW9kZV9z ZXQgKm1vZGVfc2V0ID0gJmZiX2hlbHBlci0+Y3J0Y19pbmZvW2ldLm1vZGVfc2V0Owo+ICsJZHJt X2NsaWVudF9mb3JfZWFjaF9tb2Rlc2V0KG1vZGVfc2V0LCBjbGllbnQpIHsKPiAgCQlzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMgPSBtb2RlX3NldC0+Y3J0YzsKPiAgCj4gIAkJaWYgKGNydGMtPmZ1bmNz LT5jdXJzb3Jfc2V0Mikgewo+IEBAIC01NTksMTEgKzU2MSwxNiBAQCBzdGF0aWMgaW50IHJlc3Rv cmVfZmJkZXZfbW9kZV9sZWdhY3koc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlcikKPiAg c3RhdGljIGludCByZXN0b3JlX2ZiZGV2X21vZGVfZm9yY2Uoc3RydWN0IGRybV9mYl9oZWxwZXIg KmZiX2hlbHBlcikKPiAgewo+ICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGZiX2hlbHBlci0+ ZGV2Owo+ICsJaW50IHJldDsKPiAgCj4gKwltdXRleF9sb2NrKCZmYl9oZWxwZXItPmNsaWVudC5t b2Rlc2V0X211dGV4KTsKPiAgCWlmIChkcm1fZHJ2X3VzZXNfYXRvbWljX21vZGVzZXQoZGV2KSkK PiAtCQlyZXR1cm4gcmVzdG9yZV9mYmRldl9tb2RlX2F0b21pYyhmYl9oZWxwZXIsIHRydWUpOwo+ ICsJCXJldCA9IHJlc3RvcmVfZmJkZXZfbW9kZV9hdG9taWMoZmJfaGVscGVyLCB0cnVlKTsKPiAg CWVsc2UKPiAtCQlyZXR1cm4gcmVzdG9yZV9mYmRldl9tb2RlX2xlZ2FjeShmYl9oZWxwZXIpOwo+ ICsJCXJldCA9IHJlc3RvcmVfZmJkZXZfbW9kZV9sZWdhY3koZmJfaGVscGVyKTsKPiArCW11dGV4 X3VubG9jaygmZmJfaGVscGVyLT5jbGllbnQubW9kZXNldF9tdXRleCk7Cj4gKwo+ICsJcmV0dXJu IHJldDsKPiAgfQo+ICAKPiAgc3RhdGljIGludCByZXN0b3JlX2ZiZGV2X21vZGUoc3RydWN0IGRy bV9mYl9oZWxwZXIgKmZiX2hlbHBlcikKPiBAQCAtNjcyLDE1ICs2NzksMTQgQEAgc3RhdGljIHN0 cnVjdCBzeXNycV9rZXlfb3Agc3lzcnFfZHJtX2ZiX2hlbHBlcl9yZXN0b3JlX29wID0geyB9Owo+ ICAKPiAgc3RhdGljIHZvaWQgZHBtc19sZWdhY3koc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hl bHBlciwgaW50IGRwbXNfbW9kZSkKPiAgewo+ICsJc3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGll bnQgPSAmZmJfaGVscGVyLT5jbGllbnQ7Cj4gIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZmJf aGVscGVyLT5kZXY7Cj4gIAlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwo+ICAJc3Ry dWN0IGRybV9tb2RlX3NldCAqbW9kZXNldDsKPiAtCWludCBpLCBqOwo+ICsJaW50IGo7Cj4gIAo+ ICAJZHJtX21vZGVzZXRfbG9ja19hbGwoZGV2KTsKPiAtCWZvciAoaSA9IDA7IGkgPCBmYl9oZWxw ZXItPmNydGNfY291bnQ7IGkrKykgewo+IC0JCW1vZGVzZXQgPSAmZmJfaGVscGVyLT5jcnRjX2lu Zm9baV0ubW9kZV9zZXQ7Cj4gLQo+ICsJZHJtX2NsaWVudF9mb3JfZWFjaF9tb2Rlc2V0KG1vZGVz ZXQsIGNsaWVudCkgewo+ICAJCWlmICghbW9kZXNldC0+Y3J0Yy0+ZW5hYmxlZCkKPiAgCQkJY29u dGludWU7Cj4gIAo+IEBAIC02OTcsNiArNzAzLDcgQEAgc3RhdGljIHZvaWQgZHBtc19sZWdhY3ko c3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwgaW50IGRwbXNfbW9kZSkKPiAgc3RhdGlj IHZvaWQgZHJtX2ZiX2hlbHBlcl9kcG1zKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgZHBtc19t b2RlKQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyID0gaW5mby0+cGFy Owo+ICsJc3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQgPSAmZmJfaGVscGVyLT5jbGllbnQ7 Cj4gIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZmJfaGVscGVyLT5kZXY7Cj4gIAo+ICAJLyoK PiBAQCAtNzA2LDEwICs3MTMsMTIgQEAgc3RhdGljIHZvaWQgZHJtX2ZiX2hlbHBlcl9kcG1zKHN0 cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgZHBtc19tb2RlKQo+ICAJaWYgKCFkcm1fbWFzdGVyX2lu dGVybmFsX2FjcXVpcmUoZGV2KSkKPiAgCQlnb3RvIHVubG9jazsKPiAgCj4gKwltdXRleF9sb2Nr KCZjbGllbnQtPm1vZGVzZXRfbXV0ZXgpOwo+ICAJaWYgKGRybV9kcnZfdXNlc19hdG9taWNfbW9k ZXNldChkZXYpKQo+ICAJCXJlc3RvcmVfZmJkZXZfbW9kZV9hdG9taWMoZmJfaGVscGVyLCBkcG1z X21vZGUgPT0gRFJNX01PREVfRFBNU19PTik7Cj4gIAllbHNlCj4gIAkJZHBtc19sZWdhY3koZmJf aGVscGVyLCBkcG1zX21vZGUpOwo+ICsJbXV0ZXhfdW5sb2NrKCZjbGllbnQtPm1vZGVzZXRfbXV0 ZXgpOwo+ICAKPiAgCWRybV9tYXN0ZXJfaW50ZXJuYWxfcmVsZWFzZShkZXYpOwo+ICB1bmxvY2s6 Cj4gQEAgLTc1Miw0MyArNzYxLDYgQEAgaW50IGRybV9mYl9oZWxwZXJfYmxhbmsoaW50IGJsYW5r LCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKPiAgfQo+ICBFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxw ZXJfYmxhbmspOwo+ICAKPiAtc3RhdGljIHZvaWQgZHJtX2ZiX2hlbHBlcl9tb2Rlc2V0X3JlbGVh c2Uoc3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlciwKPiAtCQkJCQkgIHN0cnVjdCBkcm1fbW9k ZV9zZXQgKm1vZGVzZXQpCj4gLXsKPiAtCWludCBpOwo+IC0KPiAtCWZvciAoaSA9IDA7IGkgPCBt b2Rlc2V0LT5udW1fY29ubmVjdG9yczsgaSsrKSB7Cj4gLQkJZHJtX2Nvbm5lY3Rvcl9wdXQobW9k ZXNldC0+Y29ubmVjdG9yc1tpXSk7Cj4gLQkJbW9kZXNldC0+Y29ubmVjdG9yc1tpXSA9IE5VTEw7 Cj4gLQl9Cj4gLQltb2Rlc2V0LT5udW1fY29ubmVjdG9ycyA9IDA7Cj4gLQo+IC0JZHJtX21vZGVf ZGVzdHJveShoZWxwZXItPmRldiwgbW9kZXNldC0+bW9kZSk7Cj4gLQltb2Rlc2V0LT5tb2RlID0g TlVMTDsKPiAtCj4gLQkvKiBGSVhNRSBzaG91bGQgaG9sZCBhIHJlZj8gKi8KPiAtCW1vZGVzZXQt PmZiID0gTlVMTDsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgZHJtX2ZiX2hlbHBlcl9jcnRjX2Zy ZWUoc3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlcikKPiAtewo+IC0JaW50IGk7Cj4gLQo+IC0J Zm9yIChpID0gMDsgaSA8IGhlbHBlci0+Y29ubmVjdG9yX2NvdW50OyBpKyspIHsKPiAtCQlkcm1f Y29ubmVjdG9yX3B1dChoZWxwZXItPmNvbm5lY3Rvcl9pbmZvW2ldLT5jb25uZWN0b3IpOwo+IC0J CWtmcmVlKGhlbHBlci0+Y29ubmVjdG9yX2luZm9baV0pOwo+IC0JfQo+IC0Ja2ZyZWUoaGVscGVy LT5jb25uZWN0b3JfaW5mbyk7Cj4gLQo+IC0JZm9yIChpID0gMDsgaSA8IGhlbHBlci0+Y3J0Y19j b3VudDsgaSsrKSB7Cj4gLQkJc3RydWN0IGRybV9tb2RlX3NldCAqbW9kZXNldCA9ICZoZWxwZXIt PmNydGNfaW5mb1tpXS5tb2RlX3NldDsKPiAtCj4gLQkJZHJtX2ZiX2hlbHBlcl9tb2Rlc2V0X3Jl bGVhc2UoaGVscGVyLCBtb2Rlc2V0KTsKPiAtCQlrZnJlZShtb2Rlc2V0LT5jb25uZWN0b3JzKTsK PiAtCX0KPiAtCWtmcmVlKGhlbHBlci0+Y3J0Y19pbmZvKTsKPiAtfQo+IC0KPiAgc3RhdGljIHZv aWQgZHJtX2ZiX2hlbHBlcl9yZXN1bWVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykK PiAgewo+ICAJc3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlciA9IGNvbnRhaW5lcl9vZih3b3Jr LCBzdHJ1Y3QgZHJtX2ZiX2hlbHBlciwKPiBAQCAtODY3LDcgKzgzOSw3IEBAIEVYUE9SVF9TWU1C T0woZHJtX2ZiX2hlbHBlcl9wcmVwYXJlKTsKPiAgICogZHJtX2ZiX2hlbHBlcl9pbml0IC0gaW5p dGlhbGl6ZSBhICZzdHJ1Y3QgZHJtX2ZiX2hlbHBlcgo+ICAgKiBAZGV2OiBkcm0gZGV2aWNlCj4g ICAqIEBmYl9oZWxwZXI6IGRyaXZlci1hbGxvY2F0ZWQgZmJkZXYgaGVscGVyIHN0cnVjdHVyZSB0 byBpbml0aWFsaXplCj4gLSAqIEBtYXhfY29ubl9jb3VudDogbWF4IGNvbm5lY3RvciBjb3VudAo+ ICsgKiBAbWF4X2Nvbm5fY291bnQ6IG1heCBjb25uZWN0b3IgY291bnQgKG5vdCB1c2VkKQo+ICAg Kgo+ICAgKiBUaGlzIGFsbG9jYXRlcyB0aGUgc3RydWN0dXJlcyBmb3IgdGhlIGZiZGV2IGhlbHBl ciB3aXRoIHRoZSBnaXZlbiBsaW1pdHMuCj4gICAqIE5vdGUgdGhhdCB0aGlzIHdvbid0IHlldCB0 b3VjaCB0aGUgaGFyZHdhcmUgKHRocm91Z2ggdGhlIGRyaXZlciBpbnRlcmZhY2VzKQo+IEBAIC04 ODMsNTMgKzg1NSwzNCBAQCBpbnQgZHJtX2ZiX2hlbHBlcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsCj4gIAkJICAgICAgIHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCj4gIAkJ ICAgICAgIGludCBtYXhfY29ubl9jb3VudCkKPiAgewo+IC0Jc3RydWN0IGRybV9jcnRjICpjcnRj Owo+IC0Jc3RydWN0IGRybV9tb2RlX2NvbmZpZyAqY29uZmlnID0gJmRldi0+bW9kZV9jb25maWc7 Cj4gLQlpbnQgaTsKPiArCWludCByZXQ7Cj4gIAo+ICAJaWYgKCFkcm1fZmJkZXZfZW11bGF0aW9u KSB7Cj4gIAkJZGV2LT5mYl9oZWxwZXIgPSBmYl9oZWxwZXI7Cj4gIAkJcmV0dXJuIDA7Cj4gIAl9 Cj4gIAo+IC0JaWYgKCFtYXhfY29ubl9jb3VudCkKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCj4g LQlmYl9oZWxwZXItPmNydGNfaW5mbyA9IGtjYWxsb2MoY29uZmlnLT5udW1fY3J0Yywgc2l6ZW9m KHN0cnVjdCBkcm1fZmJfaGVscGVyX2NydGMpLCBHRlBfS0VSTkVMKTsKPiAtCWlmICghZmJfaGVs cGVyLT5jcnRjX2luZm8pCj4gLQkJcmV0dXJuIC1FTk9NRU07Cj4gLQo+IC0JZmJfaGVscGVyLT5j cnRjX2NvdW50ID0gY29uZmlnLT5udW1fY3J0YzsKPiAtCWZiX2hlbHBlci0+Y29ubmVjdG9yX2lu Zm8gPSBrY2FsbG9jKGRldi0+bW9kZV9jb25maWcubnVtX2Nvbm5lY3Rvciwgc2l6ZW9mKHN0cnVj dCBkcm1fZmJfaGVscGVyX2Nvbm5lY3RvciAqKSwgR0ZQX0tFUk5FTCk7Cj4gLQlpZiAoIWZiX2hl bHBlci0+Y29ubmVjdG9yX2luZm8pIHsKPiAtCQlrZnJlZShmYl9oZWxwZXItPmNydGNfaW5mbyk7 Cj4gLQkJcmV0dXJuIC1FTk9NRU07Cj4gKwkvKiBUaGUgZ2VuZXJpYyBmYmRldiBjbGllbnQgaGFz IGFscmVhZHkgZG9uZSB0aGlzICovCj4gKwlpZiAoIWZiX2hlbHBlci0+Y2xpZW50LmZ1bmNzKSB7 Cj4gKwkJZmJfaGVscGVyLT5jbGllbnQuZGV2ID0gZGV2Owo+ICsJCXJldCA9IGRybV9jbGllbnRf bW9kZXNldF9jcmVhdGUoJmZiX2hlbHBlci0+Y2xpZW50KTsKPiArCQlpZiAocmV0KQo+ICsJCQly ZXR1cm4gcmV0OwoKSG0sIHRoaXMgaXMgYSBiaXQgYW5ub3lpbmcgc2luY2UgaXQncyB0aGUgb25s eSByZWFzb24gd2UgbmVlZCB0bwpFWFBPUlRfU1lNQk9MIGFsbCB0aGUgbmV3IGZ1bmN0aW9ucy4g V2hhdCBJIGhhZCBpbiBtaW5kIGlzIHRvIGNhbGwKZHJtX2NsaWVudF9pbml0IGhlcmUsIHdpdGgg YSBuby1vcCAtPnVucmVnaXN0ZXIgZnVuY3Rpb24gYmVjYXVzZSB0aGUKbGlmZXRpbWVzIG9mIHRo ZSBlbWJlZGRlZCBkcm1fY2xpZW50X2RldiBpbiB0aGUgZHJtX2ZiX2hlbHBlciAod2hpY2gKZHJp dmVycyB1c3VhbGx5IGVtYmVkZGVkIHNvbWV3aGVyZSBlbHNlIG91dHNpZGUgb2Ygb3VyIGNvbnRy b2wpIGRpZmZlcnMKZnJvbSBhIHJlYWwgZHJtX2NsaWVudC4KCj4gIAl9Cj4gKwo+ICsJZmJfaGVs cGVyLT5jb25uZWN0b3JfaW5mbyA9IGtjYWxsb2MoZGV2LT5tb2RlX2NvbmZpZy5udW1fY29ubmVj dG9yLCBzaXplb2Yoc3RydWN0IGRybV9mYl9oZWxwZXJfY29ubmVjdG9yICopLCBHRlBfS0VSTkVM KTsKPiArCWlmICghZmJfaGVscGVyLT5jb25uZWN0b3JfaW5mbykKPiArCQlnb3RvIG91dF9mcmVl Owo+ICsKPiAgCWZiX2hlbHBlci0+Y29ubmVjdG9yX2luZm9fYWxsb2NfY291bnQgPSBkZXYtPm1v ZGVfY29uZmlnLm51bV9jb25uZWN0b3I7Cj4gIAlmYl9oZWxwZXItPmNvbm5lY3Rvcl9jb3VudCA9 IDA7Cj4gIAo+IC0JZm9yIChpID0gMDsgaSA8IGZiX2hlbHBlci0+Y3J0Y19jb3VudDsgaSsrKSB7 Cj4gLQkJZmJfaGVscGVyLT5jcnRjX2luZm9baV0ubW9kZV9zZXQuY29ubmVjdG9ycyA9Cj4gLQkJ CWtjYWxsb2MobWF4X2Nvbm5fY291bnQsCj4gLQkJCQlzaXplb2Yoc3RydWN0IGRybV9jb25uZWN0 b3IgKiksCj4gLQkJCQlHRlBfS0VSTkVMKTsKPiAtCj4gLQkJaWYgKCFmYl9oZWxwZXItPmNydGNf aW5mb1tpXS5tb2RlX3NldC5jb25uZWN0b3JzKQo+IC0JCQlnb3RvIG91dF9mcmVlOwo+IC0JCWZi X2hlbHBlci0+Y3J0Y19pbmZvW2ldLm1vZGVfc2V0Lm51bV9jb25uZWN0b3JzID0gMDsKPiAtCX0K PiAtCj4gLQlpID0gMDsKPiAtCWRybV9mb3JfZWFjaF9jcnRjKGNydGMsIGRldikgewo+IC0JCWZi X2hlbHBlci0+Y3J0Y19pbmZvW2ldLm1vZGVfc2V0LmNydGMgPSBjcnRjOwo+IC0JCWkrKzsKPiAt CX0KPiAtCj4gIAlkZXYtPmZiX2hlbHBlciA9IGZiX2hlbHBlcjsKPiAgCj4gIAlyZXR1cm4gMDsK PiAgb3V0X2ZyZWU6Cj4gLQlkcm1fZmJfaGVscGVyX2NydGNfZnJlZShmYl9oZWxwZXIpOwo+ICsJ ZHJtX2NsaWVudF9tb2Rlc2V0X2ZyZWUoJmZiX2hlbHBlci0+Y2xpZW50KTsKPiArCj4gIAlyZXR1 cm4gLUVOT01FTTsKPiAgfQo+ICBFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfaW5pdCk7Cj4g QEAgLTEwMDUsNiArOTU4LDcgQEAgRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX3VucmVnaXN0 ZXJfZmJpKTsKPiAgdm9pZCBkcm1fZmJfaGVscGVyX2Zpbmkoc3RydWN0IGRybV9mYl9oZWxwZXIg KmZiX2hlbHBlcikKPiAgewo+ICAJc3RydWN0IGZiX2luZm8gKmluZm87Cj4gKwlpbnQgaTsKPiAg Cj4gIAlpZiAoIWZiX2hlbHBlcikKPiAgCQlyZXR1cm47Cj4gQEAgLTEwMzQsOCArOTg4LDE3IEBA IHZvaWQgZHJtX2ZiX2hlbHBlcl9maW5pKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIp Cj4gIAltdXRleF91bmxvY2soJmtlcm5lbF9mYl9oZWxwZXJfbG9jayk7Cj4gIAo+ICAJbXV0ZXhf ZGVzdHJveSgmZmJfaGVscGVyLT5sb2NrKTsKPiAtCWRybV9mYl9oZWxwZXJfY3J0Y19mcmVlKGZi X2hlbHBlcik7Cj4gIAo+ICsJaWYgKCFmYl9oZWxwZXItPmNsaWVudC5mdW5jcykgewo+ICsJCWRy bV9jbGllbnRfbW9kZXNldF9yZWxlYXNlKCZmYl9oZWxwZXItPmNsaWVudCk7Cj4gKwkJZHJtX2Ns aWVudF9tb2Rlc2V0X2ZyZWUoJmZiX2hlbHBlci0+Y2xpZW50KTsKPiArCX0KCldlIHNob3VsZCB0 aGVuIGFsc28gYmUgYWJsZSB0byBjYWxsIGRybV9jbGllbnRfcmVsZWFzZSBoZXJlIGlmIGZ1bmNz Cm1hdGNoZXMgb3VyIGZha2UgY2xpZW50IGZ1bmN0aW9ucy4gU2luY2Ugd2Ugd29uJ3QgY2FsbCBk cm1fY2xpZW50X3JlZ2lzdGVyCnRoZXJlJ3Mgbm90IGdvaW5nIHRvIGJlIGFuIGlzc3VlIHdpdGgg Y2xpZW50LT5saXN0IEkgdGhpbmsuCgo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBmYl9oZWxwZXIt PmNvbm5lY3Rvcl9jb3VudDsgaSsrKSB7Cj4gKwkJZHJtX2Nvbm5lY3Rvcl9wdXQoZmJfaGVscGVy LT5jb25uZWN0b3JfaW5mb1tpXS0+Y29ubmVjdG9yKTsKPiArCQlrZnJlZShmYl9oZWxwZXItPmNv bm5lY3Rvcl9pbmZvW2ldKTsKPiArCX0KPiArCWtmcmVlKGZiX2hlbHBlci0+Y29ubmVjdG9yX2lu Zm8pOwo+ICB9Cj4gIEVYUE9SVF9TWU1CT0woZHJtX2ZiX2hlbHBlcl9maW5pKTsKPiAgCj4gQEAg LTEzODAsMTMgKzEzNDMsMTQgQEAgc3RhdGljIGludCBzZXRjbWFwX3BzZXVkb19wYWxldHRlKHN0 cnVjdCBmYl9jbWFwICpjbWFwLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKPiAgc3RhdGljIGludCBz ZXRjbWFwX2xlZ2FjeShzdHJ1Y3QgZmJfY21hcCAqY21hcCwgc3RydWN0IGZiX2luZm8gKmluZm8p Cj4gIHsKPiAgCXN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIgPSBpbmZvLT5wYXI7Cj4g KwlzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2Rlc2V0Owo+ICAJc3RydWN0IGRybV9jcnRjICpjcnRj Owo+ICAJdTE2ICpyLCAqZywgKmI7Cj4gLQlpbnQgaSwgcmV0ID0gMDsKPiArCWludCByZXQgPSAw Owo+ICAKPiAgCWRybV9tb2Rlc2V0X2xvY2tfYWxsKGZiX2hlbHBlci0+ZGV2KTsKPiAtCWZvciAo aSA9IDA7IGkgPCBmYl9oZWxwZXItPmNydGNfY291bnQ7IGkrKykgewo+IC0JCWNydGMgPSBmYl9o ZWxwZXItPmNydGNfaW5mb1tpXS5tb2RlX3NldC5jcnRjOwo+ICsJZHJtX2NsaWVudF9mb3JfZWFj aF9tb2Rlc2V0KG1vZGVzZXQsICZmYl9oZWxwZXItPmNsaWVudCkgewo+ICsJCWNydGMgPSBtb2Rl c2V0LT5jcnRjOwo+ICAJCWlmICghY3J0Yy0+ZnVuY3MtPmdhbW1hX3NldCB8fCAhY3J0Yy0+Z2Ft bWFfc2l6ZSkKPiAgCQkJcmV0dXJuIC1FSU5WQUw7Cj4gIAo+IEBAIC0xNDYyLDEwICsxNDI2LDEx IEBAIHN0YXRpYyBpbnQgc2V0Y21hcF9hdG9taWMoc3RydWN0IGZiX2NtYXAgKmNtYXAsIHN0cnVj dCBmYl9pbmZvICppbmZvKQo+ICAJc3RydWN0IGRybV9tb2Rlc2V0X2FjcXVpcmVfY3R4IGN0eDsK PiAgCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPiAgCXN0cnVjdCBkcm1fYXRv bWljX3N0YXRlICpzdGF0ZTsKPiArCXN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVzZXQ7Cj4gIAlz dHJ1Y3QgZHJtX2NydGMgKmNydGM7Cj4gIAl1MTYgKnIsICpnLCAqYjsKPiAtCWludCBpLCByZXQg PSAwOwo+ICAJYm9vbCByZXBsYWNlZDsKPiArCWludCByZXQgPSAwOwo+ICAKPiAgCWRybV9tb2Rl c2V0X2FjcXVpcmVfaW5pdCgmY3R4LCAwKTsKPiAgCj4gQEAgLTE0NzcsOCArMTQ0Miw4IEBAIHN0 YXRpYyBpbnQgc2V0Y21hcF9hdG9taWMoc3RydWN0IGZiX2NtYXAgKmNtYXAsIHN0cnVjdCBmYl9p bmZvICppbmZvKQo+ICAKPiAgCXN0YXRlLT5hY3F1aXJlX2N0eCA9ICZjdHg7Cj4gIHJldHJ5Ogo+ IC0JZm9yIChpID0gMDsgaSA8IGZiX2hlbHBlci0+Y3J0Y19jb3VudDsgaSsrKSB7Cj4gLQkJY3J0 YyA9IGZiX2hlbHBlci0+Y3J0Y19pbmZvW2ldLm1vZGVfc2V0LmNydGM7Cj4gKwlkcm1fY2xpZW50 X2Zvcl9lYWNoX21vZGVzZXQobW9kZXNldCwgJmZiX2hlbHBlci0+Y2xpZW50KSB7Cj4gKwkJY3J0 YyA9IG1vZGVzZXQtPmNydGM7Cj4gIAo+ICAJCWlmICghZ2FtbWFfbHV0KQo+ICAJCQlnYW1tYV9s dXQgPSBzZXRjbWFwX25ld19nYW1tYV9sdXQoY3J0YywgY21hcCk7Cj4gQEAgLTE1MDYsOCArMTQ3 MSw4IEBAIHN0YXRpYyBpbnQgc2V0Y21hcF9hdG9taWMoc3RydWN0IGZiX2NtYXAgKmNtYXAsIHN0 cnVjdCBmYl9pbmZvICppbmZvKQo+ICAJaWYgKHJldCkKPiAgCQlnb3RvIG91dF9zdGF0ZTsKPiAg Cj4gLQlmb3IgKGkgPSAwOyBpIDwgZmJfaGVscGVyLT5jcnRjX2NvdW50OyBpKyspIHsKPiAtCQlj cnRjID0gZmJfaGVscGVyLT5jcnRjX2luZm9baV0ubW9kZV9zZXQuY3J0YzsKPiArCWRybV9jbGll bnRfZm9yX2VhY2hfbW9kZXNldChtb2Rlc2V0LCAmZmJfaGVscGVyLT5jbGllbnQpIHsKPiArCQlj cnRjID0gbW9kZXNldC0+Y3J0YzsKPiAgCj4gIAkJciA9IGNydGMtPmdhbW1hX3N0b3JlOwo+ICAJ CWcgPSByICsgY3J0Yy0+Z2FtbWFfc2l6ZTsKPiBAQCAtMTU1NywxMiArMTUyMiwxNCBAQCBpbnQg ZHJtX2ZiX2hlbHBlcl9zZXRjbWFwKHN0cnVjdCBmYl9jbWFwICpjbWFwLCBzdHJ1Y3QgZmJfaW5m byAqaW5mbykKPiAgCQlnb3RvIHVubG9jazsKPiAgCX0KPiAgCj4gKwltdXRleF9sb2NrKCZmYl9o ZWxwZXItPmNsaWVudC5tb2Rlc2V0X211dGV4KTsKPiAgCWlmIChpbmZvLT5maXgudmlzdWFsID09 IEZCX1ZJU1VBTF9UUlVFQ09MT1IpCj4gIAkJcmV0ID0gc2V0Y21hcF9wc2V1ZG9fcGFsZXR0ZShj bWFwLCBpbmZvKTsKPiAgCWVsc2UgaWYgKGRybV9kcnZfdXNlc19hdG9taWNfbW9kZXNldChmYl9o ZWxwZXItPmRldikpCj4gIAkJcmV0ID0gc2V0Y21hcF9hdG9taWMoY21hcCwgaW5mbyk7Cj4gIAll bHNlCj4gIAkJcmV0ID0gc2V0Y21hcF9sZWdhY3koY21hcCwgaW5mbyk7Cj4gKwltdXRleF91bmxv Y2soJmZiX2hlbHBlci0+Y2xpZW50Lm1vZGVzZXRfbXV0ZXgpOwo+ICAKPiAgCWRybV9tYXN0ZXJf aW50ZXJuYWxfcmVsZWFzZShkZXYpOwo+ICB1bmxvY2s6Cj4gQEAgLTE1ODYsNyArMTU1Myw2IEBA IGludCBkcm1fZmJfaGVscGVyX2lvY3RsKHN0cnVjdCBmYl9pbmZvICppbmZvLCB1bnNpZ25lZCBp bnQgY21kLAo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyID0gaW5mby0+ cGFyOwo+ICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGZiX2hlbHBlci0+ZGV2Owo+IC0Jc3Ry dWN0IGRybV9tb2RlX3NldCAqbW9kZV9zZXQ7Cj4gIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Cj4g IAlpbnQgcmV0ID0gMDsKPiAgCj4gQEAgLTE2MTQsOCArMTU4MCw3IEBAIGludCBkcm1fZmJfaGVs cGVyX2lvY3RsKHN0cnVjdCBmYl9pbmZvICppbmZvLCB1bnNpZ25lZCBpbnQgY21kLAo+ICAJCSAq IG1ha2UuIElmIHdlJ3JlIG5vdCBzbWFydCBlbm91Z2ggaGVyZSwgb25lIHNob3VsZAo+ICAJCSAq IGp1c3QgY29uc2lkZXIgc3dpdGNoIHRoZSB1c2Vyc3BhY2UgdG8gS01TLgo+ICAJCSAqLwo+IC0J CW1vZGVfc2V0ID0gJmZiX2hlbHBlci0+Y3J0Y19pbmZvWzBdLm1vZGVfc2V0Owo+IC0JCWNydGMg PSBtb2RlX3NldC0+Y3J0YzsKPiArCQljcnRjID0gZmJfaGVscGVyLT5jbGllbnQubW9kZXNldHNb MF0uY3J0YzsKPiAgCj4gIAkJLyoKPiAgCQkgKiBPbmx5IHdhaXQgZm9yIGEgdmJsYW5rIGV2ZW50 IGlmIHRoZSBDUlRDIGlzCj4gQEAgLTE4MTIsMTYgKzE3NzcsMTQgQEAgRVhQT1JUX1NZTUJPTChk cm1fZmJfaGVscGVyX3NldF9wYXIpOwo+ICAKPiAgc3RhdGljIHZvaWQgcGFuX3NldChzdHJ1Y3Qg ZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLCBpbnQgeCwgaW50IHkpCj4gIHsKPiAtCWludCBpOwo+ IC0KPiAtCWZvciAoaSA9IDA7IGkgPCBmYl9oZWxwZXItPmNydGNfY291bnQ7IGkrKykgewo+IC0J CXN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVfc2V0Owo+IC0KPiAtCQltb2RlX3NldCA9ICZmYl9o ZWxwZXItPmNydGNfaW5mb1tpXS5tb2RlX3NldDsKPiArCXN0cnVjdCBkcm1fbW9kZV9zZXQgKm1v ZGVfc2V0Owo+ICAKPiArCW11dGV4X2xvY2soJmZiX2hlbHBlci0+Y2xpZW50Lm1vZGVzZXRfbXV0 ZXgpOwo+ICsJZHJtX2NsaWVudF9mb3JfZWFjaF9tb2Rlc2V0KG1vZGVfc2V0LCAmZmJfaGVscGVy LT5jbGllbnQpIHsKPiAgCQltb2RlX3NldC0+eCA9IHg7Cj4gIAkJbW9kZV9zZXQtPnkgPSB5Owo+ ICAJfQo+ICsJbXV0ZXhfdW5sb2NrKCZmYl9oZWxwZXItPmNsaWVudC5tb2Rlc2V0X211dGV4KTsK PiAgfQo+ICAKPiAgc3RhdGljIGludCBwYW5fZGlzcGxheV9hdG9taWMoc3RydWN0IGZiX3Zhcl9z Y3JlZW5pbmZvICp2YXIsCj4gQEAgLTE4MzIsNyArMTc5NSw3IEBAIHN0YXRpYyBpbnQgcGFuX2Rp c3BsYXlfYXRvbWljKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAo+ICAKPiAgCXBhbl9z ZXQoZmJfaGVscGVyLCB2YXItPnhvZmZzZXQsIHZhci0+eW9mZnNldCk7Cj4gIAo+IC0JcmV0ID0g cmVzdG9yZV9mYmRldl9tb2RlX2F0b21pYyhmYl9oZWxwZXIsIHRydWUpOwo+ICsJcmV0ID0gcmVz dG9yZV9mYmRldl9tb2RlX2ZvcmNlKGZiX2hlbHBlcik7Cj4gIAlpZiAoIXJldCkgewo+ICAJCWlu Zm8tPnZhci54b2Zmc2V0ID0gdmFyLT54b2Zmc2V0Owo+ICAJCWluZm8tPnZhci55b2Zmc2V0ID0g dmFyLT55b2Zmc2V0Owo+IEBAIC0xODQ2LDE0ICsxODA5LDEzIEBAIHN0YXRpYyBpbnQgcGFuX2Rp c3BsYXlfbGVnYWN5KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAo+ICAJCQkgICAgICBz dHJ1Y3QgZmJfaW5mbyAqaW5mbykKPiAgewo+ICAJc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hl bHBlciA9IGluZm8tPnBhcjsKPiArCXN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50ID0gJmZi X2hlbHBlci0+Y2xpZW50Owo+ICAJc3RydWN0IGRybV9tb2RlX3NldCAqbW9kZXNldDsKPiAgCWlu dCByZXQgPSAwOwo+IC0JaW50IGk7Cj4gIAo+ICAJZHJtX21vZGVzZXRfbG9ja19hbGwoZmJfaGVs cGVyLT5kZXYpOwo+IC0JZm9yIChpID0gMDsgaSA8IGZiX2hlbHBlci0+Y3J0Y19jb3VudDsgaSsr KSB7Cj4gLQkJbW9kZXNldCA9ICZmYl9oZWxwZXItPmNydGNfaW5mb1tpXS5tb2RlX3NldDsKPiAt Cj4gKwltdXRleF9sb2NrKCZjbGllbnQtPm1vZGVzZXRfbXV0ZXgpOwo+ICsJZHJtX2NsaWVudF9m b3JfZWFjaF9tb2Rlc2V0KG1vZGVzZXQsIGNsaWVudCkgewo+ICAJCW1vZGVzZXQtPnggPSB2YXIt PnhvZmZzZXQ7Cj4gIAkJbW9kZXNldC0+eSA9IHZhci0+eW9mZnNldDsKPiAgCj4gQEAgLTE4NjUs NiArMTgyNyw3IEBAIHN0YXRpYyBpbnQgcGFuX2Rpc3BsYXlfbGVnYWN5KHN0cnVjdCBmYl92YXJf c2NyZWVuaW5mbyAqdmFyLAo+ICAJCQl9Cj4gIAkJfQo+ICAJfQo+ICsJbXV0ZXhfdW5sb2NrKCZj bGllbnQtPm1vZGVzZXRfbXV0ZXgpOwo+ICAJZHJtX21vZGVzZXRfdW5sb2NrX2FsbChmYl9oZWxw ZXItPmRldik7Cj4gIAo+ICAJcmV0dXJuIHJldDsKPiBAQCAtMTkxMSwxMCArMTg3NCwxMiBAQCBF WFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfcGFuX2Rpc3BsYXkpOwo+ICBzdGF0aWMgaW50IGRy bV9mYl9oZWxwZXJfc2luZ2xlX2ZiX3Byb2JlKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxw ZXIsCj4gIAkJCQkJIGludCBwcmVmZXJyZWRfYnBwKQo+ICB7Cj4gKwlzdHJ1Y3QgZHJtX2NsaWVu dF9kZXYgKmNsaWVudCA9ICZmYl9oZWxwZXItPmNsaWVudDsKPiAgCWludCByZXQgPSAwOwo+ICAJ aW50IGNydGNfY291bnQgPSAwOwo+ICAJaW50IGk7Cj4gIAlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9z dXJmYWNlX3NpemUgc2l6ZXM7Cj4gKwlzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2RlX3NldDsKPiAg CWludCBiZXN0X2RlcHRoID0gMDsKPiAgCj4gIAltZW1zZXQoJnNpemVzLCAwLCBzaXplb2Yoc3Ry dWN0IGRybV9mYl9oZWxwZXJfc3VyZmFjZV9zaXplKSk7Cj4gQEAgLTE5NjUsMTMgKzE5MzAsMTMg QEAgc3RhdGljIGludCBkcm1fZmJfaGVscGVyX3NpbmdsZV9mYl9wcm9iZShzdHJ1Y3QgZHJtX2Zi X2hlbHBlciAqZmJfaGVscGVyLAo+ICAJICogc3VwcG9ydHMgUkdCQTU1NTEgKDE2IGJwcCwgZGVw dGggMTUpIGJ1dCBub3QgUkdCNTY1ICgxNiBicHAsIGRlcHRoCj4gIAkgKiAxNikgd2UgbmVlZCB0 byBzY2FsZSBkb3duIHRoZSBkZXB0aCBvZiB0aGUgc2l6ZXMgd2UgcmVxdWVzdC4KPiAgCSAqLwo+ IC0JZm9yIChpID0gMDsgaSA8IGZiX2hlbHBlci0+Y3J0Y19jb3VudDsgaSsrKSB7Cj4gLQkJc3Ry dWN0IGRybV9tb2RlX3NldCAqbW9kZV9zZXQgPSAmZmJfaGVscGVyLT5jcnRjX2luZm9baV0ubW9k ZV9zZXQ7Cj4gKwltdXRleF9sb2NrKCZjbGllbnQtPm1vZGVzZXRfbXV0ZXgpOwo+ICsJZHJtX2Ns aWVudF9mb3JfZWFjaF9tb2Rlc2V0KG1vZGVfc2V0LCBjbGllbnQpIHsKPiAgCQlzdHJ1Y3QgZHJt X2NydGMgKmNydGMgPSBtb2RlX3NldC0+Y3J0YzsKPiAgCQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZSA9IGNydGMtPnByaW1hcnk7Cj4gIAkJaW50IGo7Cj4gIAo+IC0JCURSTV9ERUJVRygidGVzdCBD UlRDICVkIHByaW1hcnkgcGxhbmVcbiIsIGkpOwo+ICsJCURSTV9ERUJVRygidGVzdCBDUlRDICV1 IHByaW1hcnkgcGxhbmVcbiIsIGRybV9jcnRjX2luZGV4KGNydGMpKTsKPiAgCj4gIAkJZm9yIChq ID0gMDsgaiA8IHBsYW5lLT5mb3JtYXRfY291bnQ7IGorKykgewo+ICAJCQljb25zdCBzdHJ1Y3Qg ZHJtX2Zvcm1hdF9pbmZvICpmbXQ7Cj4gQEAgLTIwMTEsOSArMTk3Niw4IEBAIHN0YXRpYyBpbnQg ZHJtX2ZiX2hlbHBlcl9zaW5nbGVfZmJfcHJvYmUoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hl bHBlciwKPiAgCj4gIAkvKiBmaXJzdCB1cCBnZXQgYSBjb3VudCBvZiBjcnRjcyBub3cgaW4gdXNl IGFuZCBuZXcgbWluL21heGVzIHdpZHRoL2hlaWdodHMgKi8KPiAgCWNydGNfY291bnQgPSAwOwo+ IC0JZm9yIChpID0gMDsgaSA8IGZiX2hlbHBlci0+Y3J0Y19jb3VudDsgaSsrKSB7Cj4gKwlkcm1f Y2xpZW50X2Zvcl9lYWNoX21vZGVzZXQobW9kZV9zZXQsIGNsaWVudCkgewo+ICAJCXN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICpkZXNpcmVkX21vZGU7Cj4gLQkJc3RydWN0IGRybV9tb2RlX3NldCAq bW9kZV9zZXQ7Cj4gIAkJaW50IHgsIHksIGo7Cj4gIAkJLyogaW4gY2FzZSBvZiB0aWxlIGdyb3Vw LCBhcmUgd2UgdGhlIGxhc3QgdGlsZSB2ZXJ0IG9yIGhvcml6Pwo+ICAJCSAqIElmIG5vIHRpbGUg Z3JvdXAgeW91IGFyZSBhbHdheXMgdGhlIGxhc3Qgb25lIGJvdGggdmVydGljYWxseQo+IEBAIC0y MDIxLDcgKzE5ODUsNiBAQCBzdGF0aWMgaW50IGRybV9mYl9oZWxwZXJfc2luZ2xlX2ZiX3Byb2Jl KHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCj4gIAkJICovCj4gIAkJYm9vbCBsYXN0 diA9IHRydWUsIGxhc3RoID0gdHJ1ZTsKPiAgCj4gLQkJbW9kZV9zZXQgPSAmZmJfaGVscGVyLT5j cnRjX2luZm9baV0ubW9kZV9zZXQ7Cj4gIAkJZGVzaXJlZF9tb2RlID0gbW9kZV9zZXQtPm1vZGU7 Cj4gIAo+ICAJCWlmICghZGVzaXJlZF9tb2RlKQo+IEBAIC0yMDUxLDYgKzIwMTQsNyBAQCBzdGF0 aWMgaW50IGRybV9mYl9oZWxwZXJfc2luZ2xlX2ZiX3Byb2JlKHN0cnVjdCBkcm1fZmJfaGVscGVy ICpmYl9oZWxwZXIsCj4gIAkJaWYgKGxhc3R2KQo+ICAJCQlzaXplcy5mYl9oZWlnaHQgPSBtaW5f dCh1MzIsIGRlc2lyZWRfbW9kZS0+dmRpc3BsYXkgKyB5LCBzaXplcy5mYl9oZWlnaHQpOwo+ICAJ fQo+ICsJbXV0ZXhfdW5sb2NrKCZjbGllbnQtPm1vZGVzZXRfbXV0ZXgpOwo+ICAKPiAgCWlmIChj cnRjX2NvdW50ID09IDAgfHwgc2l6ZXMuZmJfd2lkdGggPT0gLTEgfHwgc2l6ZXMuZmJfaGVpZ2h0 ID09IC0xKSB7Cj4gIAkJRFJNX0lORk8oIkNhbm5vdCBmaW5kIGFueSBjcnRjIG9yIHNpemVzXG4i KTsKPiBAQCAtMjI4Miw3ICsyMjQ2LDcgQEAgc3RhdGljIGJvb2wgZHJtX3RhcmdldF9jbG9uZWQo c3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKPiAgCXN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICpkbXRfbW9kZSwgKm1vZGU7Cj4gIAo+ICAJLyogb25seSBjb250ZW1wbGF0ZSBjbG9uaW5n IGluIHRoZSBzaW5nbGUgY3J0YyBjYXNlICovCj4gLQlpZiAoZmJfaGVscGVyLT5jcnRjX2NvdW50 ID4gMSkKPiArCWlmIChmYl9oZWxwZXItPmRldi0+bW9kZV9jb25maWcubnVtX2NydGMgPiAxKQo+ ICAJCXJldHVybiBmYWxzZTsKPiAgCj4gIAljb3VudCA9IDA7Cj4gQEAgLTI0NzEsMTUgKzI0MzUs MTcgQEAgc3RhdGljIGJvb2wgY29ubmVjdG9yX2hhc19wb3NzaWJsZV9jcnRjKHN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IsCj4gIH0KPiAgCj4gIHN0YXRpYyBpbnQgZHJtX3BpY2tfY3J0 Y3Moc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKPiAtCQkJICBzdHJ1Y3QgZHJtX2Zi X2hlbHBlcl9jcnRjICoqYmVzdF9jcnRjcywKPiArCQkJICBzdHJ1Y3QgZHJtX2NydGMgKipiZXN0 X2NydGNzLAo+ICAJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICoqbW9kZXMsCj4gIAkJCSAg aW50IG4sIGludCB3aWR0aCwgaW50IGhlaWdodCkKPiAgewo+IC0JaW50IGMsIG87Cj4gKwlzdHJ1 Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVudCA9ICZmYl9oZWxwZXItPmNsaWVudDsKPiAgCXN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7Cj4gIAlpbnQgbXlfc2NvcmUsIGJlc3Rfc2NvcmUs IHNjb3JlOwo+IC0Jc3RydWN0IGRybV9mYl9oZWxwZXJfY3J0YyAqKmNydGNzLCAqY3J0YzsKPiAr CXN0cnVjdCBkcm1fY3J0YyAqKmNydGNzLCAqY3J0YzsKPiArCXN0cnVjdCBkcm1fbW9kZV9zZXQg Km1vZGVzZXQ7Cj4gIAlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jb25uZWN0b3IgKmZiX2hlbHBlcl9j b25uOwo+ICsJaW50IG87Cj4gIAo+ICAJaWYgKG4gPT0gZmJfaGVscGVyLT5jb25uZWN0b3JfY291 bnQpCj4gIAkJcmV0dXJuIDA7Cj4gQEAgLTI0OTIsOCArMjQ1OCw3IEBAIHN0YXRpYyBpbnQgZHJt X3BpY2tfY3J0Y3Moc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKPiAgCWlmIChtb2Rl c1tuXSA9PSBOVUxMKQo+ICAJCXJldHVybiBiZXN0X3Njb3JlOwo+ICAKPiAtCWNydGNzID0ga2Nh bGxvYyhmYl9oZWxwZXItPmNvbm5lY3Rvcl9jb3VudCwKPiAtCQkJc2l6ZW9mKHN0cnVjdCBkcm1f ZmJfaGVscGVyX2NydGMgKiksIEdGUF9LRVJORUwpOwo+ICsJY3J0Y3MgPSBrY2FsbG9jKGZiX2hl bHBlci0+Y29ubmVjdG9yX2NvdW50LCBzaXplb2YoKmNydGNzKSwgR0ZQX0tFUk5FTCk7Cj4gIAlp ZiAoIWNydGNzKQo+ICAJCXJldHVybiBiZXN0X3Njb3JlOwo+ICAKPiBAQCAtMjUwOSwxMSArMjQ3 NCwxMCBAQCBzdGF0aWMgaW50IGRybV9waWNrX2NydGNzKHN0cnVjdCBkcm1fZmJfaGVscGVyICpm Yl9oZWxwZXIsCj4gIAkgKiBzZWxlY3QgYSBjcnRjIGZvciB0aGlzIGNvbm5lY3RvciBhbmQgdGhl biBhdHRlbXB0IHRvIGNvbmZpZ3VyZQo+ICAJICogcmVtYWluaW5nIGNvbm5lY3RvcnMKPiAgCSAq Lwo+IC0JZm9yIChjID0gMDsgYyA8IGZiX2hlbHBlci0+Y3J0Y19jb3VudDsgYysrKSB7Cj4gLQkJ Y3J0YyA9ICZmYl9oZWxwZXItPmNydGNfaW5mb1tjXTsKPiArCWRybV9jbGllbnRfZm9yX2VhY2hf bW9kZXNldChtb2Rlc2V0LCBjbGllbnQpIHsKPiArCQljcnRjID0gbW9kZXNldC0+Y3J0YzsKPiAg Cj4gLQkJaWYgKCFjb25uZWN0b3JfaGFzX3Bvc3NpYmxlX2NydGMoY29ubmVjdG9yLAo+IC0JCQkJ CQkgY3J0Yy0+bW9kZV9zZXQuY3J0YykpCj4gKwkJaWYgKCFjb25uZWN0b3JfaGFzX3Bvc3NpYmxl X2NydGMoY29ubmVjdG9yLCBjcnRjKSkKPiAgCQkJY29udGludWU7Cj4gIAo+ICAJCWZvciAobyA9 IDA7IG8gPCBuOyBvKyspCj4gQEAgLTI1MjIsNyArMjQ4Niw3IEBAIHN0YXRpYyBpbnQgZHJtX3Bp Y2tfY3J0Y3Moc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKPiAgCj4gIAkJaWYgKG8g PCBuKSB7Cj4gIAkJCS8qIGlnbm9yZSBjbG9uaW5nIHVubGVzcyBvbmx5IGEgc2luZ2xlIGNydGMg Ki8KPiAtCQkJaWYgKGZiX2hlbHBlci0+Y3J0Y19jb3VudCA+IDEpCj4gKwkJCWlmIChmYl9oZWxw ZXItPmRldi0+bW9kZV9jb25maWcubnVtX2NydGMgPiAxKQo+ICAJCQkJY29udGludWU7Cj4gIAo+ ICAJCQlpZiAoIWRybV9tb2RlX2VxdWFsKG1vZGVzW29dLCBtb2Rlc1tuXSkpCj4gQEAgLTI1MzAs MTQgKzI0OTQsMTMgQEAgc3RhdGljIGludCBkcm1fcGlja19jcnRjcyhzdHJ1Y3QgZHJtX2ZiX2hl bHBlciAqZmJfaGVscGVyLAo+ICAJCX0KPiAgCj4gIAkJY3J0Y3Nbbl0gPSBjcnRjOwo+IC0JCW1l bWNweShjcnRjcywgYmVzdF9jcnRjcywgbiAqIHNpemVvZihzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9j cnRjICopKTsKPiArCQltZW1jcHkoY3J0Y3MsIGJlc3RfY3J0Y3MsIG4gKiBzaXplb2YoKmNydGNz KSk7Cj4gIAkJc2NvcmUgPSBteV9zY29yZSArIGRybV9waWNrX2NydGNzKGZiX2hlbHBlciwgY3J0 Y3MsIG1vZGVzLCBuICsgMSwKPiAgCQkJCQkJICB3aWR0aCwgaGVpZ2h0KTsKPiAgCQlpZiAoc2Nv cmUgPiBiZXN0X3Njb3JlKSB7Cj4gIAkJCWJlc3Rfc2NvcmUgPSBzY29yZTsKPiAgCQkJbWVtY3B5 KGJlc3RfY3J0Y3MsIGNydGNzLAo+IC0JCQkgICAgICAgZmJfaGVscGVyLT5jb25uZWN0b3JfY291 bnQgKgo+IC0JCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBkcm1fZmJfaGVscGVyX2NydGMgKikpOwo+ ICsJCQkgICAgICAgZmJfaGVscGVyLT5jb25uZWN0b3JfY291bnQgKiBzaXplb2YoKmNydGNzKSk7 Cj4gIAkJfQo+ICAJfQo+ICAKPiBAQCAtMjU0NSwyMSArMjUwOCw5IEBAIHN0YXRpYyBpbnQgZHJt X3BpY2tfY3J0Y3Moc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKPiAgCXJldHVybiBi ZXN0X3Njb3JlOwo+ICB9Cj4gIAo+IC1zdGF0aWMgc3RydWN0IGRybV9mYl9oZWxwZXJfY3J0YyAq Cj4gLWRybV9mYl9oZWxwZXJfY3J0YyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLCBz dHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gLXsKPiAtCWludCBpOwo+IC0KPiAtCWZvciAoaSA9IDA7 IGkgPCBmYl9oZWxwZXItPmNydGNfY291bnQ7IGkrKykKPiAtCQlpZiAoZmJfaGVscGVyLT5jcnRj X2luZm9baV0ubW9kZV9zZXQuY3J0YyA9PSBjcnRjKQo+IC0JCQlyZXR1cm4gJmZiX2hlbHBlci0+ Y3J0Y19pbmZvW2ldOwo+IC0KPiAtCXJldHVybiBOVUxMOwo+IC19Cj4gLQo+ICAvKiBUcnkgdG8g cmVhZCB0aGUgQklPUyBkaXNwbGF5IGNvbmZpZ3VyYXRpb24gYW5kIHVzZSBpdCBmb3IgdGhlIGlu aXRpYWwgY29uZmlnICovCj4gIHN0YXRpYyBib29sIGRybV9mYl9oZWxwZXJfZmlybXdhcmVfY29u ZmlnKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCj4gLQkJCQkJICBzdHJ1Y3QgZHJt X2ZiX2hlbHBlcl9jcnRjICoqY3J0Y3MsCj4gKwkJCQkJICBzdHJ1Y3QgZHJtX2NydGMgKipjcnRj cywKPiAgCQkJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICoqbW9kZXMsCj4gIAkJCQkJICBz dHJ1Y3QgZHJtX2ZiX29mZnNldCAqb2Zmc2V0cywKPiAgCQkJCQkgIGJvb2wgKmVuYWJsZWQsIGlu dCB3aWR0aCwgaW50IGhlaWdodCkKPiBAQCAtMjU5MSw3ICsyNTQyLDcgQEAgc3RhdGljIGJvb2wg ZHJtX2ZiX2hlbHBlcl9maXJtd2FyZV9jb25maWcoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hl bHBlciwKPiAgCQlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jb25uZWN0b3IgKmZiX2Nvbm47Cj4gIAkJ c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKPiAgCQlzdHJ1Y3QgZHJtX2VuY29kZXIg KmVuY29kZXI7Cj4gLQkJc3RydWN0IGRybV9mYl9oZWxwZXJfY3J0YyAqbmV3X2NydGM7Cj4gKwkJ c3RydWN0IGRybV9jcnRjICpuZXdfY3J0YzsKPiAgCj4gIAkJZmJfY29ubiA9IGZiX2hlbHBlci0+ Y29ubmVjdG9yX2luZm9baV07Cj4gIAkJY29ubmVjdG9yID0gZmJfY29ubi0+Y29ubmVjdG9yOwo+ IEBAIC0yNjM0LDcgKzI1ODUsNyBAQCBzdGF0aWMgYm9vbCBkcm1fZmJfaGVscGVyX2Zpcm13YXJl X2NvbmZpZyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAo+ICAKPiAgCQludW1fY29u bmVjdG9yc19lbmFibGVkKys7Cj4gIAo+IC0JCW5ld19jcnRjID0gZHJtX2ZiX2hlbHBlcl9jcnRj KGZiX2hlbHBlciwgY29ubmVjdG9yLT5zdGF0ZS0+Y3J0Yyk7Cj4gKwkJbmV3X2NydGMgPSBjb25u ZWN0b3ItPnN0YXRlLT5jcnRjOwo+ICAKPiAgCQkvKgo+ICAJCSAqIE1ha2Ugc3VyZSB3ZSdyZSBu b3QgdHJ5aW5nIHRvIGRyaXZlIG11bHRpcGxlIGNvbm5lY3RvcnMKPiBAQCAtMjczNiwxMCArMjY4 NywxMSBAQCBzdGF0aWMgYm9vbCBkcm1fZmJfaGVscGVyX2Zpcm13YXJlX2NvbmZpZyhzdHJ1Y3Qg ZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAo+ICBzdGF0aWMgdm9pZCBkcm1fc2V0dXBfY3J0Y3Mo c3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKPiAgCQkJICAgIHUzMiB3aWR0aCwgdTMy IGhlaWdodCkKPiAgewo+ICsJc3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQgPSAmZmJfaGVs cGVyLT5jbGllbnQ7Cj4gIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZmJfaGVscGVyLT5kZXY7 Cj4gLQlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jcnRjICoqY3J0Y3M7Cj4gIAlzdHJ1Y3QgZHJtX2Rp c3BsYXlfbW9kZSAqKm1vZGVzOwo+ICAJc3RydWN0IGRybV9mYl9vZmZzZXQgKm9mZnNldHM7Cj4g KwlzdHJ1Y3QgZHJtX2NydGMgKipjcnRjczsKPiAgCWJvb2wgKmVuYWJsZWQ7Cj4gIAlpbnQgaTsK PiAgCj4gQEAgLTI3NDcsOCArMjY5OSw3IEBAIHN0YXRpYyB2b2lkIGRybV9zZXR1cF9jcnRjcyhz dHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAo+ICAJLyogcHJldmVudCBjb25jdXJyZW50 IG1vZGlmaWNhdGlvbiBvZiBjb25uZWN0b3JfY291bnQgYnkgaG90cGx1ZyAqLwo+ICAJbG9ja2Rl cF9hc3NlcnRfaGVsZCgmZmJfaGVscGVyLT5sb2NrKTsKPiAgCj4gLQljcnRjcyA9IGtjYWxsb2Mo ZmJfaGVscGVyLT5jb25uZWN0b3JfY291bnQsCj4gLQkJCXNpemVvZihzdHJ1Y3QgZHJtX2ZiX2hl bHBlcl9jcnRjICopLCBHRlBfS0VSTkVMKTsKPiArCWNydGNzID0ga2NhbGxvYyhmYl9oZWxwZXIt PmNvbm5lY3Rvcl9jb3VudCwgc2l6ZW9mKCpjcnRjcyksIEdGUF9LRVJORUwpOwo+ICAJbW9kZXMg PSBrY2FsbG9jKGZiX2hlbHBlci0+Y29ubmVjdG9yX2NvdW50LAo+ICAJCQlzaXplb2Yoc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKiksIEdGUF9LRVJORUwpOwo+ICAJb2Zmc2V0cyA9IGtjYWxsb2Mo ZmJfaGVscGVyLT5jb25uZWN0b3JfY291bnQsCj4gQEAgLTI3NjAsNiArMjcxMSw4IEBAIHN0YXRp YyB2b2lkIGRybV9zZXR1cF9jcnRjcyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAo+ ICAJCWdvdG8gb3V0Owo+ICAJfQo+ICAKPiArCW11dGV4X2xvY2soJmNsaWVudC0+bW9kZXNldF9t dXRleCk7Cj4gKwo+ICAJbXV0ZXhfbG9jaygmZmJfaGVscGVyLT5kZXYtPm1vZGVfY29uZmlnLm11 dGV4KTsKPiAgCWlmIChkcm1fZmJfaGVscGVyX3Byb2JlX2Nvbm5lY3Rvcl9tb2RlcyhmYl9oZWxw ZXIsIHdpZHRoLCBoZWlnaHQpID09IDApCj4gIAkJRFJNX0RFQlVHX0tNUygiTm8gY29ubmVjdG9y cyByZXBvcnRlZCBjb25uZWN0ZWQgd2l0aCBtb2Rlc1xuIik7Cj4gQEAgLTI3ODQsMjQgKzI3Mzcs MjQgQEAgc3RhdGljIHZvaWQgZHJtX3NldHVwX2NydGNzKHN0cnVjdCBkcm1fZmJfaGVscGVyICpm Yl9oZWxwZXIsCj4gIAl9Cj4gIAltdXRleF91bmxvY2soJmZiX2hlbHBlci0+ZGV2LT5tb2RlX2Nv bmZpZy5tdXRleCk7Cj4gIAo+IC0JLyogbmVlZCB0byBzZXQgdGhlIG1vZGVzZXRzIHVwIGhlcmUg Zm9yIHVzZSBsYXRlciAqLwo+IC0JLyogZmlsbCBvdXQgdGhlIGNvbm5lY3RvcjwtPmNydGMgbWFw cGluZ3MgaW50byB0aGUgbW9kZXNldHMgKi8KPiAtCWZvciAoaSA9IDA7IGkgPCBmYl9oZWxwZXIt PmNydGNfY291bnQ7IGkrKykKPiAtCQlkcm1fZmJfaGVscGVyX21vZGVzZXRfcmVsZWFzZShmYl9o ZWxwZXIsCj4gLQkJCQkJICAgICAgJmZiX2hlbHBlci0+Y3J0Y19pbmZvW2ldLm1vZGVfc2V0KTsK PiArCWRybV9jbGllbnRfbW9kZXNldF9yZWxlYXNlKGNsaWVudCk7Cj4gIAo+ICAJZHJtX2ZiX2hl bHBlcl9mb3JfZWFjaF9jb25uZWN0b3IoZmJfaGVscGVyLCBpKSB7Cj4gIAkJc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKm1vZGUgPSBtb2Rlc1tpXTsKPiAtCQlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9j cnRjICpmYl9jcnRjID0gY3J0Y3NbaV07Cj4gKwkJc3RydWN0IGRybV9jcnRjICpjcnRjID0gY3J0 Y3NbaV07Cj4gIAkJc3RydWN0IGRybV9mYl9vZmZzZXQgKm9mZnNldCA9ICZvZmZzZXRzW2ldOwo+ ICAKPiAtCQlpZiAobW9kZSAmJiBmYl9jcnRjKSB7Cj4gLQkJCXN0cnVjdCBkcm1fbW9kZV9zZXQg Km1vZGVzZXQgPSAmZmJfY3J0Yy0+bW9kZV9zZXQ7Cj4gKwkJaWYgKG1vZGUgJiYgY3J0Yykgewo+ ICsJCQlzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2Rlc2V0ID0gZHJtX2NsaWVudF9maW5kX21vZGVz ZXQoY2xpZW50LCBjcnRjKTsKPiAgCQkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9 Cj4gIAkJCQlmYl9oZWxwZXItPmNvbm5lY3Rvcl9pbmZvW2ldLT5jb25uZWN0b3I7Cj4gIAo+ICAJ CQlEUk1fREVCVUdfS01TKCJkZXNpcmVkIG1vZGUgJXMgc2V0IG9uIGNydGMgJWQgKCVkLCVkKVxu IiwKPiAtCQkJCSAgICAgIG1vZGUtPm5hbWUsIGZiX2NydGMtPm1vZGVfc2V0LmNydGMtPmJhc2Uu aWQsIG9mZnNldC0+eCwgb2Zmc2V0LT55KTsKPiArCQkJCSAgICAgIG1vZGUtPm5hbWUsIGNydGMt PmJhc2UuaWQsIG9mZnNldC0+eCwgb2Zmc2V0LT55KTsKPiArCj4gKwkJCWlmIChXQVJOX09OX09O Q0UobW9kZXNldC0+bnVtX2Nvbm5lY3RvcnMgPT0gRFJNX0NMSUVOVF9NQVhfQ0xPTkVEX0NPTk5F Q1RPUlMgfHwKPiArCQkJCQkgKGRldi0+bW9kZV9jb25maWcubnVtX2NydGMgPiAxICYmIG1vZGVz ZXQtPm51bV9jb25uZWN0b3JzID09IDEpKSkKPiArCQkJCWJyZWFrOwo+ICAKPiAgCQkJbW9kZXNl dC0+bW9kZSA9IGRybV9tb2RlX2R1cGxpY2F0ZShkZXYsIG1vZGUpOwo+ICAJCQlkcm1fY29ubmVj dG9yX2dldChjb25uZWN0b3IpOwo+IEBAIC0yODEwLDYgKzI3NjMsOCBAQCBzdGF0aWMgdm9pZCBk cm1fc2V0dXBfY3J0Y3Moc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKPiAgCQkJbW9k ZXNldC0+eSA9IG9mZnNldC0+eTsKPiAgCQl9Cj4gIAl9Cj4gKwo+ICsJbXV0ZXhfdW5sb2NrKCZj bGllbnQtPm1vZGVzZXRfbXV0ZXgpOwo+ICBvdXQ6Cj4gIAlrZnJlZShjcnRjcyk7Cj4gIAlrZnJl ZShtb2Rlcyk7Cj4gQEAgLTI4MjYsMTMgKzI3ODEsMTQgQEAgc3RhdGljIHZvaWQgZHJtX3NldHVw X2NydGNzKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCj4gICAqLwo+ICBzdGF0aWMg dm9pZCBkcm1fc2V0dXBfY3J0Y3NfZmIoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlcikK PiAgewo+ICsJc3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQgPSAmZmJfaGVscGVyLT5jbGll bnQ7Cj4gIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGZiX2hlbHBlci0+ZmJkZXY7Cj4gIAl1bnNp Z25lZCBpbnQgcm90YXRpb24sIHN3X3JvdGF0aW9ucyA9IDA7Cj4gKwlzdHJ1Y3QgZHJtX21vZGVf c2V0ICptb2Rlc2V0Owo+ICAJaW50IGk7Cj4gIAo+IC0JZm9yIChpID0gMDsgaSA8IGZiX2hlbHBl ci0+Y3J0Y19jb3VudDsgaSsrKSB7Cj4gLQkJc3RydWN0IGRybV9tb2RlX3NldCAqbW9kZXNldCA9 ICZmYl9oZWxwZXItPmNydGNfaW5mb1tpXS5tb2RlX3NldDsKPiAtCj4gKwltdXRleF9sb2NrKCZj bGllbnQtPm1vZGVzZXRfbXV0ZXgpOwo+ICsJZHJtX2NsaWVudF9mb3JfZWFjaF9tb2Rlc2V0KG1v ZGVzZXQsIGNsaWVudCkgewo+ICAJCWlmICghbW9kZXNldC0+bnVtX2Nvbm5lY3RvcnMpCj4gIAkJ CWNvbnRpbnVlOwo+ICAKPiBAQCAtMjg0NCw2ICsyODAwLDcgQEAgc3RhdGljIHZvaWQgZHJtX3Nl dHVwX2NydGNzX2ZiKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIpCj4gIAkJZWxzZQo+ ICAJCQlzd19yb3RhdGlvbnMgfD0gcm90YXRpb247Cj4gIAl9Cj4gKwltdXRleF91bmxvY2soJmNs aWVudC0+bW9kZXNldF9tdXRleCk7Cj4gIAo+ICAJbXV0ZXhfbG9jaygmZmJfaGVscGVyLT5kZXYt Pm1vZGVfY29uZmlnLm11dGV4KTsKPiAgCWRybV9mYl9oZWxwZXJfZm9yX2VhY2hfY29ubmVjdG9y KGZiX2hlbHBlciwgaSkgewo+IEBAIC0zMDYwLDggKzMwMTcsNyBAQCBFWFBPUlRfU1lNQk9MKGRy bV9mYl9oZWxwZXJfaG90cGx1Z19ldmVudCk7Cj4gICAqIEBmdW5jczogZmJkZXYgaGVscGVyIGZ1 bmN0aW9ucwo+ICAgKiBAcHJlZmVycmVkX2JwcDogUHJlZmVycmVkIGJpdHMgcGVyIHBpeGVsIGZv ciB0aGUgZGV2aWNlLgo+ICAgKiAgICAgICAgICAgICAgICAgQGRldi0+bW9kZV9jb25maWcucHJl ZmVycmVkX2RlcHRoIGlzIHVzZWQgaWYgdGhpcyBpcyB6ZXJvLgo+IC0gKiBAbWF4X2Nvbm5fY291 bnQ6IE1heGltdW0gbnVtYmVyIG9mIGNvbm5lY3RvcnMuCj4gLSAqICAgICAgICAgICAgICAgICAg QGRldi0+bW9kZV9jb25maWcubnVtX2Nvbm5lY3RvciBpcyB1c2VkIGlmIHRoaXMgaXMgemVyby4K PiArICogQG1heF9jb25uX2NvdW50OiBNYXhpbXVtIG51bWJlciBvZiBjb25uZWN0b3JzIChub3Qg dXNlZCkKPiAgICoKPiAgICogVGhpcyBmdW5jdGlvbiBzZXRzIHVwIGZiZGV2IGVtdWxhdGlvbiBh bmQgcmVnaXN0ZXJzIGZiZGV2IGZvciBhY2Nlc3MgYnkKPiAgICogdXNlcnNwYWNlLiBJZiBhbGwg Y29ubmVjdG9ycyBhcmUgZGlzY29ubmVjdGVkLCBzZXR1cCBpcyBkZWZlcnJlZCB0byB0aGUgbmV4 dAo+IEBAIC0zMDg5LDE2ICszMDQ1LDkgQEAgaW50IGRybV9mYl9oZWxwZXJfZmJkZXZfc2V0dXAo c3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgCWlmICghcHJlZmVycmVkX2JwcCkKPiAgCQlwcmVm ZXJyZWRfYnBwID0gMzI7Cj4gIAo+IC0JaWYgKCFtYXhfY29ubl9jb3VudCkKPiAtCQltYXhfY29u bl9jb3VudCA9IGRldi0+bW9kZV9jb25maWcubnVtX2Nvbm5lY3RvcjsKPiAtCWlmICghbWF4X2Nv bm5fY291bnQpIHsKPiAtCQlEUk1fREVWX0VSUk9SKGRldi0+ZGV2LCAiZmJkZXY6IE5vIGNvbm5l Y3RvcnNcbiIpOwo+IC0JCXJldHVybiAtRUlOVkFMOwo+IC0JfQo+IC0KPiAgCWRybV9mYl9oZWxw ZXJfcHJlcGFyZShkZXYsIGZiX2hlbHBlciwgZnVuY3MpOwo+ICAKPiAtCXJldCA9IGRybV9mYl9o ZWxwZXJfaW5pdChkZXYsIGZiX2hlbHBlciwgbWF4X2Nvbm5fY291bnQpOwo+ICsJcmV0ID0gZHJt X2ZiX2hlbHBlcl9pbml0KGRldiwgZmJfaGVscGVyLCAwKTsKPiAgCWlmIChyZXQgPCAwKSB7Cj4g IAkJRFJNX0RFVl9FUlJPUihkZXYtPmRldiwgImZiZGV2OiBGYWlsZWQgdG8gaW5pdGlhbGl6ZSAo cmV0PSVkKVxuIiwgcmV0KTsKPiAgCQlyZXR1cm4gcmV0Owo+IEBAIC0zNDExLDcgKzMzNjAsNyBA QCBzdGF0aWMgaW50IGRybV9mYmRldl9jbGllbnRfaG90cGx1ZyhzdHJ1Y3QgZHJtX2NsaWVudF9k ZXYgKmNsaWVudCkKPiAgCj4gIAlkcm1fZmJfaGVscGVyX3ByZXBhcmUoZGV2LCBmYl9oZWxwZXIs ICZkcm1fZmJfaGVscGVyX2dlbmVyaWNfZnVuY3MpOwo+ICAKPiAtCXJldCA9IGRybV9mYl9oZWxw ZXJfaW5pdChkZXYsIGZiX2hlbHBlciwgZGV2LT5tb2RlX2NvbmZpZy5udW1fY29ubmVjdG9yKTsK PiArCXJldCA9IGRybV9mYl9oZWxwZXJfaW5pdChkZXYsIGZiX2hlbHBlciwgMCk7Cj4gIAlpZiAo cmV0KQo+ICAJCWdvdG8gZXJyOwo+ICAKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2Ns aWVudC5oIGIvaW5jbHVkZS9kcm0vZHJtX2NsaWVudC5oCj4gaW5kZXggOGI1NTJiMWE2Y2U5Li44 NThjOGJlNzA4NzAgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2NsaWVudC5oCj4gKysr IGIvaW5jbHVkZS9kcm0vZHJtX2NsaWVudC5oCj4gQEAgLTMsOCArMywxMSBAQAo+ICAjaWZuZGVm IF9EUk1fQ0xJRU5UX0hfCj4gICNkZWZpbmUgX0RSTV9DTElFTlRfSF8KPiAgCj4gKyNpbmNsdWRl IDxsaW51eC9tdXRleC5oPgo+ICAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KPiAgCj4gKyNpbmNs dWRlIDxkcm0vZHJtX2NydGMuaD4KPiArCj4gIHN0cnVjdCBkcm1fY2xpZW50X2RldjsKPiAgc3Ry dWN0IGRybV9kZXZpY2U7Cj4gIHN0cnVjdCBkcm1fZmlsZTsKPiBAQCAtMTMsNiArMTYsOCBAQCBz dHJ1Y3QgZHJtX2dlbV9vYmplY3Q7Cj4gIHN0cnVjdCBkcm1fbWlub3I7Cj4gIHN0cnVjdCBtb2R1 bGU7Cj4gIAo+ICsjZGVmaW5lIERSTV9DTElFTlRfTUFYX0NMT05FRF9DT05ORUNUT1JTCTgKPiAr Cj4gIC8qKgo+ICAgKiBzdHJ1Y3QgZHJtX2NsaWVudF9mdW5jcyAtIERSTSBjbGllbnQgY2FsbGJh Y2tzCj4gICAqLwo+IEBAIC04NSw2ICs5MCwxNiBAQCBzdHJ1Y3QgZHJtX2NsaWVudF9kZXYgewo+ ICAJICogQGZpbGU6IERSTSBmaWxlCj4gIAkgKi8KPiAgCXN0cnVjdCBkcm1fZmlsZSAqZmlsZTsK PiArCj4gKwkvKioKPiArCSAqIEBtb2Rlc2V0X211dGV4OiBQcm90ZWN0cyBAbW9kZXNldHMuCj4g KwkgKi8KPiArCXN0cnVjdCBtdXRleCBtb2Rlc2V0X211dGV4OwoKQml0IG9uIHRoZSBmZW5jZSBh Ym91dCBkb2luZyBsb2NraW5nIGF1dG9tYXRpY2FsbHksIGJ1dCBkZWZpbml0ZWx5IG1ha2VzCml0 IGVhc2llciB0byB1c2UgZHJtX2NsaWVudF9tb2Rlc2V0IGZ1bmN0aW9ucy4KCj4gKwo+ICsJLyoq Cj4gKwkgKiBAbW9kZXNldHM6IENSVEMgY29uZmlndXJhdGlvbnMKPiArCSAqLwo+ICsJc3RydWN0 IGRybV9tb2RlX3NldCAqbW9kZXNldHM7Cj4gIH07Cj4gIAo+ICBpbnQgZHJtX2NsaWVudF9pbml0 KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50LAo+ IEBAIC0xMzUsNiArMTUwLDE5IEBAIHN0cnVjdCBkcm1fY2xpZW50X2J1ZmZlciAqCj4gIGRybV9j bGllbnRfZnJhbWVidWZmZXJfY3JlYXRlKHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50LCB1 MzIgd2lkdGgsIHUzMiBoZWlnaHQsIHUzMiBmb3JtYXQpOwo+ICB2b2lkIGRybV9jbGllbnRfZnJh bWVidWZmZXJfZGVsZXRlKHN0cnVjdCBkcm1fY2xpZW50X2J1ZmZlciAqYnVmZmVyKTsKPiAgCj4g K2ludCBkcm1fY2xpZW50X21vZGVzZXRfY3JlYXRlKHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xp ZW50KTsKPiArdm9pZCBkcm1fY2xpZW50X21vZGVzZXRfZnJlZShzdHJ1Y3QgZHJtX2NsaWVudF9k ZXYgKmNsaWVudCk7Cj4gK3ZvaWQgZHJtX2NsaWVudF9tb2Rlc2V0X3JlbGVhc2Uoc3RydWN0IGRy bV9jbGllbnRfZGV2ICpjbGllbnQpOwo+ICtzdHJ1Y3QgZHJtX21vZGVfc2V0ICpkcm1fY2xpZW50 X2ZpbmRfbW9kZXNldChzdHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVudCwgc3RydWN0IGRybV9j cnRjICpjcnRjKTsKPiArCj4gKy8qKgo+ICsgKiBkcm1fY2xpZW50X2Zvcl9lYWNoX21vZGVzZXQo KSAtIEl0ZXJhdGUgb3ZlciBjbGllbnQgbW9kZXNldHMKPiArICogQG1vZGVzZXQ6ICZkcm1fbW9k ZV9zZXQgbG9vcCBjdXJzb3IKPiArICogQGNsaWVudDogRFJNIGNsaWVudAo+ICsgKi8KPiArI2Rl ZmluZSBkcm1fY2xpZW50X2Zvcl9lYWNoX21vZGVzZXQobW9kZXNldCwgY2xpZW50KSBcCj4gKwlm b3IgKG1vZGVzZXQgPSAoY2xpZW50KS0+bW9kZXNldHM7IG1vZGVzZXQgJiYgbW9kZXNldC0+Y3J0 YzsgbW9kZXNldCsrKQoKV291bGQgYmUgZ29vZCB0byBhZGQgYSBhc3NlcnRfbG9ja19oZWxkIGhl cmUsIGkuZS4KCWZvciAoYXNzZXJ0X2xvY2tfaGVsZChjbGllbnQtPm1vZGVzZXRfbXV0ZXgpLCBt b2Rlc2V0ID0gKGNsaWVudCktPm1vZGVzZXRzOwoJCW1vZGVzZXQgJiYgbW9kZXNldC0+Y3J0Yzsg bW9kZXNldCsrKQoKQ2hlZXJzLCBEYW5pZWwKPiArCj4gIGludCBkcm1fY2xpZW50X2RlYnVnZnNf aW5pdChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7Cj4gIAo+ICAjZW5kaWYKPiBkaWZmIC0tZ2l0 IGEvaW5jbHVkZS9kcm0vZHJtX2ZiX2hlbHBlci5oIGIvaW5jbHVkZS9kcm0vZHJtX2ZiX2hlbHBl ci5oCj4gaW5kZXggMGQ2ZDIzYTE1YjQyLi44ZDBkZGVhNzRhOWUgMTAwNjQ0Cj4gLS0tIGEvaW5j bHVkZS9kcm0vZHJtX2ZiX2hlbHBlci5oCj4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX2ZiX2hlbHBl ci5oCj4gQEAgLTQ2LDEwICs0Niw2IEBAIHN0cnVjdCBkcm1fZmJfb2Zmc2V0IHsKPiAgCWludCB4 LCB5Owo+ICB9Owo+ICAKPiAtc3RydWN0IGRybV9mYl9oZWxwZXJfY3J0YyB7Cj4gLQlzdHJ1Y3Qg ZHJtX21vZGVfc2V0IG1vZGVfc2V0Owo+IC19Owo+IC0KPiAgLyoqCj4gICAqIHN0cnVjdCBkcm1f ZmJfaGVscGVyX3N1cmZhY2Vfc2l6ZSAtIGRlc2NyaWJlcyBmYmRldiBzaXplIGFuZCBzY2Fub3V0 IHN1cmZhY2Ugc2l6ZQo+ICAgKiBAZmJfd2lkdGg6IGZiZGV2IHdpZHRoCj4gQEAgLTEwOCw4ICsx MDQsNiBAQCBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jb25uZWN0b3Igewo+ICAgKiBzdHJ1Y3QgZHJt X2ZiX2hlbHBlciAtIG1haW4gc3RydWN0dXJlIHRvIGVtdWxhdGUgZmJkZXYgb24gdG9wIG9mIEtN Uwo+ICAgKiBAZmI6IFNjYW5vdXQgZnJhbWVidWZmZXIgb2JqZWN0Cj4gICAqIEBkZXY6IERSTSBk ZXZpY2UKPiAtICogQGNydGNfY291bnQ6IG51bWJlciBvZiBwb3NzaWJsZSBDUlRDcwo+IC0gKiBA Y3J0Y19pbmZvOiBwZXItQ1JUQyBoZWxwZXIgc3RhdGUgKG1vZGUsIHgveSBvZmZzZXQsIGV0YykK PiAgICogQGNvbm5lY3Rvcl9jb3VudDogbnVtYmVyIG9mIGNvbm5lY3RlZCBjb25uZWN0b3JzCj4g ICAqIEBjb25uZWN0b3JfaW5mb19hbGxvY19jb3VudDogc2l6ZSBvZiBjb25uZWN0b3JfaW5mbwo+ ICAgKiBAZnVuY3M6IGRyaXZlciBjYWxsYmFja3MgZm9yIGZiIGhlbHBlcgo+IEBAIC0xNDMsOCAr MTM3LDYgQEAgc3RydWN0IGRybV9mYl9oZWxwZXIgewo+ICAKPiAgCXN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiOwo+ICAJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKPiAtCWludCBjcnRjX2NvdW50 Owo+IC0Jc3RydWN0IGRybV9mYl9oZWxwZXJfY3J0YyAqY3J0Y19pbmZvOwo+ICAJaW50IGNvbm5l Y3Rvcl9jb3VudDsKPiAgCWludCBjb25uZWN0b3JfaW5mb19hbGxvY19jb3VudDsKPiAgCS8qKgo+ IC0tIAo+IDIuMjAuMQo+IAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIElu dGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeA==