From mboxrd@z Thu Jan 1 00:00:00 1970 From: John Stultz Subject: [PATCH v5 2/5] dma-buf: heaps: Add heap helpers Date: Fri, 7 Jun 2019 03:07:16 +0000 Message-ID: <20190607030719.77286-3-john.stultz@linaro.org> References: <20190607030719.77286-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-pf1-x441.google.com (mail-pf1-x441.google.com [IPv6:2607:f8b0:4864:20::441]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5CEE089A60 for ; Fri, 7 Jun 2019 03:07:28 +0000 (UTC) Received: by mail-pf1-x441.google.com with SMTP id d126so346148pfd.2 for ; Thu, 06 Jun 2019 20:07:28 -0700 (PDT) In-Reply-To: <20190607030719.77286-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: Sudipto Paul , Vincent Donnefort , Chenbo Feng , Alistair Strachan , Liam Mark , Christoph Hellwig , dri-devel@lists.freedesktop.org, "Andrew F . Davis" , Pratik Patel List-Id: dri-devel@lists.freedesktop.org QWRkIGdlbmVyaWMgaGVscGVyIGRtYWJ1ZiBvcHMgZm9yIGRtYSBoZWFwcywgc28gd2UgY2FuIHJl ZHVjZQp0aGUgYW1vdW50IG9mIGR1cGxpY2F0aXZlIGNvZGUgZm9yIHRoZSBleHBvcnRlZCBkbWFi dWZzLgoKVGhpcyBjb2RlIGlzIGFuIGV2b2x1dGlvbiBvZiB0aGUgQW5kcm9pZCBJT04gaW1wbGVt ZW50YXRpb24sIHNvCnRoYW5rcyB0byBpdHMgb3JpZ2luYWwgYXV0aG9ycyBhbmQgbWFpbnRhaW50 ZXJzOgogIFJlYmVjY2EgU2NodWx0eiBaYXZpbiwgQ29saW4gQ3Jvc3MsIExhdXJhIEFiYm90dCwg YW5kIG90aGVycyEKCkNjOiBMYXVyYSBBYmJvdHQgPGxhYmJvdHRAcmVkaGF0LmNvbT4KQ2M6IEJl bmphbWluIEdhaWduYXJkIDxiZW5qYW1pbi5nYWlnbmFyZEBsaW5hcm8ub3JnPgpDYzogU3VtaXQg U2Vtd2FsIDxzdW1pdC5zZW13YWxAbGluYXJvLm9yZz4KQ2M6IExpYW0gTWFyayA8bG1hcmtAY29k ZWF1cm9yYS5vcmc+CkNjOiBQcmF0aWsgUGF0ZWwgPHByYXRpa3BAY29kZWF1cm9yYS5vcmc+CkNj OiBCcmlhbiBTdGFya2V5IDxCcmlhbi5TdGFya2V5QGFybS5jb20+CkNjOiBWaW5jZW50IERvbm5l Zm9ydCA8VmluY2VudC5Eb25uZWZvcnRAYXJtLmNvbT4KQ2M6IFN1ZGlwdG8gUGF1bCA8U3VkaXB0 by5QYXVsQGFybS5jb20+CkNjOiBBbmRyZXcgRi4gRGF2aXMgPGFmZEB0aS5jb20+CkNjOiBDaHJp c3RvcGggSGVsbHdpZyA8aGNoQGluZnJhZGVhZC5vcmc+CkNjOiBDaGVuYm8gRmVuZyA8ZmVuZ2NA Z29vZ2xlLmNvbT4KQ2M6IEFsaXN0YWlyIFN0cmFjaGFuIDxhc3RyYWNoYW5AZ29vZ2xlLmNvbT4K Q2M6IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKUmV2aWV3ZWQtYnk6IEJlbmphbWlu IEdhaWduYXJkIDxiZW5qYW1pbi5nYWlnbmFyZEBsaW5hcm8ub3JnPgpTaWduZWQtb2ZmLWJ5OiBK b2huIFN0dWx0eiA8am9obi5zdHVsdHpAbGluYXJvLm9yZz4KQ2hhbmdlLUlkOiBJNDhkNDM2NTZl Nzc4M2YyNjZkODc3ZTM2MzExNmI1MTg3NjM5Zjk5NgotLS0KdjI6CiogUmVtb3ZlZCBjYWNoZSBt YW5hZ2VtZW50IHBlcmZvcm1hbmNlIGhhY2sgdGhhdCBJIGhhZAogIGFjY2lkZW50YWxseSBmb2xk ZWQgaW4uCiogUmVtb3ZlZCBzdGF0cyBjb2RlIHRoYXQgd2FzIGluIGhlbHBlcnMKKiBMb3RzIG9m IGNoZWNrcGF0Y2ggY2xlYW51cHMKdjM6CiogVW5pbmxpbmUgSU5JVF9IRUFQX0hFTFBFUl9CVUZG RVIgKHN1Z2dlc3RlZCBieSBDaHJpc3RvcGgpCiogU3dpdGNoIHRvIFdBUk4gb24gYnVmZmVyIGRl c3Ryb3kgZmFpbHVyZSAoc3VnZ2VzdGVkIGJ5IEJyaWFuKQoqIGJ1ZmZlci0+a21hcF9jbnQgZGVj cmVtZW50aW5nIGNsZWFudXAgKHN1Z2dlc3RlZCBieSBDaHJpc3RvcGgpCiogRXh0cmEgYnVmZmVy LT52YWRkciBjaGVja2luZyBpbiBkbWFfaGVhcF9kbWFfYnVmX2ttYXAKICAoc3VnZ2VzdGVkIGJ5 IEJyaWFuKQoqIFN3aXRjaCB0b19oZWxwZXJfYnVmZmVyIGZyb20gbWFjcm8gdG8gaW5saW5lIGZ1 bmN0aW9uCiAgKHN1Z2dlc3RlZCBieSBCZW5qYW1pbikKKiBSZW5hbWUga21hcC0+dm1hcCAoZm9s ZGVkIGluIGZyb20gQW5kcmV3KQoqIFVzZSB2bWFwIGZvciB2bWFwcGluZyAtIG5vdCBiZWdpbl9j cHVfYWNjZXNzIChmb2xkZWQgaW4gZnJvbQogIEFuZHJldykKKiBEcm9wIGttYXAgZm9yIG5vdywg YXMgaXRzIG9wdGlvbmFsIChmb2xkZWQgaW4gZnJvbSBBbmRyZXcpCiogRm9sZCBkbWFfaGVhcF9t YXBfdXNlciBpbnRvIHRoZSBzaW5nbGUgY2FsbGVyIChmb2xlZCBpbiBmcm9tCiAgQW5kcmV3KQoq IEZvbGRlZCBpbiBwYXRjaCBmcm9tIEFuZHJldyB0byB0cmFjayBwYWdlIGxpc3QgcGVyIGhlYXAg bm90CiAgc2dsaXN0LCB3aGljaCBzaW1wbGlmaWVzIHRoZSB0cmFja2luZyBsb2dpYwp2NDoKKiBN b3ZlZCBkbWEtaGVhcC5oIGNoYW5nZSBvdXQgdG8gcHJldmlvdXMgcGF0Y2gKLS0tCiBkcml2ZXJz L2RtYS1idWYvTWFrZWZpbGUgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9kbWEtYnVmL2hl YXBzL01ha2VmaWxlICAgICAgIHwgICAyICsKIGRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9oZWFwLWhl bHBlcnMuYyB8IDI2MSArKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZG1hLWJ1 Zi9oZWFwcy9oZWFwLWhlbHBlcnMuaCB8ICA1NSArKysrKysKIDQgZmlsZXMgY2hhbmdlZCwgMzE5 IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS1idWYvaGVhcHMv TWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS1idWYvaGVhcHMvaGVhcC1o ZWxwZXJzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS1idWYvaGVhcHMvaGVhcC1o ZWxwZXJzLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvTWFrZWZpbGUgYi9kcml2ZXJz L2RtYS1idWYvTWFrZWZpbGUKaW5kZXggMWNiM2RkMTA0ODI1Li5lM2UzZGNhMjllNDYgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZG1hLWJ1Zi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2RtYS1idWYvTWFr ZWZpbGUKQEAgLTEsNiArMSw3IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w LW9ubHkKIG9iai15IDo9IGRtYS1idWYubyBkbWEtZmVuY2UubyBkbWEtZmVuY2UtYXJyYXkubyBk bWEtZmVuY2UtY2hhaW4ubyBcCiAJIHJlc2VydmF0aW9uLm8gc2Vxbm8tZmVuY2Uubworb2JqLSQo Q09ORklHX0RNQUJVRl9IRUFQUykJKz0gaGVhcHMvCiBvYmotJChDT05GSUdfRE1BQlVGX0hFQVBT KQkrPSBkbWEtaGVhcC5vCiBvYmotJChDT05GSUdfU1lOQ19GSUxFKQkJKz0gc3luY19maWxlLm8K IG9iai0kKENPTkZJR19TV19TWU5DKQkJKz0gc3dfc3luYy5vIHN5bmNfZGVidWcubwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9kbWEtYnVmL2hlYXBzL01ha2VmaWxlIGIvZHJpdmVycy9kbWEtYnVmL2hl YXBzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZGU0 OTg5ODExMmRiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEtYnVmL2hlYXBzL01ha2Vm aWxlCkBAIC0wLDAgKzEsMiBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAor b2JqLXkJCQkJCSs9IGhlYXAtaGVscGVycy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYv aGVhcHMvaGVhcC1oZWxwZXJzLmMgYi9kcml2ZXJzL2RtYS1idWYvaGVhcHMvaGVhcC1oZWxwZXJz LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4wMGNiZGJiYjk3ZTUK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS1idWYvaGVhcHMvaGVhcC1oZWxwZXJzLmMK QEAgLTAsMCArMSwyNjEgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisj aW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgorI2lu Y2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2lkci5oPgorI2luY2x1ZGUgPGxp bnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdWFj Y2Vzcy5oPgorI2luY2x1ZGUgPHVhcGkvbGludXgvZG1hLWhlYXAuaD4KKworI2luY2x1ZGUgImhl YXAtaGVscGVycy5oIgorCit2b2lkIElOSVRfSEVBUF9IRUxQRVJfQlVGRkVSKHN0cnVjdCBoZWFw X2hlbHBlcl9idWZmZXIgKmJ1ZmZlciwKKwkJCSAgICAgdm9pZCAoKmZyZWUpKHN0cnVjdCBoZWFw X2hlbHBlcl9idWZmZXIgKikpCit7CisJYnVmZmVyLT5wcml2YXRlX2ZsYWdzID0gMDsKKwlidWZm ZXItPnByaXZfdmlydCA9IE5VTEw7CisJbXV0ZXhfaW5pdCgmYnVmZmVyLT5sb2NrKTsKKwlidWZm ZXItPnZtYXBfY250ID0gMDsKKwlidWZmZXItPnZhZGRyID0gTlVMTDsKKwlJTklUX0xJU1RfSEVB RCgmYnVmZmVyLT5hdHRhY2htZW50cyk7CisJYnVmZmVyLT5mcmVlID0gZnJlZTsKK30KKworCitz dGF0aWMgdm9pZCAqZG1hX2hlYXBfbWFwX2tlcm5lbChzdHJ1Y3QgaGVhcF9oZWxwZXJfYnVmZmVy ICpidWZmZXIpCit7CisJdm9pZCAqdmFkZHI7CisKKwl2YWRkciA9IHZtYXAoYnVmZmVyLT5wYWdl cywgYnVmZmVyLT5wYWdlY291bnQsIFZNX01BUCwgUEFHRV9LRVJORUwpOworCWlmICghdmFkZHIp CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJcmV0dXJuIHZhZGRyOworfQorCit2b2lk IGRtYV9oZWFwX2J1ZmZlcl9kZXN0cm95KHN0cnVjdCBkbWFfaGVhcF9idWZmZXIgKmhlYXBfYnVm ZmVyKQoreworCXN0cnVjdCBoZWFwX2hlbHBlcl9idWZmZXIgKmJ1ZmZlciA9IHRvX2hlbHBlcl9i dWZmZXIoaGVhcF9idWZmZXIpOworCisJaWYgKGJ1ZmZlci0+dm1hcF9jbnQgPiAwKSB7CisJCVdB Uk4oIiVzOiBidWZmZXIgc3RpbGwgbWFwcGVkIGluIHRoZSBrZXJuZWxcbiIsCisJCQkgICAgIF9f ZnVuY19fKTsKKwkJdnVubWFwKGJ1ZmZlci0+dmFkZHIpOworCX0KKworCWJ1ZmZlci0+ZnJlZShi dWZmZXIpOworfQorCitzdGF0aWMgdm9pZCAqZG1hX2hlYXBfYnVmZmVyX3ZtYXBfZ2V0KHN0cnVj dCBkbWFfaGVhcF9idWZmZXIgKmhlYXBfYnVmZmVyKQoreworCXN0cnVjdCBoZWFwX2hlbHBlcl9i dWZmZXIgKmJ1ZmZlciA9IHRvX2hlbHBlcl9idWZmZXIoaGVhcF9idWZmZXIpOworCXZvaWQgKnZh ZGRyOworCisJaWYgKGJ1ZmZlci0+dm1hcF9jbnQpIHsKKwkJYnVmZmVyLT52bWFwX2NudCsrOwor CQlyZXR1cm4gYnVmZmVyLT52YWRkcjsKKwl9CisJdmFkZHIgPSBkbWFfaGVhcF9tYXBfa2VybmVs KGJ1ZmZlcik7CisJaWYgKFdBUk5fT05DRSghdmFkZHIsCisJCSAgICAgICJoZWFwLT5vcHMtPm1h cF9rZXJuZWwgc2hvdWxkIHJldHVybiBFUlJfUFRSIG9uIGVycm9yIikpCisJCXJldHVybiBFUlJf UFRSKC1FSU5WQUwpOworCWlmIChJU19FUlIodmFkZHIpKQorCQlyZXR1cm4gdmFkZHI7CisJYnVm ZmVyLT52YWRkciA9IHZhZGRyOworCWJ1ZmZlci0+dm1hcF9jbnQrKzsKKwlyZXR1cm4gdmFkZHI7 Cit9CisKK3N0YXRpYyB2b2lkIGRtYV9oZWFwX2J1ZmZlcl92bWFwX3B1dChzdHJ1Y3QgZG1hX2hl YXBfYnVmZmVyICpoZWFwX2J1ZmZlcikKK3sKKwlzdHJ1Y3QgaGVhcF9oZWxwZXJfYnVmZmVyICpi dWZmZXIgPSB0b19oZWxwZXJfYnVmZmVyKGhlYXBfYnVmZmVyKTsKKworCWlmICghLS1idWZmZXIt PnZtYXBfY250KSB7CisJCXZ1bm1hcChidWZmZXItPnZhZGRyKTsKKwkJYnVmZmVyLT52YWRkciA9 IE5VTEw7CisJfQorfQorCitzdHJ1Y3QgZG1hX2hlYXBzX2F0dGFjaG1lbnQgeworCXN0cnVjdCBk ZXZpY2UgKmRldjsKKwlzdHJ1Y3Qgc2dfdGFibGUgdGFibGU7CisJc3RydWN0IGxpc3RfaGVhZCBs aXN0OworfTsKKworc3RhdGljIGludCBkbWFfaGVhcF9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRt YWJ1ZiwKKwkJCSAgICAgIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQpCit7 CisJc3RydWN0IGRtYV9oZWFwc19hdHRhY2htZW50ICphOworCXN0cnVjdCBkbWFfaGVhcF9idWZm ZXIgKmhlYXBfYnVmZmVyID0gZG1hYnVmLT5wcml2OworCXN0cnVjdCBoZWFwX2hlbHBlcl9idWZm ZXIgKmJ1ZmZlciA9IHRvX2hlbHBlcl9idWZmZXIoaGVhcF9idWZmZXIpOworCWludCByZXQ7CisK KwlhID0ga3phbGxvYyhzaXplb2YoKmEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWEpCisJCXJldHVy biAtRU5PTUVNOworCisJcmV0ID0gc2dfYWxsb2NfdGFibGVfZnJvbV9wYWdlcygmYS0+dGFibGUs IGJ1ZmZlci0+cGFnZXMsCisJCQkJCWJ1ZmZlci0+cGFnZWNvdW50LCAwLAorCQkJCQlidWZmZXIt PnBhZ2Vjb3VudCA8PCBQQUdFX1NISUZULAorCQkJCQlHRlBfS0VSTkVMKTsKKwlpZiAocmV0KSB7 CisJCWtmcmVlKGEpOworCQlyZXR1cm4gcmV0OworCX0KKworCWEtPmRldiA9IGF0dGFjaG1lbnQt PmRldjsKKwlJTklUX0xJU1RfSEVBRCgmYS0+bGlzdCk7CisKKwlhdHRhY2htZW50LT5wcml2ID0g YTsKKworCW11dGV4X2xvY2soJmJ1ZmZlci0+bG9jayk7CisJbGlzdF9hZGQoJmEtPmxpc3QsICZi dWZmZXItPmF0dGFjaG1lbnRzKTsKKwltdXRleF91bmxvY2soJmJ1ZmZlci0+bG9jayk7CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZG1hX2hlYXBfZGV0YXRjaChzdHJ1Y3QgZG1hX2J1 ZiAqZG1hYnVmLAorCQkJCXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQpCit7 CisJc3RydWN0IGRtYV9oZWFwc19hdHRhY2htZW50ICphID0gYXR0YWNobWVudC0+cHJpdjsKKwlz dHJ1Y3QgZG1hX2hlYXBfYnVmZmVyICpoZWFwX2J1ZmZlciA9IGRtYWJ1Zi0+cHJpdjsKKwlzdHJ1 Y3QgaGVhcF9oZWxwZXJfYnVmZmVyICpidWZmZXIgPSB0b19oZWxwZXJfYnVmZmVyKGhlYXBfYnVm ZmVyKTsKKworCW11dGV4X2xvY2soJmJ1ZmZlci0+bG9jayk7CisJbGlzdF9kZWwoJmEtPmxpc3Qp OworCW11dGV4X3VubG9jaygmYnVmZmVyLT5sb2NrKTsKKworCXNnX2ZyZWVfdGFibGUoJmEtPnRh YmxlKTsKKwlrZnJlZShhKTsKK30KKworc3RhdGljIHN0cnVjdCBzZ190YWJsZSAqZG1hX2hlYXBf bWFwX2RtYV9idWYoCisJCQkJCXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQs CisJCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlzdHJ1Y3QgZG1h X2hlYXBzX2F0dGFjaG1lbnQgKmEgPSBhdHRhY2htZW50LT5wcml2OworCXN0cnVjdCBzZ190YWJs ZSAqdGFibGU7CisKKwl0YWJsZSA9ICZhLT50YWJsZTsKKworCWlmICghZG1hX21hcF9zZyhhdHRh Y2htZW50LT5kZXYsIHRhYmxlLT5zZ2wsIHRhYmxlLT5uZW50cywKKwkJCWRpcmVjdGlvbikpCisJ CXRhYmxlID0gRVJSX1BUUigtRU5PTUVNKTsKKwlyZXR1cm4gdGFibGU7Cit9CisKK3N0YXRpYyB2 b2lkIGRtYV9oZWFwX3VubWFwX2RtYV9idWYoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0 YWNobWVudCwKKwkJCSAgICAgIHN0cnVjdCBzZ190YWJsZSAqdGFibGUsCisJCQkgICAgICBlbnVt IGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJZG1hX3VubWFwX3NnKGF0dGFjaG1l bnQtPmRldiwgdGFibGUtPnNnbCwgdGFibGUtPm5lbnRzLCBkaXJlY3Rpb24pOworfQorCitzdGF0 aWMgdm1fZmF1bHRfdCBkbWFfaGVhcF92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKK3sK KwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi0+dm1hOworCXN0cnVjdCBoZWFwX2hl bHBlcl9idWZmZXIgKmJ1ZmZlciA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOworCisJdm1mLT5wYWdl ID0gYnVmZmVyLT5wYWdlc1t2bWYtPnBnb2ZmXTsKKwlnZXRfcGFnZSh2bWYtPnBhZ2UpOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qg ZG1hX2hlYXBfdm1fb3BzID0geworCS5mYXVsdCA9IGRtYV9oZWFwX3ZtX2ZhdWx0LAorfTsKKwor c3RhdGljIGludCBkbWFfaGVhcF9tbWFwKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIHN0cnVjdCB2 bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBkbWFfaGVhcF9idWZmZXIgKmhlYXBfYnVm ZmVyID0gZG1hYnVmLT5wcml2OworCXN0cnVjdCBoZWFwX2hlbHBlcl9idWZmZXIgKmJ1ZmZlciA9 IHRvX2hlbHBlcl9idWZmZXIoaGVhcF9idWZmZXIpOworCisJaWYgKCh2bWEtPnZtX2ZsYWdzICYg KFZNX1NIQVJFRCB8IFZNX01BWVNIQVJFKSkgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2 bWEtPnZtX29wcyA9ICZkbWFfaGVhcF92bV9vcHM7CisJdm1hLT52bV9wcml2YXRlX2RhdGEgPSBi dWZmZXI7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZG1hX2hlYXBfZG1hX2J1Zl9y ZWxlYXNlKHN0cnVjdCBkbWFfYnVmICpkbWFidWYpCit7CisJc3RydWN0IGRtYV9oZWFwX2J1ZmZl ciAqYnVmZmVyID0gZG1hYnVmLT5wcml2OworCisJZG1hX2hlYXBfYnVmZmVyX2Rlc3Ryb3koYnVm ZmVyKTsKK30KKworc3RhdGljIGludCBkbWFfaGVhcF9kbWFfYnVmX2JlZ2luX2NwdV9hY2Nlc3Mo c3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKKwkJCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGly ZWN0aW9uKQoreworCXN0cnVjdCBkbWFfaGVhcF9idWZmZXIgKmhlYXBfYnVmZmVyID0gZG1hYnVm LT5wcml2OworCXN0cnVjdCBoZWFwX2hlbHBlcl9idWZmZXIgKmJ1ZmZlciA9IHRvX2hlbHBlcl9i dWZmZXIoaGVhcF9idWZmZXIpOworCXN0cnVjdCBkbWFfaGVhcHNfYXR0YWNobWVudCAqYTsKKwlp bnQgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJmJ1ZmZlci0+bG9jayk7CisJbGlzdF9mb3JfZWFj aF9lbnRyeShhLCAmYnVmZmVyLT5hdHRhY2htZW50cywgbGlzdCkgeworCQlkbWFfc3luY19zZ19m b3JfY3B1KGEtPmRldiwgYS0+dGFibGUuc2dsLCBhLT50YWJsZS5uZW50cywKKwkJCQkgICAgZGly ZWN0aW9uKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZidWZmZXItPmxvY2spOworCisJcmV0dXJuIHJl dDsKK30KKworc3RhdGljIGludCBkbWFfaGVhcF9kbWFfYnVmX2VuZF9jcHVfYWNjZXNzKHN0cnVj dCBkbWFfYnVmICpkbWFidWYsCisJCQkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGly ZWN0aW9uKQoreworCXN0cnVjdCBkbWFfaGVhcF9idWZmZXIgKmhlYXBfYnVmZmVyID0gZG1hYnVm LT5wcml2OworCXN0cnVjdCBoZWFwX2hlbHBlcl9idWZmZXIgKmJ1ZmZlciA9IHRvX2hlbHBlcl9i dWZmZXIoaGVhcF9idWZmZXIpOworCXN0cnVjdCBkbWFfaGVhcHNfYXR0YWNobWVudCAqYTsKKwor CW11dGV4X2xvY2soJmJ1ZmZlci0+bG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShhLCAmYnVm ZmVyLT5hdHRhY2htZW50cywgbGlzdCkgeworCQlkbWFfc3luY19zZ19mb3JfZGV2aWNlKGEtPmRl diwgYS0+dGFibGUuc2dsLCBhLT50YWJsZS5uZW50cywKKwkJCQkgICAgICAgZGlyZWN0aW9uKTsK Kwl9CisJbXV0ZXhfdW5sb2NrKCZidWZmZXItPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3Zv aWQgKmRtYV9oZWFwX2RtYV9idWZfdm1hcChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKQoreworCXN0 cnVjdCBkbWFfaGVhcF9idWZmZXIgKmhlYXBfYnVmZmVyID0gZG1hYnVmLT5wcml2OworCXN0cnVj dCBoZWFwX2hlbHBlcl9idWZmZXIgKmJ1ZmZlciA9IHRvX2hlbHBlcl9idWZmZXIoaGVhcF9idWZm ZXIpOworCXZvaWQgKnZhZGRyOworCisJbXV0ZXhfbG9jaygmYnVmZmVyLT5sb2NrKTsKKwl2YWRk ciA9IGRtYV9oZWFwX2J1ZmZlcl92bWFwX2dldChoZWFwX2J1ZmZlcik7CisJbXV0ZXhfdW5sb2Nr KCZidWZmZXItPmxvY2spOworCisJcmV0dXJuIHZhZGRyOworfQorCit2b2lkIGRtYV9oZWFwX2Rt YV9idWZfdnVubWFwKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIHZvaWQgKnZhZGRyKQoreworCXN0 cnVjdCBkbWFfaGVhcF9idWZmZXIgKmhlYXBfYnVmZmVyID0gZG1hYnVmLT5wcml2OworCXN0cnVj dCBoZWFwX2hlbHBlcl9idWZmZXIgKmJ1ZmZlciA9IHRvX2hlbHBlcl9idWZmZXIoaGVhcF9idWZm ZXIpOworCisJbXV0ZXhfbG9jaygmYnVmZmVyLT5sb2NrKTsKKwlkbWFfaGVhcF9idWZmZXJfdm1h cF9wdXQoaGVhcF9idWZmZXIpOworCW11dGV4X3VubG9jaygmYnVmZmVyLT5sb2NrKTsKK30KKwor Y29uc3Qgc3RydWN0IGRtYV9idWZfb3BzIGhlYXBfaGVscGVyX29wcyA9IHsKKwkubWFwX2RtYV9i dWYgPSBkbWFfaGVhcF9tYXBfZG1hX2J1ZiwKKwkudW5tYXBfZG1hX2J1ZiA9IGRtYV9oZWFwX3Vu bWFwX2RtYV9idWYsCisJLm1tYXAgPSBkbWFfaGVhcF9tbWFwLAorCS5yZWxlYXNlID0gZG1hX2hl YXBfZG1hX2J1Zl9yZWxlYXNlLAorCS5hdHRhY2ggPSBkbWFfaGVhcF9hdHRhY2gsCisJLmRldGFj aCA9IGRtYV9oZWFwX2RldGF0Y2gsCisJLmJlZ2luX2NwdV9hY2Nlc3MgPSBkbWFfaGVhcF9kbWFf YnVmX2JlZ2luX2NwdV9hY2Nlc3MsCisJLmVuZF9jcHVfYWNjZXNzID0gZG1hX2hlYXBfZG1hX2J1 Zl9lbmRfY3B1X2FjY2VzcywKKwkudm1hcCA9IGRtYV9oZWFwX2RtYV9idWZfdm1hcCwKKwkudnVu bWFwID0gZG1hX2hlYXBfZG1hX2J1Zl92dW5tYXAsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9k bWEtYnVmL2hlYXBzL2hlYXAtaGVscGVycy5oIGIvZHJpdmVycy9kbWEtYnVmL2hlYXBzL2hlYXAt aGVscGVycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYTE3NTAy ZGMyMmUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEtYnVmL2hlYXBzL2hlYXAtaGVs cGVycy5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wICovCisvKgorICogRE1BQlVGIEhlYXBzIGhlbHBlciBjb2RlCisgKgorICogQ29weXJpZ2h0 IChDKSAyMDExIEdvb2dsZSwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDE5IExpbmFybyBMdGQu CisgKi8KKworI2lmbmRlZiBfSEVBUF9IRUxQRVJTX0gKKyNkZWZpbmUgX0hFQVBfSEVMUEVSU19I CisKKyNpbmNsdWRlIDxsaW51eC9kbWEtaGVhcC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4K KworLyoqCisgKiBzdHJ1Y3QgZG1hX2hlYXBfYnVmZmVyIC0gbWV0YWRhdGEgZm9yIGEgcGFydGlj dWxhciBidWZmZXIKKyAqIEBoZWFwOgkJYmFjayBwb2ludGVyIHRvIHRoZSBoZWFwIHRoZSBidWZm ZXIgY2FtZSBmcm9tCisgKiBAZG1hYnVmOgkJYmFja2luZyBkbWEtYnVmIGZvciB0aGlzIGJ1ZmZl cgorICogQHNpemU6CQlzaXplIG9mIHRoZSBidWZmZXIKKyAqIEBmbGFnczoJCWJ1ZmZlciBzcGVj aWZpYyBmbGFncworICovCitzdHJ1Y3QgZG1hX2hlYXBfYnVmZmVyIHsKKwlzdHJ1Y3QgZG1hX2hl YXAgKmhlYXA7CisJc3RydWN0IGRtYV9idWYgKmRtYWJ1ZjsKKwlzaXplX3Qgc2l6ZTsKKwl1bnNp Z25lZCBsb25nIGZsYWdzOworfTsKKworc3RydWN0IGhlYXBfaGVscGVyX2J1ZmZlciB7CisJc3Ry dWN0IGRtYV9oZWFwX2J1ZmZlciBoZWFwX2J1ZmZlcjsKKworCXVuc2lnbmVkIGxvbmcgcHJpdmF0 ZV9mbGFnczsKKwl2b2lkICpwcml2X3ZpcnQ7CisJc3RydWN0IG11dGV4IGxvY2s7CisJaW50IHZt YXBfY250OworCXZvaWQgKnZhZGRyOworCXBnb2ZmX3QgcGFnZWNvdW50OworCXN0cnVjdCBwYWdl ICoqcGFnZXM7CisJc3RydWN0IGxpc3RfaGVhZCBhdHRhY2htZW50czsKKworCXZvaWQgKCpmcmVl KShzdHJ1Y3QgaGVhcF9oZWxwZXJfYnVmZmVyICpidWZmZXIpOworCit9OworCitzdGF0aWMgaW5s aW5lIHN0cnVjdCBoZWFwX2hlbHBlcl9idWZmZXIgKnRvX2hlbHBlcl9idWZmZXIoCisJCQkJCQlz dHJ1Y3QgZG1hX2hlYXBfYnVmZmVyICpoKQoreworCXJldHVybiBjb250YWluZXJfb2YoaCwgc3Ry dWN0IGhlYXBfaGVscGVyX2J1ZmZlciwgaGVhcF9idWZmZXIpOworfQorCit2b2lkIElOSVRfSEVB UF9IRUxQRVJfQlVGRkVSKHN0cnVjdCBoZWFwX2hlbHBlcl9idWZmZXIgKmJ1ZmZlciwKKwkJCQkg dm9pZCAoKmZyZWUpKHN0cnVjdCBoZWFwX2hlbHBlcl9idWZmZXIgKikpOworZXh0ZXJuIGNvbnN0 IHN0cnVjdCBkbWFfYnVmX29wcyBoZWFwX2hlbHBlcl9vcHM7CisKKyNlbmRpZiAvKiBfSEVBUF9I RUxQRVJTX0ggKi8KLS0gCjIuMTcuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vZHJpLWRldmVs