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, 31 Jul 2019 11:12:31 +0200 Message-ID: <20190731091231.GI7444@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: 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: 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 Z2h0X2xvY2sgaW4gYXBwcm9wcmlhdGUgcGxhY2VzCj4gCj4gU2lnbmVkLW9mZi1ieTogQ2hyaXN0 aWFuIEvDtm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQuY29tPgoKSSB0aGluayBJIGJyb3VnaHQg dGhpcyB1cCBiZWZvcmUsIGJ1dCBuZXcgdG9wLXBvc3QgZm9yIGEgY2xlYW4gc3RhcnQuCgpVc2Ut Y2FzZSBJIGhhdmUgaW4gbWluZCBpcyBzb21ldGhpbmcgbGlrZSBhbWRrZmQncyBtb2RlbCwgd2hl cmUgeW91IGhhdmUgYQpsaXN0IG9mIGJ1ZmZlcnMgKHBlciBjb250ZXh0IG9yIHdoYXRldmVyKSB0 aGF0IHlvdSBhbHdheXMgbmVlZCB0byBoYXZlCnByZXNlbnQuIElkZWEgaXMgdG8gYWxzbyB1c2Ug dGhpcyBmb3IgdHJhZGl0aW9uYWwgQ1MgZm9yIHZrL2dsLCB0byBjdXQKZG93biBvbiB0aGUgYnVm ZmVyIG1hbmFnZW1lbnQgb3ZlcmhlYWQsIGJ1dCB3ZSdkIHN0aWxsIGFsbG93IGFkZGl0aW9uYWwK YnVmZmVycyB0byBiZSBsaXN0ZWQgcGVyLUNTIG9uIHRvcCBvZiB0aGF0IGRlZmF1bHQgd29ya2lu ZyBzZXQuCgpUaGlzIG9mIGNvdXJzZSBtZWFucyBubyBpbXBsaWNpdCBzeW5jIGFueW1vcmUgb24g dGhlc2UgZGVmYXVsdCBidWZmZXJzCih0aGUgcG9pbnQgaXMgdG8gYXZvaWQgdG91Y2hpbmcgZXZl cnkgYnVmZmVyIG9uIGV2ZXJ5IENTLCB1cGRhdGluZyBmZW5jZXMKd291bGQgZGVmZWF0IHRoYXQp LiBUaGF0J3Mgd2h5IHRoZSBDUyBjYW4gc3RpbGwgbGlzdCBhZGRpdGlvbmFsIGJ1ZmZlcnMsCnRo ZSBvbmx5IHJlYXNvbiBmb3IgdGhhdCBpcyB0byBhZGQgaW1wbGljaXQgc3luYyBmZW5jZXMuIFRo b3NlIGJ1ZmZlcnMKd291bGQgYmUgbW9zdCBsaWtlbHkgaW4gdGhlIGRlZmF1bHQgd29ya2luZyBz ZXQgYWxyZWFkeS4KCkNvbnNlcXVlbmNlIGlzIHRoYXQgSSB3YW50IHRoZSBhbWRrZmQgbW9kZWwg b2YgImV2aWN0IHdoZW4gbmVlZGVkLCBidXQKa2VlcCByZXNpZGVudCBieSBkZWZhdWx0IiwgYnV0 IGFsc28gd29ya2luZyBpbXBsaWNpdCBmZW5jZXMuIEFuZCBpdCBtdXN0CmJlIGRvYWJsZSB3aXRo b3V0IHRvdWNoaW5nIGV2ZXJ5IGJvIG9uIGV2ZXJ5IENTLiBMaXN0aW5nIHBvc3NpYmxlCmltcGxl bWVudGF0aW9uIG9wdGlvbnM6CgotIHRoZSBhbWRrZmQgdHJpY2sgZG9lc24ndCB3b3JrIGJlY2F1 c2UgaXQgd291bGQgYnJlYWsgaW1wbGljaXQgZmVuY2luZyAtCiAgYW55IGltcGxpY2l0IHN5bmMg d291bGQgYWx3YXlzIHJlc3VsdCBpbiB0aGUgY29udGV4dCBnZXR0aW5nCiAgcHJlZW1wdGVkL2V2 aWN0ZWQsIHdoaWNoIGlzbid0IGdyZWF0LgoKLSB3ZSBzaGFyZSB0aGUgcmVzdl9vYmogYmV0d2Vl biBhbGwgdGhlIGJ1ZmZlcnMgaW4gdGhlIGRlZmF1bHQgd29ya2luZyBzZXQKICBvZiBhIGNvbnRl eHQsIHdpdGggdW5zaGFyaW5nL3Jlc2hhcmluZyB0aGUgcmVzdl9vYmogaWYgdGhleSBlbnRlci9s ZWF2ZQogIHRoZSBkZWZhdWx0IHdvcmtpbmcgc2V0LiBUaGF0IHdheSB0aGVyZSdzIG9ubHkgb25l IHJlc3Zfb2JqIHRvIHVwZGF0ZSBvbgogIGVhY2ggQ1MsIGFuZCB3ZSBjYW4gYXR0YWNoIGEgbmV3 IHNoYXJlZCBmZW5jZSBmb3IgZXZlcnkgQ1MuIFRyb3VibGUgaXMKICB0aGF0IHRoaXMgbWVhbnMg YSBnaXZlbiBidWZmZXIgY2FuIG9ubHkgYmUgcGFydCBvZiBvbmUgZGVmYXVsdCB3b3JraW5nCiAg c2V0LCBzbyBhbGwgc2hhcmVkIGJ1ZmZlcnMgd291bGQgbmVlZCB0byBiZSBsaXN0ZWQgYWdhaW4g c2VwYXJhdGVseS4gTm90CiAgc28gZ3JlYXQgaWYgdXNlcnNwYWNlIGhhcyB0byBkZWFsIHdpdGgg dGhhdCBmYWlybHkgYXJiaXRyYXJ5IGxpbWl0YXRpb24uCgotIHdlIGFsbG93IHRoZSAtPm1vdmVf bm90aWZ5IGNhbGxiYWNrIHRvIGFkZCBuZXcgZmVuY2VzLCB3aGljaCB0aGUKICBleHBvcnRlciBu ZWVkcyB0byB3YWl0IG9uIGJlZm9yZSBpdCBzY2hlZHVsZXMgdGhlIHBpcGVsaW5lZCBtb3ZlLiBU aGlzCiAgYWxzbyBhdm9pZHMgdGhlIHBlci1CTyB1cGRhdGUgb24gZXZlcnkgQ1MsIGFuZCBpdCB3 b3VsZCBhbGxvdyBidWZmZXJzIHRvCiAgYmUgc2hhcmVkIGFuZCB0byBiZSBpbiBtdWx0aXBsZSBk ZWZhdWx0IHdvcmtpbmcgc2V0cy4gVGhlIGRvd25zaWRlIGlzCiAgdGhhdCAtPm1vdmVfbm90aWZ5 IG5lZWRzIHRvIGJlIGFibGUgdG8gY29wZSB3aXRoIGFkZGVkIGZlbmNlcywgd2hpY2gKICBtZWFu cyB3ZSBtaWdodCBuZWVkIHRvIGdyb3cgdGhlIHNoYXJlZCBmZW5jZXMgYXJyYXksIHdoaWNoIG1p Z2h0IGZhaWwKICB3aXRoIEVOT01FTS4gTm90IGdyZWF0LiBXZSBjb3VsZCBmaXggdGhpcyB3aXRo IHNvbWUga2luZCBvZiBwZXJtYW5lbnQKICBzaGFyZWQgZmVuY2Ugc2xvdCByZXNlcnZhdGlvbnMg KGkuZS4gYSByZXNlcnZlZCBzbG90IHdoaWNoIG91dGxpdmVzCiAgaG9sZGluZyB0aGUgcmVzZXJ2 YXRpb24gbG9jayksIGJ1dCB0aGF0IG1pZ2h0IHdhc3RlIHF1aXRlIGEgYml0IG9mCiAgbWVtb3J5 LiBQcm9iYWJseSBub3QgcmVhbCBwcm9ibGVtIGluIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhpbmdz LiBJIHRoaW5rCiAgdGhlIGZlbmNlIGl0c2VsZiBjYW4gYmUgcHJlYWxsb2NhdGVkIHBlciBjb250 ZXh0LCBzbyB0aGF0IGlzbid0IHRoZQogIHByb2JsZW0uCgotIHNhbWUgYXMgYWJvdmUsIGJ1dCB0 aGUgbmV3IGZlbmNlIGRvZXNuJ3QgZ2V0IGFkZGVkLCBidXQgcmV0dXJuZWQgdG8gdGhlCiAgY2Fs bGVyLCBhbmQgdGhlIGV4cG9ydGVyIGRlYWxzIHdpdGggdGhlIEVOT01FTSBtZXNzLiBNaWdodCBu b3Qgd29yawogIHNpbmNlIGFuIGltcG9ydGVyIGNvdWxkIGhhdmUgYSBsb3Qgb2YgY29udGV4dHMg dXNpbmcgYSBnaXZlbiBvYmplY3QsIGFuZAogIHNvIHdvdWxkIGhhdmUgYSBsb3Qgb2YgZmVuY2Vz IHRvIGFkZC4KCi0gc29tZXRoaW5nIGVudGlyZWx5IGRpZmZlcmVudD8KClRob3VnaHRzPwoKQ2hl ZXJzLCBEYW5pZWwKCj4gLS0tCj4gIGRyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMgfCAxODMgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0KPiAgaW5jbHVkZS9saW51eC9kbWEt YnVmLmggICB8IDEwOCArKysrKysrKysrKysrKysrKysrKy0tCj4gIDIgZmlsZXMgY2hhbmdlZCwg Mjc3IGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jIGIvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYwo+IGluZGV4 IDZjMTVkZWI1ZDRhZC4uYmQ4NjExZmEyY2ZhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZG1hLWJ1 Zi9kbWEtYnVmLmMKPiArKysgYi9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jCj4gQEAgLTUzMSw2 ICs1MzEsOSBAQCBzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1Zl9leHBvcnQoY29uc3Qgc3RydWN0IGRt YV9idWZfZXhwb3J0X2luZm8gKmV4cF9pbmZvKQo+ICAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwp Owo+ICAJfQo+ICAKPiArCWlmIChXQVJOX09OKGV4cF9pbmZvLT5vcHMtPmNhY2hlX3NndF9tYXBw aW5nICYmIGV4cF9pbmZvLT5vcHMtPnBpbikpCj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7 Cj4gKwo+ICAJaWYgKCF0cnlfbW9kdWxlX2dldChleHBfaW5mby0+b3duZXIpKQo+ICAJCXJldHVy biBFUlJfUFRSKC1FTk9FTlQpOwo+ICAKPiBAQCAtNjUxLDEwICs2NTQsMTIgQEAgdm9pZCBkbWFf YnVmX3B1dChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKQo+ICBFWFBPUlRfU1lNQk9MX0dQTChkbWFf YnVmX3B1dCk7Cj4gIAo+ICAvKioKPiAtICogZG1hX2J1Zl9hdHRhY2ggLSBBZGQgdGhlIGRldmlj ZSB0byBkbWFfYnVmJ3MgYXR0YWNobWVudHMgbGlzdDsgb3B0aW9uYWxseSwKPiArICogZG1hX2J1 Zl9keW5hbWljX2F0dGFjaCAtIEFkZCB0aGUgZGV2aWNlIHRvIGRtYV9idWYncyBhdHRhY2htZW50 cyBsaXN0OyBvcHRpb25hbGx5LAo+ICAgKiBjYWxscyBhdHRhY2goKSBvZiBkbWFfYnVmX29wcyB0 byBhbGxvdyBkZXZpY2Utc3BlY2lmaWMgYXR0YWNoIGZ1bmN0aW9uYWxpdHkKPiAtICogQGRtYWJ1 ZjoJW2luXQlidWZmZXIgdG8gYXR0YWNoIGRldmljZSB0by4KPiAtICogQGRldjoJW2luXQlkZXZp Y2UgdG8gYmUgYXR0YWNoZWQuCj4gKyAqIEBkbWFidWY6CQlbaW5dCWJ1ZmZlciB0byBhdHRhY2gg ZGV2aWNlIHRvLgo+ICsgKiBAZGV2OgkJW2luXQlkZXZpY2UgdG8gYmUgYXR0YWNoZWQuCj4gKyAq IEBpbXBvcnRlcl9vcHMJW2luXQlpbXBvcnRlciBvcGVyYXRpb25zIGZvciB0aGUgYXR0YWNobWVu dAo+ICsgKiBAaW1wb3J0ZXJfcHJpdglbaW5dCWltcG9ydGVyIHByaXZhdGUgcG9pbnRlciBmb3Ig dGhlIGF0dGFjaG1lbnQKPiAgICoKPiAgICogUmV0dXJucyBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2ht ZW50IHBvaW50ZXIgZm9yIHRoaXMgYXR0YWNobWVudC4gQXR0YWNobWVudHMKPiAgICogbXVzdCBi ZSBjbGVhbmVkIHVwIGJ5IGNhbGxpbmcgZG1hX2J1Zl9kZXRhY2goKS4KPiBAQCAtNjY4LDggKzY3 MywxMCBAQCBFWFBPUlRfU1lNQk9MX0dQTChkbWFfYnVmX3B1dCk7Cj4gICAqIGFjY2Vzc2libGUg dG8gQGRldiwgYW5kIGNhbm5vdCBiZSBtb3ZlZCB0byBhIG1vcmUgc3VpdGFibGUgcGxhY2UuIFRo aXMgaXMKPiAgICogaW5kaWNhdGVkIHdpdGggdGhlIGVycm9yIGNvZGUgLUVCVVNZLgo+ICAgKi8K PiAtc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqZG1hX2J1Zl9hdHRhY2goc3RydWN0IGRtYV9i dWYgKmRtYWJ1ZiwKPiAtCQkJCQkgIHN0cnVjdCBkZXZpY2UgKmRldikKPiArc3RydWN0IGRtYV9i dWZfYXR0YWNobWVudCAqCj4gK2RtYV9idWZfZHluYW1pY19hdHRhY2goc3RydWN0IGRtYV9idWYg KmRtYWJ1Ziwgc3RydWN0IGRldmljZSAqZGV2LAo+ICsJCSAgICAgICBjb25zdCBzdHJ1Y3QgZG1h X2J1Zl9hdHRhY2hfb3BzICppbXBvcnRlcl9vcHMsCj4gKwkJICAgICAgIHZvaWQgKmltcG9ydGVy X3ByaXYpCj4gIHsKPiAgCXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaDsKPiAgCWlu dCByZXQ7Cj4gQEAgLTY4Myw2ICs2OTAsOCBAQCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICpk bWFfYnVmX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAo+ICAKPiAgCWF0dGFjaC0+ZGV2 ID0gZGV2Owo+ICAJYXR0YWNoLT5kbWFidWYgPSBkbWFidWY7Cj4gKwlhdHRhY2gtPmltcG9ydGVy X29wcyA9IGltcG9ydGVyX29wczsKPiArCWF0dGFjaC0+aW1wb3J0ZXJfcHJpdiA9IGltcG9ydGVy X3ByaXY7Cj4gIAo+ICAJbXV0ZXhfbG9jaygmZG1hYnVmLT5sb2NrKTsKPiAgCj4gQEAgLTY5MSwx NiArNzAwLDcyIEBAIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmRtYV9idWZfYXR0YWNoKHN0 cnVjdCBkbWFfYnVmICpkbWFidWYsCj4gIAkJaWYgKHJldCkKPiAgCQkJZ290byBlcnJfYXR0YWNo Owo+ICAJfQo+ICsJcmVzZXJ2YXRpb25fb2JqZWN0X2xvY2soZG1hYnVmLT5yZXN2LCBOVUxMKTsK PiAgCWxpc3RfYWRkKCZhdHRhY2gtPm5vZGUsICZkbWFidWYtPmF0dGFjaG1lbnRzKTsKPiArCXJl c2VydmF0aW9uX29iamVjdF91bmxvY2soZG1hYnVmLT5yZXN2KTsKPiAgCj4gIAltdXRleF91bmxv Y2soJmRtYWJ1Zi0+bG9jayk7Cj4gIAo+ICsJLyogV2hlbiBlaXRoZXIgdGhlIGltcG9ydGVyIG9y IHRoZSBleHBvcnRlciBjYW4ndCBoYW5kbGUgZHluYW1pYwo+ICsJICogbWFwcGluZ3Mgd2UgY2Fj aGUgdGhlIG1hcHBpbmcgaGVyZSB0byBhdm9pZCBpc3N1ZXMgd2l0aCB0aGUKPiArCSAqIHJlc2Vy dmF0aW9uIG9iamVjdCBsb2NrLgo+ICsJICovCj4gKwlpZiAoZG1hX2J1Zl9hdHRhY2htZW50X2lz X2R5bmFtaWMoYXR0YWNoKSAhPQo+ICsJICAgIGRtYV9idWZfaXNfZHluYW1pYyhkbWFidWYpKSB7 Cj4gKwkJc3RydWN0IHNnX3RhYmxlICpzZ3Q7Cj4gKwo+ICsJCWlmIChkbWFfYnVmX2lzX2R5bmFt aWMoYXR0YWNoLT5kbWFidWYpKSB7Cj4gKwkJCXJlc2VydmF0aW9uX29iamVjdF9sb2NrKGF0dGFj aC0+ZG1hYnVmLT5yZXN2LCBOVUxMKTsKPiArCQkJcmV0ID0gZG1hX2J1Zl9waW4oYXR0YWNoKTsK PiArCQkJaWYgKHJldCkKPiArCQkJCWdvdG8gZXJyX3VubG9jazsKPiArCQl9Cj4gKwo+ICsJCXNn dCA9IGRtYWJ1Zi0+b3BzLT5tYXBfZG1hX2J1ZihhdHRhY2gsIERNQV9CSURJUkVDVElPTkFMKTsK PiArCQlpZiAoIXNndCkKPiArCQkJc2d0ID0gRVJSX1BUUigtRU5PTUVNKTsKPiArCQlpZiAoSVNf RVJSKHNndCkpIHsKPiArCQkJcmV0ID0gUFRSX0VSUihzZ3QpOwo+ICsJCQlnb3RvIGVycl91bnBp bjsKPiArCQl9Cj4gKwkJaWYgKGRtYV9idWZfaXNfZHluYW1pYyhhdHRhY2gtPmRtYWJ1ZikpCj4g KwkJCXJlc2VydmF0aW9uX29iamVjdF91bmxvY2soYXR0YWNoLT5kbWFidWYtPnJlc3YpOwo+ICsJ CWF0dGFjaC0+c2d0ID0gc2d0Owo+ICsJCWF0dGFjaC0+ZGlyID0gRE1BX0JJRElSRUNUSU9OQUw7 Cj4gKwl9Cj4gKwo+ICAJcmV0dXJuIGF0dGFjaDsKPiAgCj4gIGVycl9hdHRhY2g6Cj4gIAlrZnJl ZShhdHRhY2gpOwo+ICAJbXV0ZXhfdW5sb2NrKCZkbWFidWYtPmxvY2spOwo+ICAJcmV0dXJuIEVS Ul9QVFIocmV0KTsKPiArCj4gK2Vycl91bnBpbjoKPiArCWlmIChkbWFfYnVmX2lzX2R5bmFtaWMo YXR0YWNoLT5kbWFidWYpKQo+ICsJCWRtYV9idWZfdW5waW4oYXR0YWNoKTsKPiArCj4gK2Vycl91 bmxvY2s6Cj4gKwlpZiAoZG1hX2J1Zl9pc19keW5hbWljKGF0dGFjaC0+ZG1hYnVmKSkKPiArCQly ZXNlcnZhdGlvbl9vYmplY3RfdW5sb2NrKGF0dGFjaC0+ZG1hYnVmLT5yZXN2KTsKPiArCj4gKwlk bWFfYnVmX2RldGFjaChkbWFidWYsIGF0dGFjaCk7Cj4gKwlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKGRtYV9idWZfZHluYW1pY19hdHRhY2gpOwo+ICsKPiAr LyoqCj4gKyAqIGRtYV9idWZfYXR0YWNoIC0gV3JhcHBlciBmb3IgZG1hX2J1Zl9keW5hbWljX2F0 dGFjaAo+ICsgKiBAZG1hYnVmOglbaW5dCWJ1ZmZlciB0byBhdHRhY2ggZGV2aWNlIHRvLgo+ICsg KiBAZGV2OglbaW5dCWRldmljZSB0byBiZSBhdHRhY2hlZC4KPiArICoKPiArICogV3JhcHBlciB0 byBjYWxsIGRtYV9idWZfZHluYW1pY19hdHRhY2goKSBmb3IgZHJpdmVycyB3aGljaCBzdGlsbCB1 c2UgYSBzdGF0aWMKPiArICogbWFwcGluZy4KPiArICovCj4gK3N0cnVjdCBkbWFfYnVmX2F0dGFj aG1lbnQgKmRtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCj4gKwkJCQkJICBz dHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArCXJldHVybiBkbWFfYnVmX2R5bmFtaWNfYXR0YWNo KGRtYWJ1ZiwgZGV2LCBOVUxMLCBOVUxMKTsKPiAgfQo+ICBFWFBPUlRfU1lNQk9MX0dQTChkbWFf YnVmX2F0dGFjaCk7Cj4gIAo+IEBAIC03MTcsMTEgKzc4MiwyMiBAQCB2b2lkIGRtYV9idWZfZGV0 YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0 dGFjaCkKPiAgCWlmIChXQVJOX09OKCFkbWFidWYgfHwgIWF0dGFjaCkpCj4gIAkJcmV0dXJuOwo+ ICAKPiAtCWlmIChhdHRhY2gtPnNndCkKPiArCWlmIChhdHRhY2gtPnNndCkgewo+ICsJCWlmIChk bWFfYnVmX2lzX2R5bmFtaWMoYXR0YWNoLT5kbWFidWYpKQo+ICsJCQlyZXNlcnZhdGlvbl9vYmpl Y3RfbG9jayhhdHRhY2gtPmRtYWJ1Zi0+cmVzdiwgTlVMTCk7Cj4gKwo+ICAJCWRtYWJ1Zi0+b3Bz LT51bm1hcF9kbWFfYnVmKGF0dGFjaCwgYXR0YWNoLT5zZ3QsIGF0dGFjaC0+ZGlyKTsKPiAgCj4g KwkJaWYgKGRtYV9idWZfaXNfZHluYW1pYyhhdHRhY2gtPmRtYWJ1ZikpIHsKPiArCQkJZG1hX2J1 Zl91bnBpbihhdHRhY2gpOwo+ICsJCQlyZXNlcnZhdGlvbl9vYmplY3RfdW5sb2NrKGF0dGFjaC0+ ZG1hYnVmLT5yZXN2KTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICAJbXV0ZXhfbG9jaygmZG1hYnVmLT5s b2NrKTsKPiArCXJlc2VydmF0aW9uX29iamVjdF9sb2NrKGRtYWJ1Zi0+cmVzdiwgTlVMTCk7Cj4g IAlsaXN0X2RlbCgmYXR0YWNoLT5ub2RlKTsKPiArCXJlc2VydmF0aW9uX29iamVjdF91bmxvY2so ZG1hYnVmLT5yZXN2KTsKPiAgCWlmIChkbWFidWYtPm9wcy0+ZGV0YWNoKQo+ICAJCWRtYWJ1Zi0+ b3BzLT5kZXRhY2goZG1hYnVmLCBhdHRhY2gpOwo+ICAKPiBAQCAtNzMwLDYgKzgwNiw0NCBAQCB2 b2lkIGRtYV9idWZfZGV0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIHN0cnVjdCBkbWFfYnVm X2F0dGFjaG1lbnQgKmF0dGFjaCkKPiAgfQo+ICBFWFBPUlRfU1lNQk9MX0dQTChkbWFfYnVmX2Rl dGFjaCk7Cj4gIAo+ICsvKioKPiArICogZG1hX2J1Zl9waW4gLSBMb2NrIGRvd24gdGhlIERNQS1i dWYKPiArICoKPiArICogQGF0dGFjaDoJW2luXQlhdHRhY2htZW50IHdoaWNoIHNob3VsZCBiZSBw aW5uZWQKPiArICoKPiArICogUmV0dXJuczoKPiArICogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBl cnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gKyAqLwo+ICtpbnQgZG1hX2J1Zl9waW4oc3RydWN0IGRt YV9idWZfYXR0YWNobWVudCAqYXR0YWNoKQo+ICt7Cj4gKwlzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVm ID0gYXR0YWNoLT5kbWFidWY7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlyZXNlcnZhdGlvbl9v YmplY3RfYXNzZXJ0X2hlbGQoZG1hYnVmLT5yZXN2KTsKPiArCj4gKwlpZiAoZG1hYnVmLT5vcHMt PnBpbikKPiArCQlyZXQgPSBkbWFidWYtPm9wcy0+cGluKGF0dGFjaCk7Cj4gKwo+ICsJcmV0dXJu IHJldDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChkbWFfYnVmX3Bpbik7Cj4gKwo+ICsvKioK PiArICogZG1hX2J1Zl91bnBpbiAtIFJlbW92ZSBsb2NrIGZyb20gRE1BLWJ1Zgo+ICsgKgo+ICsg KiBAYXR0YWNoOglbaW5dCWF0dGFjaG1lbnQgd2hpY2ggc2hvdWxkIGJlIHVucGlubmVkCj4gKyAq Lwo+ICt2b2lkIGRtYV9idWZfdW5waW4oc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNo KQo+ICt7Cj4gKwlzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmID0gYXR0YWNoLT5kbWFidWY7Cj4gKwo+ ICsJcmVzZXJ2YXRpb25fb2JqZWN0X2Fzc2VydF9oZWxkKGRtYWJ1Zi0+cmVzdik7Cj4gKwo+ICsJ aWYgKGRtYWJ1Zi0+b3BzLT51bnBpbikKPiArCQlkbWFidWYtPm9wcy0+dW5waW4oYXR0YWNoKTsK PiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChkbWFfYnVmX3VucGluKTsKPiArCj4gIC8qKgo+ICAg KiBkbWFfYnVmX21hcF9hdHRhY2htZW50IC0gUmV0dXJucyB0aGUgc2NhdHRlcmxpc3QgdGFibGUg b2YgdGhlIGF0dGFjaG1lbnQ7Cj4gICAqIG1hcHBlZCBpbnRvIF9kZXZpY2VfIGFkZHJlc3Mgc3Bh Y2UuIElzIGEgd3JhcHBlciBmb3IgbWFwX2RtYV9idWYoKSBvZiB0aGUKPiBAQCAtNzQ5LDYgKzg2 Myw3IEBAIHN0cnVjdCBzZ190YWJsZSAqZG1hX2J1Zl9tYXBfYXR0YWNobWVudChzdHJ1Y3QgZG1h X2J1Zl9hdHRhY2htZW50ICphdHRhY2gsCj4gIAkJCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24g ZGlyZWN0aW9uKQo+ICB7Cj4gIAlzdHJ1Y3Qgc2dfdGFibGUgKnNnX3RhYmxlOwo+ICsJaW50IHI7 Cj4gIAo+ICAJbWlnaHRfc2xlZXAoKTsKPiAgCj4gQEAgLTc2NywxMCArODgyLDMxIEBAIHN0cnVj dCBzZ190YWJsZSAqZG1hX2J1Zl9tYXBfYXR0YWNobWVudChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2ht ZW50ICphdHRhY2gsCj4gIAkJcmV0dXJuIGF0dGFjaC0+c2d0Owo+ICAJfQo+ICAKPiArCWlmIChk bWFfYnVmX2F0dGFjaG1lbnRfaXNfZHluYW1pYyhhdHRhY2gpKSB7Cj4gKwkJcmVzZXJ2YXRpb25f b2JqZWN0X2Fzc2VydF9oZWxkKGF0dGFjaC0+ZG1hYnVmLT5yZXN2KTsKPiArCj4gKwl9IGVsc2Ug aWYgKGRtYV9idWZfaXNfZHluYW1pYyhhdHRhY2gtPmRtYWJ1ZikpIHsKPiArCQlyZXNlcnZhdGlv bl9vYmplY3RfbG9jayhhdHRhY2gtPmRtYWJ1Zi0+cmVzdiwgTlVMTCk7Cj4gKwkJciA9IGRtYV9i dWZfcGluKGF0dGFjaCk7Cj4gKwkJaWYgKHIpIHsKPiArCQkJcmVzZXJ2YXRpb25fb2JqZWN0X3Vu bG9jayhhdHRhY2gtPmRtYWJ1Zi0+cmVzdik7Cj4gKwkJCXJldHVybiBFUlJfUFRSKHIpOwo+ICsJ CX0KPiArCX0gZWxzZSB7Cj4gKwkJbWlnaHRfbG9jaygmYXR0YWNoLT5kbWFidWYtPnJlc3YtPmxv Y2suYmFzZSk7Cj4gKwl9Cj4gKwo+ICAJc2dfdGFibGUgPSBhdHRhY2gtPmRtYWJ1Zi0+b3BzLT5t YXBfZG1hX2J1ZihhdHRhY2gsIGRpcmVjdGlvbik7Cj4gIAlpZiAoIXNnX3RhYmxlKQo+ICAJCXNn X3RhYmxlID0gRVJSX1BUUigtRU5PTUVNKTsKPiAgCj4gKwlpZiAoIWRtYV9idWZfYXR0YWNobWVu dF9pc19keW5hbWljKGF0dGFjaCkgJiYKPiArCSAgICBkbWFfYnVmX2lzX2R5bmFtaWMoYXR0YWNo LT5kbWFidWYpKSB7Cj4gKwkJaWYgKElTX0VSUihzZ190YWJsZSkpCj4gKwkJCWRtYV9idWZfdW5w aW4oYXR0YWNoKTsKPiArCQlyZXNlcnZhdGlvbl9vYmplY3RfdW5sb2NrKGF0dGFjaC0+ZG1hYnVm LT5yZXN2KTsKPiArCX0KPiArCj4gIAlpZiAoIUlTX0VSUihzZ190YWJsZSkgJiYgYXR0YWNoLT5k bWFidWYtPm9wcy0+Y2FjaGVfc2d0X21hcHBpbmcpIHsKPiAgCQlhdHRhY2gtPnNndCA9IHNnX3Rh YmxlOwo+ICAJCWF0dGFjaC0+ZGlyID0gZGlyZWN0aW9uOwo+IEBAIC04MDIsMTAgKzkzOCw0MyBA QCB2b2lkIGRtYV9idWZfdW5tYXBfYXR0YWNobWVudChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50 ICphdHRhY2gsCj4gIAlpZiAoYXR0YWNoLT5zZ3QgPT0gc2dfdGFibGUpCj4gIAkJcmV0dXJuOwo+ ICAKPiArCWlmIChkbWFfYnVmX2F0dGFjaG1lbnRfaXNfZHluYW1pYyhhdHRhY2gpKQo+ICsJCXJl c2VydmF0aW9uX29iamVjdF9hc3NlcnRfaGVsZChhdHRhY2gtPmRtYWJ1Zi0+cmVzdik7Cj4gKwll bHNlIGlmIChkbWFfYnVmX2lzX2R5bmFtaWMoYXR0YWNoLT5kbWFidWYpKQo+ICsJCXJlc2VydmF0 aW9uX29iamVjdF9sb2NrKGF0dGFjaC0+ZG1hYnVmLT5yZXN2LCBOVUxMKTsKPiArCWVsc2UKPiAr CQltaWdodF9sb2NrKCZhdHRhY2gtPmRtYWJ1Zi0+cmVzdi0+bG9jay5iYXNlKTsKPiArCj4gIAlh dHRhY2gtPmRtYWJ1Zi0+b3BzLT51bm1hcF9kbWFfYnVmKGF0dGFjaCwgc2dfdGFibGUsIGRpcmVj dGlvbik7Cj4gKwo+ICsJaWYgKGRtYV9idWZfaXNfZHluYW1pYyhhdHRhY2gtPmRtYWJ1ZikgJiYK PiArCSAgICAhZG1hX2J1Zl9hdHRhY2htZW50X2lzX2R5bmFtaWMoYXR0YWNoKSkgewo+ICsJCWRt YV9idWZfdW5waW4oYXR0YWNoKTsKPiArCQlyZXNlcnZhdGlvbl9vYmplY3RfdW5sb2NrKGF0dGFj aC0+ZG1hYnVmLT5yZXN2KTsKPiArCX0KPiAgfQo+ICBFWFBPUlRfU1lNQk9MX0dQTChkbWFfYnVm X3VubWFwX2F0dGFjaG1lbnQpOwo+ICAKPiArLyoqCj4gKyAqIGRtYV9idWZfbW92ZV9ub3RpZnkg LSBub3RpZnkgYXR0YWNobWVudHMgdGhhdCBETUEtYnVmIGlzIG1vdmluZwo+ICsgKgo+ICsgKiBA ZG1hYnVmOglbaW5dCWJ1ZmZlciB3aGljaCBpcyBtb3ZpbmcKPiArICoKPiArICogSW5mb3JtcyBh bGwgYXR0YWNobWVuc3QgdGhhdCB0aGV5IG5lZWQgdG8gZGVzdHJveSBhbmQgcmVjcmVhdGVkIGFs bCB0aGVpcgo+ICsgKiBtYXBwaW5ncy4KPiArICovCj4gK3ZvaWQgZG1hX2J1Zl9tb3ZlX25vdGlm eShzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKQo+ICt7Cj4gKwlzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2ht ZW50ICphdHRhY2g7Cj4gKwo+ICsJcmVzZXJ2YXRpb25fb2JqZWN0X2Fzc2VydF9oZWxkKGRtYWJ1 Zi0+cmVzdik7Cj4gKwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShhdHRhY2gsICZkbWFidWYtPmF0 dGFjaG1lbnRzLCBub2RlKQo+ICsJCWlmIChhdHRhY2gtPmltcG9ydGVyX29wcyAmJiBhdHRhY2gt PmltcG9ydGVyX29wcy0+bW92ZV9ub3RpZnkpCj4gKwkJCWF0dGFjaC0+aW1wb3J0ZXJfb3BzLT5t b3ZlX25vdGlmeShhdHRhY2gpOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKGRtYV9idWZfbW92 ZV9ub3RpZnkpOwo+ICsKPiAgLyoqCj4gICAqIERPQzogY3B1IGFjY2Vzcwo+ICAgKgo+IEBAIC0x MjI1LDEwICsxMzk0LDEyIEBAIHN0YXRpYyBpbnQgZG1hX2J1Zl9kZWJ1Z19zaG93KHN0cnVjdCBz ZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKQo+ICAJCXNlcV9wdXRzKHMsICJcdEF0dGFjaGVkIERl dmljZXM6XG4iKTsKPiAgCQlhdHRhY2hfY291bnQgPSAwOwo+ICAKPiArCQlyZXNlcnZhdGlvbl9v YmplY3RfbG9jayhidWZfb2JqLT5yZXN2LCBOVUxMKTsKPiAgCQlsaXN0X2Zvcl9lYWNoX2VudHJ5 KGF0dGFjaF9vYmosICZidWZfb2JqLT5hdHRhY2htZW50cywgbm9kZSkgewo+ICAJCQlzZXFfcHJp bnRmKHMsICJcdCVzXG4iLCBkZXZfbmFtZShhdHRhY2hfb2JqLT5kZXYpKTsKPiAgCQkJYXR0YWNo X2NvdW50Kys7Cj4gIAkJfQo+ICsJCXJlc2VydmF0aW9uX29iamVjdF91bmxvY2soYnVmX29iai0+ cmVzdik7Cj4gIAo+ICAJCXNlcV9wcmludGYocywgIlRvdGFsICVkIGRldmljZXMgYXR0YWNoZWRc blxuIiwKPiAgCQkJCWF0dGFjaF9jb3VudCk7Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgv ZG1hLWJ1Zi5oIGIvaW5jbHVkZS9saW51eC9kbWEtYnVmLmgKPiBpbmRleCAwMWFkNWI5NDJhNmYu LmNjYWQyZmMxZjY0MCAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaAo+ICsr KyBiL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oCj4gQEAgLTkyLDE0ICs5Miw0MCBAQCBzdHJ1Y3Qg ZG1hX2J1Zl9vcHMgewo+ICAJICovCj4gIAl2b2lkICgqZGV0YWNoKShzdHJ1Y3QgZG1hX2J1ZiAq LCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICopOwo+ICAKPiArCS8qKgo+ICsJICogQHBpbjoK PiArCSAqCj4gKwkgKiBUaGlzIGlzIGNhbGxlZCBieSBkbWFfYnVmX3BpbiBhbmQgbGV0cyB0aGUg ZXhwb3J0ZXIga25vdyB0aGF0IHRoZQo+ICsJICogRE1BLWJ1ZiBjYW4ndCBiZSBtb3ZlZCBhbnkg bW9yZS4KPiArCSAqCj4gKwkgKiBUaGlzIGlzIGNhbGxlZCB3aXRoIHRoZSBkbWFidWYtPnJlc3Yg b2JqZWN0IGxvY2tlZC4KPiArCSAqCj4gKwkgKiBUaGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsLgo+ ICsJICoKPiArCSAqIFJldHVybnM6Cj4gKwkgKgo+ICsJICogMCBvbiBzdWNjZXNzLCBuZWdhdGl2 ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gKwkgKi8KPiArCWludCAoKnBpbikoc3RydWN0IGRt YV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTsKPiArCj4gKwkvKioKPiArCSAqIEB1bnBpbjoKPiAr CSAqCj4gKwkgKiBUaGlzIGlzIGNhbGxlZCBieSBkbWFfYnVmX3VucGluIGFuZCBsZXRzIHRoZSBl eHBvcnRlciBrbm93IHRoYXQgdGhlCj4gKwkgKiBETUEtYnVmIGNhbiBiZSBtb3ZlZCBhZ2Fpbi4K PiArCSAqCj4gKwkgKiBUaGlzIGlzIGNhbGxlZCB3aXRoIHRoZSBkbWFidWYtPnJlc3Ygb2JqZWN0 IGxvY2tlZC4KPiArCSAqCj4gKwkgKiBUaGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsLgo+ICsJICov Cj4gKwl2b2lkICgqdW5waW4pKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCk7Cj4g Kwo+ICAJLyoqCj4gIAkgKiBAbWFwX2RtYV9idWY6Cj4gIAkgKgo+ICAJICogVGhpcyBpcyBjYWxs ZWQgYnkgZG1hX2J1Zl9tYXBfYXR0YWNobWVudCgpIGFuZCBpcyB1c2VkIHRvIG1hcCBhCj4gIAkg KiBzaGFyZWQgJmRtYV9idWYgaW50byBkZXZpY2UgYWRkcmVzcyBzcGFjZSwgYW5kIGl0IGlzIG1h bmRhdG9yeS4gSXQKPiAtCSAqIGNhbiBvbmx5IGJlIGNhbGxlZCBpZiBAYXR0YWNoIGhhcyBiZWVu IGNhbGxlZCBzdWNjZXNzZnVsbHkuIFRoaXMKPiAtCSAqIGVzc2VudGlhbGx5IHBpbnMgdGhlIERN QSBidWZmZXIgaW50byBwbGFjZSwgYW5kIGl0IGNhbm5vdCBiZSBtb3ZlZAo+IC0JICogYW55IG1v cmUKPiArCSAqIGNhbiBvbmx5IGJlIGNhbGxlZCBpZiBAYXR0YWNoIGhhcyBiZWVuIGNhbGxlZCBz dWNjZXNzZnVsbHkuCj4gIAkgKgo+ICAJICogVGhpcyBjYWxsIG1heSBzbGVlcCwgZS5nLiB3aGVu IHRoZSBiYWNraW5nIHN0b3JhZ2UgZmlyc3QgbmVlZHMgdG8gYmUKPiAgCSAqIGFsbG9jYXRlZCwg b3IgbW92ZWQgdG8gYSBsb2NhdGlvbiBzdWl0YWJsZSBmb3IgYWxsIGN1cnJlbnRseSBhdHRhY2hl ZAo+IEBAIC0xMjAsNiArMTQ2LDkgQEAgc3RydWN0IGRtYV9idWZfb3BzIHsKPiAgCSAqIGFueSBv dGhlciBraW5kIG9mIHNoYXJpbmcgdGhhdCB0aGUgZXhwb3J0ZXIgbWlnaHQgd2lzaCB0byBtYWtl Cj4gIAkgKiBhdmFpbGFibGUgdG8gYnVmZmVyLXVzZXJzLgo+ICAJICoKPiArCSAqIFRoaXMgaXMg YWx3YXlzIGNhbGxlZCB3aXRoIHRoZSBkbWFidWYtPnJlc3Ygb2JqZWN0IGxvY2tlZCB3aGVuCj4g KwkgKiB0aGUgcGluL3VucGluIGNhbGxiYWNrcyBhcmUgaW1wbGVtZW50ZWQuCj4gKwkgKgo+ICAJ ICogUmV0dXJuczoKPiAgCSAqCj4gIAkgKiBBICZzZ190YWJsZSBzY2F0dGVyIGxpc3Qgb2Ygb3Ig dGhlIGJhY2tpbmcgc3RvcmFnZSBvZiB0aGUgRE1BIGJ1ZmZlciwKPiBAQCAtMTM3LDkgKzE2Niw2 IEBAIHN0cnVjdCBkbWFfYnVmX29wcyB7Cj4gIAkgKgo+ICAJICogVGhpcyBpcyBjYWxsZWQgYnkg ZG1hX2J1Zl91bm1hcF9hdHRhY2htZW50KCkgYW5kIHNob3VsZCB1bm1hcCBhbmQKPiAgCSAqIHJl bGVhc2UgdGhlICZzZ190YWJsZSBhbGxvY2F0ZWQgaW4gQG1hcF9kbWFfYnVmLCBhbmQgaXQgaXMg bWFuZGF0b3J5Lgo+IC0JICogSXQgc2hvdWxkIGFsc28gdW5waW4gdGhlIGJhY2tpbmcgc3RvcmFn ZSBpZiB0aGlzIGlzIHRoZSBsYXN0IG1hcHBpbmcKPiAtCSAqIG9mIHRoZSBETUEgYnVmZmVyLCBp dCB0aGUgZXhwb3J0ZXIgc3VwcG9ydHMgYmFja2luZyBzdG9yYWdlCj4gLQkgKiBtaWdyYXRpb24u Cj4gIAkgKi8KPiAgCXZvaWQgKCp1bm1hcF9kbWFfYnVmKShzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2ht ZW50ICosCj4gIAkJCSAgICAgIHN0cnVjdCBzZ190YWJsZSAqLAo+IEBAIC0zMzAsNiArMzU2LDM0 IEBAIHN0cnVjdCBkbWFfYnVmIHsKPiAgCX0gY2JfZXhjbCwgY2Jfc2hhcmVkOwo+ICB9Owo+ICAK PiArLyoqCj4gKyAqIHN0cnVjdCBkbWFfYnVmX2F0dGFjaF9vcHMgLSBpbXBvcnRlciBvcGVyYXRp b25zIGZvciBhbiBhdHRhY2htZW50Cj4gKyAqIEBtb3ZlX25vdGlmeTogW29wdGlvbmFsXSBub3Rp ZmljYXRpb24gdGhhdCB0aGUgRE1BLWJ1ZiBpcyBtb3ZpbmcKPiArICoKPiArICogQXR0YWNobWVu dCBvcGVyYXRpb25zIGltcGxlbWVudGVkIGJ5IHRoZSBpbXBvcnRlci4KPiArICovCj4gK3N0cnVj dCBkbWFfYnVmX2F0dGFjaF9vcHMgewo+ICsJLyoqCj4gKwkgKiBAbW92ZV9ub3RpZnkKPiArCSAq Cj4gKwkgKiBJZiB0aGlzIGNhbGxiYWNrIGlzIHByb3ZpZGVkIHRoZSBmcmFtZXdvcmsgY2FuIGF2 b2lkIHBpbm5pbmcgdGhlCj4gKwkgKiBiYWNraW5nIHN0b3JlIHdoaWxlIG1hcHBpbmdzIGV4aXN0 cy4KPiArCSAqCj4gKwkgKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aXRoIHRoZSBsb2NrIG9m IHRoZSByZXNlcnZhdGlvbiBvYmplY3QKPiArCSAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgZG1hX2J1 ZiBoZWxkIGFuZCB0aGUgbWFwcGluZyBmdW5jdGlvbiBtdXN0IGJlCj4gKwkgKiBjYWxsZWQgd2l0 aCB0aGlzIGxvY2sgaGVsZCBhcyB3ZWxsLiBUaGlzIG1ha2VzIHN1cmUgdGhhdCBubyBtYXBwaW5n Cj4gKwkgKiBpcyBjcmVhdGVkIGNvbmN1cnJlbnRseSB3aXRoIGFuIG9uZ29pbmcgbW92ZSBvcGVy YXRpb24uCj4gKwkgKgo+ICsJICogTWFwcGluZ3Mgc3RheSB2YWxpZCBhbmQgYXJlIG5vdCBkaXJl Y3RseSBhZmZlY3RlZCBieSB0aGlzIGNhbGxiYWNrLgo+ICsJICogQnV0IHRoZSBETUEtYnVmIGNh biBub3cgYmUgaW4gYSBkaWZmZXJlbnQgcGh5c2ljYWwgbG9jYXRpb24sIHNvIGFsbAo+ICsJICog bWFwcGluZ3Mgc2hvdWxkIGJlIGRlc3Ryb3llZCBhbmQgcmUtY3JlYXRlZCBhcyBzb29uIGFzIHBv c3NpYmxlLgo+ICsJICoKPiArCSAqIE5ldyBtYXBwaW5ncyBjYW4gYmUgY3JlYXRlZCBhZnRlciB0 aGlzIGNhbGxiYWNrIHJldHVybnMsIGFuZCB3aWxsCj4gKwkgKiBwb2ludCB0byB0aGUgbmV3IGxv Y2F0aW9uIG9mIHRoZSBETUEtYnVmLgo+ICsJICovCj4gKwl2b2lkICgqbW92ZV9ub3RpZnkpKHN0 cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCk7Cj4gK307Cj4gKwo+ICAvKioKPiAgICog c3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAtIGhvbGRzIGRldmljZS1idWZmZXIgYXR0YWNobWVu dCBkYXRhCj4gICAqIEBkbWFidWY6IGJ1ZmZlciBmb3IgdGhpcyBhdHRhY2htZW50Lgo+IEBAIC0z MzgsNiArMzkyLDggQEAgc3RydWN0IGRtYV9idWYgewo+ICAgKiBAc2d0OiBjYWNoZWQgbWFwcGlu Zy4KPiAgICogQGRpcjogZGlyZWN0aW9uIG9mIGNhY2hlZCBtYXBwaW5nLgo+ICAgKiBAcHJpdjog ZXhwb3J0ZXIgc3BlY2lmaWMgYXR0YWNobWVudCBkYXRhLgo+ICsgKiBAaW1wb3J0ZXJfb3BzOiBp bXBvcnRlciBvcGVyYXRpb25zIGZvciB0aGlzIGF0dGFjaG1lbnQuCj4gKyAqIEBpbXBvcnRlcl9w cml2OiBpbXBvcnRlciBzcGVjaWZpYyBhdHRhY2htZW50IGRhdGEuCj4gICAqCj4gICAqIFRoaXMg c3RydWN0dXJlIGhvbGRzIHRoZSBhdHRhY2htZW50IGluZm9ybWF0aW9uIGJldHdlZW4gdGhlIGRt YV9idWYgYnVmZmVyCj4gICAqIGFuZCBpdHMgdXNlciBkZXZpY2UocykuIFRoZSBsaXN0IGNvbnRh aW5zIG9uZSBhdHRhY2htZW50IHN0cnVjdCBwZXIgZGV2aWNlCj4gQEAgLTM1NSw2ICs0MTEsOSBA QCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50IHsKPiAgCXN0cnVjdCBzZ190YWJsZSAqc2d0Owo+ ICAJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyOwo+ICAJdm9pZCAqcHJpdjsKPiArCj4gKwlj b25zdCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2hfb3BzICppbXBvcnRlcl9vcHM7Cj4gKwl2b2lkICpp bXBvcnRlcl9wcml2Owo+ICB9Owo+ICAKPiAgLyoqCj4gQEAgLTQwNSwxMCArNDY0LDQyIEBAIHN0 YXRpYyBpbmxpbmUgdm9pZCBnZXRfZG1hX2J1ZihzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKQo+ICAJ Z2V0X2ZpbGUoZG1hYnVmLT5maWxlKTsKPiAgfQo+ICAKPiArLyoqCj4gKyAqIGRtYV9idWZfaXNf ZHluYW1pYyAtIGNoZWNrIGlmIGEgRE1BLWJ1ZiB1c2VzIGR5bmFtaWMgbWFwcGluZ3MuCj4gKyAq IEBkbWFidWY6IHRoZSBETUEtYnVmIHRvIGNoZWNrCj4gKyAqCj4gKyAqIFJldHVybnMgdHJ1ZSBp ZiBhIERNQS1idWYgZXhwb3J0ZXIgd2FudHMgdG8gY3JlYXRlIGR5bmFtaWMgc2cgdGFibGUgbWFw cGluZ3MKPiArICogZm9yIGVhY2ggYXR0YWNobWVudC4gRmFsc2UgaWYgb25seSBhIHNpbmdsZSBz dGF0aWMgc2cgdGFibGUgc2hvdWxkIGJlIHVzZWQuCj4gKyAqLwo+ICtzdGF0aWMgaW5saW5lIGJv b2wgZG1hX2J1Zl9pc19keW5hbWljKHN0cnVjdCBkbWFfYnVmICpkbWFidWYpCj4gK3sKPiArCXJl dHVybiAhIWRtYWJ1Zi0+b3BzLT5waW47Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBkbWFfYnVmX2F0 dGFjaG1lbnRfaXNfZHluYW1pYyAtIGNoZWNrIGlmIGEgRE1BLWJ1ZiBhdHRhY2htZW50IHVzZXMg ZHluYW1pYwo+ICsgKiBtYXBwaW5zZwo+ICsgKiBAYXR0YWNoOiB0aGUgRE1BLWJ1ZiBhdHRhY2ht ZW50IHRvIGNoZWNrCj4gKyAqCj4gKyAqIFJldHVybnMgdHJ1ZSBpZiBhIERNQS1idWYgaW1wb3J0 ZXIgd2FudHMgdG8gdXNlIGR5bmFtaWMgc2cgdGFibGUgbWFwcGluZ3MgYW5kCj4gKyAqIGNhbGxz IHRoZSBtYXAvdW5tYXAgZnVuY3Rpb25zIHdpdGggdGhlIHJlc2VydmF0aW9uIG9iamVjdCBsb2Nr ZWQuCj4gKyAqLwo+ICtzdGF0aWMgaW5saW5lIGJvb2wKPiArZG1hX2J1Zl9hdHRhY2htZW50X2lz X2R5bmFtaWMoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKQo+ICt7Cj4gKwlyZXR1 cm4gYXR0YWNoLT5pbXBvcnRlcl9vcHMgJiYgYXR0YWNoLT5pbXBvcnRlcl9vcHMtPm1vdmVfbm90 aWZ5Owo+ICt9Cj4gKwo+ICBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICpkbWFfYnVmX2F0dGFj aChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAo+IC0JCQkJCQkJc3RydWN0IGRldmljZSAqZGV2KTsK PiArCQkJCQkgIHN0cnVjdCBkZXZpY2UgKmRldik7Cj4gK3N0cnVjdCBkbWFfYnVmX2F0dGFjaG1l bnQgKgo+ICtkbWFfYnVmX2R5bmFtaWNfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIHN0 cnVjdCBkZXZpY2UgKmRldiwKPiArCQkgICAgICAgY29uc3Qgc3RydWN0IGRtYV9idWZfYXR0YWNo X29wcyAqaW1wb3J0ZXJfb3BzLAo+ICsJCSAgICAgICB2b2lkICppbXBvcnRlcl9wcml2KTsKPiAg dm9pZCBkbWFfYnVmX2RldGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAo+IC0JCQkJc3RydWN0 IGRtYV9idWZfYXR0YWNobWVudCAqZG1hYnVmX2F0dGFjaCk7Cj4gKwkJICAgIHN0cnVjdCBkbWFf YnVmX2F0dGFjaG1lbnQgKmF0dGFjaCk7Cj4gK2ludCBkbWFfYnVmX3BpbihzdHJ1Y3QgZG1hX2J1 Zl9hdHRhY2htZW50ICphdHRhY2gpOwo+ICt2b2lkIGRtYV9idWZfdW5waW4oc3RydWN0IGRtYV9i dWZfYXR0YWNobWVudCAqYXR0YWNoKTsKPiAgCj4gIHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmX2V4 cG9ydChjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9leHBvcnRfaW5mbyAqZXhwX2luZm8pOwo+ICAKPiBA QCAtNDIwLDYgKzUxMSw3IEBAIHN0cnVjdCBzZ190YWJsZSAqZG1hX2J1Zl9tYXBfYXR0YWNobWVu dChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICosCj4gIAkJCQkJZW51bSBkbWFfZGF0YV9kaXJl Y3Rpb24pOwo+ICB2b2lkIGRtYV9idWZfdW5tYXBfYXR0YWNobWVudChzdHJ1Y3QgZG1hX2J1Zl9h dHRhY2htZW50ICosIHN0cnVjdCBzZ190YWJsZSAqLAo+ICAJCQkJZW51bSBkbWFfZGF0YV9kaXJl Y3Rpb24pOwo+ICt2b2lkIGRtYV9idWZfbW92ZV9ub3RpZnkoc3RydWN0IGRtYV9idWYgKmRtYV9i dWYpOwo+ICBpbnQgZG1hX2J1Zl9iZWdpbl9jcHVfYWNjZXNzKHN0cnVjdCBkbWFfYnVmICpkbWFf YnVmLAo+ICAJCQkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7Cj4gIGludCBkbWFf YnVmX2VuZF9jcHVfYWNjZXNzKHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmLAo+IC0tIAo+IDIuMTcu MQo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4g ZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK PiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZl bAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9u Cmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2ludGVsLWdmeA==