From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 2/9] dma-buf: add dynamic DMA-buf handling v7 Date: Wed, 8 May 2019 11:51:49 +0200 Message-ID: <20190508095149.GV17751@phenom.ffwll.local> References: <20190507081338.2571-1-christian.koenig@amd.com> <20190507081338.2571-2-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-x542.google.com (mail-ed1-x542.google.com [IPv6:2a00:1450:4864:20::542]) by gabe.freedesktop.org (Postfix) with ESMTPS id AE98C892D4 for ; Wed, 8 May 2019 09:51:55 +0000 (UTC) Received: by mail-ed1-x542.google.com with SMTP id w33so19159466edb.10 for ; Wed, 08 May 2019 02:51:55 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20190507081338.2571-2-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: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBNYXkgMDcsIDIwMTkgYXQgMTA6MTM6MzFBTSArMDIwMCwgQ2hyaXN0aWFuIEvDtm5p 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 ZXMKCkltbyBtdWNoIGJldHRlciwgSSBjYW4ga2VlcCB0aGUgZW50aXJlIHRoaW5nIGluIG15IGJy YWluIG5vdyAoYW5kIHRoZSBzZ3QKY2FjaGluZyBwYXRjaCBpcyBzaW1wbGUgZW5vdWdoIHRoYXQg SSBjYW4gcmVtZW1iZXIgd2hhdCBpdCBkb2VzKS4KCj4gdjc6IHBpbi91bnBpbiB0YWtlcyBhbiBh dHRhY2htZW50IG5vdwo+IAo+IFNpZ25lZC1vZmYtYnk6IENocmlzdGlhbiBLw7ZuaWcgPGNocmlz dGlhbi5rb2VuaWdAYW1kLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYyB8 IDE5MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQo+ICBpbmNsdWRlL2xp bnV4L2RtYS1idWYuaCAgIHwgIDkxICsrKysrKysrKysrKysrKystLQo+ICAyIGZpbGVzIGNoYW5n ZWQsIDI2MSBpbnNlcnRpb25zKCspLCAyMCBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMKPiBp bmRleCA3NzVlMTNmNTQwODMuLjQ2NGE0YzM4ZGY2YyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2Rt YS1idWYvZG1hLWJ1Zi5jCj4gKysrIGIvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYwo+IEBAIC01 MzAsMTAgKzUzMCwxMiBAQCB2b2lkIGRtYV9idWZfcHV0KHN0cnVjdCBkbWFfYnVmICpkbWFidWYp Cj4gIEVYUE9SVF9TWU1CT0xfR1BMKGRtYV9idWZfcHV0KTsKPiAgCj4gIC8qKgo+IC0gKiBkbWFf YnVmX2F0dGFjaCAtIEFkZCB0aGUgZGV2aWNlIHRvIGRtYV9idWYncyBhdHRhY2htZW50cyBsaXN0 OyBvcHRpb25hbGx5LAo+ICsgKiBkbWFfYnVmX2R5bmFtaWNfYXR0YWNoIC0gQWRkIHRoZSBkZXZp Y2UgdG8gZG1hX2J1ZidzIGF0dGFjaG1lbnRzIGxpc3Q7IG9wdGlvbmFsbHksCj4gICAqIGNhbGxz IGF0dGFjaCgpIG9mIGRtYV9idWZfb3BzIHRvIGFsbG93IGRldmljZS1zcGVjaWZpYyBhdHRhY2gg ZnVuY3Rpb25hbGl0eQo+IC0gKiBAZG1hYnVmOglbaW5dCWJ1ZmZlciB0byBhdHRhY2ggZGV2aWNl IHRvLgo+IC0gKiBAZGV2OglbaW5dCWRldmljZSB0byBiZSBhdHRhY2hlZC4KPiArICogQGRtYWJ1 ZjoJCVtpbl0JYnVmZmVyIHRvIGF0dGFjaCBkZXZpY2UgdG8uCj4gKyAqIEBkZXY6CQlbaW5dCWRl dmljZSB0byBiZSBhdHRhY2hlZC4KPiArICogQGltcG9ydGVyX29wcwlbaW5dCWltcG9ydGVyIG9w ZXJhdGlvbnMgZm9yIHRoZSBhdHRhY2htZW50Cj4gKyAqIEBpbXBvcnRlcl9wcml2CVtpbl0JaW1w b3J0ZXIgcHJpdmF0ZSBwb2ludGVyIGZvciB0aGUgYXR0YWNobWVudAo+ICAgKgo+ICAgKiBSZXR1 cm5zIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgcG9pbnRlciBmb3IgdGhpcyBhdHRhY2htZW50 LiBBdHRhY2htZW50cwo+ICAgKiBtdXN0IGJlIGNsZWFuZWQgdXAgYnkgY2FsbGluZyBkbWFfYnVm X2RldGFjaCgpLgo+IEBAIC01NDcsOCArNTQ5LDEwIEBAIEVYUE9SVF9TWU1CT0xfR1BMKGRtYV9i dWZfcHV0KTsKPiAgICogYWNjZXNzaWJsZSB0byBAZGV2LCBhbmQgY2Fubm90IGJlIG1vdmVkIHRv IGEgbW9yZSBzdWl0YWJsZSBwbGFjZS4gVGhpcyBpcwo+ICAgKiBpbmRpY2F0ZWQgd2l0aCB0aGUg ZXJyb3IgY29kZSAtRUJVU1kuCj4gICAqLwo+IC1zdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICpk bWFfYnVmX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAo+IC0JCQkJCSAgc3RydWN0IGRl dmljZSAqZGV2KQo+ICtzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICoKPiArZG1hX2J1Zl9keW5h bWljX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBzdHJ1Y3QgZGV2aWNlICpkZXYsCj4g KwkJICAgICAgIGNvbnN0IHN0cnVjdCBkbWFfYnVmX2F0dGFjaF9vcHMgKmltcG9ydGVyX29wcywK PiArCQkgICAgICAgdm9pZCAqaW1wb3J0ZXJfcHJpdikKPiAgewo+ICAJc3RydWN0IGRtYV9idWZf YXR0YWNobWVudCAqYXR0YWNoOwo+ICAJaW50IHJldDsKPiBAQCAtNTYyLDYgKzU2Niw4IEBAIHN0 cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmRtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpk bWFidWYsCj4gIAo+ICAJYXR0YWNoLT5kZXYgPSBkZXY7Cj4gIAlhdHRhY2gtPmRtYWJ1ZiA9IGRt YWJ1ZjsKPiArCWF0dGFjaC0+aW1wb3J0ZXJfb3BzID0gaW1wb3J0ZXJfb3BzOwo+ICsJYXR0YWNo LT5pbXBvcnRlcl9wcml2ID0gaW1wb3J0ZXJfcHJpdjsKPiAgCj4gIAltdXRleF9sb2NrKCZkbWFi dWYtPmxvY2spOwo+ICAKPiBAQCAtNTcwLDcgKzU3Niw5IEBAIHN0cnVjdCBkbWFfYnVmX2F0dGFj aG1lbnQgKmRtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCj4gIAkJaWYgKHJl dCkKPiAgCQkJZ290byBlcnJfYXR0YWNoOwo+ICAJfQo+ICsJcmVzZXJ2YXRpb25fb2JqZWN0X2xv Y2soZG1hYnVmLT5yZXN2LCBOVUxMKTsKPiAgCWxpc3RfYWRkKCZhdHRhY2gtPm5vZGUsICZkbWFi dWYtPmF0dGFjaG1lbnRzKTsKPiArCXJlc2VydmF0aW9uX29iamVjdF91bmxvY2soZG1hYnVmLT5y ZXN2KTsKPiAgCj4gIAltdXRleF91bmxvY2soJmRtYWJ1Zi0+bG9jayk7Cj4gIAo+IEBAIC01OTQs NiArNjAyLDIxIEBAIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmRtYV9idWZfYXR0YWNoKHN0 cnVjdCBkbWFfYnVmICpkbWFidWYsCj4gIAltdXRleF91bmxvY2soJmRtYWJ1Zi0+bG9jayk7Cj4g IAlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICB9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKGRtYV9idWZf ZHluYW1pY19hdHRhY2gpOwo+ICsKPiArLyoqCj4gKyAqIGRtYV9idWZfYXR0YWNoIC0gV3JhcHBl ciBmb3IgZG1hX2J1Zl9keW5hbWljX2F0dGFjaAo+ICsgKiBAZG1hYnVmOglbaW5dCWJ1ZmZlciB0 byBhdHRhY2ggZGV2aWNlIHRvLgo+ICsgKiBAZGV2OglbaW5dCWRldmljZSB0byBiZSBhdHRhY2hl ZC4KPiArICoKPiArICogV3JhcHBlciB0byBjYWxsIGRtYV9idWZfZHluYW1pY19hdHRhY2goKSBm b3IgZHJpdmVycyB3aGljaCBzdGlsbCB1c2UgYSBzdGF0aWMKPiArICogbWFwcGluZy4KPiArICov Cj4gK3N0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmRtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFf YnVmICpkbWFidWYsCj4gKwkJCQkJICBzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArCXJldHVy biBkbWFfYnVmX2R5bmFtaWNfYXR0YWNoKGRtYWJ1ZiwgZGV2LCBOVUxMLCBOVUxMKTsKPiArfQo+ ICBFWFBPUlRfU1lNQk9MX0dQTChkbWFfYnVmX2F0dGFjaCk7Cj4gIAo+ICAvKioKPiBAQCAtNjE0 LDcgKzYzNyw5IEBAIHZvaWQgZG1hX2J1Zl9kZXRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1Ziwg c3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKQo+ICAJCQkJCSAgIERNQV9CSURJUkVD VElPTkFMKTsKPiAgCj4gIAltdXRleF9sb2NrKCZkbWFidWYtPmxvY2spOwo+ICsJcmVzZXJ2YXRp b25fb2JqZWN0X2xvY2soZG1hYnVmLT5yZXN2LCBOVUxMKTsKPiAgCWxpc3RfZGVsKCZhdHRhY2gt Pm5vZGUpOwo+ICsJcmVzZXJ2YXRpb25fb2JqZWN0X3VubG9jayhkbWFidWYtPnJlc3YpOwo+ICAJ aWYgKGRtYWJ1Zi0+b3BzLT5kZXRhY2gpCj4gIAkJZG1hYnVmLT5vcHMtPmRldGFjaChkbWFidWYs IGF0dGFjaCk7Cj4gIAo+IEBAIC02MjMsNiArNjQ4LDEwMCBAQCB2b2lkIGRtYV9idWZfZGV0YWNo KHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFj aCkKPiAgfQo+ICBFWFBPUlRfU1lNQk9MX0dQTChkbWFfYnVmX2RldGFjaCk7Cj4gIAo+ICsvKioK PiArICogZG1hX2J1Zl9waW4gLSBMb2NrIGRvd24gdGhlIERNQS1idWYKPiArICoKPiArICogQGF0 dGFjaDoJW2luXQlhdHRhY2htZW50IHdoaWNoIHNob3VsZCBiZSBwaW5uZWQKPiArICoKPiArICog UmV0dXJuczoKPiArICogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1 cmUuCj4gKyAqLwo+ICtpbnQgZG1hX2J1Zl9waW4oc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAq YXR0YWNoKQoKb2NkOiBOZWVkcyBub3cgZG1hX2J1Zl9hdHRhY2htZW50X3Bpbiwgc2ltaWxhciBm b3IgdW5waW4uCgo+ICt7Cj4gKwlzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmID0gYXR0YWNoLT5kbWFi dWY7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlyZXNlcnZhdGlvbl9vYmplY3RfYXNzZXJ0X2hl bGQoZG1hYnVmLT5yZXN2KTsKPiArCj4gKwlpZiAoZG1hYnVmLT5vcHMtPnBpbikKPiArCQlyZXQg PSBkbWFidWYtPm9wcy0+cGluKGF0dGFjaCk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICtF WFBPUlRfU1lNQk9MX0dQTChkbWFfYnVmX3Bpbik7Cj4gKwo+ICsvKioKPiArICogZG1hX2J1Zl91 bnBpbiAtIFJlbW92ZSBsb2NrIGZyb20gRE1BLWJ1Zgo+ICsgKgo+ICsgKiBAYXR0YWNoOglbaW5d CWF0dGFjaG1lbnQgd2hpY2ggc2hvdWxkIGJlIHVucGlubmVkCj4gKyAqLwo+ICt2b2lkIGRtYV9i dWZfdW5waW4oc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKQo+ICt7Cj4gKwlzdHJ1 Y3QgZG1hX2J1ZiAqZG1hYnVmID0gYXR0YWNoLT5kbWFidWY7Cj4gKwo+ICsJcmVzZXJ2YXRpb25f b2JqZWN0X2Fzc2VydF9oZWxkKGRtYWJ1Zi0+cmVzdik7Cj4gKwo+ICsJaWYgKGRtYWJ1Zi0+b3Bz LT51bnBpbikKPiArCQlkbWFidWYtPm9wcy0+dW5waW4oYXR0YWNoKTsKPiArfQo+ICtFWFBPUlRf U1lNQk9MX0dQTChkbWFfYnVmX3VucGluKTsKPiArCj4gKy8qKgo+ICsgKiBkbWFfYnVmX21hcF9h dHRhY2htZW50X2xvY2tlZCAtIE1hcHMgdGhlIGJ1ZmZlciBpbnRvIF9kZXZpY2VfIGFkZHJlc3Mg c3BhY2UKPiArICogd2l0aCB0aGUgcmVzZXJ2YXRpb24gbG9jayBoZWxkLiBJcyBhIHdyYXBwZXIg Zm9yIG1hcF9kbWFfYnVmKCkgb2YgdGhlCj4gKyAqCj4gKyAqIFJldHVybnMgdGhlIHNjYXR0ZXJs aXN0IHRhYmxlIG9mIHRoZSBhdHRhY2htZW50Owo+ICsgKiBkbWFfYnVmX29wcy4KPiArICogQGF0 dGFjaDoJW2luXQlhdHRhY2htZW50IHdob3NlIHNjYXR0ZXJsaXN0IGlzIHRvIGJlIHJldHVybmVk Cj4gKyAqIEBkaXJlY3Rpb246CVtpbl0JZGlyZWN0aW9uIG9mIERNQSB0cmFuc2Zlcgo+ICsgKgo+ ICsgKiBSZXR1cm5zIHNnX3RhYmxlIGNvbnRhaW5pbmcgdGhlIHNjYXR0ZXJsaXN0IHRvIGJlIHJl dHVybmVkOyByZXR1cm5zIEVSUl9QVFIKPiArICogb24gZXJyb3IuIE1heSByZXR1cm4gLUVJTlRS IGlmIGl0IGlzIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsLgo+ICsgKgo+ICsgKiBBIG1hcHBpbmcg bXVzdCBiZSB1bm1hcHBlZCBieSB1c2luZyBkbWFfYnVmX3VubWFwX2F0dGFjaG1lbnQoKS4KPiAr ICovCj4gK3N0cnVjdCBzZ190YWJsZSAqCj4gK2RtYV9idWZfbWFwX2F0dGFjaG1lbnRfbG9ja2Vk KHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCwKPiArCQkJICAgICAgZW51bSBkbWFf ZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQo+ICt7Cj4gKwlzdHJ1Y3Qgc2dfdGFibGUgKnNnX3Rh YmxlOwo+ICsJaW50IHI7Cj4gKwo+ICsJbWlnaHRfc2xlZXAoKTsKPiArCXJlc2VydmF0aW9uX29i amVjdF9hc3NlcnRfaGVsZChhdHRhY2gtPmRtYWJ1Zi0+cmVzdik7Cj4gKwo+ICsJaWYgKGF0dGFj aC0+c2d0KQo+ICsJCXJldHVybiBhdHRhY2gtPnNndDsKPiArCj4gKwlpZiAoYXR0YWNoLT5pbXBv cnRlcl9vcHMgJiYgYXR0YWNoLT5pbXBvcnRlcl9vcHMtPmludmFsaWRhdGUpIHsKPiArCQkvKgo+ ICsJCSAqIE1hcHBpbmcgYSBETUEtYnVmIGNhbiB0cmlnZ2VyIGl0cyBpbnZhbGlkYXRpb24sIHBy ZXZlbnQKPiArCQkgKiBzZW5kaW5nIHRoaXMgZXZlbnQgdG8gdGhlIGNhbGxlciBieSB0ZW1wb3Jh cnkgcmVtb3ZpbmcKPiArCQkgKiB0aGlzIGF0dGFjaG1lbnQgZnJvbSB0aGUgbGlzdC4KPiArCQkg Ki8KPiArCQlsaXN0X2RlbCgmYXR0YWNoLT5ub2RlKTsKSSBzdGlsbCBmZWVsIGxpa2UgdGhpcyBp cyBhIHZlcnkgZnJhZ2lsZSBoYWNrIGhlcmUsIGFuZCB0aGUgb25seSByZWFzb24gaXMKdGhhdCB3 ZSBhbGxvdyBtdWx0aXBsZSBtYXBwaW5ncyBvZiB0aGUgc2FtZSBhdHRhY2htZW50IHRvIGNvZXhp c3QuIEZyb20gbXkKdW5kZXJzdGFuZGluZzoKCjEuIGltcG9ydCBtYXBzCjIuIGV4cG9ydGVyIHdh bnRzIHRvIG1vdmUgdGhlIGJ1ZmZlciwgY2FsbHMgaW52YWxpZGF0ZQozLiBpbXBvcnRlciBtYWtl cyBzdXJlIGFsbCBwcm9jZXNzaW5nIGhhcyBzdG9wcGVkIGluIGl0cyAtPmludmFsaWRhdGUKaG9v aywgd2hpY2ggbWlnaHQgaW52b2x2ZSBhZGQgbW9yZSBmZW5jZXMgdG8gdGhlIHJlc2VydmF0aW9u IG9iamVjdAo0LiBleHBvcnRlciBkb2VzIHRoZSBidWZmZXIgY29weSB0byB0aGUgbmV3IHBsYWNl LCBpbnZvbHZpbmcgZG1hIGVuZ2luZXMKYW5kIG9iZXlpbmcgYWxsIHRoZSBmZW5jZXMgaW4gdGhl IHJlc2VydmF0aW9uIG9iamVjdAo1LiBpbXBvcnRlciBuZWVkcyB0aGUgYnVmZmVyIGFnYWluLCBj YWxscyBtYXAsIGdldHMgYSBuZXcgbG9jYXRpb24KWyBpbXBvcnRlciBub3cgaGFzIDIgbWFwcGlu Z3MgaW4tZmxpZ2h0LCBob29yYXkgdGhpcyBpcyBmdW4sIGVzcGVjaWFsbHkgaWYKdXNlcnNwYWNl IG1hbmFnZXMgeW91ciBncHUgdmEgc3BhY2UgYW5kIHNvIGJvdGggbmVlZCB0byBiZSBtYXBwZWQg aW4gdGhlCnNhbWUgcGxhY2UuXQo2LiBldmVudHVhbGx5IGltcG9ydGVyIHJldGlyZXMgdGhlIG9s ZCB3b3JrIGFuZCBmaW5hbGx5IGNhbGxzIHVubWFwIG9uIHRoZQpvbGQgbWFwcGluZwoKVGhpcyBm ZWVscyBsaWtlIGEgbWVzcyBvZiBhbiBhcGkuIEknbSBraW5kYSBpbmNsaW5lZCB0byByZXF1aXJl IHRoYXQgdGhlCi0+aW52YWxpZGF0ZSBob29rIG11c3QgY2FsbCBhdHRhY2htZW50X3VubWFwLCBh bmQgcmVxdWlyZSB0aGF0IGV4cG9ydGVycwpkZWxheSB0aGUgdW5tYXBwaW5nIHVudGlsIGFsbCBm ZW5jZXMgYXJlIGRvbmUgKHRoZXkgbmVlZCB0byBkbyB0aGF0CmFueXdheSwgYW5kIGV4cG9ydGVy IG5lZWRzIHRvIGhhbmRsZSBnaG9zdCBvYmplY3RzIGFueXdheSBzbyBjYW4gYWxzbyBoYW5nCmEg ZmV3IG1vcmUgc2cgdGFibGVzIG9mIHRoYXQgSSB0aGluaykuIEV2ZW4gY2xlYW5lciBpbnRlcmZh Y2Ugd291bGQgYmUgYQpkeW5hbWljX3VubWFwIHdoZXJlIHlvdSBleHBsaWNpdGx5IHBhc3MgYSBm ZW5jZSB0aGF0IG11c3QgYmUgY29tcGxldGVkCmJlZm9yZSB0aGUgYXR0YWNobWVudCBpcyBnb25l LgoKSXJyZXNwZWN0aXZlIG9mIHRoYXQgYXBpIGJpa2VzaGVkIEkgdGhpbmsgdGhlcmUncyBhIGJp Z2dlciBpc3N1ZSBvZiB1c2luZwp0aGUgYXR0YWNobWVudCBsaXN0IGZvciBpbnZhbGlkYXRpb246 CjEuIGltcG9ydGVyIGF0dGFjaGVzCjIuIGV4cG9ydGVyIGRlY2lkZXMgdG8gbW92ZSwgY2FsbHMg aW52YWxpZGF0ZQozLiBpbXBvcnRlciBnZXRzIGFuIC0+aW52YWxpZGF0ZSBmb3IgYW4gYXR0YWNo bWVudCB0aGV5IGhhdmVuJ3QgZXZlbgptYXBwZWQgeWV0LgotPiAocHJvYmFibHkpIGJvb20gc29t ZXdoZXJlLCBsaWtlIHRoZSByZWN1cnNpb24geW91J3JlIHByZXZlbnRpbmcgYWJvdmUKcmVzdWx0 cyBpbiB0ZWFycy4KCklmIHdlIGdvIHdpdGggbXkgc3VnZ2VzdGlvbiBhYm92ZSwgd2hpY2ggcmVz dWx0cyBpbiB0aGVyZSBiZWluZyBhdCBtb3N0IDEKbWFwcGluZyBwZXIgZHluYW1pYyBkbWEtYnVm IGF0dGFjaG1lbnQgKHBsdXMgZ2hvc3QgbWFwcGluZ3Mgd2FpdGluZyBmb3IgYQpkbWFfZmVuY2Us IGJ1dCB0aGV5IGRvbid0IGNvdW50KSwgdGhlbiBhbGwgd2UgbmVlZCBpcyBhbgphdHRhY2htZW50 LT5pc19tYXBwZWQgZmxhZyB0byBmaWx0ZXIgdGhlc2Ugb3V0LCBzZXQgaW4gZHluYW1pY19tYXAg YW5kCmNsZWFyZWQgaW4gZHluYW1pY191bm1hcC4gSSB0aGluayB0aGF0J3MgYWxzbyBtdWNoIGNs ZWFuZXIgdGhhbiB5b3VyCnRlbXBvcmFyeSBsaXN0X2RlbCB0cmlja2VyeS4KCldpdGggeW91ciBv dmVybGFwcGluZyBtYXBwaW5nIGFwaSB0aGUgdHJhY2tpbmcgZ2V0cyBhIGJpdCBtb3JlIHRyaWNr eSwgeW91Cm5lZWQgdG8gcmVtZW1iZXIgd2hpY2ggb25lIGlzIHRoZSBjdXJyZW50IG1hcHBpbmcg c28gdGhhdCB5b3UgZG9uJ3QgY2xlYXIKdGhlIC0+aXNfbWFwcGVkIGZsYWcgd2hlbiB0aGUgaW1w b3J0ZXIgdW5tYXBzIGEgZ2hvc3QgbWFwcGluZy4KCj4gKwl9IGVsc2Ugewo+ICsJCXIgPSBkbWFf YnVmX3BpbihhdHRhY2gpOwoKSG0sIEkgdGhpbmsgdGhpcyBjaGFuZ2VkIGNvbXBhcmVkIHRvIG9s ZGVyIHZlcnNpb25zLCBhbmQgd2hhdCB3ZSdyZQpkZWZhY3RvIGRvaW5nIG5vdyB3aXRoIGRybSBw cmltZSBzZ3QgY2FjaGluZy4gSWYgeW91IGhhdmUgYSBkeW5hbWljCmV4cG9ydGVyLCBidXQgbm90 IGEgZHluYW1pYyBpbXBvcnRlciwgdGhlbjoKLSB3ZSB3aWxsIG5vIGxvbmdlciBjYWNoZSB0aGUg c2d0Ci0gcGlubmluZyB3aWxsIG9ubHkgaGFwcGVuIGhlcmUgaW4gYXR0YWNobWVudF9tYXAKCkFz aWRlIGZyb20gdGhlIGJlaGF2aW91ciBjaGFuZ2UgSSB0aGluayB0aGlzIGFsc28gYnJlYWtzIHRo ZSBsb2NraW5nLApiZWNhdXNlIGl0IGZvcmNlcyB0aGUgcmVzZXJ2YXRpb25fbG9jayBpbnRvIGF0 dGFjaF9tYXAgcGF0aHMgZm9yCm5vbi1keW5hbWljIGltcG9ydGVycywgd2hpY2ggd2lsbCBwaXNz IG9mIGxvY2tkZXAuCgpJIHRoaW5rIHRoZSBvbmx5IG9wdGlvbiB3ZSBoYXZlIGlzIHRvIHJlZGVm aW5lIF9pc19keW5hbWljIGFzOgoKZG1hX2J1Zl9hdHRhY2htZW50X2lzX2R5bmFtaWMoYXR0YWNo KQp7CglhdHRhY2gtPmJ1Zi0+b3BzLT5waW4gJiYgYXR0YWNoLT5vcHMtPmludmFsaWRhdGU7Cn0K CkkuZS4gb25seSB3aGVuIGJvdGggaW1wb3J0ZXIgYW5kIGV4cG9ydGVyIGFyZSBkeW5hbWljIGNh biB3ZSBpbmZsaWN0IHRoZQpyZXNlcnZhdGlvbl9sb2NrIG9udG8gdGhlbSBpbiBhdHRhY2htZW50 X21hcC91bm1hcC4gRm9yIGFsbCBvdGhlcnMgd2UgbmVlZApuZWVkIHRvIGNhY2hlIHRoZSBzZ3Qs IGFuZCBpZiBpdCdzIGEgZHluYW1pYyBleHBvcnRlciwgcGluIHRoZSBidWZmZXIKYWxyZWFkeSBh dCBhdHRhY2ggdGltZS4KCj4gKwkJaWYgKHIpCj4gKwkJCXJldHVybiBFUlJfUFRSKHIpOwo+ICsJ fQo+ICsKPiArCXNnX3RhYmxlID0gYXR0YWNoLT5kbWFidWYtPm9wcy0+bWFwX2RtYV9idWYoYXR0 YWNoLCBkaXJlY3Rpb24pOwo+ICsJaWYgKGF0dGFjaC0+aW1wb3J0ZXJfb3BzICYmIGF0dGFjaC0+ aW1wb3J0ZXJfb3BzLT5pbnZhbGlkYXRlKQo+ICsJCWxpc3RfYWRkKCZhdHRhY2gtPm5vZGUsICZh dHRhY2gtPmRtYWJ1Zi0+YXR0YWNobWVudHMpOwo+ICsJaWYgKCFzZ190YWJsZSkKPiArCQlzZ190 YWJsZSA9IEVSUl9QVFIoLUVOT01FTSk7Cj4gKwo+ICsJaWYgKElTX0VSUihzZ190YWJsZSkpIHsK PiArCQlyZXNlcnZhdGlvbl9vYmplY3RfbG9jayhhdHRhY2gtPmRtYWJ1Zi0+cmVzdiwgTlVMTCk7 Cj4gKwkJZG1hX2J1Zl91bnBpbihhdHRhY2gpOwo+ICsJCXJlc2VydmF0aW9uX29iamVjdF91bmxv Y2soYXR0YWNoLT5kbWFidWYtPnJlc3YpOwo+ICsJfQo+ICsKPiArCXJldHVybiBzZ190YWJsZTsK PiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChkbWFfYnVmX21hcF9hdHRhY2htZW50X2xvY2tlZCk7 Cj4gKwo+ICAvKioKPiAgICogZG1hX2J1Zl9tYXBfYXR0YWNobWVudCAtIFJldHVybnMgdGhlIHNj YXR0ZXJsaXN0IHRhYmxlIG9mIHRoZSBhdHRhY2htZW50Owo+ICAgKiBtYXBwZWQgaW50byBfZGV2 aWNlXyBhZGRyZXNzIHNwYWNlLiBJcyBhIHdyYXBwZXIgZm9yIG1hcF9kbWFfYnVmKCkgb2YgdGhl Cj4gQEAgLTY1MSwxNCArNzcwLDQyIEBAIHN0cnVjdCBzZ190YWJsZSAqZG1hX2J1Zl9tYXBfYXR0 YWNobWVudChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gsCj4gIAlpZiAoYXR0YWNo LT5zZ3QpCj4gIAkJcmV0dXJuIGF0dGFjaC0+c2d0Owo+ICAKPiAtCXNnX3RhYmxlID0gYXR0YWNo LT5kbWFidWYtPm9wcy0+bWFwX2RtYV9idWYoYXR0YWNoLCBkaXJlY3Rpb24pOwo+IC0JaWYgKCFz Z190YWJsZSkKPiAtCQlzZ190YWJsZSA9IEVSUl9QVFIoLUVOT01FTSk7Cj4gKwlyZXNlcnZhdGlv bl9vYmplY3RfbG9jayhhdHRhY2gtPmRtYWJ1Zi0+cmVzdiwgTlVMTCk7Cj4gKwlzZ190YWJsZSA9 IGRtYV9idWZfbWFwX2F0dGFjaG1lbnQoYXR0YWNoLCBkaXJlY3Rpb24pOwo+ICsJcmVzZXJ2YXRp b25fb2JqZWN0X3VubG9jayhhdHRhY2gtPmRtYWJ1Zi0+cmVzdik7Cj4gIAo+ICAJcmV0dXJuIHNn X3RhYmxlOwo+ICB9Cj4gIEVYUE9SVF9TWU1CT0xfR1BMKGRtYV9idWZfbWFwX2F0dGFjaG1lbnQp Owo+ICAKPiArLyoqCj4gKyAqIGRtYV9idWZfdW5tYXBfYXR0YWNobWVudF9sb2NrZWQgLSB1bm1h cHMgdGhlIGJ1ZmZlciB3aXRoIHJlc2VydmF0aW9uIGxvY2sKPiArICogaGVsZCwgc2hvdWxkIGRl YWxsb2NhdGUgdGhlIGFzc29jaWF0ZWQgc2NhdHRlcmxpc3QuIElzIGEgd3JhcHBlciBmb3IKPiAr ICogdW5tYXBfZG1hX2J1ZigpIG9mIGRtYV9idWZfb3BzLgo+ICsgKiBAYXR0YWNoOglbaW5dCWF0 dGFjaG1lbnQgdG8gdW5tYXAgYnVmZmVyIGZyb20KPiArICogQHNnX3RhYmxlOglbaW5dCXNjYXR0 ZXJsaXN0IGluZm8gb2YgdGhlIGJ1ZmZlciB0byB1bm1hcAo+ICsgKiBAZGlyZWN0aW9uOiAgW2lu XSAgICBkaXJlY3Rpb24gb2YgRE1BIHRyYW5zZmVyCj4gKyAqCj4gKyAqIFRoaXMgdW5tYXBzIGEg RE1BIG1hcHBpbmcgZm9yIEBhdHRhY2hlZCBvYnRhaW5lZCBieQo+ICsgKiBkbWFfYnVmX21hcF9h dHRhY2htZW50X2xvY2tlZCgpLgo+ICsgKi8KPiArdm9pZCBkbWFfYnVmX3VubWFwX2F0dGFjaG1l bnRfbG9ja2VkKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCwKPiArCQkJCSAgICAg c3RydWN0IHNnX3RhYmxlICpzZ190YWJsZSwKPiArCQkJCSAgICAgZW51bSBkbWFfZGF0YV9kaXJl Y3Rpb24gZGlyZWN0aW9uKQo+ICt7Cj4gKwltaWdodF9zbGVlcCgpOwo+ICsJcmVzZXJ2YXRpb25f b2JqZWN0X2Fzc2VydF9oZWxkKGF0dGFjaC0+ZG1hYnVmLT5yZXN2KTsKPiArCj4gKwlpZiAoYXR0 YWNoLT5zZ3QgPT0gc2dfdGFibGUpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWF0dGFjaC0+ZG1hYnVm LT5vcHMtPnVubWFwX2RtYV9idWYoYXR0YWNoLCBzZ190YWJsZSwKPiArCQkJCQkJZGlyZWN0aW9u KTsKPiArCWlmICghKGF0dGFjaC0+aW1wb3J0ZXJfb3BzICYmIGF0dGFjaC0+aW1wb3J0ZXJfb3Bz LT5pbnZhbGlkYXRlKSkKPiArCQlkbWFfYnVmX3VucGluKGF0dGFjaCk7Cj4gK30KPiArRVhQT1JU X1NZTUJPTF9HUEwoZG1hX2J1Zl91bm1hcF9hdHRhY2htZW50X2xvY2tlZCk7Cj4gKwo+ICAvKioK PiAgICogZG1hX2J1Zl91bm1hcF9hdHRhY2htZW50IC0gdW5tYXBzIGFuZCBkZWNyZWFzZXMgdXNl Y291bnQgb2YgdGhlIGJ1ZmZlcjttaWdodAo+ICAgKiBkZWFsbG9jYXRlIHRoZSBzY2F0dGVybGlz dCBhc3NvY2lhdGVkLiBJcyBhIHdyYXBwZXIgZm9yIHVubWFwX2RtYV9idWYoKSBvZgo+IEBAIC02 ODEsMTEgKzgyOCwzMiBAQCB2b2lkIGRtYV9idWZfdW5tYXBfYXR0YWNobWVudChzdHJ1Y3QgZG1h X2J1Zl9hdHRhY2htZW50ICphdHRhY2gsCj4gIAlpZiAoYXR0YWNoLT5zZ3QgPT0gc2dfdGFibGUp Cj4gIAkJcmV0dXJuOwo+ICAKPiAtCWF0dGFjaC0+ZG1hYnVmLT5vcHMtPnVubWFwX2RtYV9idWYo YXR0YWNoLCBzZ190YWJsZSwKPiAtCQkJCQkJZGlyZWN0aW9uKTsKPiArCXJlc2VydmF0aW9uX29i amVjdF9sb2NrKGF0dGFjaC0+ZG1hYnVmLT5yZXN2LCBOVUxMKTsKPiArCWRtYV9idWZfdW5tYXBf YXR0YWNobWVudF9sb2NrZWQoYXR0YWNoLCBzZ190YWJsZSwgZGlyZWN0aW9uKTsKPiArCXJlc2Vy dmF0aW9uX29iamVjdF91bmxvY2soYXR0YWNoLT5kbWFidWYtPnJlc3YpOwo+ICB9Cj4gIEVYUE9S VF9TWU1CT0xfR1BMKGRtYV9idWZfdW5tYXBfYXR0YWNobWVudCk7Cj4gIAo+ICsvKioKPiArICog ZG1hX2J1Zl9pbnZhbGlkYXRlX21hcHBpbmdzIC0gaW52YWxpZGF0ZSBhbGwgbWFwcGluZ3Mgb2Yg dGhpcyBkbWFfYnVmCj4gKyAqCj4gKyAqIEBkbWFidWY6CVtpbl0JYnVmZmVyIHdoaWNoIG1hcHBp bmdzIHNob3VsZCBiZSBpbnZhbGlkYXRlZAo+ICsgKgo+ICsgKiBJbmZvcm1zIGFsbCBhdHRhY2ht ZW5zdCB0aGF0IHRoZXkgbmVlZCB0byBkZXN0cm95IGFuZCByZWNyZWF0ZWQgYWxsIHRoZWlyCj4g KyAqIG1hcHBpbmdzLgo+ICsgKi8KPiArdm9pZCBkbWFfYnVmX2ludmFsaWRhdGVfbWFwcGluZ3Mo c3RydWN0IGRtYV9idWYgKmRtYWJ1ZikKPiArewo+ICsJc3RydWN0IGRtYV9idWZfYXR0YWNobWVu dCAqYXR0YWNoOwo+ICsKPiArCXJlc2VydmF0aW9uX29iamVjdF9hc3NlcnRfaGVsZChkbWFidWYt PnJlc3YpOwo+ICsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnkoYXR0YWNoLCAmZG1hYnVmLT5hdHRh Y2htZW50cywgbm9kZSkKPiArCQlpZiAoYXR0YWNoLT5pbXBvcnRlcl9vcHMgJiYgYXR0YWNoLT5p bXBvcnRlcl9vcHMtPmludmFsaWRhdGUpCj4gKwkJCWF0dGFjaC0+aW1wb3J0ZXJfb3BzLT5pbnZh bGlkYXRlKGF0dGFjaCk7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwoZG1hX2J1Zl9pbnZhbGlk YXRlX21hcHBpbmdzKTsKPiArCj4gIC8qKgo+ICAgKiBET0M6IGNwdSBhY2Nlc3MKPiAgICoKPiBA QCAtMTA5OCwxMCArMTI2NiwxMiBAQCBzdGF0aWMgaW50IGRtYV9idWZfZGVidWdfc2hvdyhzdHJ1 Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnVudXNlZCkKPiAgCQlzZXFfcHV0cyhzLCAiXHRBdHRhY2hl ZCBEZXZpY2VzOlxuIik7Cj4gIAkJYXR0YWNoX2NvdW50ID0gMDsKPiAgCj4gKwkJcmVzZXJ2YXRp b25fb2JqZWN0X2xvY2soYnVmX29iai0+cmVzdiwgTlVMTCk7Cj4gIAkJbGlzdF9mb3JfZWFjaF9l bnRyeShhdHRhY2hfb2JqLCAmYnVmX29iai0+YXR0YWNobWVudHMsIG5vZGUpIHsKPiAgCQkJc2Vx X3ByaW50ZihzLCAiXHQlc1xuIiwgZGV2X25hbWUoYXR0YWNoX29iai0+ZGV2KSk7Cj4gIAkJCWF0 dGFjaF9jb3VudCsrOwo+ICAJCX0KPiArCQlyZXNlcnZhdGlvbl9vYmplY3RfdW5sb2NrKGJ1Zl9v YmotPnJlc3YpOwo+ICAKPiAgCQlzZXFfcHJpbnRmKHMsICJUb3RhbCAlZCBkZXZpY2VzIGF0dGFj aGVkXG5cbiIsCj4gIAkJCQlhdHRhY2hfY291bnQpOwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xp bnV4L2RtYS1idWYuaCBiL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oCj4gaW5kZXggNTIwMzFmZGM3 NWJiLi5mNTY4MWNhMTVkMDkgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9saW51eC9kbWEtYnVmLmgK PiArKysgYi9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaAo+IEBAIC05MCwxNCArOTAsNDAgQEAgc3Ry dWN0IGRtYV9idWZfb3BzIHsKPiAgCSAqLwo+ICAJdm9pZCAoKmRldGFjaCkoc3RydWN0IGRtYV9i dWYgKiwgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqKTsKPiAgCj4gKwkvKioKPiArCSAqIEBw aW46Cj4gKwkgKgo+ICsJICogVGhpcyBpcyBjYWxsZWQgYnkgZG1hX2J1Zl9waW4gYW5kIGxldHMg dGhlIGV4cG9ydGVyIGtub3cgdGhhdCB0aGUKCmRtYV9idWZfcGluKCkgc28gaXQgaHlwZXJsaW5r cy4gU2ltaWxhciBldmVyeXdoZXJlIGVsc2UuCgo+ICsJICogRE1BLWJ1ZiBjYW4ndCBiZSBtb3Zl ZCBhbnkgbW9yZS4KPiArCSAqCj4gKwkgKiBUaGlzIGlzIGNhbGxlZCB3aXRoIHRoZSBkbWFidWYt PnJlc3Ygb2JqZWN0IGxvY2tlZC4KPiArCSAqCj4gKwkgKiBUaGlzIGNhbGxiYWNrIGlzIG9wdGlv bmFsLgo+ICsJICoKPiArCSAqIFJldHVybnM6Cj4gKwkgKgo+ICsJICogMCBvbiBzdWNjZXNzLCBu ZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gKwkgKi8KPiArCWludCAoKnBpbikoc3Ry dWN0IGRtYV9idWZfYXR0YWNobWVudCAqKTsKPiArCj4gKwkvKioKPiArCSAqIEB1bnBpbjoKPiAr CSAqCj4gKwkgKiBUaGlzIGlzIGNhbGxlZCBieSBkbWFfYnVmX3VucGluIGFuZCBsZXRzIHRoZSBl eHBvcnRlciBrbm93IHRoYXQgdGhlCj4gKwkgKiBETUEtYnVmIGNhbiBiZSBtb3ZlZCBhZ2Fpbi4K PiArCSAqCj4gKwkgKiBUaGlzIGlzIGNhbGxlZCB3aXRoIHRoZSBkbWFidWYtPnJlc3Ygb2JqZWN0 IGxvY2tlZC4KPiArCSAqCj4gKwkgKiBUaGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsLgo+ICsJICov Cj4gKwl2b2lkICgqdW5waW4pKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKik7Cj4gKwo+ICAJ LyoqCj4gIAkgKiBAbWFwX2RtYV9idWY6Cj4gIAkgKgo+ICAJICogVGhpcyBpcyBjYWxsZWQgYnkg ZG1hX2J1Zl9tYXBfYXR0YWNobWVudCgpIGFuZCBpcyB1c2VkIHRvIG1hcCBhCj4gIAkgKiBzaGFy ZWQgJmRtYV9idWYgaW50byBkZXZpY2UgYWRkcmVzcyBzcGFjZSwgYW5kIGl0IGlzIG1hbmRhdG9y eS4gSXQKPiAtCSAqIGNhbiBvbmx5IGJlIGNhbGxlZCBpZiBAYXR0YWNoIGhhcyBiZWVuIGNhbGxl ZCBzdWNjZXNzZnVsbHkuIFRoaXMKPiAtCSAqIGVzc2VudGlhbGx5IHBpbnMgdGhlIERNQSBidWZm ZXIgaW50byBwbGFjZSwgYW5kIGl0IGNhbm5vdCBiZSBtb3ZlZAo+IC0JICogYW55IG1vcmUKPiAr CSAqIGNhbiBvbmx5IGJlIGNhbGxlZCBpZiBAYXR0YWNoIGhhcyBiZWVuIGNhbGxlZCBzdWNjZXNz ZnVsbHkuCj4gIAkgKgo+ICAJICogVGhpcyBjYWxsIG1heSBzbGVlcCwgZS5nLiB3aGVuIHRoZSBi YWNraW5nIHN0b3JhZ2UgZmlyc3QgbmVlZHMgdG8gYmUKPiAgCSAqIGFsbG9jYXRlZCwgb3IgbW92 ZWQgdG8gYSBsb2NhdGlvbiBzdWl0YWJsZSBmb3IgYWxsIGN1cnJlbnRseSBhdHRhY2hlZAo+IEBA IC0xMTgsNiArMTQ0LDkgQEAgc3RydWN0IGRtYV9idWZfb3BzIHsKPiAgCSAqIGFueSBvdGhlciBr aW5kIG9mIHNoYXJpbmcgdGhhdCB0aGUgZXhwb3J0ZXIgbWlnaHQgd2lzaCB0byBtYWtlCj4gIAkg KiBhdmFpbGFibGUgdG8gYnVmZmVyLXVzZXJzLgo+ICAJICoKPiArCSAqIFRoaXMgaXMgYWx3YXlz IGNhbGxlZCB3aXRoIHRoZSBkbWFidWYtPnJlc3Ygb2JqZWN0IGxvY2tlZCB3aGVuCj4gKwkgKiB0 aGUgcGluL3VucGluIGNhbGxiYWNrcyBhcmUgaW1wbGVtZW50ZWQuCj4gKwkgKgo+ICAJICogUmV0 dXJuczoKPiAgCSAqCj4gIAkgKiBBICZzZ190YWJsZSBzY2F0dGVyIGxpc3Qgb2Ygb3IgdGhlIGJh Y2tpbmcgc3RvcmFnZSBvZiB0aGUgRE1BIGJ1ZmZlciwKPiBAQCAtMTM1LDkgKzE2NCw2IEBAIHN0 cnVjdCBkbWFfYnVmX29wcyB7Cj4gIAkgKgo+ICAJICogVGhpcyBpcyBjYWxsZWQgYnkgZG1hX2J1 Zl91bm1hcF9hdHRhY2htZW50KCkgYW5kIHNob3VsZCB1bm1hcCBhbmQKPiAgCSAqIHJlbGVhc2Ug dGhlICZzZ190YWJsZSBhbGxvY2F0ZWQgaW4gQG1hcF9kbWFfYnVmLCBhbmQgaXQgaXMgbWFuZGF0 b3J5Lgo+IC0JICogSXQgc2hvdWxkIGFsc28gdW5waW4gdGhlIGJhY2tpbmcgc3RvcmFnZSBpZiB0 aGlzIGlzIHRoZSBsYXN0IG1hcHBpbmcKPiAtCSAqIG9mIHRoZSBETUEgYnVmZmVyLCBpdCB0aGUg ZXhwb3J0ZXIgc3VwcG9ydHMgYmFja2luZyBzdG9yYWdlCj4gLQkgKiBtaWdyYXRpb24uCj4gIAkg Ki8KPiAgCXZvaWQgKCp1bm1hcF9kbWFfYnVmKShzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICos Cj4gIAkJCSAgICAgIHN0cnVjdCBzZ190YWJsZSAqLAo+IEBAIC0zMDIsMTIgKzMyOCw0MyBAQCBz dHJ1Y3QgZG1hX2J1ZiB7Cj4gIAl9IGNiX2V4Y2wsIGNiX3NoYXJlZDsKPiAgfTsKPiAgCj4gKy8q Kgo+ICsgKiBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2hfb3BzIC0gaW1wb3J0ZXIgb3BlcmF0aW9ucyBm b3IgYW4gYXR0YWNobWVudAo+ICsgKiBAaW52YWxpZGF0ZTogW29wdGlvbmFsXSBpbnZhbGlkYXRl IGFsbCBtYXBwaW5ncyBtYWRlIHVzaW5nIHRoaXMgYXR0YWNobWVudC4KCkBpbnZhbGlkYXRlIHR3 aWNlIHBpc3NlcyBvZiBrZXJuZWxkb2MuCgo+ICsgKgo+ICsgKiBBdHRhY2htZW50IG9wZXJhdGlv bnMgaW1wbGVtZW50ZWQgYnkgdGhlIGltcG9ydGVyLgo+ICsgKi8KPiArc3RydWN0IGRtYV9idWZf YXR0YWNoX29wcyB7Cj4gKwkvKioKPiArCSAqIEBpbnZhbGlkYXRlOgo+ICsJICoKPiArCSAqIElm IHRoZSBpbnZhbGlkYXRlIGNhbGxiYWNrIGlzIHByb3ZpZGVkIHRoZSBmcmFtZXdvcmsgY2FuIGF2 b2lkCj4gKwkgKiBwaW5uaW5nIHRoZSBiYWNraW5nIHN0b3JlIHdoaWxlIG1hcHBpbmdzIGV4aXN0 cy4KPiArCSAqCj4gKwkgKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aXRoIHRoZSBsb2NrIG9m IHRoZSByZXNlcnZhdGlvbiBvYmplY3QKPiArCSAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgZG1hX2J1 ZiBoZWxkIGFuZCB0aGUgbWFwcGluZyBmdW5jdGlvbiBtdXN0IGJlCj4gKwkgKiBjYWxsZWQgd2l0 aCB0aGlzIGxvY2sgaGVsZCBhcyB3ZWxsLiBUaGlzIG1ha2VzIHN1cmUgdGhhdCBubyBtYXBwaW5n Cj4gKwkgKiBpcyBjcmVhdGVkIGNvbmN1cnJlbnRseSB3aXRoIGFuIG9uZ29pbmcgaW52YWxpZGF0 aW9uLgo+ICsJICoKPiArCSAqIEFmdGVyIHRoZSBjYWxsYmFjayBhbGwgZXhpc3RpbmcgbWFwcGlu Z3MgYXJlIHN0aWxsIHZhbGlkIHVudGlsIGFsbAo+ICsJICogZmVuY2VzIGluIHRoZSBkbWFfYnVm cyByZXNlcnZhdGlvbiBvYmplY3QgYXJlIHNpZ25hbGVkLiBBZnRlciBnZXR0aW5nIGFuCj4gKwkg KiBpbnZhbGlkYXRpb24gY2FsbGJhY2sgYWxsIG1hcHBpbmdzIHNob3VsZCBiZSBkZXN0cm95ZWQg YnkgdGhlIGltcG9ydGVyIHVzaW5nCj4gKwkgKiB0aGUgbm9ybWFsIGRtYV9idWZfdW5tYXBfYXR0 YWNobWVudCgpIGZ1bmN0aW9uIGFzIHNvb24gYXMgcG9zc2libGUuCgpJIHRoaW5rICJhcyBzb29u IGFzIHBvc3NpYmxlIiBpcyBhIGJpdCB2YWd1ZS4gV2hhdCBicmVha3MgaWYgd2UgZG9uJ3QgZG8K dGhhdD8gV2l0aCBteSBzdWdnZXN0aW9uIHRvIGltbWVkaWF0ZWx5IGNhbGwgdW5tYXAgKGJ1dCB3 aXRoIGEgZXhwY2xpdCBvcgppbXBsaWNpdCBmZW5jZSkgd291bGQgcmVzb2x2ZSB0aGlzIHF1ZXN0 aW9uIG11Y2ggY2xlYXJlciwgYnkgb2ZmbG9hZGluZwp0aGUgZHV0eSBvZiAidW5tYXBwaW5nIHNv b24gZW5vdWdoIiB0byB0aGUgZXhwb3J0ZXIuCgpUaGlzIGFsc28gbWF0Y2hlcyBtb3JlIGhvdyBk eW5hbWljX21hcCB3b3JrczogdGhlIG1hcHBpbmcgaXMgb25seSB2YWxpZApvbmNlIHRoZSBleHBs aWNpdCBmZW5jZSBoYXMgc2lnbmFsZWQsIG5vdCByaWdodCBhd2F5LiBEb2luZyBhIHNpbWlsYXIK InVubWFwIGlzIG9ubHkgb2sgb25jZSB0aGUgZmVuY2VzIGhhdmUgc2lnbmFsZWQiIHNvdW5kcyBy ZWFzb25hYmxlIHRvIG1lLgpBc2lkZTogSWYgd2UgcGFzcyBhbiBleHBsaWNpdCBmZW5jZSB0byBk eW5hbWljX3VuYW1wLCB3b3VsZCBtYWtlIHNlbnNlIHRvCnJlY2VpdmUgYW4gZXhwbGljaXQgZmVu Y2UgZnJvbSBkeW5hbWljX21hcC4gUGFzc2luZyBleHBsaWNpdCBmZW5jZXMgYXJvdW5kCmFsc28g ZmVlbHMgYSBub3RjaCBjbGVhbmVyIGdpdmVuIGFsbCB0aGUgaGVhZGFjaGVzIHdlIGFscmVhZHkg aGF2ZSB3aXRoCmxlYWtpbmcgaW1wbGljaXQgZmVuY2VzIGludG8gcmVzZXJ2YXRpb24gb2JqZWN0 cyBhbmQgY2F1c2luZyB1cyB0cm91YmxlCnRoZXJlLiBFeHBsaWNpdCBkeW5hbWljX21hcC91bm1h cCBmZW5jZXMgd291bGQgYWxsIGFuIGV4cG9ydGVyIHRvIHVudGFuZ2xlCnRoZXNlIHR3byB0aGlu Z3MgKGF0bSBub3QgcG9zc2libGUsIGp1c3QgcHJlcCBmb3IgdGhlIGZ1dHVyZSkuCgpBc2lkZTog Rm9yIG5vbi1keW5hbWljIGltcG9ydGVyIHRoZSBpbml0aWFsIHBpbi9zZ3QgY2FjaGluZyBhbHNv IG5lZWRzIHRvCmJsb2NrIGZvciB0aGF0IGV4Y2x1c2l2ZSBmZW5jZSBJIHRoaW5rLCBpZiBpdCdz IGEgZHluYW1pYyBleHBvcnRlci4gTm90CmFsbCBkcml2ZXJzIHdhaXQgZm9yIHRoZSBleGNsdXNp dmUgZmVuY2UgKHY0bCBwcm9iYWJseSBtb3JlIHRoYW4gZHJtKSwgc28KaWYgdGhlIGV4cG9ydGVy IGlzIHN0aWxsIG1vdmluZyB0aGUgYnVmZmVyIHdlIG1pZ2h0IGhhdmUgYSBwcm9ibGVtLgoKT3Ig aXMgdGhlIHBpbiBzdXBwb3NlZCB0byBiZSBzeW5jaHJvbm91cz8gV291bGQgYmUgYW5vdGhlciB0 aGluZyB0bwpkb2N1bWVudCBJIGd1ZXNzIC4uLgoKPiArCSAqCj4gKwkgKiBOZXcgbWFwcGluZ3Mg Y2FuIGJlIGNyZWF0ZWQgaW1tZWRpYXRlbHksIGJ1dCBjYW4ndCBiZSB1c2VkIGJlZm9yZSB0aGUK PiArCSAqIGV4Y2x1c2l2ZSBmZW5jZSBpbiB0aGUgZG1hX2J1ZnMgcmVzZXJ2YXRpb24gb2JqZWN0 IGlzIHNpZ25hbGVkLgoKSSBndWVzcyB5b3UgY2FuJ3QgZ28gcmlnaHQgYWhlYWQgYW5kIGNyZWF0 ZSBhIG5ldyBtYXBwaW5nIGZyb20gdGhlCi0+aW52YWxpZGF0ZSBob29rPwoKTmVlZCB0byBkb2N1 bWVudCB0aGF0LCBhbmQgbWF5YmUgZW5mb3JjZT8KCj4gKwkgKi8KPiArCXZvaWQgKCppbnZhbGlk YXRlKShzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpOwo+ICt9Owo+ICsKPiAgLyoq Cj4gICAqIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgLSBob2xkcyBkZXZpY2UtYnVmZmVyIGF0 dGFjaG1lbnQgZGF0YQo+ICAgKiBAZG1hYnVmOiBidWZmZXIgZm9yIHRoaXMgYXR0YWNobWVudC4K PiAgICogQGRldjogZGV2aWNlIGF0dGFjaGVkIHRvIHRoZSBidWZmZXIuCj4gICAqIEBub2RlOiBs aXN0IG9mIGRtYV9idWZfYXR0YWNobWVudC4KPiAgICogQHByaXY6IGV4cG9ydGVyIHNwZWNpZmlj IGF0dGFjaG1lbnQgZGF0YS4KPiArICogQGltcG9ydGVyX29wczogaW1wb3J0ZXIgb3BlcmF0aW9u cyBmb3IgdGhpcyBhdHRhY2htZW50Lgo+ICsgKiBAaW1wb3J0ZXJfcHJpdjogaW1wb3J0ZXIgc3Bl Y2lmaWMgYXR0YWNobWVudCBkYXRhLgo+ICAgKgo+ICAgKiBUaGlzIHN0cnVjdHVyZSBob2xkcyB0 aGUgYXR0YWNobWVudCBpbmZvcm1hdGlvbiBiZXR3ZWVuIHRoZSBkbWFfYnVmIGJ1ZmZlcgo+ICAg KiBhbmQgaXRzIHVzZXIgZGV2aWNlKHMpLiBUaGUgbGlzdCBjb250YWlucyBvbmUgYXR0YWNobWVu dCBzdHJ1Y3QgcGVyIGRldmljZQo+IEBAIC0zMjQsNiArMzgxLDkgQEAgc3RydWN0IGRtYV9idWZf YXR0YWNobWVudCB7Cj4gIAlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Cj4gIAlzdHJ1Y3Qgc2dfdGFi bGUgKnNndDsKPiAgCXZvaWQgKnByaXY7Cj4gKwo+ICsJY29uc3Qgc3RydWN0IGRtYV9idWZfYXR0 YWNoX29wcyAqaW1wb3J0ZXJfb3BzOwo+ICsJdm9pZCAqaW1wb3J0ZXJfcHJpdjsKPiAgfTsKPiAg Cj4gIC8qKgo+IEBAIC0zODMsMTQgKzQ0MywxOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2Rt YV9idWYoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZikKPiAgICovCj4gIHN0YXRpYyBpbmxpbmUgYm9v bCBkbWFfYnVmX2lzX2R5bmFtaWMoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZikKPiAgewo+IC0JLyog QWx3YXlzIHVzZSBhIHN0YXRpYyBtYXBwaW5nIGZvciBub3cgKi8KPiAtCXJldHVybiBmYWxzZTsK PiArCXJldHVybiAhIWRtYWJ1Zi0+b3BzLT5waW47CgohISBpcyByZWR1bmRhbnQsIGNvbXBpbGVy IGRvZXMgdGhhdCBmb3IgeW91IHdoZW4gY2FzdGluZyB0b28gYm9vbC4KCj4gIH0KPiAgCj4gIHN0 cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmRtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpk bWFidWYsCj4gLQkJCQkJCQlzdHJ1Y3QgZGV2aWNlICpkZXYpOwo+ICsJCQkJCSAgc3RydWN0IGRl dmljZSAqZGV2KTsKPiArc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqCj4gK2RtYV9idWZfZHlu YW1pY19hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1Ziwgc3RydWN0IGRldmljZSAqZGV2LAo+ ICsJCSAgICAgICBjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2hfb3BzICppbXBvcnRlcl9vcHMs Cj4gKwkJICAgICAgIHZvaWQgKmltcG9ydGVyX3ByaXYpOwo+ICB2b2lkIGRtYV9idWZfZGV0YWNo KHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCj4gLQkJCQlzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50 ICpkbWFidWZfYXR0YWNoKTsKPiArCQkgICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0 YWNoKTsKPiAraW50IGRtYV9idWZfcGluKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFj aCk7Cj4gK3ZvaWQgZG1hX2J1Zl91bnBpbihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRh Y2gpOwo+ICAKPiAgc3RydWN0IGRtYV9idWYgKmRtYV9idWZfZXhwb3J0KGNvbnN0IHN0cnVjdCBk bWFfYnVmX2V4cG9ydF9pbmZvICpleHBfaW5mbyk7Cj4gIAo+IEBAIC0zOTgsMTAgKzQ2MywxNiBA QCBpbnQgZG1hX2J1Zl9mZChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBpbnQgZmxhZ3MpOwo+ICBz dHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1Zl9nZXQoaW50IGZkKTsKPiAgdm9pZCBkbWFfYnVmX3B1dChz dHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKTsKPiAgCj4gK3N0cnVjdCBzZ190YWJsZSAqZG1hX2J1Zl9t YXBfYXR0YWNobWVudF9sb2NrZWQoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqLAo+ICsJCQkJ CSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbik7Cj4gIHN0cnVjdCBzZ190YWJsZSAqZG1h X2J1Zl9tYXBfYXR0YWNobWVudChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICosCj4gIAkJCQkJ ZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pOwo+ICt2b2lkIGRtYV9idWZfdW5tYXBfYXR0YWNobWVu dF9sb2NrZWQoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqLAo+ICsJCQkJICAgICBzdHJ1Y3Qg c2dfdGFibGUgKiwKPiArCQkJCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pOwo+ICB2b2lk IGRtYV9idWZfdW5tYXBfYXR0YWNobWVudChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICosIHN0 cnVjdCBzZ190YWJsZSAqLAo+ICAJCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pOwo+ICt2b2lk IGRtYV9idWZfaW52YWxpZGF0ZV9tYXBwaW5ncyhzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1Zik7Cj4g IGludCBkbWFfYnVmX2JlZ2luX2NwdV9hY2Nlc3Moc3RydWN0IGRtYV9idWYgKmRtYV9idWYsCj4g IAkJCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKTsKPiAgaW50IGRtYV9idWZfZW5k X2NwdV9hY2Nlc3Moc3RydWN0IGRtYV9idWYgKmRtYV9idWYsCj4gLS0gCj4gMi4xNy4xCj4gCj4g X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBkcmktZGV2 ZWwgbWFpbGluZyBsaXN0Cj4gZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCgotLSAK RGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDov L2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRl dmVs