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: Wed, 26 Jun 2019 14:29:33 +0200 Message-ID: <20190626122933.GK12905@phenom.ffwll.local> References: <20190626122310.1498-1-christian.koenig@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20190626122310.1498-1-christian.koenig@amd.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Christian =?iso-8859-1?Q?K=F6nig?= Cc: intel-gfx@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org List-Id: amd-gfx.lists.freedesktop.org T24gV2VkLCBKdW4gMjYsIDIwMTkgYXQgMDI6MjM6MDVQTSArMDIwMCwgQ2hyaXN0aWFuIEvDtm5p ZyB3cm90ZToKPiBPbiB0aGUgZXhwb3J0ZXIgc2lkZSB3ZSBhZGQgb3B0aW9uYWwgZXhwbGljaXQg cGlubmluZyBjYWxsYmFja3MuIElmIHRob3NlCj4gY2FsbGJhY2tzIGFyZSBpbXBsZW1lbnRlZCB0 aGUgZnJhbWV3b3JrIG5vIGxvbmdlciBjYWNoZXMgc2cgdGFibGVzIGFuZCB0aGUKPiBtYXAvdW5t YXAgY2FsbGJhY2tzIGFyZSBhbHdheXMgY2FsbGVkIHdpdGggdGhlIGxvY2sgb2YgdGhlIHJlc2Vy dmF0aW9uIG9iamVjdAo+IGhlbGQuCj4gCj4gT24gdGhlIGltcG9ydGVyIHNpZGUgd2UgYWRkIGFu IG9wdGlvbmFsIGludmFsaWRhdGUgY2FsbGJhY2suIFRoaXMgY2FsbGJhY2sgaXMKPiB1c2VkIGJ5 IHRoZSBleHBvcnRlciB0byBpbmZvcm0gdGhlIGltcG9ydGVycyB0aGF0IHRoZWlyIG1hcHBpbmdz IHNob3VsZCBiZQo+IGRlc3Ryb3llZCBhcyBzb29uIGFzIHBvc3NpYmxlLgo+IAo+IFRoaXMgYWxs b3dzIHRoZSBleHBvcnRlciB0byBwcm92aWRlIHRoZSBtYXBwaW5ncyB3aXRob3V0IHRoZSBuZWVk IHRvIHBpbgo+IHRoZSBiYWNraW5nIHN0b3JlLgo+IAo+IHYyOiBkb24ndCB0cnkgdG8gaW52YWxp ZGF0ZSBtYXBwaW5ncyB3aGVuIHRoZSBjYWxsYmFjayBpcyBOVUxMLAo+ICAgICBsb2NrIHRoZSBy ZXNlcnZhdGlvbiBvYmogd2hpbGUgdXNpbmcgdGhlIGF0dGFjaG1lbnRzLAo+ICAgICBhZGQgaGVs cGVyIHRvIHNldCB0aGUgY2FsbGJhY2sKPiB2MzogbW92ZSBmbGFnIGZvciBpbnZhbGlkYXRpb24g c3VwcG9ydCBpbnRvIHRoZSBETUEtYnVmLAo+ICAgICB1c2UgbmV3IGF0dGFjaF9pbmZvIHN0cnVj dHVyZSB0byBzZXQgdGhlIGNhbGxiYWNrCj4gdjQ6IHVzZSBpbXBvcnRlcl9wcml2IGZpZWxkIGlu c3RlYWQgb2YgbWFuZ2xpbmcgZXhwb3J0ZXIgcHJpdi4KPiB2NTogZHJvcCBpbnZhbGlkYXRpb25f c3VwcG9ydGVkIGZsYWcKPiB2Njogc3F1YXNoIHRvZ2V0aGVyIHdpdGggcGluL3VucGluIGNoYW5n ZXMKPiB2NzogcGluL3VucGluIHRha2VzIGFuIGF0dGFjaG1lbnQgbm93Cj4gdjg6IG51a2UgZG1h X2J1Zl9hdHRhY2htZW50XyhtYXB8dW5tYXApX2xvY2tlZCwKPiAgICAgZXZlcnl0aGluZyBpcyBu b3cgaGFuZGxlZCBiYWNrd2FyZCBjb21wYXRpYmxlCj4gdjk6IGFsd2F5cyBjYWNoZSB3aGVuIGV4 cG9ydC9pbXBvcnRlciBkb24ndCBhZ3JlZSBvbiBkeW5hbWljIGhhbmRsaW5nCj4gdjEwOiBtaW5p bWFsIHN0eWxlIGNsZWFudXAKPiB2MTE6IGRyb3AgYXV0b21hdGljYWxseSByZS1lbnRyeSBhdm9p ZGFuY2UKPiB2MTI6IHJlbmFtZSBjYWxsYmFjayB0byBtb3ZlX25vdGlmeQo+IHYxMzogYWRkIG1p Z2h0X2xvY2sgaW4gYXBwcm9wcmlhdGUgcGxhY2VzCgp2MTQgd2l0aCBkbWFidWYtPmxvY2sgZ29u ZT8KCkFsc28gSSBsb29rZWQgYXQgQ0kgcmVzdWx0cyBhbmQgc3R1ZmYsIEkgZ3Vlc3MgeW91IGlu ZGVlZCBkaWRuJ3QgYnJlYWsgdGhlCndvcmxkIGJlY2F1c2UgQ2hyaXMgV2lsc29uIGhhcyBmYXVn aHQgYmFjayBzdHJ1Y3RfbXV0ZXggZmFyIGVub3VnaCBieSBub3cuCgpPdGhlciBpc3N1ZSBpcyB0 aGF0IHNpbmNlIDIgd2Vla3Mgb3Igc28gb3VyIENJIHN0YXJ0ZWQgZmlsdGVyaW5nIGFsbApsb2Nr ZGVwIHNwbGF0cywgc28geW91IG5lZWQgdG8gZGlnIGludG8gcmVzdWx0cyB5b3Vyc2VsZi4KCmJ0 dyBvbiB0aGF0LCBJIHRoaW5rIGluIHRoZSBlbmQgdGhlIHJlc2VydmF0aW9uX29iaiBsb2NraW5n IHdpbGwgYXQgYmVzdApiZSBjb25zaXN0ZW50IGJldHdlZW4gYW1kZ3B1IGFuZCBpOTE1OiBJIGp1 c3QgcmVtZW1iZXJlZCB0aGF0IGFsbCBvdGhlcgp0dG0gZHJpdmVycyBoYXZlIHRoZSBtbWFwX3Nl bSB2cyByZXN2X29iaiBsb2NraW5nIHRoZSB3cm9uZyB3YXkgcm91bmQsIGFuZAp0aGUgdHJ5bG9j ayBpbiB0dG1fYm9fZmF1bHQuIFNvIHRoYXQgcGFydCBhbG9uZSBpcyBob3BlbGVzcywgYnV0IEkg Z3Vlc3MKc2luY2UgcmFkZW9uLmtvIGlzIGFiYW5kb253YXJlIG5vIG9uZSB3aWxsIGV2ZXIgZml4 IHRoYXQuCgpTbyBJIHRoaW5rIGluIHRoZSBlbmQgaXQgYm9pbHMgZG93biB0byB3aGV0aGVyIHRo YXQncyBnb29kIGVub3VnaCB0byBsYW5kCml0LCBvciBub3QuCi1EYW5pZWwKCj4gCj4gU2lnbmVk LW9mZi1ieTogQ2hyaXN0aWFuIEvDtm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQuY29tPgo+IC0t LQo+ICBkcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jIHwgMTgzICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKy0tCj4gIGluY2x1ZGUvbGludXgvZG1hLWJ1Zi5oICAgfCAxMDggKysr KysrKysrKysrKysrKysrKystLQo+ICAyIGZpbGVzIGNoYW5nZWQsIDI3NyBpbnNlcnRpb25zKCsp LCAxNCBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2RtYS1i dWYuYyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMKPiBpbmRleCA2YzE1ZGViNWQ0YWQuLmJk ODYxMWZhMmNmYSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jCj4gKysr IGIvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYwo+IEBAIC01MzEsNiArNTMxLDkgQEAgc3RydWN0 IGRtYV9idWYgKmRtYV9idWZfZXhwb3J0KGNvbnN0IHN0cnVjdCBkbWFfYnVmX2V4cG9ydF9pbmZv ICpleHBfaW5mbykKPiAgCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPiAgCX0KPiAgCj4gKwlp ZiAoV0FSTl9PTihleHBfaW5mby0+b3BzLT5jYWNoZV9zZ3RfbWFwcGluZyAmJiBleHBfaW5mby0+ b3BzLT5waW4pKQo+ICsJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwo+ICsKPiAgCWlmICghdHJ5 X21vZHVsZV9nZXQoZXhwX2luZm8tPm93bmVyKSkKPiAgCQlyZXR1cm4gRVJSX1BUUigtRU5PRU5U KTsKPiAgCj4gQEAgLTY1MSwxMCArNjU0LDEyIEBAIHZvaWQgZG1hX2J1Zl9wdXQoc3RydWN0IGRt YV9idWYgKmRtYWJ1ZikKPiAgRVhQT1JUX1NZTUJPTF9HUEwoZG1hX2J1Zl9wdXQpOwo+ICAKPiAg LyoqCj4gLSAqIGRtYV9idWZfYXR0YWNoIC0gQWRkIHRoZSBkZXZpY2UgdG8gZG1hX2J1ZidzIGF0 dGFjaG1lbnRzIGxpc3Q7IG9wdGlvbmFsbHksCj4gKyAqIGRtYV9idWZfZHluYW1pY19hdHRhY2gg LSBBZGQgdGhlIGRldmljZSB0byBkbWFfYnVmJ3MgYXR0YWNobWVudHMgbGlzdDsgb3B0aW9uYWxs eSwKPiAgICogY2FsbHMgYXR0YWNoKCkgb2YgZG1hX2J1Zl9vcHMgdG8gYWxsb3cgZGV2aWNlLXNw ZWNpZmljIGF0dGFjaCBmdW5jdGlvbmFsaXR5Cj4gLSAqIEBkbWFidWY6CVtpbl0JYnVmZmVyIHRv IGF0dGFjaCBkZXZpY2UgdG8uCj4gLSAqIEBkZXY6CVtpbl0JZGV2aWNlIHRvIGJlIGF0dGFjaGVk Lgo+ICsgKiBAZG1hYnVmOgkJW2luXQlidWZmZXIgdG8gYXR0YWNoIGRldmljZSB0by4KPiArICog QGRldjoJCVtpbl0JZGV2aWNlIHRvIGJlIGF0dGFjaGVkLgo+ICsgKiBAaW1wb3J0ZXJfb3BzCVtp bl0JaW1wb3J0ZXIgb3BlcmF0aW9ucyBmb3IgdGhlIGF0dGFjaG1lbnQKPiArICogQGltcG9ydGVy X3ByaXYJW2luXQlpbXBvcnRlciBwcml2YXRlIHBvaW50ZXIgZm9yIHRoZSBhdHRhY2htZW50Cj4g ICAqCj4gICAqIFJldHVybnMgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCBwb2ludGVyIGZvciB0 aGlzIGF0dGFjaG1lbnQuIEF0dGFjaG1lbnRzCj4gICAqIG11c3QgYmUgY2xlYW5lZCB1cCBieSBj YWxsaW5nIGRtYV9idWZfZGV0YWNoKCkuCj4gQEAgLTY2OCw4ICs2NzMsMTAgQEAgRVhQT1JUX1NZ TUJPTF9HUEwoZG1hX2J1Zl9wdXQpOwo+ICAgKiBhY2Nlc3NpYmxlIHRvIEBkZXYsIGFuZCBjYW5u b3QgYmUgbW92ZWQgdG8gYSBtb3JlIHN1aXRhYmxlIHBsYWNlLiBUaGlzIGlzCj4gICAqIGluZGlj YXRlZCB3aXRoIHRoZSBlcnJvciBjb2RlIC1FQlVTWS4KPiAgICovCj4gLXN0cnVjdCBkbWFfYnVm X2F0dGFjaG1lbnQgKmRtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCj4gLQkJ CQkJICBzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3N0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKgo+ ICtkbWFfYnVmX2R5bmFtaWNfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIHN0cnVjdCBk ZXZpY2UgKmRldiwKPiArCQkgICAgICAgY29uc3Qgc3RydWN0IGRtYV9idWZfYXR0YWNoX29wcyAq aW1wb3J0ZXJfb3BzLAo+ICsJCSAgICAgICB2b2lkICppbXBvcnRlcl9wcml2KQo+ICB7Cj4gIAlz dHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2g7Cj4gIAlpbnQgcmV0Owo+IEBAIC02ODMs NiArNjkwLDggQEAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqZG1hX2J1Zl9hdHRhY2goc3Ry dWN0IGRtYV9idWYgKmRtYWJ1ZiwKPiAgCj4gIAlhdHRhY2gtPmRldiA9IGRldjsKPiAgCWF0dGFj aC0+ZG1hYnVmID0gZG1hYnVmOwo+ICsJYXR0YWNoLT5pbXBvcnRlcl9vcHMgPSBpbXBvcnRlcl9v cHM7Cj4gKwlhdHRhY2gtPmltcG9ydGVyX3ByaXYgPSBpbXBvcnRlcl9wcml2Owo+ICAKPiAgCW11 dGV4X2xvY2soJmRtYWJ1Zi0+bG9jayk7Cj4gIAo+IEBAIC02OTEsMTYgKzcwMCw3MiBAQCBzdHJ1 Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICpkbWFfYnVmX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1h YnVmLAo+ICAJCWlmIChyZXQpCj4gIAkJCWdvdG8gZXJyX2F0dGFjaDsKPiAgCX0KPiArCXJlc2Vy dmF0aW9uX29iamVjdF9sb2NrKGRtYWJ1Zi0+cmVzdiwgTlVMTCk7Cj4gIAlsaXN0X2FkZCgmYXR0 YWNoLT5ub2RlLCAmZG1hYnVmLT5hdHRhY2htZW50cyk7Cj4gKwlyZXNlcnZhdGlvbl9vYmplY3Rf dW5sb2NrKGRtYWJ1Zi0+cmVzdik7Cj4gIAo+ICAJbXV0ZXhfdW5sb2NrKCZkbWFidWYtPmxvY2sp Owo+ICAKPiArCS8qIFdoZW4gZWl0aGVyIHRoZSBpbXBvcnRlciBvciB0aGUgZXhwb3J0ZXIgY2Fu J3QgaGFuZGxlIGR5bmFtaWMKPiArCSAqIG1hcHBpbmdzIHdlIGNhY2hlIHRoZSBtYXBwaW5nIGhl cmUgdG8gYXZvaWQgaXNzdWVzIHdpdGggdGhlCj4gKwkgKiByZXNlcnZhdGlvbiBvYmplY3QgbG9j ay4KPiArCSAqLwo+ICsJaWYgKGRtYV9idWZfYXR0YWNobWVudF9pc19keW5hbWljKGF0dGFjaCkg IT0KPiArCSAgICBkbWFfYnVmX2lzX2R5bmFtaWMoZG1hYnVmKSkgewo+ICsJCXN0cnVjdCBzZ190 YWJsZSAqc2d0Owo+ICsKPiArCQlpZiAoZG1hX2J1Zl9pc19keW5hbWljKGF0dGFjaC0+ZG1hYnVm KSkgewo+ICsJCQlyZXNlcnZhdGlvbl9vYmplY3RfbG9jayhhdHRhY2gtPmRtYWJ1Zi0+cmVzdiwg TlVMTCk7Cj4gKwkJCXJldCA9IGRtYV9idWZfcGluKGF0dGFjaCk7Cj4gKwkJCWlmIChyZXQpCj4g KwkJCQlnb3RvIGVycl91bmxvY2s7Cj4gKwkJfQo+ICsKPiArCQlzZ3QgPSBkbWFidWYtPm9wcy0+ bWFwX2RtYV9idWYoYXR0YWNoLCBETUFfQklESVJFQ1RJT05BTCk7Cj4gKwkJaWYgKCFzZ3QpCj4g KwkJCXNndCA9IEVSUl9QVFIoLUVOT01FTSk7Cj4gKwkJaWYgKElTX0VSUihzZ3QpKSB7Cj4gKwkJ CXJldCA9IFBUUl9FUlIoc2d0KTsKPiArCQkJZ290byBlcnJfdW5waW47Cj4gKwkJfQo+ICsJCWlm IChkbWFfYnVmX2lzX2R5bmFtaWMoYXR0YWNoLT5kbWFidWYpKQo+ICsJCQlyZXNlcnZhdGlvbl9v YmplY3RfdW5sb2NrKGF0dGFjaC0+ZG1hYnVmLT5yZXN2KTsKPiArCQlhdHRhY2gtPnNndCA9IHNn dDsKPiArCQlhdHRhY2gtPmRpciA9IERNQV9CSURJUkVDVElPTkFMOwo+ICsJfQo+ICsKPiAgCXJl dHVybiBhdHRhY2g7Cj4gIAo+ICBlcnJfYXR0YWNoOgo+ICAJa2ZyZWUoYXR0YWNoKTsKPiAgCW11 dGV4X3VubG9jaygmZG1hYnVmLT5sb2NrKTsKPiAgCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gKwo+ ICtlcnJfdW5waW46Cj4gKwlpZiAoZG1hX2J1Zl9pc19keW5hbWljKGF0dGFjaC0+ZG1hYnVmKSkK PiArCQlkbWFfYnVmX3VucGluKGF0dGFjaCk7Cj4gKwo+ICtlcnJfdW5sb2NrOgo+ICsJaWYgKGRt YV9idWZfaXNfZHluYW1pYyhhdHRhY2gtPmRtYWJ1ZikpCj4gKwkJcmVzZXJ2YXRpb25fb2JqZWN0 X3VubG9jayhhdHRhY2gtPmRtYWJ1Zi0+cmVzdik7Cj4gKwo+ICsJZG1hX2J1Zl9kZXRhY2goZG1h YnVmLCBhdHRhY2gpOwo+ICsJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiArfQo+ICtFWFBPUlRfU1lN Qk9MX0dQTChkbWFfYnVmX2R5bmFtaWNfYXR0YWNoKTsKPiArCj4gKy8qKgo+ICsgKiBkbWFfYnVm X2F0dGFjaCAtIFdyYXBwZXIgZm9yIGRtYV9idWZfZHluYW1pY19hdHRhY2gKPiArICogQGRtYWJ1 ZjoJW2luXQlidWZmZXIgdG8gYXR0YWNoIGRldmljZSB0by4KPiArICogQGRldjoJW2luXQlkZXZp Y2UgdG8gYmUgYXR0YWNoZWQuCj4gKyAqCj4gKyAqIFdyYXBwZXIgdG8gY2FsbCBkbWFfYnVmX2R5 bmFtaWNfYXR0YWNoKCkgZm9yIGRyaXZlcnMgd2hpY2ggc3RpbGwgdXNlIGEgc3RhdGljCj4gKyAq IG1hcHBpbmcuCj4gKyAqLwo+ICtzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICpkbWFfYnVmX2F0 dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAo+ICsJCQkJCSAgc3RydWN0IGRldmljZSAqZGV2 KQo+ICt7Cj4gKwlyZXR1cm4gZG1hX2J1Zl9keW5hbWljX2F0dGFjaChkbWFidWYsIGRldiwgTlVM TCwgTlVMTCk7Cj4gIH0KPiAgRVhQT1JUX1NZTUJPTF9HUEwoZG1hX2J1Zl9hdHRhY2gpOwo+ICAK PiBAQCAtNzE3LDExICs3ODIsMjIgQEAgdm9pZCBkbWFfYnVmX2RldGFjaChzdHJ1Y3QgZG1hX2J1 ZiAqZG1hYnVmLCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpCj4gIAlpZiAoV0FS Tl9PTighZG1hYnVmIHx8ICFhdHRhY2gpKQo+ICAJCXJldHVybjsKPiAgCj4gLQlpZiAoYXR0YWNo LT5zZ3QpCj4gKwlpZiAoYXR0YWNoLT5zZ3QpIHsKPiArCQlpZiAoZG1hX2J1Zl9pc19keW5hbWlj KGF0dGFjaC0+ZG1hYnVmKSkKPiArCQkJcmVzZXJ2YXRpb25fb2JqZWN0X2xvY2soYXR0YWNoLT5k bWFidWYtPnJlc3YsIE5VTEwpOwo+ICsKPiAgCQlkbWFidWYtPm9wcy0+dW5tYXBfZG1hX2J1Zihh dHRhY2gsIGF0dGFjaC0+c2d0LCBhdHRhY2gtPmRpcik7Cj4gIAo+ICsJCWlmIChkbWFfYnVmX2lz X2R5bmFtaWMoYXR0YWNoLT5kbWFidWYpKSB7Cj4gKwkJCWRtYV9idWZfdW5waW4oYXR0YWNoKTsK PiArCQkJcmVzZXJ2YXRpb25fb2JqZWN0X3VubG9jayhhdHRhY2gtPmRtYWJ1Zi0+cmVzdik7Cj4g KwkJfQo+ICsJfQo+ICsKPiAgCW11dGV4X2xvY2soJmRtYWJ1Zi0+bG9jayk7Cj4gKwlyZXNlcnZh dGlvbl9vYmplY3RfbG9jayhkbWFidWYtPnJlc3YsIE5VTEwpOwo+ICAJbGlzdF9kZWwoJmF0dGFj aC0+bm9kZSk7Cj4gKwlyZXNlcnZhdGlvbl9vYmplY3RfdW5sb2NrKGRtYWJ1Zi0+cmVzdik7Cj4g IAlpZiAoZG1hYnVmLT5vcHMtPmRldGFjaCkKPiAgCQlkbWFidWYtPm9wcy0+ZGV0YWNoKGRtYWJ1 ZiwgYXR0YWNoKTsKPiAgCj4gQEAgLTczMCw2ICs4MDYsNDQgQEAgdm9pZCBkbWFfYnVmX2RldGFj aChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRh Y2gpCj4gIH0KPiAgRVhQT1JUX1NZTUJPTF9HUEwoZG1hX2J1Zl9kZXRhY2gpOwo+ICAKPiArLyoq Cj4gKyAqIGRtYV9idWZfcGluIC0gTG9jayBkb3duIHRoZSBETUEtYnVmCj4gKyAqCj4gKyAqIEBh dHRhY2g6CVtpbl0JYXR0YWNobWVudCB3aGljaCBzaG91bGQgYmUgcGlubmVkCj4gKyAqCj4gKyAq IFJldHVybnM6Cj4gKyAqIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWls dXJlLgo+ICsgKi8KPiAraW50IGRtYV9idWZfcGluKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQg KmF0dGFjaCkKPiArewo+ICsJc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiA9IGF0dGFjaC0+ZG1hYnVm Owo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJcmVzZXJ2YXRpb25fb2JqZWN0X2Fzc2VydF9oZWxk KGRtYWJ1Zi0+cmVzdik7Cj4gKwo+ICsJaWYgKGRtYWJ1Zi0+b3BzLT5waW4pCj4gKwkJcmV0ID0g ZG1hYnVmLT5vcHMtPnBpbihhdHRhY2gpOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArRVhQ T1JUX1NZTUJPTF9HUEwoZG1hX2J1Zl9waW4pOwo+ICsKPiArLyoqCj4gKyAqIGRtYV9idWZfdW5w aW4gLSBSZW1vdmUgbG9jayBmcm9tIERNQS1idWYKPiArICoKPiArICogQGF0dGFjaDoJW2luXQlh dHRhY2htZW50IHdoaWNoIHNob3VsZCBiZSB1bnBpbm5lZAo+ICsgKi8KPiArdm9pZCBkbWFfYnVm X3VucGluKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCkKPiArewo+ICsJc3RydWN0 IGRtYV9idWYgKmRtYWJ1ZiA9IGF0dGFjaC0+ZG1hYnVmOwo+ICsKPiArCXJlc2VydmF0aW9uX29i amVjdF9hc3NlcnRfaGVsZChkbWFidWYtPnJlc3YpOwo+ICsKPiArCWlmIChkbWFidWYtPm9wcy0+ dW5waW4pCj4gKwkJZG1hYnVmLT5vcHMtPnVucGluKGF0dGFjaCk7Cj4gK30KPiArRVhQT1JUX1NZ TUJPTF9HUEwoZG1hX2J1Zl91bnBpbik7Cj4gKwo+ICAvKioKPiAgICogZG1hX2J1Zl9tYXBfYXR0 YWNobWVudCAtIFJldHVybnMgdGhlIHNjYXR0ZXJsaXN0IHRhYmxlIG9mIHRoZSBhdHRhY2htZW50 Owo+ICAgKiBtYXBwZWQgaW50byBfZGV2aWNlXyBhZGRyZXNzIHNwYWNlLiBJcyBhIHdyYXBwZXIg Zm9yIG1hcF9kbWFfYnVmKCkgb2YgdGhlCj4gQEAgLTc0OSw2ICs4NjMsNyBAQCBzdHJ1Y3Qgc2df dGFibGUgKmRtYV9idWZfbWFwX2F0dGFjaG1lbnQoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAq YXR0YWNoLAo+ICAJCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKPiAgewo+ ICAJc3RydWN0IHNnX3RhYmxlICpzZ190YWJsZTsKPiArCWludCByOwo+ICAKPiAgCW1pZ2h0X3Ns ZWVwKCk7Cj4gIAo+IEBAIC03NjcsMTAgKzg4MiwzMSBAQCBzdHJ1Y3Qgc2dfdGFibGUgKmRtYV9i dWZfbWFwX2F0dGFjaG1lbnQoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLAo+ICAJ CXJldHVybiBhdHRhY2gtPnNndDsKPiAgCX0KPiAgCj4gKwlpZiAoZG1hX2J1Zl9hdHRhY2htZW50 X2lzX2R5bmFtaWMoYXR0YWNoKSkgewo+ICsJCXJlc2VydmF0aW9uX29iamVjdF9hc3NlcnRfaGVs ZChhdHRhY2gtPmRtYWJ1Zi0+cmVzdik7Cj4gKwo+ICsJfSBlbHNlIGlmIChkbWFfYnVmX2lzX2R5 bmFtaWMoYXR0YWNoLT5kbWFidWYpKSB7Cj4gKwkJcmVzZXJ2YXRpb25fb2JqZWN0X2xvY2soYXR0 YWNoLT5kbWFidWYtPnJlc3YsIE5VTEwpOwo+ICsJCXIgPSBkbWFfYnVmX3BpbihhdHRhY2gpOwo+ ICsJCWlmIChyKSB7Cj4gKwkJCXJlc2VydmF0aW9uX29iamVjdF91bmxvY2soYXR0YWNoLT5kbWFi dWYtPnJlc3YpOwo+ICsJCQlyZXR1cm4gRVJSX1BUUihyKTsKPiArCQl9Cj4gKwl9IGVsc2Ugewo+ ICsJCW1pZ2h0X2xvY2soJmF0dGFjaC0+ZG1hYnVmLT5yZXN2LT5sb2NrLmJhc2UpOwo+ICsJfQo+ ICsKPiAgCXNnX3RhYmxlID0gYXR0YWNoLT5kbWFidWYtPm9wcy0+bWFwX2RtYV9idWYoYXR0YWNo LCBkaXJlY3Rpb24pOwo+ICAJaWYgKCFzZ190YWJsZSkKPiAgCQlzZ190YWJsZSA9IEVSUl9QVFIo LUVOT01FTSk7Cj4gIAo+ICsJaWYgKCFkbWFfYnVmX2F0dGFjaG1lbnRfaXNfZHluYW1pYyhhdHRh Y2gpICYmCj4gKwkgICAgZG1hX2J1Zl9pc19keW5hbWljKGF0dGFjaC0+ZG1hYnVmKSkgewo+ICsJ CWlmIChJU19FUlIoc2dfdGFibGUpKQo+ICsJCQlkbWFfYnVmX3VucGluKGF0dGFjaCk7Cj4gKwkJ cmVzZXJ2YXRpb25fb2JqZWN0X3VubG9jayhhdHRhY2gtPmRtYWJ1Zi0+cmVzdik7Cj4gKwl9Cj4g Kwo+ICAJaWYgKCFJU19FUlIoc2dfdGFibGUpICYmIGF0dGFjaC0+ZG1hYnVmLT5vcHMtPmNhY2hl X3NndF9tYXBwaW5nKSB7Cj4gIAkJYXR0YWNoLT5zZ3QgPSBzZ190YWJsZTsKPiAgCQlhdHRhY2gt PmRpciA9IGRpcmVjdGlvbjsKPiBAQCAtODAyLDEwICs5MzgsNDMgQEAgdm9pZCBkbWFfYnVmX3Vu bWFwX2F0dGFjaG1lbnQoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLAo+ICAJaWYg KGF0dGFjaC0+c2d0ID09IHNnX3RhYmxlKQo+ICAJCXJldHVybjsKPiAgCj4gKwlpZiAoZG1hX2J1 Zl9hdHRhY2htZW50X2lzX2R5bmFtaWMoYXR0YWNoKSkKPiArCQlyZXNlcnZhdGlvbl9vYmplY3Rf YXNzZXJ0X2hlbGQoYXR0YWNoLT5kbWFidWYtPnJlc3YpOwo+ICsJZWxzZSBpZiAoZG1hX2J1Zl9p c19keW5hbWljKGF0dGFjaC0+ZG1hYnVmKSkKPiArCQlyZXNlcnZhdGlvbl9vYmplY3RfbG9jayhh dHRhY2gtPmRtYWJ1Zi0+cmVzdiwgTlVMTCk7Cj4gKwllbHNlCj4gKwkJbWlnaHRfbG9jaygmYXR0 YWNoLT5kbWFidWYtPnJlc3YtPmxvY2suYmFzZSk7Cj4gKwo+ICAJYXR0YWNoLT5kbWFidWYtPm9w cy0+dW5tYXBfZG1hX2J1ZihhdHRhY2gsIHNnX3RhYmxlLCBkaXJlY3Rpb24pOwo+ICsKPiArCWlm IChkbWFfYnVmX2lzX2R5bmFtaWMoYXR0YWNoLT5kbWFidWYpICYmCj4gKwkgICAgIWRtYV9idWZf YXR0YWNobWVudF9pc19keW5hbWljKGF0dGFjaCkpIHsKPiArCQlkbWFfYnVmX3VucGluKGF0dGFj aCk7Cj4gKwkJcmVzZXJ2YXRpb25fb2JqZWN0X3VubG9jayhhdHRhY2gtPmRtYWJ1Zi0+cmVzdik7 Cj4gKwl9Cj4gIH0KPiAgRVhQT1JUX1NZTUJPTF9HUEwoZG1hX2J1Zl91bm1hcF9hdHRhY2htZW50 KTsKPiAgCj4gKy8qKgo+ICsgKiBkbWFfYnVmX21vdmVfbm90aWZ5IC0gbm90aWZ5IGF0dGFjaG1l bnRzIHRoYXQgRE1BLWJ1ZiBpcyBtb3ZpbmcKPiArICoKPiArICogQGRtYWJ1ZjoJW2luXQlidWZm ZXIgd2hpY2ggaXMgbW92aW5nCj4gKyAqCj4gKyAqIEluZm9ybXMgYWxsIGF0dGFjaG1lbnN0IHRo YXQgdGhleSBuZWVkIHRvIGRlc3Ryb3kgYW5kIHJlY3JlYXRlZCBhbGwgdGhlaXIKPiArICogbWFw cGluZ3MuCj4gKyAqLwo+ICt2b2lkIGRtYV9idWZfbW92ZV9ub3RpZnkoc3RydWN0IGRtYV9idWYg KmRtYWJ1ZikKPiArewo+ICsJc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoOwo+ICsK PiArCXJlc2VydmF0aW9uX29iamVjdF9hc3NlcnRfaGVsZChkbWFidWYtPnJlc3YpOwo+ICsKPiAr CWxpc3RfZm9yX2VhY2hfZW50cnkoYXR0YWNoLCAmZG1hYnVmLT5hdHRhY2htZW50cywgbm9kZSkK PiArCQlpZiAoYXR0YWNoLT5pbXBvcnRlcl9vcHMgJiYgYXR0YWNoLT5pbXBvcnRlcl9vcHMtPm1v dmVfbm90aWZ5KQo+ICsJCQlhdHRhY2gtPmltcG9ydGVyX29wcy0+bW92ZV9ub3RpZnkoYXR0YWNo KTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChkbWFfYnVmX21vdmVfbm90aWZ5KTsKPiArCj4g IC8qKgo+ICAgKiBET0M6IGNwdSBhY2Nlc3MKPiAgICoKPiBAQCAtMTIyNSwxMCArMTM5NCwxMiBA QCBzdGF0aWMgaW50IGRtYV9idWZfZGVidWdfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQg KnVudXNlZCkKPiAgCQlzZXFfcHV0cyhzLCAiXHRBdHRhY2hlZCBEZXZpY2VzOlxuIik7Cj4gIAkJ YXR0YWNoX2NvdW50ID0gMDsKPiAgCj4gKwkJcmVzZXJ2YXRpb25fb2JqZWN0X2xvY2soYnVmX29i ai0+cmVzdiwgTlVMTCk7Cj4gIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShhdHRhY2hfb2JqLCAmYnVm X29iai0+YXR0YWNobWVudHMsIG5vZGUpIHsKPiAgCQkJc2VxX3ByaW50ZihzLCAiXHQlc1xuIiwg ZGV2X25hbWUoYXR0YWNoX29iai0+ZGV2KSk7Cj4gIAkJCWF0dGFjaF9jb3VudCsrOwo+ICAJCX0K PiArCQlyZXNlcnZhdGlvbl9vYmplY3RfdW5sb2NrKGJ1Zl9vYmotPnJlc3YpOwo+ICAKPiAgCQlz ZXFfcHJpbnRmKHMsICJUb3RhbCAlZCBkZXZpY2VzIGF0dGFjaGVkXG5cbiIsCj4gIAkJCQlhdHRh Y2hfY291bnQpOwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaCBiL2luY2x1 ZGUvbGludXgvZG1hLWJ1Zi5oCj4gaW5kZXggMDFhZDViOTQyYTZmLi5jY2FkMmZjMWY2NDAgMTAw NjQ0Cj4gLS0tIGEvaW5jbHVkZS9saW51eC9kbWEtYnVmLmgKPiArKysgYi9pbmNsdWRlL2xpbnV4 L2RtYS1idWYuaAo+IEBAIC05MiwxNCArOTIsNDAgQEAgc3RydWN0IGRtYV9idWZfb3BzIHsKPiAg CSAqLwo+ICAJdm9pZCAoKmRldGFjaCkoc3RydWN0IGRtYV9idWYgKiwgc3RydWN0IGRtYV9idWZf YXR0YWNobWVudCAqKTsKPiAgCj4gKwkvKioKPiArCSAqIEBwaW46Cj4gKwkgKgo+ICsJICogVGhp cyBpcyBjYWxsZWQgYnkgZG1hX2J1Zl9waW4gYW5kIGxldHMgdGhlIGV4cG9ydGVyIGtub3cgdGhh dCB0aGUKPiArCSAqIERNQS1idWYgY2FuJ3QgYmUgbW92ZWQgYW55IG1vcmUuCj4gKwkgKgo+ICsJ ICogVGhpcyBpcyBjYWxsZWQgd2l0aCB0aGUgZG1hYnVmLT5yZXN2IG9iamVjdCBsb2NrZWQuCj4g KwkgKgo+ICsJICogVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbC4KPiArCSAqCj4gKwkgKiBSZXR1 cm5zOgo+ICsJICoKPiArCSAqIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBm YWlsdXJlLgo+ICsJICovCj4gKwlpbnQgKCpwaW4pKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQg KmF0dGFjaCk7Cj4gKwo+ICsJLyoqCj4gKwkgKiBAdW5waW46Cj4gKwkgKgo+ICsJICogVGhpcyBp cyBjYWxsZWQgYnkgZG1hX2J1Zl91bnBpbiBhbmQgbGV0cyB0aGUgZXhwb3J0ZXIga25vdyB0aGF0 IHRoZQo+ICsJICogRE1BLWJ1ZiBjYW4gYmUgbW92ZWQgYWdhaW4uCj4gKwkgKgo+ICsJICogVGhp cyBpcyBjYWxsZWQgd2l0aCB0aGUgZG1hYnVmLT5yZXN2IG9iamVjdCBsb2NrZWQuCj4gKwkgKgo+ ICsJICogVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbC4KPiArCSAqLwo+ICsJdm9pZCAoKnVucGlu KShzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpOwo+ICsKPiAgCS8qKgo+ICAJICog QG1hcF9kbWFfYnVmOgo+ICAJICoKPiAgCSAqIFRoaXMgaXMgY2FsbGVkIGJ5IGRtYV9idWZfbWFw X2F0dGFjaG1lbnQoKSBhbmQgaXMgdXNlZCB0byBtYXAgYQo+ICAJICogc2hhcmVkICZkbWFfYnVm IGludG8gZGV2aWNlIGFkZHJlc3Mgc3BhY2UsIGFuZCBpdCBpcyBtYW5kYXRvcnkuIEl0Cj4gLQkg KiBjYW4gb25seSBiZSBjYWxsZWQgaWYgQGF0dGFjaCBoYXMgYmVlbiBjYWxsZWQgc3VjY2Vzc2Z1 bGx5LiBUaGlzCj4gLQkgKiBlc3NlbnRpYWxseSBwaW5zIHRoZSBETUEgYnVmZmVyIGludG8gcGxh Y2UsIGFuZCBpdCBjYW5ub3QgYmUgbW92ZWQKPiAtCSAqIGFueSBtb3JlCj4gKwkgKiBjYW4gb25s eSBiZSBjYWxsZWQgaWYgQGF0dGFjaCBoYXMgYmVlbiBjYWxsZWQgc3VjY2Vzc2Z1bGx5Lgo+ICAJ ICoKPiAgCSAqIFRoaXMgY2FsbCBtYXkgc2xlZXAsIGUuZy4gd2hlbiB0aGUgYmFja2luZyBzdG9y YWdlIGZpcnN0IG5lZWRzIHRvIGJlCj4gIAkgKiBhbGxvY2F0ZWQsIG9yIG1vdmVkIHRvIGEgbG9j YXRpb24gc3VpdGFibGUgZm9yIGFsbCBjdXJyZW50bHkgYXR0YWNoZWQKPiBAQCAtMTIwLDYgKzE0 Niw5IEBAIHN0cnVjdCBkbWFfYnVmX29wcyB7Cj4gIAkgKiBhbnkgb3RoZXIga2luZCBvZiBzaGFy aW5nIHRoYXQgdGhlIGV4cG9ydGVyIG1pZ2h0IHdpc2ggdG8gbWFrZQo+ICAJICogYXZhaWxhYmxl IHRvIGJ1ZmZlci11c2Vycy4KPiAgCSAqCj4gKwkgKiBUaGlzIGlzIGFsd2F5cyBjYWxsZWQgd2l0 aCB0aGUgZG1hYnVmLT5yZXN2IG9iamVjdCBsb2NrZWQgd2hlbgo+ICsJICogdGhlIHBpbi91bnBp biBjYWxsYmFja3MgYXJlIGltcGxlbWVudGVkLgo+ICsJICoKPiAgCSAqIFJldHVybnM6Cj4gIAkg Kgo+ICAJICogQSAmc2dfdGFibGUgc2NhdHRlciBsaXN0IG9mIG9yIHRoZSBiYWNraW5nIHN0b3Jh Z2Ugb2YgdGhlIERNQSBidWZmZXIsCj4gQEAgLTEzNyw5ICsxNjYsNiBAQCBzdHJ1Y3QgZG1hX2J1 Zl9vcHMgewo+ICAJICoKPiAgCSAqIFRoaXMgaXMgY2FsbGVkIGJ5IGRtYV9idWZfdW5tYXBfYXR0 YWNobWVudCgpIGFuZCBzaG91bGQgdW5tYXAgYW5kCj4gIAkgKiByZWxlYXNlIHRoZSAmc2dfdGFi bGUgYWxsb2NhdGVkIGluIEBtYXBfZG1hX2J1ZiwgYW5kIGl0IGlzIG1hbmRhdG9yeS4KPiAtCSAq IEl0IHNob3VsZCBhbHNvIHVucGluIHRoZSBiYWNraW5nIHN0b3JhZ2UgaWYgdGhpcyBpcyB0aGUg bGFzdCBtYXBwaW5nCj4gLQkgKiBvZiB0aGUgRE1BIGJ1ZmZlciwgaXQgdGhlIGV4cG9ydGVyIHN1 cHBvcnRzIGJhY2tpbmcgc3RvcmFnZQo+IC0JICogbWlncmF0aW9uLgo+ICAJICovCj4gIAl2b2lk ICgqdW5tYXBfZG1hX2J1Zikoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqLAo+ICAJCQkgICAg ICBzdHJ1Y3Qgc2dfdGFibGUgKiwKPiBAQCAtMzMwLDYgKzM1NiwzNCBAQCBzdHJ1Y3QgZG1hX2J1 ZiB7Cj4gIAl9IGNiX2V4Y2wsIGNiX3NoYXJlZDsKPiAgfTsKPiAgCj4gKy8qKgo+ICsgKiBzdHJ1 Y3QgZG1hX2J1Zl9hdHRhY2hfb3BzIC0gaW1wb3J0ZXIgb3BlcmF0aW9ucyBmb3IgYW4gYXR0YWNo bWVudAo+ICsgKiBAbW92ZV9ub3RpZnk6IFtvcHRpb25hbF0gbm90aWZpY2F0aW9uIHRoYXQgdGhl IERNQS1idWYgaXMgbW92aW5nCj4gKyAqCj4gKyAqIEF0dGFjaG1lbnQgb3BlcmF0aW9ucyBpbXBs ZW1lbnRlZCBieSB0aGUgaW1wb3J0ZXIuCj4gKyAqLwo+ICtzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2hf b3BzIHsKPiArCS8qKgo+ICsJICogQG1vdmVfbm90aWZ5Cj4gKwkgKgo+ICsJICogSWYgdGhpcyBj YWxsYmFjayBpcyBwcm92aWRlZCB0aGUgZnJhbWV3b3JrIGNhbiBhdm9pZCBwaW5uaW5nIHRoZQo+ ICsJICogYmFja2luZyBzdG9yZSB3aGlsZSBtYXBwaW5ncyBleGlzdHMuCj4gKwkgKgo+ICsJICog VGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgd2l0aCB0aGUgbG9jayBvZiB0aGUgcmVzZXJ2YXRpb24g b2JqZWN0Cj4gKwkgKiBhc3NvY2lhdGVkIHdpdGggdGhlIGRtYV9idWYgaGVsZCBhbmQgdGhlIG1h cHBpbmcgZnVuY3Rpb24gbXVzdCBiZQo+ICsJICogY2FsbGVkIHdpdGggdGhpcyBsb2NrIGhlbGQg YXMgd2VsbC4gVGhpcyBtYWtlcyBzdXJlIHRoYXQgbm8gbWFwcGluZwo+ICsJICogaXMgY3JlYXRl ZCBjb25jdXJyZW50bHkgd2l0aCBhbiBvbmdvaW5nIG1vdmUgb3BlcmF0aW9uLgo+ICsJICoKPiAr CSAqIE1hcHBpbmdzIHN0YXkgdmFsaWQgYW5kIGFyZSBub3QgZGlyZWN0bHkgYWZmZWN0ZWQgYnkg dGhpcyBjYWxsYmFjay4KPiArCSAqIEJ1dCB0aGUgRE1BLWJ1ZiBjYW4gbm93IGJlIGluIGEgZGlm ZmVyZW50IHBoeXNpY2FsIGxvY2F0aW9uLCBzbyBhbGwKPiArCSAqIG1hcHBpbmdzIHNob3VsZCBi ZSBkZXN0cm95ZWQgYW5kIHJlLWNyZWF0ZWQgYXMgc29vbiBhcyBwb3NzaWJsZS4KPiArCSAqCj4g KwkgKiBOZXcgbWFwcGluZ3MgY2FuIGJlIGNyZWF0ZWQgYWZ0ZXIgdGhpcyBjYWxsYmFjayByZXR1 cm5zLCBhbmQgd2lsbAo+ICsJICogcG9pbnQgdG8gdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUgRE1B LWJ1Zi4KPiArCSAqLwo+ICsJdm9pZCAoKm1vdmVfbm90aWZ5KShzdHJ1Y3QgZG1hX2J1Zl9hdHRh Y2htZW50ICphdHRhY2gpOwo+ICt9Owo+ICsKPiAgLyoqCj4gICAqIHN0cnVjdCBkbWFfYnVmX2F0 dGFjaG1lbnQgLSBob2xkcyBkZXZpY2UtYnVmZmVyIGF0dGFjaG1lbnQgZGF0YQo+ICAgKiBAZG1h YnVmOiBidWZmZXIgZm9yIHRoaXMgYXR0YWNobWVudC4KPiBAQCAtMzM4LDYgKzM5Miw4IEBAIHN0 cnVjdCBkbWFfYnVmIHsKPiAgICogQHNndDogY2FjaGVkIG1hcHBpbmcuCj4gICAqIEBkaXI6IGRp cmVjdGlvbiBvZiBjYWNoZWQgbWFwcGluZy4KPiAgICogQHByaXY6IGV4cG9ydGVyIHNwZWNpZmlj IGF0dGFjaG1lbnQgZGF0YS4KPiArICogQGltcG9ydGVyX29wczogaW1wb3J0ZXIgb3BlcmF0aW9u cyBmb3IgdGhpcyBhdHRhY2htZW50Lgo+ICsgKiBAaW1wb3J0ZXJfcHJpdjogaW1wb3J0ZXIgc3Bl Y2lmaWMgYXR0YWNobWVudCBkYXRhLgo+ICAgKgo+ICAgKiBUaGlzIHN0cnVjdHVyZSBob2xkcyB0 aGUgYXR0YWNobWVudCBpbmZvcm1hdGlvbiBiZXR3ZWVuIHRoZSBkbWFfYnVmIGJ1ZmZlcgo+ICAg KiBhbmQgaXRzIHVzZXIgZGV2aWNlKHMpLiBUaGUgbGlzdCBjb250YWlucyBvbmUgYXR0YWNobWVu dCBzdHJ1Y3QgcGVyIGRldmljZQo+IEBAIC0zNTUsNiArNDExLDkgQEAgc3RydWN0IGRtYV9idWZf YXR0YWNobWVudCB7Cj4gIAlzdHJ1Y3Qgc2dfdGFibGUgKnNndDsKPiAgCWVudW0gZG1hX2RhdGFf ZGlyZWN0aW9uIGRpcjsKPiAgCXZvaWQgKnByaXY7Cj4gKwo+ICsJY29uc3Qgc3RydWN0IGRtYV9i dWZfYXR0YWNoX29wcyAqaW1wb3J0ZXJfb3BzOwo+ICsJdm9pZCAqaW1wb3J0ZXJfcHJpdjsKPiAg fTsKPiAgCj4gIC8qKgo+IEBAIC00MDUsMTAgKzQ2NCw0MiBAQCBzdGF0aWMgaW5saW5lIHZvaWQg Z2V0X2RtYV9idWYoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZikKPiAgCWdldF9maWxlKGRtYWJ1Zi0+ ZmlsZSk7Cj4gIH0KPiAgCj4gKy8qKgo+ICsgKiBkbWFfYnVmX2lzX2R5bmFtaWMgLSBjaGVjayBp ZiBhIERNQS1idWYgdXNlcyBkeW5hbWljIG1hcHBpbmdzLgo+ICsgKiBAZG1hYnVmOiB0aGUgRE1B LWJ1ZiB0byBjaGVjawo+ICsgKgo+ICsgKiBSZXR1cm5zIHRydWUgaWYgYSBETUEtYnVmIGV4cG9y dGVyIHdhbnRzIHRvIGNyZWF0ZSBkeW5hbWljIHNnIHRhYmxlIG1hcHBpbmdzCj4gKyAqIGZvciBl YWNoIGF0dGFjaG1lbnQuIEZhbHNlIGlmIG9ubHkgYSBzaW5nbGUgc3RhdGljIHNnIHRhYmxlIHNo b3VsZCBiZSB1c2VkLgo+ICsgKi8KPiArc3RhdGljIGlubGluZSBib29sIGRtYV9idWZfaXNfZHlu YW1pYyhzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKQo+ICt7Cj4gKwlyZXR1cm4gISFkbWFidWYtPm9w cy0+cGluOwo+ICt9Cj4gKwo+ICsvKioKPiArICogZG1hX2J1Zl9hdHRhY2htZW50X2lzX2R5bmFt aWMgLSBjaGVjayBpZiBhIERNQS1idWYgYXR0YWNobWVudCB1c2VzIGR5bmFtaWMKPiArICogbWFw cGluc2cKPiArICogQGF0dGFjaDogdGhlIERNQS1idWYgYXR0YWNobWVudCB0byBjaGVjawo+ICsg Kgo+ICsgKiBSZXR1cm5zIHRydWUgaWYgYSBETUEtYnVmIGltcG9ydGVyIHdhbnRzIHRvIHVzZSBk eW5hbWljIHNnIHRhYmxlIG1hcHBpbmdzIGFuZAo+ICsgKiBjYWxscyB0aGUgbWFwL3VubWFwIGZ1 bmN0aW9ucyB3aXRoIHRoZSByZXNlcnZhdGlvbiBvYmplY3QgbG9ja2VkLgo+ICsgKi8KPiArc3Rh dGljIGlubGluZSBib29sCj4gK2RtYV9idWZfYXR0YWNobWVudF9pc19keW5hbWljKHN0cnVjdCBk bWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCkKPiArewo+ICsJcmV0dXJuIGF0dGFjaC0+aW1wb3J0 ZXJfb3BzICYmIGF0dGFjaC0+aW1wb3J0ZXJfb3BzLT5tb3ZlX25vdGlmeTsKPiArfQo+ICsKPiAg c3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqZG1hX2J1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYg KmRtYWJ1ZiwKPiAtCQkJCQkJCXN0cnVjdCBkZXZpY2UgKmRldik7Cj4gKwkJCQkJICBzdHJ1Y3Qg ZGV2aWNlICpkZXYpOwo+ICtzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICoKPiArZG1hX2J1Zl9k eW5hbWljX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBzdHJ1Y3QgZGV2aWNlICpkZXYs Cj4gKwkJICAgICAgIGNvbnN0IHN0cnVjdCBkbWFfYnVmX2F0dGFjaF9vcHMgKmltcG9ydGVyX29w cywKPiArCQkgICAgICAgdm9pZCAqaW1wb3J0ZXJfcHJpdik7Cj4gIHZvaWQgZG1hX2J1Zl9kZXRh Y2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKPiAtCQkJCXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1l bnQgKmRtYWJ1Zl9hdHRhY2gpOwo+ICsJCSAgICBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICph dHRhY2gpOwo+ICtpbnQgZG1hX2J1Zl9waW4oc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0 YWNoKTsKPiArdm9pZCBkbWFfYnVmX3VucGluKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0 dGFjaCk7Cj4gIAo+ICBzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1Zl9leHBvcnQoY29uc3Qgc3RydWN0 IGRtYV9idWZfZXhwb3J0X2luZm8gKmV4cF9pbmZvKTsKPiAgCj4gQEAgLTQyMCw2ICs1MTEsNyBA QCBzdHJ1Y3Qgc2dfdGFibGUgKmRtYV9idWZfbWFwX2F0dGFjaG1lbnQoc3RydWN0IGRtYV9idWZf YXR0YWNobWVudCAqLAo+ICAJCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKTsKPiAgdm9pZCBk bWFfYnVmX3VubWFwX2F0dGFjaG1lbnQoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqLCBzdHJ1 Y3Qgc2dfdGFibGUgKiwKPiAgCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKTsKPiArdm9pZCBk bWFfYnVmX21vdmVfbm90aWZ5KHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmKTsKPiAgaW50IGRtYV9i dWZfYmVnaW5fY3B1X2FjY2VzcyhzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZiwKPiAgCQkJICAgICBl bnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpOwo+ICBpbnQgZG1hX2J1Zl9lbmRfY3B1X2FjY2Vz cyhzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZiwKPiAtLSAKPiAyLjE3LjEKPiAKPiBfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IGRyaS1kZXZlbCBtYWlsaW5n IGxpc3QKPiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwKCi0tIApEYW5pZWwgVmV0 dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZnds bC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmkt ZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWw=