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 v12 Date: Tue, 25 Jun 2019 16:35:48 +0200 Message-ID: <20190625143548.GX12905@phenom.ffwll.local> References: <20190625124654.122364-1-christian.koenig@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x544.google.com (mail-ed1-x544.google.com [IPv6:2a00:1450:4864:20::544]) by gabe.freedesktop.org (Postfix) with ESMTPS id BA8736E127 for ; Tue, 25 Jun 2019 14:35:52 +0000 (UTC) Received: by mail-ed1-x544.google.com with SMTP id d4so27429850edr.13 for ; Tue, 25 Jun 2019 07:35:52 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20190625124654.122364-1-christian.koenig@amd.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" 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: intel-gfx@lists.freedesktop.org SGkgQ2hyaXN0aWFuLAoKT24gVHVlLCBKdW4gMjUsIDIwMTkgYXQgMDI6NDY6NDlQTSArMDIwMCwg Q2hyaXN0aWFuIEvDtm5pZyB3cm90ZToKPiBPbiB0aGUgZXhwb3J0ZXIgc2lkZSB3ZSBhZGQgb3B0 aW9uYWwgZXhwbGljaXQgcGlubmluZyBjYWxsYmFja3MuIElmIHRob3NlCj4gY2FsbGJhY2tzIGFy ZSBpbXBsZW1lbnRlZCB0aGUgZnJhbWV3b3JrIG5vIGxvbmdlciBjYWNoZXMgc2cgdGFibGVzIGFu ZCB0aGUKPiBtYXAvdW5tYXAgY2FsbGJhY2tzIGFyZSBhbHdheXMgY2FsbGVkIHdpdGggdGhlIGxv Y2sgb2YgdGhlIHJlc2VydmF0aW9uIG9iamVjdAo+IGhlbGQuCj4gCj4gT24gdGhlIGltcG9ydGVy IHNpZGUgd2UgYWRkIGFuIG9wdGlvbmFsIGludmFsaWRhdGUgY2FsbGJhY2suIFRoaXMgY2FsbGJh Y2sgaXMKPiB1c2VkIGJ5IHRoZSBleHBvcnRlciB0byBpbmZvcm0gdGhlIGltcG9ydGVycyB0aGF0 IHRoZWlyIG1hcHBpbmdzIHNob3VsZCBiZQo+IGRlc3Ryb3llZCBhcyBzb29uIGFzIHBvc3NpYmxl Lgo+IAo+IFRoaXMgYWxsb3dzIHRoZSBleHBvcnRlciB0byBwcm92aWRlIHRoZSBtYXBwaW5ncyB3 aXRob3V0IHRoZSBuZWVkIHRvIHBpbgo+IHRoZSBiYWNraW5nIHN0b3JlLgo+IAo+IHYyOiBkb24n dCB0cnkgdG8gaW52YWxpZGF0ZSBtYXBwaW5ncyB3aGVuIHRoZSBjYWxsYmFjayBpcyBOVUxMLAo+ ICAgICBsb2NrIHRoZSByZXNlcnZhdGlvbiBvYmogd2hpbGUgdXNpbmcgdGhlIGF0dGFjaG1lbnRz LAo+ICAgICBhZGQgaGVscGVyIHRvIHNldCB0aGUgY2FsbGJhY2sKPiB2MzogbW92ZSBmbGFnIGZv ciBpbnZhbGlkYXRpb24gc3VwcG9ydCBpbnRvIHRoZSBETUEtYnVmLAo+ICAgICB1c2UgbmV3IGF0 dGFjaF9pbmZvIHN0cnVjdHVyZSB0byBzZXQgdGhlIGNhbGxiYWNrCj4gdjQ6IHVzZSBpbXBvcnRl cl9wcml2IGZpZWxkIGluc3RlYWQgb2YgbWFuZ2xpbmcgZXhwb3J0ZXIgcHJpdi4KPiB2NTogZHJv cCBpbnZhbGlkYXRpb25fc3VwcG9ydGVkIGZsYWcKPiB2Njogc3F1YXNoIHRvZ2V0aGVyIHdpdGgg cGluL3VucGluIGNoYW5nZXMKPiB2NzogcGluL3VucGluIHRha2VzIGFuIGF0dGFjaG1lbnQgbm93 Cj4gdjg6IG51a2UgZG1hX2J1Zl9hdHRhY2htZW50XyhtYXB8dW5tYXApX2xvY2tlZCwKPiAgICAg ZXZlcnl0aGluZyBpcyBub3cgaGFuZGxlZCBiYWNrd2FyZCBjb21wYXRpYmxlCj4gdjk6IGFsd2F5 cyBjYWNoZSB3aGVuIGV4cG9ydC9pbXBvcnRlciBkb24ndCBhZ3JlZSBvbiBkeW5hbWljIGhhbmRs aW5nCj4gdjEwOiBtaW5pbWFsIHN0eWxlIGNsZWFudXAKPiB2MTE6IGRyb3AgYXV0b21hdGljYWxs eSByZS1lbnRyeSBhdm9pZGFuY2UKPiB2MTI6IHJlbmFtZSBjYWxsYmFjayB0byBtb3ZlX25vdGlm eQo+IAo+IFNpZ25lZC1vZmYtYnk6IENocmlzdGlhbiBLw7ZuaWcgPGNocmlzdGlhbi5rb2VuaWdA YW1kLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYyB8IDE3OSArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQo+ICBpbmNsdWRlL2xpbnV4L2RtYS1idWYu aCAgIHwgMTA4ICsrKysrKysrKysrKysrKysrKysrKy0tCj4gIDIgZmlsZXMgY2hhbmdlZCwgMjcz IGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2RtYS1idWYvZG1hLWJ1Zi5jIGIvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYwo+IGluZGV4IDZj MTVkZWI1ZDRhZC4uMjE2Zjc2MTA5ZjNmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZG1hLWJ1Zi9k bWEtYnVmLmMKPiArKysgYi9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jCj4gQEAgLTUzMSw2ICs1 MzEsOSBAQCBzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1Zl9leHBvcnQoY29uc3Qgc3RydWN0IGRtYV9i dWZfZXhwb3J0X2luZm8gKmV4cF9pbmZvKQo+ICAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwo+ ICAJfQo+ICAKPiArCWlmIChXQVJOX09OKGV4cF9pbmZvLT5vcHMtPmNhY2hlX3NndF9tYXBwaW5n ICYmIGV4cF9pbmZvLT5vcHMtPnBpbikpCj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cj4g Kwo+ICAJaWYgKCF0cnlfbW9kdWxlX2dldChleHBfaW5mby0+b3duZXIpKQo+ICAJCXJldHVybiBF UlJfUFRSKC1FTk9FTlQpOwo+ICAKPiBAQCAtNjUxLDEwICs2NTQsMTIgQEAgdm9pZCBkbWFfYnVm X3B1dChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKQo+ICBFWFBPUlRfU1lNQk9MX0dQTChkbWFfYnVm X3B1dCk7Cj4gIAo+ICAvKioKPiAtICogZG1hX2J1Zl9hdHRhY2ggLSBBZGQgdGhlIGRldmljZSB0 byBkbWFfYnVmJ3MgYXR0YWNobWVudHMgbGlzdDsgb3B0aW9uYWxseSwKPiArICogZG1hX2J1Zl9k eW5hbWljX2F0dGFjaCAtIEFkZCB0aGUgZGV2aWNlIHRvIGRtYV9idWYncyBhdHRhY2htZW50cyBs aXN0OyBvcHRpb25hbGx5LAo+ICAgKiBjYWxscyBhdHRhY2goKSBvZiBkbWFfYnVmX29wcyB0byBh bGxvdyBkZXZpY2Utc3BlY2lmaWMgYXR0YWNoIGZ1bmN0aW9uYWxpdHkKPiAtICogQGRtYWJ1ZjoJ W2luXQlidWZmZXIgdG8gYXR0YWNoIGRldmljZSB0by4KPiAtICogQGRldjoJW2luXQlkZXZpY2Ug dG8gYmUgYXR0YWNoZWQuCj4gKyAqIEBkbWFidWY6CQlbaW5dCWJ1ZmZlciB0byBhdHRhY2ggZGV2 aWNlIHRvLgo+ICsgKiBAZGV2OgkJW2luXQlkZXZpY2UgdG8gYmUgYXR0YWNoZWQuCj4gKyAqIEBp bXBvcnRlcl9vcHMJW2luXQlpbXBvcnRlciBvcGVyYXRpb25zIGZvciB0aGUgYXR0YWNobWVudAo+ ICsgKiBAaW1wb3J0ZXJfcHJpdglbaW5dCWltcG9ydGVyIHByaXZhdGUgcG9pbnRlciBmb3IgdGhl IGF0dGFjaG1lbnQKPiAgICoKPiAgICogUmV0dXJucyBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50 IHBvaW50ZXIgZm9yIHRoaXMgYXR0YWNobWVudC4gQXR0YWNobWVudHMKPiAgICogbXVzdCBiZSBj bGVhbmVkIHVwIGJ5IGNhbGxpbmcgZG1hX2J1Zl9kZXRhY2goKS4KPiBAQCAtNjY4LDggKzY3Mywx MCBAQCBFWFBPUlRfU1lNQk9MX0dQTChkbWFfYnVmX3B1dCk7Cj4gICAqIGFjY2Vzc2libGUgdG8g QGRldiwgYW5kIGNhbm5vdCBiZSBtb3ZlZCB0byBhIG1vcmUgc3VpdGFibGUgcGxhY2UuIFRoaXMg aXMKPiAgICogaW5kaWNhdGVkIHdpdGggdGhlIGVycm9yIGNvZGUgLUVCVVNZLgo+ICAgKi8KPiAt c3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqZG1hX2J1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYg KmRtYWJ1ZiwKPiAtCQkJCQkgIHN0cnVjdCBkZXZpY2UgKmRldikKPiArc3RydWN0IGRtYV9idWZf YXR0YWNobWVudCAqCj4gK2RtYV9idWZfZHluYW1pY19hdHRhY2goc3RydWN0IGRtYV9idWYgKmRt YWJ1Ziwgc3RydWN0IGRldmljZSAqZGV2LAo+ICsJCSAgICAgICBjb25zdCBzdHJ1Y3QgZG1hX2J1 Zl9hdHRhY2hfb3BzICppbXBvcnRlcl9vcHMsCj4gKwkJICAgICAgIHZvaWQgKmltcG9ydGVyX3By aXYpCj4gIHsKPiAgCXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaDsKPiAgCWludCBy ZXQ7Cj4gQEAgLTY4Myw2ICs2OTAsOCBAQCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICpkbWFf YnVmX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAo+ICAKPiAgCWF0dGFjaC0+ZGV2ID0g ZGV2Owo+ICAJYXR0YWNoLT5kbWFidWYgPSBkbWFidWY7Cj4gKwlhdHRhY2gtPmltcG9ydGVyX29w cyA9IGltcG9ydGVyX29wczsKPiArCWF0dGFjaC0+aW1wb3J0ZXJfcHJpdiA9IGltcG9ydGVyX3By aXY7Cj4gIAo+ICAJbXV0ZXhfbG9jaygmZG1hYnVmLT5sb2NrKTsKPiAgCj4gQEAgLTY5MSwxNiAr NzAwLDcyIEBAIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmRtYV9idWZfYXR0YWNoKHN0cnVj dCBkbWFfYnVmICpkbWFidWYsCj4gIAkJaWYgKHJldCkKPiAgCQkJZ290byBlcnJfYXR0YWNoOwo+ ICAJfQo+ICsJcmVzZXJ2YXRpb25fb2JqZWN0X2xvY2soZG1hYnVmLT5yZXN2LCBOVUxMKTsKPiAg CWxpc3RfYWRkKCZhdHRhY2gtPm5vZGUsICZkbWFidWYtPmF0dGFjaG1lbnRzKTsKPiArCXJlc2Vy dmF0aW9uX29iamVjdF91bmxvY2soZG1hYnVmLT5yZXN2KTsKPiAgCj4gIAltdXRleF91bmxvY2so JmRtYWJ1Zi0+bG9jayk7Cj4gIAo+ICsJLyogV2hlbiBlaXRoZXIgdGhlIGltcG9ydGVyIG9yIHRo ZSBleHBvcnRlciBjYW4ndCBoYW5kbGUgZHluYW1pYwo+ICsJICogbWFwcGluZ3Mgd2UgY2FjaGUg dGhlIG1hcHBpbmcgaGVyZSB0byBhdm9pZCBpc3N1ZXMgd2l0aCB0aGUKPiArCSAqIHJlc2VydmF0 aW9uIG9iamVjdCBsb2NrLgo+ICsJICovCj4gKwlpZiAoZG1hX2J1Zl9hdHRhY2htZW50X2lzX2R5 bmFtaWMoYXR0YWNoKSAhPQo+ICsJICAgIGRtYV9idWZfaXNfZHluYW1pYyhkbWFidWYpKSB7Cj4g KwkJc3RydWN0IHNnX3RhYmxlICpzZ3Q7Cj4gKwo+ICsJCWlmIChkbWFfYnVmX2lzX2R5bmFtaWMo YXR0YWNoLT5kbWFidWYpKSB7Cj4gKwkJCXJlc2VydmF0aW9uX29iamVjdF9sb2NrKGF0dGFjaC0+ ZG1hYnVmLT5yZXN2LCBOVUxMKTsKPiArCQkJcmV0ID0gZG1hX2J1Zl9waW4oYXR0YWNoKTsKPiAr CQkJaWYgKHJldCkKPiArCQkJCWdvdG8gZXJyX3VubG9jazsKPiArCQl9Cj4gKwo+ICsJCXNndCA9 IGRtYWJ1Zi0+b3BzLT5tYXBfZG1hX2J1ZihhdHRhY2gsIERNQV9CSURJUkVDVElPTkFMKTsKPiAr CQlpZiAoIXNndCkKPiArCQkJc2d0ID0gRVJSX1BUUigtRU5PTUVNKTsKPiArCQlpZiAoSVNfRVJS KHNndCkpIHsKPiArCQkJcmV0ID0gUFRSX0VSUihzZ3QpOwo+ICsJCQlnb3RvIGVycl91bnBpbjsK PiArCQl9Cj4gKwkJaWYgKGRtYV9idWZfaXNfZHluYW1pYyhhdHRhY2gtPmRtYWJ1ZikpCj4gKwkJ CXJlc2VydmF0aW9uX29iamVjdF91bmxvY2soYXR0YWNoLT5kbWFidWYtPnJlc3YpOwo+ICsJCWF0 dGFjaC0+c2d0ID0gc2d0Owo+ICsJCWF0dGFjaC0+ZGlyID0gRE1BX0JJRElSRUNUSU9OQUw7Cj4g Kwl9Cj4gKwo+ICAJcmV0dXJuIGF0dGFjaDsKPiAgCj4gIGVycl9hdHRhY2g6Cj4gIAlrZnJlZShh dHRhY2gpOwo+ICAJbXV0ZXhfdW5sb2NrKCZkbWFidWYtPmxvY2spOwo+ICAJcmV0dXJuIEVSUl9Q VFIocmV0KTsKPiArCj4gK2Vycl91bnBpbjoKPiArCWlmIChkbWFfYnVmX2lzX2R5bmFtaWMoYXR0 YWNoLT5kbWFidWYpKQo+ICsJCWRtYV9idWZfdW5waW4oYXR0YWNoKTsKPiArCj4gK2Vycl91bmxv Y2s6Cj4gKwlpZiAoZG1hX2J1Zl9pc19keW5hbWljKGF0dGFjaC0+ZG1hYnVmKSkKPiArCQlyZXNl cnZhdGlvbl9vYmplY3RfdW5sb2NrKGF0dGFjaC0+ZG1hYnVmLT5yZXN2KTsKPiArCj4gKwlkbWFf YnVmX2RldGFjaChkbWFidWYsIGF0dGFjaCk7Cj4gKwlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICt9 Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKGRtYV9idWZfZHluYW1pY19hdHRhY2gpOwo+ICsKPiArLyoq Cj4gKyAqIGRtYV9idWZfYXR0YWNoIC0gV3JhcHBlciBmb3IgZG1hX2J1Zl9keW5hbWljX2F0dGFj aAo+ICsgKiBAZG1hYnVmOglbaW5dCWJ1ZmZlciB0byBhdHRhY2ggZGV2aWNlIHRvLgo+ICsgKiBA ZGV2OglbaW5dCWRldmljZSB0byBiZSBhdHRhY2hlZC4KPiArICoKPiArICogV3JhcHBlciB0byBj YWxsIGRtYV9idWZfZHluYW1pY19hdHRhY2goKSBmb3IgZHJpdmVycyB3aGljaCBzdGlsbCB1c2Ug YSBzdGF0aWMKPiArICogbWFwcGluZy4KPiArICovCj4gK3N0cnVjdCBkbWFfYnVmX2F0dGFjaG1l bnQgKmRtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCj4gKwkJCQkJICBzdHJ1 Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArCXJldHVybiBkbWFfYnVmX2R5bmFtaWNfYXR0YWNoKGRt YWJ1ZiwgZGV2LCBOVUxMLCBOVUxMKTsKPiAgfQo+ICBFWFBPUlRfU1lNQk9MX0dQTChkbWFfYnVm X2F0dGFjaCk7Cj4gIAo+IEBAIC03MTcsMTEgKzc4MiwyMiBAQCB2b2lkIGRtYV9idWZfZGV0YWNo KHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFj aCkKPiAgCWlmIChXQVJOX09OKCFkbWFidWYgfHwgIWF0dGFjaCkpCj4gIAkJcmV0dXJuOwo+ICAK PiAtCWlmIChhdHRhY2gtPnNndCkKPiArCWlmIChhdHRhY2gtPnNndCkgewo+ICsJCWlmIChkbWFf YnVmX2lzX2R5bmFtaWMoYXR0YWNoLT5kbWFidWYpKQo+ICsJCQlyZXNlcnZhdGlvbl9vYmplY3Rf bG9jayhhdHRhY2gtPmRtYWJ1Zi0+cmVzdiwgTlVMTCk7Cj4gKwo+ICAJCWRtYWJ1Zi0+b3BzLT51 bm1hcF9kbWFfYnVmKGF0dGFjaCwgYXR0YWNoLT5zZ3QsIGF0dGFjaC0+ZGlyKTsKPiAgCj4gKwkJ aWYgKGRtYV9idWZfaXNfZHluYW1pYyhhdHRhY2gtPmRtYWJ1ZikpIHsKPiArCQkJZG1hX2J1Zl91 bnBpbihhdHRhY2gpOwo+ICsJCQlyZXNlcnZhdGlvbl9vYmplY3RfdW5sb2NrKGF0dGFjaC0+ZG1h YnVmLT5yZXN2KTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICAJbXV0ZXhfbG9jaygmZG1hYnVmLT5sb2Nr KTsKClRpbWUgdG8gZGl0Y2ggZG1hYnVmLT5sb2NrIGluIGZhdm91ciBvZiB0aGUgcmVzZXJ2YXRp b24gb2JqPyBXZSBoYXZlIGEKZmFsbGJhY2sgcmVzdl9vYmogaW4gc3RydWN0IGRtYV9idWYgYWxy ZWFkeSwgc28gdGhpcyBpcyBuZXZlciBudWxsLCBhbmQgSQp0aGluayB3b3VsZCBjbGVhbiB1cCB0 aGUgY29kZSBhIGJpdC4KCgo+ICsJcmVzZXJ2YXRpb25fb2JqZWN0X2xvY2soZG1hYnVmLT5yZXN2 LCBOVUxMKTsKPiAgCWxpc3RfZGVsKCZhdHRhY2gtPm5vZGUpOwo+ICsJcmVzZXJ2YXRpb25fb2Jq ZWN0X3VubG9jayhkbWFidWYtPnJlc3YpOwo+ICAJaWYgKGRtYWJ1Zi0+b3BzLT5kZXRhY2gpCj4g IAkJZG1hYnVmLT5vcHMtPmRldGFjaChkbWFidWYsIGF0dGFjaCk7Cj4gIAo+IEBAIC03MzAsNiAr ODA2LDQ0IEBAIHZvaWQgZG1hX2J1Zl9kZXRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1Ziwgc3Ry dWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKQo+ICB9Cj4gIEVYUE9SVF9TWU1CT0xfR1BM KGRtYV9idWZfZGV0YWNoKTsKPiAgCj4gKy8qKgo+ICsgKiBkbWFfYnVmX3BpbiAtIExvY2sgZG93 biB0aGUgRE1BLWJ1Zgo+ICsgKgo+ICsgKiBAYXR0YWNoOglbaW5dCWF0dGFjaG1lbnQgd2hpY2gg c2hvdWxkIGJlIHBpbm5lZAo+ICsgKgo+ICsgKiBSZXR1cm5zOgo+ICsgKiAwIG9uIHN1Y2Nlc3Ms IG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KPiArICovCj4gK2ludCBkbWFfYnVmX3Bp bihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpCj4gK3sKPiArCXN0cnVjdCBkbWFf YnVmICpkbWFidWYgPSBhdHRhY2gtPmRtYWJ1ZjsKPiArCWludCByZXQgPSAwOwo+ICsKPiArCXJl c2VydmF0aW9uX29iamVjdF9hc3NlcnRfaGVsZChkbWFidWYtPnJlc3YpOwo+ICsKPiArCWlmIChk bWFidWYtPm9wcy0+cGluKQo+ICsJCXJldCA9IGRtYWJ1Zi0+b3BzLT5waW4oYXR0YWNoKTsKPiAr Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKGRtYV9idWZfcGluKTsK PiArCj4gKy8qKgo+ICsgKiBkbWFfYnVmX3VucGluIC0gUmVtb3ZlIGxvY2sgZnJvbSBETUEtYnVm Cj4gKyAqCj4gKyAqIEBhdHRhY2g6CVtpbl0JYXR0YWNobWVudCB3aGljaCBzaG91bGQgYmUgdW5w aW5uZWQKPiArICovCj4gK3ZvaWQgZG1hX2J1Zl91bnBpbihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2ht ZW50ICphdHRhY2gpCj4gK3sKPiArCXN0cnVjdCBkbWFfYnVmICpkbWFidWYgPSBhdHRhY2gtPmRt YWJ1ZjsKPiArCj4gKwlyZXNlcnZhdGlvbl9vYmplY3RfYXNzZXJ0X2hlbGQoZG1hYnVmLT5yZXN2 KTsKPiArCj4gKwlpZiAoZG1hYnVmLT5vcHMtPnVucGluKQo+ICsJCWRtYWJ1Zi0+b3BzLT51bnBp bihhdHRhY2gpOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKGRtYV9idWZfdW5waW4pOwo+ICsK PiAgLyoqCj4gICAqIGRtYV9idWZfbWFwX2F0dGFjaG1lbnQgLSBSZXR1cm5zIHRoZSBzY2F0dGVy bGlzdCB0YWJsZSBvZiB0aGUgYXR0YWNobWVudDsKPiAgICogbWFwcGVkIGludG8gX2RldmljZV8g YWRkcmVzcyBzcGFjZS4gSXMgYSB3cmFwcGVyIGZvciBtYXBfZG1hX2J1ZigpIG9mIHRoZQo+IEBA IC03NDksNiArODYzLDcgQEAgc3RydWN0IHNnX3RhYmxlICpkbWFfYnVmX21hcF9hdHRhY2htZW50 KHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCwKPiAgCQkJCQllbnVtIGRtYV9kYXRh X2RpcmVjdGlvbiBkaXJlY3Rpb24pCj4gIHsKPiAgCXN0cnVjdCBzZ190YWJsZSAqc2dfdGFibGU7 Cj4gKwlpbnQgcjsKPiAgCj4gIAltaWdodF9zbGVlcCgpOwo+ICAKPiBAQCAtNzY3LDEwICs4ODIs MjkgQEAgc3RydWN0IHNnX3RhYmxlICpkbWFfYnVmX21hcF9hdHRhY2htZW50KHN0cnVjdCBkbWFf YnVmX2F0dGFjaG1lbnQgKmF0dGFjaCwKPiAgCQlyZXR1cm4gYXR0YWNoLT5zZ3Q7Cj4gIAl9Cj4g IAo+ICsJaWYgKGRtYV9idWZfYXR0YWNobWVudF9pc19keW5hbWljKGF0dGFjaCkpIHsKPiArCQly ZXNlcnZhdGlvbl9vYmplY3RfYXNzZXJ0X2hlbGQoYXR0YWNoLT5kbWFidWYtPnJlc3YpOwo+ICsK PiArCX0gZWxzZSBpZiAoZG1hX2J1Zl9pc19keW5hbWljKGF0dGFjaC0+ZG1hYnVmKSkgewo+ICsJ CXJlc2VydmF0aW9uX29iamVjdF9sb2NrKGF0dGFjaC0+ZG1hYnVmLT5yZXN2LCBOVUxMKTsKPiAr CQlyID0gZG1hX2J1Zl9waW4oYXR0YWNoKTsKPiArCQlpZiAocikgewo+ICsJCQlyZXNlcnZhdGlv bl9vYmplY3RfdW5sb2NrKGF0dGFjaC0+ZG1hYnVmLT5yZXN2KTsKPiArCQkJcmV0dXJuIEVSUl9Q VFIocik7Cj4gKwkJfQo+ICsJfQoKV2l0aCB0aGlzIGRlc2lnbiAoYmVjYXVzZSB3ZSBjYW4ndCBj YWNoZSBhdCBhdHRhY2ggdGltZSB1bmNvbmRpdGlvbmFsbHkpCndlIGluZmxpY3QgdGhlIHJlc2Vy dmF0aW9uIGxvY2sgb24gYWxsIGltcG9ydGVycy4gU28gbmVlZHM6CgoJfSBlbHNlIHsKCQkvKiBu ZWl0aGVyIGltcG9ydGVyIG5vciBleHBvcnRlciBhcmUgZHluYW1pY2UgKi8KCQltaWdodF9sb2Nr KGRtYWJ1Zi0+cmVzdi0+d3dfbXV0ZXgpOwoJfQoKU2FtZSBmb3IgZG1hX2J1Zl91bm1hcF9hdHRh Y2htZW50LgoKSSBhbHNvIGV4cGVjdCB0aGF0IHRoaXMgd2lsbCBibG93IHVwIGluIGludGVsLWdm eC1jaSA6LS8gSSBkaWQgbG9vayBhdApwcmV2aW91cyBpbnRlbC1nZngtY2kgcnVucyBvZiB5b3Vy IHNlcmllcywgYW5kIHRoZSBsYXN0IG9uZSB0aGF0IGRpZCBwYXNzCndhcyB0aGUgb25lIHRoYXQg c3RpbGwgaGFkIHRoZSBjYWNoaW5nIGluIF9hdHRhY2goKToKCkdlZXogSSB3YXMgc29vb29vb29v byBsb2NraW5nIGZvcndhcmQgdG8gc2xhcHBpbmcgYW4gci1iIG9uIHRoaXMgYW5kCnZvbHVudGVl cmluZyBteXNlbGYgdG8gcG9saXNoIHRoZSBrZXJuZWxkb2MgKHdoaWNoIGlzbid0IGdyZWF0LCBi dXQgYWxzbwpwcmUtZXhpc3RpbmcgY29uZGl0aW9uIHBsdXMgb24gbXkgdG9kbyBsaXN0IGFueXdh eSkgOi0oCgo+ICsKPiAgCXNnX3RhYmxlID0gYXR0YWNoLT5kbWFidWYtPm9wcy0+bWFwX2RtYV9i dWYoYXR0YWNoLCBkaXJlY3Rpb24pOwo+ICAJaWYgKCFzZ190YWJsZSkKPiAgCQlzZ190YWJsZSA9 IEVSUl9QVFIoLUVOT01FTSk7Cj4gIAo+ICsJaWYgKCFkbWFfYnVmX2F0dGFjaG1lbnRfaXNfZHlu YW1pYyhhdHRhY2gpICYmCj4gKwkgICAgZG1hX2J1Zl9pc19keW5hbWljKGF0dGFjaC0+ZG1hYnVm KSkgewo+ICsJCWlmIChJU19FUlIoc2dfdGFibGUpKQo+ICsJCQlkbWFfYnVmX3VucGluKGF0dGFj aCk7Cj4gKwkJcmVzZXJ2YXRpb25fb2JqZWN0X3VubG9jayhhdHRhY2gtPmRtYWJ1Zi0+cmVzdik7 Cj4gKwl9Cj4gKwo+ICAJaWYgKCFJU19FUlIoc2dfdGFibGUpICYmIGF0dGFjaC0+ZG1hYnVmLT5v cHMtPmNhY2hlX3NndF9tYXBwaW5nKSB7Cj4gIAkJYXR0YWNoLT5zZ3QgPSBzZ190YWJsZTsKPiAg CQlhdHRhY2gtPmRpciA9IGRpcmVjdGlvbjsKPiBAQCAtODAyLDEwICs5MzYsNDEgQEAgdm9pZCBk bWFfYnVmX3VubWFwX2F0dGFjaG1lbnQoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNo LAo+ICAJaWYgKGF0dGFjaC0+c2d0ID09IHNnX3RhYmxlKQo+ICAJCXJldHVybjsKPiAgCj4gKwlp ZiAoZG1hX2J1Zl9hdHRhY2htZW50X2lzX2R5bmFtaWMoYXR0YWNoKSkKPiArCQlyZXNlcnZhdGlv bl9vYmplY3RfYXNzZXJ0X2hlbGQoYXR0YWNoLT5kbWFidWYtPnJlc3YpOwo+ICsJZWxzZSBpZiAo ZG1hX2J1Zl9pc19keW5hbWljKGF0dGFjaC0+ZG1hYnVmKSkKPiArCQlyZXNlcnZhdGlvbl9vYmpl Y3RfbG9jayhhdHRhY2gtPmRtYWJ1Zi0+cmVzdiwgTlVMTCk7Cj4gKwo+ICAJYXR0YWNoLT5kbWFi dWYtPm9wcy0+dW5tYXBfZG1hX2J1ZihhdHRhY2gsIHNnX3RhYmxlLCBkaXJlY3Rpb24pOwo+ICsK PiArCWlmIChkbWFfYnVmX2lzX2R5bmFtaWMoYXR0YWNoLT5kbWFidWYpICYmCj4gKwkgICAgIWRt YV9idWZfYXR0YWNobWVudF9pc19keW5hbWljKGF0dGFjaCkpIHsKPiArCQlkbWFfYnVmX3VucGlu KGF0dGFjaCk7Cj4gKwkJcmVzZXJ2YXRpb25fb2JqZWN0X3VubG9jayhhdHRhY2gtPmRtYWJ1Zi0+ cmVzdik7Cj4gKwl9Cj4gIH0KPiAgRVhQT1JUX1NZTUJPTF9HUEwoZG1hX2J1Zl91bm1hcF9hdHRh Y2htZW50KTsKPiAgCj4gKy8qKgo+ICsgKiBkbWFfYnVmX21vdmVfbm90aWZ5IC0gbm90aWZ5IGF0 dGFjaG1lbnRzIHRoYXQgRE1BLWJ1ZiBpcyBtb3ZpbmcKPiArICoKPiArICogQGRtYWJ1ZjoJW2lu XQlidWZmZXIgd2hpY2ggaXMgbW92aW5nCj4gKyAqCj4gKyAqIEluZm9ybXMgYWxsIGF0dGFjaG1l bnN0IHRoYXQgdGhleSBuZWVkIHRvIGRlc3Ryb3kgYW5kIHJlY3JlYXRlZCBhbGwgdGhlaXIKPiAr ICogbWFwcGluZ3MuCj4gKyAqLwo+ICt2b2lkIGRtYV9idWZfbW92ZV9ub3RpZnkoc3RydWN0IGRt YV9idWYgKmRtYWJ1ZikKPiArewo+ICsJc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNo Owo+ICsKPiArCXJlc2VydmF0aW9uX29iamVjdF9hc3NlcnRfaGVsZChkbWFidWYtPnJlc3YpOwo+ ICsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnkoYXR0YWNoLCAmZG1hYnVmLT5hdHRhY2htZW50cywg bm9kZSkKPiArCQlpZiAoYXR0YWNoLT5pbXBvcnRlcl9vcHMgJiYgYXR0YWNoLT5pbXBvcnRlcl9v cHMtPm1vdmVfbm90aWZ5KQo+ICsJCQlhdHRhY2gtPmltcG9ydGVyX29wcy0+bW92ZV9ub3RpZnko YXR0YWNoKTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChkbWFfYnVmX21vdmVfbm90aWZ5KTsK PiArCj4gIC8qKgo+ICAgKiBET0M6IGNwdSBhY2Nlc3MKPiAgICoKPiBAQCAtMTIyNSwxMCArMTM5 MCwxMiBAQCBzdGF0aWMgaW50IGRtYV9idWZfZGVidWdfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMs IHZvaWQgKnVudXNlZCkKPiAgCQlzZXFfcHV0cyhzLCAiXHRBdHRhY2hlZCBEZXZpY2VzOlxuIik7 Cj4gIAkJYXR0YWNoX2NvdW50ID0gMDsKPiAgCj4gKwkJcmVzZXJ2YXRpb25fb2JqZWN0X2xvY2so YnVmX29iai0+cmVzdiwgTlVMTCk7Cj4gIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShhdHRhY2hfb2Jq LCAmYnVmX29iai0+YXR0YWNobWVudHMsIG5vZGUpIHsKPiAgCQkJc2VxX3ByaW50ZihzLCAiXHQl c1xuIiwgZGV2X25hbWUoYXR0YWNoX29iai0+ZGV2KSk7Cj4gIAkJCWF0dGFjaF9jb3VudCsrOwo+ ICAJCX0KPiArCQlyZXNlcnZhdGlvbl9vYmplY3RfdW5sb2NrKGJ1Zl9vYmotPnJlc3YpOwoKWWVh aCBkZWZpbml0ZWx5IHRpbWUgdG8gcmV0aXJlIGRtYWJ1Zi0+bG9jayBJIHRoaW5rLgoKQ2hlZXJz LCBEYW5pZWwKCj4gIAo+ICAJCXNlcV9wcmludGYocywgIlRvdGFsICVkIGRldmljZXMgYXR0YWNo ZWRcblxuIiwKPiAgCQkJCWF0dGFjaF9jb3VudCk7Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGlu dXgvZG1hLWJ1Zi5oIGIvaW5jbHVkZS9saW51eC9kbWEtYnVmLmgKPiBpbmRleCAwMWFkNWI5NDJh NmYuLmNjYWQyZmMxZjY0MCAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaAo+ ICsrKyBiL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oCj4gQEAgLTkyLDE0ICs5Miw0MCBAQCBzdHJ1 Y3QgZG1hX2J1Zl9vcHMgewo+ICAJICovCj4gIAl2b2lkICgqZGV0YWNoKShzdHJ1Y3QgZG1hX2J1 ZiAqLCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICopOwo+ICAKPiArCS8qKgo+ICsJICogQHBp bjoKPiArCSAqCj4gKwkgKiBUaGlzIGlzIGNhbGxlZCBieSBkbWFfYnVmX3BpbiBhbmQgbGV0cyB0 aGUgZXhwb3J0ZXIga25vdyB0aGF0IHRoZQo+ICsJICogRE1BLWJ1ZiBjYW4ndCBiZSBtb3ZlZCBh bnkgbW9yZS4KPiArCSAqCj4gKwkgKiBUaGlzIGlzIGNhbGxlZCB3aXRoIHRoZSBkbWFidWYtPnJl c3Ygb2JqZWN0IGxvY2tlZC4KPiArCSAqCj4gKwkgKiBUaGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFs Lgo+ICsJICoKPiArCSAqIFJldHVybnM6Cj4gKwkgKgo+ICsJICogMCBvbiBzdWNjZXNzLCBuZWdh dGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gKwkgKi8KPiArCWludCAoKnBpbikoc3RydWN0 IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTsKPiArCj4gKwkvKioKPiArCSAqIEB1bnBpbjoK PiArCSAqCj4gKwkgKiBUaGlzIGlzIGNhbGxlZCBieSBkbWFfYnVmX3VucGluIGFuZCBsZXRzIHRo ZSBleHBvcnRlciBrbm93IHRoYXQgdGhlCj4gKwkgKiBETUEtYnVmIGNhbiBiZSBtb3ZlZCBhZ2Fp bi4KPiArCSAqCj4gKwkgKiBUaGlzIGlzIGNhbGxlZCB3aXRoIHRoZSBkbWFidWYtPnJlc3Ygb2Jq ZWN0IGxvY2tlZC4KPiArCSAqCj4gKwkgKiBUaGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsLgo+ICsJ ICovCj4gKwl2b2lkICgqdW5waW4pKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCk7 Cj4gKwo+ICAJLyoqCj4gIAkgKiBAbWFwX2RtYV9idWY6Cj4gIAkgKgo+ICAJICogVGhpcyBpcyBj YWxsZWQgYnkgZG1hX2J1Zl9tYXBfYXR0YWNobWVudCgpIGFuZCBpcyB1c2VkIHRvIG1hcCBhCj4g IAkgKiBzaGFyZWQgJmRtYV9idWYgaW50byBkZXZpY2UgYWRkcmVzcyBzcGFjZSwgYW5kIGl0IGlz IG1hbmRhdG9yeS4gSXQKPiAtCSAqIGNhbiBvbmx5IGJlIGNhbGxlZCBpZiBAYXR0YWNoIGhhcyBi ZWVuIGNhbGxlZCBzdWNjZXNzZnVsbHkuIFRoaXMKPiAtCSAqIGVzc2VudGlhbGx5IHBpbnMgdGhl IERNQSBidWZmZXIgaW50byBwbGFjZSwgYW5kIGl0IGNhbm5vdCBiZSBtb3ZlZAo+IC0JICogYW55 IG1vcmUKPiArCSAqIGNhbiBvbmx5IGJlIGNhbGxlZCBpZiBAYXR0YWNoIGhhcyBiZWVuIGNhbGxl ZCBzdWNjZXNzZnVsbHkuCj4gIAkgKgo+ICAJICogVGhpcyBjYWxsIG1heSBzbGVlcCwgZS5nLiB3 aGVuIHRoZSBiYWNraW5nIHN0b3JhZ2UgZmlyc3QgbmVlZHMgdG8gYmUKPiAgCSAqIGFsbG9jYXRl ZCwgb3IgbW92ZWQgdG8gYSBsb2NhdGlvbiBzdWl0YWJsZSBmb3IgYWxsIGN1cnJlbnRseSBhdHRh Y2hlZAo+IEBAIC0xMjAsNiArMTQ2LDkgQEAgc3RydWN0IGRtYV9idWZfb3BzIHsKPiAgCSAqIGFu eSBvdGhlciBraW5kIG9mIHNoYXJpbmcgdGhhdCB0aGUgZXhwb3J0ZXIgbWlnaHQgd2lzaCB0byBt YWtlCj4gIAkgKiBhdmFpbGFibGUgdG8gYnVmZmVyLXVzZXJzLgo+ICAJICoKPiArCSAqIFRoaXMg aXMgYWx3YXlzIGNhbGxlZCB3aXRoIHRoZSBkbWFidWYtPnJlc3Ygb2JqZWN0IGxvY2tlZCB3aGVu Cj4gKwkgKiB0aGUgcGluL3VucGluIGNhbGxiYWNrcyBhcmUgaW1wbGVtZW50ZWQuCj4gKwkgKgo+ ICAJICogUmV0dXJuczoKPiAgCSAqCj4gIAkgKiBBICZzZ190YWJsZSBzY2F0dGVyIGxpc3Qgb2Yg b3IgdGhlIGJhY2tpbmcgc3RvcmFnZSBvZiB0aGUgRE1BIGJ1ZmZlciwKPiBAQCAtMTM3LDkgKzE2 Niw2IEBAIHN0cnVjdCBkbWFfYnVmX29wcyB7Cj4gIAkgKgo+ICAJICogVGhpcyBpcyBjYWxsZWQg YnkgZG1hX2J1Zl91bm1hcF9hdHRhY2htZW50KCkgYW5kIHNob3VsZCB1bm1hcCBhbmQKPiAgCSAq IHJlbGVhc2UgdGhlICZzZ190YWJsZSBhbGxvY2F0ZWQgaW4gQG1hcF9kbWFfYnVmLCBhbmQgaXQg aXMgbWFuZGF0b3J5Lgo+IC0JICogSXQgc2hvdWxkIGFsc28gdW5waW4gdGhlIGJhY2tpbmcgc3Rv cmFnZSBpZiB0aGlzIGlzIHRoZSBsYXN0IG1hcHBpbmcKPiAtCSAqIG9mIHRoZSBETUEgYnVmZmVy LCBpdCB0aGUgZXhwb3J0ZXIgc3VwcG9ydHMgYmFja2luZyBzdG9yYWdlCj4gLQkgKiBtaWdyYXRp b24uCj4gIAkgKi8KPiAgCXZvaWQgKCp1bm1hcF9kbWFfYnVmKShzdHJ1Y3QgZG1hX2J1Zl9hdHRh Y2htZW50ICosCj4gIAkJCSAgICAgIHN0cnVjdCBzZ190YWJsZSAqLAo+IEBAIC0zMzAsNiArMzU2 LDM0IEBAIHN0cnVjdCBkbWFfYnVmIHsKPiAgCX0gY2JfZXhjbCwgY2Jfc2hhcmVkOwo+ICB9Owo+ ICAKPiArLyoqCj4gKyAqIHN0cnVjdCBkbWFfYnVmX2F0dGFjaF9vcHMgLSBpbXBvcnRlciBvcGVy YXRpb25zIGZvciBhbiBhdHRhY2htZW50Cj4gKyAqIEBtb3ZlX25vdGlmeTogW29wdGlvbmFsXSBu b3RpZmljYXRpb24gdGhhdCB0aGUgRE1BLWJ1ZiBpcyBtb3ZpbmcKPiArICoKPiArICogQXR0YWNo bWVudCBvcGVyYXRpb25zIGltcGxlbWVudGVkIGJ5IHRoZSBpbXBvcnRlci4KPiArICovCj4gK3N0 cnVjdCBkbWFfYnVmX2F0dGFjaF9vcHMgewo+ICsJLyoqCj4gKwkgKiBAbW92ZV9ub3RpZnkKPiAr CSAqCj4gKwkgKiBJZiB0aGlzIGNhbGxiYWNrIGlzIHByb3ZpZGVkIHRoZSBmcmFtZXdvcmsgY2Fu IGF2b2lkIHBpbm5pbmcgdGhlCj4gKwkgKiBiYWNraW5nIHN0b3JlIHdoaWxlIG1hcHBpbmdzIGV4 aXN0cy4KPiArCSAqCj4gKwkgKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aXRoIHRoZSBsb2Nr IG9mIHRoZSByZXNlcnZhdGlvbiBvYmplY3QKPiArCSAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgZG1h X2J1ZiBoZWxkIGFuZCB0aGUgbWFwcGluZyBmdW5jdGlvbiBtdXN0IGJlCj4gKwkgKiBjYWxsZWQg d2l0aCB0aGlzIGxvY2sgaGVsZCBhcyB3ZWxsLiBUaGlzIG1ha2VzIHN1cmUgdGhhdCBubyBtYXBw aW5nCj4gKwkgKiBpcyBjcmVhdGVkIGNvbmN1cnJlbnRseSB3aXRoIGFuIG9uZ29pbmcgbW92ZSBv cGVyYXRpb24uCj4gKwkgKgo+ICsJICogTWFwcGluZ3Mgc3RheSB2YWxpZCBhbmQgYXJlIG5vdCBk aXJlY3RseSBhZmZlY3RlZCBieSB0aGlzIGNhbGxiYWNrLgo+ICsJICogQnV0IHRoZSBETUEtYnVm IGNhbiBub3cgYmUgaW4gYSBkaWZmZXJlbnQgcGh5c2ljYWwgbG9jYXRpb24sIHNvIGFsbAo+ICsJ ICogbWFwcGluZ3Mgc2hvdWxkIGJlIGRlc3Ryb3llZCBhbmQgcmUtY3JlYXRlZCBhcyBzb29uIGFz IHBvc3NpYmxlLgo+ICsJICoKPiArCSAqIE5ldyBtYXBwaW5ncyBjYW4gYmUgY3JlYXRlZCBhZnRl ciB0aGlzIGNhbGxiYWNrIHJldHVybnMsIGFuZCB3aWxsCj4gKwkgKiBwb2ludCB0byB0aGUgbmV3 IGxvY2F0aW9uIG9mIHRoZSBETUEtYnVmLgo+ICsJICovCj4gKwl2b2lkICgqbW92ZV9ub3RpZnkp KHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCk7Cj4gK307Cj4gKwo+ICAvKioKPiAg ICogc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAtIGhvbGRzIGRldmljZS1idWZmZXIgYXR0YWNo bWVudCBkYXRhCj4gICAqIEBkbWFidWY6IGJ1ZmZlciBmb3IgdGhpcyBhdHRhY2htZW50Lgo+IEBA IC0zMzgsNiArMzkyLDggQEAgc3RydWN0IGRtYV9idWYgewo+ICAgKiBAc2d0OiBjYWNoZWQgbWFw cGluZy4KPiAgICogQGRpcjogZGlyZWN0aW9uIG9mIGNhY2hlZCBtYXBwaW5nLgo+ICAgKiBAcHJp djogZXhwb3J0ZXIgc3BlY2lmaWMgYXR0YWNobWVudCBkYXRhLgo+ICsgKiBAaW1wb3J0ZXJfb3Bz OiBpbXBvcnRlciBvcGVyYXRpb25zIGZvciB0aGlzIGF0dGFjaG1lbnQuCj4gKyAqIEBpbXBvcnRl cl9wcml2OiBpbXBvcnRlciBzcGVjaWZpYyBhdHRhY2htZW50IGRhdGEuCj4gICAqCj4gICAqIFRo aXMgc3RydWN0dXJlIGhvbGRzIHRoZSBhdHRhY2htZW50IGluZm9ybWF0aW9uIGJldHdlZW4gdGhl IGRtYV9idWYgYnVmZmVyCj4gICAqIGFuZCBpdHMgdXNlciBkZXZpY2UocykuIFRoZSBsaXN0IGNv bnRhaW5zIG9uZSBhdHRhY2htZW50IHN0cnVjdCBwZXIgZGV2aWNlCj4gQEAgLTM1NSw2ICs0MTEs OSBAQCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50IHsKPiAgCXN0cnVjdCBzZ190YWJsZSAqc2d0 Owo+ICAJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyOwo+ICAJdm9pZCAqcHJpdjsKPiArCj4g Kwljb25zdCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2hfb3BzICppbXBvcnRlcl9vcHM7Cj4gKwl2b2lk ICppbXBvcnRlcl9wcml2Owo+ICB9Owo+ICAKPiAgLyoqCj4gQEAgLTQwNSwxMCArNDY0LDQyIEBA IHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfZG1hX2J1ZihzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKQo+ ICAJZ2V0X2ZpbGUoZG1hYnVmLT5maWxlKTsKPiAgfQo+ICAKPiArLyoqCj4gKyAqIGRtYV9idWZf aXNfZHluYW1pYyAtIGNoZWNrIGlmIGEgRE1BLWJ1ZiB1c2VzIGR5bmFtaWMgbWFwcGluZ3MuCj4g KyAqIEBkbWFidWY6IHRoZSBETUEtYnVmIHRvIGNoZWNrCj4gKyAqCj4gKyAqIFJldHVybnMgdHJ1 ZSBpZiBhIERNQS1idWYgZXhwb3J0ZXIgd2FudHMgdG8gY3JlYXRlIGR5bmFtaWMgc2cgdGFibGUg bWFwcGluZ3MKPiArICogZm9yIGVhY2ggYXR0YWNobWVudC4gRmFsc2UgaWYgb25seSBhIHNpbmds ZSBzdGF0aWMgc2cgdGFibGUgc2hvdWxkIGJlIHVzZWQuCj4gKyAqLwo+ICtzdGF0aWMgaW5saW5l IGJvb2wgZG1hX2J1Zl9pc19keW5hbWljKHN0cnVjdCBkbWFfYnVmICpkbWFidWYpCj4gK3sKPiAr CXJldHVybiAhIWRtYWJ1Zi0+b3BzLT5waW47Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBkbWFfYnVm X2F0dGFjaG1lbnRfaXNfZHluYW1pYyAtIGNoZWNrIGlmIGEgRE1BLWJ1ZiBhdHRhY2htZW50IHVz ZXMgZHluYW1pYwo+ICsgKiBtYXBwaW5zZwo+ICsgKiBAYXR0YWNoOiB0aGUgRE1BLWJ1ZiBhdHRh Y2htZW50IHRvIGNoZWNrCj4gKyAqCj4gKyAqIFJldHVybnMgdHJ1ZSBpZiBhIERNQS1idWYgaW1w b3J0ZXIgd2FudHMgdG8gdXNlIGR5bmFtaWMgc2cgdGFibGUgbWFwcGluZ3MgYW5kCj4gKyAqIGNh bGxzIHRoZSBtYXAvdW5tYXAgZnVuY3Rpb25zIHdpdGggdGhlIHJlc2VydmF0aW9uIG9iamVjdCBs b2NrZWQuCj4gKyAqLwo+ICtzdGF0aWMgaW5saW5lIGJvb2wKPiArZG1hX2J1Zl9hdHRhY2htZW50 X2lzX2R5bmFtaWMoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKQo+ICt7Cj4gKwly ZXR1cm4gYXR0YWNoLT5pbXBvcnRlcl9vcHMgJiYgYXR0YWNoLT5pbXBvcnRlcl9vcHMtPm1vdmVf bm90aWZ5Owo+ICt9Cj4gKwo+ICBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICpkbWFfYnVmX2F0 dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAo+IC0JCQkJCQkJc3RydWN0IGRldmljZSAqZGV2 KTsKPiArCQkJCQkgIHN0cnVjdCBkZXZpY2UgKmRldik7Cj4gK3N0cnVjdCBkbWFfYnVmX2F0dGFj aG1lbnQgKgo+ICtkbWFfYnVmX2R5bmFtaWNfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYs IHN0cnVjdCBkZXZpY2UgKmRldiwKPiArCQkgICAgICAgY29uc3Qgc3RydWN0IGRtYV9idWZfYXR0 YWNoX29wcyAqaW1wb3J0ZXJfb3BzLAo+ICsJCSAgICAgICB2b2lkICppbXBvcnRlcl9wcml2KTsK PiAgdm9pZCBkbWFfYnVmX2RldGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAo+IC0JCQkJc3Ry dWN0IGRtYV9idWZfYXR0YWNobWVudCAqZG1hYnVmX2F0dGFjaCk7Cj4gKwkJICAgIHN0cnVjdCBk bWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCk7Cj4gK2ludCBkbWFfYnVmX3BpbihzdHJ1Y3QgZG1h X2J1Zl9hdHRhY2htZW50ICphdHRhY2gpOwo+ICt2b2lkIGRtYV9idWZfdW5waW4oc3RydWN0IGRt YV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTsKPiAgCj4gIHN0cnVjdCBkbWFfYnVmICpkbWFfYnVm X2V4cG9ydChjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9leHBvcnRfaW5mbyAqZXhwX2luZm8pOwo+ICAK PiBAQCAtNDIwLDYgKzUxMSw3IEBAIHN0cnVjdCBzZ190YWJsZSAqZG1hX2J1Zl9tYXBfYXR0YWNo bWVudChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICosCj4gIAkJCQkJZW51bSBkbWFfZGF0YV9k aXJlY3Rpb24pOwo+ICB2b2lkIGRtYV9idWZfdW5tYXBfYXR0YWNobWVudChzdHJ1Y3QgZG1hX2J1 Zl9hdHRhY2htZW50ICosIHN0cnVjdCBzZ190YWJsZSAqLAo+ICAJCQkJZW51bSBkbWFfZGF0YV9k aXJlY3Rpb24pOwo+ICt2b2lkIGRtYV9idWZfbW92ZV9ub3RpZnkoc3RydWN0IGRtYV9idWYgKmRt YV9idWYpOwo+ICBpbnQgZG1hX2J1Zl9iZWdpbl9jcHVfYWNjZXNzKHN0cnVjdCBkbWFfYnVmICpk bWFfYnVmLAo+ICAJCQkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7Cj4gIGludCBk bWFfYnVmX2VuZF9jcHVfYWNjZXNzKHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmLAo+IC0tIAo+IDIu MTcuMQo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Cj4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVs LWdmeAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0 aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2ludGVsLWdmeA==