From mboxrd@z Thu Jan 1 00:00:00 1970 From: John Stultz Subject: [EARLY RFC][PATCH 3/4] dma-buf: pools: Add system/system-contig pools to dmabuf pools Date: Wed, 20 Feb 2019 23:40:29 -0800 Message-ID: <1550734830-23499-4-git-send-email-john.stultz@linaro.org> References: <1550734830-23499-1-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 mail-pg1-x541.google.com (mail-pg1-x541.google.com [IPv6:2607:f8b0:4864:20::541]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3F67B89364 for ; Thu, 21 Feb 2019 07:40:39 +0000 (UTC) Received: by mail-pg1-x541.google.com with SMTP id y4so13356778pgc.12 for ; Wed, 20 Feb 2019 23:40:39 -0800 (PST) In-Reply-To: <1550734830-23499-1-git-send-email-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: Laura Abbott Cc: Chenbo Feng , Alistair Strachan , Liam Mark , "Andrew F . Davis" , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org VGhpcyBwYXRjaCBhZGRzIHN5c3RlbSBhbmQgc3lzdGVtLWNvbnRpZyBwb29scyB0byB0aGUgZG1h LWJ1Zgpwb29scyBmcmFtZXdvcmsuCgpUaGlzIGFsbG93cyBhcHBsaWNhdGlvbnMgdG8gZ2V0IGEg cGFnZS1hbGxvY2F0b3IgYmFja2VkCmRtYS1idWYsIG9mIGVpdGhlciBub24tY29udGlndW91cyBv ciBjb250aWd1b3VzIG1lbW9yeS4KCkNjOiBMYXVyYSBBYmJvdHQgPGxhYmJvdHRAcmVkaGF0LmNv bT4KQ2M6IEJlbmphbWluIEdhaWduYXJkIDxiZW5qYW1pbi5nYWlnbmFyZEBsaW5hcm8ub3JnPgpD YzogU3VtaXQgU2Vtd2FsIDxzdW1pdC5zZW13YWxAbGluYXJvLm9yZz4KQ2M6IExpYW0gTWFyayA8 bG1hcmtAY29kZWF1cm9yYS5vcmc+CkNjOiBCcmlhbiBTdGFya2V5IDxCcmlhbi5TdGFya2V5QGFy bS5jb20+CkNjOiBBbmRyZXcgRi4gRGF2aXMgPGFmZEB0aS5jb20+CkNjOiBDaGVuYm8gRmVuZyA8 ZmVuZ2NAZ29vZ2xlLmNvbT4KQ2M6IEFsaXN0YWlyIFN0cmFjaGFuIDxhc3RyYWNoYW5AZ29vZ2xl LmNvbT4KQ2M6IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKU2lnbmVkLW9mZi1ieTog Sm9obiBTdHVsdHogPGpvaG4uc3R1bHR6QGxpbmFyby5vcmc+Ci0tLQogZHJpdmVycy9kbWEtYnVm L3Bvb2xzL0tjb25maWcgICAgICAgfCAgIDcgKwogZHJpdmVycy9kbWEtYnVmL3Bvb2xzL01ha2Vm aWxlICAgICAgfCAgIDEgKwogZHJpdmVycy9kbWEtYnVmL3Bvb2xzL3N5c3RlbV9wb29sLmMgfCAz NzQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQs IDM4MiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9kbWEtYnVmL3Bv b2xzL3N5c3RlbV9wb29sLmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvcG9vbHMvS2Nv bmZpZyBiL2RyaXZlcnMvZG1hLWJ1Zi9wb29scy9LY29uZmlnCmluZGV4IGNhYTdlYjguLjc4N2Iy YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hLWJ1Zi9wb29scy9LY29uZmlnCisrKyBiL2RyaXZl cnMvZG1hLWJ1Zi9wb29scy9LY29uZmlnCkBAIC04LDMgKzgsMTAgQEAgbWVudWNvbmZpZyBETUFC VUZfUE9PTFMKIAkgIHdoaWNoIGFsbG93IHVzZXJzcGFjZSB0byBhbGxvY2F0ZSBkbWEtYnVmcyB0 aGF0IGNhbiBiZSBzaGFyZWQgYmV0d2VlbgogCSAgZHJpdmVycy4KIAkgIElmIHlvdSdyZSBub3Qg dXNpbmcgQW5kcm9pZCBpdHMgcHJvYmFibHkgc2FmZSB0byBzYXkgTiBoZXJlLgorCitjb25maWcg RE1BQlVGX1BPT0xTX1NZU1RFTQorCWJvb2wgIkRNQS1CVUYgU3lzdGVtIFBvb2wiCisJZGVwZW5k cyBvbiBETUFCVUZfUE9PTFMKKwloZWxwCisJICBDaG9vc2UgdGhpcyBvcHRpb24gdG8gZW5hYmxl IHRoZSBzeXN0ZW0gZG1hYnVmIHBvb2wuIFRoZSBzeXN0ZW0gcG9vbAorCSAgaXMgYmFja2VkIGJ5 IHBhZ2VzIGZyb20gdGhlIGJ1ZGR5IGFsbG9jYXRvci4gSWYgaW4gZG91YnQsIHNheSBZLgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL3Bvb2xzL01ha2VmaWxlIGIvZHJpdmVycy9kbWEtYnVm L3Bvb2xzL01ha2VmaWxlCmluZGV4IGE1MWVjMjUuLjJjY2YyYTEgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZG1hLWJ1Zi9wb29scy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2RtYS1idWYvcG9vbHMvTWFr ZWZpbGUKQEAgLTEsMiArMSwzIEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w CiBvYmotJChDT05GSUdfRE1BQlVGX1BPT0xTKQkJKz0gZG1hYnVmLXBvb2xzLm8gcG9vbC1pb2N0 bC5vIHBvb2wtaGVscGVycy5vIHBhZ2VfcG9vbC5vCitvYmotJChDT05GSUdfRE1BQlVGX1BPT0xT X1NZU1RFTSkJKz0gc3lzdGVtX3Bvb2wubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL3Bv b2xzL3N5c3RlbV9wb29sLmMgYi9kcml2ZXJzL2RtYS1idWYvcG9vbHMvc3lzdGVtX3Bvb2wuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzU2OTkwCi0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9kbWEtYnVmL3Bvb2xzL3N5c3RlbV9wb29sLmMKQEAgLTAsMCArMSwzNzQg QEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogZHJpdmVycy9k bWEtYnVmL3Bvb2xzL3N5c3RlbV9wb29sLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v Z2xlLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgTGluYXJvIEx0ZC4KKyAqLworCisjaW5j bHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1 ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxs aW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGlu dXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlICJkbWFidWYt cG9vbHMuaCIKKworI2RlZmluZSBOVU1fT1JERVJTIEFSUkFZX1NJWkUob3JkZXJzKQorCitzdGF0 aWMgZ2ZwX3QgaGlnaF9vcmRlcl9nZnBfZmxhZ3MgPSAoR0ZQX0hJR0hVU0VSIHwgX19HRlBfWkVS TyB8IF9fR0ZQX05PV0FSTiB8CisJCQkJICAgICBfX0dGUF9OT1JFVFJZKSAmIH5fX0dGUF9SRUNM QUlNOworc3RhdGljIGdmcF90IGxvd19vcmRlcl9nZnBfZmxhZ3MgID0gR0ZQX0hJR0hVU0VSIHwg X19HRlBfWkVSTzsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgb3JkZXJzW10gPSB7OCwgNCwg MH07CisKK3N0YXRpYyBpbnQgb3JkZXJfdG9faW5kZXgodW5zaWduZWQgaW50IG9yZGVyKQorewor CWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9PUkRFUlM7IGkrKykKKwkJaWYgKG9yZGVy ID09IG9yZGVyc1tpXSkKKwkJCXJldHVybiBpOworCVdBUk5fT04oMSk7CisJcmV0dXJuIC0xOwor fQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvcmRlcl90b19zaXplKGludCBvcmRlcikK K3sKKwlyZXR1cm4gUEFHRV9TSVpFIDw8IG9yZGVyOworfQorCitzdHJ1Y3Qgc3lzdGVtX3Bvb2wg eworCXN0cnVjdCBkbWFidWZfcG9vbCBwb29sOworCXN0cnVjdCBkbWFidWZfcGFnZV9wb29sICpw YWdlX3Bvb2xzW05VTV9PUkRFUlNdOworfTsKKworc3RhdGljIHN0cnVjdCBwYWdlICphbGxvY19i dWZmZXJfcGFnZShzdHJ1Y3Qgc3lzdGVtX3Bvb2wgKnN5c19wb29sLAorCQkJCSAgICAgIHN0cnVj dCBkbWFidWZfcG9vbF9idWZmZXIgKmJ1ZmZlciwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIG9y ZGVyKQoreworCXN0cnVjdCBkbWFidWZfcGFnZV9wb29sICpwYWdlcG9vbCA9CisJCQkJc3lzX3Bv b2wtPnBhZ2VfcG9vbHNbb3JkZXJfdG9faW5kZXgob3JkZXIpXTsKKworCXJldHVybiBkbWFidWZf cGFnZV9wb29sX2FsbG9jKHBhZ2Vwb29sKTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9idWZmZXJf cGFnZShzdHJ1Y3Qgc3lzdGVtX3Bvb2wgKnN5c19wb29sLAorCQkJICAgICBzdHJ1Y3QgZG1hYnVm X3Bvb2xfYnVmZmVyICpidWZmZXIsCisJCQkgICAgIHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0 cnVjdCBkbWFidWZfcGFnZV9wb29sICpwYWdlcG9vbDsKKwl1bnNpZ25lZCBpbnQgb3JkZXIgPSBj b21wb3VuZF9vcmRlcihwYWdlKTsKKworCS8qIGdvIHRvIHN5c3RlbSAqLworCWlmIChidWZmZXIt PnByaXZhdGVfZmxhZ3MgJiBETUFCVUZfUE9PTF9QUklWX0ZMQUdfU0hSSU5LRVJfRlJFRSkgewor CQlfX2ZyZWVfcGFnZXMocGFnZSwgb3JkZXIpOworCQlyZXR1cm47CisJfQorCisJcGFnZXBvb2wg PSBzeXNfcG9vbC0+cGFnZV9wb29sc1tvcmRlcl90b19pbmRleChvcmRlcildOworCisJZG1hYnVm X3BhZ2VfcG9vbF9mcmVlKHBhZ2Vwb29sLCBwYWdlKTsKK30KKworc3RhdGljIHN0cnVjdCBwYWdl ICphbGxvY19sYXJnZXN0X2F2YWlsYWJsZShzdHJ1Y3Qgc3lzdGVtX3Bvb2wgKnN5c19wb29sLAor CQkJCQkgICAgc3RydWN0IGRtYWJ1Zl9wb29sX2J1ZmZlciAqYnVmZmVyLAorCQkJCQkgICAgdW5z aWduZWQgbG9uZyBzaXplLAorCQkJCQkgICAgdW5zaWduZWQgaW50IG1heF9vcmRlcikKK3sKKwlz dHJ1Y3QgcGFnZSAqcGFnZTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fT1JERVJT OyBpKyspIHsKKwkJaWYgKHNpemUgPCBvcmRlcl90b19zaXplKG9yZGVyc1tpXSkpCisJCQljb250 aW51ZTsKKwkJaWYgKG1heF9vcmRlciA8IG9yZGVyc1tpXSkKKwkJCWNvbnRpbnVlOworCisJCXBh Z2UgPSBhbGxvY19idWZmZXJfcGFnZShzeXNfcG9vbCwgYnVmZmVyLCBvcmRlcnNbaV0pOworCQlp ZiAoIXBhZ2UpCisJCQljb250aW51ZTsKKworCQlyZXR1cm4gcGFnZTsKKwl9CisKKwlyZXR1cm4g TlVMTDsKK30KKworc3RhdGljIGludCBzeXN0ZW1fcG9vbF9hbGxvY2F0ZShzdHJ1Y3QgZG1hYnVm X3Bvb2wgKnBvb2wsCisJCQkJICAgIHN0cnVjdCBkbWFidWZfcG9vbF9idWZmZXIgKmJ1ZmZlciwK KwkJCQkgICAgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIGZsYWdz KQoreworCXN0cnVjdCBzeXN0ZW1fcG9vbCAqc3lzX3Bvb2wgPSBjb250YWluZXJfb2YocG9vbCwK KwkJCQkJCQlzdHJ1Y3Qgc3lzdGVtX3Bvb2wsCisJCQkJCQkJcG9vbCk7CisJc3RydWN0IHNnX3Rh YmxlICp0YWJsZTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCXN0cnVjdCBsaXN0X2hlYWQg cGFnZXM7CisJc3RydWN0IHBhZ2UgKnBhZ2UsICp0bXBfcGFnZTsKKwlpbnQgaSA9IDA7CisJdW5z aWduZWQgbG9uZyBzaXplX3JlbWFpbmluZyA9IFBBR0VfQUxJR04oc2l6ZSk7CisJdW5zaWduZWQg aW50IG1heF9vcmRlciA9IG9yZGVyc1swXTsKKworCWlmIChzaXplIC8gUEFHRV9TSVpFID4gdG90 YWxyYW1fcGFnZXMoKSAvIDIpCisJCXJldHVybiAtRU5PTUVNOworCisJSU5JVF9MSVNUX0hFQUQo JnBhZ2VzKTsKKwl3aGlsZSAoc2l6ZV9yZW1haW5pbmcgPiAwKSB7CisJCXBhZ2UgPSBhbGxvY19s YXJnZXN0X2F2YWlsYWJsZShzeXNfcG9vbCwgYnVmZmVyLCBzaXplX3JlbWFpbmluZywKKwkJCQkJ ICAgICAgIG1heF9vcmRlcik7CisJCWlmICghcGFnZSkKKwkJCWdvdG8gZnJlZV9wYWdlczsKKwkJ bGlzdF9hZGRfdGFpbCgmcGFnZS0+bHJ1LCAmcGFnZXMpOworCQlzaXplX3JlbWFpbmluZyAtPSBQ QUdFX1NJWkUgPDwgY29tcG91bmRfb3JkZXIocGFnZSk7CisJCW1heF9vcmRlciA9IGNvbXBvdW5k X29yZGVyKHBhZ2UpOworCQlpKys7CisJfQorCXRhYmxlID0ga21hbGxvYyhzaXplb2YoKnRhYmxl KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0YWJsZSkKKwkJZ290byBmcmVlX3BhZ2VzOworCisJaWYg KHNnX2FsbG9jX3RhYmxlKHRhYmxlLCBpLCBHRlBfS0VSTkVMKSkKKwkJZ290byBmcmVlX3RhYmxl OworCisJc2cgPSB0YWJsZS0+c2dsOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwYWdlLCB0 bXBfcGFnZSwgJnBhZ2VzLCBscnUpIHsKKwkJc2dfc2V0X3BhZ2Uoc2csIHBhZ2UsIFBBR0VfU0la RSA8PCBjb21wb3VuZF9vcmRlcihwYWdlKSwgMCk7CisJCXNnID0gc2dfbmV4dChzZyk7CisJCWxp c3RfZGVsKCZwYWdlLT5scnUpOworCX0KKworCWJ1ZmZlci0+c2dfdGFibGUgPSB0YWJsZTsKKwly ZXR1cm4gMDsKKworZnJlZV90YWJsZToKKwlrZnJlZSh0YWJsZSk7CitmcmVlX3BhZ2VzOgorCWxp c3RfZm9yX2VhY2hfZW50cnlfc2FmZShwYWdlLCB0bXBfcGFnZSwgJnBhZ2VzLCBscnUpCisJCWZy ZWVfYnVmZmVyX3BhZ2Uoc3lzX3Bvb2wsIGJ1ZmZlciwgcGFnZSk7CisJcmV0dXJuIC1FTk9NRU07 Cit9CisKK3N0YXRpYyB2b2lkIHN5c3RlbV9wb29sX2ZyZWUoc3RydWN0IGRtYWJ1Zl9wb29sX2J1 ZmZlciAqYnVmZmVyKQoreworCXN0cnVjdCBzeXN0ZW1fcG9vbCAqc3lzX3Bvb2wgPSBjb250YWlu ZXJfb2YoYnVmZmVyLT5wb29sLAorCQkJCQkJCXN0cnVjdCBzeXN0ZW1fcG9vbCwKKwkJCQkJCQlw b29sKTsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnRhYmxlID0gYnVmZmVyLT5zZ190YWJsZTsKKwlzdHJ1 Y3Qgc2NhdHRlcmxpc3QgKnNnOworCWludCBpOworCisJLyogemVybyB0aGUgYnVmZmVyIGJlZm9y ZSBnb3RvIHBhZ2UgcG9vbCAqLworCWlmICghKGJ1ZmZlci0+cHJpdmF0ZV9mbGFncyAmIERNQUJV Rl9QT09MX1BSSVZfRkxBR19TSFJJTktFUl9GUkVFKSkKKwkJZG1hYnVmX3Bvb2xfYnVmZmVyX3pl cm8oYnVmZmVyKTsKKworCWZvcl9lYWNoX3NnKHRhYmxlLT5zZ2wsIHNnLCB0YWJsZS0+bmVudHMs IGkpCisJCWZyZWVfYnVmZmVyX3BhZ2Uoc3lzX3Bvb2wsIGJ1ZmZlciwgc2dfcGFnZShzZykpOwor CXNnX2ZyZWVfdGFibGUodGFibGUpOworCWtmcmVlKHRhYmxlKTsKK30KKworc3RhdGljIGludCBz eXN0ZW1fcG9vbF9zaHJpbmsoc3RydWN0IGRtYWJ1Zl9wb29sICpwb29sLCBnZnBfdCBnZnBfbWFz aywKKwkJCQkgIGludCBucl90b19zY2FuKQoreworCXN0cnVjdCBkbWFidWZfcGFnZV9wb29sICpw YWdlX3Bvb2w7CisJc3RydWN0IHN5c3RlbV9wb29sICpzeXNfcG9vbDsKKwlpbnQgbnJfdG90YWwg PSAwOworCWludCBpLCBucl9mcmVlZDsKKwlpbnQgb25seV9zY2FuID0gMDsKKworCXN5c19wb29s ID0gY29udGFpbmVyX29mKHBvb2wsIHN0cnVjdCBzeXN0ZW1fcG9vbCwgcG9vbCk7CisKKwlpZiAo IW5yX3RvX3NjYW4pCisJCW9ubHlfc2NhbiA9IDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX09S REVSUzsgaSsrKSB7CisJCXBhZ2VfcG9vbCA9IHN5c19wb29sLT5wYWdlX3Bvb2xzW2ldOworCisJ CWlmIChvbmx5X3NjYW4pIHsKKwkJCW5yX3RvdGFsICs9IGRtYWJ1Zl9wYWdlX3Bvb2xfc2hyaW5r KHBhZ2VfcG9vbCwKKwkJCQkJCQkgZ2ZwX21hc2ssCisJCQkJCQkJIG5yX3RvX3NjYW4pOworCisJ CX0gZWxzZSB7CisJCQlucl9mcmVlZCA9IGRtYWJ1Zl9wYWdlX3Bvb2xfc2hyaW5rKHBhZ2VfcG9v bCwKKwkJCQkJCQlnZnBfbWFzaywKKwkJCQkJCQlucl90b19zY2FuKTsKKwkJCW5yX3RvX3NjYW4g LT0gbnJfZnJlZWQ7CisJCQlucl90b3RhbCArPSBucl9mcmVlZDsKKwkJCWlmIChucl90b19zY2Fu IDw9IDApCisJCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIG5yX3RvdGFsOworfQorCitzdGF0 aWMgc3RydWN0IGRtYWJ1Zl9wb29sX29wcyBzeXN0ZW1fcG9vbF9vcHMgPSB7CisJLmFsbG9jYXRl ID0gc3lzdGVtX3Bvb2xfYWxsb2NhdGUsCisJLmZyZWUgPSBzeXN0ZW1fcG9vbF9mcmVlLAorCS5t YXBfa2VybmVsID0gZG1hYnVmX3Bvb2xfbWFwX2tlcm5lbCwKKwkudW5tYXBfa2VybmVsID0gZG1h YnVmX3Bvb2xfdW5tYXBfa2VybmVsLAorCS5tYXBfdXNlciA9IGRtYWJ1Zl9wb29sX21hcF91c2Vy LAorCS5zaHJpbmsgPSBzeXN0ZW1fcG9vbF9zaHJpbmssCit9OworCitzdGF0aWMgdm9pZCBzeXN0 ZW1fcG9vbF9kZXN0cm95X3Bvb2xzKHN0cnVjdCBkbWFidWZfcGFnZV9wb29sICoqcGFnZV9wb29s cykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fT1JERVJTOyBpKyspCisJCWlm IChwYWdlX3Bvb2xzW2ldKQorCQkJZG1hYnVmX3BhZ2VfcG9vbF9kZXN0cm95KHBhZ2VfcG9vbHNb aV0pOworfQorCitzdGF0aWMgaW50IHN5c3RlbV9wb29sX2NyZWF0ZV9wb29scyhzdHJ1Y3QgZG1h YnVmX3BhZ2VfcG9vbCAqKnBhZ2VfcG9vbHMpCit7CisJaW50IGk7CisJZ2ZwX3QgZ2ZwX2ZsYWdz ID0gbG93X29yZGVyX2dmcF9mbGFnczsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fT1JERVJTOyBp KyspIHsKKwkJc3RydWN0IGRtYWJ1Zl9wYWdlX3Bvb2wgKnBvb2w7CisKKwkJaWYgKG9yZGVyc1tp XSA+IDQpCisJCQlnZnBfZmxhZ3MgPSBoaWdoX29yZGVyX2dmcF9mbGFnczsKKworCQlwb29sID0g ZG1hYnVmX3BhZ2VfcG9vbF9jcmVhdGUoZ2ZwX2ZsYWdzLCBvcmRlcnNbaV0pOworCQlpZiAoIXBv b2wpCisJCQlnb3RvIGVycl9jcmVhdGVfcG9vbDsKKwkJcGFnZV9wb29sc1tpXSA9IHBvb2w7CisJ fQorCXJldHVybiAwOworCitlcnJfY3JlYXRlX3Bvb2w6CisJc3lzdGVtX3Bvb2xfZGVzdHJveV9w b29scyhwYWdlX3Bvb2xzKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHN0cnVjdCBk bWFidWZfcG9vbCAqX19zeXN0ZW1fcG9vbF9jcmVhdGUodm9pZCkKK3sKKwlzdHJ1Y3Qgc3lzdGVt X3Bvb2wgKnN5c19wb29sOworCisJc3lzX3Bvb2wgPSBremFsbG9jKHNpemVvZigqc3lzX3Bvb2wp LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN5c19wb29sKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVN KTsKKwlzeXNfcG9vbC0+cG9vbC5vcHMgPSAmc3lzdGVtX3Bvb2xfb3BzOworCXN5c19wb29sLT5w b29sLmZsYWdzID0gRE1BQlVGX1BPT0xfRkxBR19ERUZFUl9GUkVFOworCisJaWYgKHN5c3RlbV9w b29sX2NyZWF0ZV9wb29scyhzeXNfcG9vbC0+cGFnZV9wb29scykpCisJCWdvdG8gZnJlZV9wb29s OworCisJcmV0dXJuICZzeXNfcG9vbC0+cG9vbDsKKworZnJlZV9wb29sOgorCWtmcmVlKHN5c19w b29sKTsKKwlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKK30KKworc3RhdGljIGludCBzeXN0ZW1f cG9vbF9jcmVhdGUodm9pZCkKK3sKKwlzdHJ1Y3QgZG1hYnVmX3Bvb2wgKnBvb2w7CisKKwlwb29s ID0gX19zeXN0ZW1fcG9vbF9jcmVhdGUoKTsKKwlpZiAoSVNfRVJSKHBvb2wpKQorCQlyZXR1cm4g UFRSX0VSUihwb29sKTsKKwlwb29sLT5uYW1lID0gInN5c3RlbV9wb29sIjsKKworCWRtYWJ1Zl9w b29sX2FkZChwb29sKTsKKwlyZXR1cm4gMDsKK30KK2RldmljZV9pbml0Y2FsbChzeXN0ZW1fcG9v bF9jcmVhdGUpOworCitzdGF0aWMgaW50IHN5c3RlbV9jb250aWdfcG9vbF9hbGxvY2F0ZShzdHJ1 Y3QgZG1hYnVmX3Bvb2wgKnBvb2wsCisJCQkJCSAgIHN0cnVjdCBkbWFidWZfcG9vbF9idWZmZXIg KmJ1ZmZlciwKKwkJCQkJICAgdW5zaWduZWQgbG9uZyBsZW4sCisJCQkJCSAgIHVuc2lnbmVkIGxv bmcgZmxhZ3MpCit7CisJaW50IG9yZGVyID0gZ2V0X29yZGVyKGxlbik7CisJc3RydWN0IHBhZ2Ug KnBhZ2U7CisJc3RydWN0IHNnX3RhYmxlICp0YWJsZTsKKwl1bnNpZ25lZCBsb25nIGk7CisJaW50 IHJldDsKKworCXBhZ2UgPSBhbGxvY19wYWdlcyhsb3dfb3JkZXJfZ2ZwX2ZsYWdzIHwgX19HRlBf Tk9XQVJOLCBvcmRlcik7CisJaWYgKCFwYWdlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNwbGl0 X3BhZ2UocGFnZSwgb3JkZXIpOworCisJbGVuID0gUEFHRV9BTElHTihsZW4pOworCWZvciAoaSA9 IGxlbiA+PiBQQUdFX1NISUZUOyBpIDwgKDEgPDwgb3JkZXIpOyBpKyspCisJCV9fZnJlZV9wYWdl KHBhZ2UgKyBpKTsKKworCXRhYmxlID0ga21hbGxvYyhzaXplb2YoKnRhYmxlKSwgR0ZQX0tFUk5F TCk7CisJaWYgKCF0YWJsZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfcGFnZXM7 CisJfQorCisJcmV0ID0gc2dfYWxsb2NfdGFibGUodGFibGUsIDEsIEdGUF9LRVJORUwpOworCWlm IChyZXQpCisJCWdvdG8gZnJlZV90YWJsZTsKKworCXNnX3NldF9wYWdlKHRhYmxlLT5zZ2wsIHBh Z2UsIGxlbiwgMCk7CisKKwlidWZmZXItPnNnX3RhYmxlID0gdGFibGU7CisKKwlyZXR1cm4gMDsK KworZnJlZV90YWJsZToKKwlrZnJlZSh0YWJsZSk7CitmcmVlX3BhZ2VzOgorCWZvciAoaSA9IDA7 IGkgPCBsZW4gPj4gUEFHRV9TSElGVDsgaSsrKQorCQlfX2ZyZWVfcGFnZShwYWdlICsgaSk7CisK KwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBzeXN0ZW1fY29udGlnX3Bvb2xfZnJlZShz dHJ1Y3QgZG1hYnVmX3Bvb2xfYnVmZmVyICpidWZmZXIpCit7CisJc3RydWN0IHNnX3RhYmxlICp0 YWJsZSA9IGJ1ZmZlci0+c2dfdGFibGU7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBzZ19wYWdlKHRh YmxlLT5zZ2wpOworCXVuc2lnbmVkIGxvbmcgcGFnZXMgPSBQQUdFX0FMSUdOKGJ1ZmZlci0+c2l6 ZSkgPj4gUEFHRV9TSElGVDsKKwl1bnNpZ25lZCBsb25nIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwg cGFnZXM7IGkrKykKKwkJX19mcmVlX3BhZ2UocGFnZSArIGkpOworCXNnX2ZyZWVfdGFibGUodGFi bGUpOworCWtmcmVlKHRhYmxlKTsKK30KKworc3RhdGljIHN0cnVjdCBkbWFidWZfcG9vbF9vcHMg a21hbGxvY19vcHMgPSB7CisJLmFsbG9jYXRlID0gc3lzdGVtX2NvbnRpZ19wb29sX2FsbG9jYXRl LAorCS5mcmVlID0gc3lzdGVtX2NvbnRpZ19wb29sX2ZyZWUsCisJLm1hcF9rZXJuZWwgPSBkbWFi dWZfcG9vbF9tYXBfa2VybmVsLAorCS51bm1hcF9rZXJuZWwgPSBkbWFidWZfcG9vbF91bm1hcF9r ZXJuZWwsCisJLm1hcF91c2VyID0gZG1hYnVmX3Bvb2xfbWFwX3VzZXIsCit9OworCitzdGF0aWMg c3RydWN0IGRtYWJ1Zl9wb29sICpfX3N5c3RlbV9jb250aWdfcG9vbF9jcmVhdGUodm9pZCkKK3sK KwlzdHJ1Y3QgZG1hYnVmX3Bvb2wgKnBvb2w7CisKKwlwb29sID0ga3phbGxvYyhzaXplb2YoKnBv b2wpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBvb2wpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0p OworCXBvb2wtPm9wcyA9ICZrbWFsbG9jX29wczsKKwlwb29sLT5uYW1lID0gInN5c3RlbV9jb250 aWdfcG9vbCI7CisJcmV0dXJuIHBvb2w7Cit9CisKK3N0YXRpYyBpbnQgc3lzdGVtX2NvbnRpZ19w b29sX2NyZWF0ZSh2b2lkKQoreworCXN0cnVjdCBkbWFidWZfcG9vbCAqcG9vbDsKKworCXBvb2wg PSBfX3N5c3RlbV9jb250aWdfcG9vbF9jcmVhdGUoKTsKKwlpZiAoSVNfRVJSKHBvb2wpKQorCQly ZXR1cm4gUFRSX0VSUihwb29sKTsKKworCWRtYWJ1Zl9wb29sX2FkZChwb29sKTsKKwlyZXR1cm4g MDsKK30KK2RldmljZV9pbml0Y2FsbChzeXN0ZW1fY29udGlnX3Bvb2xfY3JlYXRlKTsKKwotLSAK Mi43LjQKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRy aS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw czovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbA==