From mboxrd@z Thu Jan 1 00:00:00 1970 From: John Stultz Subject: [PATCH v6 2/5] dma-buf: heaps: Add heap helpers Date: Mon, 24 Jun 2019 19:49:05 +0000 Message-ID: <20190624194908.121273-3-john.stultz@linaro.org> References: <20190624194908.121273-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-pg1-x543.google.com (mail-pg1-x543.google.com [IPv6:2607:f8b0:4864:20::543]) by gabe.freedesktop.org (Postfix) with ESMTPS id 489A489612 for ; Mon, 24 Jun 2019 19:49:19 +0000 (UTC) Received: by mail-pg1-x543.google.com with SMTP id 196so7665020pgc.6 for ; Mon, 24 Jun 2019 12:49:19 -0700 (PDT) In-Reply-To: <20190624194908.121273-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: Yudongbin , Sudipto Paul , Xu YiPing , Vincent Donnefort , "Chenfeng (puck)" , dri-devel@lists.freedesktop.org, Chenbo Feng , Alistair Strachan , Liam Mark , Christoph Hellwig , "Xiaqing (A)" , "Andrew F . Davis" , Pratik Patel , butao List-Id: dri-devel@lists.freedesktop.org QWRkIGdlbmVyaWMgaGVscGVyIGRtYWJ1ZiBvcHMgZm9yIGRtYSBoZWFwcywgc28gd2UgY2FuIHJl ZHVjZQp0aGUgYW1vdW50IG9mIGR1cGxpY2F0aXZlIGNvZGUgZm9yIHRoZSBleHBvcnRlZCBkbWFi dWZzLgoKVGhpcyBjb2RlIGlzIGFuIGV2b2x1dGlvbiBvZiB0aGUgQW5kcm9pZCBJT04gaW1wbGVt ZW50YXRpb24sIHNvCnRoYW5rcyB0byBpdHMgb3JpZ2luYWwgYXV0aG9ycyBhbmQgbWFpbnRhaW50 ZXJzOgogIFJlYmVjY2EgU2NodWx0eiBaYXZpbiwgQ29saW4gQ3Jvc3MsIExhdXJhIEFiYm90dCwg YW5kIG90aGVycyEKCkNjOiBMYXVyYSBBYmJvdHQgPGxhYmJvdHRAcmVkaGF0LmNvbT4KQ2M6IEJl bmphbWluIEdhaWduYXJkIDxiZW5qYW1pbi5nYWlnbmFyZEBsaW5hcm8ub3JnPgpDYzogU3VtaXQg U2Vtd2FsIDxzdW1pdC5zZW13YWxAbGluYXJvLm9yZz4KQ2M6IExpYW0gTWFyayA8bG1hcmtAY29k ZWF1cm9yYS5vcmc+CkNjOiBQcmF0aWsgUGF0ZWwgPHByYXRpa3BAY29kZWF1cm9yYS5vcmc+CkNj OiBCcmlhbiBTdGFya2V5IDxCcmlhbi5TdGFya2V5QGFybS5jb20+CkNjOiBWaW5jZW50IERvbm5l Zm9ydCA8VmluY2VudC5Eb25uZWZvcnRAYXJtLmNvbT4KQ2M6IFN1ZGlwdG8gUGF1bCA8U3VkaXB0 by5QYXVsQGFybS5jb20+CkNjOiBBbmRyZXcgRi4gRGF2aXMgPGFmZEB0aS5jb20+CkNjOiBYdSBZ aVBpbmcgPHh1eWlwaW5nQGhpc2lsaWNvbi5jb20+CkNjOiAiQ2hlbmZlbmcgKHB1Y2spIiA8cHVj ay5jaGVuQGhpc2lsaWNvbi5jb20+CkNjOiBidXRhbyA8YnV0YW9AaGlzaWxpY29uLmNvbT4KQ2M6 ICJYaWFxaW5nIChBKSIgPHNhYmVybGlseS54aWFAaGlzaWxpY29uLmNvbT4KQ2M6IFl1ZG9uZ2Jp biA8eXVkb25nYmluQGhpc2lsaWNvbi5jb20+CkNjOiBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGlu ZnJhZGVhZC5vcmc+CkNjOiBDaGVuYm8gRmVuZyA8ZmVuZ2NAZ29vZ2xlLmNvbT4KQ2M6IEFsaXN0 YWlyIFN0cmFjaGFuIDxhc3RyYWNoYW5AZ29vZ2xlLmNvbT4KQ2M6IGRyaS1kZXZlbEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKUmV2aWV3ZWQtYnk6IEJlbmphbWluIEdhaWduYXJkIDxiZW5qYW1pbi5n YWlnbmFyZEBsaW5hcm8ub3JnPgpTaWduZWQtb2ZmLWJ5OiBKb2huIFN0dWx0eiA8am9obi5zdHVs dHpAbGluYXJvLm9yZz4KQ2hhbmdlLUlkOiBJNDhkNDM2NTZlNzc4M2YyNjZkODc3ZTM2MzExNmI1 MTg3NjM5Zjk5NgotLS0KdjI6CiogUmVtb3ZlZCBjYWNoZSBtYW5hZ2VtZW50IHBlcmZvcm1hbmNl IGhhY2sgdGhhdCBJIGhhZAogIGFjY2lkZW50YWxseSBmb2xkZWQgaW4uCiogUmVtb3ZlZCBzdGF0 cyBjb2RlIHRoYXQgd2FzIGluIGhlbHBlcnMKKiBMb3RzIG9mIGNoZWNrcGF0Y2ggY2xlYW51cHMK djM6CiogVW5pbmxpbmUgSU5JVF9IRUFQX0hFTFBFUl9CVUZGRVIgKHN1Z2dlc3RlZCBieSBDaHJp c3RvcGgpCiogU3dpdGNoIHRvIFdBUk4gb24gYnVmZmVyIGRlc3Ryb3kgZmFpbHVyZSAoc3VnZ2Vz dGVkIGJ5IEJyaWFuKQoqIGJ1ZmZlci0+a21hcF9jbnQgZGVjcmVtZW50aW5nIGNsZWFudXAgKHN1 Z2dlc3RlZCBieSBDaHJpc3RvcGgpCiogRXh0cmEgYnVmZmVyLT52YWRkciBjaGVja2luZyBpbiBk bWFfaGVhcF9kbWFfYnVmX2ttYXAKICAoc3VnZ2VzdGVkIGJ5IEJyaWFuKQoqIFN3aXRjaCB0b19o ZWxwZXJfYnVmZmVyIGZyb20gbWFjcm8gdG8gaW5saW5lIGZ1bmN0aW9uCiAgKHN1Z2dlc3RlZCBi eSBCZW5qYW1pbikKKiBSZW5hbWUga21hcC0+dm1hcCAoZm9sZGVkIGluIGZyb20gQW5kcmV3KQoq IFVzZSB2bWFwIGZvciB2bWFwcGluZyAtIG5vdCBiZWdpbl9jcHVfYWNjZXNzIChmb2xkZWQgaW4g ZnJvbQogIEFuZHJldykKKiBEcm9wIGttYXAgZm9yIG5vdywgYXMgaXRzIG9wdGlvbmFsIChmb2xk ZWQgaW4gZnJvbSBBbmRyZXcpCiogRm9sZCBkbWFfaGVhcF9tYXBfdXNlciBpbnRvIHRoZSBzaW5n bGUgY2FsbGVyIChmb2xlZCBpbiBmcm9tCiAgQW5kcmV3KQoqIEZvbGRlZCBpbiBwYXRjaCBmcm9t IEFuZHJldyB0byB0cmFjayBwYWdlIGxpc3QgcGVyIGhlYXAgbm90CiAgc2dsaXN0LCB3aGljaCBz aW1wbGlmaWVzIHRoZSB0cmFja2luZyBsb2dpYwp2NDoKKiBNb3ZlZCBkbWEtaGVhcC5oIGNoYW5n ZSBvdXQgdG8gcHJldmlvdXMgcGF0Y2gKdjY6CiogTWlub3IgY2xlYW51cHMgYW5kIHR5cG8gZml4 ZXMgc3VnZ2VzdGVkIGJ5IEJyaWFuCi0tLQogZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlICAgICAg ICAgICAgIHwgICAxICsKIGRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9NYWtlZmlsZSAgICAgICB8ICAg MiArCiBkcml2ZXJzL2RtYS1idWYvaGVhcHMvaGVhcC1oZWxwZXJzLmMgfCAyNjIgKysrKysrKysr KysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2RtYS1idWYvaGVhcHMvaGVhcC1oZWxwZXJzLmgg fCAgNTQgKysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDMxOSBpbnNlcnRpb25zKCspCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9kbWEtYnVmL2hlYXBzL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9kbWEtYnVmL2hlYXBzL2hlYXAtaGVscGVycy5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9kbWEtYnVmL2hlYXBzL2hlYXAtaGVscGVycy5oCgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlIGIvZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlCmluZGV4 IDFjYjNkZDEwNDgyNS4uZTNlM2RjYTI5ZTQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS1idWYv TWFrZWZpbGUKKysrIGIvZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlCkBAIC0xLDYgKzEsNyBAQAog IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiBvYmoteSA6PSBkbWEtYnVm Lm8gZG1hLWZlbmNlLm8gZG1hLWZlbmNlLWFycmF5Lm8gZG1hLWZlbmNlLWNoYWluLm8gXAogCSBy ZXNlcnZhdGlvbi5vIHNlcW5vLWZlbmNlLm8KK29iai0kKENPTkZJR19ETUFCVUZfSEVBUFMpCSs9 IGhlYXBzLwogb2JqLSQoQ09ORklHX0RNQUJVRl9IRUFQUykJKz0gZG1hLWhlYXAubwogb2JqLSQo Q09ORklHX1NZTkNfRklMRSkJCSs9IHN5bmNfZmlsZS5vCiBvYmotJChDT05GSUdfU1dfU1lOQykJ CSs9IHN3X3N5bmMubyBzeW5jX2RlYnVnLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9o ZWFwcy9NYWtlZmlsZSBiL2RyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9NYWtlZmlsZQpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmRlNDk4OTgxMTJkYgotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9NYWtlZmlsZQpAQCAtMCwwICsxLDIgQEAKKyMg U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKK29iai15CQkJCQkrPSBoZWFwLWhlbHBl cnMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2hlYXBzL2hlYXAtaGVscGVycy5jIGIv ZHJpdmVycy9kbWEtYnVmL2hlYXBzL2hlYXAtaGVscGVycy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwMC4uZmJhMTg5NWYzYmYwCi0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9kbWEtYnVmL2hlYXBzL2hlYXAtaGVscGVycy5jCkBAIC0wLDAgKzEsMjYyIEBACisvLyBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5o PgorI2luY2x1ZGUgPGxpbnV4L2RtYS1idWYuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNp bmNsdWRlIDxsaW51eC9pZHIuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8 bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDx1YXBp L2xpbnV4L2RtYS1oZWFwLmg+CisKKyNpbmNsdWRlICJoZWFwLWhlbHBlcnMuaCIKKwordm9pZCBJ TklUX0hFQVBfSEVMUEVSX0JVRkZFUihzdHJ1Y3QgaGVhcF9oZWxwZXJfYnVmZmVyICpidWZmZXIs CisJCQkgICAgIHZvaWQgKCpmcmVlKShzdHJ1Y3QgaGVhcF9oZWxwZXJfYnVmZmVyICopKQorewor CWJ1ZmZlci0+cHJpdmF0ZV9mbGFncyA9IDA7CisJYnVmZmVyLT5wcml2X3ZpcnQgPSBOVUxMOwor CW11dGV4X2luaXQoJmJ1ZmZlci0+bG9jayk7CisJYnVmZmVyLT52bWFwX2NudCA9IDA7CisJYnVm ZmVyLT52YWRkciA9IE5VTEw7CisJYnVmZmVyLT5wYWdlY291bnQgPSAwOworCWJ1ZmZlci0+cGFn ZXMgPSBOVUxMOzsKKwlJTklUX0xJU1RfSEVBRCgmYnVmZmVyLT5hdHRhY2htZW50cyk7CisJYnVm ZmVyLT5mcmVlID0gZnJlZTsKK30KKworc3RhdGljIHZvaWQgKmRtYV9oZWFwX21hcF9rZXJuZWwo c3RydWN0IGhlYXBfaGVscGVyX2J1ZmZlciAqYnVmZmVyKQoreworCXZvaWQgKnZhZGRyOworCisJ dmFkZHIgPSB2bWFwKGJ1ZmZlci0+cGFnZXMsIGJ1ZmZlci0+cGFnZWNvdW50LCBWTV9NQVAsIFBB R0VfS0VSTkVMKTsKKwlpZiAoIXZhZGRyKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwor CXJldHVybiB2YWRkcjsKK30KKworc3RhdGljIHZvaWQgZG1hX2hlYXBfYnVmZmVyX2Rlc3Ryb3ko c3RydWN0IGRtYV9oZWFwX2J1ZmZlciAqaGVhcF9idWZmZXIpCit7CisJc3RydWN0IGhlYXBfaGVs cGVyX2J1ZmZlciAqYnVmZmVyID0gdG9faGVscGVyX2J1ZmZlcihoZWFwX2J1ZmZlcik7CisKKwlp ZiAoYnVmZmVyLT52bWFwX2NudCA+IDApIHsKKwkJV0FSTigiJXM6IGJ1ZmZlciBzdGlsbCBtYXBw ZWQgaW4gdGhlIGtlcm5lbFxuIiwKKwkJCSAgICAgX19mdW5jX18pOworCQl2dW5tYXAoYnVmZmVy LT52YWRkcik7CisJfQorCisJYnVmZmVyLT5mcmVlKGJ1ZmZlcik7Cit9CisKK3N0YXRpYyB2b2lk ICpkbWFfaGVhcF9idWZmZXJfdm1hcF9nZXQoc3RydWN0IGRtYV9oZWFwX2J1ZmZlciAqaGVhcF9i dWZmZXIpCit7CisJc3RydWN0IGhlYXBfaGVscGVyX2J1ZmZlciAqYnVmZmVyID0gdG9faGVscGVy X2J1ZmZlcihoZWFwX2J1ZmZlcik7CisJdm9pZCAqdmFkZHI7CisKKwlpZiAoYnVmZmVyLT52bWFw X2NudCkgeworCQlidWZmZXItPnZtYXBfY250Kys7CisJCXJldHVybiBidWZmZXItPnZhZGRyOwor CX0KKwl2YWRkciA9IGRtYV9oZWFwX21hcF9rZXJuZWwoYnVmZmVyKTsKKwlpZiAoV0FSTl9PTkNF KCF2YWRkciwKKwkJICAgICAgImhlYXAtPm9wcy0+bWFwX2tlcm5lbCBzaG91bGQgcmV0dXJuIEVS Ul9QVFIgb24gZXJyb3IiKSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJaWYgKElTX0VS Uih2YWRkcikpCisJCXJldHVybiB2YWRkcjsKKwlidWZmZXItPnZhZGRyID0gdmFkZHI7CisJYnVm ZmVyLT52bWFwX2NudCsrOworCXJldHVybiB2YWRkcjsKK30KKworc3RhdGljIHZvaWQgZG1hX2hl YXBfYnVmZmVyX3ZtYXBfcHV0KHN0cnVjdCBkbWFfaGVhcF9idWZmZXIgKmhlYXBfYnVmZmVyKQor eworCXN0cnVjdCBoZWFwX2hlbHBlcl9idWZmZXIgKmJ1ZmZlciA9IHRvX2hlbHBlcl9idWZmZXIo aGVhcF9idWZmZXIpOworCisJaWYgKCEtLWJ1ZmZlci0+dm1hcF9jbnQpIHsKKwkJdnVubWFwKGJ1 ZmZlci0+dmFkZHIpOworCQlidWZmZXItPnZhZGRyID0gTlVMTDsKKwl9Cit9CisKK3N0cnVjdCBk bWFfaGVhcHNfYXR0YWNobWVudCB7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBzZ190 YWJsZSB0YWJsZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworCitzdGF0aWMgaW50IGRt YV9oZWFwX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAorCQkJICAgICAgc3RydWN0IGRt YV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudCkKK3sKKwlzdHJ1Y3QgZG1hX2hlYXBzX2F0dGFj aG1lbnQgKmE7CisJc3RydWN0IGRtYV9oZWFwX2J1ZmZlciAqaGVhcF9idWZmZXIgPSBkbWFidWYt PnByaXY7CisJc3RydWN0IGhlYXBfaGVscGVyX2J1ZmZlciAqYnVmZmVyID0gdG9faGVscGVyX2J1 ZmZlcihoZWFwX2J1ZmZlcik7CisJaW50IHJldDsKKworCWEgPSBremFsbG9jKHNpemVvZigqYSks IEdGUF9LRVJORUwpOworCWlmICghYSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBzZ19h bGxvY190YWJsZV9mcm9tX3BhZ2VzKCZhLT50YWJsZSwgYnVmZmVyLT5wYWdlcywKKwkJCQkJYnVm ZmVyLT5wYWdlY291bnQsIDAsCisJCQkJCWJ1ZmZlci0+cGFnZWNvdW50IDw8IFBBR0VfU0hJRlQs CisJCQkJCUdGUF9LRVJORUwpOworCWlmIChyZXQpIHsKKwkJa2ZyZWUoYSk7CisJCXJldHVybiBy ZXQ7CisJfQorCisJYS0+ZGV2ID0gYXR0YWNobWVudC0+ZGV2OworCUlOSVRfTElTVF9IRUFEKCZh LT5saXN0KTsKKworCWF0dGFjaG1lbnQtPnByaXYgPSBhOworCisJbXV0ZXhfbG9jaygmYnVmZmVy LT5sb2NrKTsKKwlsaXN0X2FkZCgmYS0+bGlzdCwgJmJ1ZmZlci0+YXR0YWNobWVudHMpOworCW11 dGV4X3VubG9jaygmYnVmZmVyLT5sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9p ZCBkbWFfaGVhcF9kZXRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKKwkJCQlzdHJ1Y3QgZG1h X2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50KQoreworCXN0cnVjdCBkbWFfaGVhcHNfYXR0YWNo bWVudCAqYSA9IGF0dGFjaG1lbnQtPnByaXY7CisJc3RydWN0IGRtYV9oZWFwX2J1ZmZlciAqaGVh cF9idWZmZXIgPSBkbWFidWYtPnByaXY7CisJc3RydWN0IGhlYXBfaGVscGVyX2J1ZmZlciAqYnVm ZmVyID0gdG9faGVscGVyX2J1ZmZlcihoZWFwX2J1ZmZlcik7CisKKwltdXRleF9sb2NrKCZidWZm ZXItPmxvY2spOworCWxpc3RfZGVsKCZhLT5saXN0KTsKKwltdXRleF91bmxvY2soJmJ1ZmZlci0+ bG9jayk7CisKKwlzZ19mcmVlX3RhYmxlKCZhLT50YWJsZSk7CisJa2ZyZWUoYSk7Cit9CisKK3N0 YXRpYyBzdHJ1Y3Qgc2dfdGFibGUgKmRtYV9oZWFwX21hcF9kbWFfYnVmKAorCQkJCQlzdHJ1Y3Qg ZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50LAorCQkJCQllbnVtIGRtYV9kYXRhX2RpcmVj dGlvbiBkaXJlY3Rpb24pCit7CisJc3RydWN0IGRtYV9oZWFwc19hdHRhY2htZW50ICphID0gYXR0 YWNobWVudC0+cHJpdjsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnRhYmxlOworCisJdGFibGUgPSAmYS0+ dGFibGU7CisKKwlpZiAoIWRtYV9tYXBfc2coYXR0YWNobWVudC0+ZGV2LCB0YWJsZS0+c2dsLCB0 YWJsZS0+bmVudHMsCisJCQlkaXJlY3Rpb24pKQorCQl0YWJsZSA9IEVSUl9QVFIoLUVOT01FTSk7 CisJcmV0dXJuIHRhYmxlOworfQorCitzdGF0aWMgdm9pZCBkbWFfaGVhcF91bm1hcF9kbWFfYnVm KHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsCisJCQkgICAgICBzdHJ1Y3Qg c2dfdGFibGUgKnRhYmxlLAorCQkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0 aW9uKQoreworCWRtYV91bm1hcF9zZyhhdHRhY2htZW50LT5kZXYsIHRhYmxlLT5zZ2wsIHRhYmxl LT5uZW50cywgZGlyZWN0aW9uKTsKK30KKworc3RhdGljIHZtX2ZhdWx0X3QgZG1hX2hlYXBfdm1f ZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpCit7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2 bWEgPSB2bWYtPnZtYTsKKwlzdHJ1Y3QgaGVhcF9oZWxwZXJfYnVmZmVyICpidWZmZXIgPSB2bWEt PnZtX3ByaXZhdGVfZGF0YTsKKworCXZtZi0+cGFnZSA9IGJ1ZmZlci0+cGFnZXNbdm1mLT5wZ29m Zl07CisJZ2V0X3BhZ2Uodm1mLT5wYWdlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29u c3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGRtYV9oZWFwX3ZtX29wcyA9IHsKKwkuZmF1 bHQgPSBkbWFfaGVhcF92bV9mYXVsdCwKK307CisKK3N0YXRpYyBpbnQgZG1hX2hlYXBfbW1hcChz dHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlz dHJ1Y3QgZG1hX2hlYXBfYnVmZmVyICpoZWFwX2J1ZmZlciA9IGRtYWJ1Zi0+cHJpdjsKKwlzdHJ1 Y3QgaGVhcF9oZWxwZXJfYnVmZmVyICpidWZmZXIgPSB0b19oZWxwZXJfYnVmZmVyKGhlYXBfYnVm ZmVyKTsKKworCWlmICgodm1hLT52bV9mbGFncyAmIChWTV9TSEFSRUQgfCBWTV9NQVlTSEFSRSkp ID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJdm1hLT52bV9vcHMgPSAmZG1hX2hlYXBfdm1f b3BzOworCXZtYS0+dm1fcHJpdmF0ZV9kYXRhID0gYnVmZmVyOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyB2b2lkIGRtYV9oZWFwX2RtYV9idWZfcmVsZWFzZShzdHJ1Y3QgZG1hX2J1ZiAqZG1h YnVmKQoreworCXN0cnVjdCBkbWFfaGVhcF9idWZmZXIgKmJ1ZmZlciA9IGRtYWJ1Zi0+cHJpdjsK KworCWRtYV9oZWFwX2J1ZmZlcl9kZXN0cm95KGJ1ZmZlcik7Cit9CisKK3N0YXRpYyBpbnQgZG1h X2hlYXBfZG1hX2J1Zl9iZWdpbl9jcHVfYWNjZXNzKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCisJ CQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlzdHJ1Y3QgZG1hX2hl YXBfYnVmZmVyICpoZWFwX2J1ZmZlciA9IGRtYWJ1Zi0+cHJpdjsKKwlzdHJ1Y3QgaGVhcF9oZWxw ZXJfYnVmZmVyICpidWZmZXIgPSB0b19oZWxwZXJfYnVmZmVyKGhlYXBfYnVmZmVyKTsKKwlzdHJ1 Y3QgZG1hX2hlYXBzX2F0dGFjaG1lbnQgKmE7CisJaW50IHJldCA9IDA7CisKKwltdXRleF9sb2Nr KCZidWZmZXItPmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoYSwgJmJ1ZmZlci0+YXR0YWNo bWVudHMsIGxpc3QpIHsKKwkJZG1hX3N5bmNfc2dfZm9yX2NwdShhLT5kZXYsIGEtPnRhYmxlLnNn bCwgYS0+dGFibGUubmVudHMsCisJCQkJICAgIGRpcmVjdGlvbik7CisJfQorCW11dGV4X3VubG9j aygmYnVmZmVyLT5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZG1hX2hl YXBfZG1hX2J1Zl9lbmRfY3B1X2FjY2VzcyhzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAorCQkJCSAg ICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlzdHJ1Y3QgZG1hX2hl YXBfYnVmZmVyICpoZWFwX2J1ZmZlciA9IGRtYWJ1Zi0+cHJpdjsKKwlzdHJ1Y3QgaGVhcF9oZWxw ZXJfYnVmZmVyICpidWZmZXIgPSB0b19oZWxwZXJfYnVmZmVyKGhlYXBfYnVmZmVyKTsKKwlzdHJ1 Y3QgZG1hX2hlYXBzX2F0dGFjaG1lbnQgKmE7CisKKwltdXRleF9sb2NrKCZidWZmZXItPmxvY2sp OworCWxpc3RfZm9yX2VhY2hfZW50cnkoYSwgJmJ1ZmZlci0+YXR0YWNobWVudHMsIGxpc3QpIHsK KwkJZG1hX3N5bmNfc2dfZm9yX2RldmljZShhLT5kZXYsIGEtPnRhYmxlLnNnbCwgYS0+dGFibGUu bmVudHMsCisJCQkJICAgICAgIGRpcmVjdGlvbik7CisJfQorCW11dGV4X3VubG9jaygmYnVmZmVy LT5sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCAqZG1hX2hlYXBfZG1hX2J1 Zl92bWFwKHN0cnVjdCBkbWFfYnVmICpkbWFidWYpCit7CisJc3RydWN0IGRtYV9oZWFwX2J1ZmZl ciAqaGVhcF9idWZmZXIgPSBkbWFidWYtPnByaXY7CisJc3RydWN0IGhlYXBfaGVscGVyX2J1ZmZl ciAqYnVmZmVyID0gdG9faGVscGVyX2J1ZmZlcihoZWFwX2J1ZmZlcik7CisJdm9pZCAqdmFkZHI7 CisKKwltdXRleF9sb2NrKCZidWZmZXItPmxvY2spOworCXZhZGRyID0gZG1hX2hlYXBfYnVmZmVy X3ZtYXBfZ2V0KGhlYXBfYnVmZmVyKTsKKwltdXRleF91bmxvY2soJmJ1ZmZlci0+bG9jayk7CisK KwlyZXR1cm4gdmFkZHI7Cit9CisKK3N0YXRpYyB2b2lkIGRtYV9oZWFwX2RtYV9idWZfdnVubWFw KHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIHZvaWQgKnZhZGRyKQoreworCXN0cnVjdCBkbWFfaGVh cF9idWZmZXIgKmhlYXBfYnVmZmVyID0gZG1hYnVmLT5wcml2OworCXN0cnVjdCBoZWFwX2hlbHBl cl9idWZmZXIgKmJ1ZmZlciA9IHRvX2hlbHBlcl9idWZmZXIoaGVhcF9idWZmZXIpOworCisJbXV0 ZXhfbG9jaygmYnVmZmVyLT5sb2NrKTsKKwlkbWFfaGVhcF9idWZmZXJfdm1hcF9wdXQoaGVhcF9i dWZmZXIpOworCW11dGV4X3VubG9jaygmYnVmZmVyLT5sb2NrKTsKK30KKworY29uc3Qgc3RydWN0 IGRtYV9idWZfb3BzIGhlYXBfaGVscGVyX29wcyA9IHsKKwkubWFwX2RtYV9idWYgPSBkbWFfaGVh cF9tYXBfZG1hX2J1ZiwKKwkudW5tYXBfZG1hX2J1ZiA9IGRtYV9oZWFwX3VubWFwX2RtYV9idWYs CisJLm1tYXAgPSBkbWFfaGVhcF9tbWFwLAorCS5yZWxlYXNlID0gZG1hX2hlYXBfZG1hX2J1Zl9y ZWxlYXNlLAorCS5hdHRhY2ggPSBkbWFfaGVhcF9hdHRhY2gsCisJLmRldGFjaCA9IGRtYV9oZWFw X2RldGFjaCwKKwkuYmVnaW5fY3B1X2FjY2VzcyA9IGRtYV9oZWFwX2RtYV9idWZfYmVnaW5fY3B1 X2FjY2VzcywKKwkuZW5kX2NwdV9hY2Nlc3MgPSBkbWFfaGVhcF9kbWFfYnVmX2VuZF9jcHVfYWNj ZXNzLAorCS52bWFwID0gZG1hX2hlYXBfZG1hX2J1Zl92bWFwLAorCS52dW5tYXAgPSBkbWFfaGVh cF9kbWFfYnVmX3Z1bm1hcCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvaGVhcHMv aGVhcC1oZWxwZXJzLmggYi9kcml2ZXJzL2RtYS1idWYvaGVhcHMvaGVhcC1oZWxwZXJzLmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi43ZTBhODJiMTFjOWUKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS1idWYvaGVhcHMvaGVhcC1oZWxwZXJzLmgKQEAgLTAs MCArMSw1NCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKy8qCisg KiBETUFCVUYgSGVhcHMgaGVscGVyIGNvZGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v Z2xlLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgTGluYXJvIEx0ZC4KKyAqLworCisjaWZu ZGVmIF9IRUFQX0hFTFBFUlNfSAorI2RlZmluZSBfSEVBUF9IRUxQRVJTX0gKKworI2luY2x1ZGUg PGxpbnV4L2RtYS1oZWFwLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCisvKioKKyAqIHN0 cnVjdCBkbWFfaGVhcF9idWZmZXIgLSBtZXRhZGF0YSBmb3IgYSBwYXJ0aWN1bGFyIGJ1ZmZlcgor ICogQGhlYXA6CQliYWNrIHBvaW50ZXIgdG8gdGhlIGhlYXAgdGhlIGJ1ZmZlciBjYW1lIGZyb20K KyAqIEBkbWFidWY6CQliYWNraW5nIGRtYS1idWYgZm9yIHRoaXMgYnVmZmVyCisgKiBAc2l6ZToJ CXNpemUgb2YgdGhlIGJ1ZmZlcgorICogQGZsYWdzOgkJYnVmZmVyIHNwZWNpZmljIGZsYWdzCisg Ki8KK3N0cnVjdCBkbWFfaGVhcF9idWZmZXIgeworCXN0cnVjdCBkbWFfaGVhcCAqaGVhcDsKKwlz dHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmOworCXNpemVfdCBzaXplOworCXVuc2lnbmVkIGxvbmcgZmxh Z3M7Cit9OworCitzdHJ1Y3QgaGVhcF9oZWxwZXJfYnVmZmVyIHsKKwlzdHJ1Y3QgZG1hX2hlYXBf YnVmZmVyIGhlYXBfYnVmZmVyOworCisJdW5zaWduZWQgbG9uZyBwcml2YXRlX2ZsYWdzOworCXZv aWQgKnByaXZfdmlydDsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKKwlpbnQgdm1hcF9jbnQ7CisJdm9p ZCAqdmFkZHI7CisJcGdvZmZfdCBwYWdlY291bnQ7CisJc3RydWN0IHBhZ2UgKipwYWdlczsKKwlz dHJ1Y3QgbGlzdF9oZWFkIGF0dGFjaG1lbnRzOworCisJdm9pZCAoKmZyZWUpKHN0cnVjdCBoZWFw X2hlbHBlcl9idWZmZXIgKmJ1ZmZlcik7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBoZWFw X2hlbHBlcl9idWZmZXIgKnRvX2hlbHBlcl9idWZmZXIoCisJCQkJCQlzdHJ1Y3QgZG1hX2hlYXBf YnVmZmVyICpoKQoreworCXJldHVybiBjb250YWluZXJfb2YoaCwgc3RydWN0IGhlYXBfaGVscGVy X2J1ZmZlciwgaGVhcF9idWZmZXIpOworfQorCit2b2lkIElOSVRfSEVBUF9IRUxQRVJfQlVGRkVS KHN0cnVjdCBoZWFwX2hlbHBlcl9idWZmZXIgKmJ1ZmZlciwKKwkJCQkgdm9pZCAoKmZyZWUpKHN0 cnVjdCBoZWFwX2hlbHBlcl9idWZmZXIgKikpOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBkbWFfYnVm X29wcyBoZWFwX2hlbHBlcl9vcHM7CisKKyNlbmRpZiAvKiBfSEVBUF9IRUxQRVJTX0ggKi8KLS0g CjIuMTcuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K ZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs