From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH v2 5/7] async: Add support for explicit fine-grained barriers Date: Sun, 17 Jul 2016 13:58:05 +0100 Message-ID: <1468760287-731-6-git-send-email-chris@chris-wilson.co.uk> References: <1466759333-4703-1-git-send-email-chris@chris-wilson.co.uk> <1468760287-731-1-git-send-email-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x243.google.com (mail-wm0-x243.google.com [IPv6:2a00:1450:400c:c09::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5D0566E1BE for ; Sun, 17 Jul 2016 12:59:11 +0000 (UTC) Received: by mail-wm0-x243.google.com with SMTP id o80so8767551wme.0 for ; Sun, 17 Jul 2016 05:59:11 -0700 (PDT) In-Reply-To: <1468760287-731-1-git-send-email-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: linux-kernel@vger.kernel.org Cc: "Peter Zijlstra (Intel)" , Daniel Vetter , Rasmus Villemoes , dri-devel@lists.freedesktop.org, Alexander Potapenko , Ingo Molnar , Davidlohr Bueso , Shuah Khan , Andrey Ryabinin , "Paul E. McKenney" , linux-media@vger.kernel.org, Kees Cook , Nikolay Aleksandrov , linaro-mm-sig@lists.linaro.org, Dan Williams , Andy Shevchenko , Dmitry Vyukov , Thomas Gleixner , Tejun Heo , Andrew Morton , "David S. Miller" List-Id: dri-devel@lists.freedesktop.org VGhlIGN1cnJlbnQgYXN5bmMtZG9tYWluIG1vZGVsIHN1cHBvcnRzIHJ1bm5pbmcgYSBtdWx0aXR1 ZGUgb2YKaW5kZXBlbmRlbnQgdGFza3Mgd2l0aCBhIGNvYXJzZSBzeW5jaHJvbmlzYXRpb24gcG9p bnQuIFRoaXMgaXMKc3VmZmljaWVudCBmb3IgaXRzIG9yaWdpbmFsIHB1cnBvc2Ugb2YgYWxsb3dp bmcgaW5kZXBlbmRlbnQgZHJpdmVycyB0bwpydW4gY29uY3VycmVudGx5IGR1cmluZyB2YXJpb3Vz IHBoYXNlcyAoYm9vdGluZywgZWFybHkgcmVzdW1lLCBsYXRlCnJlc3VtZSBldGMpLCBhbmQga2Vl cCB0aGUgYXN5bmNocm9ub3VzIGRvbWFpbiBvdXQgb2YgdGhlIHN5bmNocm9ub3VzCmtlcm5lbCBk b21haW5zLiBIb3dldmVyLCBmb3IgZ3JlYXRlciBleHBsb2l0YXRpb24sIGRyaXZlcnMgdGhlbXNl bHZlcwp3YW50IHRvIHNjaGVkdWxlIG11bHRpcGxlIHRhc2tzIHdpdGhpbiBhIHBoYXNlIChvciBi ZXR3ZWVuIHBoYXNlcykgYW5kCmNvbnRyb2wgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiB3aXRoaW4g dGhvc2UgdGFza3MgcmVsYXRpdmUgdG8gZWFjaApvdGhlci4gVG8gZW5hYmxlIHRoaXMsIHdlIGV4 dGVuZCB0aGUgc3luY2hyb25pc2F0aW9uIHNjaGVtZSBiYXNlZCB1cG9uCmtmZW5jZXMgYW5kIGJh Y2sgZXZlcnkgdGFzayB3aXRoIG9uZS4gQW55IHRhc2sgbWF5IG5vdyB3YWl0IHVwb24gdGhlCmtm ZW5jZSBiZWZvcmUgYmVpbmcgc2NoZWR1bGVkLCBhbmQgZXF1YWxseSB0aGUga2ZlbmNlIG1heSBi ZSB1c2VkIHRvCndhaXQgb24gdGhlIHRhc2sgaXRzZWxmIChyYXRoZXIgdGhhbiB3YWl0aW5nIG9u IHRoZSBjb29raWUgZm9yIGFsbApwcmV2aW91cyB0YXNrcyB0byBiZSBjb21wbGV0ZWQpLgoKU2ln bmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CkNjOiBT dW1pdCBTZW13YWwgPHN1bWl0LnNlbXdhbEBsaW5hcm8ub3JnPgpDYzogU2h1YWggS2hhbiA8c2h1 YWhraEBvc2cuc2Ftc3VuZy5jb20+CkNjOiBUZWp1biBIZW8gPHRqQGtlcm5lbC5vcmc+CkNjOiBE YW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xsLmNoPgpDYzogQW5kcmV3IE1vcnRvbiA8 YWtwbUBsaW51eC1mb3VuZGF0aW9uLm9yZz4KQ2M6IEluZ28gTW9sbmFyIDxtaW5nb0BrZXJuZWwu b3JnPgpDYzogS2VlcyBDb29rIDxrZWVzY29va0BjaHJvbWl1bS5vcmc+CkNjOiBUaG9tYXMgR2xl aXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KQ2M6ICJQYXVsIEUuIE1jS2VubmV5IiA8cGF1bG1j a0BsaW51eC52bmV0LmlibS5jb20+CkNjOiBEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGlu dGVsLmNvbT4KQ2M6IEFuZHJleSBSeWFiaW5pbiA8YXJ5YWJpbmluQHZpcnR1b3p6by5jb20+CkNj OiBEYXZpZGxvaHIgQnVlc28gPGRhdmVAc3Rnb2xhYnMubmV0PgpDYzogTmlrb2xheSBBbGVrc2Fu ZHJvdiA8bmlrb2xheUBjdW11bHVzbmV0d29ya3MuY29tPgpDYzogIkRhdmlkIFMuIE1pbGxlciIg PGRhdmVtQGRhdmVtbG9mdC5uZXQ+CkNjOiAiUGV0ZXIgWmlqbHN0cmEgKEludGVsKSIgPHBldGVy ekBpbmZyYWRlYWQub3JnPgpDYzogUmFzbXVzIFZpbGxlbW9lcyA8bGludXhAcmFzbXVzdmlsbGVt b2VzLmRrPgpDYzogQW5keSBTaGV2Y2hlbmtvIDxhbmRyaXkuc2hldmNoZW5rb0BsaW51eC5pbnRl bC5jb20+CkNjOiBEbWl0cnkgVnl1a292IDxkdnl1a292QGdvb2dsZS5jb20+CkNjOiBBbGV4YW5k ZXIgUG90YXBlbmtvIDxnbGlkZXJAZ29vZ2xlLmNvbT4KQ2M6IGxpbnV4LWtlcm5lbEB2Z2VyLmtl cm5lbC5vcmcKQ2M6IGxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZwpDYzogZHJpLWRldmVsQGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpDYzogbGluYXJvLW1tLXNpZ0BsaXN0cy5saW5hcm8ub3JnCi0t LQogaW5jbHVkZS9saW51eC9hc3luYy5oICAgfCAgNjAgKysrKysrKystCiBrZXJuZWwvYXN5bmMu YyAgICAgICAgICB8IDIzNCArKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tCiBsaWIv dGVzdC1hc3luYy1kb21haW4uYyB8IDMyNCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKy0KIDMgZmlsZXMgY2hhbmdlZCwgNTE1IGluc2VydGlvbnMoKyksIDEw MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FzeW5jLmggYi9pbmNs dWRlL2xpbnV4L2FzeW5jLmgKaW5kZXggNmIwMjI2YmRhYWRjLi5lN2Q3Mjg5YTk4ODkgMTAwNjQ0 Ci0tLSBhL2luY2x1ZGUvbGludXgvYXN5bmMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2FzeW5jLmgK QEAgLTEzLDM4ICsxMyw4OCBAQAogI2RlZmluZSBfX0FTWU5DX0hfXwogCiAjaW5jbHVkZSA8bGlu dXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZmVuY2UuaD4KICNpbmNsdWRlIDxsaW51eC9s aXN0Lmg+CiAKIHR5cGVkZWYgdTY0IGFzeW5jX2Nvb2tpZV90OwogdHlwZWRlZiB2b2lkICgqYXN5 bmNfZnVuY190KSAodm9pZCAqZGF0YSwgYXN5bmNfY29va2llX3QgY29va2llKTsKKworc3RydWN0 IGFzeW5jX3dvcmsgeworCXN0cnVjdCBrZmVuY2UgZmVuY2U7CisJLyogcHJpdmF0ZSAqLworfTsK Kwogc3RydWN0IGFzeW5jX2RvbWFpbiB7CiAJc3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nOwogCXVu c2lnbmVkIHJlZ2lzdGVyZWQ6MTsKIH07CiAKKyNkZWZpbmUgQVNZTkNfRE9NQUlOX0lOSVQoX25h bWUsIF9yKSB7CQkJCVwKKwkucGVuZGluZyA9IExJU1RfSEVBRF9JTklUKF9uYW1lLnBlbmRpbmcp LAkJXAorCS5yZWdpc3RlcmVkID0gX3IJCQkJCQlcCit9CisKIC8qCiAgKiBkb21haW4gcGFydGlj aXBhdGVzIGluIGdsb2JhbCBhc3luY19zeW5jaHJvbml6ZV9mdWxsCiAgKi8KICNkZWZpbmUgQVNZ TkNfRE9NQUlOKF9uYW1lKSBcCi0Jc3RydWN0IGFzeW5jX2RvbWFpbiBfbmFtZSA9IHsgLnBlbmRp bmcgPSBMSVNUX0hFQURfSU5JVChfbmFtZS5wZW5kaW5nKSwJXAotCQkJCSAgICAgIC5yZWdpc3Rl cmVkID0gMSB9CisJc3RydWN0IGFzeW5jX2RvbWFpbiBfbmFtZSA9IEFTWU5DX0RPTUFJTl9JTklU KF9uYW1lLCAxKQogCiAvKgogICogZG9tYWluIGlzIGZyZWUgdG8gZ28gb3V0IG9mIHNjb3BlIGFz IHNvb24gYXMgYWxsIHBlbmRpbmcgd29yayBpcwogICogY29tcGxldGUsIHRoaXMgZG9tYWluIGRv ZXMgbm90IHBhcnRpY2lwYXRlIGluIGFzeW5jX3N5bmNocm9uaXplX2Z1bGwKICAqLwogI2RlZmlu ZSBBU1lOQ19ET01BSU5fRVhDTFVTSVZFKF9uYW1lKSBcCi0Jc3RydWN0IGFzeW5jX2RvbWFpbiBf bmFtZSA9IHsgLnBlbmRpbmcgPSBMSVNUX0hFQURfSU5JVChfbmFtZS5wZW5kaW5nKSwgXAotCQkJ CSAgICAgIC5yZWdpc3RlcmVkID0gMCB9CisJc3RydWN0IGFzeW5jX2RvbWFpbiBfbmFtZSA9IEFT WU5DX0RPTUFJTl9JTklUKF9uYW1lLCAwKQorCitleHRlcm4gdm9pZCBpbml0X2FzeW5jX2RvbWFp bihzdHJ1Y3QgYXN5bmNfZG9tYWluICpkb21haW4sIGJvb2wgcmVnaXN0ZXJlZCk7CiAKIGV4dGVy biBhc3luY19jb29raWVfdCBhc3luY19zY2hlZHVsZShhc3luY19mdW5jX3QgZnVuYywgdm9pZCAq ZGF0YSk7CiBleHRlcm4gYXN5bmNfY29va2llX3QgYXN5bmNfc2NoZWR1bGVfZG9tYWluKGFzeW5j X2Z1bmNfdCBmdW5jLCB2b2lkICpkYXRhLAogCQkJCQkgICAgc3RydWN0IGFzeW5jX2RvbWFpbiAq ZG9tYWluKTsKLXZvaWQgYXN5bmNfdW5yZWdpc3Rlcl9kb21haW4oc3RydWN0IGFzeW5jX2RvbWFp biAqZG9tYWluKTsKK2V4dGVybiB2b2lkIGFzeW5jX3VucmVnaXN0ZXJfZG9tYWluKHN0cnVjdCBh c3luY19kb21haW4gKmRvbWFpbik7CiBleHRlcm4gdm9pZCBhc3luY19zeW5jaHJvbml6ZV9mdWxs KHZvaWQpOwogZXh0ZXJuIHZvaWQgYXN5bmNfc3luY2hyb25pemVfZnVsbF9kb21haW4oc3RydWN0 IGFzeW5jX2RvbWFpbiAqZG9tYWluKTsKIGV4dGVybiB2b2lkIGFzeW5jX3N5bmNocm9uaXplX2Nv b2tpZShhc3luY19jb29raWVfdCBjb29raWUpOwogZXh0ZXJuIHZvaWQgYXN5bmNfc3luY2hyb25p emVfY29va2llX2RvbWFpbihhc3luY19jb29raWVfdCBjb29raWUsCiAJCQkJCSAgICBzdHJ1Y3Qg YXN5bmNfZG9tYWluICpkb21haW4pOworCiBleHRlcm4gYm9vbCBjdXJyZW50X2lzX2FzeW5jKHZv aWQpOworCitleHRlcm4gc3RydWN0IGFzeW5jX3dvcmsgKgorYXN5bmNfd29ya19jcmVhdGUoYXN5 bmNfZnVuY190IGZ1bmMsIHZvaWQgKmRhdGEsIGdmcF90IGdmcCk7CisKK3N0YXRpYyBpbmxpbmUg c3RydWN0IGFzeW5jX3dvcmsgKmFzeW5jX3dvcmtfZ2V0KHN0cnVjdCBhc3luY193b3JrICp3b3Jr KQoreworCWtmZW5jZV9nZXQoJndvcmstPmZlbmNlKTsKKwlyZXR1cm4gd29yazsKK30KKworc3Rh dGljIGlubGluZSBpbnQKK2FzeW5jX3dvcmtfYWZ0ZXIoc3RydWN0IGFzeW5jX3dvcmsgKndvcmss IHN0cnVjdCBrZmVuY2UgKmZlbmNlKQoreworCXJldHVybiBrZmVuY2VfYXdhaXRfa2ZlbmNlKCZ3 b3JrLT5mZW5jZSwgZmVuY2UsIEdGUF9LRVJORUwpOworfQorCitzdGF0aWMgaW5saW5lIGludAor YXN5bmNfd29ya19iZWZvcmUoc3RydWN0IGFzeW5jX3dvcmsgKndvcmssIHN0cnVjdCBrZmVuY2Ug KmZlbmNlKQoreworCXJldHVybiBrZmVuY2VfYXdhaXRfa2ZlbmNlKGZlbmNlLCAmd29yay0+ZmVu Y2UsIEdGUF9LRVJORUwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXN5bmNfd29ya193YWl0 KHN0cnVjdCBhc3luY193b3JrICp3b3JrKQoreworCWtmZW5jZV93YWl0KCZ3b3JrLT5mZW5jZSk7 Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhc3luY193b3JrX3B1dChzdHJ1Y3QgYXN5bmNfd29y ayAqd29yaykKK3sKKwlrZmVuY2VfcHV0KCZ3b3JrLT5mZW5jZSk7Cit9CisKK2V4dGVybiBhc3lu Y19jb29raWVfdCBxdWV1ZV9hc3luY193b3JrKHN0cnVjdCBhc3luY19kb21haW4gKmRvbWFpbiwK KwkJCQkgICAgICAgc3RydWN0IGFzeW5jX3dvcmsgKndvcmssCisJCQkJICAgICAgIGdmcF90IGdm cCk7CitleHRlcm4gYXN5bmNfY29va2llX3Qgc2NoZWR1bGVfYXN5bmNfd29yayhzdHJ1Y3QgYXN5 bmNfd29yayAqd29yayk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL2FzeW5jLmMgYi9r ZXJuZWwvYXN5bmMuYwppbmRleCBkMmVkZDZlZmVjNTYuLjBkNjk1OTE5YTYwZCAxMDA2NDQKLS0t IGEva2VybmVsL2FzeW5jLmMKKysrIGIva2VybmVsL2FzeW5jLmMKQEAgLTIsNiArMiw3IEBACiAg KiBhc3luYy5jOiBBc3luY2hyb25vdXMgZnVuY3Rpb24gY2FsbHMgZm9yIGJvb3QgcGVyZm9ybWFu Y2UKICAqCiAgKiAoQykgQ29weXJpZ2h0IDIwMDkgSW50ZWwgQ29ycG9yYXRpb24KKyAqIChDKSBD b3B5cmlnaHQgMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbgogICogQXV0aG9yOiBBcmphbiB2YW4gZGUg VmVuIDxhcmphbkBsaW51eC5pbnRlbC5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNTksNTkgKzYwLDM5 IEBAIGFzeW5jaHJvbm91cyBhbmQgc3luY2hyb25vdXMgcGFydHMgb2YgdGhlIGtlcm5lbC4KIAog I2luY2x1ZGUgIndvcmtxdWV1ZV9pbnRlcm5hbC5oIgogCi1zdGF0aWMgYXN5bmNfY29va2llX3Qg bmV4dF9jb29raWUgPSAxOwotCisjZGVmaW5lIEFTWU5DX1FVRVVFRF9CSVQJS0ZFTkNFX1BSSVZB VEVfQklUCiAjZGVmaW5lIE1BWF9XT1JLCQkzMjc2OAotI2RlZmluZSBBU1lOQ19DT09LSUVfTUFY CVVMTE9OR19NQVgJLyogaW5maW5pdHkgY29va2llICovCi0KLXN0YXRpYyBMSVNUX0hFQUQoYXN5 bmNfZ2xvYmFsX3BlbmRpbmcpOwkvKiBwZW5kaW5nIGZyb20gYWxsIHJlZ2lzdGVyZWQgZG9tcyAq Lwotc3RhdGljIEFTWU5DX0RPTUFJTihhc3luY19kZmxfZG9tYWluKTsKLXN0YXRpYyBERUZJTkVf U1BJTkxPQ0soYXN5bmNfbG9jayk7CiAKIHN0cnVjdCBhc3luY19lbnRyeSB7Ci0Jc3RydWN0IGxp c3RfaGVhZAlkb21haW5fbGlzdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWdsb2JhbF9saXN0OwotCXN0 cnVjdCB3b3JrX3N0cnVjdAl3b3JrOwotCWFzeW5jX2Nvb2tpZV90CQljb29raWU7Ci0JYXN5bmNf ZnVuY190CQlmdW5jOwotCXZvaWQJCQkqZGF0YTsKLQlzdHJ1Y3QgYXN5bmNfZG9tYWluCSpkb21h aW47Ci19OwotCi1zdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoYXN5bmNfZG9uZSk7CisJ c3RydWN0IGFzeW5jX3dvcmsgYmFzZTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKIAotc3Rh dGljIGF0b21pY190IGVudHJ5X2NvdW50OworCXN0cnVjdCBsaXN0X2hlYWQgcGVuZGluZ19saW5r WzJdOwogCi1zdGF0aWMgYXN5bmNfY29va2llX3QgbG93ZXN0X2luX3Byb2dyZXNzKHN0cnVjdCBh c3luY19kb21haW4gKmRvbWFpbikKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwZW5kaW5nOwotCWFz eW5jX2Nvb2tpZV90IHJldCA9IEFTWU5DX0NPT0tJRV9NQVg7Ci0JdW5zaWduZWQgbG9uZyBmbGFn czsKKwlhc3luY19jb29raWVfdCBjb29raWU7CisJYXN5bmNfZnVuY190IGZ1bmM7CisJdm9pZCAq ZGF0YTsKK307CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYXN5bmNfbG9jaywgZmxhZ3MpOworc3Rh dGljIExJU1RfSEVBRChhc3luY19nbG9iYWxfcGVuZGluZyk7CS8qIHBlbmRpbmcgZnJvbSBhbGwg cmVnaXN0ZXJlZCBkb21zICovCitzdGF0aWMgQVNZTkNfRE9NQUlOKGFzeW5jX2RmbF9kb21haW4p Oworc3RhdGljIERFRklORV9TUElOTE9DSyhhc3luY19sb2NrKTsKK3N0YXRpYyB1bnNpZ25lZCBp bnQgYXN5bmNfcGVuZGluZ19jb3VudDsKIAotCWlmIChkb21haW4pCi0JCXBlbmRpbmcgPSAmZG9t YWluLT5wZW5kaW5nOwotCWVsc2UKLQkJcGVuZGluZyA9ICZhc3luY19nbG9iYWxfcGVuZGluZzsK K3N0YXRpYyBhc3luY19jb29raWVfdCBhc3NpZ25fY29va2llKHZvaWQpCit7CisJc3RhdGljIGFz eW5jX2Nvb2tpZV90IG5leHRfY29va2llOwogCi0JaWYgKCFsaXN0X2VtcHR5KHBlbmRpbmcpKQot CQlyZXQgPSBsaXN0X2ZpcnN0X2VudHJ5KHBlbmRpbmcsIHN0cnVjdCBhc3luY19lbnRyeSwKLQkJ CQkgICAgICAgZG9tYWluX2xpc3QpLT5jb29raWU7CisJaWYgKCsrbmV4dF9jb29raWUgPT0gMCkK KwkJbmV4dF9jb29raWUgPSAxOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXN5bmNfbG9j aywgZmxhZ3MpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIG5leHRfY29va2llOwogfQogCi0vKgot ICogcGljayB0aGUgZmlyc3QgcGVuZGluZyBlbnRyeSBhbmQgcnVuIGl0Ci0gKi8KIHN0YXRpYyB2 b2lkIGFzeW5jX3J1bl9lbnRyeV9mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3Ry dWN0IGFzeW5jX2VudHJ5ICplbnRyeSA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXN5 bmNfZW50cnksIHdvcmspOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Ja3RpbWVfdCB1bmluaXRp YWxpemVkX3ZhcihjYWxsdGltZSksIGRlbHRhLCByZXR0aW1lOworCXN0cnVjdCBhc3luY19lbnRy eSAqZW50cnkgPSBjb250YWluZXJfb2Yod29yaywgdHlwZW9mKCplbnRyeSksIHdvcmspOworCWt0 aW1lX3QgdW5pbml0aWFsaXplZF92YXIoY2FsbHRpbWUpOwogCiAJLyogMSkgcnVuIChhbmQgcHJp bnQgZHVyYXRpb24pICovCiAJaWYgKGluaXRjYWxsX2RlYnVnICYmIHN5c3RlbV9zdGF0ZSA9PSBT WVNURU1fQk9PVElORykgewpAQCAtMTIyLDggKzEwMyw3IEBAIHN0YXRpYyB2b2lkIGFzeW5jX3J1 bl9lbnRyeV9mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJfQogCWVudHJ5LT5mdW5jKGVu dHJ5LT5kYXRhLCBlbnRyeS0+Y29va2llKTsKIAlpZiAoaW5pdGNhbGxfZGVidWcgJiYgc3lzdGVt X3N0YXRlID09IFNZU1RFTV9CT09USU5HKSB7Ci0JCXJldHRpbWUgPSBrdGltZV9nZXQoKTsKLQkJ ZGVsdGEgPSBrdGltZV9zdWIocmV0dGltZSwgY2FsbHRpbWUpOworCQlrdGltZV90IGRlbHRhID0g a3RpbWVfc3ViKGt0aW1lX2dldCgpLCBjYWxsdGltZSk7CiAJCXByX2RlYnVnKCJpbml0Y2FsbCAl bGxpXyVwRiByZXR1cm5lZCAwIGFmdGVyICVsbGQgdXNlY3NcbiIsCiAJCQkobG9uZyBsb25nKWVu dHJ5LT5jb29raWUsCiAJCQllbnRyeS0+ZnVuYywKQEAgLTEzMSw2OSArMTExLDgxIEBAIHN0YXRp YyB2b2lkIGFzeW5jX3J1bl9lbnRyeV9mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJfQog CiAJLyogMikgcmVtb3ZlIHNlbGYgZnJvbSB0aGUgcGVuZGluZyBxdWV1ZXMgKi8KLQlzcGluX2xv Y2tfaXJxc2F2ZSgmYXN5bmNfbG9jaywgZmxhZ3MpOwotCWxpc3RfZGVsX2luaXQoJmVudHJ5LT5k b21haW5fbGlzdCk7Ci0JbGlzdF9kZWxfaW5pdCgmZW50cnktPmdsb2JhbF9saXN0KTsKKwlzcGlu X2xvY2tfaXJxKCZhc3luY19sb2NrKTsKKwlsaXN0X2RlbCgmZW50cnktPnBlbmRpbmdfbGlua1sw XSk7CisJbGlzdF9kZWwoJmVudHJ5LT5wZW5kaW5nX2xpbmtbMV0pOworCWFzeW5jX3BlbmRpbmdf Y291bnQtLTsKKwlzcGluX3VubG9ja19pcnEoJmFzeW5jX2xvY2spOwogCi0JLyogMykgZnJlZSB0 aGUgZW50cnkgKi8KLQlrZnJlZShlbnRyeSk7Ci0JYXRvbWljX2RlYygmZW50cnlfY291bnQpOwor CS8qIDMpIHdha2UgdXAgYW55IHdhaXRlcnMgKi8KKwlrZmVuY2Vfd2FrZV91cF9hbGwoJmVudHJ5 LT5iYXNlLmZlbmNlKTsKKwlrZmVuY2VfcHV0KCZlbnRyeS0+YmFzZS5mZW5jZSk7Cit9CiAKLQlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZhc3luY19sb2NrLCBmbGFncyk7CitfX2tmZW5jZV9jYWxs IHN0YXRpYyBpbnQgYXN5bmNfd29ya19ub3RpZnkoc3RydWN0IGtmZW5jZSAqZmVuY2UpCit7CisJ c3RydWN0IGFzeW5jX2VudHJ5ICplbnRyeSA9CisJCWNvbnRhaW5lcl9vZihmZW5jZSwgdHlwZW9m KCplbnRyeSksIGJhc2UuZmVuY2UpOworCisJaWYgKGtmZW5jZV9kb25lKGZlbmNlKSkgeworCQlr ZnJlZShlbnRyeSk7CisJCXJldHVybiBOT1RJRllfRE9ORTsKKwl9CiAKLQkvKiA0KSB3YWtlIHVw IGFueSB3YWl0ZXJzICovCi0Jd2FrZV91cCgmYXN5bmNfZG9uZSk7CisJcXVldWVfd29yayhzeXN0 ZW1fdW5ib3VuZF93cSwgJmVudHJ5LT53b3JrKTsKKwlyZXR1cm4gTk9USUZZX09LOwogfQogCi1z dGF0aWMgYXN5bmNfY29va2llX3QgX19hc3luY19zY2hlZHVsZShhc3luY19mdW5jX3QgZnVuYywg dm9pZCAqZGF0YSwgc3RydWN0IGFzeW5jX2RvbWFpbiAqZG9tYWluKQorc3RydWN0IGFzeW5jX3dv cmsgKmFzeW5jX3dvcmtfY3JlYXRlKGFzeW5jX2Z1bmNfdCBmdW5jLCB2b2lkICpkYXRhLCBnZnBf dCBnZnApCiB7CiAJc3RydWN0IGFzeW5jX2VudHJ5ICplbnRyeTsKLQl1bnNpZ25lZCBsb25nIGZs YWdzOwotCWFzeW5jX2Nvb2tpZV90IG5ld2Nvb2tpZTsKIAotCS8qIGFsbG93IGlycS1vZmYgY2Fs bGVycyAqLwotCWVudHJ5ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFzeW5jX2VudHJ5KSwgR0ZQ X0FUT01JQyk7CisJZW50cnkgPSBrbWFsbG9jKHNpemVvZigqZW50cnkpLCBnZnApOworCWlmICgh ZW50cnkpCisJCXJldHVybiBOVUxMOwogCi0JLyoKLQkgKiBJZiB3ZSdyZSBvdXQgb2YgbWVtb3J5 IG9yIGlmIHRoZXJlJ3MgdG9vIG11Y2ggd29yawotCSAqIHBlbmRpbmcgYWxyZWFkeSwgd2UgZXhl Y3V0ZSBzeW5jaHJvbm91c2x5LgotCSAqLwotCWlmICghZW50cnkgfHwgYXRvbWljX3JlYWQoJmVu dHJ5X2NvdW50KSA+IE1BWF9XT1JLKSB7Ci0JCWtmcmVlKGVudHJ5KTsKLQkJc3Bpbl9sb2NrX2ly cXNhdmUoJmFzeW5jX2xvY2ssIGZsYWdzKTsKLQkJbmV3Y29va2llID0gbmV4dF9jb29raWUrKzsK LQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXN5bmNfbG9jaywgZmxhZ3MpOworCWtmZW5jZV9p bml0KCZlbnRyeS0+YmFzZS5mZW5jZSwgYXN5bmNfd29ya19ub3RpZnkpOwogCi0JCS8qIGxvdyBv biBtZW1vcnkuLiBydW4gc3luY2hyb25vdXNseSAqLwotCQlmdW5jKGRhdGEsIG5ld2Nvb2tpZSk7 Ci0JCXJldHVybiBuZXdjb29raWU7Ci0JfQotCUlOSVRfTElTVF9IRUFEKCZlbnRyeS0+ZG9tYWlu X2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZlbnRyeS0+Z2xvYmFsX2xpc3QpOwogCUlOSVRfV09S SygmZW50cnktPndvcmssIGFzeW5jX3J1bl9lbnRyeV9mbik7CiAJZW50cnktPmZ1bmMgPSBmdW5j OwogCWVudHJ5LT5kYXRhID0gZGF0YTsKLQllbnRyeS0+ZG9tYWluID0gZG9tYWluOwogCi0Jc3Bp bl9sb2NrX2lycXNhdmUoJmFzeW5jX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gJmVudHJ5LT5iYXNl OworfQorRVhQT1JUX1NZTUJPTF9HUEwoYXN5bmNfd29ya19jcmVhdGUpOwogCi0JLyogYWxsb2Nh dGUgY29va2llIGFuZCBxdWV1ZSAqLwotCW5ld2Nvb2tpZSA9IGVudHJ5LT5jb29raWUgPSBuZXh0 X2Nvb2tpZSsrOworYXN5bmNfY29va2llX3QgcXVldWVfYXN5bmNfd29yayhzdHJ1Y3QgYXN5bmNf ZG9tYWluICpkb21haW4sCisJCQkJc3RydWN0IGFzeW5jX3dvcmsgKndvcmssCisJCQkJZ2ZwX3Qg Z2ZwKQoreworCXN0cnVjdCBhc3luY19lbnRyeSAqZW50cnkgPSBjb250YWluZXJfb2Yod29yaywg dHlwZW9mKCplbnRyeSksIGJhc2UpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlsaXN0X2Fk ZF90YWlsKCZlbnRyeS0+ZG9tYWluX2xpc3QsICZkb21haW4tPnBlbmRpbmcpOwotCWlmIChkb21h aW4tPnJlZ2lzdGVyZWQpCi0JCWxpc3RfYWRkX3RhaWwoJmVudHJ5LT5nbG9iYWxfbGlzdCwgJmFz eW5jX2dsb2JhbF9wZW5kaW5nKTsKKwlpZiAoV0FSTl9PTih0ZXN0X2FuZF9zZXRfYml0KEFTWU5D X1FVRVVFRF9CSVQsCisJCQkJICAgICAmZW50cnktPmJhc2UuZmVuY2UuZmxhZ3MpKSkKKwkJcmV0 dXJuIDA7CiAKLQlhdG9taWNfaW5jKCZlbnRyeV9jb3VudCk7CisJc3Bpbl9sb2NrX2lycXNhdmUo JmFzeW5jX2xvY2ssIGZsYWdzKTsKKwllbnRyeS0+Y29va2llID0gYXNzaWduX2Nvb2tpZSgpOwor CWxpc3RfYWRkX3RhaWwoJmVudHJ5LT5wZW5kaW5nX2xpbmtbMF0sICZkb21haW4tPnBlbmRpbmcp OworCUlOSVRfTElTVF9IRUFEKCZlbnRyeS0+cGVuZGluZ19saW5rWzFdKTsKKwlpZiAoZG9tYWlu LT5yZWdpc3RlcmVkKQorCQlsaXN0X2FkZF90YWlsKCZlbnRyeS0+cGVuZGluZ19saW5rWzFdLCAm YXN5bmNfZ2xvYmFsX3BlbmRpbmcpOworCWFzeW5jX3BlbmRpbmdfY291bnQrKzsKIAlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZhc3luY19sb2NrLCBmbGFncyk7CiAKIAkvKiBtYXJrIHRoYXQgdGhp cyB0YXNrIGhhcyBxdWV1ZWQgYW4gYXN5bmMgam9iLCB1c2VkIGJ5IG1vZHVsZSBpbml0ICovCiAJ Y3VycmVudC0+ZmxhZ3MgfD0gUEZfVVNFRF9BU1lOQzsKIAotCS8qIHNjaGVkdWxlIGZvciBleGVj dXRpb24gKi8KLQlxdWV1ZV93b3JrKHN5c3RlbV91bmJvdW5kX3dxLCAmZW50cnktPndvcmspOwor CWtmZW5jZV9jb21wbGV0ZShrZmVuY2VfZ2V0KCZlbnRyeS0+YmFzZS5mZW5jZSkpOworCisJcmV0 dXJuIGVudHJ5LT5jb29raWU7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChxdWV1ZV9hc3luY193b3Jr KTsKIAotCXJldHVybiBuZXdjb29raWU7Cithc3luY19jb29raWVfdCBzY2hlZHVsZV9hc3luY193 b3JrKHN0cnVjdCBhc3luY193b3JrICp3b3JrKQoreworCXJldHVybiBxdWV1ZV9hc3luY193b3Jr KCZhc3luY19kZmxfZG9tYWluLCB3b3JrLCBHRlBfS0VSTkVMKTsKIH0KIAogLyoqCkBAIC0yMDYs NyArMTk4LDcgQEAgc3RhdGljIGFzeW5jX2Nvb2tpZV90IF9fYXN5bmNfc2NoZWR1bGUoYXN5bmNf ZnVuY190IGZ1bmMsIHZvaWQgKmRhdGEsIHN0cnVjdCBhc3kKICAqLwogYXN5bmNfY29va2llX3Qg YXN5bmNfc2NoZWR1bGUoYXN5bmNfZnVuY190IGZ1bmMsIHZvaWQgKmRhdGEpCiB7Ci0JcmV0dXJu IF9fYXN5bmNfc2NoZWR1bGUoZnVuYywgZGF0YSwgJmFzeW5jX2RmbF9kb21haW4pOworCXJldHVy biBhc3luY19zY2hlZHVsZV9kb21haW4oZnVuYywgZGF0YSwgJmFzeW5jX2RmbF9kb21haW4pOwog fQogRVhQT1JUX1NZTUJPTF9HUEwoYXN5bmNfc2NoZWR1bGUpOwogCkBAIC0yMjUsNyArMjE3LDI3 IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGFzeW5jX3NjaGVkdWxlKTsKIGFzeW5jX2Nvb2tpZV90IGFz eW5jX3NjaGVkdWxlX2RvbWFpbihhc3luY19mdW5jX3QgZnVuYywgdm9pZCAqZGF0YSwKIAkJCQkg ICAgIHN0cnVjdCBhc3luY19kb21haW4gKmRvbWFpbikKIHsKLQlyZXR1cm4gX19hc3luY19zY2hl ZHVsZShmdW5jLCBkYXRhLCBkb21haW4pOworCXN0cnVjdCBhc3luY193b3JrICp3b3JrOworCWFz eW5jX2Nvb2tpZV90IGNvb2tpZSA9IDA7CisKKwl3b3JrID0gTlVMTDsKKwlpZiAoUkVBRF9PTkNF KGFzeW5jX3BlbmRpbmdfY291bnQpIDwgTUFYX1dPUkspCisJCXdvcmsgPSBhc3luY193b3JrX2Ny ZWF0ZShmdW5jLCBkYXRhLCBHRlBfQVRPTUlDKTsKKwlpZiAod29yaykgeworCQljb29raWUgPSBx dWV1ZV9hc3luY193b3JrKGRvbWFpbiwgd29yaywgR0ZQX0FUT01JQyk7CisJCWFzeW5jX3dvcmtf cHV0KHdvcmspOworCX0KKwlpZiAoIWNvb2tpZSkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOwor CisJCXNwaW5fbG9ja19pcnFzYXZlKCZhc3luY19sb2NrLCBmbGFncyk7CisJCWNvb2tpZSA9IGFz c2lnbl9jb29raWUoKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXN5bmNfbG9jaywgZmxh Z3MpOworCisJCWZ1bmMoZGF0YSwgY29va2llKTsKKwl9CisKKwlyZXR1cm4gY29va2llOwogfQog RVhQT1JUX1NZTUJPTF9HUEwoYXN5bmNfc2NoZWR1bGVfZG9tYWluKTsKIApAQCAtMjUxLDEwICsy NjMsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChhc3luY19zeW5jaHJvbml6ZV9mdWxsKTsKICAqLwog dm9pZCBhc3luY191bnJlZ2lzdGVyX2RvbWFpbihzdHJ1Y3QgYXN5bmNfZG9tYWluICpkb21haW4p CiB7Ci0Jc3Bpbl9sb2NrX2lycSgmYXN5bmNfbG9jayk7Ci0JV0FSTl9PTighZG9tYWluLT5yZWdp c3RlcmVkIHx8ICFsaXN0X2VtcHR5KCZkb21haW4tPnBlbmRpbmcpKTsKKwlXQVJOX09OKCFsaXN0 X2VtcHR5KCZkb21haW4tPnBlbmRpbmcpKTsKIAlkb21haW4tPnJlZ2lzdGVyZWQgPSAwOwotCXNw aW5fdW5sb2NrX2lycSgmYXN5bmNfbG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChhc3luY191 bnJlZ2lzdGVyX2RvbWFpbik7CiAKQEAgLTI2Nyw3ICsyNzcsNyBAQCBFWFBPUlRfU1lNQk9MX0dQ TChhc3luY191bnJlZ2lzdGVyX2RvbWFpbik7CiAgKi8KIHZvaWQgYXN5bmNfc3luY2hyb25pemVf ZnVsbF9kb21haW4oc3RydWN0IGFzeW5jX2RvbWFpbiAqZG9tYWluKQogewotCWFzeW5jX3N5bmNo cm9uaXplX2Nvb2tpZV9kb21haW4oQVNZTkNfQ09PS0lFX01BWCwgZG9tYWluKTsKKwlhc3luY19z eW5jaHJvbml6ZV9jb29raWVfZG9tYWluKDAsIGRvbWFpbik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQ TChhc3luY19zeW5jaHJvbml6ZV9mdWxsX2RvbWFpbik7CiAKQEAgLTI4MiwxOSArMjkyLDQ5IEBA IEVYUE9SVF9TWU1CT0xfR1BMKGFzeW5jX3N5bmNocm9uaXplX2Z1bGxfZG9tYWluKTsKICAqLwog dm9pZCBhc3luY19zeW5jaHJvbml6ZV9jb29raWVfZG9tYWluKGFzeW5jX2Nvb2tpZV90IGNvb2tp ZSwgc3RydWN0IGFzeW5jX2RvbWFpbiAqZG9tYWluKQogewotCWt0aW1lX3QgdW5pbml0aWFsaXpl ZF92YXIoc3RhcnR0aW1lKSwgZGVsdGEsIGVuZHRpbWU7CisJa3RpbWVfdCB1bmluaXRpYWxpemVk X3ZhcihzdGFydHRpbWUpOworCXN0cnVjdCBsaXN0X2hlYWQgKnBlbmRpbmc7CisKKwlwZW5kaW5n ID0gZG9tYWluID8gJmRvbWFpbi0+cGVuZGluZyA6ICZhc3luY19nbG9iYWxfcGVuZGluZzsKIAog CWlmIChpbml0Y2FsbF9kZWJ1ZyAmJiBzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX0JPT1RJTkcpIHsK IAkJcHJfZGVidWcoImFzeW5jX3dhaXRpbmcgQCAlaVxuIiwgdGFza19waWRfbnIoY3VycmVudCkp OwogCQlzdGFydHRpbWUgPSBrdGltZV9nZXQoKTsKIAl9CiAKLQl3YWl0X2V2ZW50KGFzeW5jX2Rv bmUsIGxvd2VzdF9pbl9wcm9ncmVzcyhkb21haW4pID49IGNvb2tpZSk7CisJZG8geworCQlzdHJ1 Y3Qga2ZlbmNlICpmZW5jZSA9IE5VTEw7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAo aW5pdGNhbGxfZGVidWcgJiYgc3lzdGVtX3N0YXRlID09IFNZU1RFTV9CT09USU5HKSB7Ci0JCWVu ZHRpbWUgPSBrdGltZV9nZXQoKTsKLQkJZGVsdGEgPSBrdGltZV9zdWIoZW5kdGltZSwgc3RhcnR0 aW1lKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFzeW5jX2xvY2ssIGZsYWdzKTsKKwkJaWYgKCFs aXN0X2VtcHR5KHBlbmRpbmcpKSB7CisJCQlzdHJ1Y3QgYXN5bmNfZW50cnkgKmVudHJ5OworCisJ CQlpZiAoY29va2llKSB7CisJCQkJZW50cnkgPSBsaXN0X2ZpcnN0X2VudHJ5KHBlbmRpbmcsCisJ CQkJCQkJIHN0cnVjdCBhc3luY19lbnRyeSwKKwkJCQkJCQkgcGVuZGluZ19saW5rWyFkb21haW5d KTsKKwkJCQlpZiAoKHM2NCkoY29va2llIC0gZW50cnktPmNvb2tpZSkgPiAwKQorCQkJCQlmZW5j ZSA9IGtmZW5jZV9nZXQoJmVudHJ5LT5iYXNlLmZlbmNlKTsKKwkJCX0gZWxzZSB7CisJCQkJZW50 cnkgPSBsaXN0X2xhc3RfZW50cnkocGVuZGluZywKKwkJCQkJCQlzdHJ1Y3QgYXN5bmNfZW50cnks CisJCQkJCQkJcGVuZGluZ19saW5rWyFkb21haW5dKTsKKwkJCQljb29raWUgPSBlbnRyeS0+Y29v a2llOworCQkJCWZlbmNlID0ga2ZlbmNlX2dldCgmZW50cnktPmJhc2UuZmVuY2UpOworCQkJfQor CQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzeW5jX2xvY2ssIGZsYWdzKTsKKworCQlp ZiAoIWZlbmNlKQorCQkJYnJlYWs7CisKKwkJa2ZlbmNlX3dhaXQoZmVuY2UpOworCQlrZmVuY2Vf cHV0KGZlbmNlKTsKKwl9IHdoaWxlICgxKTsKIAorCWlmIChpbml0Y2FsbF9kZWJ1ZyAmJiBzeXN0 ZW1fc3RhdGUgPT0gU1lTVEVNX0JPT1RJTkcpIHsKKwkJa3RpbWVfdCBkZWx0YSA9IGt0aW1lX3N1 YihrdGltZV9nZXQoKSwgc3RhcnR0aW1lKTsKIAkJcHJfZGVidWcoImFzeW5jX2NvbnRpbnVpbmcg QCAlaSBhZnRlciAlbGxpIHVzZWNcbiIsCiAJCQl0YXNrX3BpZF9ucihjdXJyZW50KSwKIAkJCShs b25nIGxvbmcpa3RpbWVfdG9fbnMoZGVsdGEpID4+IDEwKTsKQEAgLTMyNywzICszNjcsMTEgQEAg Ym9vbCBjdXJyZW50X2lzX2FzeW5jKHZvaWQpCiAJcmV0dXJuIHdvcmtlciAmJiB3b3JrZXItPmN1 cnJlbnRfZnVuYyA9PSBhc3luY19ydW5fZW50cnlfZm47CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChj dXJyZW50X2lzX2FzeW5jKTsKKwordm9pZCBpbml0X2FzeW5jX2RvbWFpbihzdHJ1Y3QgYXN5bmNf ZG9tYWluICpkb21haW4sIGJvb2wgcmVnaXN0ZXJlZCkKK3sKKwltZW1zZXQoZG9tYWluLCAwLCBz aXplb2YoKmRvbWFpbikpOworCUlOSVRfTElTVF9IRUFEKCZkb21haW4tPnBlbmRpbmcpOworCWRv bWFpbi0+cmVnaXN0ZXJlZCA9IHJlZ2lzdGVyZWQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpbml0 X2FzeW5jX2RvbWFpbik7CmRpZmYgLS1naXQgYS9saWIvdGVzdC1hc3luYy1kb21haW4uYyBiL2xp Yi90ZXN0LWFzeW5jLWRvbWFpbi5jCmluZGV4IDU1OGE3MTQxNGZiNi4uZWNiZWJhOWNkNjViIDEw MDY0NAotLS0gYS9saWIvdGVzdC1hc3luYy1kb21haW4uYworKysgYi9saWIvdGVzdC1hc3luYy1k b21haW4uYwpAQCAtNyw2ICs3LDE5IEBACiAjaW5jbHVkZSA8bGludXgvYXN5bmMuaD4KICNpbmNs dWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUg PGxpbnV4L3NsYWIuaD4KKworc3RhdGljIHN0cnVjdCBrZmVuY2UgKmFsbG9jX2tmZW5jZSh2b2lk KQoreworCXN0cnVjdCBrZmVuY2UgKmZlbmNlOworCisJZmVuY2UgPSBrbWFsbG9jKHNpemVvZigq ZmVuY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZlbmNlKQorCQlyZXR1cm4gTlVMTDsKKworCWtm ZW5jZV9pbml0KGZlbmNlLCBOVUxMKTsKKwlyZXR1cm4gZmVuY2U7Cit9CiAKIHN0YXRpYyB2b2lk IHRhc2tfQSh2b2lkICpkYXRhLCBhc3luY19jb29raWVfdCBjb29raWUpCiB7CkBAIC0yMSw2ICsz NCwyNjkgQEAgc3RhdGljIHZvaWQgdGFza19CKHZvaWQgKmRhdGEsIGFzeW5jX2Nvb2tpZV90IGNv b2tpZSkKIAlzbXBfc3RvcmVfbWIoKnJlc3VsdCwgJ0InKTsKIH0KIAorc3RhdGljIGludCBfX2lu aXQgdGVzdF94KGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgc3RydWN0IGFzeW5jX2RvbWFpbiAqZG9t YWluLAorCQkJIGFzeW5jX2Z1bmNfdCBmdW5jLAorCQkJIGNvbnN0IGxvbmcgZXhwZWN0ZWQpCit7 CisJc3RydWN0IGFzeW5jX3dvcmsgKkE7CisJbG9uZyByZXN1bHQgPSAwOworCisJQSA9IGFzeW5j X3dvcmtfY3JlYXRlKGZ1bmMsICZyZXN1bHQsIEdGUF9LRVJORUwpOworCWlmICghQSkKKwkJcmV0 dXJuIC1FTk9NRU07CisKKwlxdWV1ZV9hc3luY193b3JrKGRvbWFpbiwgQSwgR0ZQX0tFUk5FTCk7 CisJYXN5bmNfd29ya193YWl0KEEpOworCWFzeW5jX3dvcmtfcHV0KEEpOworCisJaWYgKFJFQURf T05DRShyZXN1bHQpICE9IGV4cGVjdGVkKSB7CisJCXByX3dhcm4oIiVzIGV4cGVjdGVkICVjIFsl bGRdLCBnb3QgJWxkXG4iLAorCQkJbmFtZSwgKGNoYXIpZXhwZWN0ZWQsIGV4cGVjdGVkLCByZXN1 bHQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBfX2luaXQgdGVzdF9BKHN0cnVjdCBhc3luY19kb21haW4gKmRvbWFpbikKK3sKKwlyZXR1cm4g dGVzdF94KF9fZnVuY19fLCBkb21haW4sIHRhc2tfQSwgJ0EnKTsKK30KKworc3RhdGljIGludCBf X2luaXQgdGVzdF9CKHN0cnVjdCBhc3luY19kb21haW4gKmRvbWFpbikKK3sKKwlyZXR1cm4gdGVz dF94KF9fZnVuY19fLCBkb21haW4sIHRhc2tfQiwgJ0InKTsKK30KKworc3RhdGljIGludCBfX2lu aXQgdGVzdF94X2ZlbmNlKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgICAgc3RydWN0IGFzeW5j X2RvbWFpbiAqZG9tYWluLAorCQkJICAgICAgIGFzeW5jX2Z1bmNfdCBmdW5jLAorCQkJICAgICAg IGNvbnN0IGxvbmcgZXhwZWN0ZWQpCit7CisJc3RydWN0IGFzeW5jX3dvcmsgKkE7CisJc3RydWN0 IGtmZW5jZSAqZmVuY2U7CisJbG9uZyByZXN1bHQgPSAwOworCisJQSA9IGFzeW5jX3dvcmtfY3Jl YXRlKGZ1bmMsICZyZXN1bHQsIEdGUF9LRVJORUwpOworCWlmICghQSkKKwkJcmV0dXJuIC1FTk9N RU07CisKKwlmZW5jZSA9IGFsbG9jX2tmZW5jZSgpOworCWlmICghZmVuY2UpCisJCXJldHVybiAt RU5PTUVNOworCisJcXVldWVfYXN5bmNfd29yayhkb21haW4sIEEsIEdGUF9LRVJORUwpOworCisJ a2ZlbmNlX2F3YWl0X2tmZW5jZShmZW5jZSwgJkEtPmZlbmNlLCBHRlBfS0VSTkVMKTsKKwlrZmVu Y2VfY29tcGxldGUoZmVuY2UpOworCisJa2ZlbmNlX3dhaXQoZmVuY2UpOworCisJYXN5bmNfd29y a19wdXQoQSk7CisJa2ZlbmNlX3B1dChmZW5jZSk7CisKKwlpZiAoUkVBRF9PTkNFKHJlc3VsdCkg IT0gZXhwZWN0ZWQpIHsKKwkJcHJfd2FybigiJXMgZXhwZWN0ZWQgJWMgWyVsZF0sIGdvdCAlbGRc biIsCisJCQluYW1lLCAoY2hhcilleHBlY3RlZCwgZXhwZWN0ZWQsIHJlc3VsdCk7CisJCXJldHVy biAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCB0ZXN0 X0FfZmVuY2Uoc3RydWN0IGFzeW5jX2RvbWFpbiAqZG9tYWluKQoreworCXJldHVybiB0ZXN0X3hf ZmVuY2UoX19mdW5jX18sIGRvbWFpbiwgdGFza19BLCAnQScpOworfQorCitzdGF0aWMgaW50IF9f aW5pdCB0ZXN0X0JfZmVuY2Uoc3RydWN0IGFzeW5jX2RvbWFpbiAqZG9tYWluKQoreworCXJldHVy biB0ZXN0X3hfZmVuY2UoX19mdW5jX18sIGRvbWFpbiwgdGFza19CLCAnQicpOworfQorCitzdGF0 aWMgaW50IF9faW5pdCB0ZXN0X3hfZmVuY2VfeShjb25zdCBjaGFyICpuYW1lLAorCQkJCSBzdHJ1 Y3QgYXN5bmNfZG9tYWluICpkb21haW4sCisJCQkJIGFzeW5jX2Z1bmNfdCB4LAorCQkJCSBhc3lu Y19mdW5jX3QgeSwKKwkJCQkgY29uc3QgbG9uZyBleHBlY3RlZCkKK3sKKwlzdHJ1Y3QgYXN5bmNf d29yayAqQSwgKkI7CisJc3RydWN0IGtmZW5jZSAqZmVuY2U7CisJbG9uZyByZXN1bHQgPSAwOwor CisJQSA9IGFzeW5jX3dvcmtfY3JlYXRlKHgsICZyZXN1bHQsIEdGUF9LRVJORUwpOworCWlmICgh QSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlCID0gYXN5bmNfd29ya19jcmVhdGUoeSwgJnJlc3Vs dCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFCKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZlbmNlID0g YWxsb2Nfa2ZlbmNlKCk7CisJaWYgKCFmZW5jZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlrZmVu Y2VfYXdhaXRfa2ZlbmNlKGZlbmNlLCAmQS0+ZmVuY2UsIEdGUF9LRVJORUwpOworCWtmZW5jZV9j b21wbGV0ZShmZW5jZSk7CisKKwlxdWV1ZV9hc3luY193b3JrKGRvbWFpbiwgQSwgR0ZQX0tFUk5F TCk7CisJYXN5bmNfd29ya19wdXQoQSk7CisKKwlhc3luY193b3JrX2FmdGVyKEIsIGZlbmNlKTsK KwlxdWV1ZV9hc3luY193b3JrKGRvbWFpbiwgQiwgR0ZQX0tFUk5FTCk7CisJa2ZlbmNlX3B1dChm ZW5jZSk7CisKKwlhc3luY193b3JrX3dhaXQoQik7CisJYXN5bmNfd29ya19wdXQoQik7CisKKwlp ZiAoUkVBRF9PTkNFKHJlc3VsdCkgIT0gZXhwZWN0ZWQpIHsKKwkJcHJfd2FybigiJXMgZXhwZWN0 ZWQgJWMgWyVsZF0sIGdvdCAlbGRcbiIsCisJCQluYW1lLCAoY2hhcilleHBlY3RlZCwgZXhwZWN0 ZWQsIHJlc3VsdCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IF9faW5pdCB0ZXN0X0FfZmVuY2VfQihzdHJ1Y3QgYXN5bmNfZG9tYWluICpkb21h aW4pCit7CisJcmV0dXJuIHRlc3RfeF9mZW5jZV95KF9fZnVuY19fLCBkb21haW4sIHRhc2tfQSwg dGFza19CLCAnQicpOworfQorCitzdGF0aWMgaW50IF9faW5pdCB0ZXN0X0JfZmVuY2VfQShzdHJ1 Y3QgYXN5bmNfZG9tYWluICpkb21haW4pCit7CisJcmV0dXJuIHRlc3RfeF9mZW5jZV95KF9fZnVu Y19fLCBkb21haW4sIHRhc2tfQiwgdGFza19BLCAnQScpOworfQorCitzdHJ1Y3QgbG9uZ19jb250 ZXh0IHsKKwlzdHJ1Y3Qga2ZlbmNlICpiYXJyaWVyOworCWxvbmcgKnNyYzsKKwlsb25nIHJlc3Vs dDsKK307CisKK3N0YXRpYyB2b2lkIHRhc2tfd2FpdCh2b2lkICpkYXRhLCBhc3luY19jb29raWVf dCBjb29raWUpCit7CisJc3RydWN0IGxvbmdfY29udGV4dCAqY3R4ID0gZGF0YTsKKworCWtmZW5j ZV93YWl0KGN0eC0+YmFycmllcik7CisJc21wX3N0b3JlX21iKGN0eC0+cmVzdWx0LCBSRUFEX09O Q0UoKmN0eC0+c3JjKSk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHRlc3RfcGF1c2Uoc3RydWN0 IGFzeW5jX2RvbWFpbiAqZG9tYWluKQoreworCXN0cnVjdCBsb25nX2NvbnRleHQgY3R4OworCXN0 cnVjdCBhc3luY193b3JrICpBLCAqQjsKKwljb25zdCBsb25nIGV4cGVjdGVkID0gJ0InOworCWxv bmcgb3V0X0IgPSAnQSc7CisKKwljdHgucmVzdWx0ID0gMDsKKwljdHguc3JjID0gJm91dF9COwor CisJQSA9IGFzeW5jX3dvcmtfY3JlYXRlKHRhc2tfd2FpdCwgJmN0eCwgR0ZQX0tFUk5FTCk7CisJ aWYgKCFBKQorCQlyZXR1cm4gLUVOT01FTTsKKworCUIgPSBhc3luY193b3JrX2NyZWF0ZSh0YXNr X0IsICZvdXRfQiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFCKQorCQlyZXR1cm4gLUVOT01FTTsKKwor CWN0eC5iYXJyaWVyID0ga2ZlbmNlX2dldCgmQi0+ZmVuY2UpOworCisJcXVldWVfYXN5bmNfd29y ayhkb21haW4sIEEsIEdGUF9LRVJORUwpOworCXF1ZXVlX2FzeW5jX3dvcmsoZG9tYWluLCBCLCBH RlBfS0VSTkVMKTsKKwlhc3luY193b3JrX3B1dChCKTsKKworCWFzeW5jX3dvcmtfd2FpdChBKTsK Kwlhc3luY193b3JrX3B1dChBKTsKKworCWlmIChSRUFEX09OQ0UoY3R4LnJlc3VsdCkgIT0gZXhw ZWN0ZWQpIHsKKwkJcHJfd2FybigiJXMgZXhwZWN0ZWQgJWMgWyVsZF0sIGdvdCAlbGRcbiIsCisJ CQlfX2Z1bmNfXywgKGNoYXIpZXhwZWN0ZWQsIGV4cGVjdGVkLCBjdHgucmVzdWx0KTsKKwkJcmV0 dXJuIC1FSU5WQUw7CisJfQorCisJa2ZlbmNlX3B1dChjdHguYmFycmllcik7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIHZvaWQgdGFza19zaWduYWwodm9pZCAqZGF0YSwgYXN5bmNfY29va2ll X3QgY29va2llKQoreworCXN0cnVjdCBsb25nX2NvbnRleHQgKmN0eCA9IGRhdGE7CisKKwlrZmVu Y2VfY29tcGxldGUoY3R4LT5iYXJyaWVyKTsKK30KKworc3RhdGljIGludCBfX2luaXQgdGVzdF9t YW51YWwoc3RydWN0IGFzeW5jX2RvbWFpbiAqZG9tYWluKQoreworCXN0cnVjdCBsb25nX2NvbnRl eHQgY3R4OworCXN0cnVjdCBhc3luY193b3JrICpBLCAqQiwgKkM7CisJY29uc3QgbG9uZyBleHBl Y3RlZCA9ICdCJzsKKwlsb25nIG91dF9CID0gJ0EnOworCisJY3R4LnJlc3VsdCA9IDA7CisJY3R4 LnNyYyA9ICZvdXRfQjsKKwljdHguYmFycmllciA9IGFsbG9jX2tmZW5jZSgpOworCisJQSA9IGFz eW5jX3dvcmtfY3JlYXRlKHRhc2tfd2FpdCwgJmN0eCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFBKQor CQlyZXR1cm4gLUVOT01FTTsKKworCUIgPSBhc3luY193b3JrX2NyZWF0ZSh0YXNrX0IsICZvdXRf QiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFCKQorCQlyZXR1cm4gLUVOT01FTTsKKworCUMgPSBhc3lu Y193b3JrX2NyZWF0ZSh0YXNrX3NpZ25hbCwgJmN0eCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFCKQor CQlyZXR1cm4gLUVOT01FTTsKKworCWFzeW5jX3dvcmtfYWZ0ZXIoQywgJkItPmZlbmNlKTsKKwor CXF1ZXVlX2FzeW5jX3dvcmsoZG9tYWluLCBBLCBHRlBfS0VSTkVMKTsKKwlxdWV1ZV9hc3luY193 b3JrKGRvbWFpbiwgQiwgR0ZQX0tFUk5FTCk7CisJcXVldWVfYXN5bmNfd29yayhkb21haW4sIEMs IEdGUF9LRVJORUwpOworCisJYXN5bmNfd29ya193YWl0KEEpOworCisJYXN5bmNfd29ya19wdXQo Qyk7CisJYXN5bmNfd29ya19wdXQoQik7CisJYXN5bmNfd29ya19wdXQoQSk7CisJa2ZlbmNlX3B1 dChjdHguYmFycmllcik7CisKKwlpZiAoUkVBRF9PTkNFKGN0eC5yZXN1bHQpICE9IGV4cGVjdGVk KSB7CisJCXByX3dhcm4oIiVzIGV4cGVjdGVkICVjIFslbGRdLCBnb3QgJWxkXG4iLAorCQkJX19m dW5jX18sIChjaGFyKWV4cGVjdGVkLCBleHBlY3RlZCwgY3R4LnJlc3VsdCk7CisJCXJldHVybiAt RUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCB0ZXN0X3N5 bmMoc3RydWN0IGFzeW5jX2RvbWFpbiAqZG9tYWluKQoreworCXN0cnVjdCBhc3luY193b3JrICpC OworCWNvbnN0IGxvbmcgZXhwZWN0ZWQgPSAnQic7CisJbG9uZyByZXN1bHQgPSAwOworCisJQiA9 IGFzeW5jX3dvcmtfY3JlYXRlKHRhc2tfQiwgJnJlc3VsdCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFC KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXF1ZXVlX2FzeW5jX3dvcmsoZG9tYWluLCBCLCBHRlBf S0VSTkVMKTsKKwlhc3luY193b3JrX3B1dChCKTsKKworCWFzeW5jX3N5bmNocm9uaXplX2Z1bGxf ZG9tYWluKGRvbWFpbik7CisKKwlpZiAoUkVBRF9PTkNFKHJlc3VsdCkgIT0gZXhwZWN0ZWQpIHsK KwkJcHJfd2FybigiJXMgZXhwZWN0ZWQgJWMgWyVsZF0sIGdvdCAlbGRcbiIsCisJCQlfX2Z1bmNf XywgKGNoYXIpZXhwZWN0ZWQsIGV4cGVjdGVkLCByZXN1bHQpOworCQlyZXR1cm4gLUVJTlZBTDsK Kwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBfX2luaXQgdGVzdF9pbXBsaWNpdChz dHJ1Y3QgYXN5bmNfZG9tYWluICpkb21haW4pCiB7CiAJY29uc3QgbG9uZyBleHBlY3RlZCA9ICdC JzsKQEAgLTk5LDI0ICszNzUsNjIgQEAgc3RhdGljIGludCBfX2luaXQgdGVzdF9hc3luY19kb21h aW5faW5pdCh2b2lkKQogCiAJcHJfaW5mbygiVGVzdGluZyBhc3luYy1kb21haW5zXG4iKTsKIAot CXJldCA9IHRlc3RfaW1wbGljaXQoJmRvbWFpbik7CisJcmV0ID0gdGVzdF9BKCZkb21haW4pOwog CWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKwlyZXQgPSB0ZXN0X0FfZmVuY2UoJmRvbWFpbik7 CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlyZXQgPSB0ZXN0X0FfZmVuY2VfQigmZG9tYWlu KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCXJldCA9IHRlc3RfQigmZG9tYWluKTsKKwlp ZiAocmV0KQorCQlnb3RvIGVycjsKKworCXJldCA9IHRlc3RfQl9mZW5jZSgmZG9tYWluKTsKKwlp ZiAocmV0KQorCQlnb3RvIGVycjsKKworCXJldCA9IHRlc3RfQl9mZW5jZV9BKCZkb21haW4pOwor CWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJcmV0ID0gdGVzdF9wYXVzZSgmZG9tYWluKTsKKwlp ZiAocmV0KQorCQlnb3RvIGVycjsKKworCXJldCA9IHRlc3RfbWFudWFsKCZkb21haW4pOworCWlm IChyZXQpCisJCWdvdG8gZXJyOworCisJcmV0ID0gdGVzdF9zeW5jKCZkb21haW4pOworCWlmIChy ZXQpCisJCWdvdG8gZXJyOworCisJcmV0ID0gdGVzdF9pbXBsaWNpdCgmZG9tYWluKTsKKwlpZiAo cmV0KQorCQlnb3RvIGVycjsKKwogCXJldCA9IHRlc3RfcmVnaXN0ZXJlZCgmZG9tYWluKTsKIAlp ZiAocmV0KQotCQlyZXR1cm4gcmV0OworCQlnb3RvIGVycjsKIAogCXJldCA9IHBlcmZfbm9wKDEs IDEwMCk7CiAJaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwkJZ290byBlcnI7CiAKIAlyZXQgPSBw ZXJmX25vcCgxMjgsIDEwMDApOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJCWdvdG8gZXJy OwogCitlcnI6CisJYXN5bmNfc3luY2hyb25pemVfZnVsbF9kb21haW4oJmRvbWFpbik7CiAJYXN5 bmNfdW5yZWdpc3Rlcl9kb21haW4oJmRvbWFpbik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsK IH0KIAogc3RhdGljIHZvaWQgX19leGl0IHRlc3RfYXN5bmNfZG9tYWluX2NsZWFudXAodm9pZCkK LS0gCjIuOC4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK