From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 1/4] dma-buf: change DMA-buf locking convention v2 Date: Tue, 22 Oct 2019 12:04:41 +0200 Message-ID: <20191022100441.GH11828@phenom.ffwll.local> References: <20191021111524.14793-1-christian.koenig@amd.com> <20191022100130.GG11828@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20191022100130.GG11828@phenom.ffwll.local> 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, dri-devel@lists.freedesktop.org, linaro-mm-sig@lists.linaro.org, linux-media@vger.kernel.org List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCBPY3QgMjIsIDIwMTkgYXQgMTI6MDE6MzBQTSArMDIwMCwgRGFuaWVsIFZldHRlciB3 cm90ZToKPiBPbiBNb24sIE9jdCAyMSwgMjAxOSBhdCAwMToxNToyMVBNICswMjAwLCBDaHJpc3Rp YW4gS8O2bmlnIHdyb3RlOgo+ID4gVGhpcyBwYXRjaCBpcyBhIHN0cmlwcGVkIGRvd24gdmVyc2lv biBvZiB0aGUgbG9ja2luZyBjaGFuZ2VzCj4gPiBuZWNlc3NhcnkgdG8gc3VwcG9ydCBkeW5hbWlj IERNQS1idWYgaGFuZGxpbmcuCj4gPiAKPiA+IEl0IGFkZHMgYSBkeW5hbWljIGZsYWcgZm9yIGJv dGggaW1wb3J0ZXJzIGFzIHdlbGwgYXMgZXhwb3J0ZXJzCj4gPiBzbyB0aGF0IGRyaXZlcnMgY2Fu IGNob29zZSBpZiB0aGV5IHdhbnQgdGhlIHJlc2VydmF0aW9uIG9iamVjdAo+ID4gbG9ja2VkIG9y IHVubG9ja2VkIGR1cmluZyBtYXBwaW5nIG9mIGF0dGFjaG1lbnRzLgo+ID4gCj4gPiBGb3IgY29t cGF0aWJpbGl0eSBiZXR3ZWVuIGRyaXZlcnMgd2UgY2FjaGUgdGhlIERNQS1idWYgbWFwcGluZwo+ ID4gZHVyaW5nIGF0dGFjaGluZyBhbiBpbXBvcnRlciBhcyBzb29uIGFzIGV4cG9ydGVyL2ltcG9y dGVyCj4gPiBkaXNhZ3JlZSBvbiB0aGUgZHluYW1pYyBoYW5kbGluZy4KPiA+IAo+ID4gVGhpcyBj aGFuZ2UgaGFzIGdvbmUgdGhyb3VnaCBhIGxlbmd0aHkgZGlzY3Vzc2lvbiBvbiBkcmktZGV2ZWwK PiA+IGFuZCBvdGhlciBtYWlsaW5nIGxpc3RzIHdpdGggYXQgbGVhc3QgMy00IGRpZmZlcmVudCBh dHRlbXB0cyBhbmQKPiA+IGRlYWQtZW5kcyB1bnRpbCB3ZSBzZXR0bGVkIG9uIHRoaXMgc29sdXRp b24uIFBsZWFzZSByZWZlciB0byB0aGUKPiA+IG1haWxpbmcgbGlzdHMgYXJjaGl2ZXMgZm9yIGZ1 bGwgYmFja2dyb3VuZCBvbiB0aGUgaGlzdG9yeSBvZgo+ID4gdGhpcyBjaGFuZ2UuCgpUd28gbW9y ZSByZWZpbm1lbnRzIGJlbG93LCBJIGhpdCBzZW5kIGEgbm90Y2ggdG9vIGVhcmx5Lgo+IAo+IEkg a2luZGEgaG9wZWQgZm9yIGEgcmVhbCB3cml0ZS11cCBvZiB3aHkgd2UgZW5kZWQgdXAgaGVyZSwg bm90IGEgInBsZWFzZQo+IHJlYWQgdGhlIGxhc3QgeWVhciBvciBzbyBvZiBkcmktZGV2ZWwiIC4u Lgo+IAo+IFNvIGhlcmUncyB3aGF0IEkgdGhpbmsgd2UgbmVlZCB0byBtaW5pbWFsbHkgbWVudGlv biwgcGxzIGFkZDoKPiAKPiA8Y3V0Pgo+IElzc3VlcyBhbmQgc29sdXRpb25zIHdlIGNvbnNpZGVy ZWQ6Cj4gCj4gLSBXZSBjYW4ndCBjaGFuZ2UgYWxsIGV4aXN0aW5nIGRyaXZlcnMsIGFuZCBleGlz dGluZyBkcml2ZXJzIGhhdmUgc3Ryb25nCj4gICBvcGluaW9ucyBhYm91dCB3aGljaCBsb2NrcyB0 aGV5J3JlIGhvbGRpbmcgd2hpbGUgY2FsbGluZwo+ICAgZG1hX2J1Zl9hdHRhY2htZW50X21hcC91 bm1hcC4gVGhlIHNvbHV0aW9uIHRvIGF2b2lkIHRoaXMgd2FzIHRvIG1vdmUgdGhlCgpNYXliZSBh ZGQgaGVyZSAiRXhwb3J0ZXJzIGFsc28gaGF2ZSBzdHJvbmcgb3BpbmlvbnMgYWJvdXQgd2hpY2gg bG9ja3MgdGhleQpjYW4gYWNxdWlyZSBpbiB0aGVpciAtPm1hcC91bm1hcCBjYWxsYmFja3MsIGxl dmFpbmcgbm8gcm9vbSBmb3IgY2hhbmdlLiIKCj4gICBhY3R1YWwgbWFwL3VubWFwIG91dCBmcm9t IHRoaXMgY2FsbCwgaW50byB0aGUgYXR0YWNoL2RldGFjaCBjYWxsYmFja3MsCj4gICBhbmQgY2Fj aGUgdGhlIG1hcHBpbmcuIFRoaXMgd29ya3MgYmVjYXVzZSBkcml2ZXJzIGRvbid0IGNhbGwKPiAg IGF0dGFjaC9kZXRhY2ggZnJvbSBkZWVwIHdpdGhpbiB0aGVpciBjb2RlIGNhbGxjaGFpbnMgKGxp a2UgZGVlcCBpbgo+ICAgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBjYWxsZWQgZnJvbSBjcy9leGVj YnVmIGlvY3RsKSwgYnV0IGRpcmVjdGx5IGZyb20KPiAgIHRoZSBmZDJoYW5kbGUgaW1wbGVtZW50 YXRpb24uCj4gCj4gLSBUaGUgY2FjaGluZyBoYXMgc29tZSB0cm91YmxlcyBvbiBzb21lIHNvYyBk cml2ZXJzLCB3aGljaCBzZXQgb3RoZXIgbW9kZXMKPiAgIHRoYW4gRE1BX0JJRElSRUNUSU9OQUwu IFdlIGNhbid0IGhhdmUgMiBpbmNvbXBhdGlibGUgbWFwcGluZ3MsIGFuZCB3ZQo+ICAgY2FuJ3Qg cmUtY3JlYXRlIHRoZSBtYXBwaW5nIGF0IF9tYXAgdGltZSBkdWUgdG8gdGhlIGFib3ZlIGxvY2tp bmcgZnVuLgo+ICAgV2UgdmVyeSBjYXJlZnVseSBzdGVwIGFyb3VuZCB0aGF0IGJ5IG9ubHkgY2Fj aGluZyBhdCBhdHRhY2ggdGltZSBpZiB0aGUKPiAgIGR5bmFtaWMgbW9kZSBiZXR3ZWVuIGltcG9y dGVyL2V4cG9lcnQgbWlzbWF0Y2hlcy4KPiAKPiAtIFRoZXJlJ3MgYmVlbiBxdWl0ZSBzb21lIGRp c2N1c3Npb24gb24gZG1hLWJ1ZiBtYXBwaW5ncyB3aGljaCBuZWVkIGFjdGl2ZQo+ICAgY2FjaGUg bWFuYWdlbWVudCwgd2hpY2ggd291bGQgYWxsIGJyZWFrIGRvd24gd2hlbiBjYWNoaW5nLCBwbHVz IHdlIGRvbid0Cj4gICBoYXZlIGV4cGxpY2l0IGZsdXNoIG9wZXJhdGlvbnMgb24gdGhlIGF0dGFj aG1lbnQgc2lkZS4gVGhlIHNvbHV0aW9uIHRvCj4gICB0aGlzIHdhcyB0byBzaHJ1ZyBhbmQga2Vl cCB0aGUgY3VycmVudCBkaXNjcmVwYW5jeSBiZXR3ZWVuIHdoYXQgdGhlCj4gICBkbWEtYnVmIGRv Y3MgY2xhaW0gYW5kIHdoYXQgaW1wbGVtZW50YXRpb25zIGRvLCB3aXRoIHRoZSBob3BlIHRoYXQg dGhlCj4gICBiZWdpbi9lbmRfY3B1X2FjY2VzcyBob29rcyBhcmUgZ29vZCBlbm91Z2ggYW5kIHRo YXQgYWxsIG5lY2Vzc2FyeQo+ICAgZmx1c2hpbmcgdG8ga2VlcCBkZXZpY2UgbWFwcGluZ3MgY29u c2lzdGVudCB3aWxsIGJlIGRvbmUgdGhlcmUuCj4gPC9jdXQ+Cj4gPiAKPiA+IHYyOiBjbGVhbnVw IHNldF9uYW1lIG1lcmdlLCBpbXByb3ZlIGtlcm5lbGRvYwo+ID4gCj4gPiBTaWduZWQtb2ZmLWJ5 OiBDaHJpc3RpYW4gS8O2bmlnIDxjaHJpc3RpYW4ua29lbmlnQGFtZC5jb20+Cj4gPiAtLS0KPiA+ ICBkcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jIHwgMTAyICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKy0tLS0tCj4gPiAgaW5jbHVkZS9saW51eC9kbWEtYnVmLmggICB8ICA1NyArKysr KysrKysrKysrKysrKysrLS0KPiA+ICAyIGZpbGVzIGNoYW5nZWQsIDE0MyBpbnNlcnRpb25zKCsp LCAxNiBkZWxldGlvbnMoLSkKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9k bWEtYnVmLmMgYi9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jCj4gPiBpbmRleCA0MzNkOTFkNzEw ZTQuLjc1M2JlODRiNWZkNiAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVm LmMKPiA+ICsrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMKPiA+IEBAIC00NSwxMCArNDUs MTAgQEAgc3RhdGljIGNoYXIgKmRtYWJ1ZmZzX2RuYW1lKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwg Y2hhciAqYnVmZmVyLCBpbnQgYnVmbGVuKQo+ID4gIAlzaXplX3QgcmV0ID0gMDsKPiA+ICAKPiA+ ICAJZG1hYnVmID0gZGVudHJ5LT5kX2ZzZGF0YTsKPiA+IC0JbXV0ZXhfbG9jaygmZG1hYnVmLT5s b2NrKTsKPiA+ICsJZG1hX3Jlc3ZfbG9jayhkbWFidWYtPnJlc3YsIE5VTEwpOwo+ID4gIAlpZiAo ZG1hYnVmLT5uYW1lKQo+ID4gIAkJcmV0ID0gc3RybGNweShuYW1lLCBkbWFidWYtPm5hbWUsIERN QV9CVUZfTkFNRV9MRU4pOwo+ID4gLQltdXRleF91bmxvY2soJmRtYWJ1Zi0+bG9jayk7Cj4gPiAr CWRtYV9yZXN2X3VubG9jayhkbWFidWYtPnJlc3YpOwo+ID4gIAo+ID4gIAlyZXR1cm4gZHluYW1p Y19kbmFtZShkZW50cnksIGJ1ZmZlciwgYnVmbGVuLCAiLyVzOiVzIiwKPiA+ICAJCQkgICAgIGRl bnRyeS0+ZF9uYW1lLm5hbWUsIHJldCA+IDAgPyBuYW1lIDogIiIpOwo+ID4gQEAgLTMzNCw3ICsz MzQsNyBAQCBzdGF0aWMgbG9uZyBkbWFfYnVmX3NldF9uYW1lKHN0cnVjdCBkbWFfYnVmICpkbWFi dWYsIGNvbnN0IGNoYXIgX191c2VyICpidWYpCj4gPiAgCWlmIChJU19FUlIobmFtZSkpCj4gPiAg CQlyZXR1cm4gUFRSX0VSUihuYW1lKTsKPiA+ICAKPiA+IC0JbXV0ZXhfbG9jaygmZG1hYnVmLT5s b2NrKTsKPiA+ICsJZG1hX3Jlc3ZfbG9jayhkbWFidWYtPnJlc3YsIE5VTEwpOwo+ID4gIAlpZiAo IWxpc3RfZW1wdHkoJmRtYWJ1Zi0+YXR0YWNobWVudHMpKSB7Cj4gPiAgCQlyZXQgPSAtRUJVU1k7 Cj4gPiAgCQlrZnJlZShuYW1lKTsKPiA+IEBAIC0zNDQsNyArMzQ0LDcgQEAgc3RhdGljIGxvbmcg ZG1hX2J1Zl9zZXRfbmFtZShzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBjb25zdCBjaGFyIF9fdXNl ciAqYnVmKQo+ID4gIAlkbWFidWYtPm5hbWUgPSBuYW1lOwo+ID4gIAo+ID4gIG91dF91bmxvY2s6 Cj4gPiAtCW11dGV4X3VubG9jaygmZG1hYnVmLT5sb2NrKTsKPiA+ICsJZG1hX3Jlc3ZfdW5sb2Nr KGRtYWJ1Zi0+cmVzdik7Cj4gPiAgCXJldHVybiByZXQ7Cj4gPiAgfQo+ID4gIAo+ID4gQEAgLTQw MywxMCArNDAzLDEwIEBAIHN0YXRpYyB2b2lkIGRtYV9idWZfc2hvd19mZGluZm8oc3RydWN0IHNl cV9maWxlICptLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKPiA+ICAJLyogRG9uJ3QgY291bnQgdGhlIHRl bXBvcmFyeSByZWZlcmVuY2UgdGFrZW4gaW5zaWRlIHByb2NmcyBzZXFfc2hvdyAqLwo+ID4gIAlz ZXFfcHJpbnRmKG0sICJjb3VudDpcdCVsZFxuIiwgZmlsZV9jb3VudChkbWFidWYtPmZpbGUpIC0g MSk7Cj4gPiAgCXNlcV9wcmludGYobSwgImV4cF9uYW1lOlx0JXNcbiIsIGRtYWJ1Zi0+ZXhwX25h bWUpOwo+ID4gLQltdXRleF9sb2NrKCZkbWFidWYtPmxvY2spOwo+ID4gKwlkbWFfcmVzdl9sb2Nr KGRtYWJ1Zi0+cmVzdiwgTlVMTCk7Cj4gPiAgCWlmIChkbWFidWYtPm5hbWUpCj4gPiAgCQlzZXFf cHJpbnRmKG0sICJuYW1lOlx0JXNcbiIsIGRtYWJ1Zi0+bmFtZSk7Cj4gPiAtCW11dGV4X3VubG9j aygmZG1hYnVmLT5sb2NrKTsKPiA+ICsJZG1hX3Jlc3ZfdW5sb2NrKGRtYWJ1Zi0+cmVzdik7Cj4g PiAgfQo+ID4gIAo+ID4gIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRtYV9i dWZfZm9wcyA9IHsKPiA+IEBAIC01MjUsNiArNTI1LDEwIEBAIHN0cnVjdCBkbWFfYnVmICpkbWFf YnVmX2V4cG9ydChjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9leHBvcnRfaW5mbyAqZXhwX2luZm8pCj4g PiAgCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPiA+ICAJfQo+ID4gIAo+ID4gKwlpZiAoV0FS Tl9PTihleHBfaW5mby0+b3BzLT5jYWNoZV9zZ3RfbWFwcGluZyAmJgo+ID4gKwkJICAgIGV4cF9p bmZvLT5vcHMtPmR5bmFtaWNfbWFwcGluZykpCj4gPiArCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFM KTsKPiA+ICsKPiA+ICAJaWYgKCF0cnlfbW9kdWxlX2dldChleHBfaW5mby0+b3duZXIpKQo+ID4g IAkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7Cj4gPiAgCj4gPiBAQCAtNjQ1LDEwICs2NDksMTEg QEAgdm9pZCBkbWFfYnVmX3B1dChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKQo+ID4gIEVYUE9SVF9T WU1CT0xfR1BMKGRtYV9idWZfcHV0KTsKPiA+ICAKPiA+ICAvKioKPiA+IC0gKiBkbWFfYnVmX2F0 dGFjaCAtIEFkZCB0aGUgZGV2aWNlIHRvIGRtYV9idWYncyBhdHRhY2htZW50cyBsaXN0OyBvcHRp b25hbGx5LAo+ID4gKyAqIGRtYV9idWZfZHluYW1pY19hdHRhY2ggLSBBZGQgdGhlIGRldmljZSB0 byBkbWFfYnVmJ3MgYXR0YWNobWVudHMgbGlzdDsgb3B0aW9uYWxseSwKPiA+ICAgKiBjYWxscyBh dHRhY2goKSBvZiBkbWFfYnVmX29wcyB0byBhbGxvdyBkZXZpY2Utc3BlY2lmaWMgYXR0YWNoIGZ1 bmN0aW9uYWxpdHkKPiA+IC0gKiBAZG1hYnVmOglbaW5dCWJ1ZmZlciB0byBhdHRhY2ggZGV2aWNl IHRvLgo+ID4gLSAqIEBkZXY6CVtpbl0JZGV2aWNlIHRvIGJlIGF0dGFjaGVkLgo+ID4gKyAqIEBk bWFidWY6CQlbaW5dCWJ1ZmZlciB0byBhdHRhY2ggZGV2aWNlIHRvLgo+ID4gKyAqIEBkZXY6CQlb aW5dCWRldmljZSB0byBiZSBhdHRhY2hlZC4KPiA+ICsgKiBAZHluYW1pY19tYXBwaW5nOglbaW5d CWNhbGxpbmcgY29udmVudGlvbiBmb3IgbWFwL3VubWFwCj4gPiAgICoKPiA+ICAgKiBSZXR1cm5z IHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgcG9pbnRlciBmb3IgdGhpcyBhdHRhY2htZW50LiBB dHRhY2htZW50cwo+ID4gICAqIG11c3QgYmUgY2xlYW5lZCB1cCBieSBjYWxsaW5nIGRtYV9idWZf ZGV0YWNoKCkuCj4gPiBAQCAtNjYyLDggKzY2Nyw5IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGRtYV9i dWZfcHV0KTsKPiA+ICAgKiBhY2Nlc3NpYmxlIHRvIEBkZXYsIGFuZCBjYW5ub3QgYmUgbW92ZWQg dG8gYSBtb3JlIHN1aXRhYmxlIHBsYWNlLiBUaGlzIGlzCj4gPiAgICogaW5kaWNhdGVkIHdpdGgg dGhlIGVycm9yIGNvZGUgLUVCVVNZLgo+ID4gICAqLwo+ID4gLXN0cnVjdCBkbWFfYnVmX2F0dGFj aG1lbnQgKmRtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCj4gPiAtCQkJCQkg IHN0cnVjdCBkZXZpY2UgKmRldikKPiA+ICtzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICoKPiA+ ICtkbWFfYnVmX2R5bmFtaWNfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIHN0cnVjdCBk ZXZpY2UgKmRldiwKPiA+ICsJCSAgICAgICBib29sIGR5bmFtaWNfbWFwcGluZykKPiA+ICB7Cj4g PiAgCXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaDsKPiA+ICAJaW50IHJldDsKPiA+ IEBAIC02NzcsNiArNjgzLDcgQEAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqZG1hX2J1Zl9h dHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKPiA+ICAKPiA+ICAJYXR0YWNoLT5kZXYgPSBk ZXY7Cj4gPiAgCWF0dGFjaC0+ZG1hYnVmID0gZG1hYnVmOwo+ID4gKwlhdHRhY2gtPmR5bmFtaWNf bWFwcGluZyA9IGR5bmFtaWNfbWFwcGluZzsKPiA+ICAKPiA+ICAJbXV0ZXhfbG9jaygmZG1hYnVm LT5sb2NrKTsKPiA+ICAKPiA+IEBAIC02ODUsMTYgKzY5Miw2NCBAQCBzdHJ1Y3QgZG1hX2J1Zl9h dHRhY2htZW50ICpkbWFfYnVmX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAo+ID4gIAkJ aWYgKHJldCkKPiA+ICAJCQlnb3RvIGVycl9hdHRhY2g7Cj4gPiAgCX0KPiA+ICsJZG1hX3Jlc3Zf bG9jayhkbWFidWYtPnJlc3YsIE5VTEwpOwo+ID4gIAlsaXN0X2FkZCgmYXR0YWNoLT5ub2RlLCAm ZG1hYnVmLT5hdHRhY2htZW50cyk7Cj4gPiArCWRtYV9yZXN2X3VubG9jayhkbWFidWYtPnJlc3Yp Owo+ID4gIAo+ID4gIAltdXRleF91bmxvY2soJmRtYWJ1Zi0+bG9jayk7Cj4gPiAgCj4gPiArCS8q IFdoZW4gZWl0aGVyIHRoZSBpbXBvcnRlciBvciB0aGUgZXhwb3J0ZXIgY2FuJ3QgaGFuZGxlIGR5 bmFtaWMKPiA+ICsJICogbWFwcGluZ3Mgd2UgY2FjaGUgdGhlIG1hcHBpbmcgaGVyZSB0byBhdm9p ZCBpc3N1ZXMgd2l0aCB0aGUKPiA+ICsJICogcmVzZXJ2YXRpb24gb2JqZWN0IGxvY2suCj4gPiAr CSAqLwo+ID4gKwlpZiAoZG1hX2J1Zl9hdHRhY2htZW50X2lzX2R5bmFtaWMoYXR0YWNoKSAhPQo+ ID4gKwkgICAgZG1hX2J1Zl9pc19keW5hbWljKGRtYWJ1ZikpIHsKPiA+ICsJCXN0cnVjdCBzZ190 YWJsZSAqc2d0Owo+ID4gKwo+ID4gKwkJaWYgKGRtYV9idWZfaXNfZHluYW1pYyhhdHRhY2gtPmRt YWJ1ZikpCj4gPiArCQkJZG1hX3Jlc3ZfbG9jayhhdHRhY2gtPmRtYWJ1Zi0+cmVzdiwgTlVMTCk7 Cj4gPiArCj4gPiArCQlzZ3QgPSBkbWFidWYtPm9wcy0+bWFwX2RtYV9idWYoYXR0YWNoLCBETUFf QklESVJFQ1RJT05BTCk7Cj4gPiArCQlpZiAoIXNndCkKPiA+ICsJCQlzZ3QgPSBFUlJfUFRSKC1F Tk9NRU0pOwo+ID4gKwkJaWYgKElTX0VSUihzZ3QpKSB7Cj4gPiArCQkJcmV0ID0gUFRSX0VSUihz Z3QpOwo+ID4gKwkJCWdvdG8gZXJyX3VubG9jazsKPiA+ICsJCX0KPiA+ICsJCWlmIChkbWFfYnVm X2lzX2R5bmFtaWMoYXR0YWNoLT5kbWFidWYpKQo+ID4gKwkJCWRtYV9yZXN2X3VubG9jayhhdHRh Y2gtPmRtYWJ1Zi0+cmVzdik7Cj4gPiArCQlhdHRhY2gtPnNndCA9IHNndDsKPiA+ICsJCWF0dGFj aC0+ZGlyID0gRE1BX0JJRElSRUNUSU9OQUw7Cj4gPiArCX0KPiA+ICsKPiA+ICAJcmV0dXJuIGF0 dGFjaDsKPiA+ICAKPiA+ICBlcnJfYXR0YWNoOgo+ID4gIAlrZnJlZShhdHRhY2gpOwo+ID4gIAlt dXRleF91bmxvY2soJmRtYWJ1Zi0+bG9jayk7Cj4gPiAgCXJldHVybiBFUlJfUFRSKHJldCk7Cj4g PiArCj4gPiArZXJyX3VubG9jazoKPiA+ICsJaWYgKGRtYV9idWZfaXNfZHluYW1pYyhhdHRhY2gt PmRtYWJ1ZikpCj4gPiArCQlkbWFfcmVzdl91bmxvY2soYXR0YWNoLT5kbWFidWYtPnJlc3YpOwo+ ID4gKwo+ID4gKwlkbWFfYnVmX2RldGFjaChkbWFidWYsIGF0dGFjaCk7Cj4gPiArCXJldHVybiBF UlJfUFRSKHJldCk7Cj4gPiArfQo+ID4gK0VYUE9SVF9TWU1CT0xfR1BMKGRtYV9idWZfZHluYW1p Y19hdHRhY2gpOwo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGRtYV9idWZfYXR0YWNoIC0gV3JhcHBl ciBmb3IgZG1hX2J1Zl9keW5hbWljX2F0dGFjaAo+ID4gKyAqIEBkbWFidWY6CVtpbl0JYnVmZmVy IHRvIGF0dGFjaCBkZXZpY2UgdG8uCj4gPiArICogQGRldjoJW2luXQlkZXZpY2UgdG8gYmUgYXR0 YWNoZWQuCj4gPiArICoKPiA+ICsgKiBXcmFwcGVyIHRvIGNhbGwgZG1hX2J1Zl9keW5hbWljX2F0 dGFjaCgpIGZvciBkcml2ZXJzIHdoaWNoIHN0aWxsIHVzZSBhIHN0YXRpYwo+ID4gKyAqIG1hcHBp bmcuCj4gPiArICovCj4gPiArc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqZG1hX2J1Zl9hdHRh Y2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKPiA+ICsJCQkJCSAgc3RydWN0IGRldmljZSAqZGV2 KQo+ID4gK3sKPiA+ICsJcmV0dXJuIGRtYV9idWZfZHluYW1pY19hdHRhY2goZG1hYnVmLCBkZXYs IGZhbHNlKTsKPiA+ICB9Cj4gPiAgRVhQT1JUX1NZTUJPTF9HUEwoZG1hX2J1Zl9hdHRhY2gpOwo+ ID4gIAo+ID4gQEAgLTcxMSwxMSArNzY2LDIwIEBAIHZvaWQgZG1hX2J1Zl9kZXRhY2goc3RydWN0 IGRtYV9idWYgKmRtYWJ1Ziwgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKQo+ID4g IAlpZiAoV0FSTl9PTighZG1hYnVmIHx8ICFhdHRhY2gpKQo+ID4gIAkJcmV0dXJuOwo+ID4gIAo+ ID4gLQlpZiAoYXR0YWNoLT5zZ3QpCj4gPiArCWlmIChhdHRhY2gtPnNndCkgewo+ID4gKwkJaWYg KGRtYV9idWZfaXNfZHluYW1pYyhhdHRhY2gtPmRtYWJ1ZikpCj4gPiArCQkJZG1hX3Jlc3ZfbG9j ayhhdHRhY2gtPmRtYWJ1Zi0+cmVzdiwgTlVMTCk7Cj4gPiArCj4gPiAgCQlkbWFidWYtPm9wcy0+ dW5tYXBfZG1hX2J1ZihhdHRhY2gsIGF0dGFjaC0+c2d0LCBhdHRhY2gtPmRpcik7Cj4gPiAgCj4g PiArCQlpZiAoZG1hX2J1Zl9pc19keW5hbWljKGF0dGFjaC0+ZG1hYnVmKSkKPiA+ICsJCQlkbWFf cmVzdl91bmxvY2soYXR0YWNoLT5kbWFidWYtPnJlc3YpOwo+ID4gKwl9Cj4gPiArCj4gPiAgCW11 dGV4X2xvY2soJmRtYWJ1Zi0+bG9jayk7Cj4gPiArCWRtYV9yZXN2X2xvY2soZG1hYnVmLT5yZXN2 LCBOVUxMKTsKPiA+ICAJbGlzdF9kZWwoJmF0dGFjaC0+bm9kZSk7Cj4gPiArCWRtYV9yZXN2X3Vu bG9jayhkbWFidWYtPnJlc3YpOwo+ID4gIAlpZiAoZG1hYnVmLT5vcHMtPmRldGFjaCkKPiA+ICAJ CWRtYWJ1Zi0+b3BzLT5kZXRhY2goZG1hYnVmLCBhdHRhY2gpOwo+ID4gIAo+ID4gQEAgLTc0OSw2 ICs4MTMsOSBAQCBzdHJ1Y3Qgc2dfdGFibGUgKmRtYV9idWZfbWFwX2F0dGFjaG1lbnQoc3RydWN0 IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLAo+ID4gIAlpZiAoV0FSTl9PTighYXR0YWNoIHx8 ICFhdHRhY2gtPmRtYWJ1ZikpCj4gPiAgCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPiA+ICAK PiA+ICsJaWYgKGRtYV9idWZfYXR0YWNobWVudF9pc19keW5hbWljKGF0dGFjaCkpCj4gPiArCQlk bWFfcmVzdl9hc3NlcnRfaGVsZChhdHRhY2gtPmRtYWJ1Zi0+cmVzdik7Cj4gPiArCj4gPiAgCWlm IChhdHRhY2gtPnNndCkgewo+ID4gIAkJLyoKPiA+ICAJCSAqIFR3byBtYXBwaW5ncyB3aXRoIGRp ZmZlcmVudCBkaXJlY3Rpb25zIGZvciB0aGUgc2FtZQo+ID4gQEAgLTc2MSw2ICs4MjgsOSBAQCBz dHJ1Y3Qgc2dfdGFibGUgKmRtYV9idWZfbWFwX2F0dGFjaG1lbnQoc3RydWN0IGRtYV9idWZfYXR0 YWNobWVudCAqYXR0YWNoLAo+ID4gIAkJcmV0dXJuIGF0dGFjaC0+c2d0Owo+ID4gIAl9Cj4gPiAg Cj4gPiArCWlmIChkbWFfYnVmX2lzX2R5bmFtaWMoYXR0YWNoLT5kbWFidWYpKQo+ID4gKwkJZG1h X3Jlc3ZfYXNzZXJ0X2hlbGQoYXR0YWNoLT5kbWFidWYtPnJlc3YpOwo+IAo+IEFsbW9zdCB0cmlw cGVkIG1lIHVwIHVudGlsIEkgbm90aWNlZCB5b3VyIGNoZWNrIGZvciB0aGUgYnVmL2V4cG9ydGVy IGhlcmUuCj4gTmljZSBjaGVjayEKPiAKPiBNYXliZSB3ZSBjb3VsZCBkbyBhbgo+IAo+IAllbHNl Cj4gCQlsb2NrZGVwX2Fzc2VydF9ub3RfaGVsZCgpCj4gCj4gaGVyZT8gT3Blbi1jb2RlZCBvZmMg KG9yIHB1dCBpdCBpbnRvIGRybV91dGlscy5oLCBJIGRvbid0IHdhbnQgdG8gaG9sZCB1cAo+IHRo aXMgcGF0Y2ggYW55IGxvbmdlciwgdGhlbiBtb3ZlIGl0IHRvIGxvY2tkZXAuaCBsYXRlciBvbiks IHNpbmNlCj4gY3VycmVudGx5IGRvZXNuJ3QgZXhpc3QuIEp1c3QgdG8gX3JlYWxseV8gZW5mb3Jj ZSB0aGUgZG9jdW1lbnRlZCBjb250cmFjdAo+IGhlcmUuCgpPbiAybmQgdGhvdWdodCwgcHJvYmFi bHkgYmV0dGVyIHRvIGRvIHRoaXMgYXMgYSBmb2xsb3cgdXAgMiBwYXRjaCBzZXJpZXMsCmZpcnN0 IHBhdGNoIGFkZGluZyB0aGUgbG9ja2RlcF9hc3NlcnRfbm90X2hlbGQgdG8gbG9ja2RlcC5oLCAy bmQgb25lCmFkZGluZyB0aGUgZWxzZSBoZXJlIGFuZCBpbiB0aGUgdW5tYXAgZnVuY3Rpb24gYmVs b3cuIE90aGVyd2lzZSB3ZSdyZQpnb2luZyB0byBiZSBzdHVjayBpbiBhbm90aGVyIGJpa2VzaGVk IGhlcmUuCgpDaGVlcnMsIERhbmllbAoKCj4gCgo+ID4gKwo+ID4gIAlzZ190YWJsZSA9IGF0dGFj aC0+ZG1hYnVmLT5vcHMtPm1hcF9kbWFfYnVmKGF0dGFjaCwgZGlyZWN0aW9uKTsKPiA+ICAJaWYg KCFzZ190YWJsZSkKPiA+ICAJCXNnX3RhYmxlID0gRVJSX1BUUigtRU5PTUVNKTsKPiA+IEBAIC03 OTMsOSArODYzLDE1IEBAIHZvaWQgZG1hX2J1Zl91bm1hcF9hdHRhY2htZW50KHN0cnVjdCBkbWFf YnVmX2F0dGFjaG1lbnQgKmF0dGFjaCwKPiA+ICAJaWYgKFdBUk5fT04oIWF0dGFjaCB8fCAhYXR0 YWNoLT5kbWFidWYgfHwgIXNnX3RhYmxlKSkKPiA+ICAJCXJldHVybjsKPiA+ICAKPiA+ICsJaWYg KGRtYV9idWZfYXR0YWNobWVudF9pc19keW5hbWljKGF0dGFjaCkpCj4gPiArCQlkbWFfcmVzdl9h c3NlcnRfaGVsZChhdHRhY2gtPmRtYWJ1Zi0+cmVzdik7Cj4gPiArCj4gPiAgCWlmIChhdHRhY2gt PnNndCA9PSBzZ190YWJsZSkKPiA+ICAJCXJldHVybjsKPiA+ICAKPiA+ICsJaWYgKGRtYV9idWZf aXNfZHluYW1pYyhhdHRhY2gtPmRtYWJ1ZikpCj4gPiArCQlkbWFfcmVzdl9hc3NlcnRfaGVsZChh dHRhY2gtPmRtYWJ1Zi0+cmVzdik7Cj4gPiArCj4gPiAgCWF0dGFjaC0+ZG1hYnVmLT5vcHMtPnVu bWFwX2RtYV9idWYoYXR0YWNoLCBzZ190YWJsZSwgZGlyZWN0aW9uKTsKPiA+ICB9Cj4gPiAgRVhQ T1JUX1NZTUJPTF9HUEwoZG1hX2J1Zl91bm1hcF9hdHRhY2htZW50KTsKPiA+IEBAIC0xMjE5LDEw ICsxMjk1LDEyIEBAIHN0YXRpYyBpbnQgZG1hX2J1Zl9kZWJ1Z19zaG93KHN0cnVjdCBzZXFfZmls ZSAqcywgdm9pZCAqdW51c2VkKQo+ID4gIAkJc2VxX3B1dHMocywgIlx0QXR0YWNoZWQgRGV2aWNl czpcbiIpOwo+ID4gIAkJYXR0YWNoX2NvdW50ID0gMDsKPiA+ICAKPiA+ICsJCWRtYV9yZXN2X2xv Y2soYnVmX29iai0+cmVzdiwgTlVMTCk7Cj4gCj4gWW91J3ZlIHN3aXRjaGVkIGRtYWJ1Zi0+bmFt ZSB0byBiZSBwcm90ZWN0ZWQgYnkgZG1hX3Jlc3YgdG9vLCBzbyB0aGlzCj4gbmVlZHMgdG8gYmUg bW92ZWQgdXAgYWJvdmUgdGhlIHNlcV9wcmludGYgd2hpY2ggcHJpbnRzIC0+bmFtZS4KPiAKPiA+ ICAJCWxpc3RfZm9yX2VhY2hfZW50cnkoYXR0YWNoX29iaiwgJmJ1Zl9vYmotPmF0dGFjaG1lbnRz LCBub2RlKSB7Cj4gPiAgCQkJc2VxX3ByaW50ZihzLCAiXHQlc1xuIiwgZGV2X25hbWUoYXR0YWNo X29iai0+ZGV2KSk7Cj4gPiAgCQkJYXR0YWNoX2NvdW50Kys7Cj4gPiAgCQl9Cj4gPiArCQlkbWFf cmVzdl91bmxvY2soYnVmX29iai0+cmVzdik7Cj4gPiAgCj4gPiAgCQlzZXFfcHJpbnRmKHMsICJU b3RhbCAlZCBkZXZpY2VzIGF0dGFjaGVkXG5cbiIsCj4gPiAgCQkJCWF0dGFjaF9jb3VudCk7Cj4g PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtYnVmLmggYi9pbmNsdWRlL2xpbnV4L2Rt YS1idWYuaAo+ID4gaW5kZXggZWMyMTJjYjI3ZmRjLi5iY2MwZjRkMGI2NzggMTAwNjQ0Cj4gPiAt LS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaAo+ID4gKysrIGIvaW5jbHVkZS9saW51eC9kbWEt YnVmLmgKPiA+IEBAIC00Miw2ICs0MiwxOCBAQCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgewo+ID4gIAkg ICovCj4gPiAgCWJvb2wgY2FjaGVfc2d0X21hcHBpbmc7Cj4gPiAgCj4gPiArCS8qKgo+ID4gKwkg KiBAZHluYW1pY19tYXBwaW5nOgo+ID4gKwkgKgo+ID4gKwkgKiBJZiB0cnVlIHRoZSBmcmFtZXdv cmsgbWFrZXMgc3VyZSB0aGF0IHRoZSBtYXAvdW5tYXBfZG1hX2J1Zgo+ID4gKwkgKiBjYWxsYmFj a3MgYXJlIGFsd2F5cyBjYWxsZWQgd2l0aCB0aGUgZG1hX3Jlc3Ygb2JqZWN0IGxvY2tlZC4KPiA+ ICsJICoKPiA+ICsJICogSWYgZmFsc2UgdGhlIGZyYW1ld29yayBtYWtlcyB1cmUgdGhhdCB0aGUg bWFwL3VubWFwX2RtYV9idWYKPiAKPiBzL3VyZS9zdXJlLwo+IAo+ID4gKwkgKiBjYWxsYmFja3Mg YXJlIGFsd2F5cyBjYWxsZWQgd2l0aG91dCB0aGUgZG1hX3Jlc3Ygb2JqZWN0IGxvY2tlZC4KPiA+ ICsJICogTXV0dWFsIGV4Y2x1c2l2ZSB3aXRoIEBjYWNoZV9zZ3RfbWFwcGluZy4KPiA+ICsJICov Cj4gPiArCWJvb2wgZHluYW1pY19tYXBwaW5nOwo+ID4gKwo+ID4gIAkvKioKPiA+ICAJICogQGF0 dGFjaDoKPiA+ICAJICoKPiA+IEBAIC0xMDksNiArMTIxLDkgQEAgc3RydWN0IGRtYV9idWZfb3Bz IHsKPiA+ICAJICogYW55IG90aGVyIGtpbmQgb2Ygc2hhcmluZyB0aGF0IHRoZSBleHBvcnRlciBt aWdodCB3aXNoIHRvIG1ha2UKPiA+ICAJICogYXZhaWxhYmxlIHRvIGJ1ZmZlci11c2Vycy4KPiA+ ICAJICoKPiA+ICsJICogVGhpcyBpcyBhbHdheXMgY2FsbGVkIHdpdGggdGhlIGRtYWJ1Zi0+cmVz diBvYmplY3QgbG9ja2VkIHdoZW4KPiA+ICsJICogdGhlIGR5bmFtaWNfbWFwcGluZyBmbGFnIGlz IHRydWUuCj4gPiArCSAqCj4gPiAgCSAqIFJldHVybnM6Cj4gPiAgCSAqCj4gPiAgCSAqIEEgJnNn X3RhYmxlIHNjYXR0ZXIgbGlzdCBvZiBvciB0aGUgYmFja2luZyBzdG9yYWdlIG9mIHRoZSBETUEg YnVmZmVyLAo+ID4gQEAgLTI2Nyw3ICsyODIsOCBAQCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgewo+ID4g ICAqIHN0cnVjdCBkbWFfYnVmIC0gc2hhcmVkIGJ1ZmZlciBvYmplY3QKPiA+ICAgKiBAc2l6ZTog c2l6ZSBvZiB0aGUgYnVmZmVyCj4gPiAgICogQGZpbGU6IGZpbGUgcG9pbnRlciB1c2VkIGZvciBz aGFyaW5nIGJ1ZmZlcnMgYWNyb3NzLCBhbmQgZm9yIHJlZmNvdW50aW5nLgo+ID4gLSAqIEBhdHRh Y2htZW50czogbGlzdCBvZiBkbWFfYnVmX2F0dGFjaG1lbnQgdGhhdCBkZW5vdGVzIGFsbCBkZXZp Y2VzIGF0dGFjaGVkLgo+ID4gKyAqIEBhdHRhY2htZW50czogbGlzdCBvZiBkbWFfYnVmX2F0dGFj aG1lbnQgdGhhdCBkZW5vdGVzIGFsbCBkZXZpY2VzIGF0dGFjaGVkLAo+ID4gKyAqICAgICAgICAg ICAgICAgcHJvdGVjdGVkIGJ5IGRtYV9yZXN2IGxvY2suCj4gPiAgICogQG9wczogZG1hX2J1Zl9v cHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYnVmZmVyIG9iamVjdC4KPiA+ICAgKiBAbG9jazogdXNl ZCBpbnRlcm5hbGx5IHRvIHNlcmlhbGl6ZSBsaXN0IG1hbmlwdWxhdGlvbiwgYXR0YWNoL2RldGFj aCBhbmQKPiA+ICAgKiAgICAgICAgdm1hcC91bm1hcCwgYW5kIGFjY2Vzc2VzIHRvIG5hbWUKPiAK PiBAbmFtZSBpbiBkbWFfYnVmIG5lZWRzIHRvIGJlIHVwZGF0ZWQgdG8gbWVudGlvbiB0aGF0IGl0 J3MgcHJvdGVjdGVkIGJ5Cj4gZG1hX3Jlc3YgbG9jay4KPiAKPiA+IEBAIC0zMjMsMTAgKzMzOSwx MiBAQCBzdHJ1Y3QgZG1hX2J1ZiB7Cj4gPiAgICogc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAt IGhvbGRzIGRldmljZS1idWZmZXIgYXR0YWNobWVudCBkYXRhCj4gPiAgICogQGRtYWJ1ZjogYnVm ZmVyIGZvciB0aGlzIGF0dGFjaG1lbnQuCj4gPiAgICogQGRldjogZGV2aWNlIGF0dGFjaGVkIHRv IHRoZSBidWZmZXIuCj4gPiAtICogQG5vZGU6IGxpc3Qgb2YgZG1hX2J1Zl9hdHRhY2htZW50Lgo+ ID4gKyAqIEBub2RlOiBsaXN0IG9mIGRtYV9idWZfYXR0YWNobWVudCwgcHJvdGVjdGVkIGJ5IGRt YV9yZXN2IGxvY2sgb2YgdGhlIGRtYWJ1Zi4KPiA+ICAgKiBAc2d0OiBjYWNoZWQgbWFwcGluZy4K PiA+ICAgKiBAZGlyOiBkaXJlY3Rpb24gb2YgY2FjaGVkIG1hcHBpbmcuCj4gPiAgICogQHByaXY6 IGV4cG9ydGVyIHNwZWNpZmljIGF0dGFjaG1lbnQgZGF0YS4KPiA+ICsgKiBAZHluYW1pY19tYXBw aW5nOiB0cnVlIGlmIGRtYV9idWZfbWFwL3VubWFwX2F0dGFjaG1lbnQoKSBpcyBjYWxsZWQgd2l0 aCB0aGUKPiA+ICsgKiBkbWFfcmVzdiBsb2NrIGhlbGQuCj4gPiAgICoKPiA+ICAgKiBUaGlzIHN0 cnVjdHVyZSBob2xkcyB0aGUgYXR0YWNobWVudCBpbmZvcm1hdGlvbiBiZXR3ZWVuIHRoZSBkbWFf YnVmIGJ1ZmZlcgo+ID4gICAqIGFuZCBpdHMgdXNlciBkZXZpY2UocykuIFRoZSBsaXN0IGNvbnRh aW5zIG9uZSBhdHRhY2htZW50IHN0cnVjdCBwZXIgZGV2aWNlCj4gPiBAQCAtMzQzLDYgKzM2MSw3 IEBAIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgewo+ID4gIAlzdHJ1Y3QgbGlzdF9oZWFkIG5v ZGU7Cj4gPiAgCXN0cnVjdCBzZ190YWJsZSAqc2d0Owo+ID4gIAllbnVtIGRtYV9kYXRhX2RpcmVj dGlvbiBkaXI7Cj4gPiArCWJvb2wgZHluYW1pY19tYXBwaW5nOwo+ID4gIAl2b2lkICpwcml2Owo+ ID4gIH07Cj4gPiAgCj4gPiBAQCAtMzk0LDEwICs0MTMsMzkgQEAgc3RhdGljIGlubGluZSB2b2lk IGdldF9kbWFfYnVmKHN0cnVjdCBkbWFfYnVmICpkbWFidWYpCj4gPiAgCWdldF9maWxlKGRtYWJ1 Zi0+ZmlsZSk7Cj4gPiAgfQo+ID4gIAo+ID4gKy8qKgo+ID4gKyAqIGRtYV9idWZfaXNfZHluYW1p YyAtIGNoZWNrIGlmIGEgRE1BLWJ1ZiB1c2VzIGR5bmFtaWMgbWFwcGluZ3MuCj4gPiArICogQGRt YWJ1ZjogdGhlIERNQS1idWYgdG8gY2hlY2sKPiA+ICsgKgo+ID4gKyAqIFJldHVybnMgdHJ1ZSBp ZiBhIERNQS1idWYgZXhwb3J0ZXIgd2FudHMgdG8gYmUgY2FsbGVkIHdpdGggdGhlIGRtYV9yZXN2 Cj4gPiArICogbG9ja2VkLCBmYWxzZSBpZiBpdCBkb2Vzbid0IHdhbnRzIHRvIGJlIGNhbGxlZCB3 aXRoIHRoZSBsb2NrIGhlbGQuCj4gCj4gTWF5YmUgYWRkZWQgIi4uLiBmb3IgdGhlIG1hcC91bm1h cCBjYWxsYmFja3MsIC4uLiIgc2luY2Ugd2UgZG9uJ3QKPiBndWFyYW50ZWUgdG8gaG9sZCB0aGUg bG9jayBmb3IgYWxsIGNhbGxiYWNrcy4gWW91IGNsYXJpZnkgdGhpcyBhbHJlYWR5Cj4gYmVsb3cu Cj4gCj4gPiArICovCj4gPiArc3RhdGljIGlubGluZSBib29sIGRtYV9idWZfaXNfZHluYW1pYyhz dHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKQo+ID4gK3sKPiA+ICsJcmV0dXJuIGRtYWJ1Zi0+b3BzLT5k eW5hbWljX21hcHBpbmc7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGRtYV9idWZfYXR0 YWNobWVudF9pc19keW5hbWljIC0gY2hlY2sgaWYgYSBETUEtYnVmIGF0dGFjaG1lbnQgdXNlcyBk eW5hbWljCj4gPiArICogbWFwcGluc2cKPiA+ICsgKiBAYXR0YWNoOiB0aGUgRE1BLWJ1ZiBhdHRh Y2htZW50IHRvIGNoZWNrCj4gPiArICoKPiA+ICsgKiBSZXR1cm5zIHRydWUgaWYgYSBETUEtYnVm IGltcG9ydGVyIHdhbnRzIHRvIGNhbGwgdGhlIG1hcC91bm1hcCBmdW5jdGlvbnMgd2l0aAo+ID4g KyAqIHRoZSBkbWFfcmVzdiBsb2NrIGhlbGQuCj4gPiArICovCj4gPiArc3RhdGljIGlubGluZSBi b29sCj4gPiArZG1hX2J1Zl9hdHRhY2htZW50X2lzX2R5bmFtaWMoc3RydWN0IGRtYV9idWZfYXR0 YWNobWVudCAqYXR0YWNoKQo+ID4gK3sKPiA+ICsJcmV0dXJuIGF0dGFjaC0+ZHluYW1pY19tYXBw aW5nOwo+ID4gK30KPiA+ICsKPiA+ICBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICpkbWFfYnVm X2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAo+ID4gLQkJCQkJCQlzdHJ1Y3QgZGV2aWNl ICpkZXYpOwo+ID4gKwkJCQkJICBzdHJ1Y3QgZGV2aWNlICpkZXYpOwo+ID4gK3N0cnVjdCBkbWFf YnVmX2F0dGFjaG1lbnQgKgo+ID4gK2RtYV9idWZfZHluYW1pY19hdHRhY2goc3RydWN0IGRtYV9i dWYgKmRtYWJ1Ziwgc3RydWN0IGRldmljZSAqZGV2LAo+ID4gKwkJICAgICAgIGJvb2wgZHluYW1p Y19tYXBwaW5nKTsKPiA+ICB2b2lkIGRtYV9idWZfZGV0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFi dWYsCj4gPiAtCQkJCXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmRtYWJ1Zl9hdHRhY2gpOwo+ ID4gKwkJICAgIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCk7Cj4gPiAgCj4gPiAg c3RydWN0IGRtYV9idWYgKmRtYV9idWZfZXhwb3J0KGNvbnN0IHN0cnVjdCBkbWFfYnVmX2V4cG9y dF9pbmZvICpleHBfaW5mbyk7Cj4gPiAgCj4gPiBAQCAtNDA5LDYgKzQ1Nyw3IEBAIHN0cnVjdCBz Z190YWJsZSAqZG1hX2J1Zl9tYXBfYXR0YWNobWVudChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50 ICosCj4gPiAgCQkJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbik7Cj4gPiAgdm9pZCBkbWFfYnVm X3VubWFwX2F0dGFjaG1lbnQoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqLCBzdHJ1Y3Qgc2df dGFibGUgKiwKPiA+ICAJCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pOwo+ID4gK3ZvaWQgZG1h X2J1Zl9tb3ZlX25vdGlmeShzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1Zik7Cj4gPiAgaW50IGRtYV9i dWZfYmVnaW5fY3B1X2FjY2VzcyhzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZiwKPiA+ICAJCQkgICAg IGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7Cj4gPiAgaW50IGRtYV9idWZfZW5kX2NwdV9h Y2Nlc3Moc3RydWN0IGRtYV9idWYgKmRtYV9idWYsCj4gCj4gV2l0aCB0aGUgbml0cyBhbGwgYWRk cmVzc2VkOgo+IAo+IFJldmlld2VkLWJ5OiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZm d2xsLmNoPgo+IAo+ID4gLS0gCj4gPiAyLjE3LjEKPiA+IAo+IAo+IC0tIAo+IERhbmllbCBWZXR0 ZXIKPiBTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KPiBodHRwOi8vYmxvZy5m ZndsbC5jaAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBv cmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2RyaS1kZXZlbA==