From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Andrew F. Davis" Subject: [EARLY RFC][PATCH] dma-buf: Add dma-buf heaps framework Date: Mon, 25 Feb 2019 08:36:04 -0600 Message-ID: <20190225143604.27511-1-afd@ti.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from fllv0015.ext.ti.com (fllv0015.ext.ti.com [198.47.19.141]) by gabe.freedesktop.org (Postfix) with ESMTPS id A2A5F89078 for ; Mon, 25 Feb 2019 14:36:15 +0000 (UTC) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: John Stultz , Laura Abbott , Sumit Semwal , Benjamin Gaignard , Liam Mark , Brian Starkey , Chenbo Feng , Alistair Strachan Cc: dri-devel@lists.freedesktop.org, "Andrew F . Davis" List-Id: dri-devel@lists.freedesktop.org VGhpcyBmcmFtZXdvcmsgYWxsb3dzIGEgdW5pZmllZCB1c2Vyc3BhY2UgaW50ZXJmYWNlIGZvciBk bWEtYnVmCmV4cG9ydGVycywgYWxsb3dpbmcgdXNlcmxhbmQgdG8gYWxsb2NhdGUgc3BlY2lmaWMg dHlwZXMgb2YgbWVtb3J5CmZvciB1c2UgaW4gZG1hLWJ1ZiBzaGFyaW5nLgoKRWFjaCBoZWFwIGlz IGdpdmVuIGl0cyBvd24gZGV2aWNlIG5vZGUsIHdoaWNoIGEgdXNlciBjYW4gYWxsb2NhdGUKYSBk bWEtYnVmIGZkIGZyb20gdXNpbmcgdGhlIERNQV9IRUFQX0lPQ19BTExPQy4KClNpZ25lZC1vZmYt Ynk6IEFuZHJldyBGLiBEYXZpcyA8YWZkQHRpLmNvbT4KLS0tCgpIZWxsbyBhbGwsCgpJIGhhZCBh IGxpdHRsZSBsZXNzIHRpbWUgb3ZlciB0aGUgd2Vla2VuZCB0aGFuIEkgdGhvdWdodCBJIHdvdWxk IHRvCmNsZWFuIHRoaXMgdXAgbW9yZSBhbmQgZmluaXNoIHRoZSBmaXJzdCBzZXQgb2YgdXNlciBo ZWFwcywgYnV0IHdhbnRlZAp0byBnZXQgdGhpcyBvdXQgYW55d2F5LgoKSU9OIGluIGl0cyBjdXJy ZW50IGZvcm0gYXNzdW1lcyBhIGxvdCBhYm91dCB0aGUgbWVtb3J5IGl0IGV4cG9ydHMgYW5kCnRo ZXNlIGFzc3VtcHRpb25zIGxlYWQgdG8gcmVzdHJpY3Rpb25zIG9uIHRoZSBmdWxsIHJhbmdlIG9m IG9wZXJhdGlvbnMKZG1hLWJ1ZidzIGNhbiBwcm9kdWNlLiBEdWUgdG8gdGhpcyBpZiB3ZSBhcmUg dG8gYWRkIHRoaXMgYXMgYW4gZXh0ZW5zaW9uCm9mIHRoZSBjb3JlIGRtYS1idWYgdGhlbiBpdCBz aG91bGQgb25seSBiZSB0aGUgdXNlci1zcGFjZSBhZHZlcnRpc2VtZW50CmFuZCBhbGxvY2F0aW9u IGZyb250LWVuZC4gQWxsIGRtYS1idWYgZXhwb3J0aW5nIGFuZCBvcGVyYXRpb24gbmVlZCB0byBi ZQpwbGFjZWQgaW4gdGhlIGNvbnRyb2wgb2YgdGhlIGV4cG9ydGluZyBoZWFwLiBUaGUgY29yZSBi ZWNvbWVzIHJhdGhlcgpzbWFsbCwganVzdCBhIGZldyBodW5kcmVkIGxpbmVzIHlvdSBzZWUgaGVy ZS4gVGhpcyBpcyBub3QgdG8gc2F5IHdlCnNob3VsZCBub3QgcHJvdmlkZSBoZWxwZXJzIHRvIG1h a2UgdGhlIGhlYXAgZXhwb3J0ZXJzIG1vcmUgc2ltcGxlLCBidXQKdGhleSBzaG91bGQgb25seSBi ZSBoZWxwZXJzIGFuZCBub3QgZW5mb3JjZWQgYnkgdGhlIGNvcmUgZnJhbWV3b3JrLgoKQmFzaWMg dXNlIG1vZGVsIGhlcmUgaXMgYW4gZXhwb3J0ZXIgKGRlZGljYXRlZCBoZWFwIG1lbW9yeSBkcml2 ZXIsIENNQSwKU3lzdGVtLCBldGMuKSByZWdpc3RlcnMgd2l0aCB0aGUgZnJhbWV3b3JrIGJ5IHBy b3ZpZGluZyBhIHN0cnVjdApkbWFfaGVhcF9pbmZvIHdoaWNoIGdpdmVzIHVzIHRoZSBuZWVkZWQg aW5mbyB0byBleHBvcnQgdGhpcyBoZWFwIHRvCnVzZXJzcGFjZSBhcyBhIGRldmljZSBub2RlLiBO ZXh0IGEgdXNlciB3aWxsIHJlcXVlc3QgYW4gYWxsb2NhdGlvbiwKdGhlIElPQ1RMIGlzIHBhcnNl ZCBhbmQgdGhlIHJlcXVlc3QgbWFkZSB0byBhIGhlYXAgcHJvdmlkZWQgYWxsb2MoKSBvcC4KVGhl IGhlYXAgc2hvdWxkIHJldHVybiB0aGUgZmlsbGVkIG91dCBzdHJ1Y3QgZG1hX2hlYXBfYnVmZmVy LCBpbmNsdWRpbmcKZXhwb3J0aW5nIHRoZSBidWZmZXIgYXMgYSBkbWEtYnVmLiBUaGlzIGRtYS1i dWYgd2UgdGhlbiByZXR1cm4gdG8gdGhlCnVzZXIgYXMgYSBmZC4gQnVmZmVyIGZyZWUgaXMgc3Rp bGwgYSBiaXQgb3BlbiBhcyB3ZSBuZWVkIHRvIHVwZGF0ZSBzb21lCnN0YXRzIGFuZCBmcmVlIHNv bWUgbWVtb3J5LCBidXQgdGhlIHJlbGVhc2Ugb3BlcmF0aW9uIGlzIGNvbnRyb2xsZWQgYnkKdGhl IGhlYXAgZXhwb3J0ZXIsIHNvIHNvbWUgaG9vayB3aWxsIGhhdmUgdG8gYmUgY3JlYXRlZC4KCkl0 IGFsbCBuZWVkcyBhIGJpdCBtb3JlIHdvcmssIGFuZCBJJ20gc3VyZSBJJ2xsIGZpbmQgbWlzc2lu ZyBwYXJ0cyB3aGVuCkkgYWRkIHNvbWUgbW9yZSBoZWFwcywgYnV0IGhvcGVmdWxseSB0aGlzIGZy YW1ld29yayBpcyBzaW1wbGUgZW5vdWdoIHRoYXQKaXQgZG9lcyBub3QgaW1wZWRlIHRoZSBpbXBs ZW1lbnRhdGlvbiBvZiBhbGwgZnVuY3Rpb25hbGl0eSBvbmNlIHByb3ZpZGVkCmJ5IElPTiAoc2hy aW5rZXIsIGRlbGF5ZWQgZnJlZSksIG5vciBhbnkgbmV3IGZ1bmN0aW9uYWxpdHkgbmVlZGVkIGZv cgpmdXR1cmUgaGVhcCBleHBvcnRpbmcgZGV2aWNlcy4KClRoYW5rcywKQW5kcmV3CgogZHJpdmVy cy9kbWEtYnVmL0tjb25maWcgICAgICAgfCAgMTIgKysKIGRyaXZlcnMvZG1hLWJ1Zi9NYWtlZmls ZSAgICAgIHwgICAxICsKIGRyaXZlcnMvZG1hLWJ1Zi9kbWEtaGVhcC5jICAgIHwgMjY4ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGluY2x1ZGUvbGludXgvZG1hLWhlYXAuaCAg ICAgIHwgIDU3ICsrKysrKysrCiBpbmNsdWRlL3VhcGkvbGludXgvZG1hLWhlYXAuaCB8ICA1NCAr KysrKysrCiA1IGZpbGVzIGNoYW5nZWQsIDM5MiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9kbWEtYnVmL2RtYS1oZWFwLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNs dWRlL2xpbnV4L2RtYS1oZWFwLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3VhcGkvbGlu dXgvZG1hLWhlYXAuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnIGIvZHJp dmVycy9kbWEtYnVmL0tjb25maWcKaW5kZXggMmU1YTBmYWEyY2IxLi4zMGIwZDdjODM5NDUgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnCisrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9L Y29uZmlnCkBAIC0zOSw0ICszOSwxNiBAQCBjb25maWcgVURNQUJVRgogCSAgQSBkcml2ZXIgdG8g bGV0IHVzZXJzcGFjZSB0dXJuIG1lbWZkIHJlZ2lvbnMgaW50byBkbWEtYnVmcy4KIAkgIFFlbXUg Y2FuIHVzZSB0aGlzIHRvIGNyZWF0ZSBob3N0IGRtYWJ1ZnMgZm9yIGd1ZXN0IGZyYW1lYnVmZmVy cy4KIAorbWVudWNvbmZpZyBETUFCVUZfSEVBUFMKKwlib29sICJETUEtQlVGIFVzZXJsYW5kIE1l bW9yeSBIZWFwcyIKKwlkZXBlbmRzIG9uIEhBU19ETUEgJiYgTU1VCisJc2VsZWN0IEdFTkVSSUNf QUxMT0NBVE9SCisJc2VsZWN0IERNQV9TSEFSRURfQlVGRkVSCisJaGVscAorCSAgQ2hvb3NlIHRo aXMgb3B0aW9uIHRvIGVuYWJsZSB0aGUgRE1BLUJVRiB1c2VybGFuZCBtZW1vcnkgaGVhcHMsCisJ ICB0aGlzIGFsbG93cyB1c2Vyc3BhY2UgdG8gYWxsb2NhdGUgZG1hLWJ1ZnMgdGhhdCBjYW4gYmUg c2hhcmVkIGJldHdlZW4KKwkgIGRyaXZlcnMuCisKK3NvdXJjZSAiZHJpdmVycy9kbWEtYnVmL2hl YXBzL0tjb25maWciCisKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9NYWtl ZmlsZSBiL2RyaXZlcnMvZG1hLWJ1Zi9NYWtlZmlsZQppbmRleCAwOTEzYTZjY2FiNWEuLmIwMzMy ZjE0MzQxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlCisrKyBiL2RyaXZl cnMvZG1hLWJ1Zi9NYWtlZmlsZQpAQCAtMSw0ICsxLDUgQEAKIG9iai15IDo9IGRtYS1idWYubyBk bWEtZmVuY2UubyBkbWEtZmVuY2UtYXJyYXkubyByZXNlcnZhdGlvbi5vIHNlcW5vLWZlbmNlLm8K K29iai0kKENPTkZJR19ETUFCVUZfSEVBUFMpCSs9IGRtYS1oZWFwLm8KIG9iai0kKENPTkZJR19T WU5DX0ZJTEUpCQkrPSBzeW5jX2ZpbGUubwogb2JqLSQoQ09ORklHX1NXX1NZTkMpCQkrPSBzd19z eW5jLm8gc3luY19kZWJ1Zy5vCiBvYmotJChDT05GSUdfVURNQUJVRikJCSs9IHVkbWFidWYubwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2RtYS1oZWFwLmMgYi9kcml2ZXJzL2RtYS1idWYv ZG1hLWhlYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjcyZWQy MjVmYTg5MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtaGVhcC5jCkBA IC0wLDAgKzEsMjY4IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoK KyAqIEZyYW1ld29yayBmb3IgdXNlcnNwYWNlIERNQS1CVUYgYWxsb2NhdGlvbnMKKyAqCisgKiBD b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgTGlu YXJvIEx0ZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4 L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9k bWEtYnVmLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaWRyLmg+ CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNs dWRlIDxsaW51eC91YWNjZXNzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9kbWEtaGVhcC5oPgorI2lu Y2x1ZGUgPHVhcGkvbGludXgvZG1hLWhlYXAuaD4KKworI2RlZmluZSBERVZOQU1FICJkbWFfaGVh cCIKKworI2RlZmluZSBOVU1fSEVBUF9NSU5PUlMgMTI4CitzdGF0aWMgREVGSU5FX0lEUihkbWFf aGVhcF9pZHIpOworc3RhdGljIERFRklORV9NVVRFWChtaW5vcl9sb2NrKTsgLyogUHJvdGVjdCBp ZHIgYWNjZXNzZXMgKi8KKworZGV2X3QgZG1hX2hlYXBfZGV2dDsKK3N0cnVjdCBjbGFzcyAqZG1h X2hlYXBfY2xhc3M7CitzdHJ1Y3QgbGlzdF9oZWFkIGRtYV9oZWFwX2xpc3Q7CitzdHJ1Y3QgZGVu dHJ5ICpkbWFfaGVhcF9kZWJ1Z19yb290OworCisvKioKKyAqIHN0cnVjdCBkbWFfaGVhcCAtIHJl cHJlc2VudHMgYSBkbWFidWYgaGVhcCBpbiB0aGUgc3lzdGVtCisgKiBAbmFtZToJCXVzZWQgZm9y IGRlYnVnZ2luZy9kZXZpY2Utbm9kZSBuYW1lCisgKiBAb3BzOgkJb3BzIHN0cnVjdCBmb3IgdGhp cyBoZWFwCisgKiBAbWlub3IJCW1pbm9yIG51bWJlciBvZiB0aGlzIGhlYXAgZGV2aWNlCisgKiBA aGVhcF9kZXZ0CQloZWFwIGRldmljZSBub2RlCisgKiBAaGVhcF9jZGV2CQloZWFwIGNoYXIgZGV2 aWNlCisgKiBAbnVtX29mX2J1ZmZlcnMJdGhlIG51bWJlciBvZiBjdXJyZW50bHkgYWxsb2NhdGVk IGJ1ZmZlcnMKKyAqIEBudW1fb2ZfYWxsb2NfYnl0ZXMJdGhlIG51bWJlciBvZiBhbGxvY2F0ZWQg Ynl0ZXMKKyAqIEBhbGxvY19ieXRlc193bQl0aGUgbnVtYmVyIG9mIGFsbG9jYXRlZCBieXRlcyB3 YXRlcm1hcmsKKyAqIEBzdGF0X2xvY2sJCWxvY2sgZm9yIGhlYXAgc3RhdGlzdGljcworICoKKyAq IFJlcHJlc2VudHMgYSBoZWFwIG9mIG1lbW9yeSBmcm9tIHdoaWNoIGJ1ZmZlcnMgY2FuIGJlIG1h ZGUuCisgKi8KK3N0cnVjdCBkbWFfaGVhcCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlzdHJ1Y3Qg ZG1hX2hlYXBfb3BzICpvcHM7CisJdW5zaWduZWQgaW50IG1pbm9yOworCWRldl90IGhlYXBfZGV2 dDsKKwlzdHJ1Y3QgY2RldiBoZWFwX2NkZXY7CisKKwkvKiBoZWFwIHN0YXRpc3RpY3MgKi8KKwl1 NjQgbnVtX29mX2J1ZmZlcnM7CisJdTY0IG51bV9vZl9hbGxvY19ieXRlczsKKwl1NjQgYWxsb2Nf Ynl0ZXNfd207CisJc3BpbmxvY2tfdCBzdGF0X2xvY2s7Cit9OworCisvKgorICogVGhpcyBzaG91 bGQgYmUgY2FsbGVkIGJ5IHRoZSBoZWFwIGV4cG9ydGVyIHdoZW4gYSBidWZmZXJzIGRtYS1idWYK KyAqIGhhbmRsZSBpcyByZWxlYXNlZCBzbyB0aGUgY29yZSBjYW4gdXBkYXRlIHRoZSBzdGF0cyBh bmQgcmVsZWFzZSB0aGUKKyAqIGJ1ZmZlciBoYW5kbGUgbWVtb3J5LgorICoKKyAqIE9yIHdlIGNv dWxkIGZpbmQgYSB3YXkgdG8gaG9vayBpbnRvIHRoZSBmZCBvciBzdHJ1Y3QgZG1hX2J1ZiBpdHNl bGY/CisgKi8KK3ZvaWQgZG1hX2hlYXBfYnVmZmVyX2ZyZWUoc3RydWN0IGRtYV9oZWFwX2J1ZmZl ciAqYnVmZmVyKQoreworCXNwaW5fbG9jaygmYnVmZmVyLT5oZWFwLT5zdGF0X2xvY2spOworCWJ1 ZmZlci0+aGVhcC0+bnVtX29mX2J1ZmZlcnMtLTsKKwlidWZmZXItPmhlYXAtPm51bV9vZl9hbGxv Y19ieXRlcyAtPSBidWZmZXItPnNpemU7CisJc3Bpbl91bmxvY2soJmJ1ZmZlci0+aGVhcC0+c3Rh dF9sb2NrKTsKKworCWtmcmVlKGJ1ZmZlcik7Cit9CisKK3N0YXRpYyBpbnQgZG1hX2hlYXBfYnVm ZmVyX2FsbG9jKHN0cnVjdCBkbWFfaGVhcCAqaGVhcCwgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50 IGZsYWdzKQoreworCXN0cnVjdCBkbWFfaGVhcF9idWZmZXIgKmJ1ZmZlcjsKKwlpbnQgZmQsIHJl dDsKKworCWJ1ZmZlciA9IGt6YWxsb2Moc2l6ZW9mKCpidWZmZXIpLCBHRlBfS0VSTkVMKTsKKwlp ZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlidWZmZXItPmhlYXAgPSBoZWFwOwor CXJldCA9IGhlYXAtPm9wcy0+YWxsb2NhdGUoaGVhcCwgYnVmZmVyLCBsZW4sIGZsYWdzKTsKKwlp ZiAocmV0KSB7CisJCWtmcmVlKGJ1ZmZlcik7CisJCXJldHVybiByZXQ7CisJfQorCisJZmQgPSBk bWFfYnVmX2ZkKGJ1ZmZlci0+ZG1hYnVmLCBPX0NMT0VYRUMpOworCWlmIChmZCA8IDApIHsKKwkJ ZG1hX2J1Zl9wdXQoYnVmZmVyLT5kbWFidWYpOworCQlyZXR1cm4gZmQ7CisJfQorCisJc3Bpbl9s b2NrKCZoZWFwLT5zdGF0X2xvY2spOworCWhlYXAtPm51bV9vZl9idWZmZXJzKys7CisJaGVhcC0+ bnVtX29mX2FsbG9jX2J5dGVzICs9IGJ1ZmZlci0+c2l6ZTsKKwlpZiAoaGVhcC0+bnVtX29mX2Fs bG9jX2J5dGVzID4gaGVhcC0+YWxsb2NfYnl0ZXNfd20pCisJCWhlYXAtPmFsbG9jX2J5dGVzX3dt ID0gaGVhcC0+bnVtX29mX2FsbG9jX2J5dGVzOworCXNwaW5fdW5sb2NrKCZoZWFwLT5zdGF0X2xv Y2spOworCisJcmV0dXJuIGZkOworfQorCitzdGF0aWMgaW50IGRtYV9oZWFwX29wZW4oc3RydWN0 IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IGRtYV9oZWFwICpo ZWFwOworCisJbXV0ZXhfbG9jaygmbWlub3JfbG9jayk7CisJaGVhcCA9IGlkcl9maW5kKCZkbWFf aGVhcF9pZHIsIGltaW5vcihpbm9kZSkpOworCW11dGV4X3VubG9jaygmbWlub3JfbG9jayk7CisJ aWYgKCFoZWFwKSB7CisJCXByX2VycigiZG1hX2hlYXA6IG1pbm9yICVkIHVua25vd24uXG4iLCBp bWlub3IoaW5vZGUpKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogaW5zdGFuY2UgZGF0 YSBhcyBjb250ZXh0ICovCisJZmlscC0+cHJpdmF0ZV9kYXRhID0gaGVhcDsKKwlub25zZWVrYWJs ZV9vcGVuKGlub2RlLCBmaWxwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRtYV9o ZWFwX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJ ZmlscC0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgbG9u ZyBkbWFfaGVhcF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5z aWduZWQgbG9uZyBhcmcpCit7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIERNQV9IRUFQX0lPQ19B TExPQzoKKwl7CisJCXN0cnVjdCBkbWFfaGVhcF9hbGxvY2F0aW9uX2RhdGEgaGVhcF9hbGxvY2F0 aW9uOworCQlzdHJ1Y3QgZG1hX2hlYXAgKmhlYXAgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJCWlu dCBmZDsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoJmhlYXBfYWxsb2NhdGlvbiwgKHZvaWQgX191 c2VyICopYXJnLCBfSU9DX1NJWkUoY21kKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAo aGVhcF9hbGxvY2F0aW9uLnJlc2VydmVkMCB8fAorCQkgICAgaGVhcF9hbGxvY2F0aW9uLnJlc2Vy dmVkMSkgeworCQkJcHJfd2Fybl9vbmNlKCJkbWFfaGVhcDogaW9jdGwgZGF0YSBub3QgdmFsaWRc biIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlmZCA9IGRtYV9oZWFwX2J1ZmZlcl9h bGxvYyhoZWFwLCBoZWFwX2FsbG9jYXRpb24ubGVuLCBoZWFwX2FsbG9jYXRpb24uZmxhZ3MpOwor CQlpZiAoZmQgPCAwKQorCQkJcmV0dXJuIGZkOworCisJCWhlYXBfYWxsb2NhdGlvbi5mZCA9IGZk OworCisJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmaGVhcF9hbGxvY2F0 aW9uLCBfSU9DX1NJWkUoY21kKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlicmVhazsKKwl9 CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRtYV9oZWFwX2ZvcHMgPSB7CisJLm93 bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gZG1hX2hlYXBfb3BlbiwKKwku cmVsZWFzZQk9IGRtYV9oZWFwX3JlbGVhc2UsCisJLnVubG9ja2VkX2lvY3RsID0gZG1hX2hlYXBf aW9jdGwsCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRfaW9jdGwJPSBkbWFfaGVhcF9p b2N0bCwKKyNlbmRpZgorfTsKKworaW50IGRtYV9oZWFwX2FkZChzdHJ1Y3QgZG1hX2hlYXBfaW5m byAqaGVhcF9pbmZvKQoreworCXN0cnVjdCBkbWFfaGVhcCAqaGVhcDsKKwlzdHJ1Y3QgZGV2aWNl ICpkZXZfcmV0OworCXN0cnVjdCBkZW50cnkgKmhlYXBfcm9vdDsKKwlpbnQgcmV0OworCisJaWYg KCFoZWFwX2luZm8tPm5hbWUgfHwgIXN0cmNtcChoZWFwX2luZm8tPm5hbWUsICIiKSkgeworCQlw cl9lcnIoImRtYV9oZWFwOiBDYW5ub3QgYWRkIGhlYXAgd2l0aG91dCBhIG5hbWVcbiIpOworCQly ZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIWhlYXBfaW5mby0+b3BzIHx8ICFoZWFwX2luZm8t Pm9wcy0+YWxsb2NhdGUpIHsKKwkJcHJfZXJyKCJkbWFfaGVhcDogQ2Fubm90IGFkZCBoZWFwIHdp dGggaW52YWxpZCBvcHMgc3RydWN0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaGVh cCA9IGt6YWxsb2Moc2l6ZW9mKCpoZWFwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFoZWFwKQorCQly ZXR1cm4gLUVOT01FTTsKKworCWhlYXAtPm5hbWUgPSBoZWFwX2luZm8tPm5hbWU7CisJbWVtY3B5 KGhlYXAtPm9wcywgaGVhcF9pbmZvLT5vcHMsIHNpemVvZigqaGVhcC0+b3BzKSk7CisKKwkvKiBG aW5kIHVudXNlZCBtaW5vciBudW1iZXIgKi8KKwltdXRleF9sb2NrKCZtaW5vcl9sb2NrKTsKKwly ZXQgPSBpZHJfYWxsb2MoJmRtYV9oZWFwX2lkciwgaGVhcCwgMCwgTlVNX0hFQVBfTUlOT1JTLCBH RlBfS0VSTkVMKTsKKwltdXRleF91bmxvY2soJm1pbm9yX2xvY2spOworCWlmIChyZXQgPCAwKSB7 CisJCXByX2VycigiZG1hX2hlYXA6IFVuYWJsZSB0byBnZXQgbWlub3IgbnVtYmVyIGZvciBoZWFw XG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJaGVhcC0+bWlub3IgPSByZXQ7CisKKwkvKiBDcmVh dGUgZGV2aWNlICovCisJaGVhcC0+aGVhcF9kZXZ0ID0gTUtERVYoTUFKT1IoZG1hX2hlYXBfZGV2 dCksIGhlYXAtPm1pbm9yKTsKKwlkZXZfcmV0ID0gZGV2aWNlX2NyZWF0ZShkbWFfaGVhcF9jbGFz cywKKwkJCQlOVUxMLAorCQkJCWhlYXAtPmhlYXBfZGV2dCwKKwkJCQlOVUxMLAorCQkJCWhlYXAt Pm5hbWUpOworCWlmIChJU19FUlIoZGV2X3JldCkpIHsKKwkJcHJfZXJyKCJkbWFfaGVhcDogVW5h YmxlIHRvIGNyZWF0ZSBjaGFyIGRldmljZVxuIik7CisJCXJldHVybiBQVFJfRVJSKGRldl9yZXQp OworCX0KKworCS8qIEFkZCBkZXZpY2UgKi8KKwljZGV2X2luaXQoJmhlYXAtPmhlYXBfY2Rldiwg JmRtYV9oZWFwX2ZvcHMpOworCXJldCA9IGNkZXZfYWRkKCZoZWFwLT5oZWFwX2NkZXYsIGRtYV9o ZWFwX2RldnQsIE5VTV9IRUFQX01JTk9SUyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2aWNlX2Rl c3Ryb3koZG1hX2hlYXBfY2xhc3MsIGhlYXAtPmhlYXBfZGV2dCk7CisJCXByX2VycigiZG1hX2hl YXA6IFVuYWJsZSB0byBhZGQgY2hhciBkZXZpY2VcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwor CWhlYXAtPm51bV9vZl9idWZmZXJzID0gMDsKKwloZWFwLT5udW1fb2ZfYWxsb2NfYnl0ZXMgPSAw OworCWhlYXAtPmFsbG9jX2J5dGVzX3dtID0gMDsKKwlzcGluX2xvY2tfaW5pdCgmaGVhcC0+c3Rh dF9sb2NrKTsKKwloZWFwX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoaGVhcC0+bmFtZSwgZG1h X2hlYXBfZGVidWdfcm9vdCk7CisJZGVidWdmc19jcmVhdGVfdTY0KCJudW1fb2ZfYnVmZmVycyIs IDA0NDQsIGhlYXBfcm9vdCwgJmhlYXAtPm51bV9vZl9idWZmZXJzKTsKKwlkZWJ1Z2ZzX2NyZWF0 ZV91NjQoIm51bV9vZl9hbGxvY19ieXRlcyIsIDA0NDQsIGhlYXBfcm9vdCwgJmhlYXAtPm51bV9v Zl9hbGxvY19ieXRlcyk7CisJZGVidWdmc19jcmVhdGVfdTY0KCJhbGxvY19ieXRlc193bSIsIDA0 NDQsIGhlYXBfcm9vdCwgJmhlYXAtPmFsbG9jX2J5dGVzX3dtKTsKKworCXJldHVybiAwOworfQor RVhQT1JUX1NZTUJPTChkbWFfaGVhcF9hZGQpOworCitzdGF0aWMgaW50IGRtYV9oZWFwX2luaXQo dm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gYWxsb2NfY2hyZGV2X3JlZ2lvbigmZG1hX2hl YXBfZGV2dCwgMCwgTlVNX0hFQVBfTUlOT1JTLCBERVZOQU1FKTsKKwlpZiAocmV0KQorCQlyZXR1 cm4gcmV0OworCisJZG1hX2hlYXBfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsIERF Vk5BTUUpOworCWlmIChJU19FUlIoZG1hX2hlYXBfY2xhc3MpKSB7CisJCXVucmVnaXN0ZXJfY2hy ZGV2X3JlZ2lvbihkbWFfaGVhcF9kZXZ0LCBOVU1fSEVBUF9NSU5PUlMpOworCQlyZXR1cm4gUFRS X0VSUihkbWFfaGVhcF9jbGFzcyk7CisJfQorCisJZG1hX2hlYXBfZGVidWdfcm9vdCA9IGRlYnVn ZnNfY3JlYXRlX2RpcigiZG1hX2hlYXAiLCBOVUxMKTsKKworCXJldHVybiAwOworfQorc3Vic3lz X2luaXRjYWxsKGRtYV9oZWFwX2luaXQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEt aGVhcC5oIGIvaW5jbHVkZS9saW51eC9kbWEtaGVhcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMC4uMDllYWIzMTA1MTE4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVk ZS9saW51eC9kbWEtaGVhcC5oCkBAIC0wLDAgKzEsNTcgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wCisvKgorICogRE1BQlVGIEhlYXBzIEFsbG9jYXRpb24gSW5mcmFzdHJ1 Y3R1cmUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlLCBJbmMuCisgKiBDb3B5cmln aHQgKEMpIDIwMTkgTGluYXJvIEx0ZC4KKyAqLworCisjaWZuZGVmIF9ETUFfSEVBUFNfSAorI2Rl ZmluZSBfRE1BX0hFQVBTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qKgorICog c3RydWN0IGRtYV9oZWFwX2J1ZmZlciAtIG1ldGFkYXRhIGZvciBhIHBhcnRpY3VsYXIgYnVmZmVy CisgKiBAaGVhcDoJCWJhY2sgcG9pbnRlciB0byB0aGUgaGVhcCB0aGUgYnVmZmVyIGNhbWUgZnJv bQorICogQGRtYWJ1ZjoJCWJhY2tpbmcgZG1hLWJ1ZiBmb3IgdGhpcyBidWZmZXIKKyAqIEBzaXpl OgkJc2l6ZSBvZiB0aGUgYnVmZmVyCisgKiBAZmxhZ3M6CQlidWZmZXIgc3BlY2lmaWMgZmxhZ3MK KyAqLworc3RydWN0IGRtYV9oZWFwX2J1ZmZlciB7CisJc3RydWN0IGRtYV9oZWFwICpoZWFwOwor CXN0cnVjdCBkbWFfYnVmICpkbWFidWY7CisJc2l6ZV90IHNpemU7CisJdW5zaWduZWQgbG9uZyBm bGFnczsKK307CisKKy8qKgorICogc3RydWN0IGRtYV9oZWFwX29wcyAtIG9wcyB0byBvcGVyYXRl IG9uIGEgZ2l2ZW4gaGVhcAorICogQGFsbG9jYXRlOgkJYWxsb2NhdGUgYnVmZmVyCisgKgorICog YWxsb2NhdGUgcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBlcnJvci4KKyAqLworc3Ry dWN0IGRtYV9oZWFwX29wcyB7CisJaW50ICgqYWxsb2NhdGUpKHN0cnVjdCBkbWFfaGVhcCAqaGVh cCwKKwkJCXN0cnVjdCBkbWFfaGVhcF9idWZmZXIgKmJ1ZmZlciwKKwkJCXVuc2lnbmVkIGxvbmcg bGVuLAorCQkJdW5zaWduZWQgbG9uZyBmbGFncyk7Cit9OworCisvKioKKyAqIHN0cnVjdCBkbWFf aGVhcF9pbmZvIC0gaG9sZHMgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGNyZWF0ZSBhIERNQS1oZWFw CisgKiBAb3BzOgkJb3BzIHN0cnVjdCBmb3IgdGhpcyBoZWFwCisgKiBAbmFtZToJCXVzZWQgZm9y IGRlYnVnZ2luZy9kZXZpY2Utbm9kZSBuYW1lCisgKi8KK3N0cnVjdCBkbWFfaGVhcF9pbmZvIHsK Kwljb25zdCBjaGFyICpuYW1lOworCXN0cnVjdCBkbWFfaGVhcF9vcHMgKm9wczsKK307CisKKy8q KgorICogZG1hX2hlYXBfYWRkIC0gYWRkcyBhIGhlYXAgdG8gZG1hYnVmIGhlYXBzCisgKiBAaGVh cDoJCXRoZSBoZWFwIHRvIGFkZAorICovCitpbnQgZG1hX2hlYXBfYWRkKHN0cnVjdCBkbWFfaGVh cF9pbmZvICpoZWFwX2luZm8pOworCisjZW5kaWYgLyogX0RNQV9IRUFQU19IICovCmRpZmYgLS1n aXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZG1hLWhlYXAuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9k bWEtaGVhcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uN2RjYmI5 OGUyOWVjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2RtYS1oZWFwLmgK QEAgLTAsMCArMSw1NCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8K Ky8qCisgKiBETUFCVUYgSGVhcHMgVXNlcnNwYWNlIEFQSQorICoKKyAqIENvcHlyaWdodCAoQykg MjAxMSBHb29nbGUsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxOSBMaW5hcm8gTHRkLgorICov CisjaWZuZGVmIF9VQVBJX0xJTlVYX0RNQUJVRl9QT09MX0gKKyNkZWZpbmUgX1VBUElfTElOVVhf RE1BQlVGX1BPT0xfSAorCisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51 eC90eXBlcy5oPgorCisvKioKKyAqIERPQzogRE1BQlVGIEhlYXBzIFVzZXJzcGFjZSBBUEkKKyAq CisgKi8KKworLyoKKyAqIG1hcHBpbmdzIG9mIHRoaXMgYnVmZmVyIHNob3VsZCBiZSB1bi1jYWNo ZWQsIG90aGVyd2lzZSBkbWFidWYgaGVhcHMgd2lsbAorICogbmVlZCBjYWNoZSBtYWludGVuYW5j ZSB1c2luZyBETUFfQlVGX1NZTkNfKiB3aGVuIHRoZSBidWZmZXIgaXMgbWFwcGVkIGZvciBkbWEK KyAqLworI2RlZmluZSBETUFfSEVBUF9GTEFHX0NPSEVSRU5UIDEKKworLyoqCisgKiBzdHJ1Y3Qg ZG1hX2hlYXBfYWxsb2NhdGlvbl9kYXRhIC0gbWV0YWRhdGEgcGFzc2VkIGZyb20gdXNlcnNwYWNl IGZvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRpb25z CisgKiBAbGVuOgkJc2l6ZSBvZiB0aGUgYWxsb2NhdGlvbgorICogQGZsYWdzOgkJZmxhZ3MgcGFz c2VkIHRvIHBvb2wKKyAqIEBmZDoJCQl3aWxsIGJlIHBvcHVsYXRlZCB3aXRoIGEgZmQgd2hpY2gg cHJvdmRlcyB0aGUKKyAqCQkJaGFuZGxlIHRvIHRoZSBhbGxvY2F0ZWQgZG1hLWJ1ZgorICoKKyAq IFByb3ZpZGVkIGJ5IHVzZXJzcGFjZSBhcyBhbiBhcmd1bWVudCB0byB0aGUgaW9jdGwKKyAqLwor c3RydWN0IGRtYV9oZWFwX2FsbG9jYXRpb25fZGF0YSB7CisJX191NjQgbGVuOworCV9fdTMyIGZs YWdzOworCV9fdTMyIGZkOworCV9fdTMyIHJlc2VydmVkMDsKKwlfX3UzMiByZXNlcnZlZDE7Cit9 OworCisjZGVmaW5lIERNQV9IRUFQX0lPQ19NQUdJQwkJJ0gnCisKKy8qKgorICogRE9DOiBETUFf SEVBUF9JT0NfQUxMT0MgLSBhbGxvY2F0ZSBtZW1vcnkgZnJvbSBwb29sCisgKgorICogVGFrZXMg YW4gZG1hX2hlYXBfYWxsb2NhdGlvbl9kYXRhIHN0cnVjdCBhbmQgcmV0dXJucyBpdCB3aXRoIHRo ZSBmZCBmaWVsZAorICogcG9wdWxhdGVkIHdpdGggdGhlIGRtYWJ1ZiBoYW5kbGUgb2YgdGhlIGFs bG9jYXRpb24uCisgKi8KKyNkZWZpbmUgRE1BX0hFQVBfSU9DX0FMTE9DCV9JT1dSKERNQV9IRUFQ X0lPQ19NQUdJQywgMCwgXAorCQkJCSAgICAgIHN0cnVjdCBkbWFfaGVhcF9hbGxvY2F0aW9uX2Rh dGEpCisKKyNlbmRpZiAvKiBfVUFQSV9MSU5VWF9ETUFCVUZfUE9PTF9IICovCi0tIAoyLjE5LjEK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZl bCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbA==