From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 93CDEFD8FC9 for ; Thu, 26 Feb 2026 15:22:27 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id DA28F10E969; Thu, 26 Feb 2026 15:22:26 +0000 (UTC) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by gabe.freedesktop.org (Postfix) with ESMTP id 2208B10E969 for ; Thu, 26 Feb 2026 15:22:26 +0000 (UTC) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 5E1091516; Thu, 26 Feb 2026 07:22:19 -0800 (PST) Received: from [10.1.196.85] (e121345-lin.cambridge.arm.com [10.1.196.85]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id C62553F62B; Thu, 26 Feb 2026 07:22:21 -0800 (PST) Message-ID: Date: Thu, 26 Feb 2026 15:22:05 +0000 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] dma-buf: heaps: Add Coherent heap to dmabuf heaps To: Albert Esteve , Sumit Semwal , Benjamin Gaignard , Brian Starkey , John Stultz , "T.J. Mercier" , =?UTF-8?Q?Christian_K=C3=B6nig?= , Marek Szyprowski Cc: linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, dri-devel@lists.freedesktop.org, linaro-mm-sig@lists.linaro.org, iommu@lists.linux.dev, echanude@redhat.com, mripard@redhat.com References: <20260224-b4-dmabuf-heap-coherent-rmem-v1-1-dffef43298ac@redhat.com> From: Robin Murphy Content-Language: en-GB In-Reply-To: <20260224-b4-dmabuf-heap-coherent-rmem-v1-1-dffef43298ac@redhat.com> Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: base64 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" T24gMjQvMDIvMjAyNiA3OjU3IGFtLCBBbGJlcnQgRXN0ZXZlIHdyb3RlOgo+IEFkZCBhIGRtYS1i dWYgaGVhcCBmb3IgRFQgY29oZXJlbnQgcmVzZXJ2ZWQtbWVtb3J5Cj4gKGkuZS4sICdzaGFyZWQt ZG1hLXBvb2wnIHdpdGhvdXQgJ3JldXNhYmxlJyBwcm9wZXJ0eSksCj4gZXhwb3Npbmcgb25lIGhl YXAgcGVyIHJlZ2lvbiBmb3IgdXNlcnNwYWNlIGJ1ZmZlcnMuCgpEZXNwaXRlIHRoZSAic2hhcmVk IiBuYW1pbmcgb2YgdGhlIGNvbXBhdGlibGUsIHRoZXNlIGtpbmRzIG9mIApyZXNlcnZhdGlvbnMg YXJlIG9mdGVuIGZvciBoaWdobHkgZGV2aWNlLXNwZWNpZmljIHB1cnBvc2VzLCBhbmQgCnNvbWV0 aW1lcyBtYXkgbm90IGV2ZW4gYmUgYWNjZXNzaWJsZSB0byBvdGhlciBkZXZpY2VzIGF0IGFsbCwg c28gaXQncyAKZmFyIGZyb20gY2xlYXIgdGhhdCB0aGVyZSdzIGEgZ2VuZXJpYyB1c2UtY2FzZSBm b3IgY29ubmVjdGluZyB0aGVtIHRvIApkbWEtYnVmLiBDZXJ0YWlubHkgaXQgZG9lc24ndCBzZWVt IGxpa2UgYSBnb29kIGlkZWEgdG8gdW5jb25kaXRpb25hbGx5IApjcmVhdGUgaGVhcHMgZm9yICpl dmVyeXRpbmcqLCBhbmQgZ2l2ZSB1c2Vyc3BhY2UgZnJlZSByZWlnbiB0byBtZXNzIHdpdGggCnRo aW5ncyBpdCBkb2Vzbid0IG5lY2Vzc2FyaWx5IHVuZGVyc3RhbmQgKGVzcGVjaWFsbHkgd2hlcmUg CnVzYWdlLXNwZWNpZmljIHJlc3RyaWN0aW9ucyBpbXBsaWVkIGJ5ICJuby1tYXAiIGFyZSBpbnZv bHZlZCkgYW5kIHdoaWNoIAptYXkgYnJlYWsgZHJpdmVycy4KCk1vc3QgZHJpdmVycyB0aGF0IGFj Y29tb2RhdGUgYSBtZW1vcnktcmVnaW9uIGV4cGVjdCB0byBtYW5hZ2UgaXQgCnRoZW1zZWx2ZXMs IHNvIEkgd291bGQgdGhpbmsgaXQgc2hvdWxkIGJlIHVwIHRvIHRoZSBkcml2ZXJzIHRvIG9wdCBp bnRvIApkZWxlZ2F0aW5nICJ0aGVpciIgcG9vbCB0byB1c2Vyc3BhY2UgYnkgcmVnaXN0ZXJpbmcg aXQgYXMgYSBoZWFwLiBPciBhdCAKdmVyeSB3b3JzdCwgYXQgbGVhc3Qgc29tZSBhZGRpdGlvbmFs IERUIGNvbXBhdGlibGUgb3IgcHJvcGVydHkgdG8gCmluZGljYXRlIHRoYXQgaXQgcmVhbGx5IGlz IHNhZmUgYW5kIGRlc2lyYWJsZSB0byB1c2UgYSBnaXZlbiBwb29sIGluIGEgCnRydWx5IHNoYXJl ZCBtYW5uZXIuCgpPdGhlcndpc2UsIElmIHdlIGp1c3QgcHJlc2VudCBzb21lIGhlYXBzIG5hbWVk ICJtZW1vcnlAeHl6IiB0byB1c2Vyc3BhY2UgCihhcmNoL2FybTY0L2Jvb3QvZHRzL3RpL2szLWo3 ODRzNC1qNzQyczItdGktaXBjLWZpcm13YXJlLWNvbW1vbi5kdHNpIGlzIAphIGZ1biBleGFtcGxl KSwgZG8gd2UgcmVhbGx5IGV4cGVjdCBpdCB0byBtYWludGFpbiBleGhhdXN0aXZlIApwbGF0Zm9y bS1zcGVjaWZpYyBrbm93bGVkZ2Ugb2Ygd2hpY2ggYWN0dWFsIGRldmljZShzKSB0aGV5IGJlbG9u ZyB0byBhbmQgCndoYXQgdGhleSdyZSBmb3I/IEFuZCBpZiBpdCBkb2VzIHRyeSB0byBqdXN0IG1l c3MgYXJvdW5kIGFuZCBhbGxvY2F0ZSAKYW5kIG1hcCBzdHVmZiwgaG93IGRvZXMgdGhlIGRtYS1i dWYgbGF5ZXIgYWxzbyBoYXZlIGFsbCBvZiB0aGF0IAp1c2FnZS1zcGVjaWZpYyBkZXRhaWwgdG8g a25vdyB3aGF0IG1lbW9yeSBhdHRyaWJ1dGVzIGFyZSBzYWZlIHRvIG1hcCAKd2l0aCBldGMuPwoK VGhhbmtzLApSb2Jpbi4KCj4gVGhlIGhlYXAgYmluZHMgYSBzeW50aGV0aWMgcGxhdGZvcm0gZGV2 aWNlIHRvIGVhY2ggcmVnaW9uCj4gc28gY29oZXJlbnQgYWxsb2NhdGlvbnMgdXNlIHRoZSBjb3Jy ZWN0IGRldi0+ZG1hX21lbSwKPiBhbmQgaXQgZGVmZXJzIHJlZ2lzdHJhdGlvbiB1bnRpbCBsYXRl X2luaXRjYWxsIHdoZW4KPiBub3JtYWwgYWxsb2NhdG9yIGFyZSBhdmFpbGFibGUuCj4gCj4gVGhp cyBwYXRjaCBpbmNsdWRlcyBjaGFyZ2luZyBvZiB0aGUgY29oZXJlbnQgaGVhcAo+IGFsbG9jYXRv ciB0byB0aGUgZG1lbSBjZ3JvdXAuCj4gCj4gU2lnbmVkLW9mZi1ieTogQWxiZXJ0IEVzdGV2ZSA8 YWVzdGV2ZUByZWRoYXQuY29tPgo+IC0tLQo+IFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBk cml2ZXIgdG8gZXhwb3NlIERUIGNvaGVyZW50IHJlc2VydmVkLW1lbW9yeQo+IHJlZ2lvbnMgYXMg ZG1hLWJ1ZiBoZWFwcywgYWxsb3dpbmcgdXNlcnNwYWNlIGJ1ZmZlcnMgdG8gYmUgY3JlYXRlZC4K PiAKPiBTaW5jZSB0aGVzZSByZWdpb25zIGFyZSBkZXZpY2UtZGVwZW5kZW50LCB3ZSBiaW5kIGEg c3ludGhldGljIHBsYXRmb3JtCj4gZGV2aWNlIHRvIGVhY2ggcmVnaW9uIHNvIGNvaGVyZW50IGFs bG9jYXRpb25zIHVzZSB0aGUgY29ycmVjdCBkZXYtPmRtYV9tZW0uCj4gCj4gRm9sbG93aW5nIEVy aWPigJlzIFsxXSBhbmQgTWF4aW1l4oCZcyBbMl0gd29yayBvbiBjaGFyZ2luZyBETUEgYnVmZmVy cwo+IGFsbG9jYXRlZCBmcm9tIHVzZXJzcGFjZSB0byBjZ3JvdXBzIChkbWVtKSwgdGhpcyBwYXRj aCBhZGRzIHRoZSBzYW1lCj4gY2hhcmdpbmcgcGF0dGVybiB1c2VkIGJ5IENNQSBoZWFwcyBwYXRj aC4gQ2hhcmdpbmcgaXMgZG9uZSBvbmx5IHRocm91Z2gKPiB0aGUgZG1hLWJ1ZiBoZWFwIGludGVy ZmFjZSBzbyBpdCBjYW4gYmUgYXR0cmlidXRlZCB0byBhIHVzZXJzcGFjZSBhbGxvY2F0b3IuCj4g Cj4gVGhpcyBhbGxvd3MgZWFjaCBkZXZpY2Utc3BlY2lmaWMgcmVzZXJ2ZWQtbWVtb3J5IHJlZ2lv biB0byBlbmZvcmNlIGl0cwo+IG93biBsaW1pdHMuCj4gCj4gWzFdIGh0dHBzOi8vbG9yZS5rZXJu ZWwub3JnL2FsbC8yMDI2MDIxOC1kbWFidWYtaGVhcC1jbWEtZG1lbS12Mi0wLWIyNDk4ODZmYjdi MkByZWRoYXQuY29tLwo+IFsyXSBodHRwczovL2xvcmUua2VybmVsLm9yZy9hbGwvMjAyNTAzMTAt ZG1lbS1jZ3JvdXBzLXYxLTAtMjk4NGMxYmM5MzEyQGtlcm5lbC5vcmcvCj4gLS0tCj4gICBkcml2 ZXJzL2RtYS1idWYvaGVhcHMvS2NvbmZpZyAgICAgICAgIHwgIDE3ICsrCj4gICBkcml2ZXJzL2Rt YS1idWYvaGVhcHMvTWFrZWZpbGUgICAgICAgIHwgICAxICsKPiAgIGRyaXZlcnMvZG1hLWJ1Zi9o ZWFwcy9jb2hlcmVudF9oZWFwLmMgfCA0ODUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwo+ICAgaW5jbHVkZS9saW51eC9kbWEtaGVhcC5oICAgICAgICAgICAgICB8ICAxMSArCj4g ICBrZXJuZWwvZG1hL2NvaGVyZW50LmMgICAgICAgICAgICAgICAgIHwgICA5ICsKPiAgIDUgZmls ZXMgY2hhbmdlZCwgNTIzIGluc2VydGlvbnMoKykKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9k bWEtYnVmL2hlYXBzL0tjb25maWcgYi9kcml2ZXJzL2RtYS1idWYvaGVhcHMvS2NvbmZpZwo+IGlu ZGV4IGE1ZWVmMDZjNDIyNjQuLjkzNzY1ZGNhMTY0ZTMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9k bWEtYnVmL2hlYXBzL0tjb25maWcKPiArKysgYi9kcml2ZXJzL2RtYS1idWYvaGVhcHMvS2NvbmZp Zwo+IEBAIC0xMiwzICsxMiwyMCBAQCBjb25maWcgRE1BQlVGX0hFQVBTX0NNQQo+ICAgCSAgQ2hv b3NlIHRoaXMgb3B0aW9uIHRvIGVuYWJsZSBkbWEtYnVmIENNQSBoZWFwLiBUaGlzIGhlYXAgaXMg YmFja2VkCj4gICAJICBieSB0aGUgQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yIChDTUEpLiBJ ZiB5b3VyIHN5c3RlbSBoYXMgdGhlc2UKPiAgIAkgIHJlZ2lvbnMsIHlvdSBzaG91bGQgc2F5IFkg aGVyZS4KPiArCj4gK2NvbmZpZyBETUFCVUZfSEVBUFNfQ09IRVJFTlQKPiArCWJvb2wgIkRNQS1C VUYgQ29oZXJlbnQgUmVzZXJ2ZWQtTWVtb3J5IEhlYXAiCj4gKwlkZXBlbmRzIG9uIERNQUJVRl9I RUFQUyAmJiBPRl9SRVNFUlZFRF9NRU0gJiYgRE1BX0RFQ0xBUkVfQ09IRVJFTlQKPiArCWhlbHAK PiArCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIHRvIGVuYWJsZSBjb2hlcmVudCByZXNlcnZlZC1tZW1v cnkgZG1hLWJ1ZiBoZWFwcy4KPiArCSAgVGhpcyBoZWFwIGlzIGJhY2tlZCBieSBub24tcmV1c2Fi bGUgRFQgInNoYXJlZC1kbWEtcG9vbCIgcmVnaW9ucy4KPiArCSAgSWYgeW91ciBzeXN0ZW0gZGVm aW5lcyBjb2hlcmVudCByZXNlcnZlZC1tZW1vcnkgcmVnaW9ucywgeW91IHNob3VsZAo+ICsJICBz YXkgWSBoZXJlLgo+ICsKPiArY29uZmlnIENPSEVSRU5UX0FSRUFTX0RFRkVSUkVECj4gKwlpbnQg Ik1heCBkZWZlcnJlZCBjb2hlcmVudCByZXNlcnZlZC1tZW1vcnkgcmVnaW9ucyIKPiArCWRlcGVu ZHMgb24gRE1BQlVGX0hFQVBTX0NPSEVSRU5UCj4gKwlkZWZhdWx0IDE2Cj4gKwloZWxwCj4gKwkg IE1heGltdW0gbnVtYmVyIG9mIGNvaGVyZW50IHJlc2VydmVkLW1lbW9yeSByZWdpb25zIHRoYXQg Y2FuIGJlCj4gKwkgIGRlZmVycmVkIGZvciBsYXRlciByZWdpc3RyYXRpb24gZHVyaW5nIGVhcmx5 IGJvb3QuCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9NYWtlZmlsZSBiL2Ry aXZlcnMvZG1hLWJ1Zi9oZWFwcy9NYWtlZmlsZQo+IGluZGV4IDk3NDQ2Nzc5MTAzMmYuLjk2YmRh N2E2NWYwNDEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9kbWEtYnVmL2hlYXBzL01ha2VmaWxlCj4g KysrIGIvZHJpdmVycy9kbWEtYnVmL2hlYXBzL01ha2VmaWxlCj4gQEAgLTEsMyArMSw0IEBACj4g ICAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gICBvYmotJChDT05GSUdfRE1B QlVGX0hFQVBTX1NZU1RFTSkJKz0gc3lzdGVtX2hlYXAubwo+ICAgb2JqLSQoQ09ORklHX0RNQUJV Rl9IRUFQU19DTUEpCQkrPSBjbWFfaGVhcC5vCj4gK29iai0kKENPTkZJR19ETUFCVUZfSEVBUFNf Q09IRVJFTlQpCSs9IGNvaGVyZW50X2hlYXAubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1i dWYvaGVhcHMvY29oZXJlbnRfaGVhcC5jIGIvZHJpdmVycy9kbWEtYnVmL2hlYXBzL2NvaGVyZW50 X2hlYXAuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwMC4uODcw YjJiODlhZWZjYgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2RtYS1idWYvaGVhcHMv Y29oZXJlbnRfaGVhcC5jCj4gQEAgLTAsMCArMSw0ODUgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjAKPiArLyoKPiArICogRE1BQlVGIGhlYXAgZm9yIGNvaGVyZW50IHJl c2VydmVkLW1lbW9yeSByZWdpb25zCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAyNiBSZWQg SGF0LCBJbmMuCj4gKyAqIEF1dGhvcjogQWxiZXJ0IEVzdGV2ZSA8YWVzdGV2ZUByZWRoYXQuY29t Pgo+ICsgKgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9jZ3JvdXBfZG1lbS5oPgo+ICsj aW5jbHVkZSA8bGludXgvZG1hLWhlYXAuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2RtYS1idWYuaD4K PiArI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9lcnIu aD4KPiArI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KPiArI2luY2x1ZGUgPGxpbnV4L2lvc3lz LW1hcC5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2ZfcmVzZXJ2ZWRfbWVtLmg+Cj4gKyNpbmNsdWRl IDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0 Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC92bWFsbG9j Lmg+Cj4gKwo+ICsjZGVmaW5lIERFRkVSUkVEX0FSRUFTX01BWCBDT05GSUdfQ09IRVJFTlRfQVJF QVNfREVGRVJSRUQKPiArCj4gKy8qCj4gKyAqIEVhcmx5IGluaXQgY2FuJ3QgdXNlIG5vcm1hbCBt ZW1vcnkgbWFuYWdlbWVudCB5ZXQgKG1lbWJsb2NrIGlzIHVzZWQKPiArICogaW5zdGVhZCksIHNv IGtlZXAgYSBzbWFsbCBkZWZlcnJlZCBsaXN0IGFuZCByZXRyeSBhdCBsYXRlX2luaXRjYWxsLgo+ ICsgKi8KPiArc3RhdGljIHN0cnVjdCByZXNlcnZlZF9tZW0gKnJtZW1fYXJlYXNfZGVmZXJyZWRb REVGRVJSRURfQVJFQVNfTUFYXTsKPiArc3RhdGljIHVuc2lnbmVkIGludCBybWVtX2FyZWFzX2Rl ZmVycmVkX251bTsKPiArCj4gK3N0YXRpYyBpbnQgY29oZXJlbnRfaGVhcF9hZGRfZGVmZXJyZWQo c3RydWN0IHJlc2VydmVkX21lbSAqcm1lbSkKPiArewo+ICsJaWYgKHJtZW1fYXJlYXNfZGVmZXJy ZWRfbnVtID49IERFRkVSUkVEX0FSRUFTX01BWCkgewo+ICsJCXByX3dhcm4oIkRlZmVycmVkIGhl YXAgYXJlYXMgbGlzdCBmdWxsLCBkcm9wcGluZyAlc1xuIiwKPiArCQkJcm1lbS0+bmFtZSA/IHJt ZW0tPm5hbWUgOiAidW5rbm93biIpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsJcm1l bV9hcmVhc19kZWZlcnJlZFtybWVtX2FyZWFzX2RlZmVycmVkX251bSsrXSA9IHJtZW07Cj4gKwly ZXR1cm4gMDsKPiArfQo+ICsKPiArc3RydWN0IGNvaGVyZW50X2hlYXAgewo+ICsJc3RydWN0IGRt YV9oZWFwICpoZWFwOwo+ICsJc3RydWN0IHJlc2VydmVkX21lbSAqcm1lbTsKPiArCWNoYXIgKm5h bWU7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4gKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2Owo+ICsjaWYgSVNfRU5BQkxFRChDT05GSUdfQ0dST1VQX0RNRU0pCj4gKwlzdHJ1Y3QgZG1l bV9jZ3JvdXBfcmVnaW9uICpjZzsKPiArI2VuZGlmCj4gK307Cj4gKwo+ICtzdHJ1Y3QgY29oZXJl bnRfaGVhcF9idWZmZXIgewo+ICsJc3RydWN0IGNvaGVyZW50X2hlYXAgKmhlYXA7Cj4gKwlzdHJ1 Y3QgbGlzdF9oZWFkIGF0dGFjaG1lbnRzOwo+ICsJc3RydWN0IG11dGV4IGxvY2s7Cj4gKwl1bnNp Z25lZCBsb25nIGxlbjsKPiArCWRtYV9hZGRyX3QgZG1hX2FkZHI7Cj4gKwl2b2lkICphbGxvY192 YWRkcjsKPiArCXN0cnVjdCBwYWdlICoqcGFnZXM7Cj4gKwlwZ29mZl90IHBhZ2Vjb3VudDsKPiAr CWludCB2bWFwX2NudDsKPiArCXZvaWQgKnZhZGRyOwo+ICsjaWYgSVNfRU5BQkxFRChDT05GSUdf Q0dST1VQX0RNRU0pCj4gKwlzdHJ1Y3QgZG1lbV9jZ3JvdXBfcG9vbF9zdGF0ZSAqcG9vbDsKPiAr I2VuZGlmCj4gK307Cj4gKwo+ICtzdHJ1Y3QgZG1hX2hlYXBfYXR0YWNobWVudCB7Cj4gKwlzdHJ1 Y3QgZGV2aWNlICpkZXY7Cj4gKwlzdHJ1Y3Qgc2dfdGFibGUgdGFibGU7Cj4gKwlzdHJ1Y3QgbGlz dF9oZWFkIGxpc3Q7Cj4gKwlib29sIG1hcHBlZDsKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgY29o ZXJlbnRfaGVhcF9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKPiArCQkJCXN0cnVjdCBk bWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQpCj4gK3sKPiArCXN0cnVjdCBjb2hlcmVudF9o ZWFwX2J1ZmZlciAqYnVmZmVyID0gZG1hYnVmLT5wcml2Owo+ICsJc3RydWN0IGRtYV9oZWFwX2F0 dGFjaG1lbnQgKmE7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWEgPSBremFsbG9jX29iaigqYSk7Cj4g KwlpZiAoIWEpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJcmV0ID0gc2dfYWxsb2NfdGFi bGVfZnJvbV9wYWdlcygmYS0+dGFibGUsIGJ1ZmZlci0+cGFnZXMsCj4gKwkJCQkJYnVmZmVyLT5w YWdlY291bnQsIDAsCj4gKwkJCQkJYnVmZmVyLT5wYWdlY291bnQgPDwgUEFHRV9TSElGVCwKPiAr CQkJCQlHRlBfS0VSTkVMKTsKPiArCWlmIChyZXQpIHsKPiArCQlrZnJlZShhKTsKPiArCQlyZXR1 cm4gcmV0Owo+ICsJfQo+ICsKPiArCWEtPmRldiA9IGF0dGFjaG1lbnQtPmRldjsKPiArCUlOSVRf TElTVF9IRUFEKCZhLT5saXN0KTsKPiArCWEtPm1hcHBlZCA9IGZhbHNlOwo+ICsKPiArCWF0dGFj aG1lbnQtPnByaXYgPSBhOwo+ICsKPiArCW11dGV4X2xvY2soJmJ1ZmZlci0+bG9jayk7Cj4gKwls aXN0X2FkZCgmYS0+bGlzdCwgJmJ1ZmZlci0+YXR0YWNobWVudHMpOwo+ICsJbXV0ZXhfdW5sb2Nr KCZidWZmZXItPmxvY2spOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCBjb2hlcmVudF9oZWFwX2RldGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAo+ICsJCQkJIHN0 cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQpCj4gK3sKPiArCXN0cnVjdCBjb2hl cmVudF9oZWFwX2J1ZmZlciAqYnVmZmVyID0gZG1hYnVmLT5wcml2Owo+ICsJc3RydWN0IGRtYV9o ZWFwX2F0dGFjaG1lbnQgKmEgPSBhdHRhY2htZW50LT5wcml2Owo+ICsKPiArCW11dGV4X2xvY2so JmJ1ZmZlci0+bG9jayk7Cj4gKwlsaXN0X2RlbCgmYS0+bGlzdCk7Cj4gKwltdXRleF91bmxvY2so JmJ1ZmZlci0+bG9jayk7Cj4gKwo+ICsJc2dfZnJlZV90YWJsZSgmYS0+dGFibGUpOwo+ICsJa2Zy ZWUoYSk7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3Qgc2dfdGFibGUgKmNvaGVyZW50X2hlYXBf bWFwX2RtYV9idWYoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudCwKPiArCQkJ CQkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCj4gK3sKPiArCXN0cnVjdCBk bWFfaGVhcF9hdHRhY2htZW50ICphID0gYXR0YWNobWVudC0+cHJpdjsKPiArCXN0cnVjdCBzZ190 YWJsZSAqdGFibGUgPSAmYS0+dGFibGU7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IGRtYV9t YXBfc2d0YWJsZShhdHRhY2htZW50LT5kZXYsIHRhYmxlLCBkaXJlY3Rpb24sIDApOwo+ICsJaWYg KHJldCkKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiArCWEtPm1hcHBlZCA9IHRydWU7 Cj4gKwo+ICsJcmV0dXJuIHRhYmxlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBjb2hlcmVudF9o ZWFwX3VubWFwX2RtYV9idWYoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudCwK PiArCQkJCQlzdHJ1Y3Qgc2dfdGFibGUgKnRhYmxlLAo+ICsJCQkJCWVudW0gZG1hX2RhdGFfZGly ZWN0aW9uIGRpcmVjdGlvbikKPiArewo+ICsJc3RydWN0IGRtYV9oZWFwX2F0dGFjaG1lbnQgKmEg PSBhdHRhY2htZW50LT5wcml2Owo+ICsKPiArCWEtPm1hcHBlZCA9IGZhbHNlOwo+ICsJZG1hX3Vu bWFwX3NndGFibGUoYXR0YWNobWVudC0+ZGV2LCB0YWJsZSwgZGlyZWN0aW9uLCAwKTsKPiArfQo+ ICsKPiArc3RhdGljIGludCBjb2hlcmVudF9oZWFwX2RtYV9idWZfYmVnaW5fY3B1X2FjY2Vzcyhz dHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAo+ICsJCQkJCQkgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9u IGRpcmVjdGlvbikKPiArewo+ICsJc3RydWN0IGNvaGVyZW50X2hlYXBfYnVmZmVyICpidWZmZXIg PSBkbWFidWYtPnByaXY7Cj4gKwlzdHJ1Y3QgZG1hX2hlYXBfYXR0YWNobWVudCAqYTsKPiArCj4g KwltdXRleF9sb2NrKCZidWZmZXItPmxvY2spOwo+ICsJaWYgKGJ1ZmZlci0+dm1hcF9jbnQpCj4g KwkJaW52YWxpZGF0ZV9rZXJuZWxfdm1hcF9yYW5nZShidWZmZXItPnZhZGRyLCBidWZmZXItPmxl bik7Cj4gKwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShhLCAmYnVmZmVyLT5hdHRhY2htZW50cywg bGlzdCkgewo+ICsJCWlmICghYS0+bWFwcGVkKQo+ICsJCQljb250aW51ZTsKPiArCQlkbWFfc3lu Y19zZ3RhYmxlX2Zvcl9jcHUoYS0+ZGV2LCAmYS0+dGFibGUsIGRpcmVjdGlvbik7Cj4gKwl9Cj4g KwltdXRleF91bmxvY2soJmJ1ZmZlci0+bG9jayk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgY29oZXJlbnRfaGVhcF9kbWFfYnVmX2VuZF9jcHVfYWNjZXNzKHN0cnVj dCBkbWFfYnVmICpkbWFidWYsCj4gKwkJCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVj dGlvbikKPiArewo+ICsJc3RydWN0IGNvaGVyZW50X2hlYXBfYnVmZmVyICpidWZmZXIgPSBkbWFi dWYtPnByaXY7Cj4gKwlzdHJ1Y3QgZG1hX2hlYXBfYXR0YWNobWVudCAqYTsKPiArCj4gKwltdXRl eF9sb2NrKCZidWZmZXItPmxvY2spOwo+ICsJaWYgKGJ1ZmZlci0+dm1hcF9jbnQpCj4gKwkJZmx1 c2hfa2VybmVsX3ZtYXBfcmFuZ2UoYnVmZmVyLT52YWRkciwgYnVmZmVyLT5sZW4pOwo+ICsKPiAr CWxpc3RfZm9yX2VhY2hfZW50cnkoYSwgJmJ1ZmZlci0+YXR0YWNobWVudHMsIGxpc3QpIHsKPiAr CQlpZiAoIWEtPm1hcHBlZCkKPiArCQkJY29udGludWU7Cj4gKwkJZG1hX3N5bmNfc2d0YWJsZV9m b3JfZGV2aWNlKGEtPmRldiwgJmEtPnRhYmxlLCBkaXJlY3Rpb24pOwo+ICsJfQo+ICsJbXV0ZXhf dW5sb2NrKCZidWZmZXItPmxvY2spOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IGNvaGVyZW50X2hlYXBfbW1hcChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBzdHJ1Y3Qg dm1fYXJlYV9zdHJ1Y3QgKnZtYSkKPiArewo+ICsJc3RydWN0IGNvaGVyZW50X2hlYXBfYnVmZmVy ICpidWZmZXIgPSBkbWFidWYtPnByaXY7Cj4gKwlzdHJ1Y3QgY29oZXJlbnRfaGVhcCAqY29oX2hl YXAgPSBidWZmZXItPmhlYXA7Cj4gKwo+ICsJcmV0dXJuIGRtYV9tbWFwX2NvaGVyZW50KGNvaF9o ZWFwLT5kZXYsIHZtYSwgYnVmZmVyLT5hbGxvY192YWRkciwKPiArCQkJCSBidWZmZXItPmRtYV9h ZGRyLCBidWZmZXItPmxlbik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkICpjb2hlcmVudF9oZWFw X2RvX3ZtYXAoc3RydWN0IGNvaGVyZW50X2hlYXBfYnVmZmVyICpidWZmZXIpCj4gK3sKPiArCXZv aWQgKnZhZGRyOwo+ICsKPiArCXZhZGRyID0gdm1hcChidWZmZXItPnBhZ2VzLCBidWZmZXItPnBh Z2Vjb3VudCwgVk1fTUFQLCBQQUdFX0tFUk5FTCk7Cj4gKwlpZiAoIXZhZGRyKQo+ICsJCXJldHVy biBFUlJfUFRSKC1FTk9NRU0pOwo+ICsKPiArCXJldHVybiB2YWRkcjsKPiArfQo+ICsKPiArc3Rh dGljIGludCBjb2hlcmVudF9oZWFwX3ZtYXAoc3RydWN0IGRtYV9idWYgKmRtYWJ1Ziwgc3RydWN0 IGlvc3lzX21hcCAqbWFwKQo+ICt7Cj4gKwlzdHJ1Y3QgY29oZXJlbnRfaGVhcF9idWZmZXIgKmJ1 ZmZlciA9IGRtYWJ1Zi0+cHJpdjsKPiArCXZvaWQgKnZhZGRyOwo+ICsJaW50IHJldCA9IDA7Cj4g Kwo+ICsJbXV0ZXhfbG9jaygmYnVmZmVyLT5sb2NrKTsKPiArCWlmIChidWZmZXItPnZtYXBfY250 KSB7Cj4gKwkJYnVmZmVyLT52bWFwX2NudCsrOwo+ICsJCWlvc3lzX21hcF9zZXRfdmFkZHIobWFw LCBidWZmZXItPnZhZGRyKTsKPiArCQlnb3RvIG91dDsKPiArCX0KPiArCj4gKwl2YWRkciA9IGNv aGVyZW50X2hlYXBfZG9fdm1hcChidWZmZXIpOwo+ICsJaWYgKElTX0VSUih2YWRkcikpIHsKPiAr CQlyZXQgPSBQVFJfRVJSKHZhZGRyKTsKPiArCQlnb3RvIG91dDsKPiArCX0KPiArCj4gKwlidWZm ZXItPnZhZGRyID0gdmFkZHI7Cj4gKwlidWZmZXItPnZtYXBfY250Kys7Cj4gKwlpb3N5c19tYXBf c2V0X3ZhZGRyKG1hcCwgYnVmZmVyLT52YWRkcik7Cj4gK291dDoKPiArCW11dGV4X3VubG9jaygm YnVmZmVyLT5sb2NrKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCBjb2hlcmVudF9oZWFwX3Z1bm1hcChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBzdHJ1Y3QgaW9z eXNfbWFwICptYXApCj4gK3sKPiArCXN0cnVjdCBjb2hlcmVudF9oZWFwX2J1ZmZlciAqYnVmZmVy ID0gZG1hYnVmLT5wcml2Owo+ICsKPiArCW11dGV4X2xvY2soJmJ1ZmZlci0+bG9jayk7Cj4gKwlp ZiAoIS0tYnVmZmVyLT52bWFwX2NudCkgewo+ICsJCXZ1bm1hcChidWZmZXItPnZhZGRyKTsKPiAr CQlidWZmZXItPnZhZGRyID0gTlVMTDsKPiArCX0KPiArCW11dGV4X3VubG9jaygmYnVmZmVyLT5s b2NrKTsKPiArCWlvc3lzX21hcF9jbGVhcihtYXApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBj b2hlcmVudF9oZWFwX2RtYV9idWZfcmVsZWFzZShzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKQo+ICt7 Cj4gKwlzdHJ1Y3QgY29oZXJlbnRfaGVhcF9idWZmZXIgKmJ1ZmZlciA9IGRtYWJ1Zi0+cHJpdjsK PiArCXN0cnVjdCBjb2hlcmVudF9oZWFwICpjb2hfaGVhcCA9IGJ1ZmZlci0+aGVhcDsKPiArCj4g KwlpZiAoYnVmZmVyLT52bWFwX2NudCA+IDApIHsKPiArCQlXQVJOKDEsICIlczogYnVmZmVyIHN0 aWxsIG1hcHBlZCBpbiB0aGUga2VybmVsXG4iLCBfX2Z1bmNfXyk7Cj4gKwkJdnVubWFwKGJ1ZmZl ci0+dmFkZHIpOwo+ICsJCWJ1ZmZlci0+dmFkZHIgPSBOVUxMOwo+ICsJCWJ1ZmZlci0+dm1hcF9j bnQgPSAwOwo+ICsJfQo+ICsKPiArCWlmIChidWZmZXItPmFsbG9jX3ZhZGRyKQo+ICsJCWRtYV9m cmVlX2NvaGVyZW50KGNvaF9oZWFwLT5kZXYsIGJ1ZmZlci0+bGVuLCBidWZmZXItPmFsbG9jX3Zh ZGRyLAo+ICsJCQkgICAgICAgYnVmZmVyLT5kbWFfYWRkcik7Cj4gKwlrZnJlZShidWZmZXItPnBh Z2VzKTsKPiArI2lmIElTX0VOQUJMRUQoQ09ORklHX0NHUk9VUF9ETUVNKQo+ICsJZG1lbV9jZ3Jv dXBfdW5jaGFyZ2UoYnVmZmVyLT5wb29sLCBidWZmZXItPmxlbik7Cj4gKyNlbmRpZgo+ICsJa2Zy ZWUoYnVmZmVyKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfYnVmX29wcyBj b2hlcmVudF9oZWFwX2J1Zl9vcHMgPSB7Cj4gKwkuYXR0YWNoID0gY29oZXJlbnRfaGVhcF9hdHRh Y2gsCj4gKwkuZGV0YWNoID0gY29oZXJlbnRfaGVhcF9kZXRhY2gsCj4gKwkubWFwX2RtYV9idWYg PSBjb2hlcmVudF9oZWFwX21hcF9kbWFfYnVmLAo+ICsJLnVubWFwX2RtYV9idWYgPSBjb2hlcmVu dF9oZWFwX3VubWFwX2RtYV9idWYsCj4gKwkuYmVnaW5fY3B1X2FjY2VzcyA9IGNvaGVyZW50X2hl YXBfZG1hX2J1Zl9iZWdpbl9jcHVfYWNjZXNzLAo+ICsJLmVuZF9jcHVfYWNjZXNzID0gY29oZXJl bnRfaGVhcF9kbWFfYnVmX2VuZF9jcHVfYWNjZXNzLAo+ICsJLm1tYXAgPSBjb2hlcmVudF9oZWFw X21tYXAsCj4gKwkudm1hcCA9IGNvaGVyZW50X2hlYXBfdm1hcCwKPiArCS52dW5tYXAgPSBjb2hl cmVudF9oZWFwX3Z1bm1hcCwKPiArCS5yZWxlYXNlID0gY29oZXJlbnRfaGVhcF9kbWFfYnVmX3Jl bGVhc2UsCj4gK307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGRtYV9idWYgKmNvaGVyZW50X2hlYXBf YWxsb2NhdGUoc3RydWN0IGRtYV9oZWFwICpoZWFwLAo+ICsJCQkJCSAgICAgIHVuc2lnbmVkIGxv bmcgbGVuLAo+ICsJCQkJCSAgICAgIHUzMiBmZF9mbGFncywKPiArCQkJCQkgICAgICB1NjQgaGVh cF9mbGFncykKPiArewo+ICsJc3RydWN0IGNvaGVyZW50X2hlYXAgKmNvaF9oZWFwOwo+ICsJc3Ry dWN0IGNvaGVyZW50X2hlYXBfYnVmZmVyICpidWZmZXI7Cj4gKwlERUZJTkVfRE1BX0JVRl9FWFBP UlRfSU5GTyhleHBfaW5mbyk7Cj4gKwlzaXplX3Qgc2l6ZSA9IFBBR0VfQUxJR04obGVuKTsKPiAr CXBnb2ZmX3QgcGFnZWNvdW50ID0gc2l6ZSA+PiBQQUdFX1NISUZUOwo+ICsJc3RydWN0IGRtYV9i dWYgKmRtYWJ1ZjsKPiArCWludCByZXQgPSAtRU5PTUVNOwo+ICsJcGdvZmZfdCBwZzsKPiArCj4g Kwljb2hfaGVhcCA9IGRtYV9oZWFwX2dldF9kcnZkYXRhKGhlYXApOwo+ICsJaWYgKCFjb2hfaGVh cCkKPiArCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPiArCWlmICghY29oX2hlYXAtPmRldikK PiArCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKPiArCj4gKwlidWZmZXIgPSBremFsbG9jX29i aigqYnVmZmVyKTsKPiArCWlmICghYnVmZmVyKQo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0p Owo+ICsKPiArCUlOSVRfTElTVF9IRUFEKCZidWZmZXItPmF0dGFjaG1lbnRzKTsKPiArCW11dGV4 X2luaXQoJmJ1ZmZlci0+bG9jayk7Cj4gKwlidWZmZXItPmxlbiA9IHNpemU7Cj4gKwlidWZmZXIt PmhlYXAgPSBjb2hfaGVhcDsKPiArCWJ1ZmZlci0+cGFnZWNvdW50ID0gcGFnZWNvdW50Owo+ICsK PiArI2lmIElTX0VOQUJMRUQoQ09ORklHX0NHUk9VUF9ETUVNKQo+ICsJaWYgKG1lbV9hY2NvdW50 aW5nKSB7Cj4gKwkJcmV0ID0gZG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZShjb2hfaGVhcC0+Y2csIHNp emUsCj4gKwkJCQkJICAgICAmYnVmZmVyLT5wb29sLCBOVUxMKTsKPiArCQlpZiAocmV0KQo+ICsJ CQlnb3RvIGZyZWVfYnVmZmVyOwo+ICsJfQo+ICsjZW5kaWYKPiArCj4gKwlidWZmZXItPmFsbG9j X3ZhZGRyID0gZG1hX2FsbG9jX2NvaGVyZW50KGNvaF9oZWFwLT5kZXYsIGJ1ZmZlci0+bGVuLAo+ ICsJCQkJCQkgJmJ1ZmZlci0+ZG1hX2FkZHIsIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFidWZmZXIt PmFsbG9jX3ZhZGRyKSB7Cj4gKwkJcmV0ID0gLUVOT01FTTsKPiArI2lmIElTX0VOQUJMRUQoQ09O RklHX0NHUk9VUF9ETUVNKQo+ICsJCWdvdG8gdW5jaGFyZ2VfY2dyb3VwOwo+ICsjZWxzZQo+ICsJ CWdvdG8gZnJlZV9idWZmZXI7Cj4gKyNlbmRpZgo+ICsJfQo+ICsKPiArCWJ1ZmZlci0+cGFnZXMg PSBrbWFsbG9jX2FycmF5KHBhZ2Vjb3VudCwgc2l6ZW9mKCpidWZmZXItPnBhZ2VzKSwKPiArCQkJ CSAgICAgIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFidWZmZXItPnBhZ2VzKSB7Cj4gKwkJcmV0ID0g LUVOT01FTTsKPiArCQlnb3RvIGZyZWVfZG1hOwo+ICsJfQo+ICsKPiArCWZvciAocGcgPSAwOyBw ZyA8IHBhZ2Vjb3VudDsgcGcrKykKPiArCQlidWZmZXItPnBhZ2VzW3BnXSA9IHZpcnRfdG9fcGFn ZSgoY2hhciAqKWJ1ZmZlci0+YWxsb2NfdmFkZHIgKwo+ICsJCQkJCQkgKHBnICogUEFHRV9TSVpF KSk7Cj4gKwo+ICsJLyogY3JlYXRlIHRoZSBkbWFidWYgKi8KPiArCWV4cF9pbmZvLmV4cF9uYW1l ID0gZG1hX2hlYXBfZ2V0X25hbWUoaGVhcCk7Cj4gKwlleHBfaW5mby5vcHMgPSAmY29oZXJlbnRf aGVhcF9idWZfb3BzOwo+ICsJZXhwX2luZm8uc2l6ZSA9IGJ1ZmZlci0+bGVuOwo+ICsJZXhwX2lu Zm8uZmxhZ3MgPSBmZF9mbGFnczsKPiArCWV4cF9pbmZvLnByaXYgPSBidWZmZXI7Cj4gKwlkbWFi dWYgPSBkbWFfYnVmX2V4cG9ydCgmZXhwX2luZm8pOwo+ICsJaWYgKElTX0VSUihkbWFidWYpKSB7 Cj4gKwkJcmV0ID0gUFRSX0VSUihkbWFidWYpOwo+ICsJCWdvdG8gZnJlZV9wYWdlczsKPiArCX0K PiArCXJldHVybiBkbWFidWY7Cj4gKwo+ICtmcmVlX3BhZ2VzOgo+ICsJa2ZyZWUoYnVmZmVyLT5w YWdlcyk7Cj4gK2ZyZWVfZG1hOgo+ICsJZG1hX2ZyZWVfY29oZXJlbnQoY29oX2hlYXAtPmRldiwg YnVmZmVyLT5sZW4sIGJ1ZmZlci0+YWxsb2NfdmFkZHIsCj4gKwkJCSAgYnVmZmVyLT5kbWFfYWRk cik7Cj4gKyNpZiBJU19FTkFCTEVEKENPTkZJR19DR1JPVVBfRE1FTSkKPiArdW5jaGFyZ2VfY2dy b3VwOgo+ICsJZG1lbV9jZ3JvdXBfdW5jaGFyZ2UoYnVmZmVyLT5wb29sLCBzaXplKTsKPiArI2Vu ZGlmCj4gK2ZyZWVfYnVmZmVyOgo+ICsJa2ZyZWUoYnVmZmVyKTsKPiArCXJldHVybiBFUlJfUFRS KHJldCk7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2hlYXBfb3BzIGNvaGVy ZW50X2hlYXBfb3BzID0gewo+ICsJLmFsbG9jYXRlID0gY29oZXJlbnRfaGVhcF9hbGxvY2F0ZSwK PiArfTsKPiArCj4gK3N0YXRpYyBpbnQgX19jb2hlcmVudF9oZWFwX3JlZ2lzdGVyKHN0cnVjdCBy ZXNlcnZlZF9tZW0gKnJtZW0pCj4gK3sKPiArCXN0cnVjdCBkbWFfaGVhcF9leHBvcnRfaW5mbyBl eHBfaW5mbzsKPiArCXN0cnVjdCBjb2hlcmVudF9oZWFwICpjb2hfaGVhcDsKPiArI2lmIElTX0VO QUJMRUQoQ09ORklHX0NHUk9VUF9ETUVNKQo+ICsJc3RydWN0IGRtZW1fY2dyb3VwX3JlZ2lvbiAq cmVnaW9uOwo+ICsjZW5kaWYKPiArCWNvbnN0IGNoYXIgKnJtZW1fbmFtZTsKPiArCWludCByZXQ7 Cj4gKwo+ICsJaWYgKCFybWVtKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCXJtZW1fbmFt ZSA9IHJtZW0tPm5hbWUgPyBybWVtLT5uYW1lIDogInVua25vd24iOwo+ICsKPiArCWNvaF9oZWFw ID0ga3phbGxvY19vYmooKmNvaF9oZWFwKTsKPiArCWlmICghY29oX2hlYXApCj4gKwkJcmV0dXJu IC1FTk9NRU07Cj4gKwo+ICsJY29oX2hlYXAtPm5hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwg ImNvaGVyZW50XyVzIiwgcm1lbV9uYW1lKTsKPiArCWlmICghY29oX2hlYXAtPm5hbWUpIHsKPiAr CQlyZXQgPSAtRU5PTUVNOwo+ICsJCWdvdG8gZnJlZV9jb2hlcmVudF9oZWFwOwo+ICsJfQo+ICsK PiArCWNvaF9oZWFwLT5ybWVtID0gcm1lbTsKPiArCj4gKwkvKiBjcmVhdGUgYSBwbGF0Zm9ybSBk ZXZpY2UgcGVyIHJtZW0gYW5kIGJpbmQgaXQgKi8KPiArCWNvaF9oZWFwLT5wZGV2ID0gcGxhdGZv cm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgiY29oZXJlbnQtaGVhcCIsCj4gKwkJCQkJCQkgUExB VEZPUk1fREVWSURfQVVUTywKPiArCQkJCQkJCSBOVUxMLCAwKTsKPiArCWlmIChJU19FUlIoY29o X2hlYXAtPnBkZXYpKSB7Cj4gKwkJcmV0ID0gUFRSX0VSUihjb2hfaGVhcC0+cGRldik7Cj4gKwkJ Z290byBmcmVlX25hbWU7Cj4gKwl9Cj4gKwo+ICsJaWYgKHJtZW0tPm9wcyAmJiBybWVtLT5vcHMt PmRldmljZV9pbml0KSB7Cj4gKwkJcmV0ID0gcm1lbS0+b3BzLT5kZXZpY2VfaW5pdChybWVtLCAm Y29oX2hlYXAtPnBkZXYtPmRldik7Cj4gKwkJaWYgKHJldCkKPiArCQkJZ290byBwZGV2X3VucmVn aXN0ZXI7Cj4gKwl9Cj4gKwo+ICsJY29oX2hlYXAtPmRldiA9ICZjb2hfaGVhcC0+cGRldi0+ZGV2 Owo+ICsjaWYgSVNfRU5BQkxFRChDT05GSUdfQ0dST1VQX0RNRU0pCj4gKwlyZWdpb24gPSBkbWVt X2Nncm91cF9yZWdpc3Rlcl9yZWdpb24ocm1lbS0+c2l6ZSwgImNvaC8lcyIsIHJtZW1fbmFtZSk7 Cj4gKwlpZiAoSVNfRVJSKHJlZ2lvbikpIHsKPiArCQlyZXQgPSBQVFJfRVJSKHJlZ2lvbik7Cj4g KwkJZ290byBwZGV2X3VucmVnaXN0ZXI7Cj4gKwl9Cj4gKwljb2hfaGVhcC0+Y2cgPSByZWdpb247 Cj4gKyNlbmRpZgo+ICsKPiArCWV4cF9pbmZvLm5hbWUgPSBjb2hfaGVhcC0+bmFtZTsKPiArCWV4 cF9pbmZvLm9wcyA9ICZjb2hlcmVudF9oZWFwX29wczsKPiArCWV4cF9pbmZvLnByaXYgPSBjb2hf aGVhcDsKPiArCj4gKwljb2hfaGVhcC0+aGVhcCA9IGRtYV9oZWFwX2FkZCgmZXhwX2luZm8pOwo+ ICsJaWYgKElTX0VSUihjb2hfaGVhcC0+aGVhcCkpIHsKPiArCQlyZXQgPSBQVFJfRVJSKGNvaF9o ZWFwLT5oZWFwKTsKPiArCQlnb3RvIGNnX3VucmVnaXN0ZXI7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJu IDA7Cj4gKwo+ICtjZ191bnJlZ2lzdGVyOgo+ICsjaWYgSVNfRU5BQkxFRChDT05GSUdfQ0dST1VQ X0RNRU0pCj4gKwlkbWVtX2Nncm91cF91bnJlZ2lzdGVyX3JlZ2lvbihjb2hfaGVhcC0+Y2cpOwo+ ICsjZW5kaWYKPiArcGRldl91bnJlZ2lzdGVyOgo+ICsJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0 ZXIoY29oX2hlYXAtPnBkZXYpOwo+ICsJY29oX2hlYXAtPnBkZXYgPSBOVUxMOwo+ICtmcmVlX25h bWU6Cj4gKwlrZnJlZShjb2hfaGVhcC0+bmFtZSk7Cj4gK2ZyZWVfY29oZXJlbnRfaGVhcDoKPiAr CWtmcmVlKGNvaF9oZWFwKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtpbnQgZG1h X2hlYXBfY29oZXJlbnRfcmVnaXN0ZXIoc3RydWN0IHJlc2VydmVkX21lbSAqcm1lbSkKPiArewo+ ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBfX2NvaGVyZW50X2hlYXBfcmVnaXN0ZXIocm1lbSk7 Cj4gKwlpZiAocmV0ID09IC1FTk9NRU0pCj4gKwkJcmV0dXJuIGNvaGVyZW50X2hlYXBfYWRkX2Rl ZmVycmVkKHJtZW0pOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBfX2lu aXQgY29oZXJlbnRfaGVhcF9yZWdpc3Rlcl9kZWZlcnJlZCh2b2lkKQo+ICt7Cj4gKwl1bnNpZ25l ZCBpbnQgaTsKPiArCWludCByZXQ7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IHJtZW1fYXJlYXNf ZGVmZXJyZWRfbnVtOyBpKyspIHsKPiArCQlzdHJ1Y3QgcmVzZXJ2ZWRfbWVtICpybWVtID0gcm1l bV9hcmVhc19kZWZlcnJlZFtpXTsKPiArCj4gKwkJcmV0ID0gX19jb2hlcmVudF9oZWFwX3JlZ2lz dGVyKHJtZW0pOwo+ICsJCWlmIChyZXQpIHsKPiArCQkJcHJfd2FybigiRmFpbGVkIHRvIGFkZCBj b2hlcmVudCBoZWFwICVzIiwKPiArCQkJCXJtZW0tPm5hbWUgPyBybWVtLT5uYW1lIDogInVua25v d24iKTsKPiArCQkJY29udGludWU7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9 Cj4gK2xhdGVfaW5pdGNhbGwoY29oZXJlbnRfaGVhcF9yZWdpc3Rlcl9kZWZlcnJlZCk7Cj4gK01P RFVMRV9ERVNDUklQVElPTigiRE1BLUJVRiBoZWFwIGZvciBjb2hlcmVudCByZXNlcnZlZC1tZW1v cnkgcmVnaW9ucyIpOwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYS1oZWFwLmggYi9p bmNsdWRlL2xpbnV4L2RtYS1oZWFwLmgKPiBpbmRleCA2NDgzMjhhNjRiMjdlLi5lODk0Y2ZhMWVj ZjFhIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvbGludXgvZG1hLWhlYXAuaAo+ICsrKyBiL2luY2x1 ZGUvbGludXgvZG1hLWhlYXAuaAo+IEBAIC05LDkgKzksMTEgQEAKPiAgICNpZm5kZWYgX0RNQV9I RUFQU19ICj4gICAjZGVmaW5lIF9ETUFfSEVBUFNfSAo+ICAgCj4gKyNpbmNsdWRlIDxsaW51eC9l cnJuby5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cj4gICAKPiAgIHN0cnVjdCBkbWFf aGVhcDsKPiArc3RydWN0IHJlc2VydmVkX21lbTsKPiAgIAo+ICAgLyoqCj4gICAgKiBzdHJ1Y3Qg ZG1hX2hlYXBfb3BzIC0gb3BzIHRvIG9wZXJhdGUgb24gYSBnaXZlbiBoZWFwCj4gQEAgLTQ4LDQg KzUwLDEzIEBAIHN0cnVjdCBkbWFfaGVhcCAqZG1hX2hlYXBfYWRkKGNvbnN0IHN0cnVjdCBkbWFf aGVhcF9leHBvcnRfaW5mbyAqZXhwX2luZm8pOwo+ICAgCj4gICBleHRlcm4gYm9vbCBtZW1fYWNj b3VudGluZzsKPiAgIAo+ICsjaWYgSVNfRU5BQkxFRChDT05GSUdfRE1BQlVGX0hFQVBTX0NPSEVS RU5UKQo+ICtpbnQgZG1hX2hlYXBfY29oZXJlbnRfcmVnaXN0ZXIoc3RydWN0IHJlc2VydmVkX21l bSAqcm1lbSk7Cj4gKyNlbHNlCj4gK3N0YXRpYyBpbmxpbmUgaW50IGRtYV9oZWFwX2NvaGVyZW50 X3JlZ2lzdGVyKHN0cnVjdCByZXNlcnZlZF9tZW0gKnJtZW0pCj4gK3sKPiArCXJldHVybiAtRU9Q Tk9UU1VQUDsKPiArfQo+ICsjZW5kaWYKPiArCj4gICAjZW5kaWYgLyogX0RNQV9IRUFQU19IICov Cj4gZGlmZiAtLWdpdCBhL2tlcm5lbC9kbWEvY29oZXJlbnQuYyBiL2tlcm5lbC9kbWEvY29oZXJl bnQuYwo+IGluZGV4IDExNDc0OTdiYzUxMmMuLmY0OWQxM2U0NjBlNGIgMTAwNjQ0Cj4gLS0tIGEv a2VybmVsL2RtYS9jb2hlcmVudC5jCj4gKysrIGIva2VybmVsL2RtYS9jb2hlcmVudC5jCj4gQEAg LTksNiArOSw3IEBACj4gICAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gICAjaW5jbHVkZSA8 bGludXgvZG1hLWRpcmVjdC5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXAtb3BzLmg+Cj4g KyNpbmNsdWRlIDxsaW51eC9kbWEtaGVhcC5oPgo+ICAgCj4gICBzdHJ1Y3QgZG1hX2NvaGVyZW50 X21lbSB7Cj4gICAJdm9pZAkJKnZpcnRfYmFzZTsKPiBAQCAtMzkzLDYgKzM5NCwxNCBAQCBzdGF0 aWMgaW50IF9faW5pdCBybWVtX2RtYV9zZXR1cChzdHJ1Y3QgcmVzZXJ2ZWRfbWVtICpybWVtKQo+ ICAgCXJtZW0tPm9wcyA9ICZybWVtX2RtYV9vcHM7Cj4gICAJcHJfaW5mbygiUmVzZXJ2ZWQgbWVt b3J5OiBjcmVhdGVkIERNQSBtZW1vcnkgcG9vbCBhdCAlcGEsIHNpemUgJWxkIE1pQlxuIiwKPiAg IAkJJnJtZW0tPmJhc2UsICh1bnNpZ25lZCBsb25nKXJtZW0tPnNpemUgLyBTWl8xTSk7Cj4gKwo+ ICsJaWYgKElTX0VOQUJMRUQoQ09ORklHX0RNQUJVRl9IRUFQU19DT0hFUkVOVCkpIHsKPiArCQlp bnQgcmV0ID0gZG1hX2hlYXBfY29oZXJlbnRfcmVnaXN0ZXIocm1lbSk7Cj4gKwo+ICsJCWlmIChy ZXQpCj4gKwkJCXByX3dhcm4oIlJlc2VydmVkIG1lbW9yeTogZmFpbGVkIHRvIHJlZ2lzdGVyIGNv aGVyZW50IGhlYXAgZm9yICVzICglZClcbiIsCj4gKwkJCQlybWVtLT5uYW1lID8gcm1lbS0+bmFt ZSA6ICJ1bmtub3duIiwgcmV0KTsKPiArCX0KPiAgIAlyZXR1cm4gMDsKPiAgIH0KPiAgIAo+IAo+ IC0tLQo+IGJhc2UtY29tbWl0OiA2ZGUyM2Y4MWE1ZTA4YmU4ZmJmNWU4ZDdlOWZlYmM3MmE1YjVm MjdmCj4gY2hhbmdlLWlkOiAyMDI2MDIyMy1iNC1kbWFidWYtaGVhcC1jb2hlcmVudC1ybWVtLTkx ZmQzOTI2YWZlOQo+IAo+IEJlc3QgcmVnYXJkcywKCg==