From mboxrd@z Thu Jan 1 00:00:00 1970 From: John Stultz Subject: [PATCH v15 4/5] dma-buf: heaps: Add CMA heap to dmabuf heaps Date: Wed, 6 Nov 2019 04:22:51 +0000 Message-ID: <20191106042252.72452-5-john.stultz@linaro.org> References: <20191106042252.72452-1-john.stultz@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-pl1-x642.google.com (mail-pl1-x642.google.com [IPv6:2607:f8b0:4864:20::642]) by gabe.freedesktop.org (Postfix) with ESMTPS id D662C6EBEA for ; Wed, 6 Nov 2019 04:23:06 +0000 (UTC) Received: by mail-pl1-x642.google.com with SMTP id e3so8691297plt.7 for ; Tue, 05 Nov 2019 20:23:06 -0800 (PST) In-Reply-To: <20191106042252.72452-1-john.stultz@linaro.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: lkml Cc: Hillf Danton , Sudipto Paul , Sandeep Patil , Vincent Donnefort , Chenbo Feng , Alistair Strachan , Liam Mark , Christoph Hellwig , dri-devel@lists.freedesktop.org, "Andrew F . Davis" , Hridya Valsaraju , Pratik Patel List-Id: dri-devel@lists.freedesktop.org VGhpcyBhZGRzIGEgQ01BIGhlYXAsIHdoaWNoIGFsbG93cyB1c2Vyc3BhY2UgdG8gYWxsb2NhdGUK YSBkbWEtYnVmIG9mIGNvbnRpZ3VvdXMgbWVtb3J5IG91dCBvZiBhIENNQSByZWdpb24uCgpUaGlz IGNvZGUgaXMgYW4gZXZvbHV0aW9uIG9mIHRoZSBBbmRyb2lkIElPTiBpbXBsZW1lbnRhdGlvbiwg c28KdGhhbmtzIHRvIGl0cyBvcmlnaW5hbCBhdXRob3IgYW5kIG1haW50YWludGVyczoKICBCZW5q YW1pbiBHYWlnbmFyZCwgTGF1cmEgQWJib3R0LCBhbmQgb3RoZXJzIQoKTk9URTogVGhpcyBwYXRj aCBvbmx5IGFkZHMgdGhlIGRlZmF1bHQgQ01BIGhlYXAuIFdlIHdpbGwgZW5hYmxlCnNlbGVjdGl2 ZWx5IGFkZGluZyBvdGhlciBDTUEgbWVtb3J5IHJlZ2lvbnMgdG8gdGhlIGRtYWJ1ZiBoZWFwcwpp bnRlcmZhY2Ugd2l0aCBhIGxhdGVyIHBhdGNoICh3aGljaCByZXF1aXJlcyBhIGR0IGJpbmRpbmcp CgpDYzogTGF1cmEgQWJib3R0IDxsYWJib3R0QHJlZGhhdC5jb20+CkNjOiBCZW5qYW1pbiBHYWln bmFyZCA8YmVuamFtaW4uZ2FpZ25hcmRAbGluYXJvLm9yZz4KQ2M6IFN1bWl0IFNlbXdhbCA8c3Vt aXQuc2Vtd2FsQGxpbmFyby5vcmc+CkNjOiBMaWFtIE1hcmsgPGxtYXJrQGNvZGVhdXJvcmEub3Jn PgpDYzogUHJhdGlrIFBhdGVsIDxwcmF0aWtwQGNvZGVhdXJvcmEub3JnPgpDYzogQnJpYW4gU3Rh cmtleSA8QnJpYW4uU3RhcmtleUBhcm0uY29tPgpDYzogVmluY2VudCBEb25uZWZvcnQgPFZpbmNl bnQuRG9ubmVmb3J0QGFybS5jb20+CkNjOiBTdWRpcHRvIFBhdWwgPFN1ZGlwdG8uUGF1bEBhcm0u Y29tPgpDYzogQW5kcmV3IEYuIERhdmlzIDxhZmRAdGkuY29tPgpDYzogQ2hyaXN0b3BoIEhlbGx3 aWcgPGhjaEBpbmZyYWRlYWQub3JnPgpDYzogQ2hlbmJvIEZlbmcgPGZlbmdjQGdvb2dsZS5jb20+ CkNjOiBBbGlzdGFpciBTdHJhY2hhbiA8YXN0cmFjaGFuQGdvb2dsZS5jb20+CkNjOiBIcmlkeWEg VmFsc2FyYWp1IDxocmlkeWFAZ29vZ2xlLmNvbT4KQ2M6IFNhbmRlZXAgUGF0aWwgPHNzcGF0aWxA Z29vZ2xlLmNvbT4KQ2M6IEhpbGxmIERhbnRvbiA8aGRhbnRvbkBzaW5hLmNvbT4KQ2M6IERhdmUg QWlybGllIDxhaXJsaWVkQGdtYWlsLmNvbT4KQ2M6IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKUmV2aWV3ZWQtYnk6IEJlbmphbWluIEdhaWduYXJkIDxiZW5qYW1pbi5nYWlnbmFyZEBs aW5hcm8ub3JnPgpSZXZpZXdlZC1ieTogQnJpYW4gU3RhcmtleSA8YnJpYW4uc3RhcmtleUBhcm0u Y29tPgpBY2tlZC1ieTogU2FuZGVlcCBQYXRpbCA8c3NwYXRpbEBhbmRyb2lkLmNvbT4KQWNrZWQt Ynk6IExhdXJhIEFiYm90dCA8bGFiYm90dEByZWRoYXQuY29tPgpUZXN0ZWQtYnk6IEF5YW4gS3Vt YXIgSGFsZGVyIDxheWFuLmhhbGRlckBhcm0uY29tPgpTaWduZWQtb2ZmLWJ5OiBKb2huIFN0dWx0 eiA8am9obi5zdHVsdHpAbGluYXJvLm9yZz4KLS0tCnYyOgoqIFN3aXRjaCBhbGxvY2F0ZSB0byBy ZXR1cm4gZG1hYnVmIGZkCiogU2ltcGxpZnkgaW5pdCBjb2RlCiogQ2hlY2twYXRjaCBmaXh1cHMK djM6CiogU3dpdGNoIHRvIGlubGluZSBmdW5jdGlvbiBmb3IgdG9fY21hX2hlYXAoKQoqIE1pbm9y IGNsZWFudXBzIHN1Z2dlc3RlZCBieSBCcmlhbgoqIEZvbGQgaW4gbmV3IHJlZ2lzdHJhdGlvbiBz dHlsZSBmcm9tIEFuZHJldwoqIEZvbGRlZCBpbiBjaGFuZ2VzIGZyb20gQW5kcmV3IHRvIHVzZSBz aW1wbGlmaWVkIHBhZ2UgbGlzdAogIGZyb20gdGhlIGhlYXAgaGVscGVycwp2NDoKKiBVc2UgdGhl IGZkX2ZsYWdzIHdoZW4gY3JlYXRpbmcgZG1hYnVmIGZkIChTdWdnZXN0ZWQgYnkKICBCZW5qYW1p bikKKiBVc2UgcHJlY2FsY3VsYXRlZCBwYWdlY291bnQgKFN1Z2dlc3RlZCBieSBBbmRyZXcpCnY2 OgoqIENoYW5nZWQgdmFyaWFibGUgbmFtZXMgdG8gaW1wcm92ZSBjbGFyaXR5LCBhcyBzdWdnZXN0 ZWQKICBieSBCcmlhbgp2NzoKKiBVc2UgbmV3bHkgbG93ZXItY2FzZWQgaW5pdF9oZWFwX2hlbHBl cl9idWZmZXIgaGVscGVyCiogVXNlIG5ldyBkbWFidWYgZXhwb3J0IGhlbHBlcgp2ODoKKiBNYWtl IHN0cnVjdCBkbWFfaGVhcF9vcHMgY29uc3QgKFN1Z2dlc3RlZCBieSBDaHJpc3RvcGgpCiogQ29u ZGVuc2UgZG1hX2hlYXBfYnVmZmVyIGFuZCBoZWFwX2hlbHBlcl9idWZmZXIgKHN1Z2dlc3RlZCBi eQogIENocmlzdG9waCkKKiBDaGVja3BhdGNoIHdoaXRlc3BhY2UgZml4dXBzCnY5OgoqIFJlbW92 aW5nIG5lZWRsZXNzIGNoZWNrIG5vdGVkIGJ5IEJyaWFuIFN0YXJrZXkKKiBSZW5hbWUgZG1hX2hl YXBfZ2V0X2RhdGEtPmRtYV9oZWFwX2dldF9kcnZkYXRhIHN1Z2dlc3RlZAogIGJ5IEhpbGYgRGFu dG9uCiogQ2hlY2sgc2lnbmFscyBhZnRlciBjbGVhcmluZyBtZW1vcnkgcGFnZXMgdG8gYXZvaWQg ZG9pbmcKICBuZWVkbGVzcyB3b3JrIGlmIHRoZSB0YXNrIGlzIGtpbGxlZCBhcyBzdWdnZXN0ZWQg YnkgSGlsZgp2MTI6CiogUmV3b3JrIHRvIG9ubHkgYWRkIHRoZSBkZWZhdWx0IENNQSBoZWFwCnYx NToKKiBEcm9wIHVudXNlZCBmbGFncyBmaWVsZCBmcm9tIGhlYXBfaGVscGVyX2J1ZmZlciBhcyBz dWdnZXN0ZWQKICBieSBTYW5kZWVwIFBhdGlsCi0tLQogZHJpdmVycy9kbWEtYnVmL2hlYXBzL0tj b25maWcgICAgfCAgIDggKysKIGRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9NYWtlZmlsZSAgIHwgICAx ICsKIGRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9jbWFfaGVhcC5jIHwgMTc3ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgMTg2IGluc2VydGlvbnMoKykKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS1idWYvaGVhcHMvY21hX2hlYXAuYwoKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9LY29uZmlnIGIvZHJpdmVycy9kbWEtYnVmL2hl YXBzL0tjb25maWcKaW5kZXggMjA1MDUyNzQ0MTY5Li5hNWVlZjA2YzQyMjYgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9oZWFw cy9LY29uZmlnCkBAIC00LDMgKzQsMTEgQEAgY29uZmlnIERNQUJVRl9IRUFQU19TWVNURU0KIAlo ZWxwCiAJICBDaG9vc2UgdGhpcyBvcHRpb24gdG8gZW5hYmxlIHRoZSBzeXN0ZW0gZG1hYnVmIGhl YXAuIFRoZSBzeXN0ZW0gaGVhcAogCSAgaXMgYmFja2VkIGJ5IHBhZ2VzIGZyb20gdGhlIGJ1ZGR5 IGFsbG9jYXRvci4gSWYgaW4gZG91YnQsIHNheSBZLgorCitjb25maWcgRE1BQlVGX0hFQVBTX0NN QQorCWJvb2wgIkRNQS1CVUYgQ01BIEhlYXAiCisJZGVwZW5kcyBvbiBETUFCVUZfSEVBUFMgJiYg RE1BX0NNQQorCWhlbHAKKwkgIENob29zZSB0aGlzIG9wdGlvbiB0byBlbmFibGUgZG1hLWJ1ZiBD TUEgaGVhcC4gVGhpcyBoZWFwIGlzIGJhY2tlZAorCSAgYnkgdGhlIENvbnRpZ3VvdXMgTWVtb3J5 IEFsbG9jYXRvciAoQ01BKS4gSWYgeW91ciBzeXN0ZW0gaGFzIHRoZXNlCisJICByZWdpb25zLCB5 b3Ugc2hvdWxkIHNheSBZIGhlcmUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvaGVhcHMv TWFrZWZpbGUgYi9kcml2ZXJzL2RtYS1idWYvaGVhcHMvTWFrZWZpbGUKaW5kZXggZDE4MDhlY2Ey NTgxLi42ZTU0Y2RlYzNkYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9NYWtl ZmlsZQorKysgYi9kcml2ZXJzL2RtYS1idWYvaGVhcHMvTWFrZWZpbGUKQEAgLTEsMyArMSw0IEBA CiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiBvYmoteQkJCQkJKz0gaGVhcC1o ZWxwZXJzLm8KIG9iai0kKENPTkZJR19ETUFCVUZfSEVBUFNfU1lTVEVNKQkrPSBzeXN0ZW1faGVh cC5vCitvYmotJChDT05GSUdfRE1BQlVGX0hFQVBTX0NNQSkJCSs9IGNtYV9oZWFwLm8KZGlmZiAt LWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9jbWFfaGVhcC5jIGIvZHJpdmVycy9kbWEtYnVm L2hlYXBzL2NtYV9oZWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw Li42MjZjZjdmZDAzM2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS1idWYvaGVhcHMv Y21hX2hlYXAuYwpAQCAtMCwwICsxLDE3NyBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAKKy8qCisgKiBETUFCVUYgQ01BIGhlYXAgZXhwb3J0ZXIKKyAqCisgKiBDb3B5cmln aHQgKEMpIDIwMTIsIDIwMTkgTGluYXJvIEx0ZC4KKyAqIEF1dGhvcjogPGJlbmphbWluLmdhaWdu YXJkQGxpbmFyby5vcmc+IGZvciBTVC1Fcmljc3Nvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgv Y21hLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLWJ1 Zi5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1oZWFwLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLWNv bnRpZ3VvdXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJu by5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUu aD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3Qu aD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC9zaWduYWwuaD4KKworI2luY2x1ZGUgImhlYXAtaGVs cGVycy5oIgorCitzdHJ1Y3QgY21hX2hlYXAgeworCXN0cnVjdCBkbWFfaGVhcCAqaGVhcDsKKwlz dHJ1Y3QgY21hICpjbWE7Cit9OworCitzdGF0aWMgdm9pZCBjbWFfaGVhcF9mcmVlKHN0cnVjdCBo ZWFwX2hlbHBlcl9idWZmZXIgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgY21hX2hlYXAgKmNtYV9oZWFw ID0gZG1hX2hlYXBfZ2V0X2RydmRhdGEoYnVmZmVyLT5oZWFwKTsKKwl1bnNpZ25lZCBsb25nIG5y X3BhZ2VzID0gYnVmZmVyLT5wYWdlY291bnQ7CisJc3RydWN0IHBhZ2UgKmNtYV9wYWdlcyA9IGJ1 ZmZlci0+cHJpdl92aXJ0OworCisJLyogZnJlZSBwYWdlIGxpc3QgKi8KKwlrZnJlZShidWZmZXIt PnBhZ2VzKTsKKwkvKiByZWxlYXNlIG1lbW9yeSAqLworCWNtYV9yZWxlYXNlKGNtYV9oZWFwLT5j bWEsIGNtYV9wYWdlcywgbnJfcGFnZXMpOworCWtmcmVlKGJ1ZmZlcik7Cit9CisKKy8qIGRtYWJ1 ZiBoZWFwIENNQSBvcGVyYXRpb25zIGZ1bmN0aW9ucyAqLworc3RhdGljIGludCBjbWFfaGVhcF9h bGxvY2F0ZShzdHJ1Y3QgZG1hX2hlYXAgKmhlYXAsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgbGVu LAorCQkJICAgICB1bnNpZ25lZCBsb25nIGZkX2ZsYWdzLAorCQkJICAgICB1bnNpZ25lZCBsb25n IGhlYXBfZmxhZ3MpCit7CisJc3RydWN0IGNtYV9oZWFwICpjbWFfaGVhcCA9IGRtYV9oZWFwX2dl dF9kcnZkYXRhKGhlYXApOworCXN0cnVjdCBoZWFwX2hlbHBlcl9idWZmZXIgKmhlbHBlcl9idWZm ZXI7CisJc3RydWN0IHBhZ2UgKmNtYV9wYWdlczsKKwlzaXplX3Qgc2l6ZSA9IFBBR0VfQUxJR04o bGVuKTsKKwl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gc2l6ZSA+PiBQQUdFX1NISUZUOworCXVu c2lnbmVkIGxvbmcgYWxpZ24gPSBnZXRfb3JkZXIoc2l6ZSk7CisJc3RydWN0IGRtYV9idWYgKmRt YWJ1ZjsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKwlwZ29mZl90IHBnOworCisJaWYgKGFsaWduID4g Q09ORklHX0NNQV9BTElHTk1FTlQpCisJCWFsaWduID0gQ09ORklHX0NNQV9BTElHTk1FTlQ7CisK KwloZWxwZXJfYnVmZmVyID0ga3phbGxvYyhzaXplb2YoKmhlbHBlcl9idWZmZXIpLCBHRlBfS0VS TkVMKTsKKwlpZiAoIWhlbHBlcl9idWZmZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJaW5pdF9o ZWFwX2hlbHBlcl9idWZmZXIoaGVscGVyX2J1ZmZlciwgY21hX2hlYXBfZnJlZSk7CisJaGVscGVy X2J1ZmZlci0+aGVhcCA9IGhlYXA7CisJaGVscGVyX2J1ZmZlci0+c2l6ZSA9IGxlbjsKKworCWNt YV9wYWdlcyA9IGNtYV9hbGxvYyhjbWFfaGVhcC0+Y21hLCBucl9wYWdlcywgYWxpZ24sIGZhbHNl KTsKKwlpZiAoIWNtYV9wYWdlcykKKwkJZ290byBmcmVlX2J1ZjsKKworCWlmIChQYWdlSGlnaE1l bShjbWFfcGFnZXMpKSB7CisJCXVuc2lnbmVkIGxvbmcgbnJfY2xlYXJfcGFnZXMgPSBucl9wYWdl czsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBjbWFfcGFnZXM7CisKKwkJd2hpbGUgKG5yX2NsZWFy X3BhZ2VzID4gMCkgeworCQkJdm9pZCAqdmFkZHIgPSBrbWFwX2F0b21pYyhwYWdlKTsKKworCQkJ bWVtc2V0KHZhZGRyLCAwLCBQQUdFX1NJWkUpOworCQkJa3VubWFwX2F0b21pYyh2YWRkcik7CisJ CQkvKgorCQkJICogQXZvaWQgd2FzdGluZyB0aW1lIHplcm9pbmcgbWVtb3J5IGlmIHRoZSBwcm9j ZXNzCisJCQkgKiBoYXMgYmVlbiBraWxsZWQgYnkgYnkgU0lHS0lMTAorCQkJICovCisJCQlpZiAo ZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQkJZ290byBmcmVlX2NtYTsKKworCQkJ cGFnZSsrOworCQkJbnJfY2xlYXJfcGFnZXMtLTsKKwkJfQorCX0gZWxzZSB7CisJCW1lbXNldChw YWdlX2FkZHJlc3MoY21hX3BhZ2VzKSwgMCwgc2l6ZSk7CisJfQorCisJaGVscGVyX2J1ZmZlci0+ cGFnZWNvdW50ID0gbnJfcGFnZXM7CisJaGVscGVyX2J1ZmZlci0+cGFnZXMgPSBrbWFsbG9jX2Fy cmF5KGhlbHBlcl9idWZmZXItPnBhZ2Vjb3VudCwKKwkJCQkJICAgICBzaXplb2YoKmhlbHBlcl9i dWZmZXItPnBhZ2VzKSwKKwkJCQkJICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIWhlbHBlcl9idWZm ZXItPnBhZ2VzKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZnJlZV9jbWE7CisJfQorCisJ Zm9yIChwZyA9IDA7IHBnIDwgaGVscGVyX2J1ZmZlci0+cGFnZWNvdW50OyBwZysrKQorCQloZWxw ZXJfYnVmZmVyLT5wYWdlc1twZ10gPSAmY21hX3BhZ2VzW3BnXTsKKworCS8qIGNyZWF0ZSB0aGUg ZG1hYnVmICovCisJZG1hYnVmID0gaGVhcF9oZWxwZXJfZXhwb3J0X2RtYWJ1ZihoZWxwZXJfYnVm ZmVyLCBmZF9mbGFncyk7CisJaWYgKElTX0VSUihkbWFidWYpKSB7CisJCXJldCA9IFBUUl9FUlIo ZG1hYnVmKTsKKwkJZ290byBmcmVlX3BhZ2VzOworCX0KKworCWhlbHBlcl9idWZmZXItPmRtYWJ1 ZiA9IGRtYWJ1ZjsKKwloZWxwZXJfYnVmZmVyLT5wcml2X3ZpcnQgPSBjbWFfcGFnZXM7CisKKwly ZXQgPSBkbWFfYnVmX2ZkKGRtYWJ1ZiwgZmRfZmxhZ3MpOworCWlmIChyZXQgPCAwKSB7CisJCWRt YV9idWZfcHV0KGRtYWJ1Zik7CisJCS8qIGp1c3QgcmV0dXJuLCBhcyBwdXQgd2lsbCBjYWxsIHJl bGVhc2UgYW5kIHRoYXQgd2lsbCBmcmVlICovCisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJu IHJldDsKKworZnJlZV9wYWdlczoKKwlrZnJlZShoZWxwZXJfYnVmZmVyLT5wYWdlcyk7CitmcmVl X2NtYToKKwljbWFfcmVsZWFzZShjbWFfaGVhcC0+Y21hLCBjbWFfcGFnZXMsIG5yX3BhZ2VzKTsK K2ZyZWVfYnVmOgorCWtmcmVlKGhlbHBlcl9idWZmZXIpOworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2hlYXBfb3BzIGNtYV9oZWFwX29wcyA9IHsKKwkuYWxsb2Nh dGUgPSBjbWFfaGVhcF9hbGxvY2F0ZSwKK307CisKK3N0YXRpYyBpbnQgX19hZGRfY21hX2hlYXAo c3RydWN0IGNtYSAqY21hLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBjbWFfaGVhcCAqY21hX2hl YXA7CisJc3RydWN0IGRtYV9oZWFwX2V4cG9ydF9pbmZvIGV4cF9pbmZvOworCisJY21hX2hlYXAg PSBremFsbG9jKHNpemVvZigqY21hX2hlYXApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNtYV9oZWFw KQorCQlyZXR1cm4gLUVOT01FTTsKKwljbWFfaGVhcC0+Y21hID0gY21hOworCisJZXhwX2luZm8u bmFtZSA9IGNtYV9nZXRfbmFtZShjbWEpOworCWV4cF9pbmZvLm9wcyA9ICZjbWFfaGVhcF9vcHM7 CisJZXhwX2luZm8ucHJpdiA9IGNtYV9oZWFwOworCisJY21hX2hlYXAtPmhlYXAgPSBkbWFfaGVh cF9hZGQoJmV4cF9pbmZvKTsKKwlpZiAoSVNfRVJSKGNtYV9oZWFwLT5oZWFwKSkgeworCQlpbnQg cmV0ID0gUFRSX0VSUihjbWFfaGVhcC0+aGVhcCk7CisKKwkJa2ZyZWUoY21hX2hlYXApOworCQly ZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkZF9kZWZhdWx0 X2NtYV9oZWFwKHZvaWQpCit7CisJc3RydWN0IGNtYSAqZGVmYXVsdF9jbWEgPSBkZXZfZ2V0X2Nt YV9hcmVhKE5VTEwpOworCWludCByZXQgPSAwOworCisJaWYgKGRlZmF1bHRfY21hKQorCQlyZXQg PSBfX2FkZF9jbWFfaGVhcChkZWZhdWx0X2NtYSwgTlVMTCk7CisKKwlyZXR1cm4gcmV0OworfQor bW9kdWxlX2luaXQoYWRkX2RlZmF1bHRfY21hX2hlYXApOworTU9EVUxFX0RFU0NSSVBUSU9OKCJE TUEtQlVGIENNQSBIZWFwIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Ci0tIAoyLjE3LjEK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZl bCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbA==