From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Andrew F. Davis" Subject: Re: [RFC][PATCH 4/6 v3] dma-buf: heaps: Add CMA heap to dmabuf heapss Date: Fri, 29 Mar 2019 10:19:20 -0500 Message-ID: References: <1553818562-2516-1-git-send-email-john.stultz@linaro.org> <1553818562-2516-5-git-send-email-john.stultz@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from fllv0016.ext.ti.com (fllv0016.ext.ti.com [198.47.19.142]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4A3026E85F for ; Fri, 29 Mar 2019 15:19:43 +0000 (UTC) In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Benjamin Gaignard , John Stultz Cc: Yudongbin , Sudipto Paul , Xu YiPing , Vincent Donnefort , "Chenfeng (puck)" , ML dri-devel , Chenbo Feng , lkml , Liam Mark , Christoph Hellwig , Alistair Strachan , "Xiaqing (A)" , Pratik Patel , butao List-Id: dri-devel@lists.freedesktop.org T24gMy8yOS8xOSA5OjQ0IEFNLCBCZW5qYW1pbiBHYWlnbmFyZCB3cm90ZToKPiBMZSB2ZW4uIDI5 IG1hcnMgMjAxOSDDoCAwMToxNiwgSm9obiBTdHVsdHogPGpvaG4uc3R1bHR6QGxpbmFyby5vcmc+ IGEgw6ljcml0IDoKPj4KPj4gVGhpcyBhZGRzIGEgQ01BIGhlYXAsIHdoaWNoIGFsbG93cyB1c2Vy c3BhY2UgdG8gYWxsb2NhdGUKPj4gYSBkbWEtYnVmIG9mIGNvbnRpZ3VvdXMgbWVtb3J5IG91dCBv ZiBhIENNQSByZWdpb24uCj4+Cj4+IFRoaXMgY29kZSBpcyBhbiBldm9sdXRpb24gb2YgdGhlIEFu ZHJvaWQgSU9OIGltcGxlbWVudGF0aW9uLCBzbwo+PiB0aGFua3MgdG8gaXRzIG9yaWdpbmFsIGF1 dGhvciBhbmQgbWFpbnRhaW50ZXJzOgo+PiAgIEJlbmphbWluIEdhaWduYXJkLCBMYXVyYSBBYmJv dHQsIGFuZCBvdGhlcnMhCj4+Cj4+IENjOiBMYXVyYSBBYmJvdHQgPGxhYmJvdHRAcmVkaGF0LmNv bT4KPj4gQ2M6IEJlbmphbWluIEdhaWduYXJkIDxiZW5qYW1pbi5nYWlnbmFyZEBsaW5hcm8ub3Jn Pgo+PiBDYzogU3VtaXQgU2Vtd2FsIDxzdW1pdC5zZW13YWxAbGluYXJvLm9yZz4KPj4gQ2M6IExp YW0gTWFyayA8bG1hcmtAY29kZWF1cm9yYS5vcmc+Cj4+IENjOiBQcmF0aWsgUGF0ZWwgPHByYXRp a3BAY29kZWF1cm9yYS5vcmc+Cj4+IENjOiBCcmlhbiBTdGFya2V5IDxCcmlhbi5TdGFya2V5QGFy bS5jb20+Cj4+IENjOiBWaW5jZW50IERvbm5lZm9ydCA8VmluY2VudC5Eb25uZWZvcnRAYXJtLmNv bT4KPj4gQ2M6IFN1ZGlwdG8gUGF1bCA8U3VkaXB0by5QYXVsQGFybS5jb20+Cj4+IENjOiBBbmRy ZXcgRi4gRGF2aXMgPGFmZEB0aS5jb20+Cj4+IENjOiBYdSBZaVBpbmcgPHh1eWlwaW5nQGhpc2ls aWNvbi5jb20+Cj4+IENjOiAiQ2hlbmZlbmcgKHB1Y2spIiA8cHVjay5jaGVuQGhpc2lsaWNvbi5j b20+Cj4+IENjOiBidXRhbyA8YnV0YW9AaGlzaWxpY29uLmNvbT4KPj4gQ2M6ICJYaWFxaW5nIChB KSIgPHNhYmVybGlseS54aWFAaGlzaWxpY29uLmNvbT4KPj4gQ2M6IFl1ZG9uZ2JpbiA8eXVkb25n YmluQGhpc2lsaWNvbi5jb20+Cj4+IENjOiBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGluZnJhZGVh ZC5vcmc+Cj4+IENjOiBDaGVuYm8gRmVuZyA8ZmVuZ2NAZ29vZ2xlLmNvbT4KPj4gQ2M6IEFsaXN0 YWlyIFN0cmFjaGFuIDxhc3RyYWNoYW5AZ29vZ2xlLmNvbT4KPj4gQ2M6IGRyaS1kZXZlbEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKPj4gU2lnbmVkLW9mZi1ieTogSm9obiBTdHVsdHogPGpvaG4uc3R1 bHR6QGxpbmFyby5vcmc+Cj4+IC0tLQo+PiB2MjoKPj4gKiBTd2l0Y2ggYWxsb2NhdGUgdG8gcmV0 dXJuIGRtYWJ1ZiBmZAo+PiAqIFNpbXBsaWZ5IGluaXQgY29kZQo+PiAqIENoZWNrcGF0Y2ggZml4 dXBzCj4+IHYzOgo+PiAqIFN3aXRjaCB0byBpbmxpbmUgZnVuY3Rpb24gZm9yIHRvX2NtYV9oZWFw KCkKPj4gKiBNaW5vciBjbGVhbnVwcyBzdWdnZXN0ZWQgYnkgQnJpYW4KPj4gKiBGb2xkIGluIG5l dyByZWdpc3RyYXRpb24gc3R5bGUgZnJvbSBBbmRyZXcKPj4gKiBGb2xkZWQgaW4gY2hhbmdlcyBm cm9tIEFuZHJldyB0byB1c2Ugc2ltcGxpZmllZCBwYWdlIGxpc3QKPj4gICBmcm9tIHRoZSBoZWFw IGhlbHBlcnMKPj4gLS0tCj4+ICBkcml2ZXJzL2RtYS1idWYvaGVhcHMvS2NvbmZpZyAgICB8ICAg OCArKwo+PiAgZHJpdmVycy9kbWEtYnVmL2hlYXBzL01ha2VmaWxlICAgfCAgIDEgKwo+PiAgZHJp dmVycy9kbWEtYnVmL2hlYXBzL2NtYV9oZWFwLmMgfCAxNzAgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCj4+ICAzIGZpbGVzIGNoYW5nZWQsIDE3OSBpbnNlcnRpb25zKCsp Cj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9kbWEtYnVmL2hlYXBzL2NtYV9oZWFwLmMK Pj4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9LY29uZmlnIGIvZHJpdmVy cy9kbWEtYnVmL2hlYXBzL0tjb25maWcKPj4gaW5kZXggMjA1MDUyNy4uYTVlZWYwNiAxMDA2NDQK Pj4gLS0tIGEvZHJpdmVycy9kbWEtYnVmL2hlYXBzL0tjb25maWcKPj4gKysrIGIvZHJpdmVycy9k bWEtYnVmL2hlYXBzL0tjb25maWcKPj4gQEAgLTQsMyArNCwxMSBAQCBjb25maWcgRE1BQlVGX0hF QVBTX1NZU1RFTQo+PiAgICAgICAgIGhlbHAKPj4gICAgICAgICAgIENob29zZSB0aGlzIG9wdGlv biB0byBlbmFibGUgdGhlIHN5c3RlbSBkbWFidWYgaGVhcC4gVGhlIHN5c3RlbSBoZWFwCj4+ICAg ICAgICAgICBpcyBiYWNrZWQgYnkgcGFnZXMgZnJvbSB0aGUgYnVkZHkgYWxsb2NhdG9yLiBJZiBp biBkb3VidCwgc2F5IFkuCj4+ICsKPj4gK2NvbmZpZyBETUFCVUZfSEVBUFNfQ01BCj4+ICsgICAg ICAgYm9vbCAiRE1BLUJVRiBDTUEgSGVhcCIKPj4gKyAgICAgICBkZXBlbmRzIG9uIERNQUJVRl9I RUFQUyAmJiBETUFfQ01BCj4+ICsgICAgICAgaGVscAo+PiArICAgICAgICAgQ2hvb3NlIHRoaXMg b3B0aW9uIHRvIGVuYWJsZSBkbWEtYnVmIENNQSBoZWFwLiBUaGlzIGhlYXAgaXMgYmFja2VkCj4+ ICsgICAgICAgICBieSB0aGUgQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yIChDTUEpLiBJZiB5 b3VyIHN5c3RlbSBoYXMgdGhlc2UKPj4gKyAgICAgICAgIHJlZ2lvbnMsIHlvdSBzaG91bGQgc2F5 IFkgaGVyZS4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9NYWtlZmlsZSBi L2RyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9NYWtlZmlsZQo+PiBpbmRleCBkMTgwOGVjLi42ZTU0Y2Rl IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2RtYS1idWYvaGVhcHMvTWFrZWZpbGUKPj4gKysrIGIv ZHJpdmVycy9kbWEtYnVmL2hlYXBzL01ha2VmaWxlCj4+IEBAIC0xLDMgKzEsNCBAQAo+PiAgIyBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+PiAgb2JqLXkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKz0gaGVhcC1oZWxwZXJzLm8KPj4gIG9iai0kKENPTkZJR19ETUFC VUZfSEVBUFNfU1lTVEVNKSAgICAgICs9IHN5c3RlbV9oZWFwLm8KPj4gK29iai0kKENPTkZJR19E TUFCVUZfSEVBUFNfQ01BKSAgICAgICAgICs9IGNtYV9oZWFwLm8KPj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZG1hLWJ1Zi9oZWFwcy9jbWFfaGVhcC5jIGIvZHJpdmVycy9kbWEtYnVmL2hlYXBzL2Nt YV9oZWFwLmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMC4uZjQ0ODVj NjAKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9kcml2ZXJzL2RtYS1idWYvaGVhcHMvY21hX2hl YXAuYwo+PiBAQCAtMCwwICsxLDE3MCBAQAo+PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAKPj4gKy8qCj4+ICsgKiBETUFCVUYgQ01BIGhlYXAgZXhwb3J0ZXIKPj4gKyAqCj4+ ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTkgTGluYXJvIEx0ZC4KPj4gKyAqIEF1dGhvcjog PGJlbmphbWluLmdhaWduYXJkQGxpbmFyby5vcmc+IGZvciBTVC1Fcmljc3Nvbi4KPj4gKyAqLwo+ PiArCj4+ICsjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvZG1h LWJ1Zi5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2RtYS1oZWFwLmg+Cj4+ICsjaW5jbHVkZSA8bGlu dXgvc2xhYi5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Cj4+ICsjaW5jbHVkZSA8bGlu dXgvZXJyLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvY21hLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgv c2NhdHRlcmxpc3QuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+Cj4+ICsKPj4gKyNp bmNsdWRlICJoZWFwLWhlbHBlcnMuaCIKPj4gKwo+PiArc3RydWN0IGNtYV9oZWFwIHsKPj4gKyAg ICAgICBzdHJ1Y3QgZG1hX2hlYXAgKmhlYXA7Cj4+ICsgICAgICAgc3RydWN0IGNtYSAqY21hOwo+ PiArfTsKPj4gKwo+PiArc3RhdGljIHZvaWQgY21hX2hlYXBfZnJlZShzdHJ1Y3QgaGVhcF9oZWxw ZXJfYnVmZmVyICpidWZmZXIpCj4+ICt7Cj4+ICsgICAgICAgc3RydWN0IGNtYV9oZWFwICpjbWFf aGVhcCA9IGRtYV9oZWFwX2dldF9kYXRhKGJ1ZmZlci0+aGVhcF9idWZmZXIuaGVhcCk7Cj4+ICsg ICAgICAgc3RydWN0IHBhZ2UgKnBhZ2VzID0gYnVmZmVyLT5wcml2X3ZpcnQ7Cj4+ICsgICAgICAg dW5zaWduZWQgbG9uZyBucl9wYWdlczsKPj4gKwo+PiArICAgICAgIG5yX3BhZ2VzID0gYnVmZmVy LT5oZWFwX2J1ZmZlci5zaXplID4+IFBBR0VfU0hJRlQ7Cj4+ICsKPj4gKyAgICAgICAvKiBmcmVl IHBhZ2UgbGlzdCAqLwo+PiArICAgICAgIGtmcmVlKGJ1ZmZlci0+cGFnZXMpOwo+PiArICAgICAg IC8qIHJlbGVhc2UgbWVtb3J5ICovCj4+ICsgICAgICAgY21hX3JlbGVhc2UoY21hX2hlYXAtPmNt YSwgcGFnZXMsIG5yX3BhZ2VzKTsKPj4gKyAgICAgICBrZnJlZShidWZmZXIpOwo+PiArfQo+PiAr Cj4+ICsvKiBkbWFidWYgaGVhcCBDTUEgb3BlcmF0aW9ucyBmdW5jdGlvbnMgKi8KPj4gK3N0YXRp YyBpbnQgY21hX2hlYXBfYWxsb2NhdGUoc3RydWN0IGRtYV9oZWFwICpoZWFwLAo+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuLAo+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCj4+ICt7Cj4+ICsgICAg ICAgc3RydWN0IGNtYV9oZWFwICpjbWFfaGVhcCA9IGRtYV9oZWFwX2dldF9kYXRhKGhlYXApOwo+ PiArICAgICAgIHN0cnVjdCBoZWFwX2hlbHBlcl9idWZmZXIgKmhlbHBlcl9idWZmZXI7Cj4+ICsg ICAgICAgc3RydWN0IHBhZ2UgKnBhZ2VzOwo+PiArICAgICAgIHNpemVfdCBzaXplID0gUEFHRV9B TElHTihsZW4pOwo+PiArICAgICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBzaXplID4+IFBB R0VfU0hJRlQ7Cj4+ICsgICAgICAgdW5zaWduZWQgbG9uZyBhbGlnbiA9IGdldF9vcmRlcihzaXpl KTsKPj4gKyAgICAgICBERUZJTkVfRE1BX0JVRl9FWFBPUlRfSU5GTyhleHBfaW5mbyk7Cj4+ICsg ICAgICAgc3RydWN0IGRtYV9idWYgKmRtYWJ1ZjsKPj4gKyAgICAgICBpbnQgcmV0ID0gLUVOT01F TTsKPj4gKyAgICAgICBwZ29mZl90IHBnOwo+PiArCj4+ICsgICAgICAgaWYgKGFsaWduID4gQ09O RklHX0NNQV9BTElHTk1FTlQpCj4+ICsgICAgICAgICAgICAgICBhbGlnbiA9IENPTkZJR19DTUFf QUxJR05NRU5UOwo+PiArCj4+ICsgICAgICAgaGVscGVyX2J1ZmZlciA9IGt6YWxsb2Moc2l6ZW9m KCpoZWxwZXJfYnVmZmVyKSwgR0ZQX0tFUk5FTCk7Cj4+ICsgICAgICAgaWYgKCFoZWxwZXJfYnVm ZmVyKQo+PiArICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4+ICsKPj4gKyAgICAgICBJ TklUX0hFQVBfSEVMUEVSX0JVRkZFUihoZWxwZXJfYnVmZmVyLCBjbWFfaGVhcF9mcmVlKTsKPj4g KyAgICAgICBoZWxwZXJfYnVmZmVyLT5oZWFwX2J1ZmZlci5mbGFncyA9IGZsYWdzOwo+PiArICAg ICAgIGhlbHBlcl9idWZmZXItPmhlYXBfYnVmZmVyLmhlYXAgPSBoZWFwOwo+PiArICAgICAgIGhl bHBlcl9idWZmZXItPmhlYXBfYnVmZmVyLnNpemUgPSBsZW47Cj4+ICsKPj4gKyAgICAgICBwYWdl cyA9IGNtYV9hbGxvYyhjbWFfaGVhcC0+Y21hLCBucl9wYWdlcywgYWxpZ24sIGZhbHNlKTsKPj4g KyAgICAgICBpZiAoIXBhZ2VzKQo+PiArICAgICAgICAgICAgICAgZ290byBmcmVlX2J1ZjsKPj4g Kwo+PiArICAgICAgIGlmIChQYWdlSGlnaE1lbShwYWdlcykpIHsKPj4gKyAgICAgICAgICAgICAg IHVuc2lnbmVkIGxvbmcgbnJfY2xlYXJfcGFnZXMgPSBucl9wYWdlczsKPj4gKyAgICAgICAgICAg ICAgIHN0cnVjdCBwYWdlICpwYWdlID0gcGFnZXM7Cj4+ICsKPj4gKyAgICAgICAgICAgICAgIHdo aWxlIChucl9jbGVhcl9wYWdlcyA+IDApIHsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgdm9p ZCAqdmFkZHIgPSBrbWFwX2F0b21pYyhwYWdlKTsKPj4gKwo+PiArICAgICAgICAgICAgICAgICAg ICAgICBtZW1zZXQodmFkZHIsIDAsIFBBR0VfU0laRSk7Cj4+ICsgICAgICAgICAgICAgICAgICAg ICAgIGt1bm1hcF9hdG9taWModmFkZHIpOwo+PiArICAgICAgICAgICAgICAgICAgICAgICBwYWdl Kys7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgIG5yX2NsZWFyX3BhZ2VzLS07Cj4+ICsgICAg ICAgICAgICAgICB9Cj4+ICsgICAgICAgfSBlbHNlIHsKPj4gKyAgICAgICAgICAgICAgIG1lbXNl dChwYWdlX2FkZHJlc3MocGFnZXMpLCAwLCBzaXplKTsKPj4gKyAgICAgICB9Cj4+ICsKPj4gKyAg ICAgICBoZWxwZXJfYnVmZmVyLT5wYWdlY291bnQgPSBucl9wYWdlczsKPj4gKyAgICAgICBoZWxw ZXJfYnVmZmVyLT5wYWdlcyA9IGttYWxsb2NfYXJyYXkoaGVscGVyX2J1ZmZlci0+cGFnZWNvdW50 LAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yo KmhlbHBlcl9idWZmZXItPnBhZ2VzKSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgR0ZQX0tFUk5FTCk7Cj4+ICsgICAgICAgaWYgKCFoZWxwZXJfYnVmZmVy LT5wYWdlcykgewo+PiArICAgICAgICAgICAgICAgcmV0ID0gLUVOT01FTTsKPj4gKyAgICAgICAg ICAgICAgIGdvdG8gZnJlZV9jbWE7Cj4+ICsgICAgICAgfQo+PiArCj4+ICsgICAgICAgZm9yIChw ZyA9IDA7IHBnIDwgaGVscGVyX2J1ZmZlci0+cGFnZWNvdW50OyBwZysrKSB7Cj4+ICsgICAgICAg ICAgICAgICBoZWxwZXJfYnVmZmVyLT5wYWdlc1twZ10gPSAmcGFnZXNbcGddOwo+PiArICAgICAg ICAgICAgICAgaWYgKCFoZWxwZXJfYnVmZmVyLT5wYWdlc1twZ10pCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgIGdvdG8gZnJlZV9wYWdlczsKPj4gKyAgICAgICB9Cj4+ICsKPj4gKyAgICAgICAv KiBjcmVhdGUgdGhlIGRtYWJ1ZiAqLwo+PiArICAgICAgIGV4cF9pbmZvLm9wcyA9ICZoZWFwX2hl bHBlcl9vcHM7Cj4+ICsgICAgICAgZXhwX2luZm8uc2l6ZSA9IGxlbjsKPj4gKyAgICAgICBleHBf aW5mby5mbGFncyA9IE9fUkRXUjsKPiAKPiBJIHRoaW5rIHRoYXQgdGhlIGZsYWdzIHNob3VsZCBi ZSBwcm92aWRlZCB3aGVuIHJlcXVlc3RpbmcgdGhlIGFsbG9jYXRpb24KPiBsaWtlIGl0IGlzIGRv bmUgaW4gRFJNIG9yIFY0TDIuCj4gRm9yIG1lIERNQV9IRUFQX1ZBTElEX0ZMQUdTID0gKE9fQ0xP RVhFQyB8IE9fQUNDTU9ERSkuCj4gCgoKU28gc29tZXRoaW5nIGxpa2UgZG9uZSBpbiB1ZG1hYnVm PwoKaHR0cHM6Ly9lbGl4aXIuYm9vdGxpbi5jb20vbGludXgvdjUuMS1yYzEvc291cmNlL2luY2x1 ZGUvdWFwaS9saW51eC91ZG1hYnVmLmgjTDgKCkkgdGhpbmsgdGhhdCBjYW4gYmUgYXJyYW5nZWQu CgpKb2huLAoKVGhpcyBtaWdodCBiZSBhIGdvb2QgcmVhc29uIHRvIG1vdmUgdGhlIGRtYV9idWZf ZmQoKSBjYWxsIGJlbG93IG91dCBvZgp0aGUgaGVhcCBhbmQgYmFjayBpbnRvIHRoZSBjb3JlLiBU aGF0IHdheSB0aGUgZmlsZSBleHBvcnRpbmcgZmxhZ3MgY2FuCmJlIGNvbW1vbiBhbmQgY29yZSBo YW5kbGVkLiBJIGRvbid0IHRoaW5rIGl0IHdvdWxkIGNvbXBsaWNhdGUgdGhlIGVycm9yCmhhbmRs aW5nIGFueSBhcyB3ZSBvbmx5IG5lZWQgdG8gZG1hX2J1Zl9wdXQoZG1hYnVmKSBpbiB0aGUgY29y ZSBvbgpmYWlsdXJlIGFuZCB0aGUgaGVhcCBzcGVjaWZpYyBjbGVhbnVwIHdpbGwgaGFwcGVuIGZv ciB1cy4KCkFuZHJldwoKCj4gQmVuamFtaW4KPiAKPiBCZW5qYW1pbgo+IAo+PiArICAgICAgIGV4 cF9pbmZvLnByaXYgPSAmaGVscGVyX2J1ZmZlci0+aGVhcF9idWZmZXI7Cj4+ICsgICAgICAgZG1h YnVmID0gZG1hX2J1Zl9leHBvcnQoJmV4cF9pbmZvKTsKPj4gKyAgICAgICBpZiAoSVNfRVJSKGRt YWJ1ZikpIHsKPj4gKyAgICAgICAgICAgICAgIHJldCA9IFBUUl9FUlIoZG1hYnVmKTsKPj4gKyAg ICAgICAgICAgICAgIGdvdG8gZnJlZV9wYWdlczsKPj4gKyAgICAgICB9Cj4+ICsKPj4gKyAgICAg ICBoZWxwZXJfYnVmZmVyLT5oZWFwX2J1ZmZlci5kbWFidWYgPSBkbWFidWY7Cj4+ICsgICAgICAg aGVscGVyX2J1ZmZlci0+cHJpdl92aXJ0ID0gcGFnZXM7Cj4+ICsKPj4gKyAgICAgICByZXQgPSBk bWFfYnVmX2ZkKGRtYWJ1ZiwgT19DTE9FWEVDKTsKPj4gKyAgICAgICBpZiAocmV0IDwgMCkgewo+ PiArICAgICAgICAgICAgICAgZG1hX2J1Zl9wdXQoZG1hYnVmKTsKPj4gKyAgICAgICAgICAgICAg IC8qIGp1c3QgcmV0dXJuLCBhcyBwdXQgd2lsbCBjYWxsIHJlbGVhc2UgYW5kIHRoYXQgd2lsbCBm cmVlICovCj4+ICsgICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+PiArICAgICAgIH0KPj4gKwo+ PiArICAgICAgIHJldHVybiByZXQ7Cj4+ICsKPj4gK2ZyZWVfcGFnZXM6Cj4+ICsgICAgICAga2Zy ZWUoaGVscGVyX2J1ZmZlci0+cGFnZXMpOwo+PiArZnJlZV9jbWE6Cj4+ICsgICAgICAgY21hX3Jl bGVhc2UoY21hX2hlYXAtPmNtYSwgcGFnZXMsIG5yX3BhZ2VzKTsKPj4gK2ZyZWVfYnVmOgo+PiAr ICAgICAgIGtmcmVlKGhlbHBlcl9idWZmZXIpOwo+PiArICAgICAgIHJldHVybiByZXQ7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgZG1hX2hlYXBfb3BzIGNtYV9oZWFwX29wcyA9IHsKPj4g KyAgICAgICAuYWxsb2NhdGUgPSBjbWFfaGVhcF9hbGxvY2F0ZSwKPj4gK307Cj4+ICsKPj4gK3N0 YXRpYyBpbnQgX19hZGRfY21hX2hlYXAoc3RydWN0IGNtYSAqY21hLCB2b2lkICpkYXRhKQo+PiAr ewo+PiArICAgICAgIHN0cnVjdCBjbWFfaGVhcCAqY21hX2hlYXA7Cj4+ICsgICAgICAgc3RydWN0 IGRtYV9oZWFwX2V4cG9ydF9pbmZvIGV4cF9pbmZvOwo+PiArCj4+ICsgICAgICAgY21hX2hlYXAg PSBremFsbG9jKHNpemVvZigqY21hX2hlYXApLCBHRlBfS0VSTkVMKTsKPj4gKyAgICAgICBpZiAo IWNtYV9oZWFwKQo+PiArICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4+ICsgICAgICAg Y21hX2hlYXAtPmNtYSA9IGNtYTsKPj4gKwo+PiArICAgICAgIGV4cF9pbmZvLm5hbWUgPSBjbWFf Z2V0X25hbWUoY21hKTsKPj4gKyAgICAgICBleHBfaW5mby5vcHMgPSAmY21hX2hlYXBfb3BzOwo+ PiArICAgICAgIGV4cF9pbmZvLnByaXYgPSBjbWFfaGVhcDsKPj4gKwo+PiArICAgICAgIGNtYV9o ZWFwLT5oZWFwID0gZG1hX2hlYXBfYWRkKCZleHBfaW5mbyk7Cj4+ICsgICAgICAgaWYgKElTX0VS UihjbWFfaGVhcC0+aGVhcCkpIHsKPj4gKyAgICAgICAgICAgICAgIGludCByZXQgPSBQVFJfRVJS KGNtYV9oZWFwLT5oZWFwKTsKPj4gKwo+PiArICAgICAgICAgICAgICAga2ZyZWUoY21hX2hlYXAp Owo+PiArICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPj4gKyAgICAgICB9Cj4+ICsKPj4gKyAg ICAgICByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBhZGRfY21hX2hlYXBzKHZv aWQpCj4+ICt7Cj4+ICsgICAgICAgY21hX2Zvcl9lYWNoX2FyZWEoX19hZGRfY21hX2hlYXAsIE5V TEwpOwo+PiArICAgICAgIHJldHVybiAwOwo+PiArfQo+PiArZGV2aWNlX2luaXRjYWxsKGFkZF9j bWFfaGVhcHMpOwo+PiAtLQo+PiAyLjcuNAo+PgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9kcmktZGV2ZWw=