From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matt Roper Subject: Re: [PATCH v3 09/16] drm/i915/gen9: Drop re-allocation of DDB at atomic commit (v2) Date: Mon, 9 May 2016 18:06:24 -0700 Message-ID: <20160510010624.GB26268@intel.com> References: <1461280630-7477-1-git-send-email-matthew.d.roper@intel.com> <1461280630-7477-10-git-send-email-matthew.d.roper@intel.com> <1462558369.30874.10.camel@redhat.com> <1462560166.30874.14.camel@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 4A46689AB6 for ; Tue, 10 May 2016 01:06:30 +0000 (UTC) Content-Disposition: inline In-Reply-To: <1462560166.30874.14.camel@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Lyude Paul Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCBNYXkgMDYsIDIwMTYgYXQgMDI6NDI6NDZQTSAtMDQwMCwgTHl1ZGUgUGF1bCB3cm90 ZToKPiBPbiBGcmksIDIwMTYtMDUtMDYgYXQgMTQ6MTIgLTA0MDAsIEx5dWRlIFBhdWwgd3JvdGU6 Cj4gPiBPbiBUaHUsIDIwMTYtMDQtMjEgYXQgMTY6MTcgLTA3MDAsIE1hdHQgUm9wZXIgd3JvdGU6 Cj4gPiA+IAo+ID4gPiBOb3cgdGhhdCB3ZSdyZSBwcm9wZXJseSBwcmUtYWxsb2NhdGluZyB0aGUg RERCIGR1cmluZyB0aGUgYXRvbWljIGNoZWNrCj4gPiA+IHBoYXNlIGFuZCB3ZSB0cnVzdCB0aGF0 IHRoZSBhbGxvY2F0aW9uIGlzIGFwcHJvcHJpYXRlLCBsZXQncyBhY3R1YWxseQo+ID4gPiB1c2Ug dGhlIGFsbG9jYXRpb24gY29tcHV0ZWQgYW5kIG5vdCBkdXBsaWNhdGUgdGhhdCB3b3JrIGR1cmlu ZyB0aGUKPiA+ID4gY29tbWl0IHBoYXNlLgo+ID4gPiAKPiA+ID4gdjI6Cj4gPiA+IMKgLSBTaWdu aWZpY2FudCByZWJhc2luZyBub3cgdGhhdCB3ZSBjYW4gdXNlIGNhY2hlZCBkYXRhIHJhdGVzIGFu ZAo+ID4gPiDCoMKgwqBtaW5pbXVtIGJsb2NrIGFsbG9jYXRpb25zIHRvIGF2b2lkIGdyYWJiaW5n IGFkZGl0aW9uYWwgcGxhbmUgc3RhdGVzLgo+ID4gPiAKPiA+ID4gU2lnbmVkLW9mZi1ieTogTWF0 dCBSb3BlciA8bWF0dGhldy5kLnJvcGVyQGludGVsLmNvbT4KPiA+ID4gUmV2aWV3ZWQtYnk6IE1h YXJ0ZW4gTGFua2hvcnN0IDxtYWFydGVuLmxhbmtob3JzdEBsaW51eC5pbnRlbC5jb20+Cj4gPiA+ IC0tLQo+ID4gPiDCoGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyB8wqDCoDE0 ICstLQo+ID4gPiDCoGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmPCoMKgwqDCoMKgwqB8 IDIyNCArKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ID4gPiAtLQo+ID4gPiAtCj4g PiA+IMKgMiBmaWxlcyBjaGFuZ2VkLCA2NyBpbnNlcnRpb25zKCspLCAxNzEgZGVsZXRpb25zKC0p Cj4gPiA+IAo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlz cGxheS5jCj4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gPiA+ IGluZGV4IGM5NzBlM2UuLjgwZDhmNzcgMTAwNjQ0Cj4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9kaXNwbGF5LmMKPiA+ID4gQEAgLTEzNTk5LDYgKzEzNTk5LDcgQEAgc3RhdGljIGludCBp bnRlbF9hdG9taWNfY29tbWl0KHN0cnVjdCBkcm1fZGV2aWNlCj4gPiA+ICpkZXYsCj4gPiA+IMKg Cj4gPiA+IMKgCWRybV9hdG9taWNfaGVscGVyX3N3YXBfc3RhdGUoZGV2LCBzdGF0ZSk7Cj4gPiA+ IMKgCWRldl9wcml2LT53bS5jb25maWcgPSBpbnRlbF9zdGF0ZS0+d21fY29uZmlnOwo+ID4gPiAr CWRldl9wcml2LT53bS5za2xfcmVzdWx0cy5kZGIgPSBpbnRlbF9zdGF0ZS0+ZGRiOwo+ID4gPiDC oAlpbnRlbF9zaGFyZWRfZHBsbF9jb21taXQoc3RhdGUpOwo+ID4gPiDCoAo+ID4gPiDCoAlpZiAo aW50ZWxfc3RhdGUtPm1vZGVzZXQpIHsKPiA+ID4gQEAgLTEzNzE2LDE5ICsxMzcxNyw2IEBAIHN0 YXRpYyBpbnQgaW50ZWxfYXRvbWljX2NvbW1pdChzdHJ1Y3QgZHJtX2RldmljZQo+ID4gPiAqZGV2 LAo+ID4gPiDCoAkJaW50ZWxfbW9kZXNldF92ZXJpZnlfY3J0YyhjcnRjLCBvbGRfY3J0Y19zdGF0 ZSwgY3J0Yy0KPiA+ID4gPnN0YXRlKTsKPiA+ID4gwqAJfQo+ID4gPiDCoAo+ID4gPiAtCS8qCj4g PiA+IC0JwqAqIFRlbXBvcmFyeSBzYW5pdHkgY2hlY2s6IG1ha2Ugc3VyZSBvdXIgcHJlLWNvbXB1 dGVkIEREQiBtYXRjaGVzCj4gPiA+IHRoZQo+ID4gPiAtCcKgKiBvbmUgd2UgYWN0dWFsbHkgd2lu ZCB1cCBwcm9ncmFtbWluZy4KPiA+ID4gLQnCoCoKPiA+ID4gLQnCoCogTm90IGEgZ3JlYXQgcGxh Y2UgdG8gcHV0IHRoaXMsIGJ1dCB0aGUgZWFzaWVzdCBwbGFjZSB3ZSBoYXZlCj4gPiA+IGFjY2Vz cwo+ID4gPiAtCcKgKiB0byBib3RoIHRoZSBwcmUtY29tcHV0ZWQgYW5kIGZpbmFsIEREQidzOyB3 ZSdsbCBiZSByZW1vdmluZyB0aGlzCj4gPiA+IC0JwqAqIGNoZWNrIGluIHRoZSBuZXh0IHBhdGNo IGFueXdheS4KPiA+ID4gLQnCoCovCj4gPiA+IC0JV0FSTihJU19HRU45KGRldikgJiYKPiA+ID4g LQnCoMKgwqDCoMKgbWVtY21wKCZpbnRlbF9zdGF0ZS0+ZGRiLCAmZGV2X3ByaXYtPndtLnNrbF9y ZXN1bHRzLmRkYiwKPiA+ID4gLQkJwqDCoMKgwqBzaXplb2YoaW50ZWxfc3RhdGUtPmRkYikpLAo+ ID4gPiAtCcKgwqDCoMKgwqAiUHJlLWNvbXB1dGVkIEREQiBkb2VzIG5vdCBtYXRjaCBmaW5hbCBE REIhXG4iKTsKPiA+ID4gLQo+ID4gPiDCoAlpZiAoaW50ZWxfc3RhdGUtPm1vZGVzZXQpCj4gPiA+ IMKgCQlpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dChkZXZfcHJpdiwgUE9XRVJfRE9NQUlOX01PREVT RVQpOwo+ID4gPiDCoAo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfcG0uYwo+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKPiA+ID4gaW5k ZXggZmNhNDRmOC4uZjI4ZmQzNiAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfcG0uYwo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5j Cj4gPiA+IEBAIC0yODQ5LDcgKzI4NDksNiBAQCBza2xfd21fcGxhbmVfaWQoY29uc3Qgc3RydWN0 IGludGVsX3BsYW5lICpwbGFuZSkKPiA+ID4gwqBzdGF0aWMgdm9pZAo+ID4gPiDCoHNrbF9kZGJf Z2V0X3BpcGVfYWxsb2NhdGlvbl9saW1pdHMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiA+ID4g wqAJCQkJwqDCoMKgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKPiA+ID4g LQkJCQnCoMKgwqBzdHJ1Y3QgaW50ZWxfd21fY29uZmlnICpjb25maWcsCj4gPiA+IMKgCQkJCcKg wqDCoHN0cnVjdCBza2xfZGRiX2VudHJ5ICphbGxvYywgLyogb3V0ICovCj4gPiA+IMKgCQkJCcKg wqDCoGludCAqbnVtX2FjdGl2ZSAvKiBvdXQgKi8pCj4gPiA+IMKgewo+ID4gPiBAQCAtMjg1Nywy NCArMjg1NiwyMiBAQCBza2xfZGRiX2dldF9waXBlX2FsbG9jYXRpb25fbGltaXRzKHN0cnVjdCBk cm1fZGV2aWNlCj4gPiA+ICpkZXYsCj4gPiA+IMKgCXN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUg KmludGVsX3N0YXRlID0KPiA+ID4gdG9faW50ZWxfYXRvbWljX3N0YXRlKHN0YXRlKTsKPiA+ID4g wqAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwo+ID4g PiDCoAlzdHJ1Y3QgZHJtX2NydGMgKmZvcl9jcnRjID0gY3N0YXRlLT5iYXNlLmNydGM7Cj4gPiA+ IC0Jc3RydWN0IGRybV9jcnRjICpjcnRjOwo+ID4gPiDCoAl1bnNpZ25lZCBpbnQgcGlwZV9zaXpl LCBkZGJfc2l6ZTsKPiA+ID4gwqAJaW50IG50aF9hY3RpdmVfcGlwZTsKPiA+ID4gwqAJaW50IHBp cGUgPSB0b19pbnRlbF9jcnRjKGZvcl9jcnRjKS0+cGlwZTsKPiA+ID4gwqAKPiA+ID4gLQlpZiAo aW50ZWxfc3RhdGUgJiYgaW50ZWxfc3RhdGUtPmFjdGl2ZV9waXBlX2NoYW5nZXMpCj4gPiA+IC0J CSpudW1fYWN0aXZlID0gaHdlaWdodDMyKGludGVsX3N0YXRlLT5hY3RpdmVfY3J0Y3MpOwo+ID4g PiAtCWVsc2UgaWYgKGludGVsX3N0YXRlKQo+ID4gPiAtCQkqbnVtX2FjdGl2ZSA9IGh3ZWlnaHQz MihkZXZfcHJpdi0+YWN0aXZlX2NydGNzKTsKPiA+ID4gLQllbHNlCj4gPiA+IC0JCSpudW1fYWN0 aXZlID0gY29uZmlnLT5udW1fcGlwZXNfYWN0aXZlOwo+ID4gPiAtCj4gPiA+IC0JaWYgKCFjc3Rh dGUtPmJhc2UuYWN0aXZlKSB7Cj4gPiA+ICsJaWYgKFdBUk5fT04oIXN0YXRlKSB8fCAhY3N0YXRl LT5iYXNlLmFjdGl2ZSkgewo+ID4gPiDCoAkJYWxsb2MtPnN0YXJ0ID0gMDsKPiA+ID4gwqAJCWFs bG9jLT5lbmQgPSAwOwo+ID4gPiArCQkqbnVtX2FjdGl2ZSA9IGh3ZWlnaHQzMihkZXZfcHJpdi0+ YWN0aXZlX2NydGNzKTsKPiA+ID4gwqAJCXJldHVybjsKPiA+ID4gwqAJfQo+ID4gPiDCoAo+ID4g PiArCWlmIChpbnRlbF9zdGF0ZS0+YWN0aXZlX3BpcGVfY2hhbmdlcykKPiA+ID4gKwkJKm51bV9h Y3RpdmUgPSBod2VpZ2h0MzIoaW50ZWxfc3RhdGUtPmFjdGl2ZV9jcnRjcyk7Cj4gPiA+ICsJZWxz ZQo+ID4gPiArCQkqbnVtX2FjdGl2ZSA9IGh3ZWlnaHQzMihkZXZfcHJpdi0+YWN0aXZlX2NydGNz KTsKPiA+ID4gKwo+ID4gPiDCoAlpZiAoSVNfQlJPWFRPTihkZXYpKQo+ID4gPiDCoAkJZGRiX3Np emUgPSBCWFRfRERCX1NJWkU7Cj4gPiA+IMKgCWVsc2UKPiA+ID4gQEAgLTI4ODMsNTAgKzI4ODAs MjMgQEAgc2tsX2RkYl9nZXRfcGlwZV9hbGxvY2F0aW9uX2xpbWl0cyhzdHJ1Y3QgZHJtX2Rldmlj ZQo+ID4gPiAqZGV2LAo+ID4gPiDCoAlkZGJfc2l6ZSAtPSA0OyAvKiA0IGJsb2NrcyBmb3IgYnlw YXNzIHBhdGggYWxsb2NhdGlvbiAqLwo+ID4gPiDCoAo+ID4gPiDCoAkvKgo+ID4gPiAtCcKgKiBG SVhNRTogQXQgdGhlIG1vbWVudCB3ZSBtYXkgYmUgY2FsbGVkIG9uIGVpdGhlciBpbi1mbGlnaHQg b3IKPiA+ID4gZnVsbHkKPiA+ID4gLQnCoCogY29tbWl0dGVkIGNzdGF0ZSdzLsKgwqBPbmNlIHdl IGZ1bGx5IG1vdmUgRERCIGFsbG9jYXRpb24gaW4gdGhlCj4gPiA+IGNoZWNrCj4gPiA+IC0JwqAq IHBoYXNlLCB3ZSdsbCBvbmx5IGJlIGNhbGxlZCBvbiBpbi1mbGlnaHQgc3RhdGVzIGFuZCB0aGUg J2Vsc2UnCj4gPiA+IC0JwqAqIGJyYW5jaCBoZXJlIHdpbGwgZ28gYXdheS4KPiA+ID4gLQnCoCoK PiA+ID4gLQnCoCogVGhlICdlbHNlJyBicmFuY2ggaXMgc2xpZ2h0bHkgcmFjeSBoZXJlLCBidXQg aXQgd2FzIHJhY3kgdG8KPiA+ID4gYmVnaW4KPiA+ID4gLQnCoCogd2l0aDsgc2luY2UgaXQncyBn b2luZyBhd2F5IHNvb24sIG5vIGVmZm9ydCBpcyBtYWRlIHRvIGFkZHJlc3MKPiA+ID4gdGhhdC4K PiA+ID4gKwnCoCogSWYgdGhlIHN0YXRlIGRvZXNuJ3QgY2hhbmdlIHRoZSBhY3RpdmUgQ1JUQydz LCB0aGVuIHRoZXJlJ3MKPiA+ID4gKwnCoCogbm8gbmVlZCB0byByZWNhbGN1bGF0ZTsgdGhlIGV4 aXN0aW5nIHBpcGUgYWxsb2NhdGlvbiBsaW1pdHMKPiA+ID4gKwnCoCogc2hvdWxkIHJlbWFpbiB1 bmNoYW5nZWQuwqDCoE5vdGUgdGhhdCB3ZSdyZSBzYWZlIGZyb20gcmFjaW5nCj4gPiA+ICsJwqAq IGNvbW1pdHMgc2luY2UgYW55IHJhY2luZyBjb21taXQgdGhhdCBjaGFuZ2VzIHRoZSBhY3RpdmUg Q1JUQwo+ID4gPiArCcKgKiBsaXN0IHdvdWxkIG5lZWQgdG8gZ3JhYiBfYWxsXyBjcnRjIGxvY2tz LCBpbmNsdWRpbmcgdGhlIG9uZQo+ID4gPiArCcKgKiB3ZSBjdXJyZW50bHkgaG9sZC4KPiA+ID4g wqAJwqAqLwo+ID4gPiAtCWlmIChzdGF0ZSkgewo+ID4gPiAtCQkvKgo+ID4gPiAtCQnCoCogSWYg dGhlIHN0YXRlIGRvZXNuJ3QgY2hhbmdlIHRoZSBhY3RpdmUgQ1JUQydzLCB0aGVuCj4gPiA+IHRo ZXJlJ3MKPiA+ID4gLQkJwqAqIG5vIG5lZWQgdG8gcmVjYWxjdWxhdGU7IHRoZSBleGlzdGluZyBw aXBlIGFsbG9jYXRpb24KPiA+ID4gbGltaXRzCj4gPiA+IC0JCcKgKiBzaG91bGQgcmVtYWluIHVu Y2hhbmdlZC7CoMKgTm90ZSB0aGF0IHdlJ3JlIHNhZmUgZnJvbQo+ID4gPiByYWNpbmcKPiA+ID4g LQkJwqAqIGNvbW1pdHMgc2luY2UgYW55IHJhY2luZyBjb21taXQgdGhhdCBjaGFuZ2VzIHRoZSBh Y3RpdmUKPiA+ID4gQ1JUQwo+ID4gPiAtCQnCoCogbGlzdCB3b3VsZCBuZWVkIHRvIGdyYWIgX2Fs bF8gY3J0YyBsb2NrcywgaW5jbHVkaW5nIHRoZQo+ID4gPiBvbmUKPiA+ID4gLQkJwqAqIHdlIGN1 cnJlbnRseSBob2xkLgo+ID4gPiAtCQnCoCovCj4gPiA+IC0JCWlmICghaW50ZWxfc3RhdGUtPmFj dGl2ZV9waXBlX2NoYW5nZXMpIHsKPiA+ID4gLQkJCSphbGxvYyA9IGRldl9wcml2LT53bS5za2xf aHcuZGRiLnBpcGVbcGlwZV07Cj4gPiA+IC0JCQlyZXR1cm47Cj4gPiA+IC0JCX0KPiA+ID4gLQo+ ID4gPiAtCQludGhfYWN0aXZlX3BpcGUgPSBod2VpZ2h0MzIoaW50ZWxfc3RhdGUtPmFjdGl2ZV9j cnRjcyAmCj4gPiA+IC0JCQkJCcKgwqDCoMKgKGRybV9jcnRjX21hc2soZm9yX2NydGMpIC0gMSkp Owo+ID4gPiAtCQlwaXBlX3NpemUgPSBkZGJfc2l6ZSAvIGh3ZWlnaHQzMihpbnRlbF9zdGF0ZS0K PiA+ID4gPmFjdGl2ZV9jcnRjcyk7Cj4gPiA+IC0JCWFsbG9jLT5zdGFydCA9IG50aF9hY3RpdmVf cGlwZSAqIGRkYl9zaXplIC8gKm51bV9hY3RpdmU7Cj4gPiA+IC0JCWFsbG9jLT5lbmQgPSBhbGxv Yy0+c3RhcnQgKyBwaXBlX3NpemU7Cj4gPiA+IC0JfSBlbHNlIHsKPiA+ID4gLQkJbnRoX2FjdGl2 ZV9waXBlID0gMDsKPiA+ID4gLQkJZm9yX2VhY2hfY3J0YyhkZXYsIGNydGMpIHsKPiA+ID4gLQkJ CWlmICghdG9faW50ZWxfY3J0YyhjcnRjKS0+YWN0aXZlKQo+ID4gPiAtCQkJCWNvbnRpbnVlOwo+ ID4gPiAtCj4gPiA+IC0JCQlpZiAoY3J0YyA9PSBmb3JfY3J0YykKPiA+ID4gLQkJCQlicmVhazsK PiA+ID4gLQo+ID4gPiAtCQkJbnRoX2FjdGl2ZV9waXBlKys7Cj4gPiA+IC0JCX0KPiA+ID4gLQo+ ID4gPiAtCQlwaXBlX3NpemUgPSBkZGJfc2l6ZSAvIGNvbmZpZy0+bnVtX3BpcGVzX2FjdGl2ZTsK PiA+ID4gLQkJYWxsb2MtPnN0YXJ0ID0gbnRoX2FjdGl2ZV9waXBlICogZGRiX3NpemUgLwo+ID4g PiAtCQkJY29uZmlnLT5udW1fcGlwZXNfYWN0aXZlOwo+ID4gPiAtCQlhbGxvYy0+ZW5kID0gYWxs b2MtPnN0YXJ0ICsgcGlwZV9zaXplOwo+ID4gPiArCWlmICghaW50ZWxfc3RhdGUtPmFjdGl2ZV9w aXBlX2NoYW5nZXMpIHsKPiA+ID4gKwkJKmFsbG9jID0gZGV2X3ByaXYtPndtLnNrbF9ody5kZGIu cGlwZVtwaXBlXTsKPiA+IFNvIEkgZmluYWxseSBmaWd1cmVkIG91dCB3aGF0J3MgY2F1c2luZyBh bGwgb2YgdGhlIHZhbGlkIHdtIGNhbGN1bGF0aW9ucyB0bwo+ID4gZ2V0Cj4gPiByZWplY3RlZCwg bGVhZGluZyB0byBibGFuayBzY3JlZW5zIGV0Yy4gZXRjLiBUaGUgcHJvYmxlbSBpcyB0aGlzIGxp bmUgcmlnaHQKPiA+IGhlcmUKPiA+IHdoZXJlIHdlIGFzc2lnbiAqYWxsb2MsIHdlIG5ldmVyIGFj dHVhbGx5IHNldCBkZXZfcHJpdi0KPiA+ID53bS5za2xfaHcuZGRiLnBpcGVbcGlwZV3CoAo+ID4g dG8gYSB2YWx1ZSBhbnl3aGVyZSBzbyB3ZSBlbmQgdXAgaGF2aW5nIGJvZ3VzIGRkYiBlbnRyeSBz aXplcy4gSWYgeW91IGNoYW5nZQo+ID4gaXQKPiA+IHRvIHNvbWV0aGluZyBsaWtlOgo+ID4gCj4g PiAJCSphbGxvYyA9IGRldl9wcml2LT53bS5za2xfaHcuZGRiLnBsYW5lW3BpcGVdW2ludGVsX2Ny dGMtPnBsYW5lXTsKPiBXaG9vcHMsIEkgc3RhbmQgY29ycmVjdGVkIG9uIHRoaXMsIHNpbmNlIHRo aXMgc2VlbXMgdG8gY2F1c2UgYSBmZXcgaXNzdWVzIHdpdGgKPiBWVCBzd2l0Y2hpbmcuIFdlIGFj dHVhbGx5IHdhbnQgc29tZXRoaW5nIGxpa2UgdGhpczoKPiAKPiAJCWlmICghaW50ZWxfc3RhdGUt PmFjdGl2ZV9waXBlX2NoYW5nZXMgJiYKPiAJCcKgIMKgIGRldl9wcml2LT53bS5za2xfaHcuZGRi LnBpcGVbcGlwZV0uZW5kICE9IDApIHsKPiAJCQkqYWxsb2MgPSBkZXZfcHJpdi0+d20uc2tsX2h3 LmRkYi5waXBlW3BpcGVdOwo+IAkJCXJldHVybjsKPiAJCX0KPiAKCmRldl9wcml2LT53bS5za2xf aHcuZGRiLnBpcGVbcGlwZV0gZG9lcyBnZXQgYXNzaWduZWQgaW4gc2tsX3VwZGF0ZV93bSgpCnZp YSBhIGZ1bGwgc3RydWN0dXJlIGNvcHk6CgogICAgICAgIC8qIHN0b3JlIHRoZSBuZXcgY29uZmln dXJhdGlvbiAqLwogICAgICAgIGRldl9wcml2LT53bS5za2xfaHcgPSAqcmVzdWx0czsKClNvIGlm IHlvdSBzdGFydCB3aXRoIGEgZ29vZCB2YWx1ZSBpbiBza2xfaHcgYW5kIHRoZW4geW91IG9ubHkg cmVjb21wdXRlCndoZW4gdGhlIHZhbHVlIGNoYW5nZXMsIHNrbF9odyB3aWxsIGFsd2F5cyBoYXZl IGdvb2QgdmFsdWVzIHdoZW4geW91IGdldAp0byB0aGUgcG9pbnQgeW91IG5vdGVkIGFib3ZlLiAg VGhlIHByb2JsZW0gaXMgdGhhdCBpZiB5b3Ugc3RhcnQgd2l0aCBhCmJvZ3VzL3VuZXhwZWN0ZWQg dmFsdWUgKGJhc2VkIG9uIHRoZSBpbml0aWFsIEJJT1Mgc2V0dGluZyksIHRoZW4geW91J3ZlCmdv dCBhIGdhcmJhZ2UtaW4sIGdhcmJhZ2Utb3V0IHNpdHVhdGlvbiBmb3IgZXZlcnkgdXBkYXRlIHRo YXQgdHJpZXMgdG8KcmUtdXNlIHRoZSB2YWx1ZS4gIE9ubHkgc29tZXRoaW5nIHRoYXQgdHJpZ2dl cnMgYSBmdWxsIHJlY29tcHV0ZSAoaS5lLiwKYSBwaXBlIGNoYW5naW5nIGFjdGl2ZSBzdGF0dXMp IHdpbGwgZml4IHRoZSBwcm9ibGVtIGF0IHRoYXQgcG9pbnQuCgpJJ3ZlIGJlZW4gb3V0IG9mIG9m ZmljZSBmb3IgdGhlIGxhc3QgdHdvIHdlZWtzLCBidXQgSSdtIGZpbmFsbHkgYmFjawp0b2RheSwg c28gSSdtIGluY29ycG9yYXRpbmcgdGhlIGZpeGVzIGZvciB0aGlzIHByb2JsZW0gaW50byBhIG5l dwp2ZXJzaW9uIG9mIHRoZSBzZXJpZXMgYW5kIHJlYmFzaW5nIHRvIHRoZSBsYXRlc3QgLW5pZ2h0 bHkuICBJJ2xsIHBvc3QgbXkKdXBkYXRlZCBwYXRjaGVzIHNob3J0bHkuICBTb3JyeSBmb3IgdGhl IGRlbGF5IGdldHRpbmcgdGhlc2UgZmluYWwKZGV0YWlscyB3b3JrZWQgb3V0IQoKCk1hdHQKCj4g PiAKPiA+IFdlIGdldCB0aGUgcmlnaHQgdmFsdWVzIGFuZCBldmVyeXRoaW5nIHN0YXJ0cyB3b3Jr aW5nIGFzIGV4cGVjdGVkLiBCVFc6IFRoaW5ncwo+ID4gc2VlbSB0byBiZSBwcmV0dHkgc3RhYmxl IHdpdGggdGhpcyBwYXRjaHNldCBhZnRlciB0aGlzIGZpeCwgaGF2ZW4ndCB0cmllZCBpdAo+ID4g b24KPiA+IGFueSBvdGhlciBwbGF0Zm9ybXMgdGhlbiBza2wgeWV0IHRob3VnaCBzbyBJJ2xsIGxl dCB5b3Uga25vdyBpZiBJIHJ1biBpbnRvIGFueQo+ID4gbW9yZSBwcm9ibGVtcy4KPiA+IAo+ID4g PiAKPiA+ID4gKwkJcmV0dXJuOwo+ID4gPiDCoAl9Cj4gPiA+ICsKPiA+ID4gKwludGhfYWN0aXZl X3BpcGUgPSBod2VpZ2h0MzIoaW50ZWxfc3RhdGUtPmFjdGl2ZV9jcnRjcyAmCj4gPiA+ICsJCQkJ wqDCoMKgwqAoZHJtX2NydGNfbWFzayhmb3JfY3J0YykgLSAxKSk7Cj4gPiA+ICsJcGlwZV9zaXpl ID0gZGRiX3NpemUgLyBod2VpZ2h0MzIoaW50ZWxfc3RhdGUtPmFjdGl2ZV9jcnRjcyk7Cj4gPiA+ ICsJYWxsb2MtPnN0YXJ0ID0gbnRoX2FjdGl2ZV9waXBlICogZGRiX3NpemUgLyAqbnVtX2FjdGl2 ZTsKPiA+ID4gKwlhbGxvYy0+ZW5kID0gYWxsb2MtPnN0YXJ0ICsgcGlwZV9zaXplOwo+ID4gPiDC oH0KPiA+ID4gwqAKPiA+ID4gwqBzdGF0aWMgdW5zaWduZWQgaW50IHNrbF9jdXJzb3JfYWxsb2Nh dGlvbihpbnQgbnVtX2FjdGl2ZSkKPiA+ID4gQEAgLTMwMjUsNjIgKzI5OTUsMzMgQEAgc2tsX2dl dF90b3RhbF9yZWxhdGl2ZV9kYXRhX3JhdGUoc3RydWN0Cj4gPiA+IGludGVsX2NydGNfc3RhdGUg KmludGVsX2NzdGF0ZSkKPiA+ID4gwqAJc3RydWN0IGRybV9jcnRjICpjcnRjID0gY3N0YXRlLT5j cnRjOwo+ID4gPiDCoAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2Owo+ID4gPiDC oAlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7Cj4g PiA+ICsJY29uc3Qgc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7Cj4gPiA+IMKgCWNvbnN0IHN0cnVj dCBpbnRlbF9wbGFuZSAqaW50ZWxfcGxhbmU7Cj4gPiA+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0 ZSAqcHN0YXRlOwo+ID4gPiDCoAl1bnNpZ25lZCBpbnQgcmF0ZSwgdG90YWxfZGF0YV9yYXRlID0g MDsKPiA+ID4gwqAJaW50IGlkOwo+ID4gPiArCWludCBpOwo+ID4gPiArCj4gPiA+ICsJaWYgKFdB Uk5fT04oIXN0YXRlKSkKPiA+ID4gKwkJcmV0dXJuIDA7Cj4gPiA+IMKgCj4gPiA+IMKgCS8qIENh bGN1bGF0ZSBhbmQgY2FjaGUgZGF0YSByYXRlIGZvciBlYWNoIHBsYW5lICovCj4gPiA+IC0JLyoK PiA+ID4gLQnCoCogRklYTUU6IEF0IHRoZSBtb21lbnQgdGhpcyBmdW5jdGlvbiBjYW4gYmUgY2Fs bGVkIG9uIGVpdGhlciBhbgo+ID4gPiAtCcKgKiBpbi1mbGlnaHQgb3IgYSBjb21taXR0ZWQgc3Rh dGUgb2JqZWN0LsKgwqBJZiBpdCdzIGluLWZsaWdodCB0aGVuCj4gPiA+IHdlCj4gPiA+IC0JwqAq IG9ubHkgd2FudCB0byByZS1jYWxjdWxhdGUgdGhlIHBsYW5lIGRhdGEgcmF0ZSBmb3IgcGxhbmVz IHRoYXQKPiA+ID4gYXJlCj4gPiA+IC0JwqAqIHBhcnQgb2YgdGhlIHRyYW5zYWN0aW9uIChpLmUu LCB3ZSBkb24ndCB3YW50IHRvIGdyYWIgYW55Cj4gPiA+IGFkZGl0aW9uYWwKPiA+ID4gLQnCoCog cGxhbmUgc3RhdGVzIGlmIHdlIGRvbid0IGhhdmUgdG8pLsKgwqBJZiB3ZSdyZSBvcGVyYXRpbmcg b24KPiA+ID4gY29tbWl0dGVkCj4gPiA+IC0JwqAqIHN0YXRlLCB3ZSdsbCBqdXN0IGdvIGFoZWFk IGFuZCByZWNhbGN1bGF0ZSB0aGUgcGxhbmUgZGF0YSByYXRlCj4gPiA+IGZvcgo+ID4gPiAtCcKg KiBhbGwgcGxhbmVzLgo+ID4gPiAtCcKgKgo+ID4gPiAtCcKgKiBPbmNlIHdlIGZpbmlzaCBtb3Zp bmcgb3VyIEREQiBhbGxvY2F0aW9uIHRvIHRoZSBhdG9taWMgY2hlY2sKPiA+ID4gcGhhc2UsCj4g PiA+IC0JwqAqIHdlJ2xsIG9ubHkgYmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIG9uIGluLWZsaWdo dCBzdGF0ZSBvYmplY3RzLAo+ID4gPiBzbwo+ID4gPiAtCcKgKiB0aGUgJ2Vsc2UnIGJyYW5jaCBo ZXJlIHdpbGwgZ28gYXdheS4KPiA+ID4gLQnCoCovCj4gPiA+IC0JaWYgKHN0YXRlKSB7Cj4gPiA+ IC0JCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOwo+ID4gPiAtCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0 YXRlICpwc3RhdGU7Cj4gPiA+IC0JCWludCBpOwo+ID4gPiAtCj4gPiA+IC0JCWZvcl9lYWNoX3Bs YW5lX2luX3N0YXRlKHN0YXRlLCBwbGFuZSwgcHN0YXRlLCBpKSB7Cj4gPiA+IC0JCQlpbnRlbF9w bGFuZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lKTsKPiA+ID4gLQkJCWlkID0gc2tsX3dtX3BsYW5l X2lkKGludGVsX3BsYW5lKTsKPiA+ID4gLQo+ID4gPiAtCQkJaWYgKGludGVsX3BsYW5lLT5waXBl ICE9IGludGVsX2NydGMtPnBpcGUpCj4gPiA+IC0JCQkJY29udGludWU7Cj4gPiA+IC0KPiA+ID4g LQkJCS8qIHBhY2tlZC91diAqLwo+ID4gPiAtCQkJcmF0ZSA9IHNrbF9wbGFuZV9yZWxhdGl2ZV9k YXRhX3JhdGUoaW50ZWxfY3N0YXRlLAo+ID4gPiAtCQkJCQkJCcKgwqDCoMKgcHN0YXRlLCAwKTsK PiA+ID4gLQkJCWludGVsX2NzdGF0ZS0+d20uc2tsLnBsYW5lX2RhdGFfcmF0ZVtpZF0gPSByYXRl Owo+ID4gPiAtCj4gPiA+IC0JCQkvKiB5LXBsYW5lICovCj4gPiA+IC0JCQlyYXRlID0gc2tsX3Bs YW5lX3JlbGF0aXZlX2RhdGFfcmF0ZShpbnRlbF9jc3RhdGUsCj4gPiA+IC0JCQkJCQkJwqDCoMKg wqBwc3RhdGUsIDEpOwo+ID4gPiAtCQkJaW50ZWxfY3N0YXRlLT53bS5za2wucGxhbmVfeV9kYXRh X3JhdGVbaWRdID0gcmF0ZTsKPiA+ID4gLQkJfQo+ID4gPiAtCX0gZWxzZSB7Cj4gPiA+IC0JCWZv cl9lYWNoX2ludGVsX3BsYW5lX29uX2NydGMoZGV2LCBpbnRlbF9jcnRjLCBpbnRlbF9wbGFuZSkK PiA+ID4gewo+ID4gPiAtCQkJY29uc3Qgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcHN0YXRlID0K PiA+ID4gLQkJCQlpbnRlbF9wbGFuZS0+YmFzZS5zdGF0ZTsKPiA+ID4gLQkJCWludCBpZCA9IHNr bF93bV9wbGFuZV9pZChpbnRlbF9wbGFuZSk7Cj4gPiA+ICsJZm9yX2VhY2hfcGxhbmVfaW5fc3Rh dGUoc3RhdGUsIHBsYW5lLCBwc3RhdGUsIGkpIHsKPiA+ID4gKwkJaWQgPSBza2xfd21fcGxhbmVf aWQodG9faW50ZWxfcGxhbmUocGxhbmUpKTsKPiA+ID4gKwkJaW50ZWxfcGxhbmUgPSB0b19pbnRl bF9wbGFuZShwbGFuZSk7Cj4gPiA+IMKgCj4gPiA+IC0JCQkvKiBwYWNrZWQvdXYgKi8KPiA+ID4g LQkJCXJhdGUgPSBza2xfcGxhbmVfcmVsYXRpdmVfZGF0YV9yYXRlKGludGVsX2NzdGF0ZSwKPiA+ ID4gLQkJCQkJCQnCoMKgwqDCoHBzdGF0ZSwgMCk7Cj4gPiA+IC0JCQlpbnRlbF9jc3RhdGUtPndt LnNrbC5wbGFuZV9kYXRhX3JhdGVbaWRdID0gcmF0ZTsKPiA+ID4gKwkJaWYgKGludGVsX3BsYW5l LT5waXBlICE9IGludGVsX2NydGMtPnBpcGUpCj4gPiA+ICsJCQljb250aW51ZTsKPiA+ID4gwqAK PiA+ID4gLQkJCS8qIHktcGxhbmUgKi8KPiA+ID4gLQkJCXJhdGUgPSBza2xfcGxhbmVfcmVsYXRp dmVfZGF0YV9yYXRlKGludGVsX2NzdGF0ZSwKPiA+ID4gLQkJCQkJCQnCoMKgwqDCoHBzdGF0ZSwg MSk7Cj4gPiA+IC0JCQlpbnRlbF9jc3RhdGUtPndtLnNrbC5wbGFuZV95X2RhdGFfcmF0ZVtpZF0g PSByYXRlOwo+ID4gPiAtCQl9Cj4gPiA+ICsJCS8qIHBhY2tlZC91diAqLwo+ID4gPiArCQlyYXRl ID0gc2tsX3BsYW5lX3JlbGF0aXZlX2RhdGFfcmF0ZShpbnRlbF9jc3RhdGUsCj4gPiA+ICsJCQkJ CQnCoMKgwqDCoHBzdGF0ZSwgMCk7Cj4gPiA+ICsJCWludGVsX2NzdGF0ZS0+d20uc2tsLnBsYW5l X2RhdGFfcmF0ZVtpZF0gPSByYXRlOwo+ID4gPiArCj4gPiA+ICsJCS8qIHktcGxhbmUgKi8KPiA+ ID4gKwkJcmF0ZSA9IHNrbF9wbGFuZV9yZWxhdGl2ZV9kYXRhX3JhdGUoaW50ZWxfY3N0YXRlLAo+ ID4gPiArCQkJCQkJwqDCoMKgwqBwc3RhdGUsIDEpOwo+ID4gPiArCQlpbnRlbF9jc3RhdGUtPndt LnNrbC5wbGFuZV95X2RhdGFfcmF0ZVtpZF0gPSByYXRlOwo+ID4gPiDCoAl9Cj4gPiA+IMKgCj4g PiA+IMKgCS8qIENhbGN1bGF0ZSBDUlRDJ3MgdG90YWwgZGF0YSByYXRlIGZyb20gY2FjaGVkIHZh bHVlcyAqLwo+ID4gPiBAQCAtMzEwNCw4ICszMDQ1LDYgQEAgc2tsX2FsbG9jYXRlX3BpcGVfZGRi KHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCj4gPiA+IMKgCXN0cnVjdCBkcm1fYXRv bWljX3N0YXRlICpzdGF0ZSA9IGNzdGF0ZS0+YmFzZS5zdGF0ZTsKPiA+ID4gwqAJc3RydWN0IGRy bV9jcnRjICpjcnRjID0gY3N0YXRlLT5iYXNlLmNydGM7Cj4gPiA+IMKgCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXYgPSBjcnRjLT5kZXY7Cj4gPiA+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gdG9faTkxNShkZXYpOwo+ID4gPiAtCXN0cnVjdCBpbnRlbF93bV9jb25maWcgKmNv bmZpZyA9ICZkZXZfcHJpdi0+d20uY29uZmlnOwo+ID4gPiDCoAlzdHJ1Y3QgaW50ZWxfY3J0YyAq aW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7Cj4gPiA+IMKgCXN0cnVjdCBpbnRlbF9w bGFuZSAqaW50ZWxfcGxhbmU7Cj4gPiA+IMKgCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOwo+ID4g PiBAQCAtMzExOSw2ICszMDU4LDkgQEAgc2tsX2FsbG9jYXRlX3BpcGVfZGRiKHN0cnVjdCBpbnRl bF9jcnRjX3N0YXRlICpjc3RhdGUsCj4gPiA+IMKgCWludCBudW1fYWN0aXZlOwo+ID4gPiDCoAlp bnQgaWQsIGk7Cj4gPiA+IMKgCj4gPiA+ICsJaWYgKFdBUk5fT04oIXN0YXRlKSkKPiA+ID4gKwkJ cmV0dXJuIDA7Cj4gPiA+ICsKPiA+ID4gwqAJaWYgKCFjc3RhdGUtPmJhc2UuYWN0aXZlKSB7Cj4g PiA+IMKgCQlkZGItPnBpcGVbcGlwZV0uc3RhcnQgPSBkZGItPnBpcGVbcGlwZV0uZW5kID0gMDsK PiA+ID4gwqAJCW1lbXNldChkZGItPnBsYW5lW3BpcGVdLCAwLCBzaXplb2YoZGRiLT5wbGFuZVtw aXBlXSkpOwo+ID4gPiBAQCAtMzEyNiw4ICszMDY4LDcgQEAgc2tsX2FsbG9jYXRlX3BpcGVfZGRi KHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCj4gPiA+IMKgCQlyZXR1cm4gMDsKPiA+ ID4gwqAJfQo+ID4gPiDCoAo+ID4gPiAtCXNrbF9kZGJfZ2V0X3BpcGVfYWxsb2NhdGlvbl9saW1p dHMoZGV2LCBjc3RhdGUsIGNvbmZpZywgYWxsb2MsCj4gPiA+IC0JCQkJCcKgwqDCoCZudW1fYWN0 aXZlKTsKPiA+ID4gKwlza2xfZGRiX2dldF9waXBlX2FsbG9jYXRpb25fbGltaXRzKGRldiwgY3N0 YXRlLCBhbGxvYywKPiA+ID4gJm51bV9hY3RpdmUpOwo+ID4gPiDCoAlhbGxvY19zaXplID0gc2ts X2RkYl9lbnRyeV9zaXplKGFsbG9jKTsKPiA+ID4gwqAJaWYgKGFsbG9jX3NpemUgPT0gMCkgewo+ ID4gPiDCoAkJbWVtc2V0KGRkYi0+cGxhbmVbcGlwZV0sIDAsIHNpemVvZihkZGItPnBsYW5lW3Bp cGVdKSk7Cj4gPiA+IEBAIC0zMTM5LDUzICszMDgwLDMxIEBAIHNrbF9hbGxvY2F0ZV9waXBlX2Rk YihzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZQo+ID4gPiAqY3N0YXRlLAo+ID4gPiDCoAlkZGItPnBs YW5lW3BpcGVdW1BMQU5FX0NVUlNPUl0uZW5kID0gYWxsb2MtPmVuZDsKPiA+ID4gwqAKPiA+ID4g wqAJYWxsb2Nfc2l6ZSAtPSBjdXJzb3JfYmxvY2tzOwo+ID4gPiAtCWFsbG9jLT5lbmQgLT0gY3Vy c29yX2Jsb2NrczsKPiA+ID4gwqAKPiA+ID4gwqAJLyogMS4gQWxsb2NhdGUgdGhlIG1pbmludW0g cmVxdWlyZWQgYmxvY2tzIGZvciBlYWNoIGFjdGl2ZSBwbGFuZSAqLwo+ID4gPiAtCS8qCj4gPiA+ IC0JwqAqIFRPRE86IFJlbW92ZSBzdXBwb3J0IGZvciBhbHJlYWR5LWNvbW1pdHRlZCBzdGF0ZSBv bmNlIHdlCj4gPiA+IC0JwqAqIG9ubHkgYWxsb2NhdGUgRERCIG9uIGluLWZsaWdodCBzdGF0ZXMu Cj4gPiA+IC0JwqAqLwo+ID4gPiAtCWlmIChzdGF0ZSkgewo+ID4gPiAtCQlmb3JfZWFjaF9wbGFu ZV9pbl9zdGF0ZShzdGF0ZSwgcGxhbmUsIHBzdGF0ZSwgaSkgewo+ID4gPiAtCQkJaW50ZWxfcGxh bmUgPSB0b19pbnRlbF9wbGFuZShwbGFuZSk7Cj4gPiA+IC0JCQlpZCA9IHNrbF93bV9wbGFuZV9p ZChpbnRlbF9wbGFuZSk7Cj4gPiA+IC0KPiA+ID4gLQkJCWlmIChpbnRlbF9wbGFuZS0+cGlwZSAh PSBwaXBlKQo+ID4gPiAtCQkJCWNvbnRpbnVlOwo+ID4gPiAtCj4gPiA+IC0JCQlpZiAoIXRvX2lu dGVsX3BsYW5lX3N0YXRlKHBzdGF0ZSktPnZpc2libGUpIHsKPiA+ID4gLQkJCQltaW5pbXVtW2lk XSA9IDA7Cj4gPiA+IC0JCQkJeV9taW5pbXVtW2lkXSA9IDA7Cj4gPiA+IC0JCQkJY29udGludWU7 Cj4gPiA+IC0JCQl9Cj4gPiA+IC0JCQlpZiAocGxhbmUtPnR5cGUgPT0gRFJNX1BMQU5FX1RZUEVf Q1VSU09SKSB7Cj4gPiA+IC0JCQkJbWluaW11bVtpZF0gPSAwOwo+ID4gPiAtCQkJCXlfbWluaW11 bVtpZF0gPSAwOwo+ID4gPiAtCQkJCWNvbnRpbnVlOwo+ID4gPiAtCQkJfQo+ID4gPiAtCj4gPiA+ IC0JCQltaW5pbXVtW2lkXSA9IDg7Cj4gPiA+IC0JCQlpZiAocHN0YXRlLT5mYi0+cGl4ZWxfZm9y bWF0ID09IERSTV9GT1JNQVRfTlYxMikKPiA+ID4gLQkJCQl5X21pbmltdW1baWRdID0gODsKPiA+ ID4gLQkJCWVsc2UKPiA+ID4gLQkJCQl5X21pbmltdW1baWRdID0gMDsKPiA+ID4gLQkJfQo+ID4g PiAtCX0gZWxzZSB7Cj4gPiA+IC0JCWZvcl9lYWNoX2ludGVsX3BsYW5lX29uX2NydGMoZGV2LCBp bnRlbF9jcnRjLCBpbnRlbF9wbGFuZSkKPiA+ID4gewo+ID4gPiAtCQkJc3RydWN0IGRybV9wbGFu ZSAqcGxhbmUgPSAmaW50ZWxfcGxhbmUtPmJhc2U7Cj4gPiA+IC0JCQlzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyICpmYiA9IHBsYW5lLT5zdGF0ZS0+ZmI7Cj4gPiA+IC0JCQlpbnQgaWQgPSBza2xfd21f cGxhbmVfaWQoaW50ZWxfcGxhbmUpOwo+ID4gPiAtCj4gPiA+IC0JCQlpZiAoIXRvX2ludGVsX3Bs YW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSktPnZpc2libGUpCj4gPiA+IC0JCQkJY29udGludWU7Cj4g PiA+ICsJZm9yX2VhY2hfcGxhbmVfaW5fc3RhdGUoc3RhdGUsIHBsYW5lLCBwc3RhdGUsIGkpIHsK PiA+ID4gKwkJaW50ZWxfcGxhbmUgPSB0b19pbnRlbF9wbGFuZShwbGFuZSk7Cj4gPiA+ICsJCWlk ID0gc2tsX3dtX3BsYW5lX2lkKGludGVsX3BsYW5lKTsKPiA+ID4gwqAKPiA+ID4gLQkJCWlmIChw bGFuZS0+dHlwZSA9PSBEUk1fUExBTkVfVFlQRV9DVVJTT1IpCj4gPiA+IC0JCQkJY29udGludWU7 Cj4gPiA+ICsJCWlmIChpbnRlbF9wbGFuZS0+cGlwZSAhPSBwaXBlKQo+ID4gPiArCQkJY29udGlu dWU7Cj4gPiA+IMKgCj4gPiA+IC0JCQltaW5pbXVtW2lkXSA9IDg7Cj4gPiA+IC0JCQl5X21pbmlt dW1baWRdID0gKGZiLT5waXhlbF9mb3JtYXQgPT0KPiA+ID4gRFJNX0ZPUk1BVF9OVjEyKQo+ID4g PiA/IDggOiAwOwo+ID4gPiArCQlpZiAoIXRvX2ludGVsX3BsYW5lX3N0YXRlKHBzdGF0ZSktPnZp c2libGUpIHsKPiA+ID4gKwkJCW1pbmltdW1baWRdID0gMDsKPiA+ID4gKwkJCXlfbWluaW11bVtp ZF0gPSAwOwo+ID4gPiArCQkJY29udGludWU7Cj4gPiA+ICsJCX0KPiA+ID4gKwkJaWYgKHBsYW5l LT50eXBlID09IERSTV9QTEFORV9UWVBFX0NVUlNPUikgewo+ID4gPiArCQkJbWluaW11bVtpZF0g PSAwOwo+ID4gPiArCQkJeV9taW5pbXVtW2lkXSA9IDA7Cj4gPiA+ICsJCQljb250aW51ZTsKPiA+ ID4gwqAJCX0KPiA+ID4gKwo+ID4gPiArCQltaW5pbXVtW2lkXSA9IDg7Cj4gPiA+ICsJCWlmIChw c3RhdGUtPmZiLT5waXhlbF9mb3JtYXQgPT0gRFJNX0ZPUk1BVF9OVjEyKQo+ID4gPiArCQkJeV9t aW5pbXVtW2lkXSA9IDg7Cj4gPiA+ICsJCWVsc2UKPiA+ID4gKwkJCXlfbWluaW11bVtpZF0gPSAw Owo+ID4gPiDCoAl9Cj4gPiA+IMKgCj4gPiA+IMKgCWZvciAoaSA9IDA7IGkgPCBQTEFORV9DVVJT T1I7IGkrKykgewo+ID4gPiBAQCAtMzczNiw3ICszNjU1LDYgQEAgc3RhdGljIGJvb2wgc2tsX3Vw ZGF0ZV9waXBlX3dtKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+ID4gwqAJc3RydWN0IGludGVs X2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwo+ID4gPiDCoAlzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlID0gdG9faW50ZWxfY3J0Y19zdGF0ZShjcnRjLT5zdGF0 ZSk7Cj4gPiA+IMKgCj4gPiA+IC0JV0FSTl9PTihza2xfYWxsb2NhdGVfcGlwZV9kZGIoY3N0YXRl LCBkZGIpICE9IDApOwo+ID4gPiDCoAlza2xfYnVpbGRfcGlwZV93bShjc3RhdGUsIGRkYiwgcGlw ZV93bSk7Cj4gPiA+IMKgCj4gPiA+IMKgCWlmICghbWVtY21wKCZpbnRlbF9jcnRjLT53bS5hY3Rp dmUuc2tsLCBwaXBlX3dtLCBzaXplb2YoKnBpcGVfd20pKSkKPiA+ID4gQEAgLTM4MDAsMTYgKzM3 MTgsNiBAQCBzdGF0aWMgdm9pZCBza2xfY2xlYXJfd20oc3RydWN0IHNrbF93bV92YWx1ZXMKPiA+ ID4gKndhdGVybWFya3MsIGVudW0gcGlwZSBwaXBlKQo+ID4gPiDCoAltZW1zZXQod2F0ZXJtYXJr cy0+cGxhbmVfdHJhbnNbcGlwZV0sCj4gPiA+IMKgCcKgwqDCoMKgwqDCoMKgMCwgc2l6ZW9mKHVp bnQzMl90KSAqIEk5MTVfTUFYX1BMQU5FUyk7Cj4gPiA+IMKgCXdhdGVybWFya3MtPnBsYW5lX3Ry YW5zW3BpcGVdW1BMQU5FX0NVUlNPUl0gPSAwOwo+ID4gPiAtCj4gPiA+IC0JLyogQ2xlYXIgZGRi IGVudHJpZXMgZm9yIHBpcGUgKi8KPiA+ID4gLQltZW1zZXQoJndhdGVybWFya3MtPmRkYi5waXBl W3BpcGVdLCAwLCBzaXplb2Yoc3RydWN0Cj4gPiA+IHNrbF9kZGJfZW50cnkpKTsKPiA+ID4gLQlt ZW1zZXQoJndhdGVybWFya3MtPmRkYi5wbGFuZVtwaXBlXSwgMCwKPiA+ID4gLQnCoMKgwqDCoMKg wqDCoHNpemVvZihzdHJ1Y3Qgc2tsX2RkYl9lbnRyeSkgKiBJOTE1X01BWF9QTEFORVMpOwo+ID4g PiAtCW1lbXNldCgmd2F0ZXJtYXJrcy0+ZGRiLnlfcGxhbmVbcGlwZV0sIDAsCj4gPiA+IC0JwqDC oMKgwqDCoMKgwqBzaXplb2Yoc3RydWN0IHNrbF9kZGJfZW50cnkpICogSTkxNV9NQVhfUExBTkVT KTsKPiA+ID4gLQltZW1zZXQoJndhdGVybWFya3MtPmRkYi5wbGFuZVtwaXBlXVtQTEFORV9DVVJT T1JdLCAwLAo+ID4gPiAtCcKgwqDCoMKgwqDCoMKgc2l6ZW9mKHN0cnVjdCBza2xfZGRiX2VudHJ5 KSk7Cj4gPiA+IC0KPiA+ID4gwqB9Cj4gPiA+IMKgCj4gPiA+IMKgc3RhdGljIGludAoKLS0gCk1h dHQgUm9wZXIKR3JhcGhpY3MgU29mdHdhcmUgRW5naW5lZXIKSW9URyBQbGF0Zm9ybSBFbmFibGlu ZyAmIERldmVsb3BtZW50CkludGVsIENvcnBvcmF0aW9uCig5MTYpIDM1Ni0yNzk1Cl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5n IGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=