From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 1/6] dma-buf: add dynamic DMA-buf handling v13 Date: Fri, 19 Jul 2019 10:57:57 +0200 Message-ID: <20190719085757.GD15868@phenom.ffwll.local> References: <20190626122310.1498-1-christian.koenig@amd.com> <20190626122933.GK12905@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: christian.koenig-5C7GfCeVMHo@public.gmane.org Cc: intel-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Daniel Vetter T24gVHVlLCBKdWwgMTYsIDIwMTkgYXQgMDQ6MjE6NTNQTSArMDIwMCwgQ2hyaXN0aWFuIEvDtm5p ZyB3cm90ZToKPiBBbSAyNi4wNi4xOSB1bSAxNDoyOSBzY2hyaWViIERhbmllbCBWZXR0ZXI6Cj4g PiBPbiBXZWQsIEp1biAyNiwgMjAxOSBhdCAwMjoyMzowNVBNICswMjAwLCBDaHJpc3RpYW4gS8O2 bmlnIHdyb3RlOgo+ID4gPiBPbiB0aGUgZXhwb3J0ZXIgc2lkZSB3ZSBhZGQgb3B0aW9uYWwgZXhw bGljaXQgcGlubmluZyBjYWxsYmFja3MuIElmIHRob3NlCj4gPiA+IGNhbGxiYWNrcyBhcmUgaW1w bGVtZW50ZWQgdGhlIGZyYW1ld29yayBubyBsb25nZXIgY2FjaGVzIHNnIHRhYmxlcyBhbmQgdGhl Cj4gPiA+IG1hcC91bm1hcCBjYWxsYmFja3MgYXJlIGFsd2F5cyBjYWxsZWQgd2l0aCB0aGUgbG9j ayBvZiB0aGUgcmVzZXJ2YXRpb24gb2JqZWN0Cj4gPiA+IGhlbGQuCj4gPiA+IAo+ID4gPiBPbiB0 aGUgaW1wb3J0ZXIgc2lkZSB3ZSBhZGQgYW4gb3B0aW9uYWwgaW52YWxpZGF0ZSBjYWxsYmFjay4g VGhpcyBjYWxsYmFjayBpcwo+ID4gPiB1c2VkIGJ5IHRoZSBleHBvcnRlciB0byBpbmZvcm0gdGhl IGltcG9ydGVycyB0aGF0IHRoZWlyIG1hcHBpbmdzIHNob3VsZCBiZQo+ID4gPiBkZXN0cm95ZWQg YXMgc29vbiBhcyBwb3NzaWJsZS4KPiA+ID4gCj4gPiA+IFRoaXMgYWxsb3dzIHRoZSBleHBvcnRl ciB0byBwcm92aWRlIHRoZSBtYXBwaW5ncyB3aXRob3V0IHRoZSBuZWVkIHRvIHBpbgo+ID4gPiB0 aGUgYmFja2luZyBzdG9yZS4KPiA+ID4gCj4gPiA+IHYyOiBkb24ndCB0cnkgdG8gaW52YWxpZGF0 ZSBtYXBwaW5ncyB3aGVuIHRoZSBjYWxsYmFjayBpcyBOVUxMLAo+ID4gPiAgICAgIGxvY2sgdGhl IHJlc2VydmF0aW9uIG9iaiB3aGlsZSB1c2luZyB0aGUgYXR0YWNobWVudHMsCj4gPiA+ICAgICAg YWRkIGhlbHBlciB0byBzZXQgdGhlIGNhbGxiYWNrCj4gPiA+IHYzOiBtb3ZlIGZsYWcgZm9yIGlu dmFsaWRhdGlvbiBzdXBwb3J0IGludG8gdGhlIERNQS1idWYsCj4gPiA+ICAgICAgdXNlIG5ldyBh dHRhY2hfaW5mbyBzdHJ1Y3R1cmUgdG8gc2V0IHRoZSBjYWxsYmFjawo+ID4gPiB2NDogdXNlIGlt cG9ydGVyX3ByaXYgZmllbGQgaW5zdGVhZCBvZiBtYW5nbGluZyBleHBvcnRlciBwcml2Lgo+ID4g PiB2NTogZHJvcCBpbnZhbGlkYXRpb25fc3VwcG9ydGVkIGZsYWcKPiA+ID4gdjY6IHNxdWFzaCB0 b2dldGhlciB3aXRoIHBpbi91bnBpbiBjaGFuZ2VzCj4gPiA+IHY3OiBwaW4vdW5waW4gdGFrZXMg YW4gYXR0YWNobWVudCBub3cKPiA+ID4gdjg6IG51a2UgZG1hX2J1Zl9hdHRhY2htZW50XyhtYXB8 dW5tYXApX2xvY2tlZCwKPiA+ID4gICAgICBldmVyeXRoaW5nIGlzIG5vdyBoYW5kbGVkIGJhY2t3 YXJkIGNvbXBhdGlibGUKPiA+ID4gdjk6IGFsd2F5cyBjYWNoZSB3aGVuIGV4cG9ydC9pbXBvcnRl ciBkb24ndCBhZ3JlZSBvbiBkeW5hbWljIGhhbmRsaW5nCj4gPiA+IHYxMDogbWluaW1hbCBzdHls ZSBjbGVhbnVwCj4gPiA+IHYxMTogZHJvcCBhdXRvbWF0aWNhbGx5IHJlLWVudHJ5IGF2b2lkYW5j ZQo+ID4gPiB2MTI6IHJlbmFtZSBjYWxsYmFjayB0byBtb3ZlX25vdGlmeQo+ID4gPiB2MTM6IGFk ZCBtaWdodF9sb2NrIGluIGFwcHJvcHJpYXRlIHBsYWNlcwo+ID4gdjE0IHdpdGggZG1hYnVmLT5s b2NrIGdvbmU/Cj4gCj4gU28ganVzdCBiYWNrIGZyb20gdmFjYXRpb24gYW5kIGRvdWJsZSBjaGVj a2VkIHRoYXQuIEl0IGFsbW9zdCB3b3JrcyBidXQgbm90Cj4gcXVpdGUgeWV0IGJlY2F1c2Ugd2Ug c3RpbGwgbmVlZCB0aGUgbG9jayB0byBwcm90ZWN0ZWQgYWdhaW5zdCBjb25jdXJyZW50Cj4gdm1h cCBvcGVyYXRpb25zLgo+IAo+IEFuZCBJJ20gbm90IHN1cmUgeWV0IGlmIHdlIGNhbiB1c2UgdGhl IHJlc2VydmF0aW9uIG9iamVjdCB0aGVyZSBhcyB3ZWxsLgo+IEdvaW5nIHRvIGRvIHRyeSBpbiBh IHNlcGFyYXRlIHBhdGNoIGFmdGVyIHRoaXMgb25lIGxhbmRlZC4KPiAKPiA+IAo+ID4gQWxzbyBJ IGxvb2tlZCBhdCBDSSByZXN1bHRzIGFuZCBzdHVmZiwgSSBndWVzcyB5b3UgaW5kZWVkIGRpZG4n dCBicmVhayB0aGUKPiA+IHdvcmxkIGJlY2F1c2UgQ2hyaXMgV2lsc29uIGhhcyBmYXVnaHQgYmFj ayBzdHJ1Y3RfbXV0ZXggZmFyIGVub3VnaCBieSBub3cuCj4gPiAKPiA+IE90aGVyIGlzc3VlIGlz IHRoYXQgc2luY2UgMiB3ZWVrcyBvciBzbyBvdXIgQ0kgc3RhcnRlZCBmaWx0ZXJpbmcgYWxsCj4g PiBsb2NrZGVwIHNwbGF0cywgc28geW91IG5lZWQgdG8gZGlnIGludG8gcmVzdWx0cyB5b3Vyc2Vs Zi4KPiA+IAo+ID4gYnR3IG9uIHRoYXQsIEkgdGhpbmsgaW4gdGhlIGVuZCB0aGUgcmVzZXJ2YXRp b25fb2JqIGxvY2tpbmcgd2lsbCBhdCBiZXN0Cj4gPiBiZSBjb25zaXN0ZW50IGJldHdlZW4gYW1k Z3B1IGFuZCBpOTE1OiBJIGp1c3QgcmVtZW1iZXJlZCB0aGF0IGFsbCBvdGhlcgo+ID4gdHRtIGRy aXZlcnMgaGF2ZSB0aGUgbW1hcF9zZW0gdnMgcmVzdl9vYmogbG9ja2luZyB0aGUgd3Jvbmcgd2F5 IHJvdW5kLCBhbmQKPiA+IHRoZSB0cnlsb2NrIGluIHR0bV9ib19mYXVsdC4gU28gdGhhdCBwYXJ0 IGFsb25lIGlzIGhvcGVsZXNzLCBidXQgSSBndWVzcwo+ID4gc2luY2UgcmFkZW9uLmtvIGlzIGFi YW5kb253YXJlIG5vIG9uZSB3aWxsIGV2ZXIgZml4IHRoYXQuCj4gPiAKPiA+IFNvIEkgdGhpbmsg aW4gdGhlIGVuZCBpdCBib2lscyBkb3duIHRvIHdoZXRoZXIgdGhhdCdzIGdvb2QgZW5vdWdoIHRv IGxhbmQKPiA+IGl0LCBvciBub3QuCj4gCj4gV2VsbCBjYW4geW91IGdpdmUgbWUgYW4gcmIgdGhl bj8gSSBtZWFuIGF0IHNvbWUgcG9pbnQgSSBoYXZlIHRvIHB1c2ggaXQgdG8KPiBkcm0tbWlzYy1u ZXh0LgoKV2VsbCBteSBtYWlsIGhlcmUgcHJlY2VlZGVkIHRoZSBlbnRpcmUgYW1ka2ZkIGV2aWN0 aW9uX2ZlbmNlIGRpc2N1c3Npb24uCldpdGggdGhhdCBJJ20gbm90IHN1cmUgYW55bW9yZSwgc2lu Y2Ugd2UgZG9uJ3QgcmVhbGx5IG5lZWQgdHdvIGFwcHJvYWNoZXMKb2YgdGhlIHNhbWUgdGhpbmcu IEFuZCBpZiB0aGUgcGxhbiBpcyB0byBtb3ZlIGFtZGtmZCBvdmVyIGZyb20gdGhlCmV2aWN0aW9u X2ZlbmNlIHRyaWNrIHRvIHVzaW5nIHRoZSBpbnZhbGlkYXRlIGNhbGxiYWNrIGhlcmUsIHRoZW4g SSB0aGluawp3ZSBtaWdodCBuZWVkIHNvbWUgY2xhcmlmaWNhdGlvbnMgb24gd2hhdCBleGFjdGx5 IHRoYXQgbWVhbnMuCi1EYW5pZWwKCj4gCj4gQ2hyaXN0aWFuLgo+IAo+ID4gLURhbmllbAo+ID4g Cj4gPiA+IFNpZ25lZC1vZmYtYnk6IENocmlzdGlhbiBLw7ZuaWcgPGNocmlzdGlhbi5rb2VuaWdA YW1kLmNvbT4KPiA+ID4gLS0tCj4gPiA+ICAgZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYyB8IDE4 MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQo+ID4gPiAgIGluY2x1ZGUv bGludXgvZG1hLWJ1Zi5oICAgfCAxMDggKysrKysrKysrKysrKysrKysrKystLQo+ID4gPiAgIDIg ZmlsZXMgY2hhbmdlZCwgMjc3IGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQo+ID4gPiAK PiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMgYi9kcml2ZXJzL2Rt YS1idWYvZG1hLWJ1Zi5jCj4gPiA+IGluZGV4IDZjMTVkZWI1ZDRhZC4uYmQ4NjExZmEyY2ZhIDEw MDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jCj4gPiA+ICsrKyBiL2Ry aXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMKPiA+ID4gQEAgLTUzMSw2ICs1MzEsOSBAQCBzdHJ1Y3Qg ZG1hX2J1ZiAqZG1hX2J1Zl9leHBvcnQoY29uc3Qgc3RydWN0IGRtYV9idWZfZXhwb3J0X2luZm8g KmV4cF9pbmZvKQo+ID4gPiAgIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cj4gPiA+ICAgCX0K PiA+ID4gKwlpZiAoV0FSTl9PTihleHBfaW5mby0+b3BzLT5jYWNoZV9zZ3RfbWFwcGluZyAmJiBl eHBfaW5mby0+b3BzLT5waW4pKQo+ID4gPiArCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPiA+ ID4gKwo+ID4gPiAgIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KGV4cF9pbmZvLT5vd25lcikpCj4gPiA+ ICAgCQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKPiA+ID4gQEAgLTY1MSwxMCArNjU0LDEyIEBA IHZvaWQgZG1hX2J1Zl9wdXQoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZikKPiA+ID4gICBFWFBPUlRf U1lNQk9MX0dQTChkbWFfYnVmX3B1dCk7Cj4gPiA+ICAgLyoqCj4gPiA+IC0gKiBkbWFfYnVmX2F0 dGFjaCAtIEFkZCB0aGUgZGV2aWNlIHRvIGRtYV9idWYncyBhdHRhY2htZW50cyBsaXN0OyBvcHRp b25hbGx5LAo+ID4gPiArICogZG1hX2J1Zl9keW5hbWljX2F0dGFjaCAtIEFkZCB0aGUgZGV2aWNl IHRvIGRtYV9idWYncyBhdHRhY2htZW50cyBsaXN0OyBvcHRpb25hbGx5LAo+ID4gPiAgICAqIGNh bGxzIGF0dGFjaCgpIG9mIGRtYV9idWZfb3BzIHRvIGFsbG93IGRldmljZS1zcGVjaWZpYyBhdHRh Y2ggZnVuY3Rpb25hbGl0eQo+ID4gPiAtICogQGRtYWJ1ZjoJW2luXQlidWZmZXIgdG8gYXR0YWNo IGRldmljZSB0by4KPiA+ID4gLSAqIEBkZXY6CVtpbl0JZGV2aWNlIHRvIGJlIGF0dGFjaGVkLgo+ ID4gPiArICogQGRtYWJ1ZjoJCVtpbl0JYnVmZmVyIHRvIGF0dGFjaCBkZXZpY2UgdG8uCj4gPiA+ ICsgKiBAZGV2OgkJW2luXQlkZXZpY2UgdG8gYmUgYXR0YWNoZWQuCj4gPiA+ICsgKiBAaW1wb3J0 ZXJfb3BzCVtpbl0JaW1wb3J0ZXIgb3BlcmF0aW9ucyBmb3IgdGhlIGF0dGFjaG1lbnQKPiA+ID4g KyAqIEBpbXBvcnRlcl9wcml2CVtpbl0JaW1wb3J0ZXIgcHJpdmF0ZSBwb2ludGVyIGZvciB0aGUg YXR0YWNobWVudAo+ID4gPiAgICAqCj4gPiA+ICAgICogUmV0dXJucyBzdHJ1Y3QgZG1hX2J1Zl9h dHRhY2htZW50IHBvaW50ZXIgZm9yIHRoaXMgYXR0YWNobWVudC4gQXR0YWNobWVudHMKPiA+ID4g ICAgKiBtdXN0IGJlIGNsZWFuZWQgdXAgYnkgY2FsbGluZyBkbWFfYnVmX2RldGFjaCgpLgo+ID4g PiBAQCAtNjY4LDggKzY3MywxMCBAQCBFWFBPUlRfU1lNQk9MX0dQTChkbWFfYnVmX3B1dCk7Cj4g PiA+ICAgICogYWNjZXNzaWJsZSB0byBAZGV2LCBhbmQgY2Fubm90IGJlIG1vdmVkIHRvIGEgbW9y ZSBzdWl0YWJsZSBwbGFjZS4gVGhpcyBpcwo+ID4gPiAgICAqIGluZGljYXRlZCB3aXRoIHRoZSBl cnJvciBjb2RlIC1FQlVTWS4KPiA+ID4gICAgKi8KPiA+ID4gLXN0cnVjdCBkbWFfYnVmX2F0dGFj aG1lbnQgKmRtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCj4gPiA+IC0JCQkJ CSAgc3RydWN0IGRldmljZSAqZGV2KQo+ID4gPiArc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAq Cj4gPiA+ICtkbWFfYnVmX2R5bmFtaWNfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIHN0 cnVjdCBkZXZpY2UgKmRldiwKPiA+ID4gKwkJICAgICAgIGNvbnN0IHN0cnVjdCBkbWFfYnVmX2F0 dGFjaF9vcHMgKmltcG9ydGVyX29wcywKPiA+ID4gKwkJICAgICAgIHZvaWQgKmltcG9ydGVyX3By aXYpCj4gPiA+ICAgewo+ID4gPiAgIAlzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2g7 Cj4gPiA+ICAgCWludCByZXQ7Cj4gPiA+IEBAIC02ODMsNiArNjkwLDggQEAgc3RydWN0IGRtYV9i dWZfYXR0YWNobWVudCAqZG1hX2J1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKPiA+ ID4gICAJYXR0YWNoLT5kZXYgPSBkZXY7Cj4gPiA+ICAgCWF0dGFjaC0+ZG1hYnVmID0gZG1hYnVm Owo+ID4gPiArCWF0dGFjaC0+aW1wb3J0ZXJfb3BzID0gaW1wb3J0ZXJfb3BzOwo+ID4gPiArCWF0 dGFjaC0+aW1wb3J0ZXJfcHJpdiA9IGltcG9ydGVyX3ByaXY7Cj4gPiA+ICAgCW11dGV4X2xvY2so JmRtYWJ1Zi0+bG9jayk7Cj4gPiA+IEBAIC02OTEsMTYgKzcwMCw3MiBAQCBzdHJ1Y3QgZG1hX2J1 Zl9hdHRhY2htZW50ICpkbWFfYnVmX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAo+ID4g PiAgIAkJaWYgKHJldCkKPiA+ID4gICAJCQlnb3RvIGVycl9hdHRhY2g7Cj4gPiA+ICAgCX0KPiA+ ID4gKwlyZXNlcnZhdGlvbl9vYmplY3RfbG9jayhkbWFidWYtPnJlc3YsIE5VTEwpOwo+ID4gPiAg IAlsaXN0X2FkZCgmYXR0YWNoLT5ub2RlLCAmZG1hYnVmLT5hdHRhY2htZW50cyk7Cj4gPiA+ICsJ cmVzZXJ2YXRpb25fb2JqZWN0X3VubG9jayhkbWFidWYtPnJlc3YpOwo+ID4gPiAgIAltdXRleF91 bmxvY2soJmRtYWJ1Zi0+bG9jayk7Cj4gPiA+ICsJLyogV2hlbiBlaXRoZXIgdGhlIGltcG9ydGVy IG9yIHRoZSBleHBvcnRlciBjYW4ndCBoYW5kbGUgZHluYW1pYwo+ID4gPiArCSAqIG1hcHBpbmdz IHdlIGNhY2hlIHRoZSBtYXBwaW5nIGhlcmUgdG8gYXZvaWQgaXNzdWVzIHdpdGggdGhlCj4gPiA+ ICsJICogcmVzZXJ2YXRpb24gb2JqZWN0IGxvY2suCj4gPiA+ICsJICovCj4gPiA+ICsJaWYgKGRt YV9idWZfYXR0YWNobWVudF9pc19keW5hbWljKGF0dGFjaCkgIT0KPiA+ID4gKwkgICAgZG1hX2J1 Zl9pc19keW5hbWljKGRtYWJ1ZikpIHsKPiA+ID4gKwkJc3RydWN0IHNnX3RhYmxlICpzZ3Q7Cj4g PiA+ICsKPiA+ID4gKwkJaWYgKGRtYV9idWZfaXNfZHluYW1pYyhhdHRhY2gtPmRtYWJ1ZikpIHsK PiA+ID4gKwkJCXJlc2VydmF0aW9uX29iamVjdF9sb2NrKGF0dGFjaC0+ZG1hYnVmLT5yZXN2LCBO VUxMKTsKPiA+ID4gKwkJCXJldCA9IGRtYV9idWZfcGluKGF0dGFjaCk7Cj4gPiA+ICsJCQlpZiAo cmV0KQo+ID4gPiArCQkJCWdvdG8gZXJyX3VubG9jazsKPiA+ID4gKwkJfQo+ID4gPiArCj4gPiA+ ICsJCXNndCA9IGRtYWJ1Zi0+b3BzLT5tYXBfZG1hX2J1ZihhdHRhY2gsIERNQV9CSURJUkVDVElP TkFMKTsKPiA+ID4gKwkJaWYgKCFzZ3QpCj4gPiA+ICsJCQlzZ3QgPSBFUlJfUFRSKC1FTk9NRU0p Owo+ID4gPiArCQlpZiAoSVNfRVJSKHNndCkpIHsKPiA+ID4gKwkJCXJldCA9IFBUUl9FUlIoc2d0 KTsKPiA+ID4gKwkJCWdvdG8gZXJyX3VucGluOwo+ID4gPiArCQl9Cj4gPiA+ICsJCWlmIChkbWFf YnVmX2lzX2R5bmFtaWMoYXR0YWNoLT5kbWFidWYpKQo+ID4gPiArCQkJcmVzZXJ2YXRpb25fb2Jq ZWN0X3VubG9jayhhdHRhY2gtPmRtYWJ1Zi0+cmVzdik7Cj4gPiA+ICsJCWF0dGFjaC0+c2d0ID0g c2d0Owo+ID4gPiArCQlhdHRhY2gtPmRpciA9IERNQV9CSURJUkVDVElPTkFMOwo+ID4gPiArCX0K PiA+ID4gKwo+ID4gPiAgIAlyZXR1cm4gYXR0YWNoOwo+ID4gPiAgIGVycl9hdHRhY2g6Cj4gPiA+ ICAgCWtmcmVlKGF0dGFjaCk7Cj4gPiA+ICAgCW11dGV4X3VubG9jaygmZG1hYnVmLT5sb2NrKTsK PiA+ID4gICAJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiA+ID4gKwo+ID4gPiArZXJyX3VucGluOgo+ ID4gPiArCWlmIChkbWFfYnVmX2lzX2R5bmFtaWMoYXR0YWNoLT5kbWFidWYpKQo+ID4gPiArCQlk bWFfYnVmX3VucGluKGF0dGFjaCk7Cj4gPiA+ICsKPiA+ID4gK2Vycl91bmxvY2s6Cj4gPiA+ICsJ aWYgKGRtYV9idWZfaXNfZHluYW1pYyhhdHRhY2gtPmRtYWJ1ZikpCj4gPiA+ICsJCXJlc2VydmF0 aW9uX29iamVjdF91bmxvY2soYXR0YWNoLT5kbWFidWYtPnJlc3YpOwo+ID4gPiArCj4gPiA+ICsJ ZG1hX2J1Zl9kZXRhY2goZG1hYnVmLCBhdHRhY2gpOwo+ID4gPiArCXJldHVybiBFUlJfUFRSKHJl dCk7Cj4gPiA+ICt9Cj4gPiA+ICtFWFBPUlRfU1lNQk9MX0dQTChkbWFfYnVmX2R5bmFtaWNfYXR0 YWNoKTsKPiA+ID4gKwo+ID4gPiArLyoqCj4gPiA+ICsgKiBkbWFfYnVmX2F0dGFjaCAtIFdyYXBw ZXIgZm9yIGRtYV9idWZfZHluYW1pY19hdHRhY2gKPiA+ID4gKyAqIEBkbWFidWY6CVtpbl0JYnVm ZmVyIHRvIGF0dGFjaCBkZXZpY2UgdG8uCj4gPiA+ICsgKiBAZGV2OglbaW5dCWRldmljZSB0byBi ZSBhdHRhY2hlZC4KPiA+ID4gKyAqCj4gPiA+ICsgKiBXcmFwcGVyIHRvIGNhbGwgZG1hX2J1Zl9k eW5hbWljX2F0dGFjaCgpIGZvciBkcml2ZXJzIHdoaWNoIHN0aWxsIHVzZSBhIHN0YXRpYwo+ID4g PiArICogbWFwcGluZy4KPiA+ID4gKyAqLwo+ID4gPiArc3RydWN0IGRtYV9idWZfYXR0YWNobWVu dCAqZG1hX2J1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKPiA+ID4gKwkJCQkJICBz dHJ1Y3QgZGV2aWNlICpkZXYpCj4gPiA+ICt7Cj4gPiA+ICsJcmV0dXJuIGRtYV9idWZfZHluYW1p Y19hdHRhY2goZG1hYnVmLCBkZXYsIE5VTEwsIE5VTEwpOwo+ID4gPiAgIH0KPiA+ID4gICBFWFBP UlRfU1lNQk9MX0dQTChkbWFfYnVmX2F0dGFjaCk7Cj4gPiA+IEBAIC03MTcsMTEgKzc4MiwyMiBA QCB2b2lkIGRtYV9idWZfZGV0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIHN0cnVjdCBkbWFf YnVmX2F0dGFjaG1lbnQgKmF0dGFjaCkKPiA+ID4gICAJaWYgKFdBUk5fT04oIWRtYWJ1ZiB8fCAh YXR0YWNoKSkKPiA+ID4gICAJCXJldHVybjsKPiA+ID4gLQlpZiAoYXR0YWNoLT5zZ3QpCj4gPiA+ ICsJaWYgKGF0dGFjaC0+c2d0KSB7Cj4gPiA+ICsJCWlmIChkbWFfYnVmX2lzX2R5bmFtaWMoYXR0 YWNoLT5kbWFidWYpKQo+ID4gPiArCQkJcmVzZXJ2YXRpb25fb2JqZWN0X2xvY2soYXR0YWNoLT5k bWFidWYtPnJlc3YsIE5VTEwpOwo+ID4gPiArCj4gPiA+ICAgCQlkbWFidWYtPm9wcy0+dW5tYXBf ZG1hX2J1ZihhdHRhY2gsIGF0dGFjaC0+c2d0LCBhdHRhY2gtPmRpcik7Cj4gPiA+ICsJCWlmIChk bWFfYnVmX2lzX2R5bmFtaWMoYXR0YWNoLT5kbWFidWYpKSB7Cj4gPiA+ICsJCQlkbWFfYnVmX3Vu cGluKGF0dGFjaCk7Cj4gPiA+ICsJCQlyZXNlcnZhdGlvbl9vYmplY3RfdW5sb2NrKGF0dGFjaC0+ ZG1hYnVmLT5yZXN2KTsKPiA+ID4gKwkJfQo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiAgIAltdXRl eF9sb2NrKCZkbWFidWYtPmxvY2spOwo+ID4gPiArCXJlc2VydmF0aW9uX29iamVjdF9sb2NrKGRt YWJ1Zi0+cmVzdiwgTlVMTCk7Cj4gPiA+ICAgCWxpc3RfZGVsKCZhdHRhY2gtPm5vZGUpOwo+ID4g PiArCXJlc2VydmF0aW9uX29iamVjdF91bmxvY2soZG1hYnVmLT5yZXN2KTsKPiA+ID4gICAJaWYg KGRtYWJ1Zi0+b3BzLT5kZXRhY2gpCj4gPiA+ICAgCQlkbWFidWYtPm9wcy0+ZGV0YWNoKGRtYWJ1 ZiwgYXR0YWNoKTsKPiA+ID4gQEAgLTczMCw2ICs4MDYsNDQgQEAgdm9pZCBkbWFfYnVmX2RldGFj aChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRh Y2gpCj4gPiA+ICAgfQo+ID4gPiAgIEVYUE9SVF9TWU1CT0xfR1BMKGRtYV9idWZfZGV0YWNoKTsK PiA+ID4gKy8qKgo+ID4gPiArICogZG1hX2J1Zl9waW4gLSBMb2NrIGRvd24gdGhlIERNQS1idWYK PiA+ID4gKyAqCj4gPiA+ICsgKiBAYXR0YWNoOglbaW5dCWF0dGFjaG1lbnQgd2hpY2ggc2hvdWxk IGJlIHBpbm5lZAo+ID4gPiArICoKPiA+ID4gKyAqIFJldHVybnM6Cj4gPiA+ICsgKiAwIG9uIHN1 Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KPiA+ID4gKyAqLwo+ID4gPiAr aW50IGRtYV9idWZfcGluKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCkKPiA+ID4g K3sKPiA+ID4gKwlzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmID0gYXR0YWNoLT5kbWFidWY7Cj4gPiA+ ICsJaW50IHJldCA9IDA7Cj4gPiA+ICsKPiA+ID4gKwlyZXNlcnZhdGlvbl9vYmplY3RfYXNzZXJ0 X2hlbGQoZG1hYnVmLT5yZXN2KTsKPiA+ID4gKwo+ID4gPiArCWlmIChkbWFidWYtPm9wcy0+cGlu KQo+ID4gPiArCQlyZXQgPSBkbWFidWYtPm9wcy0+cGluKGF0dGFjaCk7Cj4gPiA+ICsKPiA+ID4g KwlyZXR1cm4gcmV0Owo+ID4gPiArfQo+ID4gPiArRVhQT1JUX1NZTUJPTF9HUEwoZG1hX2J1Zl9w aW4pOwo+ID4gPiArCj4gPiA+ICsvKioKPiA+ID4gKyAqIGRtYV9idWZfdW5waW4gLSBSZW1vdmUg bG9jayBmcm9tIERNQS1idWYKPiA+ID4gKyAqCj4gPiA+ICsgKiBAYXR0YWNoOglbaW5dCWF0dGFj aG1lbnQgd2hpY2ggc2hvdWxkIGJlIHVucGlubmVkCj4gPiA+ICsgKi8KPiA+ID4gK3ZvaWQgZG1h X2J1Zl91bnBpbihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpCj4gPiA+ICt7Cj4g PiA+ICsJc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiA9IGF0dGFjaC0+ZG1hYnVmOwo+ID4gPiArCj4g PiA+ICsJcmVzZXJ2YXRpb25fb2JqZWN0X2Fzc2VydF9oZWxkKGRtYWJ1Zi0+cmVzdik7Cj4gPiA+ ICsKPiA+ID4gKwlpZiAoZG1hYnVmLT5vcHMtPnVucGluKQo+ID4gPiArCQlkbWFidWYtPm9wcy0+ dW5waW4oYXR0YWNoKTsKPiA+ID4gK30KPiA+ID4gK0VYUE9SVF9TWU1CT0xfR1BMKGRtYV9idWZf dW5waW4pOwo+ID4gPiArCj4gPiA+ICAgLyoqCj4gPiA+ICAgICogZG1hX2J1Zl9tYXBfYXR0YWNo bWVudCAtIFJldHVybnMgdGhlIHNjYXR0ZXJsaXN0IHRhYmxlIG9mIHRoZSBhdHRhY2htZW50Owo+ ID4gPiAgICAqIG1hcHBlZCBpbnRvIF9kZXZpY2VfIGFkZHJlc3Mgc3BhY2UuIElzIGEgd3JhcHBl ciBmb3IgbWFwX2RtYV9idWYoKSBvZiB0aGUKPiA+ID4gQEAgLTc0OSw2ICs4NjMsNyBAQCBzdHJ1 Y3Qgc2dfdGFibGUgKmRtYV9idWZfbWFwX2F0dGFjaG1lbnQoc3RydWN0IGRtYV9idWZfYXR0YWNo bWVudCAqYXR0YWNoLAo+ID4gPiAgIAkJCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0 aW9uKQo+ID4gPiAgIHsKPiA+ID4gICAJc3RydWN0IHNnX3RhYmxlICpzZ190YWJsZTsKPiA+ID4g KwlpbnQgcjsKPiA+ID4gICAJbWlnaHRfc2xlZXAoKTsKPiA+ID4gQEAgLTc2NywxMCArODgyLDMx IEBAIHN0cnVjdCBzZ190YWJsZSAqZG1hX2J1Zl9tYXBfYXR0YWNobWVudChzdHJ1Y3QgZG1hX2J1 Zl9hdHRhY2htZW50ICphdHRhY2gsCj4gPiA+ICAgCQlyZXR1cm4gYXR0YWNoLT5zZ3Q7Cj4gPiA+ ICAgCX0KPiA+ID4gKwlpZiAoZG1hX2J1Zl9hdHRhY2htZW50X2lzX2R5bmFtaWMoYXR0YWNoKSkg ewo+ID4gPiArCQlyZXNlcnZhdGlvbl9vYmplY3RfYXNzZXJ0X2hlbGQoYXR0YWNoLT5kbWFidWYt PnJlc3YpOwo+ID4gPiArCj4gPiA+ICsJfSBlbHNlIGlmIChkbWFfYnVmX2lzX2R5bmFtaWMoYXR0 YWNoLT5kbWFidWYpKSB7Cj4gPiA+ICsJCXJlc2VydmF0aW9uX29iamVjdF9sb2NrKGF0dGFjaC0+ ZG1hYnVmLT5yZXN2LCBOVUxMKTsKPiA+ID4gKwkJciA9IGRtYV9idWZfcGluKGF0dGFjaCk7Cj4g PiA+ICsJCWlmIChyKSB7Cj4gPiA+ICsJCQlyZXNlcnZhdGlvbl9vYmplY3RfdW5sb2NrKGF0dGFj aC0+ZG1hYnVmLT5yZXN2KTsKPiA+ID4gKwkJCXJldHVybiBFUlJfUFRSKHIpOwo+ID4gPiArCQl9 Cj4gPiA+ICsJfSBlbHNlIHsKPiA+ID4gKwkJbWlnaHRfbG9jaygmYXR0YWNoLT5kbWFidWYtPnJl c3YtPmxvY2suYmFzZSk7Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICAgCXNnX3RhYmxlID0gYXR0 YWNoLT5kbWFidWYtPm9wcy0+bWFwX2RtYV9idWYoYXR0YWNoLCBkaXJlY3Rpb24pOwo+ID4gPiAg IAlpZiAoIXNnX3RhYmxlKQo+ID4gPiAgIAkJc2dfdGFibGUgPSBFUlJfUFRSKC1FTk9NRU0pOwo+ ID4gPiArCWlmICghZG1hX2J1Zl9hdHRhY2htZW50X2lzX2R5bmFtaWMoYXR0YWNoKSAmJgo+ID4g PiArCSAgICBkbWFfYnVmX2lzX2R5bmFtaWMoYXR0YWNoLT5kbWFidWYpKSB7Cj4gPiA+ICsJCWlm IChJU19FUlIoc2dfdGFibGUpKQo+ID4gPiArCQkJZG1hX2J1Zl91bnBpbihhdHRhY2gpOwo+ID4g PiArCQlyZXNlcnZhdGlvbl9vYmplY3RfdW5sb2NrKGF0dGFjaC0+ZG1hYnVmLT5yZXN2KTsKPiA+ ID4gKwl9Cj4gPiA+ICsKPiA+ID4gICAJaWYgKCFJU19FUlIoc2dfdGFibGUpICYmIGF0dGFjaC0+ ZG1hYnVmLT5vcHMtPmNhY2hlX3NndF9tYXBwaW5nKSB7Cj4gPiA+ICAgCQlhdHRhY2gtPnNndCA9 IHNnX3RhYmxlOwo+ID4gPiAgIAkJYXR0YWNoLT5kaXIgPSBkaXJlY3Rpb247Cj4gPiA+IEBAIC04 MDIsMTAgKzkzOCw0MyBAQCB2b2lkIGRtYV9idWZfdW5tYXBfYXR0YWNobWVudChzdHJ1Y3QgZG1h X2J1Zl9hdHRhY2htZW50ICphdHRhY2gsCj4gPiA+ICAgCWlmIChhdHRhY2gtPnNndCA9PSBzZ190 YWJsZSkKPiA+ID4gICAJCXJldHVybjsKPiA+ID4gKwlpZiAoZG1hX2J1Zl9hdHRhY2htZW50X2lz X2R5bmFtaWMoYXR0YWNoKSkKPiA+ID4gKwkJcmVzZXJ2YXRpb25fb2JqZWN0X2Fzc2VydF9oZWxk KGF0dGFjaC0+ZG1hYnVmLT5yZXN2KTsKPiA+ID4gKwllbHNlIGlmIChkbWFfYnVmX2lzX2R5bmFt aWMoYXR0YWNoLT5kbWFidWYpKQo+ID4gPiArCQlyZXNlcnZhdGlvbl9vYmplY3RfbG9jayhhdHRh Y2gtPmRtYWJ1Zi0+cmVzdiwgTlVMTCk7Cj4gPiA+ICsJZWxzZQo+ID4gPiArCQltaWdodF9sb2Nr KCZhdHRhY2gtPmRtYWJ1Zi0+cmVzdi0+bG9jay5iYXNlKTsKPiA+ID4gKwo+ID4gPiAgIAlhdHRh Y2gtPmRtYWJ1Zi0+b3BzLT51bm1hcF9kbWFfYnVmKGF0dGFjaCwgc2dfdGFibGUsIGRpcmVjdGlv bik7Cj4gPiA+ICsKPiA+ID4gKwlpZiAoZG1hX2J1Zl9pc19keW5hbWljKGF0dGFjaC0+ZG1hYnVm KSAmJgo+ID4gPiArCSAgICAhZG1hX2J1Zl9hdHRhY2htZW50X2lzX2R5bmFtaWMoYXR0YWNoKSkg ewo+ID4gPiArCQlkbWFfYnVmX3VucGluKGF0dGFjaCk7Cj4gPiA+ICsJCXJlc2VydmF0aW9uX29i amVjdF91bmxvY2soYXR0YWNoLT5kbWFidWYtPnJlc3YpOwo+ID4gPiArCX0KPiA+ID4gICB9Cj4g PiA+ICAgRVhQT1JUX1NZTUJPTF9HUEwoZG1hX2J1Zl91bm1hcF9hdHRhY2htZW50KTsKPiA+ID4g Ky8qKgo+ID4gPiArICogZG1hX2J1Zl9tb3ZlX25vdGlmeSAtIG5vdGlmeSBhdHRhY2htZW50cyB0 aGF0IERNQS1idWYgaXMgbW92aW5nCj4gPiA+ICsgKgo+ID4gPiArICogQGRtYWJ1ZjoJW2luXQli dWZmZXIgd2hpY2ggaXMgbW92aW5nCj4gPiA+ICsgKgo+ID4gPiArICogSW5mb3JtcyBhbGwgYXR0 YWNobWVuc3QgdGhhdCB0aGV5IG5lZWQgdG8gZGVzdHJveSBhbmQgcmVjcmVhdGVkIGFsbCB0aGVp cgo+ID4gPiArICogbWFwcGluZ3MuCj4gPiA+ICsgKi8KPiA+ID4gK3ZvaWQgZG1hX2J1Zl9tb3Zl X25vdGlmeShzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCBk bWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaDsKPiA+ID4gKwo+ID4gPiArCXJlc2VydmF0aW9uX29i amVjdF9hc3NlcnRfaGVsZChkbWFidWYtPnJlc3YpOwo+ID4gPiArCj4gPiA+ICsJbGlzdF9mb3Jf ZWFjaF9lbnRyeShhdHRhY2gsICZkbWFidWYtPmF0dGFjaG1lbnRzLCBub2RlKQo+ID4gPiArCQlp ZiAoYXR0YWNoLT5pbXBvcnRlcl9vcHMgJiYgYXR0YWNoLT5pbXBvcnRlcl9vcHMtPm1vdmVfbm90 aWZ5KQo+ID4gPiArCQkJYXR0YWNoLT5pbXBvcnRlcl9vcHMtPm1vdmVfbm90aWZ5KGF0dGFjaCk7 Cj4gPiA+ICt9Cj4gPiA+ICtFWFBPUlRfU1lNQk9MX0dQTChkbWFfYnVmX21vdmVfbm90aWZ5KTsK PiA+ID4gKwo+ID4gPiAgIC8qKgo+ID4gPiAgICAqIERPQzogY3B1IGFjY2Vzcwo+ID4gPiAgICAq Cj4gPiA+IEBAIC0xMjI1LDEwICsxMzk0LDEyIEBAIHN0YXRpYyBpbnQgZG1hX2J1Zl9kZWJ1Z19z aG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKQo+ID4gPiAgIAkJc2VxX3B1dHMo cywgIlx0QXR0YWNoZWQgRGV2aWNlczpcbiIpOwo+ID4gPiAgIAkJYXR0YWNoX2NvdW50ID0gMDsK PiA+ID4gKwkJcmVzZXJ2YXRpb25fb2JqZWN0X2xvY2soYnVmX29iai0+cmVzdiwgTlVMTCk7Cj4g PiA+ICAgCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGF0dGFjaF9vYmosICZidWZfb2JqLT5hdHRhY2ht ZW50cywgbm9kZSkgewo+ID4gPiAgIAkJCXNlcV9wcmludGYocywgIlx0JXNcbiIsIGRldl9uYW1l KGF0dGFjaF9vYmotPmRldikpOwo+ID4gPiAgIAkJCWF0dGFjaF9jb3VudCsrOwo+ID4gPiAgIAkJ fQo+ID4gPiArCQlyZXNlcnZhdGlvbl9vYmplY3RfdW5sb2NrKGJ1Zl9vYmotPnJlc3YpOwo+ID4g PiAgIAkJc2VxX3ByaW50ZihzLCAiVG90YWwgJWQgZGV2aWNlcyBhdHRhY2hlZFxuXG4iLAo+ID4g PiAgIAkJCQlhdHRhY2hfY291bnQpOwo+ID4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9k bWEtYnVmLmggYi9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaAo+ID4gPiBpbmRleCAwMWFkNWI5NDJh NmYuLmNjYWQyZmMxZjY0MCAxMDA2NDQKPiA+ID4gLS0tIGEvaW5jbHVkZS9saW51eC9kbWEtYnVm LmgKPiA+ID4gKysrIGIvaW5jbHVkZS9saW51eC9kbWEtYnVmLmgKPiA+ID4gQEAgLTkyLDE0ICs5 Miw0MCBAQCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgewo+ID4gPiAgIAkgKi8KPiA+ID4gICAJdm9pZCAo KmRldGFjaCkoc3RydWN0IGRtYV9idWYgKiwgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqKTsK PiA+ID4gKwkvKioKPiA+ID4gKwkgKiBAcGluOgo+ID4gPiArCSAqCj4gPiA+ICsJICogVGhpcyBp cyBjYWxsZWQgYnkgZG1hX2J1Zl9waW4gYW5kIGxldHMgdGhlIGV4cG9ydGVyIGtub3cgdGhhdCB0 aGUKPiA+ID4gKwkgKiBETUEtYnVmIGNhbid0IGJlIG1vdmVkIGFueSBtb3JlLgo+ID4gPiArCSAq Cj4gPiA+ICsJICogVGhpcyBpcyBjYWxsZWQgd2l0aCB0aGUgZG1hYnVmLT5yZXN2IG9iamVjdCBs b2NrZWQuCj4gPiA+ICsJICoKPiA+ID4gKwkgKiBUaGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsLgo+ ID4gPiArCSAqCj4gPiA+ICsJICogUmV0dXJuczoKPiA+ID4gKwkgKgo+ID4gPiArCSAqIDAgb24g c3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgo+ID4gPiArCSAqLwo+ID4g PiArCWludCAoKnBpbikoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTsKPiA+ID4g Kwo+ID4gPiArCS8qKgo+ID4gPiArCSAqIEB1bnBpbjoKPiA+ID4gKwkgKgo+ID4gPiArCSAqIFRo aXMgaXMgY2FsbGVkIGJ5IGRtYV9idWZfdW5waW4gYW5kIGxldHMgdGhlIGV4cG9ydGVyIGtub3cg dGhhdCB0aGUKPiA+ID4gKwkgKiBETUEtYnVmIGNhbiBiZSBtb3ZlZCBhZ2Fpbi4KPiA+ID4gKwkg Kgo+ID4gPiArCSAqIFRoaXMgaXMgY2FsbGVkIHdpdGggdGhlIGRtYWJ1Zi0+cmVzdiBvYmplY3Qg bG9ja2VkLgo+ID4gPiArCSAqCj4gPiA+ICsJICogVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbC4K PiA+ID4gKwkgKi8KPiA+ID4gKwl2b2lkICgqdW5waW4pKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1l bnQgKmF0dGFjaCk7Cj4gPiA+ICsKPiA+ID4gICAJLyoqCj4gPiA+ICAgCSAqIEBtYXBfZG1hX2J1 ZjoKPiA+ID4gICAJICoKPiA+ID4gICAJICogVGhpcyBpcyBjYWxsZWQgYnkgZG1hX2J1Zl9tYXBf YXR0YWNobWVudCgpIGFuZCBpcyB1c2VkIHRvIG1hcCBhCj4gPiA+ICAgCSAqIHNoYXJlZCAmZG1h X2J1ZiBpbnRvIGRldmljZSBhZGRyZXNzIHNwYWNlLCBhbmQgaXQgaXMgbWFuZGF0b3J5LiBJdAo+ ID4gPiAtCSAqIGNhbiBvbmx5IGJlIGNhbGxlZCBpZiBAYXR0YWNoIGhhcyBiZWVuIGNhbGxlZCBz dWNjZXNzZnVsbHkuIFRoaXMKPiA+ID4gLQkgKiBlc3NlbnRpYWxseSBwaW5zIHRoZSBETUEgYnVm ZmVyIGludG8gcGxhY2UsIGFuZCBpdCBjYW5ub3QgYmUgbW92ZWQKPiA+ID4gLQkgKiBhbnkgbW9y ZQo+ID4gPiArCSAqIGNhbiBvbmx5IGJlIGNhbGxlZCBpZiBAYXR0YWNoIGhhcyBiZWVuIGNhbGxl ZCBzdWNjZXNzZnVsbHkuCj4gPiA+ICAgCSAqCj4gPiA+ICAgCSAqIFRoaXMgY2FsbCBtYXkgc2xl ZXAsIGUuZy4gd2hlbiB0aGUgYmFja2luZyBzdG9yYWdlIGZpcnN0IG5lZWRzIHRvIGJlCj4gPiA+ ICAgCSAqIGFsbG9jYXRlZCwgb3IgbW92ZWQgdG8gYSBsb2NhdGlvbiBzdWl0YWJsZSBmb3IgYWxs IGN1cnJlbnRseSBhdHRhY2hlZAo+ID4gPiBAQCAtMTIwLDYgKzE0Niw5IEBAIHN0cnVjdCBkbWFf YnVmX29wcyB7Cj4gPiA+ICAgCSAqIGFueSBvdGhlciBraW5kIG9mIHNoYXJpbmcgdGhhdCB0aGUg ZXhwb3J0ZXIgbWlnaHQgd2lzaCB0byBtYWtlCj4gPiA+ICAgCSAqIGF2YWlsYWJsZSB0byBidWZm ZXItdXNlcnMuCj4gPiA+ICAgCSAqCj4gPiA+ICsJICogVGhpcyBpcyBhbHdheXMgY2FsbGVkIHdp dGggdGhlIGRtYWJ1Zi0+cmVzdiBvYmplY3QgbG9ja2VkIHdoZW4KPiA+ID4gKwkgKiB0aGUgcGlu L3VucGluIGNhbGxiYWNrcyBhcmUgaW1wbGVtZW50ZWQuCj4gPiA+ICsJICoKPiA+ID4gICAJICog UmV0dXJuczoKPiA+ID4gICAJICoKPiA+ID4gICAJICogQSAmc2dfdGFibGUgc2NhdHRlciBsaXN0 IG9mIG9yIHRoZSBiYWNraW5nIHN0b3JhZ2Ugb2YgdGhlIERNQSBidWZmZXIsCj4gPiA+IEBAIC0x MzcsOSArMTY2LDYgQEAgc3RydWN0IGRtYV9idWZfb3BzIHsKPiA+ID4gICAJICoKPiA+ID4gICAJ ICogVGhpcyBpcyBjYWxsZWQgYnkgZG1hX2J1Zl91bm1hcF9hdHRhY2htZW50KCkgYW5kIHNob3Vs ZCB1bm1hcCBhbmQKPiA+ID4gICAJICogcmVsZWFzZSB0aGUgJnNnX3RhYmxlIGFsbG9jYXRlZCBp biBAbWFwX2RtYV9idWYsIGFuZCBpdCBpcyBtYW5kYXRvcnkuCj4gPiA+IC0JICogSXQgc2hvdWxk IGFsc28gdW5waW4gdGhlIGJhY2tpbmcgc3RvcmFnZSBpZiB0aGlzIGlzIHRoZSBsYXN0IG1hcHBp bmcKPiA+ID4gLQkgKiBvZiB0aGUgRE1BIGJ1ZmZlciwgaXQgdGhlIGV4cG9ydGVyIHN1cHBvcnRz IGJhY2tpbmcgc3RvcmFnZQo+ID4gPiAtCSAqIG1pZ3JhdGlvbi4KPiA+ID4gICAJICovCj4gPiA+ ICAgCXZvaWQgKCp1bm1hcF9kbWFfYnVmKShzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICosCj4g PiA+ICAgCQkJICAgICAgc3RydWN0IHNnX3RhYmxlICosCj4gPiA+IEBAIC0zMzAsNiArMzU2LDM0 IEBAIHN0cnVjdCBkbWFfYnVmIHsKPiA+ID4gICAJfSBjYl9leGNsLCBjYl9zaGFyZWQ7Cj4gPiA+ ICAgfTsKPiA+ID4gKy8qKgo+ID4gPiArICogc3RydWN0IGRtYV9idWZfYXR0YWNoX29wcyAtIGlt cG9ydGVyIG9wZXJhdGlvbnMgZm9yIGFuIGF0dGFjaG1lbnQKPiA+ID4gKyAqIEBtb3ZlX25vdGlm eTogW29wdGlvbmFsXSBub3RpZmljYXRpb24gdGhhdCB0aGUgRE1BLWJ1ZiBpcyBtb3ZpbmcKPiA+ ID4gKyAqCj4gPiA+ICsgKiBBdHRhY2htZW50IG9wZXJhdGlvbnMgaW1wbGVtZW50ZWQgYnkgdGhl IGltcG9ydGVyLgo+ID4gPiArICovCj4gPiA+ICtzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2hfb3BzIHsK PiA+ID4gKwkvKioKPiA+ID4gKwkgKiBAbW92ZV9ub3RpZnkKPiA+ID4gKwkgKgo+ID4gPiArCSAq IElmIHRoaXMgY2FsbGJhY2sgaXMgcHJvdmlkZWQgdGhlIGZyYW1ld29yayBjYW4gYXZvaWQgcGlu bmluZyB0aGUKPiA+ID4gKwkgKiBiYWNraW5nIHN0b3JlIHdoaWxlIG1hcHBpbmdzIGV4aXN0cy4K PiA+ID4gKwkgKgo+ID4gPiArCSAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdpdGggdGhlIGxv Y2sgb2YgdGhlIHJlc2VydmF0aW9uIG9iamVjdAo+ID4gPiArCSAqIGFzc29jaWF0ZWQgd2l0aCB0 aGUgZG1hX2J1ZiBoZWxkIGFuZCB0aGUgbWFwcGluZyBmdW5jdGlvbiBtdXN0IGJlCj4gPiA+ICsJ ICogY2FsbGVkIHdpdGggdGhpcyBsb2NrIGhlbGQgYXMgd2VsbC4gVGhpcyBtYWtlcyBzdXJlIHRo YXQgbm8gbWFwcGluZwo+ID4gPiArCSAqIGlzIGNyZWF0ZWQgY29uY3VycmVudGx5IHdpdGggYW4g b25nb2luZyBtb3ZlIG9wZXJhdGlvbi4KPiA+ID4gKwkgKgo+ID4gPiArCSAqIE1hcHBpbmdzIHN0 YXkgdmFsaWQgYW5kIGFyZSBub3QgZGlyZWN0bHkgYWZmZWN0ZWQgYnkgdGhpcyBjYWxsYmFjay4K PiA+ID4gKwkgKiBCdXQgdGhlIERNQS1idWYgY2FuIG5vdyBiZSBpbiBhIGRpZmZlcmVudCBwaHlz aWNhbCBsb2NhdGlvbiwgc28gYWxsCj4gPiA+ICsJICogbWFwcGluZ3Mgc2hvdWxkIGJlIGRlc3Ry b3llZCBhbmQgcmUtY3JlYXRlZCBhcyBzb29uIGFzIHBvc3NpYmxlLgo+ID4gPiArCSAqCj4gPiA+ ICsJICogTmV3IG1hcHBpbmdzIGNhbiBiZSBjcmVhdGVkIGFmdGVyIHRoaXMgY2FsbGJhY2sgcmV0 dXJucywgYW5kIHdpbGwKPiA+ID4gKwkgKiBwb2ludCB0byB0aGUgbmV3IGxvY2F0aW9uIG9mIHRo ZSBETUEtYnVmLgo+ID4gPiArCSAqLwo+ID4gPiArCXZvaWQgKCptb3ZlX25vdGlmeSkoc3RydWN0 IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTsKPiA+ID4gK307Cj4gPiA+ICsKPiA+ID4gICAv KioKPiA+ID4gICAgKiBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50IC0gaG9sZHMgZGV2aWNlLWJ1 ZmZlciBhdHRhY2htZW50IGRhdGEKPiA+ID4gICAgKiBAZG1hYnVmOiBidWZmZXIgZm9yIHRoaXMg YXR0YWNobWVudC4KPiA+ID4gQEAgLTMzOCw2ICszOTIsOCBAQCBzdHJ1Y3QgZG1hX2J1ZiB7Cj4g PiA+ICAgICogQHNndDogY2FjaGVkIG1hcHBpbmcuCj4gPiA+ICAgICogQGRpcjogZGlyZWN0aW9u IG9mIGNhY2hlZCBtYXBwaW5nLgo+ID4gPiAgICAqIEBwcml2OiBleHBvcnRlciBzcGVjaWZpYyBh dHRhY2htZW50IGRhdGEuCj4gPiA+ICsgKiBAaW1wb3J0ZXJfb3BzOiBpbXBvcnRlciBvcGVyYXRp b25zIGZvciB0aGlzIGF0dGFjaG1lbnQuCj4gPiA+ICsgKiBAaW1wb3J0ZXJfcHJpdjogaW1wb3J0 ZXIgc3BlY2lmaWMgYXR0YWNobWVudCBkYXRhLgo+ID4gPiAgICAqCj4gPiA+ICAgICogVGhpcyBz dHJ1Y3R1cmUgaG9sZHMgdGhlIGF0dGFjaG1lbnQgaW5mb3JtYXRpb24gYmV0d2VlbiB0aGUgZG1h X2J1ZiBidWZmZXIKPiA+ID4gICAgKiBhbmQgaXRzIHVzZXIgZGV2aWNlKHMpLiBUaGUgbGlzdCBj b250YWlucyBvbmUgYXR0YWNobWVudCBzdHJ1Y3QgcGVyIGRldmljZQo+ID4gPiBAQCAtMzU1LDYg KzQxMSw5IEBAIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgewo+ID4gPiAgIAlzdHJ1Y3Qgc2df dGFibGUgKnNndDsKPiA+ID4gICAJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyOwo+ID4gPiAg IAl2b2lkICpwcml2Owo+ID4gPiArCj4gPiA+ICsJY29uc3Qgc3RydWN0IGRtYV9idWZfYXR0YWNo X29wcyAqaW1wb3J0ZXJfb3BzOwo+ID4gPiArCXZvaWQgKmltcG9ydGVyX3ByaXY7Cj4gPiA+ICAg fTsKPiA+ID4gICAvKioKPiA+ID4gQEAgLTQwNSwxMCArNDY0LDQyIEBAIHN0YXRpYyBpbmxpbmUg dm9pZCBnZXRfZG1hX2J1ZihzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKQo+ID4gPiAgIAlnZXRfZmls ZShkbWFidWYtPmZpbGUpOwo+ID4gPiAgIH0KPiA+ID4gKy8qKgo+ID4gPiArICogZG1hX2J1Zl9p c19keW5hbWljIC0gY2hlY2sgaWYgYSBETUEtYnVmIHVzZXMgZHluYW1pYyBtYXBwaW5ncy4KPiA+ ID4gKyAqIEBkbWFidWY6IHRoZSBETUEtYnVmIHRvIGNoZWNrCj4gPiA+ICsgKgo+ID4gPiArICog UmV0dXJucyB0cnVlIGlmIGEgRE1BLWJ1ZiBleHBvcnRlciB3YW50cyB0byBjcmVhdGUgZHluYW1p YyBzZyB0YWJsZSBtYXBwaW5ncwo+ID4gPiArICogZm9yIGVhY2ggYXR0YWNobWVudC4gRmFsc2Ug aWYgb25seSBhIHNpbmdsZSBzdGF0aWMgc2cgdGFibGUgc2hvdWxkIGJlIHVzZWQuCj4gPiA+ICsg Ki8KPiA+ID4gK3N0YXRpYyBpbmxpbmUgYm9vbCBkbWFfYnVmX2lzX2R5bmFtaWMoc3RydWN0IGRt YV9idWYgKmRtYWJ1ZikKPiA+ID4gK3sKPiA+ID4gKwlyZXR1cm4gISFkbWFidWYtPm9wcy0+cGlu Owo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICsvKioKPiA+ID4gKyAqIGRtYV9idWZfYXR0YWNobWVu dF9pc19keW5hbWljIC0gY2hlY2sgaWYgYSBETUEtYnVmIGF0dGFjaG1lbnQgdXNlcyBkeW5hbWlj Cj4gPiA+ICsgKiBtYXBwaW5zZwo+ID4gPiArICogQGF0dGFjaDogdGhlIERNQS1idWYgYXR0YWNo bWVudCB0byBjaGVjawo+ID4gPiArICoKPiA+ID4gKyAqIFJldHVybnMgdHJ1ZSBpZiBhIERNQS1i dWYgaW1wb3J0ZXIgd2FudHMgdG8gdXNlIGR5bmFtaWMgc2cgdGFibGUgbWFwcGluZ3MgYW5kCj4g PiA+ICsgKiBjYWxscyB0aGUgbWFwL3VubWFwIGZ1bmN0aW9ucyB3aXRoIHRoZSByZXNlcnZhdGlv biBvYmplY3QgbG9ja2VkLgo+ID4gPiArICovCj4gPiA+ICtzdGF0aWMgaW5saW5lIGJvb2wKPiA+ ID4gK2RtYV9idWZfYXR0YWNobWVudF9pc19keW5hbWljKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1l bnQgKmF0dGFjaCkKPiA+ID4gK3sKPiA+ID4gKwlyZXR1cm4gYXR0YWNoLT5pbXBvcnRlcl9vcHMg JiYgYXR0YWNoLT5pbXBvcnRlcl9vcHMtPm1vdmVfbm90aWZ5Owo+ID4gPiArfQo+ID4gPiArCj4g PiA+ICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqZG1hX2J1Zl9hdHRhY2goc3RydWN0IGRt YV9idWYgKmRtYWJ1ZiwKPiA+ID4gLQkJCQkJCQlzdHJ1Y3QgZGV2aWNlICpkZXYpOwo+ID4gPiAr CQkJCQkgIHN0cnVjdCBkZXZpY2UgKmRldik7Cj4gPiA+ICtzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2ht ZW50ICoKPiA+ID4gK2RtYV9idWZfZHluYW1pY19hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1 Ziwgc3RydWN0IGRldmljZSAqZGV2LAo+ID4gPiArCQkgICAgICAgY29uc3Qgc3RydWN0IGRtYV9i dWZfYXR0YWNoX29wcyAqaW1wb3J0ZXJfb3BzLAo+ID4gPiArCQkgICAgICAgdm9pZCAqaW1wb3J0 ZXJfcHJpdik7Cj4gPiA+ICAgdm9pZCBkbWFfYnVmX2RldGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1h YnVmLAo+ID4gPiAtCQkJCXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmRtYWJ1Zl9hdHRhY2gp Owo+ID4gPiArCQkgICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTsKPiA+ID4g K2ludCBkbWFfYnVmX3BpbihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpOwo+ID4g PiArdm9pZCBkbWFfYnVmX3VucGluKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCk7 Cj4gPiA+ICAgc3RydWN0IGRtYV9idWYgKmRtYV9idWZfZXhwb3J0KGNvbnN0IHN0cnVjdCBkbWFf YnVmX2V4cG9ydF9pbmZvICpleHBfaW5mbyk7Cj4gPiA+IEBAIC00MjAsNiArNTExLDcgQEAgc3Ry dWN0IHNnX3RhYmxlICpkbWFfYnVmX21hcF9hdHRhY2htZW50KHN0cnVjdCBkbWFfYnVmX2F0dGFj aG1lbnQgKiwKPiA+ID4gICAJCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKTsKPiA+ID4gICB2 b2lkIGRtYV9idWZfdW5tYXBfYXR0YWNobWVudChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICos IHN0cnVjdCBzZ190YWJsZSAqLAo+ID4gPiAgIAkJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbik7 Cj4gPiA+ICt2b2lkIGRtYV9idWZfbW92ZV9ub3RpZnkoc3RydWN0IGRtYV9idWYgKmRtYV9idWYp Owo+ID4gPiAgIGludCBkbWFfYnVmX2JlZ2luX2NwdV9hY2Nlc3Moc3RydWN0IGRtYV9idWYgKmRt YV9idWYsCj4gPiA+ICAgCQkJICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpOwo+ID4g PiAgIGludCBkbWFfYnVmX2VuZF9jcHVfYWNjZXNzKHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmLAo+ ID4gPiAtLSAKPiA+ID4gMi4xNy4xCj4gPiA+IAo+ID4gPiBfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwo+ID4gPiBkcmktZGV2ZWwgbWFpbGluZyBsaXN0Cj4g PiA+IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiA+ID4gaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwKPiAKCi0tIApEYW5pZWwg VmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5m ZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwph bWQtZ2Z4IG1haWxpbmcgbGlzdAphbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZng=