From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E964BC33CB1 for ; Tue, 14 Jan 2020 09:10:48 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id B3A572075B for ; Tue, 14 Jan 2020 09:10:48 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="mjMLCHAO" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B3A572075B Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=bootlin.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:To :From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=gLKJUfPUYHVcchUBarOUwJfb4qbD/IObh2P3poa5hMA=; b=mjMLCHAOFQatsQ BcwTXd/1c3OQiQmDpZmLXJqLcDUiSrUOhuN3OtBBQ7RF2rcBgl3Tgogvp3fQ0JDLKdagAo/Idy3VA lxDA0OGcjwPB9M7RBk8EzvGwag+PCjhatAHppnh3Rk7xEy1omRVybxy7ekP6xu7VMJVkr8S6Sl3VP bFprD7hiUfuR2xsXRSAvtxQVkJfUesZoN3QS0iqy1JIwBpcaPLT0FLdUS+vCPy0TwJjtMjruBZHoo b9hrXP30gCuyFCa3jgW38tUEHdQRUcHaXK/i7rnwpxzN/5OX/vcUuMJWh3BbAAm7MX5FJ41POtguq 3MqAV8t6JlW40tD4vOVA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1irIDY-0003IM-Vj; Tue, 14 Jan 2020 09:10:32 +0000 Received: from relay10.mail.gandi.net ([217.70.178.230]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1irIDR-0003Gx-Bl for linux-mtd@lists.infradead.org; Tue, 14 Jan 2020 09:10:30 +0000 Received: from localhost.localdomain (unknown [91.224.148.103]) (Authenticated sender: miquel.raynal@bootlin.com) by relay10.mail.gandi.net (Postfix) with ESMTPSA id E200C240021; Tue, 14 Jan 2020 09:10:02 +0000 (UTC) From: Miquel Raynal To: Richard Weinberger , Vignesh Raghavendra , Tudor Ambarus , Subject: [PATCH v3] mtd: implement proper partition handling Date: Tue, 14 Jan 2020 10:09:52 +0100 Message-Id: <20200114090952.11232-1-miquel.raynal@bootlin.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200114_011025_835880_AB40E61F X-CRM114-Status: GOOD ( 21.33 ) X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Boris Brezillon , Miquel Raynal Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org SW5zdGVhZCBvZiBjb2xsZWN0aW5nIHBhcnRpdGlvbnMgaW4gYSBmbGF0IGxpc3QsIGNyZWF0ZSBh IGhpZXJhcmNoeQp3aXRoaW4gdGhlIG10ZF9pbmZvIHN0cnVjdHVyZTogdXNlIGEgcGFydGl0aW9u cyBsaXN0IHRvIGtlZXAgdHJhY2sgb2YKdGhlIHBhcnRpdGlvbnMgb2YgYW4gTVREIGRldmljZSAo d2hpY2ggbWlnaHQgYmUgaXRzZWxmIGEgcGFydGl0aW9uIG9mCmFub3RoZXIgTVREIGRldmljZSks IGEgcG9pbnRlciB0byB0aGUgcGFyZW50IGRldmljZSAoTlVMTCB3aGVuIHRoZSBNVEQKZGV2aWNl IGlzIHRoZSByb290IG9uZSwgbm90IGEgcGFydGl0aW9uKS4KCkJ5IGFsc28gc2F2aW5nIGRpcmVj dGx5IGluIG10ZF9pbmZvIHRoZSBvZmZzZXQgb2YgdGhlIHBhcnRpdGlvbiwgd2UKY2FuIGdldCBy aWQgb2YgdGhlIG10ZF9wYXJ0IHN0cnVjdHVyZS4KCldoaWxlIGF0IGl0LCBiZSBjb25zaXN0ZW50 IGluIHRoZSBuYW1pbmcgb2YgdGhlIG10ZF9pbmZvIHN0cnVjdHVyZXMgdG8KZWFzZSB0aGUgdW5k ZXJzdGFuZGluZyBvZiB0aGUgbmV3IGhpZXJhcmNoeTogdGhlc2Ugc3RydWN0dXJlcyBhcmUKdXN1 YWxseSBjYWxsZWQgJ210ZCcsIHVubGVzcyB0aGVyZSBhcmUgbXVsdGlwbGUgaW5zdGFuY2VzIG9m IHRoZSBzYW1lCnN0cnVjdHVyZS4gSW4gdGhpcyBjYXNlLCB0aGVyZSBpcyB1c3VhbGx5IGEgcGFy ZW50L2NoaWxkIGJvdW5kIHNvIHdlCndpbGwgY2FsbCB0aGVtICdwYXJlbnQnIGFuZCAnY2hpbGQn LgoKU2lnbmVkLW9mZi1ieTogTWlxdWVsIFJheW5hbCA8bWlxdWVsLnJheW5hbEBib290bGluLmNv bT4KLS0tCgpDaGFuZ2UgaW4gdjM6CiogS2VlcCB0aGUgbmFtaW5nIGZvciB0aGUgLT5wYXJlbnQg ZmllbGQgYnV0IGFkZCBtb3JlIGRldGFpbHMgaW4gdGhlCiAgbXRkX21hc3RlciBzdHJ1Y3R1cmUg a2VybmVsIGRvY3VtZW50YXRpb24gYW5kIHRoZSAtPnBhcmVudCBmaWVsZCBvZgogIHN0cnVjdCBt dGRfaW5mbyB0aGF0IHRoaXMgcGFyZW50aW5nIGlzIGZyb20gYW4gTVREIHBhcnRpdGlvbiBwb2lu dAogIG9mIHZpZXcsIG5vdCBmcm9tIHRoZSBkZXZpY2UgbW9kZWwgcGVyc3BlY3RpdmUuCgpDaGFu Z2VzIGluIHYyOgoqIENvbW1pdCBuYW1lIGNoYW5nZWQgInByb3BlciBwYXJ0aXRpb24gaGFuZGxp bmciIC0+ICJyZXdvcmsgcGFydGl0aW9uCiAgdHJlZSIuCiogVXBkYXRlIG10ZF9nZXRfZGV2aWNl X3NpemUoKSB0byBzdXBwb3J0IHJlY3Vyc2l2ZSBwYXJ0aXRpb25pbmcuCiogUmVtb3ZlIHBhcnRf KigpIGhlbHBlcnMsIHVwZGF0ZSB0aGUgY29ycmVzcG9uZGluZyBtdGRfKigpIGhlbHBlcnMgdG8K ICBoYW5kbGUgdGhlIHBhcnRpdGlvbnMgdGhlbXNlbHZlcy4KKiBEcm9wIHRoZSBnbG9iYWwgcGFy dGl0aW9ucyBsb2NrLCBhZGQgYSBsb2NrIHBlciBtdGRfaW5mbyBidXQgb25seSB1c2UKICB0aGUg cm9vdCBvbmUgdG8gcHJvdGVjdCBhZ2FpbnN0IHBhcnRpdGlvbnMgdXBkYXRlcy4KCiBkcml2ZXJz L210ZC9tdGRjaGFyLmMgICAgICAgICAgfCAgMTIgKy0KIGRyaXZlcnMvbXRkL210ZGNvcmUuYyAg ICAgICAgICB8IDI1MCArKysrKysrKy0tLS0KIGRyaXZlcnMvbXRkL210ZHBhcnQuYyAgICAgICAg ICB8IDY5NyArKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGluY2x1ZGUvbGludXgv bXRkL210ZC5oICAgICAgICB8IDEyNSArKysrKy0KIGluY2x1ZGUvbGludXgvbXRkL3BhcnRpdGlv bnMuaCB8ICAgMSAtCiA1IGZpbGVzIGNoYW5nZWQsIDQ3OSBpbnNlcnRpb25zKCspLCA2MDYgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbXRkY2hhci5jIGIvZHJpdmVycy9t dGQvbXRkY2hhci5jCmluZGV4IGI4NDEwMDhhOWViNy4uYzU5MzViMmY5Y2QxIDEwMDY0NAotLS0g YS9kcml2ZXJzL210ZC9tdGRjaGFyLmMKKysrIGIvZHJpdmVycy9tdGQvbXRkY2hhci5jCkBAIC0z NDksNiArMzQ5LDcgQEAgc3RhdGljIGludCBtdGRjaGFyX3dyaXRlb29iKHN0cnVjdCBmaWxlICpm aWxlLCBzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKIAl1aW50NjRfdCBzdGFydCwgdWludDMyX3QgbGVu Z3RoLCB2b2lkIF9fdXNlciAqcHRyLAogCXVpbnQzMl90IF9fdXNlciAqcmV0cCkKIHsKKwlzdHJ1 Y3QgbXRkX2luZm8gKm1hc3RlciAgPSBtdGRfZ2V0X21hc3RlcihtdGQpOwogCXN0cnVjdCBtdGRf ZmlsZV9pbmZvICptZmkgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IG10ZF9vb2Jfb3Bz IG9wcyA9IHt9OwogCXVpbnQzMl90IHJldGxlbjsKQEAgLTM2MCw3ICszNjEsNyBAQCBzdGF0aWMg aW50IG10ZGNoYXJfd3JpdGVvb2Ioc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtdGRfaW5mbyAq bXRkLAogCWlmIChsZW5ndGggPiA0MDk2KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICghbXRk LT5fd3JpdGVfb29iKQorCWlmICghbWFzdGVyLT5fd3JpdGVfb29iKQogCQlyZXR1cm4gLUVPUE5P VFNVUFA7CiAKIAlvcHMub29ibGVuID0gbGVuZ3RoOwpAQCAtNTg2LDYgKzU4Nyw3IEBAIHN0YXRp YyBpbnQgbXRkY2hhcl9ibGtwZ19pb2N0bChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKIHN0YXRpYyBp bnQgbXRkY2hhcl93cml0ZV9pb2N0bChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKIAkJc3RydWN0IG10 ZF93cml0ZV9yZXEgX191c2VyICphcmdwKQogeworCXN0cnVjdCBtdGRfaW5mbyAqbWFzdGVyID0g bXRkX2dldF9tYXN0ZXIobXRkKTsKIAlzdHJ1Y3QgbXRkX3dyaXRlX3JlcSByZXE7CiAJc3RydWN0 IG10ZF9vb2Jfb3BzIG9wcyA9IHt9OwogCWNvbnN0IHZvaWQgX191c2VyICp1c3JfZGF0YSwgKnVz cl9vb2I7CkBAIC01OTcsOSArNTk5LDggQEAgc3RhdGljIGludCBtdGRjaGFyX3dyaXRlX2lvY3Rs KHN0cnVjdCBtdGRfaW5mbyAqbXRkLAogCXVzcl9kYXRhID0gKGNvbnN0IHZvaWQgX191c2VyICop KHVpbnRwdHJfdClyZXEudXNyX2RhdGE7CiAJdXNyX29vYiA9IChjb25zdCB2b2lkIF9fdXNlciAq KSh1aW50cHRyX3QpcmVxLnVzcl9vb2I7CiAKLQlpZiAoIW10ZC0+X3dyaXRlX29vYikKKwlpZiAo IW1hc3Rlci0+X3dyaXRlX29vYikKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCiAJb3BzLm1vZGUg PSByZXEubW9kZTsKIAlvcHMubGVuID0gKHNpemVfdClyZXEubGVuOwogCW9wcy5vb2JsZW4gPSAo c2l6ZV90KXJlcS5vb2JsZW47CkBAIC02MzUsNiArNjM2LDcgQEAgc3RhdGljIGludCBtdGRjaGFy X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1X2ludCBjbWQsIHVfbG9uZyBhcmcpCiB7CiAJc3Ry dWN0IG10ZF9maWxlX2luZm8gKm1maSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgbXRk X2luZm8gKm10ZCA9IG1maS0+bXRkOworCXN0cnVjdCBtdGRfaW5mbyAqbWFzdGVyID0gbXRkX2dl dF9tYXN0ZXIobXRkKTsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsK IAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgbXRkX2luZm9fdXNlciBpbmZvOwpAQCAtODI0LDcgKzgy Niw3IEBAIHN0YXRpYyBpbnQgbXRkY2hhcl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdV9pbnQg Y21kLCB1X2xvbmcgYXJnKQogCXsKIAkJc3RydWN0IG5hbmRfb29iaW5mbyBvaTsKIAotCQlpZiAo IW10ZC0+b29ibGF5b3V0KQorCQlpZiAoIW1hc3Rlci0+b29ibGF5b3V0KQogCQkJcmV0dXJuIC1F T1BOT1RTVVBQOwogCiAJCXJldCA9IGdldF9vb2JpbmZvKG10ZCwgJm9pKTsKQEAgLTkxOCw3ICs5 MjAsNyBAQCBzdGF0aWMgaW50IG10ZGNoYXJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVfaW50 IGNtZCwgdV9sb25nIGFyZykKIAl7CiAJCXN0cnVjdCBuYW5kX2VjY2xheW91dF91c2VyICp1c3Js YXk7CiAKLQkJaWYgKCFtdGQtPm9vYmxheW91dCkKKwkJaWYgKCFtYXN0ZXItPm9vYmxheW91dCkK IAkJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCQl1c3JsYXkgPSBrbWFsbG9jKHNpemVvZigqdXNy bGF5KSwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRjb3JlLmMgYi9k cml2ZXJzL210ZC9tdGRjb3JlLmMKaW5kZXggNWZhYzQzNTViOWMyLi4yOTE2Njc0MjA4YjMgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL210ZGNvcmUuYworKysgYi9kcml2ZXJzL210ZC9tdGRjb3Jl LmMKQEAgLTQ1NiwxMyArNDU2LDE0IEBAIHN0YXRpYyBpbnQgbXRkX3JlYm9vdF9ub3RpZmllcihz dHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm4sIHVuc2lnbmVkIGxvbmcgc3RhdGUsCiBpbnQgbXRkX3d1 bml0X3RvX3BhaXJpbmdfaW5mbyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHd1bml0LAogCQkJ ICAgICAgc3RydWN0IG10ZF9wYWlyaW5nX2luZm8gKmluZm8pCiB7Ci0JaW50IG5wYWlycyA9IG10 ZF93dW5pdF9wZXJfZWIobXRkKSAvIG10ZF9wYWlyaW5nX2dyb3VwcyhtdGQpOworCXN0cnVjdCBt dGRfaW5mbyAqbWFzdGVyID0gbXRkX2dldF9tYXN0ZXIobXRkKTsKKwlpbnQgbnBhaXJzID0gbXRk X3d1bml0X3Blcl9lYihtYXN0ZXIpIC8gbXRkX3BhaXJpbmdfZ3JvdXBzKG1hc3Rlcik7CiAKIAlp ZiAod3VuaXQgPCAwIHx8IHd1bml0ID49IG5wYWlycykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlp ZiAobXRkLT5wYWlyaW5nICYmIG10ZC0+cGFpcmluZy0+Z2V0X2luZm8pCi0JCXJldHVybiBtdGQt PnBhaXJpbmctPmdldF9pbmZvKG10ZCwgd3VuaXQsIGluZm8pOworCWlmIChtYXN0ZXItPnBhaXJp bmcgJiYgbWFzdGVyLT5wYWlyaW5nLT5nZXRfaW5mbykKKwkJcmV0dXJuIG1hc3Rlci0+cGFpcmlu Zy0+Z2V0X2luZm8obWFzdGVyLCB3dW5pdCwgaW5mbyk7CiAKIAlpbmZvLT5ncm91cCA9IDA7CiAJ aW5mby0+cGFpciA9IHd1bml0OwpAQCAtNDk4LDE1ICs0OTksMTYgQEAgRVhQT1JUX1NZTUJPTF9H UEwobXRkX3d1bml0X3RvX3BhaXJpbmdfaW5mbyk7CiBpbnQgbXRkX3BhaXJpbmdfaW5mb190b193 dW5pdChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCBtdGRfcGFp cmluZ19pbmZvICppbmZvKQogewotCWludCBuZ3JvdXBzID0gbXRkX3BhaXJpbmdfZ3JvdXBzKG10 ZCk7Ci0JaW50IG5wYWlycyA9IG10ZF93dW5pdF9wZXJfZWIobXRkKSAvIG5ncm91cHM7CisJc3Ry dWN0IG10ZF9pbmZvICptYXN0ZXIgPSBtdGRfZ2V0X21hc3RlcihtdGQpOworCWludCBuZ3JvdXBz ID0gbXRkX3BhaXJpbmdfZ3JvdXBzKG1hc3Rlcik7CisJaW50IG5wYWlycyA9IG10ZF93dW5pdF9w ZXJfZWIobWFzdGVyKSAvIG5ncm91cHM7CiAKIAlpZiAoIWluZm8gfHwgaW5mby0+cGFpciA8IDAg fHwgaW5mby0+cGFpciA+PSBucGFpcnMgfHwKIAkgICAgaW5mby0+Z3JvdXAgPCAwIHx8IGluZm8t Pmdyb3VwID49IG5ncm91cHMpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKG10ZC0+cGFpcmlu ZyAmJiBtdGQtPnBhaXJpbmctPmdldF93dW5pdCkKLQkJcmV0dXJuIG10ZC0+cGFpcmluZy0+Z2V0 X3d1bml0KG10ZCwgaW5mbyk7CisJaWYgKG1hc3Rlci0+cGFpcmluZyAmJiBtYXN0ZXItPnBhaXJp bmctPmdldF93dW5pdCkKKwkJcmV0dXJuIG10ZC0+cGFpcmluZy0+Z2V0X3d1bml0KG1hc3Rlciwg aW5mbyk7CiAKIAlyZXR1cm4gaW5mby0+cGFpcjsKIH0KQEAgLTUyNCwxMCArNTI2LDEyIEBAIEVY UE9SVF9TWU1CT0xfR1BMKG10ZF9wYWlyaW5nX2luZm9fdG9fd3VuaXQpOwogICovCiBpbnQgbXRk X3BhaXJpbmdfZ3JvdXBzKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQogewotCWlmICghbXRkLT5wYWly aW5nIHx8ICFtdGQtPnBhaXJpbmctPm5ncm91cHMpCisJc3RydWN0IG10ZF9pbmZvICptYXN0ZXIg PSBtdGRfZ2V0X21hc3RlcihtdGQpOworCisJaWYgKCFtYXN0ZXItPnBhaXJpbmcgfHwgIW1hc3Rl ci0+cGFpcmluZy0+bmdyb3VwcykKIAkJcmV0dXJuIDE7CiAKLQlyZXR1cm4gbXRkLT5wYWlyaW5n LT5uZ3JvdXBzOworCXJldHVybiBtYXN0ZXItPnBhaXJpbmctPm5ncm91cHM7CiB9CiBFWFBPUlRf U1lNQk9MX0dQTChtdGRfcGFpcmluZ19ncm91cHMpOwogCkBAIC01ODcsNiArNTkxLDcgQEAgc3Rh dGljIGludCBtdGRfbnZtZW1fYWRkKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQogCiBpbnQgYWRkX210 ZF9kZXZpY2Uoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7CisJc3RydWN0IG10ZF9pbmZvICptYXN0 ZXIgPSBtdGRfZ2V0X21hc3RlcihtdGQpOwogCXN0cnVjdCBtdGRfbm90aWZpZXIgKm5vdDsKIAlp bnQgaSwgZXJyb3I7CiAKQEAgLTYwOCw3ICs2MTMsNyBAQCBpbnQgYWRkX210ZF9kZXZpY2Uoc3Ry dWN0IG10ZF9pbmZvICptdGQpCiAJCSAgICAobXRkLT5fcmVhZCAmJiBtdGQtPl9yZWFkX29vYikp KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChXQVJOX09OKCghbXRkLT5lcmFzZXNpemUgfHwg IW10ZC0+X2VyYXNlKSAmJgorCWlmIChXQVJOX09OKCghbXRkLT5lcmFzZXNpemUgfHwgIW1hc3Rl ci0+X2VyYXNlKSAmJgogCQkgICAgIShtdGQtPmZsYWdzICYgTVREX05PX0VSQVNFKSkpCiAJCXJl dHVybiAtRUlOVkFMOwogCkBAIC03NjUsNyArNzcwLDggQEAgc3RhdGljIHZvaWQgbXRkX3NldF9k ZXZfZGVmYXVsdHMoc3RydWN0IG10ZF9pbmZvICptdGQpCiAJCXByX2RlYnVnKCJtdGQgZGV2aWNl IHdvbid0IHNob3cgYSBkZXZpY2Ugc3ltbGluayBpbiBzeXNmc1xuIik7CiAJfQogCi0JbXRkLT5v cmlnX2ZsYWdzID0gbXRkLT5mbGFnczsKKwlJTklUX0xJU1RfSEVBRCgmbXRkLT5wYXJ0aXRpb25z KTsKKwltdXRleF9pbml0KCZtdGQtPm1hc3Rlci5wYXJ0aXRpb25zX2xvY2spOwogfQogCiAvKioK QEAgLTk3MSwyMCArOTc3LDI2IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGdldF9tdGRfZGV2aWNlKTsK IAogaW50IF9fZ2V0X210ZF9kZXZpY2Uoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7CisJc3RydWN0 IG10ZF9pbmZvICptYXN0ZXIgPSBtdGRfZ2V0X21hc3RlcihtdGQpOwogCWludCBlcnI7CiAKLQlp ZiAoIXRyeV9tb2R1bGVfZ2V0KG10ZC0+b3duZXIpKQorCWlmICghdHJ5X21vZHVsZV9nZXQobWFz dGVyLT5vd25lcikpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKG10ZC0+X2dldF9kZXZpY2Up IHsKLQkJZXJyID0gbXRkLT5fZ2V0X2RldmljZShtdGQpOworCWlmIChtYXN0ZXItPl9nZXRfZGV2 aWNlKSB7CisJCWVyciA9IG1hc3Rlci0+X2dldF9kZXZpY2UobXRkKTsKIAogCQlpZiAoZXJyKSB7 Ci0JCQltb2R1bGVfcHV0KG10ZC0+b3duZXIpOworCQkJbW9kdWxlX3B1dChtYXN0ZXItPm93bmVy KTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIAl9Ci0JbXRkLT51c2Vjb3VudCsrOworCisJd2hpbGUg KG10ZC0+cGFyZW50KSB7CisJCW10ZC0+dXNlY291bnQrKzsKKwkJbXRkID0gbXRkLT5wYXJlbnQ7 CisJfQorCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX2dldF9tdGRfZGV2aWNl KTsKQEAgLTEwMzgsMTMgKzEwNTAsMTggQEAgRVhQT1JUX1NZTUJPTF9HUEwocHV0X210ZF9kZXZp Y2UpOwogCiB2b2lkIF9fcHV0X210ZF9kZXZpY2Uoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7Ci0J LS1tdGQtPnVzZWNvdW50OwotCUJVR19PTihtdGQtPnVzZWNvdW50IDwgMCk7CisJc3RydWN0IG10 ZF9pbmZvICptYXN0ZXIgPSBtdGRfZ2V0X21hc3RlcihtdGQpOwogCi0JaWYgKG10ZC0+X3B1dF9k ZXZpY2UpCi0JCW10ZC0+X3B1dF9kZXZpY2UobXRkKTsKKwl3aGlsZSAobXRkLT5wYXJlbnQpIHsK KwkJLS1tdGQtPnVzZWNvdW50OworCQlCVUdfT04obXRkLT51c2Vjb3VudCA8IDApOworCQltdGQg PSBtdGQtPnBhcmVudDsKKwl9CiAKLQltb2R1bGVfcHV0KG10ZC0+b3duZXIpOworCWlmIChtYXN0 ZXItPl9wdXRfZGV2aWNlKQorCQltYXN0ZXItPl9wdXRfZGV2aWNlKG1hc3Rlcik7CisKKwltb2R1 bGVfcHV0KG1hc3Rlci0+b3duZXIpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoX19wdXRfbXRkX2Rl dmljZSk7CiAKQEAgLTEwNTUsOSArMTA3MiwxMyBAQCBFWFBPUlRfU1lNQk9MX0dQTChfX3B1dF9t dGRfZGV2aWNlKTsKICAqLwogaW50IG10ZF9lcmFzZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3Ry dWN0IGVyYXNlX2luZm8gKmluc3RyKQogeworCXN0cnVjdCBtdGRfaW5mbyAqbWFzdGVyID0gbXRk X2dldF9tYXN0ZXIobXRkKTsKKwl1NjQgbXN0X29mcyA9IG10ZF9nZXRfbWFzdGVyX29mcyhtdGQs IDApOworCWludCByZXQ7CisKIAlpbnN0ci0+ZmFpbF9hZGRyID0gTVREX0ZBSUxfQUREUl9VTktO T1dOOwogCi0JaWYgKCFtdGQtPmVyYXNlc2l6ZSB8fCAhbXRkLT5fZXJhc2UpCisJaWYgKCFtdGQt PmVyYXNlc2l6ZSB8fCAhbWFzdGVyLT5fZXJhc2UpCiAJCXJldHVybiAtRU5PVFNVUFA7CiAKIAlp ZiAoaW5zdHItPmFkZHIgPj0gbXRkLT5zaXplIHx8IGluc3RyLT5sZW4gPiBtdGQtPnNpemUgLSBp bnN0ci0+YWRkcikKQEAgLTEwNjksNyArMTA5MCwxNCBAQCBpbnQgbXRkX2VyYXNlKHN0cnVjdCBt dGRfaW5mbyAqbXRkLCBzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5zdHIpCiAJCXJldHVybiAwOwogCiAJ bGVkdHJpZ19tdGRfYWN0aXZpdHkoKTsKLQlyZXR1cm4gbXRkLT5fZXJhc2UobXRkLCBpbnN0cik7 CisKKwlpbnN0ci0+YWRkciArPSBtc3Rfb2ZzOworCXJldCA9IG1hc3Rlci0+X2VyYXNlKG1hc3Rl ciwgaW5zdHIpOworCWlmIChpbnN0ci0+ZmFpbF9hZGRyICE9IE1URF9GQUlMX0FERFJfVU5LTk9X TikKKwkJaW5zdHItPmZhaWxfYWRkciAtPSBtc3Rfb2ZzOworCisJaW5zdHItPmFkZHIgLT0gbXN0 X29mczsKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwobXRkX2VyYXNlKTsKIApA QCAtMTA3OSwzMCArMTEwNywzNiBAQCBFWFBPUlRfU1lNQk9MX0dQTChtdGRfZXJhc2UpOwogaW50 IG10ZF9wb2ludChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4s IHNpemVfdCAqcmV0bGVuLAogCSAgICAgIHZvaWQgKip2aXJ0LCByZXNvdXJjZV9zaXplX3QgKnBo eXMpCiB7CisJc3RydWN0IG10ZF9pbmZvICptYXN0ZXIgPSBtdGRfZ2V0X21hc3RlcihtdGQpOwor CiAJKnJldGxlbiA9IDA7CiAJKnZpcnQgPSBOVUxMOwogCWlmIChwaHlzKQogCQkqcGh5cyA9IDA7 Ci0JaWYgKCFtdGQtPl9wb2ludCkKKwlpZiAoIW1hc3Rlci0+X3BvaW50KQogCQlyZXR1cm4gLUVP UE5PVFNVUFA7CiAJaWYgKGZyb20gPCAwIHx8IGZyb20gPj0gbXRkLT5zaXplIHx8IGxlbiA+IG10 ZC0+c2l6ZSAtIGZyb20pCiAJCXJldHVybiAtRUlOVkFMOwogCWlmICghbGVuKQogCQlyZXR1cm4g MDsKLQlyZXR1cm4gbXRkLT5fcG9pbnQobXRkLCBmcm9tLCBsZW4sIHJldGxlbiwgdmlydCwgcGh5 cyk7CisKKwlmcm9tID0gbXRkX2dldF9tYXN0ZXJfb2ZzKG10ZCwgZnJvbSk7CisJcmV0dXJuIG1h c3Rlci0+X3BvaW50KG1hc3RlciwgZnJvbSwgbGVuLCByZXRsZW4sIHZpcnQsIHBoeXMpOwogfQog RVhQT1JUX1NZTUJPTF9HUEwobXRkX3BvaW50KTsKIAogLyogV2UgcHJvYmFibHkgc2hvdWxkbid0 IGFsbG93IFhJUCBpZiB0aGUgdW5wb2ludCBpc24ndCBhIE5VTEwgKi8KIGludCBtdGRfdW5wb2lu dChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4pCiB7Ci0JaWYg KCFtdGQtPl91bnBvaW50KQorCXN0cnVjdCBtdGRfaW5mbyAqbWFzdGVyID0gbXRkX2dldF9tYXN0 ZXIobXRkKTsKKworCWlmICghbWFzdGVyLT5fdW5wb2ludCkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQ OwogCWlmIChmcm9tIDwgMCB8fCBmcm9tID49IG10ZC0+c2l6ZSB8fCBsZW4gPiBtdGQtPnNpemUg LSBmcm9tKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoIWxlbikKIAkJcmV0dXJuIDA7Ci0JcmV0 dXJuIG10ZC0+X3VucG9pbnQobXRkLCBmcm9tLCBsZW4pOworCXJldHVybiBtYXN0ZXItPl91bnBv aW50KG1hc3RlciwgbXRkX2dldF9tYXN0ZXJfb2ZzKG10ZCwgZnJvbSksIGxlbik7CiB9CiBFWFBP UlRfU1lNQk9MX0dQTChtdGRfdW5wb2ludCk7CiAKQEAgLTExMjksNiArMTE2MywyNSBAQCB1bnNp Z25lZCBsb25nIG10ZF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdW5z aWduZWQgbG9uZyBsZW4sCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtdGRfZ2V0X3VubWFwcGVkX2Fy ZWEpOwogCitzdGF0aWMgdm9pZCBtdGRfdXBkYXRlX2VjY19zdGF0cyhzdHJ1Y3QgbXRkX2luZm8g Km10ZCwgc3RydWN0IG10ZF9pbmZvICptYXN0ZXIsCisJCQkJIGNvbnN0IHN0cnVjdCBtdGRfZWNj X3N0YXRzICpvbGRfc3RhdHMpCit7CisJc3RydWN0IG10ZF9lY2Nfc3RhdHMgZGlmZjsKKworCWlm IChtYXN0ZXIgPT0gbXRkKQorCQlyZXR1cm47CisKKwlkaWZmID0gbWFzdGVyLT5lY2Nfc3RhdHM7 CisJZGlmZi5mYWlsZWQgLT0gb2xkX3N0YXRzLT5mYWlsZWQ7CisJZGlmZi5jb3JyZWN0ZWQgLT0g b2xkX3N0YXRzLT5jb3JyZWN0ZWQ7CisKKwl3aGlsZSAobXRkLT5wYXJlbnQpIHsKKwkJbXRkLT5l Y2Nfc3RhdHMuZmFpbGVkICs9IGRpZmYuZmFpbGVkOworCQltdGQtPmVjY19zdGF0cy5jb3JyZWN0 ZWQgKz0gZGlmZi5jb3JyZWN0ZWQ7CisJCW10ZCA9IG10ZC0+cGFyZW50OworCX0KK30KKwogaW50 IG10ZF9yZWFkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwg c2l6ZV90ICpyZXRsZW4sCiAJICAgICB1X2NoYXIgKmJ1ZikKIHsKQEAgLTExNzEsOCArMTIyNCwx MCBAQCBFWFBPUlRfU1lNQk9MX0dQTChtdGRfd3JpdGUpOwogaW50IG10ZF9wYW5pY193cml0ZShz dHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLCBzaXplX3QgKnJldGxl biwKIAkJICAgIGNvbnN0IHVfY2hhciAqYnVmKQogeworCXN0cnVjdCBtdGRfaW5mbyAqbWFzdGVy ID0gbXRkX2dldF9tYXN0ZXIobXRkKTsKKwogCSpyZXRsZW4gPSAwOwotCWlmICghbXRkLT5fcGFu aWNfd3JpdGUpCisJaWYgKCFtYXN0ZXItPl9wYW5pY193cml0ZSkKIAkJcmV0dXJuIC1FT1BOT1RT VVBQOwogCWlmICh0byA8IDAgfHwgdG8gPj0gbXRkLT5zaXplIHx8IGxlbiA+IG10ZC0+c2l6ZSAt IHRvKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTExODMsNyArMTIzOCw4IEBAIGludCBtdGRfcGFu aWNfd3JpdGUoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwgc2l6 ZV90ICpyZXRsZW4sCiAJaWYgKCFtdGQtPm9vcHNfcGFuaWNfd3JpdGUpCiAJCW10ZC0+b29wc19w YW5pY193cml0ZSA9IHRydWU7CiAKLQlyZXR1cm4gbXRkLT5fcGFuaWNfd3JpdGUobXRkLCB0bywg bGVuLCByZXRsZW4sIGJ1Zik7CisJcmV0dXJuIG1hc3Rlci0+X3BhbmljX3dyaXRlKG1hc3Rlciwg bXRkX2dldF9tYXN0ZXJfb2ZzKG10ZCwgdG8pLCBsZW4sCisJCQkJICAgIHJldGxlbiwgYnVmKTsK IH0KIEVYUE9SVF9TWU1CT0xfR1BMKG10ZF9wYW5pY193cml0ZSk7CiAKQEAgLTEyMjIsNyArMTI3 OCwxMCBAQCBzdGF0aWMgaW50IG10ZF9jaGVja19vb2Jfb3BzKHN0cnVjdCBtdGRfaW5mbyAqbXRk LCBsb2ZmX3Qgb2ZmcywKIAogaW50IG10ZF9yZWFkX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwg bG9mZl90IGZyb20sIHN0cnVjdCBtdGRfb29iX29wcyAqb3BzKQogeworCXN0cnVjdCBtdGRfaW5m byAqbWFzdGVyID0gbXRkX2dldF9tYXN0ZXIobXRkKTsKKwlzdHJ1Y3QgbXRkX2VjY19zdGF0cyBv bGRfc3RhdHMgPSBtYXN0ZXItPmVjY19zdGF0czsKIAlpbnQgcmV0X2NvZGU7CisKIAlvcHMtPnJl dGxlbiA9IG9wcy0+b29icmV0bGVuID0gMDsKIAogCXJldF9jb2RlID0gbXRkX2NoZWNrX29vYl9v cHMobXRkLCBmcm9tLCBvcHMpOwpAQCAtMTIzMiwxNCArMTI5MSwxNyBAQCBpbnQgbXRkX3JlYWRf b29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc3RydWN0IG10ZF9vb2Jfb3Bz ICpvcHMpCiAJbGVkdHJpZ19tdGRfYWN0aXZpdHkoKTsKIAogCS8qIENoZWNrIHRoZSB2YWxpZGl0 eSBvZiBhIHBvdGVudGlhbCBmYWxsYmFjayBvbiBtdGQtPl9yZWFkICovCi0JaWYgKCFtdGQtPl9y ZWFkX29vYiAmJiAoIW10ZC0+X3JlYWQgfHwgb3BzLT5vb2JidWYpKQorCWlmICghbWFzdGVyLT5f cmVhZF9vb2IgJiYgKCFtYXN0ZXItPl9yZWFkIHx8IG9wcy0+b29iYnVmKSkKIAkJcmV0dXJuIC1F T1BOT1RTVVBQOwogCi0JaWYgKG10ZC0+X3JlYWRfb29iKQotCQlyZXRfY29kZSA9IG10ZC0+X3Jl YWRfb29iKG10ZCwgZnJvbSwgb3BzKTsKKwlmcm9tID0gbXRkX2dldF9tYXN0ZXJfb2ZzKG10ZCwg ZnJvbSk7CisJaWYgKG1hc3Rlci0+X3JlYWRfb29iKQorCQlyZXRfY29kZSA9IG1hc3Rlci0+X3Jl YWRfb29iKG1hc3RlciwgZnJvbSwgb3BzKTsKIAllbHNlCi0JCXJldF9jb2RlID0gbXRkLT5fcmVh ZChtdGQsIGZyb20sIG9wcy0+bGVuLCAmb3BzLT5yZXRsZW4sCi0JCQkJICAgICAgb3BzLT5kYXRi dWYpOworCQlyZXRfY29kZSA9IG1hc3Rlci0+X3JlYWQobWFzdGVyLCBmcm9tLCBvcHMtPmxlbiwg Jm9wcy0+cmV0bGVuLAorCQkJCQkgb3BzLT5kYXRidWYpOworCisJbXRkX3VwZGF0ZV9lY2Nfc3Rh dHMobXRkLCBtYXN0ZXIsICZvbGRfc3RhdHMpOwogCiAJLyoKIAkgKiBJbiBjYXNlcyB3aGVyZSBv cHMtPmRhdGJ1ZiAhPSBOVUxMLCBtdGQtPl9yZWFkX29vYigpIGhhcyBzZW1hbnRpY3MKQEAgLTEy NTgsNiArMTMyMCw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKG10ZF9yZWFkX29vYik7CiBpbnQgbXRk X3dyaXRlX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLAogCQkJCXN0cnVjdCBt dGRfb29iX29wcyAqb3BzKQogeworCXN0cnVjdCBtdGRfaW5mbyAqbWFzdGVyID0gbXRkX2dldF9t YXN0ZXIobXRkKTsKIAlpbnQgcmV0OwogCiAJb3BzLT5yZXRsZW4gPSBvcHMtPm9vYnJldGxlbiA9 IDA7CkBAIC0xMjcyLDE0ICsxMzM1LDE2IEBAIGludCBtdGRfd3JpdGVfb29iKHN0cnVjdCBtdGRf aW5mbyAqbXRkLCBsb2ZmX3QgdG8sCiAJbGVkdHJpZ19tdGRfYWN0aXZpdHkoKTsKIAogCS8qIENo ZWNrIHRoZSB2YWxpZGl0eSBvZiBhIHBvdGVudGlhbCBmYWxsYmFjayBvbiBtdGQtPl93cml0ZSAq LwotCWlmICghbXRkLT5fd3JpdGVfb29iICYmICghbXRkLT5fd3JpdGUgfHwgb3BzLT5vb2JidWYp KQorCWlmICghbWFzdGVyLT5fd3JpdGVfb29iICYmICghbWFzdGVyLT5fd3JpdGUgfHwgb3BzLT5v b2JidWYpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlpZiAobXRkLT5fd3JpdGVfb29iKQot CQlyZXR1cm4gbXRkLT5fd3JpdGVfb29iKG10ZCwgdG8sIG9wcyk7CisJdG8gPSBtdGRfZ2V0X21h c3Rlcl9vZnMobXRkLCB0byk7CisKKwlpZiAobWFzdGVyLT5fd3JpdGVfb29iKQorCQlyZXR1cm4g bWFzdGVyLT5fd3JpdGVfb29iKG1hc3RlciwgdG8sIG9wcyk7CiAJZWxzZQotCQlyZXR1cm4gbXRk LT5fd3JpdGUobXRkLCB0bywgb3BzLT5sZW4sICZvcHMtPnJldGxlbiwKLQkJCQkgICBvcHMtPmRh dGJ1Zik7CisJCXJldHVybiBtYXN0ZXItPl93cml0ZShtYXN0ZXIsIHRvLCBvcHMtPmxlbiwgJm9w cy0+cmV0bGVuLAorCQkJCSAgICAgIG9wcy0+ZGF0YnVmKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BM KG10ZF93cml0ZV9vb2IpOwogCkBAIC0xMzAyLDE1ICsxMzY3LDE3IEBAIEVYUE9SVF9TWU1CT0xf R1BMKG10ZF93cml0ZV9vb2IpOwogaW50IG10ZF9vb2JsYXlvdXRfZWNjKHN0cnVjdCBtdGRfaW5m byAqbXRkLCBpbnQgc2VjdGlvbiwKIAkJICAgICAgc3RydWN0IG10ZF9vb2JfcmVnaW9uICpvb2Jl Y2MpCiB7CisJc3RydWN0IG10ZF9pbmZvICptYXN0ZXIgPSBtdGRfZ2V0X21hc3RlcihtdGQpOwor CiAJbWVtc2V0KG9vYmVjYywgMCwgc2l6ZW9mKCpvb2JlY2MpKTsKIAotCWlmICghbXRkIHx8IHNl Y3Rpb24gPCAwKQorCWlmICghbWFzdGVyIHx8IHNlY3Rpb24gPCAwKQogCQlyZXR1cm4gLUVJTlZB TDsKIAotCWlmICghbXRkLT5vb2JsYXlvdXQgfHwgIW10ZC0+b29ibGF5b3V0LT5lY2MpCisJaWYg KCFtYXN0ZXItPm9vYmxheW91dCB8fCAhbWFzdGVyLT5vb2JsYXlvdXQtPmVjYykKIAkJcmV0dXJu IC1FTk9UU1VQUDsKIAotCXJldHVybiBtdGQtPm9vYmxheW91dC0+ZWNjKG10ZCwgc2VjdGlvbiwg b29iZWNjKTsKKwlyZXR1cm4gbWFzdGVyLT5vb2JsYXlvdXQtPmVjYyhtYXN0ZXIsIHNlY3Rpb24s IG9vYmVjYyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtdGRfb29ibGF5b3V0X2VjYyk7CiAKQEAg LTEzMzQsMTUgKzE0MDEsMTcgQEAgRVhQT1JUX1NZTUJPTF9HUEwobXRkX29vYmxheW91dF9lY2Mp OwogaW50IG10ZF9vb2JsYXlvdXRfZnJlZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHNlY3Rp b24sCiAJCSAgICAgICBzdHJ1Y3QgbXRkX29vYl9yZWdpb24gKm9vYmZyZWUpCiB7CisJc3RydWN0 IG10ZF9pbmZvICptYXN0ZXIgPSBtdGRfZ2V0X21hc3RlcihtdGQpOworCiAJbWVtc2V0KG9vYmZy ZWUsIDAsIHNpemVvZigqb29iZnJlZSkpOwogCi0JaWYgKCFtdGQgfHwgc2VjdGlvbiA8IDApCisJ aWYgKCFtYXN0ZXIgfHwgc2VjdGlvbiA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCFt dGQtPm9vYmxheW91dCB8fCAhbXRkLT5vb2JsYXlvdXQtPmZyZWUpCisJaWYgKCFtYXN0ZXItPm9v YmxheW91dCB8fCAhbWFzdGVyLT5vb2JsYXlvdXQtPmZyZWUpCiAJCXJldHVybiAtRU5PVFNVUFA7 CiAKLQlyZXR1cm4gbXRkLT5vb2JsYXlvdXQtPmZyZWUobXRkLCBzZWN0aW9uLCBvb2JmcmVlKTsK KwlyZXR1cm4gbWFzdGVyLT5vb2JsYXlvdXQtPmZyZWUobWFzdGVyLCBzZWN0aW9uLCBvb2JmcmVl KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG10ZF9vb2JsYXlvdXRfZnJlZSk7CiAKQEAgLTE2NTEs NjAgKzE3MjAsNjkgQEAgRVhQT1JUX1NZTUJPTF9HUEwobXRkX29vYmxheW91dF9jb3VudF9lY2Ni eXRlcyk7CiBpbnQgbXRkX2dldF9mYWN0X3Byb3RfaW5mbyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwg c2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sCiAJCQkgICBzdHJ1Y3Qgb3RwX2luZm8gKmJ1ZikK IHsKLQlpZiAoIW10ZC0+X2dldF9mYWN0X3Byb3RfaW5mbykKKwlzdHJ1Y3QgbXRkX2luZm8gKm1h c3RlciA9IG10ZF9nZXRfbWFzdGVyKG10ZCk7CisKKwlpZiAoIW1hc3Rlci0+X2dldF9mYWN0X3By b3RfaW5mbykKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCWlmICghbGVuKQogCQlyZXR1cm4gMDsK LQlyZXR1cm4gbXRkLT5fZ2V0X2ZhY3RfcHJvdF9pbmZvKG10ZCwgbGVuLCByZXRsZW4sIGJ1Zik7 CisJcmV0dXJuIG1hc3Rlci0+X2dldF9mYWN0X3Byb3RfaW5mbyhtYXN0ZXIsIGxlbiwgcmV0bGVu LCBidWYpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobXRkX2dldF9mYWN0X3Byb3RfaW5mbyk7CiAK IGludCBtdGRfcmVhZF9mYWN0X3Byb3RfcmVnKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qg ZnJvbSwgc2l6ZV90IGxlbiwKIAkJCSAgIHNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZikKIHsK KwlzdHJ1Y3QgbXRkX2luZm8gKm1hc3RlciA9IG10ZF9nZXRfbWFzdGVyKG10ZCk7CisKIAkqcmV0 bGVuID0gMDsKLQlpZiAoIW10ZC0+X3JlYWRfZmFjdF9wcm90X3JlZykKKwlpZiAoIW1hc3Rlci0+ X3JlYWRfZmFjdF9wcm90X3JlZykKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCWlmICghbGVuKQog CQlyZXR1cm4gMDsKLQlyZXR1cm4gbXRkLT5fcmVhZF9mYWN0X3Byb3RfcmVnKG10ZCwgZnJvbSwg bGVuLCByZXRsZW4sIGJ1Zik7CisJcmV0dXJuIG1hc3Rlci0+X3JlYWRfZmFjdF9wcm90X3JlZyht YXN0ZXIsIGZyb20sIGxlbiwgcmV0bGVuLCBidWYpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobXRk X3JlYWRfZmFjdF9wcm90X3JlZyk7CiAKIGludCBtdGRfZ2V0X3VzZXJfcHJvdF9pbmZvKHN0cnVj dCBtdGRfaW5mbyAqbXRkLCBzaXplX3QgbGVuLCBzaXplX3QgKnJldGxlbiwKIAkJCSAgIHN0cnVj dCBvdHBfaW5mbyAqYnVmKQogewotCWlmICghbXRkLT5fZ2V0X3VzZXJfcHJvdF9pbmZvKQorCXN0 cnVjdCBtdGRfaW5mbyAqbWFzdGVyID0gbXRkX2dldF9tYXN0ZXIobXRkKTsKKworCWlmICghbWFz dGVyLT5fZ2V0X3VzZXJfcHJvdF9pbmZvKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJaWYgKCFs ZW4pCiAJCXJldHVybiAwOwotCXJldHVybiBtdGQtPl9nZXRfdXNlcl9wcm90X2luZm8obXRkLCBs ZW4sIHJldGxlbiwgYnVmKTsKKwlyZXR1cm4gbWFzdGVyLT5fZ2V0X3VzZXJfcHJvdF9pbmZvKG1h c3RlciwgbGVuLCByZXRsZW4sIGJ1Zik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtdGRfZ2V0X3Vz ZXJfcHJvdF9pbmZvKTsKIAogaW50IG10ZF9yZWFkX3VzZXJfcHJvdF9yZWcoc3RydWN0IG10ZF9p bmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAogCQkJICAgc2l6ZV90ICpyZXRsZW4s IHVfY2hhciAqYnVmKQogeworCXN0cnVjdCBtdGRfaW5mbyAqbWFzdGVyID0gbXRkX2dldF9tYXN0 ZXIobXRkKTsKKwogCSpyZXRsZW4gPSAwOwotCWlmICghbXRkLT5fcmVhZF91c2VyX3Byb3RfcmVn KQorCWlmICghbWFzdGVyLT5fcmVhZF91c2VyX3Byb3RfcmVnKQogCQlyZXR1cm4gLUVPUE5PVFNV UFA7CiAJaWYgKCFsZW4pCiAJCXJldHVybiAwOwotCXJldHVybiBtdGQtPl9yZWFkX3VzZXJfcHJv dF9yZWcobXRkLCBmcm9tLCBsZW4sIHJldGxlbiwgYnVmKTsKKwlyZXR1cm4gbWFzdGVyLT5fcmVh ZF91c2VyX3Byb3RfcmVnKG1hc3RlciwgZnJvbSwgbGVuLCByZXRsZW4sIGJ1Zik7CiB9CiBFWFBP UlRfU1lNQk9MX0dQTChtdGRfcmVhZF91c2VyX3Byb3RfcmVnKTsKIAogaW50IG10ZF93cml0ZV91 c2VyX3Byb3RfcmVnKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4s CiAJCQkgICAgc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKQogeworCXN0cnVjdCBtdGRfaW5m byAqbWFzdGVyID0gbXRkX2dldF9tYXN0ZXIobXRkKTsKIAlpbnQgcmV0OwogCiAJKnJldGxlbiA9 IDA7Ci0JaWYgKCFtdGQtPl93cml0ZV91c2VyX3Byb3RfcmVnKQorCWlmICghbWFzdGVyLT5fd3Jp dGVfdXNlcl9wcm90X3JlZykKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCWlmICghbGVuKQogCQly ZXR1cm4gMDsKLQlyZXQgPSBtdGQtPl93cml0ZV91c2VyX3Byb3RfcmVnKG10ZCwgdG8sIGxlbiwg cmV0bGVuLCBidWYpOworCXJldCA9IG1hc3Rlci0+X3dyaXRlX3VzZXJfcHJvdF9yZWcobWFzdGVy LCB0bywgbGVuLCByZXRsZW4sIGJ1Zik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAt MTcxOCw4MCArMTc5NiwxMDUgQEAgRVhQT1JUX1NZTUJPTF9HUEwobXRkX3dyaXRlX3VzZXJfcHJv dF9yZWcpOwogCiBpbnQgbXRkX2xvY2tfdXNlcl9wcm90X3JlZyhzdHJ1Y3QgbXRkX2luZm8gKm10 ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4pCiB7Ci0JaWYgKCFtdGQtPl9sb2NrX3VzZXJfcHJv dF9yZWcpCisJc3RydWN0IG10ZF9pbmZvICptYXN0ZXIgPSBtdGRfZ2V0X21hc3RlcihtdGQpOwor CisJaWYgKCFtYXN0ZXItPl9sb2NrX3VzZXJfcHJvdF9yZWcpCiAJCXJldHVybiAtRU9QTk9UU1VQ UDsKIAlpZiAoIWxlbikKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIG10ZC0+X2xvY2tfdXNlcl9wcm90 X3JlZyhtdGQsIGZyb20sIGxlbik7CisJcmV0dXJuIG1hc3Rlci0+X2xvY2tfdXNlcl9wcm90X3Jl ZyhtYXN0ZXIsIGZyb20sIGxlbik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtdGRfbG9ja191c2Vy X3Byb3RfcmVnKTsKIAogLyogQ2hpcC1zdXBwb3J0ZWQgZGV2aWNlIGxvY2tpbmcgKi8KIGludCBt dGRfbG9jayhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywgdWludDY0X3QgbGVuKQog ewotCWlmICghbXRkLT5fbG9jaykKKwlzdHJ1Y3QgbXRkX2luZm8gKm1hc3RlciA9IG10ZF9nZXRf bWFzdGVyKG10ZCk7CisKKwlpZiAoIW1hc3Rlci0+X2xvY2spCiAJCXJldHVybiAtRU9QTk9UU1VQ UDsKIAlpZiAob2ZzIDwgMCB8fCBvZnMgPj0gbXRkLT5zaXplIHx8IGxlbiA+IG10ZC0+c2l6ZSAt IG9mcykKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKCFsZW4pCiAJCXJldHVybiAwOwotCXJldHVy biBtdGQtPl9sb2NrKG10ZCwgb2ZzLCBsZW4pOworCXJldHVybiBtYXN0ZXItPl9sb2NrKG1hc3Rl ciwgbXRkX2dldF9tYXN0ZXJfb2ZzKG10ZCwgb2ZzKSwgbGVuKTsKIH0KIEVYUE9SVF9TWU1CT0xf R1BMKG10ZF9sb2NrKTsKIAogaW50IG10ZF91bmxvY2soc3RydWN0IG10ZF9pbmZvICptdGQsIGxv ZmZfdCBvZnMsIHVpbnQ2NF90IGxlbikKIHsKLQlpZiAoIW10ZC0+X3VubG9jaykKKwlzdHJ1Y3Qg bXRkX2luZm8gKm1hc3RlciA9IG10ZF9nZXRfbWFzdGVyKG10ZCk7CisKKwlpZiAoIW1hc3Rlci0+ X3VubG9jaykKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCWlmIChvZnMgPCAwIHx8IG9mcyA+PSBt dGQtPnNpemUgfHwgbGVuID4gbXRkLT5zaXplIC0gb2ZzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlp ZiAoIWxlbikKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIG10ZC0+X3VubG9jayhtdGQsIG9mcywgbGVu KTsKKwlyZXR1cm4gbWFzdGVyLT5fdW5sb2NrKG1hc3RlciwgbXRkX2dldF9tYXN0ZXJfb2ZzKG10 ZCwgb2ZzKSwgbGVuKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG10ZF91bmxvY2spOwogCiBpbnQg bXRkX2lzX2xvY2tlZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywgdWludDY0X3Qg bGVuKQogewotCWlmICghbXRkLT5faXNfbG9ja2VkKQorCXN0cnVjdCBtdGRfaW5mbyAqbWFzdGVy ID0gbXRkX2dldF9tYXN0ZXIobXRkKTsKKworCWlmICghbWFzdGVyLT5faXNfbG9ja2VkKQogCQly ZXR1cm4gLUVPUE5PVFNVUFA7CiAJaWYgKG9mcyA8IDAgfHwgb2ZzID49IG10ZC0+c2l6ZSB8fCBs ZW4gPiBtdGQtPnNpemUgLSBvZnMpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmICghbGVuKQogCQly ZXR1cm4gMDsKLQlyZXR1cm4gbXRkLT5faXNfbG9ja2VkKG10ZCwgb2ZzLCBsZW4pOworCXJldHVy biBtYXN0ZXItPl9pc19sb2NrZWQobWFzdGVyLCBtdGRfZ2V0X21hc3Rlcl9vZnMobXRkLCBvZnMp LCBsZW4pOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobXRkX2lzX2xvY2tlZCk7CiAKIGludCBtdGRf YmxvY2tfaXNyZXNlcnZlZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcykKIHsKKwlz dHJ1Y3QgbXRkX2luZm8gKm1hc3RlciA9IG10ZF9nZXRfbWFzdGVyKG10ZCk7CisKIAlpZiAob2Zz IDwgMCB8fCBvZnMgPj0gbXRkLT5zaXplKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoIW10ZC0+ X2Jsb2NrX2lzcmVzZXJ2ZWQpCisJaWYgKCFtYXN0ZXItPl9ibG9ja19pc3Jlc2VydmVkKQogCQly ZXR1cm4gMDsKLQlyZXR1cm4gbXRkLT5fYmxvY2tfaXNyZXNlcnZlZChtdGQsIG9mcyk7CisJcmV0 dXJuIG1hc3Rlci0+X2Jsb2NrX2lzcmVzZXJ2ZWQobWFzdGVyLCBtdGRfZ2V0X21hc3Rlcl9vZnMo bXRkLCBvZnMpKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG10ZF9ibG9ja19pc3Jlc2VydmVkKTsK IAogaW50IG10ZF9ibG9ja19pc2JhZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcykK IHsKKwlzdHJ1Y3QgbXRkX2luZm8gKm1hc3RlciA9IG10ZF9nZXRfbWFzdGVyKG10ZCk7CisKIAlp ZiAob2ZzIDwgMCB8fCBvZnMgPj0gbXRkLT5zaXplKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAo IW10ZC0+X2Jsb2NrX2lzYmFkKQorCWlmICghbWFzdGVyLT5fYmxvY2tfaXNiYWQpCiAJCXJldHVy biAwOwotCXJldHVybiBtdGQtPl9ibG9ja19pc2JhZChtdGQsIG9mcyk7CisJcmV0dXJuIG1hc3Rl ci0+X2Jsb2NrX2lzYmFkKG1hc3RlciwgbXRkX2dldF9tYXN0ZXJfb2ZzKG10ZCwgb2ZzKSk7CiB9 CiBFWFBPUlRfU1lNQk9MX0dQTChtdGRfYmxvY2tfaXNiYWQpOwogCiBpbnQgbXRkX2Jsb2NrX21h cmtiYWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMpCiB7Ci0JaWYgKCFtdGQtPl9i bG9ja19tYXJrYmFkKQorCXN0cnVjdCBtdGRfaW5mbyAqbWFzdGVyID0gbXRkX2dldF9tYXN0ZXIo bXRkKTsKKwlpbnQgcmV0OworCisJaWYgKCFtYXN0ZXItPl9ibG9ja19tYXJrYmFkKQogCQlyZXR1 cm4gLUVPUE5PVFNVUFA7CiAJaWYgKG9mcyA8IDAgfHwgb2ZzID49IG10ZC0+c2l6ZSkKIAkJcmV0 dXJuIC1FSU5WQUw7CiAJaWYgKCEobXRkLT5mbGFncyAmIE1URF9XUklURUFCTEUpKQogCQlyZXR1 cm4gLUVST0ZTOwotCXJldHVybiBtdGQtPl9ibG9ja19tYXJrYmFkKG10ZCwgb2ZzKTsKKworCXJl dCA9IG1hc3Rlci0+X2Jsb2NrX21hcmtiYWQobWFzdGVyLCBtdGRfZ2V0X21hc3Rlcl9vZnMobXRk LCBvZnMpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJd2hpbGUgKG10ZC0+cGFyZW50 KSB7CisJCW10ZC0+ZWNjX3N0YXRzLmJhZGJsb2NrcysrOworCQltdGQgPSBtdGQtPnBhcmVudDsK Kwl9CisKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG10ZF9ibG9ja19tYXJrYmFk KTsKIApAQCAtMTg0MSwxMiArMTk0NCwxNyBAQCBzdGF0aWMgaW50IGRlZmF1bHRfbXRkX3dyaXRl dihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3Qgc3RydWN0IGt2ZWMgKnZlY3MsCiBpbnQgbXRk X3dyaXRldihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3Qgc3RydWN0IGt2ZWMgKnZlY3MsCiAJ ICAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIGxvZmZfdCB0bywgc2l6ZV90ICpyZXRsZW4pCiB7 CisJc3RydWN0IG10ZF9pbmZvICptYXN0ZXIgPSBtdGRfZ2V0X21hc3RlcihtdGQpOworCiAJKnJl dGxlbiA9IDA7CiAJaWYgKCEobXRkLT5mbGFncyAmIE1URF9XUklURUFCTEUpKQogCQlyZXR1cm4g LUVST0ZTOwotCWlmICghbXRkLT5fd3JpdGV2KQorCisJaWYgKCFtYXN0ZXItPl93cml0ZXYpCiAJ CXJldHVybiBkZWZhdWx0X210ZF93cml0ZXYobXRkLCB2ZWNzLCBjb3VudCwgdG8sIHJldGxlbik7 Ci0JcmV0dXJuIG10ZC0+X3dyaXRldihtdGQsIHZlY3MsIGNvdW50LCB0bywgcmV0bGVuKTsKKwor CXJldHVybiBtYXN0ZXItPl93cml0ZXYobWFzdGVyLCB2ZWNzLCBjb3VudCwKKwkJCSAgICAgICBt dGRfZ2V0X21hc3Rlcl9vZnMobXRkLCB0byksIHJldGxlbik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQ TChtdGRfd3JpdGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbXRkcGFydC5jIGIvZHJp dmVycy9tdGQvbXRkcGFydC5jCmluZGV4IDczMjhjMDY2YzViYS4uOTNlZjhmZGYxNjM0IDEwMDY0 NAotLS0gYS9kcml2ZXJzL210ZC9tdGRwYXJ0LmMKKysrIGIvZHJpdmVycy9tdGQvbXRkcGFydC5j CkBAIC0yMCwzMzkgKzIwLDUyIEBACiAKICNpbmNsdWRlICJtdGRjb3JlLmgiCiAKLS8qIE91ciBw YXJ0aXRpb24gbGlua2VkIGxpc3QgKi8KLXN0YXRpYyBMSVNUX0hFQUQobXRkX3BhcnRpdGlvbnMp Owotc3RhdGljIERFRklORV9NVVRFWChtdGRfcGFydGl0aW9uc19tdXRleCk7Ci0KLS8qKgotICog c3RydWN0IG10ZF9wYXJ0IC0gb3VyIHBhcnRpdGlvbiBub2RlIHN0cnVjdHVyZQotICoKLSAqIEBt dGQ6IHN0cnVjdCBob2xkaW5nIHBhcnRpdGlvbiBkZXRhaWxzCi0gKiBAcGFyZW50OiBwYXJlbnQg bXRkIC0gZmxhc2ggZGV2aWNlIG9yIGFub3RoZXIgcGFydGl0aW9uCi0gKiBAb2Zmc2V0OiBwYXJ0 aXRpb24gb2Zmc2V0IHJlbGF0aXZlIHRvIHRoZSAqZmxhc2ggZGV2aWNlKgotICovCi1zdHJ1Y3Qg bXRkX3BhcnQgewotCXN0cnVjdCBtdGRfaW5mbyBtdGQ7Ci0Jc3RydWN0IG10ZF9pbmZvICpwYXJl bnQ7Ci0JdWludDY0X3Qgb2Zmc2V0OwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLX07Ci0KLS8q Ci0gKiBHaXZlbiBhIHBvaW50ZXIgdG8gdGhlIE1URCBvYmplY3QgaW4gdGhlIG10ZF9wYXJ0IHN0 cnVjdHVyZSwgd2UgY2FuIHJldHJpZXZlCi0gKiB0aGUgcG9pbnRlciB0byB0aGF0IHN0cnVjdHVy ZS4KLSAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRkX3BhcnQgKm10ZF90b19wYXJ0KGNvbnN0 IHN0cnVjdCBtdGRfaW5mbyAqbXRkKQotewotCXJldHVybiBjb250YWluZXJfb2YobXRkLCBzdHJ1 Y3QgbXRkX3BhcnQsIG10ZCk7Ci19Ci0KLXN0YXRpYyB1NjQgcGFydF9hYnNvbHV0ZV9vZmZzZXQo c3RydWN0IG10ZF9pbmZvICptdGQpCi17Ci0Jc3RydWN0IG10ZF9wYXJ0ICpwYXJ0ID0gbXRkX3Rv X3BhcnQobXRkKTsKLQotCWlmICghbXRkX2lzX3BhcnRpdGlvbihtdGQpKQotCQlyZXR1cm4gMDsK LQotCXJldHVybiBwYXJ0X2Fic29sdXRlX29mZnNldChwYXJ0LT5wYXJlbnQpICsgcGFydC0+b2Zm c2V0OwotfQotCiAvKgogICogTVREIG1ldGhvZHMgd2hpY2ggc2ltcGx5IHRyYW5zbGF0ZSB0aGUg ZWZmZWN0aXZlIGFkZHJlc3MgYW5kIHBhc3MgdGhyb3VnaAogICogdG8gdGhlIF9yZWFsXyBkZXZp Y2UuCiAgKi8KIAotc3RhdGljIGludCBwYXJ0X3JlYWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxv ZmZfdCBmcm9tLCBzaXplX3QgbGVuLAotCQlzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpCitz dGF0aWMgaW5saW5lIHZvaWQgZnJlZV9wYXJ0aXRpb24oc3RydWN0IG10ZF9pbmZvICptdGQpCiB7 Ci0Jc3RydWN0IG10ZF9wYXJ0ICpwYXJ0ID0gbXRkX3RvX3BhcnQobXRkKTsKLQlzdHJ1Y3QgbXRk X2VjY19zdGF0cyBzdGF0czsKLQlpbnQgcmVzOwotCi0Jc3RhdHMgPSBwYXJ0LT5wYXJlbnQtPmVj Y19zdGF0czsKLQlyZXMgPSBwYXJ0LT5wYXJlbnQtPl9yZWFkKHBhcnQtPnBhcmVudCwgZnJvbSAr IHBhcnQtPm9mZnNldCwgbGVuLAotCQkJCSAgcmV0bGVuLCBidWYpOwotCWlmICh1bmxpa2VseSht dGRfaXNfZWNjZXJyKHJlcykpKQotCQltdGQtPmVjY19zdGF0cy5mYWlsZWQgKz0KLQkJCXBhcnQt PnBhcmVudC0+ZWNjX3N0YXRzLmZhaWxlZCAtIHN0YXRzLmZhaWxlZDsKLQllbHNlCi0JCW10ZC0+ ZWNjX3N0YXRzLmNvcnJlY3RlZCArPQotCQkJcGFydC0+cGFyZW50LT5lY2Nfc3RhdHMuY29ycmVj dGVkIC0gc3RhdHMuY29ycmVjdGVkOwotCXJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBpbnQgcGFy dF9wb2ludChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sCi0J CXNpemVfdCAqcmV0bGVuLCB2b2lkICoqdmlydCwgcmVzb3VyY2Vfc2l6ZV90ICpwaHlzKQotewot CXN0cnVjdCBtdGRfcGFydCAqcGFydCA9IG10ZF90b19wYXJ0KG10ZCk7Ci0KLQlyZXR1cm4gcGFy dC0+cGFyZW50LT5fcG9pbnQocGFydC0+cGFyZW50LCBmcm9tICsgcGFydC0+b2Zmc2V0LCBsZW4s Ci0JCQkJICAgIHJldGxlbiwgdmlydCwgcGh5cyk7Ci19Ci0KLXN0YXRpYyBpbnQgcGFydF91bnBv aW50KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbikKLXsKLQlz dHJ1Y3QgbXRkX3BhcnQgKnBhcnQgPSBtdGRfdG9fcGFydChtdGQpOwotCi0JcmV0dXJuIHBhcnQt PnBhcmVudC0+X3VucG9pbnQocGFydC0+cGFyZW50LCBmcm9tICsgcGFydC0+b2Zmc2V0LCBsZW4p OwotfQotCi1zdGF0aWMgaW50IHBhcnRfcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxv ZmZfdCBmcm9tLAotCQlzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcykKLXsKLQlzdHJ1Y3QgbXRkX3Bh cnQgKnBhcnQgPSBtdGRfdG9fcGFydChtdGQpOwotCXN0cnVjdCBtdGRfZWNjX3N0YXRzIHN0YXRz OwotCWludCByZXM7Ci0KLQlzdGF0cyA9IHBhcnQtPnBhcmVudC0+ZWNjX3N0YXRzOwotCXJlcyA9 IHBhcnQtPnBhcmVudC0+X3JlYWRfb29iKHBhcnQtPnBhcmVudCwgZnJvbSArIHBhcnQtPm9mZnNl dCwgb3BzKTsKLQlpZiAodW5saWtlbHkobXRkX2lzX2VjY2VycihyZXMpKSkKLQkJbXRkLT5lY2Nf c3RhdHMuZmFpbGVkICs9Ci0JCQlwYXJ0LT5wYXJlbnQtPmVjY19zdGF0cy5mYWlsZWQgLSBzdGF0 cy5mYWlsZWQ7Ci0JZWxzZQotCQltdGQtPmVjY19zdGF0cy5jb3JyZWN0ZWQgKz0KLQkJCXBhcnQt PnBhcmVudC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCAtIHN0YXRzLmNvcnJlY3RlZDsKLQlyZXR1cm4g cmVzOwotfQotCi1zdGF0aWMgaW50IHBhcnRfcmVhZF91c2VyX3Byb3RfcmVnKHN0cnVjdCBtdGRf aW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwKLQkJc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIHVf Y2hhciAqYnVmKQotewotCXN0cnVjdCBtdGRfcGFydCAqcGFydCA9IG10ZF90b19wYXJ0KG10ZCk7 Ci0JcmV0dXJuIHBhcnQtPnBhcmVudC0+X3JlYWRfdXNlcl9wcm90X3JlZyhwYXJ0LT5wYXJlbnQs IGZyb20sIGxlbiwKLQkJCQkJCSByZXRsZW4sIGJ1Zik7Ci19Ci0KLXN0YXRpYyBpbnQgcGFydF9n ZXRfdXNlcl9wcm90X2luZm8oc3RydWN0IG10ZF9pbmZvICptdGQsIHNpemVfdCBsZW4sCi0JCQkJ ICAgc2l6ZV90ICpyZXRsZW4sIHN0cnVjdCBvdHBfaW5mbyAqYnVmKQotewotCXN0cnVjdCBtdGRf cGFydCAqcGFydCA9IG10ZF90b19wYXJ0KG10ZCk7Ci0JcmV0dXJuIHBhcnQtPnBhcmVudC0+X2dl dF91c2VyX3Byb3RfaW5mbyhwYXJ0LT5wYXJlbnQsIGxlbiwgcmV0bGVuLAotCQkJCQkJIGJ1Zik7 Ci19Ci0KLXN0YXRpYyBpbnQgcGFydF9yZWFkX2ZhY3RfcHJvdF9yZWcoc3RydWN0IG10ZF9pbmZv ICptdGQsIGxvZmZfdCBmcm9tLAotCQlzaXplX3QgbGVuLCBzaXplX3QgKnJldGxlbiwgdV9jaGFy ICpidWYpCi17Ci0Jc3RydWN0IG10ZF9wYXJ0ICpwYXJ0ID0gbXRkX3RvX3BhcnQobXRkKTsKLQly ZXR1cm4gcGFydC0+cGFyZW50LT5fcmVhZF9mYWN0X3Byb3RfcmVnKHBhcnQtPnBhcmVudCwgZnJv bSwgbGVuLAotCQkJCQkJIHJldGxlbiwgYnVmKTsKLX0KLQotc3RhdGljIGludCBwYXJ0X2dldF9m YWN0X3Byb3RfaW5mbyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc2l6ZV90IGxlbiwKLQkJCQkgICBz aXplX3QgKnJldGxlbiwgc3RydWN0IG90cF9pbmZvICpidWYpCi17Ci0Jc3RydWN0IG10ZF9wYXJ0 ICpwYXJ0ID0gbXRkX3RvX3BhcnQobXRkKTsKLQlyZXR1cm4gcGFydC0+cGFyZW50LT5fZ2V0X2Zh Y3RfcHJvdF9pbmZvKHBhcnQtPnBhcmVudCwgbGVuLCByZXRsZW4sCi0JCQkJCQkgYnVmKTsKLX0K LQotc3RhdGljIGludCBwYXJ0X3dyaXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8s IHNpemVfdCBsZW4sCi0JCXNpemVfdCAqcmV0bGVuLCBjb25zdCB1X2NoYXIgKmJ1ZikKLXsKLQlz dHJ1Y3QgbXRkX3BhcnQgKnBhcnQgPSBtdGRfdG9fcGFydChtdGQpOwotCXJldHVybiBwYXJ0LT5w YXJlbnQtPl93cml0ZShwYXJ0LT5wYXJlbnQsIHRvICsgcGFydC0+b2Zmc2V0LCBsZW4sCi0JCQkJ ICAgIHJldGxlbiwgYnVmKTsKLX0KLQotc3RhdGljIGludCBwYXJ0X3BhbmljX3dyaXRlKHN0cnVj dCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sCi0JCXNpemVfdCAqcmV0bGVu LCBjb25zdCB1X2NoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgbXRkX3BhcnQgKnBhcnQgPSBtdGRfdG9f cGFydChtdGQpOwotCXJldHVybiBwYXJ0LT5wYXJlbnQtPl9wYW5pY193cml0ZShwYXJ0LT5wYXJl bnQsIHRvICsgcGFydC0+b2Zmc2V0LCBsZW4sCi0JCQkJCSAgcmV0bGVuLCBidWYpOwotfQotCi1z dGF0aWMgaW50IHBhcnRfd3JpdGVfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8s Ci0JCXN0cnVjdCBtdGRfb29iX29wcyAqb3BzKQotewotCXN0cnVjdCBtdGRfcGFydCAqcGFydCA9 IG10ZF90b19wYXJ0KG10ZCk7Ci0KLQlyZXR1cm4gcGFydC0+cGFyZW50LT5fd3JpdGVfb29iKHBh cnQtPnBhcmVudCwgdG8gKyBwYXJ0LT5vZmZzZXQsIG9wcyk7Ci19Ci0KLXN0YXRpYyBpbnQgcGFy dF93cml0ZV91c2VyX3Byb3RfcmVnKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwK LQkJc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKQotewotCXN0cnVjdCBt dGRfcGFydCAqcGFydCA9IG10ZF90b19wYXJ0KG10ZCk7Ci0JcmV0dXJuIHBhcnQtPnBhcmVudC0+ X3dyaXRlX3VzZXJfcHJvdF9yZWcocGFydC0+cGFyZW50LCBmcm9tLCBsZW4sCi0JCQkJCQkgIHJl dGxlbiwgYnVmKTsKLX0KLQotc3RhdGljIGludCBwYXJ0X2xvY2tfdXNlcl9wcm90X3JlZyhzdHJ1 Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sCi0JCXNpemVfdCBsZW4pCi17Ci0Jc3RydWN0 IG10ZF9wYXJ0ICpwYXJ0ID0gbXRkX3RvX3BhcnQobXRkKTsKLQlyZXR1cm4gcGFydC0+cGFyZW50 LT5fbG9ja191c2VyX3Byb3RfcmVnKHBhcnQtPnBhcmVudCwgZnJvbSwgbGVuKTsKLX0KLQotc3Rh dGljIGludCBwYXJ0X3dyaXRldihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3Qgc3RydWN0IGt2 ZWMgKnZlY3MsCi0JCXVuc2lnbmVkIGxvbmcgY291bnQsIGxvZmZfdCB0bywgc2l6ZV90ICpyZXRs ZW4pCi17Ci0Jc3RydWN0IG10ZF9wYXJ0ICpwYXJ0ID0gbXRkX3RvX3BhcnQobXRkKTsKLQlyZXR1 cm4gcGFydC0+cGFyZW50LT5fd3JpdGV2KHBhcnQtPnBhcmVudCwgdmVjcywgY291bnQsCi0JCQkJ ICAgICB0byArIHBhcnQtPm9mZnNldCwgcmV0bGVuKTsKLX0KLQotc3RhdGljIGludCBwYXJ0X2Vy YXNlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5zdHIpCi17Ci0J c3RydWN0IG10ZF9wYXJ0ICpwYXJ0ID0gbXRkX3RvX3BhcnQobXRkKTsKLQlpbnQgcmV0OwotCi0J aW5zdHItPmFkZHIgKz0gcGFydC0+b2Zmc2V0OwotCXJldCA9IHBhcnQtPnBhcmVudC0+X2VyYXNl KHBhcnQtPnBhcmVudCwgaW5zdHIpOwotCWlmIChpbnN0ci0+ZmFpbF9hZGRyICE9IE1URF9GQUlM X0FERFJfVU5LTk9XTikKLQkJaW5zdHItPmZhaWxfYWRkciAtPSBwYXJ0LT5vZmZzZXQ7Ci0JaW5z dHItPmFkZHIgLT0gcGFydC0+b2Zmc2V0OwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlu dCBwYXJ0X2xvY2soc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIHVpbnQ2NF90IGxl bikKLXsKLQlzdHJ1Y3QgbXRkX3BhcnQgKnBhcnQgPSBtdGRfdG9fcGFydChtdGQpOwotCXJldHVy biBwYXJ0LT5wYXJlbnQtPl9sb2NrKHBhcnQtPnBhcmVudCwgb2ZzICsgcGFydC0+b2Zmc2V0LCBs ZW4pOwotfQotCi1zdGF0aWMgaW50IHBhcnRfdW5sb2NrKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBs b2ZmX3Qgb2ZzLCB1aW50NjRfdCBsZW4pCi17Ci0Jc3RydWN0IG10ZF9wYXJ0ICpwYXJ0ID0gbXRk X3RvX3BhcnQobXRkKTsKLQlyZXR1cm4gcGFydC0+cGFyZW50LT5fdW5sb2NrKHBhcnQtPnBhcmVu dCwgb2ZzICsgcGFydC0+b2Zmc2V0LCBsZW4pOwotfQotCi1zdGF0aWMgaW50IHBhcnRfaXNfbG9j a2VkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCB1aW50NjRfdCBsZW4pCi17Ci0J c3RydWN0IG10ZF9wYXJ0ICpwYXJ0ID0gbXRkX3RvX3BhcnQobXRkKTsKLQlyZXR1cm4gcGFydC0+ cGFyZW50LT5faXNfbG9ja2VkKHBhcnQtPnBhcmVudCwgb2ZzICsgcGFydC0+b2Zmc2V0LCBsZW4p OwotfQotCi1zdGF0aWMgdm9pZCBwYXJ0X3N5bmMoc3RydWN0IG10ZF9pbmZvICptdGQpCi17Ci0J c3RydWN0IG10ZF9wYXJ0ICpwYXJ0ID0gbXRkX3RvX3BhcnQobXRkKTsKLQlwYXJ0LT5wYXJlbnQt Pl9zeW5jKHBhcnQtPnBhcmVudCk7Ci19Ci0KLXN0YXRpYyBpbnQgcGFydF9zdXNwZW5kKHN0cnVj dCBtdGRfaW5mbyAqbXRkKQotewotCXN0cnVjdCBtdGRfcGFydCAqcGFydCA9IG10ZF90b19wYXJ0 KG10ZCk7Ci0JcmV0dXJuIHBhcnQtPnBhcmVudC0+X3N1c3BlbmQocGFydC0+cGFyZW50KTsKLX0K LQotc3RhdGljIHZvaWQgcGFydF9yZXN1bWUoc3RydWN0IG10ZF9pbmZvICptdGQpCi17Ci0Jc3Ry dWN0IG10ZF9wYXJ0ICpwYXJ0ID0gbXRkX3RvX3BhcnQobXRkKTsKLQlwYXJ0LT5wYXJlbnQtPl9y ZXN1bWUocGFydC0+cGFyZW50KTsKLX0KLQotc3RhdGljIGludCBwYXJ0X2Jsb2NrX2lzcmVzZXJ2 ZWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMpCi17Ci0Jc3RydWN0IG10ZF9wYXJ0 ICpwYXJ0ID0gbXRkX3RvX3BhcnQobXRkKTsKLQlvZnMgKz0gcGFydC0+b2Zmc2V0OwotCXJldHVy biBwYXJ0LT5wYXJlbnQtPl9ibG9ja19pc3Jlc2VydmVkKHBhcnQtPnBhcmVudCwgb2ZzKTsKLX0K LQotc3RhdGljIGludCBwYXJ0X2Jsb2NrX2lzYmFkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2Zm X3Qgb2ZzKQotewotCXN0cnVjdCBtdGRfcGFydCAqcGFydCA9IG10ZF90b19wYXJ0KG10ZCk7Ci0J b2ZzICs9IHBhcnQtPm9mZnNldDsKLQlyZXR1cm4gcGFydC0+cGFyZW50LT5fYmxvY2tfaXNiYWQo cGFydC0+cGFyZW50LCBvZnMpOwotfQotCi1zdGF0aWMgaW50IHBhcnRfYmxvY2tfbWFya2JhZChz dHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcykKLXsKLQlzdHJ1Y3QgbXRkX3BhcnQgKnBh cnQgPSBtdGRfdG9fcGFydChtdGQpOwotCWludCByZXM7Ci0KLQlvZnMgKz0gcGFydC0+b2Zmc2V0 OwotCXJlcyA9IHBhcnQtPnBhcmVudC0+X2Jsb2NrX21hcmtiYWQocGFydC0+cGFyZW50LCBvZnMp OwotCWlmICghcmVzKQotCQltdGQtPmVjY19zdGF0cy5iYWRibG9ja3MrKzsKLQlyZXR1cm4gcmVz OwotfQotCi1zdGF0aWMgaW50IHBhcnRfZ2V0X2RldmljZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkK LXsKLQlzdHJ1Y3QgbXRkX3BhcnQgKnBhcnQgPSBtdGRfdG9fcGFydChtdGQpOwotCXJldHVybiBw YXJ0LT5wYXJlbnQtPl9nZXRfZGV2aWNlKHBhcnQtPnBhcmVudCk7Ci19Ci0KLXN0YXRpYyB2b2lk IHBhcnRfcHV0X2RldmljZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKLXsKLQlzdHJ1Y3QgbXRkX3Bh cnQgKnBhcnQgPSBtdGRfdG9fcGFydChtdGQpOwotCXBhcnQtPnBhcmVudC0+X3B1dF9kZXZpY2Uo cGFydC0+cGFyZW50KTsKLX0KLQotc3RhdGljIGludCBwYXJ0X29vYmxheW91dF9lY2Moc3RydWN0 IG10ZF9pbmZvICptdGQsIGludCBzZWN0aW9uLAotCQkJICAgICAgc3RydWN0IG10ZF9vb2JfcmVn aW9uICpvb2JyZWdpb24pCi17Ci0Jc3RydWN0IG10ZF9wYXJ0ICpwYXJ0ID0gbXRkX3RvX3BhcnQo bXRkKTsKLQotCXJldHVybiBtdGRfb29ibGF5b3V0X2VjYyhwYXJ0LT5wYXJlbnQsIHNlY3Rpb24s IG9vYnJlZ2lvbik7Ci19Ci0KLXN0YXRpYyBpbnQgcGFydF9vb2JsYXlvdXRfZnJlZShzdHJ1Y3Qg bXRkX2luZm8gKm10ZCwgaW50IHNlY3Rpb24sCi0JCQkgICAgICAgc3RydWN0IG10ZF9vb2JfcmVn aW9uICpvb2JyZWdpb24pCi17Ci0Jc3RydWN0IG10ZF9wYXJ0ICpwYXJ0ID0gbXRkX3RvX3BhcnQo bXRkKTsKLQotCXJldHVybiBtdGRfb29ibGF5b3V0X2ZyZWUocGFydC0+cGFyZW50LCBzZWN0aW9u LCBvb2JyZWdpb24pOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IG10ZF9vb2JsYXlvdXRfb3Bz IHBhcnRfb29ibGF5b3V0X29wcyA9IHsKLQkuZWNjID0gcGFydF9vb2JsYXlvdXRfZWNjLAotCS5m cmVlID0gcGFydF9vb2JsYXlvdXRfZnJlZSwKLX07Ci0KLXN0YXRpYyBpbnQgcGFydF9tYXhfYmFk X2Jsb2NrcyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywgc2l6ZV90IGxlbikKLXsK LQlzdHJ1Y3QgbXRkX3BhcnQgKnBhcnQgPSBtdGRfdG9fcGFydChtdGQpOwotCi0JcmV0dXJuIHBh cnQtPnBhcmVudC0+X21heF9iYWRfYmxvY2tzKHBhcnQtPnBhcmVudCwKLQkJCQkJICAgICBvZnMg KyBwYXJ0LT5vZmZzZXQsIGxlbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3BhcnRp dGlvbihzdHJ1Y3QgbXRkX3BhcnQgKnApCi17Ci0Ja2ZyZWUocC0+bXRkLm5hbWUpOwotCWtmcmVl KHApOworCWtmcmVlKG10ZC0+bmFtZSk7CisJa2ZyZWUobXRkKTsKIH0KIAotc3RhdGljIHN0cnVj dCBtdGRfcGFydCAqYWxsb2NhdGVfcGFydGl0aW9uKHN0cnVjdCBtdGRfaW5mbyAqcGFyZW50LAot CQkJY29uc3Qgc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnQsIGludCBwYXJ0bm8sCi0JCQl1aW50 NjRfdCBjdXJfb2Zmc2V0KQorc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqYWxsb2NhdGVfcGFydGl0 aW9uKHN0cnVjdCBtdGRfaW5mbyAqcGFyZW50LAorCQkJCQkgICBjb25zdCBzdHJ1Y3QgbXRkX3Bh cnRpdGlvbiAqcGFydCwKKwkJCQkJICAgaW50IHBhcnRubywgdWludDY0X3QgY3VyX29mZnNldCkK IHsKIAlpbnQgd3JfYWxpZ25tZW50ID0gKHBhcmVudC0+ZmxhZ3MgJiBNVERfTk9fRVJBU0UpID8g cGFyZW50LT53cml0ZXNpemUgOgogCQkJCQkJCSAgICBwYXJlbnQtPmVyYXNlc2l6ZTsKLQlzdHJ1 Y3QgbXRkX3BhcnQgKnNsYXZlOworCXN0cnVjdCBtdGRfaW5mbyAqY2hpbGQsICptYXN0ZXIgPSBt dGRfZ2V0X21hc3RlcihwYXJlbnQpOwogCXUzMiByZW1haW5kZXI7CiAJY2hhciAqbmFtZTsKIAl1 NjQgdG1wOwogCiAJLyogYWxsb2NhdGUgdGhlIHBhcnRpdGlvbiBzdHJ1Y3R1cmUgKi8KLQlzbGF2 ZSA9IGt6YWxsb2Moc2l6ZW9mKCpzbGF2ZSksIEdGUF9LRVJORUwpOworCWNoaWxkID0ga3phbGxv YyhzaXplb2YoKmNoaWxkKSwgR0ZQX0tFUk5FTCk7CiAJbmFtZSA9IGtzdHJkdXAocGFydC0+bmFt ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFuYW1lIHx8ICFzbGF2ZSkgeworCWlmICghbmFtZSB8fCAh Y2hpbGQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIm1lbW9yeSBhbGxvY2F0aW9uIGVycm9yIHdoaWxl IGNyZWF0aW5nIHBhcnRpdGlvbnMgZm9yIFwiJXNcIlxuIiwKIAkJICAgICAgIHBhcmVudC0+bmFt ZSk7CiAJCWtmcmVlKG5hbWUpOwotCQlrZnJlZShzbGF2ZSk7CisJCWtmcmVlKGNoaWxkKTsKIAkJ cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJfQogCiAJLyogc2V0IHVwIHRoZSBNVEQgb2JqZWN0 IGZvciB0aGlzIHBhcnRpdGlvbiAqLwotCXNsYXZlLT5tdGQudHlwZSA9IHBhcmVudC0+dHlwZTsK LQlzbGF2ZS0+bXRkLmZsYWdzID0gcGFyZW50LT5vcmlnX2ZsYWdzICYgfnBhcnQtPm1hc2tfZmxh Z3M7Ci0Jc2xhdmUtPm10ZC5vcmlnX2ZsYWdzID0gc2xhdmUtPm10ZC5mbGFnczsKLQlzbGF2ZS0+ bXRkLnNpemUgPSBwYXJ0LT5zaXplOwotCXNsYXZlLT5tdGQud3JpdGVzaXplID0gcGFyZW50LT53 cml0ZXNpemU7Ci0Jc2xhdmUtPm10ZC53cml0ZWJ1ZnNpemUgPSBwYXJlbnQtPndyaXRlYnVmc2l6 ZTsKLQlzbGF2ZS0+bXRkLm9vYnNpemUgPSBwYXJlbnQtPm9vYnNpemU7Ci0Jc2xhdmUtPm10ZC5v b2JhdmFpbCA9IHBhcmVudC0+b29iYXZhaWw7Ci0Jc2xhdmUtPm10ZC5zdWJwYWdlX3NmdCA9IHBh cmVudC0+c3VicGFnZV9zZnQ7Ci0Jc2xhdmUtPm10ZC5wYWlyaW5nID0gcGFyZW50LT5wYWlyaW5n OworCWNoaWxkLT50eXBlID0gcGFyZW50LT50eXBlOworCWNoaWxkLT5wYXJ0LmZsYWdzID0gcGFy ZW50LT5mbGFncyAmIH5wYXJ0LT5tYXNrX2ZsYWdzOworCWNoaWxkLT5mbGFncyA9IGNoaWxkLT5w YXJ0LmZsYWdzOworCWNoaWxkLT5zaXplID0gcGFydC0+c2l6ZTsKKwljaGlsZC0+d3JpdGVzaXpl ID0gcGFyZW50LT53cml0ZXNpemU7CisJY2hpbGQtPndyaXRlYnVmc2l6ZSA9IHBhcmVudC0+d3Jp dGVidWZzaXplOworCWNoaWxkLT5vb2JzaXplID0gcGFyZW50LT5vb2JzaXplOworCWNoaWxkLT5v b2JhdmFpbCA9IHBhcmVudC0+b29iYXZhaWw7CisJY2hpbGQtPnN1YnBhZ2Vfc2Z0ID0gcGFyZW50 LT5zdWJwYWdlX3NmdDsKIAotCXNsYXZlLT5tdGQubmFtZSA9IG5hbWU7Ci0Jc2xhdmUtPm10ZC5v d25lciA9IHBhcmVudC0+b3duZXI7CisJY2hpbGQtPm5hbWUgPSBuYW1lOworCWNoaWxkLT5vd25l ciA9IHBhcmVudC0+b3duZXI7CiAKIAkvKiBOT1RFOiBIaXN0b3JpY2FsbHksIHdlIGRpZG4ndCBh cnJhbmdlIE1URHMgYXMgYSB0cmVlIG91dCBvZgogCSAqIGNvbmNlcm4gZm9yIHNob3dpbmcgdGhl IHNhbWUgZGF0YSBpbiBtdWx0aXBsZSBwYXJ0aXRpb25zLgpAQCAtMzYwLDEzNCArNzMsNzYgQEAg c3RhdGljIHN0cnVjdCBtdGRfcGFydCAqYWxsb2NhdGVfcGFydGl0aW9uKHN0cnVjdCBtdGRfaW5m byAqcGFyZW50LAogCSAqIHNvIHRoZSBNVERfUEFSVElUSU9ORURfTUFTVEVSIG9wdGlvbiBhbGxv d3MgdGhhdC4gVGhlIG1hc3RlcgogCSAqIHdpbGwgaGF2ZSBkZXZpY2Ugbm9kZXMgZXRjIG9ubHkg aWYgdGhpcyBpcyBzZXQsIHNvIG1ha2UgdGhlCiAJICogcGFyZW50IGNvbmRpdGlvbmFsIG9uIHRo YXQgb3B0aW9uLiBOb3RlLCB0aGlzIGlzIGEgd2F5IHRvCi0JICogZGlzdGluZ3Vpc2ggYmV0d2Vl biB0aGUgbWFzdGVyIGFuZCB0aGUgcGFydGl0aW9uIGluIHN5c2ZzLgorCSAqIGRpc3Rpbmd1aXNo IGJldHdlZW4gdGhlIHBhcmVudCBhbmQgaXRzIHBhcnRpdGlvbnMgaW4gc3lzZnMuCiAJICovCi0J c2xhdmUtPm10ZC5kZXYucGFyZW50ID0gSVNfRU5BQkxFRChDT05GSUdfTVREX1BBUlRJVElPTkVE X01BU1RFUikgfHwgbXRkX2lzX3BhcnRpdGlvbihwYXJlbnQpID8KLQkJCQkmcGFyZW50LT5kZXYg OgotCQkJCXBhcmVudC0+ZGV2LnBhcmVudDsKLQlzbGF2ZS0+bXRkLmRldi5vZl9ub2RlID0gcGFy dC0+b2Zfbm9kZTsKLQotCWlmIChwYXJlbnQtPl9yZWFkKQotCQlzbGF2ZS0+bXRkLl9yZWFkID0g cGFydF9yZWFkOwotCWlmIChwYXJlbnQtPl93cml0ZSkKLQkJc2xhdmUtPm10ZC5fd3JpdGUgPSBw YXJ0X3dyaXRlOwotCi0JaWYgKHBhcmVudC0+X3BhbmljX3dyaXRlKQotCQlzbGF2ZS0+bXRkLl9w YW5pY193cml0ZSA9IHBhcnRfcGFuaWNfd3JpdGU7Ci0KLQlpZiAocGFyZW50LT5fcG9pbnQgJiYg cGFyZW50LT5fdW5wb2ludCkgewotCQlzbGF2ZS0+bXRkLl9wb2ludCA9IHBhcnRfcG9pbnQ7Ci0J CXNsYXZlLT5tdGQuX3VucG9pbnQgPSBwYXJ0X3VucG9pbnQ7Ci0JfQotCi0JaWYgKHBhcmVudC0+ X3JlYWRfb29iKQotCQlzbGF2ZS0+bXRkLl9yZWFkX29vYiA9IHBhcnRfcmVhZF9vb2I7Ci0JaWYg KHBhcmVudC0+X3dyaXRlX29vYikKLQkJc2xhdmUtPm10ZC5fd3JpdGVfb29iID0gcGFydF93cml0 ZV9vb2I7Ci0JaWYgKHBhcmVudC0+X3JlYWRfdXNlcl9wcm90X3JlZykKLQkJc2xhdmUtPm10ZC5f cmVhZF91c2VyX3Byb3RfcmVnID0gcGFydF9yZWFkX3VzZXJfcHJvdF9yZWc7Ci0JaWYgKHBhcmVu dC0+X3JlYWRfZmFjdF9wcm90X3JlZykKLQkJc2xhdmUtPm10ZC5fcmVhZF9mYWN0X3Byb3RfcmVn ID0gcGFydF9yZWFkX2ZhY3RfcHJvdF9yZWc7Ci0JaWYgKHBhcmVudC0+X3dyaXRlX3VzZXJfcHJv dF9yZWcpCi0JCXNsYXZlLT5tdGQuX3dyaXRlX3VzZXJfcHJvdF9yZWcgPSBwYXJ0X3dyaXRlX3Vz ZXJfcHJvdF9yZWc7Ci0JaWYgKHBhcmVudC0+X2xvY2tfdXNlcl9wcm90X3JlZykKLQkJc2xhdmUt Pm10ZC5fbG9ja191c2VyX3Byb3RfcmVnID0gcGFydF9sb2NrX3VzZXJfcHJvdF9yZWc7Ci0JaWYg KHBhcmVudC0+X2dldF91c2VyX3Byb3RfaW5mbykKLQkJc2xhdmUtPm10ZC5fZ2V0X3VzZXJfcHJv dF9pbmZvID0gcGFydF9nZXRfdXNlcl9wcm90X2luZm87Ci0JaWYgKHBhcmVudC0+X2dldF9mYWN0 X3Byb3RfaW5mbykKLQkJc2xhdmUtPm10ZC5fZ2V0X2ZhY3RfcHJvdF9pbmZvID0gcGFydF9nZXRf ZmFjdF9wcm90X2luZm87Ci0JaWYgKHBhcmVudC0+X3N5bmMpCi0JCXNsYXZlLT5tdGQuX3N5bmMg PSBwYXJ0X3N5bmM7Ci0JaWYgKCFwYXJ0bm8gJiYgIXBhcmVudC0+ZGV2LmNsYXNzICYmIHBhcmVu dC0+X3N1c3BlbmQgJiYKLQkgICAgcGFyZW50LT5fcmVzdW1lKSB7Ci0JCXNsYXZlLT5tdGQuX3N1 c3BlbmQgPSBwYXJ0X3N1c3BlbmQ7Ci0JCXNsYXZlLT5tdGQuX3Jlc3VtZSA9IHBhcnRfcmVzdW1l OwotCX0KLQlpZiAocGFyZW50LT5fd3JpdGV2KQotCQlzbGF2ZS0+bXRkLl93cml0ZXYgPSBwYXJ0 X3dyaXRldjsKLQlpZiAocGFyZW50LT5fbG9jaykKLQkJc2xhdmUtPm10ZC5fbG9jayA9IHBhcnRf bG9jazsKLQlpZiAocGFyZW50LT5fdW5sb2NrKQotCQlzbGF2ZS0+bXRkLl91bmxvY2sgPSBwYXJ0 X3VubG9jazsKLQlpZiAocGFyZW50LT5faXNfbG9ja2VkKQotCQlzbGF2ZS0+bXRkLl9pc19sb2Nr ZWQgPSBwYXJ0X2lzX2xvY2tlZDsKLQlpZiAocGFyZW50LT5fYmxvY2tfaXNyZXNlcnZlZCkKLQkJ c2xhdmUtPm10ZC5fYmxvY2tfaXNyZXNlcnZlZCA9IHBhcnRfYmxvY2tfaXNyZXNlcnZlZDsKLQlp ZiAocGFyZW50LT5fYmxvY2tfaXNiYWQpCi0JCXNsYXZlLT5tdGQuX2Jsb2NrX2lzYmFkID0gcGFy dF9ibG9ja19pc2JhZDsKLQlpZiAocGFyZW50LT5fYmxvY2tfbWFya2JhZCkKLQkJc2xhdmUtPm10 ZC5fYmxvY2tfbWFya2JhZCA9IHBhcnRfYmxvY2tfbWFya2JhZDsKLQlpZiAocGFyZW50LT5fbWF4 X2JhZF9ibG9ja3MpCi0JCXNsYXZlLT5tdGQuX21heF9iYWRfYmxvY2tzID0gcGFydF9tYXhfYmFk X2Jsb2NrczsKLQotCWlmIChwYXJlbnQtPl9nZXRfZGV2aWNlKQotCQlzbGF2ZS0+bXRkLl9nZXRf ZGV2aWNlID0gcGFydF9nZXRfZGV2aWNlOwotCWlmIChwYXJlbnQtPl9wdXRfZGV2aWNlKQotCQlz bGF2ZS0+bXRkLl9wdXRfZGV2aWNlID0gcGFydF9wdXRfZGV2aWNlOwotCi0Jc2xhdmUtPm10ZC5f ZXJhc2UgPSBwYXJ0X2VyYXNlOwotCXNsYXZlLT5wYXJlbnQgPSBwYXJlbnQ7Ci0Jc2xhdmUtPm9m ZnNldCA9IHBhcnQtPm9mZnNldDsKLQotCWlmIChzbGF2ZS0+b2Zmc2V0ID09IE1URFBBUlRfT0ZT X0FQUEVORCkKLQkJc2xhdmUtPm9mZnNldCA9IGN1cl9vZmZzZXQ7Ci0JaWYgKHNsYXZlLT5vZmZz ZXQgPT0gTVREUEFSVF9PRlNfTlhUQkxLKSB7CisJY2hpbGQtPmRldi5wYXJlbnQgPSBJU19FTkFC TEVEKENPTkZJR19NVERfUEFSVElUSU9ORURfTUFTVEVSKSB8fCBtdGRfaXNfcGFydGl0aW9uKHBh cmVudCkgPworCQkJICAgICZwYXJlbnQtPmRldiA6IHBhcmVudC0+ZGV2LnBhcmVudDsKKwljaGls ZC0+ZGV2Lm9mX25vZGUgPSBwYXJ0LT5vZl9ub2RlOworCWNoaWxkLT5wYXJlbnQgPSBwYXJlbnQ7 CisJY2hpbGQtPnBhcnQub2Zmc2V0ID0gcGFydC0+b2Zmc2V0OworCUlOSVRfTElTVF9IRUFEKCZj aGlsZC0+cGFydGl0aW9ucyk7CisKKwlpZiAoY2hpbGQtPnBhcnQub2Zmc2V0ID09IE1URFBBUlRf T0ZTX0FQUEVORCkKKwkJY2hpbGQtPnBhcnQub2Zmc2V0ID0gY3VyX29mZnNldDsKKwlpZiAoY2hp bGQtPnBhcnQub2Zmc2V0ID09IE1URFBBUlRfT0ZTX05YVEJMSykgewogCQl0bXAgPSBjdXJfb2Zm c2V0OwotCQlzbGF2ZS0+b2Zmc2V0ID0gY3VyX29mZnNldDsKKwkJY2hpbGQtPnBhcnQub2Zmc2V0 ID0gY3VyX29mZnNldDsKIAkJcmVtYWluZGVyID0gZG9fZGl2KHRtcCwgd3JfYWxpZ25tZW50KTsK IAkJaWYgKHJlbWFpbmRlcikgewotCQkJc2xhdmUtPm9mZnNldCArPSB3cl9hbGlnbm1lbnQgLSBy ZW1haW5kZXI7CisJCQljaGlsZC0+cGFydC5vZmZzZXQgKz0gd3JfYWxpZ25tZW50IC0gcmVtYWlu ZGVyOwogCQkJcHJpbnRrKEtFUk5fTk9USUNFICJNb3ZpbmcgcGFydGl0aW9uICVkOiAiCiAJCQkg ICAgICAgIjB4JTAxMmxseCAtPiAweCUwMTJsbHhcbiIsIHBhcnRubywKLQkJCSAgICAgICAodW5z aWduZWQgbG9uZyBsb25nKWN1cl9vZmZzZXQsICh1bnNpZ25lZCBsb25nIGxvbmcpc2xhdmUtPm9m ZnNldCk7CisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyljdXJfb2Zmc2V0LAorCQkJICAg ICAgIGNoaWxkLT5wYXJ0Lm9mZnNldCk7CiAJCX0KIAl9Ci0JaWYgKHNsYXZlLT5vZmZzZXQgPT0g TVREUEFSVF9PRlNfUkVUQUlOKSB7Ci0JCXNsYXZlLT5vZmZzZXQgPSBjdXJfb2Zmc2V0OwotCQlp ZiAocGFyZW50LT5zaXplIC0gc2xhdmUtPm9mZnNldCA+PSBzbGF2ZS0+bXRkLnNpemUpIHsKLQkJ CXNsYXZlLT5tdGQuc2l6ZSA9IHBhcmVudC0+c2l6ZSAtIHNsYXZlLT5vZmZzZXQKLQkJCQkJCQkt IHNsYXZlLT5tdGQuc2l6ZTsKKwlpZiAoY2hpbGQtPnBhcnQub2Zmc2V0ID09IE1URFBBUlRfT0ZT X1JFVEFJTikgeworCQljaGlsZC0+cGFydC5vZmZzZXQgPSBjdXJfb2Zmc2V0OworCQlpZiAocGFy ZW50LT5zaXplIC0gY2hpbGQtPnBhcnQub2Zmc2V0ID49IGNoaWxkLT5zaXplKSB7CisJCQljaGls ZC0+c2l6ZSA9IHBhcmVudC0+c2l6ZSAtIGNoaWxkLT5wYXJ0Lm9mZnNldCAtCisJCQkJICAgICAg Y2hpbGQtPnNpemU7CiAJCX0gZWxzZSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIm10ZCBwYXJ0aXRp b24gXCIlc1wiIGRvZXNuJ3QgaGF2ZSBlbm91Z2ggc3BhY2U6ICUjbGx4IDwgJSNsbHgsIGRpc2Fi bGVkXG4iLAotCQkJCXBhcnQtPm5hbWUsIHBhcmVudC0+c2l6ZSAtIHNsYXZlLT5vZmZzZXQsCi0J CQkJc2xhdmUtPm10ZC5zaXplKTsKKwkJCQlwYXJ0LT5uYW1lLCBwYXJlbnQtPnNpemUgLSBjaGls ZC0+cGFydC5vZmZzZXQsCisJCQkJY2hpbGQtPnNpemUpOwogCQkJLyogcmVnaXN0ZXIgdG8gcHJl c2VydmUgb3JkZXJpbmcgKi8KIAkJCWdvdG8gb3V0X3JlZ2lzdGVyOwogCQl9CiAJfQotCWlmIChz bGF2ZS0+bXRkLnNpemUgPT0gTVREUEFSVF9TSVpfRlVMTCkKLQkJc2xhdmUtPm10ZC5zaXplID0g cGFyZW50LT5zaXplIC0gc2xhdmUtPm9mZnNldDsKKwlpZiAoY2hpbGQtPnNpemUgPT0gTVREUEFS VF9TSVpfRlVMTCkKKwkJY2hpbGQtPnNpemUgPSBwYXJlbnQtPnNpemUgLSBjaGlsZC0+cGFydC5v ZmZzZXQ7CiAKLQlwcmludGsoS0VSTl9OT1RJQ0UgIjB4JTAxMmxseC0weCUwMTJsbHggOiBcIiVz XCJcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpc2xhdmUtPm9mZnNldCwKLQkJKHVuc2lnbmVkIGxv bmcgbG9uZykoc2xhdmUtPm9mZnNldCArIHNsYXZlLT5tdGQuc2l6ZSksIHNsYXZlLT5tdGQubmFt ZSk7CisJcHJpbnRrKEtFUk5fTk9USUNFICIweCUwMTJsbHgtMHglMDEybGx4IDogXCIlc1wiXG4i LAorCSAgICAgICBjaGlsZC0+cGFydC5vZmZzZXQsIGNoaWxkLT5wYXJ0Lm9mZnNldCArIGNoaWxk LT5zaXplLAorCSAgICAgICBjaGlsZC0+bmFtZSk7CiAKIAkvKiBsZXQncyBkbyBzb21lIHNhbml0 eSBjaGVja3MgKi8KLQlpZiAoc2xhdmUtPm9mZnNldCA+PSBwYXJlbnQtPnNpemUpIHsKKwlpZiAo Y2hpbGQtPnBhcnQub2Zmc2V0ID49IHBhcmVudC0+c2l6ZSkgewogCQkvKiBsZXQncyByZWdpc3Rl ciBpdCBhbnl3YXkgdG8gcHJlc2VydmUgb3JkZXJpbmcgKi8KLQkJc2xhdmUtPm9mZnNldCA9IDA7 Ci0JCXNsYXZlLT5tdGQuc2l6ZSA9IDA7CisJCWNoaWxkLT5wYXJ0Lm9mZnNldCA9IDA7CisJCWNo aWxkLT5zaXplID0gMDsKIAogCQkvKiBJbml0aWFsaXplIC0+ZXJhc2VzaXplIHRvIG1ha2UgYWRk X210ZF9kZXZpY2UoKSBoYXBweS4gKi8KLQkJc2xhdmUtPm10ZC5lcmFzZXNpemUgPSBwYXJlbnQt PmVyYXNlc2l6ZTsKLQorCQljaGlsZC0+ZXJhc2VzaXplID0gcGFyZW50LT5lcmFzZXNpemU7CiAJ CXByaW50ayhLRVJOX0VSUiJtdGQ6IHBhcnRpdGlvbiBcIiVzXCIgaXMgb3V0IG9mIHJlYWNoIC0t IGRpc2FibGVkXG4iLAogCQkJcGFydC0+bmFtZSk7CiAJCWdvdG8gb3V0X3JlZ2lzdGVyOwogCX0K LQlpZiAoc2xhdmUtPm9mZnNldCArIHNsYXZlLT5tdGQuc2l6ZSA+IHBhcmVudC0+c2l6ZSkgewot CQlzbGF2ZS0+bXRkLnNpemUgPSBwYXJlbnQtPnNpemUgLSBzbGF2ZS0+b2Zmc2V0OworCWlmIChj aGlsZC0+cGFydC5vZmZzZXQgKyBjaGlsZC0+c2l6ZSA+IHBhcmVudC0+c2l6ZSkgeworCQljaGls ZC0+c2l6ZSA9IHBhcmVudC0+c2l6ZSAtIGNoaWxkLT5wYXJ0Lm9mZnNldDsKIAkJcHJpbnRrKEtF Uk5fV0FSTklORyJtdGQ6IHBhcnRpdGlvbiBcIiVzXCIgZXh0ZW5kcyBiZXlvbmQgdGhlIGVuZCBv ZiBkZXZpY2UgXCIlc1wiIC0tIHNpemUgdHJ1bmNhdGVkIHRvICUjbGx4XG4iLAotCQkJcGFydC0+ bmFtZSwgcGFyZW50LT5uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKXNsYXZlLT5tdGQuc2l6ZSk7 CisJCQlwYXJ0LT5uYW1lLCBwYXJlbnQtPm5hbWUsIGNoaWxkLT5zaXplKTsKIAl9CiAJaWYgKHBh cmVudC0+bnVtZXJhc2VyZWdpb25zID4gMSkgewogCQkvKiBEZWFsIHdpdGggdmFyaWFibGUgZXJh c2Ugc2l6ZSBzdHVmZiAqLwogCQlpbnQgaSwgbWF4ID0gcGFyZW50LT5udW1lcmFzZXJlZ2lvbnM7 Ci0JCXU2NCBlbmQgPSBzbGF2ZS0+b2Zmc2V0ICsgc2xhdmUtPm10ZC5zaXplOworCQl1NjQgZW5k ID0gY2hpbGQtPnBhcnQub2Zmc2V0ICsgY2hpbGQtPnNpemU7CiAJCXN0cnVjdCBtdGRfZXJhc2Vf cmVnaW9uX2luZm8gKnJlZ2lvbnMgPSBwYXJlbnQtPmVyYXNlcmVnaW9uczsKIAogCQkvKiBGaW5k IHRoZSBmaXJzdCBlcmFzZSByZWdpb25zIHdoaWNoIGlzIHBhcnQgb2YgdGhpcwogCQkgKiBwYXJ0 aXRpb24uICovCi0JCWZvciAoaSA9IDA7IGkgPCBtYXggJiYgcmVnaW9uc1tpXS5vZmZzZXQgPD0g c2xhdmUtPm9mZnNldDsgaSsrKQorCQlmb3IgKGkgPSAwOyBpIDwgbWF4ICYmIHJlZ2lvbnNbaV0u b2Zmc2V0IDw9IGNoaWxkLT5wYXJ0Lm9mZnNldDsKKwkJICAgICBpKyspCiAJCQk7CiAJCS8qIFRo ZSBsb29wIHNlYXJjaGVkIGZvciB0aGUgcmVnaW9uIF9iZWhpbmRfIHRoZSBmaXJzdCBvbmUgKi8K IAkJaWYgKGkgPiAwKQpAQCAtNDk1LDcwICsxNTAsNjggQEAgc3RhdGljIHN0cnVjdCBtdGRfcGFy dCAqYWxsb2NhdGVfcGFydGl0aW9uKHN0cnVjdCBtdGRfaW5mbyAqcGFyZW50LAogCiAJCS8qIFBp Y2sgYmlnZ2VzdCBlcmFzZXNpemUgKi8KIAkJZm9yICg7IGkgPCBtYXggJiYgcmVnaW9uc1tpXS5v ZmZzZXQgPCBlbmQ7IGkrKykgewotCQkJaWYgKHNsYXZlLT5tdGQuZXJhc2VzaXplIDwgcmVnaW9u c1tpXS5lcmFzZXNpemUpIHsKLQkJCQlzbGF2ZS0+bXRkLmVyYXNlc2l6ZSA9IHJlZ2lvbnNbaV0u ZXJhc2VzaXplOwotCQkJfQorCQkJaWYgKGNoaWxkLT5lcmFzZXNpemUgPCByZWdpb25zW2ldLmVy YXNlc2l6ZSkKKwkJCQljaGlsZC0+ZXJhc2VzaXplID0gcmVnaW9uc1tpXS5lcmFzZXNpemU7CiAJ CX0KLQkJQlVHX09OKHNsYXZlLT5tdGQuZXJhc2VzaXplID09IDApOworCQlCVUdfT04oY2hpbGQt PmVyYXNlc2l6ZSA9PSAwKTsKIAl9IGVsc2UgewogCQkvKiBTaW5nbGUgZXJhc2Ugc2l6ZSAqLwot CQlzbGF2ZS0+bXRkLmVyYXNlc2l6ZSA9IHBhcmVudC0+ZXJhc2VzaXplOworCQljaGlsZC0+ZXJh c2VzaXplID0gcGFyZW50LT5lcmFzZXNpemU7CiAJfQogCiAJLyoKLQkgKiBTbGF2ZSBlcmFzZXNp emUgbWlnaHQgZGlmZmVyIGZyb20gdGhlIG1hc3RlciBvbmUgaWYgdGhlIG1hc3RlcgorCSAqIENo aWxkIGVyYXNlc2l6ZSBtaWdodCBkaWZmZXIgZnJvbSB0aGUgcGFyZW50IG9uZSBpZiB0aGUgcGFy ZW50CiAJICogZXhwb3NlcyBzZXZlcmFsIHJlZ2lvbnMgd2l0aCBkaWZmZXJlbnQgZXJhc2VzaXpl LiBBZGp1c3QKIAkgKiB3cl9hbGlnbm1lbnQgYWNjb3JkaW5nbHkuCiAJICovCi0JaWYgKCEoc2xh dmUtPm10ZC5mbGFncyAmIE1URF9OT19FUkFTRSkpCi0JCXdyX2FsaWdubWVudCA9IHNsYXZlLT5t dGQuZXJhc2VzaXplOworCWlmICghKGNoaWxkLT5mbGFncyAmIE1URF9OT19FUkFTRSkpCisJCXdy X2FsaWdubWVudCA9IGNoaWxkLT5lcmFzZXNpemU7CiAKLQl0bXAgPSBwYXJ0X2Fic29sdXRlX29m ZnNldChwYXJlbnQpICsgc2xhdmUtPm9mZnNldDsKKwl0bXAgPSBtdGRfZ2V0X21hc3Rlcl9vZnMo Y2hpbGQsIDApOwogCXJlbWFpbmRlciA9IGRvX2Rpdih0bXAsIHdyX2FsaWdubWVudCk7Ci0JaWYg KChzbGF2ZS0+bXRkLmZsYWdzICYgTVREX1dSSVRFQUJMRSkgJiYgcmVtYWluZGVyKSB7CisJaWYg KChjaGlsZC0+ZmxhZ3MgJiBNVERfV1JJVEVBQkxFKSAmJiByZW1haW5kZXIpIHsKIAkJLyogRG9l c24ndCBzdGFydCBvbiBhIGJvdW5kYXJ5IG9mIG1ham9yIGVyYXNlIHNpemUgKi8KIAkJLyogRklY TUU6IExldCBpdCBiZSB3cml0YWJsZSBpZiBpdCBpcyBvbiBhIGJvdW5kYXJ5IG9mCiAJCSAqIF9t aW5vcl8gZXJhc2Ugc2l6ZSB0aG91Z2ggKi8KLQkJc2xhdmUtPm10ZC5mbGFncyAmPSB+TVREX1dS SVRFQUJMRTsKKwkJY2hpbGQtPmZsYWdzICY9IH5NVERfV1JJVEVBQkxFOwogCQlwcmludGsoS0VS Tl9XQVJOSU5HIm10ZDogcGFydGl0aW9uIFwiJXNcIiBkb2Vzbid0IHN0YXJ0IG9uIGFuIGVyYXNl L3dyaXRlIGJsb2NrIGJvdW5kYXJ5IC0tIGZvcmNlIHJlYWQtb25seVxuIiwKIAkJCXBhcnQtPm5h bWUpOwogCX0KIAotCXRtcCA9IHBhcnRfYWJzb2x1dGVfb2Zmc2V0KHBhcmVudCkgKyBzbGF2ZS0+ bXRkLnNpemU7CisJdG1wID0gbXRkX2dldF9tYXN0ZXJfb2ZzKGNoaWxkLCAwKSArIGNoaWxkLT5z aXplOwogCXJlbWFpbmRlciA9IGRvX2Rpdih0bXAsIHdyX2FsaWdubWVudCk7Ci0JaWYgKChzbGF2 ZS0+bXRkLmZsYWdzICYgTVREX1dSSVRFQUJMRSkgJiYgcmVtYWluZGVyKSB7Ci0JCXNsYXZlLT5t dGQuZmxhZ3MgJj0gfk1URF9XUklURUFCTEU7CisJaWYgKChjaGlsZC0+ZmxhZ3MgJiBNVERfV1JJ VEVBQkxFKSAmJiByZW1haW5kZXIpIHsKKwkJY2hpbGQtPmZsYWdzICY9IH5NVERfV1JJVEVBQkxF OwogCQlwcmludGsoS0VSTl9XQVJOSU5HIm10ZDogcGFydGl0aW9uIFwiJXNcIiBkb2Vzbid0IGVu ZCBvbiBhbiBlcmFzZS93cml0ZSBibG9jayAtLSBmb3JjZSByZWFkLW9ubHlcbiIsCiAJCQlwYXJ0 LT5uYW1lKTsKIAl9CiAKLQltdGRfc2V0X29vYmxheW91dCgmc2xhdmUtPm10ZCwgJnBhcnRfb29i bGF5b3V0X29wcyk7Ci0Jc2xhdmUtPm10ZC5lY2Nfc3RlcF9zaXplID0gcGFyZW50LT5lY2Nfc3Rl cF9zaXplOwotCXNsYXZlLT5tdGQuZWNjX3N0cmVuZ3RoID0gcGFyZW50LT5lY2Nfc3RyZW5ndGg7 Ci0Jc2xhdmUtPm10ZC5iaXRmbGlwX3RocmVzaG9sZCA9IHBhcmVudC0+Yml0ZmxpcF90aHJlc2hv bGQ7CisJY2hpbGQtPmVjY19zdGVwX3NpemUgPSBwYXJlbnQtPmVjY19zdGVwX3NpemU7CisJY2hp bGQtPmVjY19zdHJlbmd0aCA9IHBhcmVudC0+ZWNjX3N0cmVuZ3RoOworCWNoaWxkLT5iaXRmbGlw X3RocmVzaG9sZCA9IHBhcmVudC0+Yml0ZmxpcF90aHJlc2hvbGQ7CiAKLQlpZiAocGFyZW50LT5f YmxvY2tfaXNiYWQpIHsKKwlpZiAobWFzdGVyLT5fYmxvY2tfaXNiYWQpIHsKIAkJdWludDY0X3Qg b2ZmcyA9IDA7CiAKLQkJd2hpbGUgKG9mZnMgPCBzbGF2ZS0+bXRkLnNpemUpIHsKLQkJCWlmICht dGRfYmxvY2tfaXNyZXNlcnZlZChwYXJlbnQsIG9mZnMgKyBzbGF2ZS0+b2Zmc2V0KSkKLQkJCQlz bGF2ZS0+bXRkLmVjY19zdGF0cy5iYnRibG9ja3MrKzsKLQkJCWVsc2UgaWYgKG10ZF9ibG9ja19p c2JhZChwYXJlbnQsIG9mZnMgKyBzbGF2ZS0+b2Zmc2V0KSkKLQkJCQlzbGF2ZS0+bXRkLmVjY19z dGF0cy5iYWRibG9ja3MrKzsKLQkJCW9mZnMgKz0gc2xhdmUtPm10ZC5lcmFzZXNpemU7CisJCXdo aWxlIChvZmZzIDwgY2hpbGQtPnNpemUpIHsKKwkJCWlmIChtdGRfYmxvY2tfaXNyZXNlcnZlZChj aGlsZCwgb2ZmcykpCisJCQkJY2hpbGQtPmVjY19zdGF0cy5iYnRibG9ja3MrKzsKKwkJCWVsc2Ug aWYgKG10ZF9ibG9ja19pc2JhZChjaGlsZCwgb2ZmcykpCisJCQkJY2hpbGQtPmVjY19zdGF0cy5i YWRibG9ja3MrKzsKKwkJCW9mZnMgKz0gY2hpbGQtPmVyYXNlc2l6ZTsKIAkJfQogCX0KIAogb3V0 X3JlZ2lzdGVyOgotCXJldHVybiBzbGF2ZTsKKwlyZXR1cm4gY2hpbGQ7CiB9CiAKIHN0YXRpYyBz c2l6ZV90IG10ZF9wYXJ0aXRpb25fb2Zmc2V0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQlz dHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBtdGRf aW5mbyAqbXRkID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IG10ZF9wYXJ0ICpwYXJ0 ID0gbXRkX3RvX3BhcnQobXRkKTsKLQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIl bGx1XG4iLCBwYXJ0LT5vZmZzZXQpOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpF LCAiJWxsZFxuIiwgbXRkLT5wYXJ0Lm9mZnNldCk7CiB9CiAKIHN0YXRpYyBERVZJQ0VfQVRUUihv ZmZzZXQsIFNfSVJVR08sIG10ZF9wYXJ0aXRpb25fb2Zmc2V0X3Nob3csIE5VTEwpOwpAQCAtNTY4 LDkgKzIyMSw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICptdGRfcGFydGl0aW9u X2F0dHJzW10gPSB7CiAJTlVMTAogfTsKIAotc3RhdGljIGludCBtdGRfYWRkX3BhcnRpdGlvbl9h dHRycyhzdHJ1Y3QgbXRkX3BhcnQgKm5ldykKK3N0YXRpYyBpbnQgbXRkX2FkZF9wYXJ0aXRpb25f YXR0cnMoc3RydWN0IG10ZF9pbmZvICpuZXcpCiB7Ci0JaW50IHJldCA9IHN5c2ZzX2NyZWF0ZV9m aWxlcygmbmV3LT5tdGQuZGV2LmtvYmosIG10ZF9wYXJ0aXRpb25fYXR0cnMpOworCWludCByZXQg PSBzeXNmc19jcmVhdGVfZmlsZXMoJm5ldy0+ZGV2LmtvYmosIG10ZF9wYXJ0aXRpb25fYXR0cnMp OwogCWlmIChyZXQpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJICAgICAgICJtdGQ6IGZhaWxl ZCB0byBjcmVhdGUgcGFydGl0aW9uIGF0dHJzLCBlcnI9JWRcbiIsIHJldCk7CkBAIC01ODAsOCAr MjMzLDkgQEAgc3RhdGljIGludCBtdGRfYWRkX3BhcnRpdGlvbl9hdHRycyhzdHJ1Y3QgbXRkX3Bh cnQgKm5ldykKIGludCBtdGRfYWRkX3BhcnRpdGlvbihzdHJ1Y3QgbXRkX2luZm8gKnBhcmVudCwg Y29uc3QgY2hhciAqbmFtZSwKIAkJICAgICAgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxl bmd0aCkKIHsKKwlzdHJ1Y3QgbXRkX2luZm8gKm1hc3RlciA9IG10ZF9nZXRfbWFzdGVyKHBhcmVu dCk7CiAJc3RydWN0IG10ZF9wYXJ0aXRpb24gcGFydDsKLQlzdHJ1Y3QgbXRkX3BhcnQgKm5ldzsK KwlzdHJ1Y3QgbXRkX2luZm8gKmNoaWxkOwogCWludCByZXQgPSAwOwogCiAJLyogdGhlIGRpcmVj dCBvZmZzZXQgaXMgZXhwZWN0ZWQgKi8KQEAgLTYwMCwyOCArMjU0LDI4IEBAIGludCBtdGRfYWRk X3BhcnRpdGlvbihzdHJ1Y3QgbXRkX2luZm8gKnBhcmVudCwgY29uc3QgY2hhciAqbmFtZSwKIAlw YXJ0LnNpemUgPSBsZW5ndGg7CiAJcGFydC5vZmZzZXQgPSBvZmZzZXQ7CiAKLQluZXcgPSBhbGxv Y2F0ZV9wYXJ0aXRpb24ocGFyZW50LCAmcGFydCwgLTEsIG9mZnNldCk7Ci0JaWYgKElTX0VSUihu ZXcpKQotCQlyZXR1cm4gUFRSX0VSUihuZXcpOworCWNoaWxkID0gYWxsb2NhdGVfcGFydGl0aW9u KHBhcmVudCwgJnBhcnQsIC0xLCBvZmZzZXQpOworCWlmIChJU19FUlIoY2hpbGQpKQorCQlyZXR1 cm4gUFRSX0VSUihjaGlsZCk7CiAKLQltdXRleF9sb2NrKCZtdGRfcGFydGl0aW9uc19tdXRleCk7 Ci0JbGlzdF9hZGQoJm5ldy0+bGlzdCwgJm10ZF9wYXJ0aXRpb25zKTsKLQltdXRleF91bmxvY2so Jm10ZF9wYXJ0aXRpb25zX211dGV4KTsKKwltdXRleF9sb2NrKCZtYXN0ZXItPm1hc3Rlci5wYXJ0 aXRpb25zX2xvY2spOworCWxpc3RfYWRkX3RhaWwoJmNoaWxkLT5wYXJ0Lm5vZGUsICZwYXJlbnQt PnBhcnRpdGlvbnMpOworCW11dGV4X3VubG9jaygmbWFzdGVyLT5tYXN0ZXIucGFydGl0aW9uc19s b2NrKTsKIAotCXJldCA9IGFkZF9tdGRfZGV2aWNlKCZuZXctPm10ZCk7CisJcmV0ID0gYWRkX210 ZF9kZXZpY2UoY2hpbGQpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX3JlbW92ZV9wYXJ0OwogCi0J bXRkX2FkZF9wYXJ0aXRpb25fYXR0cnMobmV3KTsKKwltdGRfYWRkX3BhcnRpdGlvbl9hdHRycyhj aGlsZCk7CiAKIAlyZXR1cm4gMDsKIAogZXJyX3JlbW92ZV9wYXJ0OgotCW11dGV4X2xvY2soJm10 ZF9wYXJ0aXRpb25zX211dGV4KTsKLQlsaXN0X2RlbCgmbmV3LT5saXN0KTsKLQltdXRleF91bmxv Y2soJm10ZF9wYXJ0aXRpb25zX211dGV4KTsKKwltdXRleF9sb2NrKCZtYXN0ZXItPm1hc3Rlci5w YXJ0aXRpb25zX2xvY2spOworCWxpc3RfZGVsKCZjaGlsZC0+cGFydC5ub2RlKTsKKwltdXRleF91 bmxvY2soJm1hc3Rlci0+bWFzdGVyLnBhcnRpdGlvbnNfbG9jayk7CiAKLQlmcmVlX3BhcnRpdGlv bihuZXcpOworCWZyZWVfcGFydGl0aW9uKGNoaWxkKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC02 MzAsMTE5ICsyODQsMTQyIEBAIEVYUE9SVF9TWU1CT0xfR1BMKG10ZF9hZGRfcGFydGl0aW9uKTsK IC8qKgogICogX19tdGRfZGVsX3BhcnRpdGlvbiAtIGRlbGV0ZSBNVEQgcGFydGl0aW9uCiAgKgot ICogQHByaXY6IGludGVybmFsIE1URCBzdHJ1Y3QgZm9yIHBhcnRpdGlvbiB0byBiZSBkZWxldGVk CisgKiBAcHJpdjogTVREIHN0cnVjdHVyZSB0byBiZSBkZWxldGVkCiAgKgogICogVGhpcyBmdW5j dGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBwYXJ0aXRpb25zIG11dGV4IGxvY2tlZC4KICAq Lwotc3RhdGljIGludCBfX210ZF9kZWxfcGFydGl0aW9uKHN0cnVjdCBtdGRfcGFydCAqcHJpdikK K3N0YXRpYyBpbnQgX19tdGRfZGVsX3BhcnRpdGlvbihzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsK LQlzdHJ1Y3QgbXRkX3BhcnQgKmNoaWxkLCAqbmV4dDsKKwlzdHJ1Y3QgbXRkX2luZm8gKmNoaWxk LCAqbmV4dDsKIAlpbnQgZXJyOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNoaWxkLCBu ZXh0LCAmbXRkX3BhcnRpdGlvbnMsIGxpc3QpIHsKLQkJaWYgKGNoaWxkLT5wYXJlbnQgPT0gJnBy aXYtPm10ZCkgewotCQkJZXJyID0gX19tdGRfZGVsX3BhcnRpdGlvbihjaGlsZCk7Ci0JCQlpZiAo ZXJyKQotCQkJCXJldHVybiBlcnI7Ci0JCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2hp bGQsIG5leHQsICZtdGQtPnBhcnRpdGlvbnMsIHBhcnQubm9kZSkgeworCQllcnIgPSBfX210ZF9k ZWxfcGFydGl0aW9uKGNoaWxkKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CiAJfQogCi0J c3lzZnNfcmVtb3ZlX2ZpbGVzKCZwcml2LT5tdGQuZGV2LmtvYmosIG10ZF9wYXJ0aXRpb25fYXR0 cnMpOworCXN5c2ZzX3JlbW92ZV9maWxlcygmbXRkLT5kZXYua29iaiwgbXRkX3BhcnRpdGlvbl9h dHRycyk7CiAKLQllcnIgPSBkZWxfbXRkX2RldmljZSgmcHJpdi0+bXRkKTsKKwllcnIgPSBkZWxf bXRkX2RldmljZShtdGQpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlsaXN0X2RlbCgm cHJpdi0+bGlzdCk7Ci0JZnJlZV9wYXJ0aXRpb24ocHJpdik7CisJbGlzdF9kZWwoJmNoaWxkLT5w YXJ0Lm5vZGUpOworCWZyZWVfcGFydGl0aW9uKG10ZCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogLyoK ICAqIFRoaXMgZnVuY3Rpb24gdW5yZWdpc3RlcnMgYW5kIGRlc3Ryb3kgYWxsIHNsYXZlIE1URCBv YmplY3RzIHdoaWNoIGFyZQotICogYXR0YWNoZWQgdG8gdGhlIGdpdmVuIE1URCBvYmplY3QuCisg KiBhdHRhY2hlZCB0byB0aGUgZ2l2ZW4gTVREIG9iamVjdCwgcmVjdXJzaXZlbHkuCiAgKi8KK2lu dCBfX2RlbF9tdGRfcGFydGl0aW9ucyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlzdHJ1Y3Qg bXRkX2luZm8gKmNoaWxkLCAqbmV4dDsKKwlMSVNUX0hFQUQodG1wX2xpc3QpOworCWludCByZXQs IGVyciA9IDA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2hpbGQsIG5leHQsICZtdGQt PnBhcnRpdGlvbnMsIHBhcnQubm9kZSkgeworCQlpZiAobXRkX2hhc19wYXJ0aXRpb25zKGNoaWxk KSkKKwkJCWRlbF9tdGRfcGFydGl0aW9ucyhjaGlsZCk7CisKKwkJcHJfaW5mbygiRGVsZXRpbmcg JXMgTVREIHBhcnRpdGlvblxuIiwgY2hpbGQtPm5hbWUpOworCQlyZXQgPSBkZWxfbXRkX2Rldmlj ZShjaGlsZCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcl9lcnIoIkVycm9yIHdoZW4gZGVsZXRp bmcgcGFydGl0aW9uIFwiJXNcIiAoJWQpXG4iLAorCQkJICAgICAgIGNoaWxkLT5uYW1lLCByZXQp OworCQkJZXJyID0gcmV0OworCQkJY29udGludWU7CisJCX0KKworCQlsaXN0X2RlbCgmY2hpbGQt PnBhcnQubm9kZSk7CisJCWZyZWVfcGFydGl0aW9uKGNoaWxkKTsKKwl9CisKKwlyZXR1cm4gZXJy OworfQorCiBpbnQgZGVsX210ZF9wYXJ0aXRpb25zKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQogewot CXN0cnVjdCBtdGRfcGFydCAqc2xhdmUsICpuZXh0OwotCWludCByZXQsIGVyciA9IDA7CisJc3Ry dWN0IG10ZF9pbmZvICptYXN0ZXIgPSBtdGRfZ2V0X21hc3RlcihtdGQpOworCWludCByZXQ7CiAK LQltdXRleF9sb2NrKCZtdGRfcGFydGl0aW9uc19tdXRleCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRy eV9zYWZlKHNsYXZlLCBuZXh0LCAmbXRkX3BhcnRpdGlvbnMsIGxpc3QpCi0JCWlmIChzbGF2ZS0+ cGFyZW50ID09IG10ZCkgewotCQkJcmV0ID0gX19tdGRfZGVsX3BhcnRpdGlvbihzbGF2ZSk7Ci0J CQlpZiAocmV0IDwgMCkKLQkJCQllcnIgPSByZXQ7Ci0JCX0KLQltdXRleF91bmxvY2soJm10ZF9w YXJ0aXRpb25zX211dGV4KTsKKwlwcl9pbmZvKCJEZWxldGluZyBNVEQgcGFydGl0aW9ucyBvbiBc IiVzXCI6XG4iLCBtdGQtPm5hbWUpOwogCi0JcmV0dXJuIGVycjsKKwltdXRleF9sb2NrKCZtYXN0 ZXItPm1hc3Rlci5wYXJ0aXRpb25zX2xvY2spOworCXJldCA9IF9fZGVsX210ZF9wYXJ0aXRpb25z KG10ZCk7CisJbXV0ZXhfdW5sb2NrKCZtYXN0ZXItPm1hc3Rlci5wYXJ0aXRpb25zX2xvY2spOwor CisJcmV0dXJuIHJldDsKIH0KIAogaW50IG10ZF9kZWxfcGFydGl0aW9uKHN0cnVjdCBtdGRfaW5m byAqbXRkLCBpbnQgcGFydG5vKQogewotCXN0cnVjdCBtdGRfcGFydCAqc2xhdmUsICpuZXh0Owor CXN0cnVjdCBtdGRfaW5mbyAqY2hpbGQsICptYXN0ZXIgPSBtdGRfZ2V0X21hc3RlcihtdGQpOwog CWludCByZXQgPSAtRUlOVkFMOwogCi0JbXV0ZXhfbG9jaygmbXRkX3BhcnRpdGlvbnNfbXV0ZXgp OwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzbGF2ZSwgbmV4dCwgJm10ZF9wYXJ0aXRpb25z LCBsaXN0KQotCQlpZiAoKHNsYXZlLT5wYXJlbnQgPT0gbXRkKSAmJgotCQkgICAgKHNsYXZlLT5t dGQuaW5kZXggPT0gcGFydG5vKSkgewotCQkJcmV0ID0gX19tdGRfZGVsX3BhcnRpdGlvbihzbGF2 ZSk7CisJbXV0ZXhfbG9jaygmbWFzdGVyLT5tYXN0ZXIucGFydGl0aW9uc19sb2NrKTsKKwlsaXN0 X2Zvcl9lYWNoX2VudHJ5KGNoaWxkLCAmbXRkLT5wYXJ0aXRpb25zLCBwYXJ0Lm5vZGUpIHsKKwkJ aWYgKGNoaWxkLT5pbmRleCA9PSBwYXJ0bm8pIHsKKwkJCXJldCA9IF9fbXRkX2RlbF9wYXJ0aXRp b24oY2hpbGQpOwogCQkJYnJlYWs7CiAJCX0KLQltdXRleF91bmxvY2soJm10ZF9wYXJ0aXRpb25z X211dGV4KTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZtYXN0ZXItPm1hc3Rlci5wYXJ0aXRpb25zX2xv Y2spOwogCiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG10ZF9kZWxfcGFydGl0 aW9uKTsKIAogLyoKLSAqIFRoaXMgZnVuY3Rpb24sIGdpdmVuIGEgbWFzdGVyIE1URCBvYmplY3Qg YW5kIGEgcGFydGl0aW9uIHRhYmxlLCBjcmVhdGVzCi0gKiBhbmQgcmVnaXN0ZXJzIHNsYXZlIE1U RCBvYmplY3RzIHdoaWNoIGFyZSBib3VuZCB0byB0aGUgbWFzdGVyIGFjY29yZGluZyB0bwotICog dGhlIHBhcnRpdGlvbiBkZWZpbml0aW9ucy4KKyAqIFRoaXMgZnVuY3Rpb24sIGdpdmVuIGEgcGFy ZW50IE1URCBvYmplY3QgYW5kIGEgcGFydGl0aW9uIHRhYmxlLCBjcmVhdGVzCisgKiBhbmQgcmVn aXN0ZXJzIHRoZSBjaGlsZCBNVEQgb2JqZWN0cyB3aGljaCBhcmUgYm91bmQgdG8gdGhlIHBhcmVu dCBhY2NvcmRpbmcKKyAqIHRvIHRoZSBwYXJ0aXRpb24gZGVmaW5pdGlvbnMuCiAgKgotICogRm9y IGhpc3RvcmljYWwgcmVhc29ucywgdGhpcyBmdW5jdGlvbidzIGNhbGxlciBvbmx5IHJlZ2lzdGVy cyB0aGUgbWFzdGVyCisgKiBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCB0aGlzIGZ1bmN0aW9uJ3Mg Y2FsbGVyIG9ubHkgcmVnaXN0ZXJzIHRoZSBwYXJlbnQKICAqIGlmIHRoZSBNVERfUEFSVElUSU9O RURfTUFTVEVSIGNvbmZpZyBvcHRpb24gaXMgc2V0LgogICovCiAKLWludCBhZGRfbXRkX3BhcnRp dGlvbnMoc3RydWN0IG10ZF9pbmZvICptYXN0ZXIsCitpbnQgYWRkX210ZF9wYXJ0aXRpb25zKHN0 cnVjdCBtdGRfaW5mbyAqcGFyZW50LAogCQkgICAgICAgY29uc3Qgc3RydWN0IG10ZF9wYXJ0aXRp b24gKnBhcnRzLAogCQkgICAgICAgaW50IG5icGFydHMpCiB7Ci0Jc3RydWN0IG10ZF9wYXJ0ICpz bGF2ZTsKKwlzdHJ1Y3QgbXRkX2luZm8gKmNoaWxkLCAqbWFzdGVyID0gbXRkX2dldF9tYXN0ZXIo cGFyZW50KTsKIAl1aW50NjRfdCBjdXJfb2Zmc2V0ID0gMDsKIAlpbnQgaSwgcmV0OwogCi0JcHJp bnRrKEtFUk5fTk9USUNFICJDcmVhdGluZyAlZCBNVEQgcGFydGl0aW9ucyBvbiBcIiVzXCI6XG4i LCBuYnBhcnRzLCBtYXN0ZXItPm5hbWUpOworCXByaW50ayhLRVJOX05PVElDRSAiQ3JlYXRpbmcg JWQgTVREIHBhcnRpdGlvbnMgb24gXCIlc1wiOlxuIiwKKwkgICAgICAgbmJwYXJ0cywgcGFyZW50 LT5uYW1lKTsKIAogCWZvciAoaSA9IDA7IGkgPCBuYnBhcnRzOyBpKyspIHsKLQkJc2xhdmUgPSBh bGxvY2F0ZV9wYXJ0aXRpb24obWFzdGVyLCBwYXJ0cyArIGksIGksIGN1cl9vZmZzZXQpOwotCQlp ZiAoSVNfRVJSKHNsYXZlKSkgewotCQkJcmV0ID0gUFRSX0VSUihzbGF2ZSk7CisJCWNoaWxkID0g YWxsb2NhdGVfcGFydGl0aW9uKHBhcmVudCwgcGFydHMgKyBpLCBpLCBjdXJfb2Zmc2V0KTsKKwkJ aWYgKElTX0VSUihjaGlsZCkpIHsKKwkJCXJldCA9IFBUUl9FUlIoY2hpbGQpOwogCQkJZ290byBl cnJfZGVsX3BhcnRpdGlvbnM7CiAJCX0KIAotCQltdXRleF9sb2NrKCZtdGRfcGFydGl0aW9uc19t dXRleCk7Ci0JCWxpc3RfYWRkKCZzbGF2ZS0+bGlzdCwgJm10ZF9wYXJ0aXRpb25zKTsKLQkJbXV0 ZXhfdW5sb2NrKCZtdGRfcGFydGl0aW9uc19tdXRleCk7CisJCW11dGV4X2xvY2soJm1hc3Rlci0+ bWFzdGVyLnBhcnRpdGlvbnNfbG9jayk7CisJCWxpc3RfYWRkX3RhaWwoJmNoaWxkLT5wYXJ0Lm5v ZGUsICZwYXJlbnQtPnBhcnRpdGlvbnMpOworCQltdXRleF91bmxvY2soJm1hc3Rlci0+bWFzdGVy LnBhcnRpdGlvbnNfbG9jayk7CiAKLQkJcmV0ID0gYWRkX210ZF9kZXZpY2UoJnNsYXZlLT5tdGQp OworCQlyZXQgPSBhZGRfbXRkX2RldmljZShjaGlsZCk7CiAJCWlmIChyZXQpIHsKLQkJCW11dGV4 X2xvY2soJm10ZF9wYXJ0aXRpb25zX211dGV4KTsKLQkJCWxpc3RfZGVsKCZzbGF2ZS0+bGlzdCk7 Ci0JCQltdXRleF91bmxvY2soJm10ZF9wYXJ0aXRpb25zX211dGV4KTsKKwkJCW11dGV4X2xvY2so Jm1hc3Rlci0+bWFzdGVyLnBhcnRpdGlvbnNfbG9jayk7CisJCQlsaXN0X2RlbCgmY2hpbGQtPnBh cnQubm9kZSk7CisJCQltdXRleF91bmxvY2soJm1hc3Rlci0+bWFzdGVyLnBhcnRpdGlvbnNfbG9j ayk7CiAKLQkJCWZyZWVfcGFydGl0aW9uKHNsYXZlKTsKKwkJCWZyZWVfcGFydGl0aW9uKGNoaWxk KTsKIAkJCWdvdG8gZXJyX2RlbF9wYXJ0aXRpb25zOwogCQl9CiAKLQkJbXRkX2FkZF9wYXJ0aXRp b25fYXR0cnMoc2xhdmUpOworCQltdGRfYWRkX3BhcnRpdGlvbl9hdHRycyhjaGlsZCk7CisKIAkJ LyogTG9vayBmb3Igc3VicGFydGl0aW9ucyAqLwotCQlwYXJzZV9tdGRfcGFydGl0aW9ucygmc2xh dmUtPm10ZCwgcGFydHNbaV0udHlwZXMsIE5VTEwpOworCQlwYXJzZV9tdGRfcGFydGl0aW9ucyhj aGlsZCwgcGFydHNbaV0udHlwZXMsIE5VTEwpOwogCi0JCWN1cl9vZmZzZXQgPSBzbGF2ZS0+b2Zm c2V0ICsgc2xhdmUtPm10ZC5zaXplOworCQljdXJfb2Zmc2V0ID0gY2hpbGQtPnBhcnQub2Zmc2V0 ICsgY2hpbGQtPnNpemU7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xMDIzLDI5ICs3MDAsMTEgQEAg dm9pZCBtdGRfcGFydF9wYXJzZXJfY2xlYW51cChzdHJ1Y3QgbXRkX3BhcnRpdGlvbnMgKnBhcnRz KQogCX0KIH0KIAotaW50IG10ZF9pc19wYXJ0aXRpb24oY29uc3Qgc3RydWN0IG10ZF9pbmZvICpt dGQpCi17Ci0Jc3RydWN0IG10ZF9wYXJ0ICpwYXJ0OwotCWludCBpc3BhcnQgPSAwOwotCi0JbXV0 ZXhfbG9jaygmbXRkX3BhcnRpdGlvbnNfbXV0ZXgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkocGFy dCwgJm10ZF9wYXJ0aXRpb25zLCBsaXN0KQotCQlpZiAoJnBhcnQtPm10ZCA9PSBtdGQpIHsKLQkJ CWlzcGFydCA9IDE7Ci0JCQlicmVhazsKLQkJfQotCW11dGV4X3VubG9jaygmbXRkX3BhcnRpdGlv bnNfbXV0ZXgpOwotCi0JcmV0dXJuIGlzcGFydDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKG10ZF9p c19wYXJ0aXRpb24pOwotCiAvKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBlbnRpcmUgZmxhc2gg Y2hpcCAqLwogdWludDY0X3QgbXRkX2dldF9kZXZpY2Vfc2l6ZShjb25zdCBzdHJ1Y3QgbXRkX2lu Zm8gKm10ZCkKIHsKLQlpZiAoIW10ZF9pc19wYXJ0aXRpb24obXRkKSkKLQkJcmV0dXJuIG10ZC0+ c2l6ZTsKKwlzdHJ1Y3QgbXRkX2luZm8gKm1hc3RlciA9IG10ZF9nZXRfbWFzdGVyKChzdHJ1Y3Qg bXRkX2luZm8gKiltdGQpOwogCi0JcmV0dXJuIG10ZF9nZXRfZGV2aWNlX3NpemUobXRkX3RvX3Bh cnQobXRkKS0+cGFyZW50KTsKKwlyZXR1cm4gbWFzdGVyLT5zaXplOwogfQogRVhQT1JUX1NZTUJP TF9HUEwobXRkX2dldF9kZXZpY2Vfc2l6ZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210 ZC9tdGQuaCBiL2luY2x1ZGUvbGludXgvbXRkL210ZC5oCmluZGV4IDI0OWU4ZDliZmJjZC4uMmQx ZjRhNjFmNGFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9tdGQuaAorKysgYi9pbmNs dWRlL2xpbnV4L210ZC9tdGQuaApAQCAtOCw2ICs4LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5 cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvdWlvLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgog I2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAj aW5jbHVkZSA8bGludXgvb2YuaD4KQEAgLTE5NCwxMCArMTk1LDQzIEBAIHN0cnVjdCBtdGRfZGVi dWdfaW5mbyB7CiAJY29uc3QgY2hhciAqcGFydGlkOwogfTsKIAorLyoqCisgKiBzdHJ1Y3QgbXRk X3BhcnQgLSBNVEQgcGFydGl0aW9uIHNwZWNpZmljIGZpZWxkcworICoKKyAqIEBub2RlOiBsaXN0 IG5vZGUgdXNlZCB0byBhZGQgYW4gTVREIHBhcnRpdGlvbiB0byB0aGUgcGFyZW50IHBhcnRpdGlv biBsaXN0CisgKiBAb2Zmc2V0OiBvZmZzZXQgb2YgdGhlIHBhcnRpdGlvbiByZWxhdGl2ZWx5IHRv IHRoZSBwYXJlbnQgb2Zmc2V0CisgKiBAZmxhZ3M6IG9yaWdpbmFsIGZsYWdzIChiZWZvcmUgdGhl IG10ZHBhcnQgbG9naWMgZGVjaWRlZCB0byB0d2VhayB0aGVtIGJhc2VkCisgKgkgICBvbiBmbGFz aCBjb25zdHJhaW50cywgbGlrZSBlcmFzZWJsb2NrL3BhZ2VzaXplIGFsaWdubWVudCkKKyAqCisg KiBUaGlzIHN0cnVjdCBpcyBlbWJlZGRlZCBpbiBtdGRfaW5mbyBhbmQgY29udGFpbnMgcGFydGl0 aW9uLXNwZWNpZmljCisgKiBwcm9wZXJ0aWVzL2ZpZWxkcy4KKyAqLworc3RydWN0IG10ZF9wYXJ0 IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisJdTY0IG9mZnNldDsKKwl1MzIgZmxhZ3M7Cit9 OworCisvKioKKyAqIHN0cnVjdCBtdGRfbWFzdGVyIC0gTVREIG1hc3RlciBzcGVjaWZpYyBmaWVs ZHMKKyAqCisgKiBAcGFydGl0aW9uc19sb2NrOiBsb2NrIHByb3RlY3RpbmcgYWNjZXNzZXMgdG8g dGhlIHBhcnRpdGlvbiBsaXN0LiBQcm90ZWN0cworICoJCSAgICAgbm90IG9ubHkgdGhlIG1hc3Rl ciBwYXJ0aXRpb24gbGlzdCwgYnV0IGFsc28gYWxsCisgKgkJICAgICBzdWItcGFydGl0aW9ucy4K KyAqIEBzdXNwZW5kZWQ6IGV0IHRvIDEgd2hlbiB0aGUgZGV2aWNlIGlzIHN1c3BlbmRlZCwgMCBv dGhlcndpc2UKKyAqCisgKiBUaGlzIHN0cnVjdCBpcyBlbWJlZGRlZCBpbiBtdGRfaW5mbyBhbmQg Y29udGFpbnMgbWFzdGVyLXNwZWNpZmljCisgKiBwcm9wZXJ0aWVzL2ZpZWxkcy4gVGhlIG1hc3Rl ciBpcyB0aGUgcm9vdCBNVEQgZGV2aWNlIGZyb20gdGhlIE1URCBwYXJ0aXRpb24KKyAqIHBvaW50 IG9mIHZpZXcuCisgKi8KK3N0cnVjdCBtdGRfbWFzdGVyIHsKKwlzdHJ1Y3QgbXV0ZXggcGFydGl0 aW9uc19sb2NrOworCXVuc2lnbmVkIGludCBzdXNwZW5kZWQgOiAxOworfTsKKwogc3RydWN0IG10 ZF9pbmZvIHsKIAl1X2NoYXIgdHlwZTsKIAl1aW50MzJfdCBmbGFnczsKLQl1aW50MzJfdCBvcmln X2ZsYWdzOyAvKiBGbGFncyBhcyBiZWZvcmUgcnVubmluZyBtdGQgY2hlY2tzICovCiAJdWludDY0 X3Qgc2l6ZTsJIC8vIFRvdGFsIHNpemUgb2YgdGhlIE1URAogCiAJLyogIk1ham9yIiBlcmFzZSBz aXplIGZvciB0aGUgZGV2aWNlLiBOYcOvdmUgdXNlcnMgbWF5IHRha2UgdGhpcwpAQCAtMzM5LDgg KzM3Myw1MiBAQCBzdHJ1Y3QgbXRkX2luZm8gewogCWludCB1c2Vjb3VudDsKIAlzdHJ1Y3QgbXRk X2RlYnVnX2luZm8gZGJnOwogCXN0cnVjdCBudm1lbV9kZXZpY2UgKm52bWVtOworCisJLyoKKwkg KiBQYXJlbnQgZGV2aWNlIGZyb20gdGhlIE1URCBwYXJ0aXRpb24gcG9pbnQgb2Ygdmlldy4KKwkg KgorCSAqIE1URCBtYXN0ZXJzIGRvIG5vdCBoYXZlIGFueSBwYXJlbnQsIE1URCBwYXJ0aXRpb25z IGRvLiBUaGUgcGFyZW50CisJICogTVREIGRldmljZSBjYW4gaXRzZWxmIGJlIGEgcGFydGl0aW9u LgorCSAqLworCXN0cnVjdCBtdGRfaW5mbyAqcGFyZW50OworCisJLyogTGlzdCBvZiBwYXJ0aXRp b25zIGF0dGFjaGVkIHRvIHRoaXMgTVREIGRldmljZSAqLworCXN0cnVjdCBsaXN0X2hlYWQgcGFy dGl0aW9uczsKKworCXVuaW9uIHsKKwkJc3RydWN0IG10ZF9wYXJ0IHBhcnQ7CisJCXN0cnVjdCBt dGRfbWFzdGVyIG1hc3RlcjsKKwl9OwogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRkX2lu Zm8gKm10ZF9nZXRfbWFzdGVyKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXdoaWxlIChtdGQt PnBhcmVudCkKKwkJbXRkID0gbXRkLT5wYXJlbnQ7CisKKwlyZXR1cm4gbXRkOworfQorCitzdGF0 aWMgaW5saW5lIHU2NCBtdGRfZ2V0X21hc3Rlcl9vZnMoc3RydWN0IG10ZF9pbmZvICptdGQsIHU2 NCBvZnMpCit7CisJd2hpbGUgKG10ZC0+cGFyZW50KSB7CisJCW9mcyArPSBtdGQtPnBhcnQub2Zm c2V0OworCQltdGQgPSBtdGQtPnBhcmVudDsKKwl9CisKKwlyZXR1cm4gb2ZzOworfQorCitzdGF0 aWMgaW5saW5lIGJvb2wgbXRkX2lzX3BhcnRpdGlvbihjb25zdCBzdHJ1Y3QgbXRkX2luZm8gKm10 ZCkKK3sKKwlyZXR1cm4gbXRkLT5wYXJlbnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBtdGRf aGFzX3BhcnRpdGlvbnMoY29uc3Qgc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJcmV0dXJuICFs aXN0X2VtcHR5KCZtdGQtPnBhcnRpdGlvbnMpOworfQorCiBpbnQgbXRkX29vYmxheW91dF9lY2Mo c3RydWN0IG10ZF9pbmZvICptdGQsIGludCBzZWN0aW9uLAogCQkgICAgICBzdHJ1Y3QgbXRkX29v Yl9yZWdpb24gKm9vYmVjYyk7CiBpbnQgbXRkX29vYmxheW91dF9maW5kX2VjY3JlZ2lvbihzdHJ1 Y3QgbXRkX2luZm8gKm10ZCwgaW50IGVjY2J5dGUsCkBAIC0zOTIsMTMgKzQ3MCwxNiBAQCBzdGF0 aWMgaW5saW5lIHUzMiBtdGRfb29iYXZhaWwoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBt dGRfb29iX29wcyAqb3BzKQogc3RhdGljIGlubGluZSBpbnQgbXRkX21heF9iYWRfYmxvY2tzKHN0 cnVjdCBtdGRfaW5mbyAqbXRkLAogCQkJCSAgICAgbG9mZl90IG9mcywgc2l6ZV90IGxlbikKIHsK LQlpZiAoIW10ZC0+X21heF9iYWRfYmxvY2tzKQorCXN0cnVjdCBtdGRfaW5mbyAqbWFzdGVyID0g bXRkX2dldF9tYXN0ZXIobXRkKTsKKworCWlmICghbWFzdGVyLT5fbWF4X2JhZF9ibG9ja3MpCiAJ CXJldHVybiAtRU5PVFNVUFA7CiAKIAlpZiAobXRkLT5zaXplIDwgKGxlbiArIG9mcykgfHwgb2Zz IDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXR1cm4gbXRkLT5fbWF4X2JhZF9ibG9ja3Mo bXRkLCBvZnMsIGxlbik7CisJcmV0dXJuIG1hc3Rlci0+X21heF9iYWRfYmxvY2tzKG1hc3Rlciwg bXRkX2dldF9tYXN0ZXJfb2ZzKG10ZCwgb2ZzKSwKKwkJCQkgICAgICAgbGVuKTsKIH0KIAogaW50 IG10ZF93dW5pdF90b19wYWlyaW5nX2luZm8oc3RydWN0IG10ZF9pbmZvICptdGQsIGludCB3dW5p dCwKQEAgLTQzOSw4ICs1MjAsMTAgQEAgaW50IG10ZF93cml0ZXYoc3RydWN0IG10ZF9pbmZvICpt dGQsIGNvbnN0IHN0cnVjdCBrdmVjICp2ZWNzLAogCiBzdGF0aWMgaW5saW5lIHZvaWQgbXRkX3N5 bmMoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7Ci0JaWYgKG10ZC0+X3N5bmMpCi0JCW10ZC0+X3N5 bmMobXRkKTsKKwlzdHJ1Y3QgbXRkX2luZm8gKm1hc3RlciA9IG10ZF9nZXRfbWFzdGVyKG10ZCk7 CisKKwlpZiAobWFzdGVyLT5fc3luYykKKwkJbWFzdGVyLT5fc3luYyhtYXN0ZXIpOwogfQogCiBp bnQgbXRkX2xvY2soc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIHVpbnQ2NF90IGxl bik7CkBAIC00NTIsMTMgKzUzNSwzMSBAQCBpbnQgbXRkX2Jsb2NrX21hcmtiYWQoc3RydWN0IG10 ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMpOwogCiBzdGF0aWMgaW5saW5lIGludCBtdGRfc3VzcGVu ZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKLQlyZXR1cm4gbXRkLT5fc3VzcGVuZCA/IG10ZC0+ X3N1c3BlbmQobXRkKSA6IDA7CisJc3RydWN0IG10ZF9pbmZvICptYXN0ZXIgPSBtdGRfZ2V0X21h c3RlcihtdGQpOworCWludCByZXQ7CisKKwlpZiAobWFzdGVyLT5tYXN0ZXIuc3VzcGVuZGVkKQor CQlyZXR1cm4gMDsKKworCXJldCA9IG1hc3Rlci0+X3N1c3BlbmQgPyBtYXN0ZXItPl9zdXNwZW5k KG1hc3RlcikgOiAwOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwltYXN0ZXItPm1hc3Rl ci5zdXNwZW5kZWQgPSAxOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbXRk X3Jlc3VtZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKLQlpZiAobXRkLT5fcmVzdW1lKQotCQlt dGQtPl9yZXN1bWUobXRkKTsKKwlzdHJ1Y3QgbXRkX2luZm8gKm1hc3RlciA9IG10ZF9nZXRfbWFz dGVyKG10ZCk7CisKKwlpZiAoIW1hc3Rlci0+bWFzdGVyLnN1c3BlbmRlZCkKKwkJcmV0dXJuOwor CisJaWYgKG1hc3Rlci0+X3Jlc3VtZSkKKwkJbWFzdGVyLT5fcmVzdW1lKG1hc3Rlcik7CisKKwlt YXN0ZXItPm1hc3Rlci5zdXNwZW5kZWQgPSAwOwogfQogCiBzdGF0aWMgaW5saW5lIHVpbnQzMl90 IG10ZF9kaXZfYnlfZWIodWludDY0X3Qgc3osIHN0cnVjdCBtdGRfaW5mbyAqbXRkKQpAQCAtNTM4 LDcgKzYzOSw5IEBAIHN0YXRpYyBpbmxpbmUgbG9mZl90IG10ZF93dW5pdF90b19vZmZzZXQoc3Ry dWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBiYXNlLAogCiBzdGF0aWMgaW5saW5lIGludCBtdGRf aGFzX29vYihjb25zdCBzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKLQlyZXR1cm4gbXRkLT5fcmVh ZF9vb2IgJiYgbXRkLT5fd3JpdGVfb29iOworCXN0cnVjdCBtdGRfaW5mbyAqbWFzdGVyID0gbXRk X2dldF9tYXN0ZXIoKHN0cnVjdCBtdGRfaW5mbyAqKW10ZCk7CisKKwlyZXR1cm4gbWFzdGVyLT5f cmVhZF9vb2IgJiYgbWFzdGVyLT5fd3JpdGVfb29iOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBt dGRfdHlwZV9pc19uYW5kKGNvbnN0IHN0cnVjdCBtdGRfaW5mbyAqbXRkKQpAQCAtNTQ4LDcgKzY1 MSw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IG10ZF90eXBlX2lzX25hbmQoY29uc3Qgc3RydWN0IG10 ZF9pbmZvICptdGQpCiAKIHN0YXRpYyBpbmxpbmUgaW50IG10ZF9jYW5faGF2ZV9iYihjb25zdCBz dHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKLQlyZXR1cm4gISFtdGQtPl9ibG9ja19pc2JhZDsKKwlz dHJ1Y3QgbXRkX2luZm8gKm1hc3RlciA9IG10ZF9nZXRfbWFzdGVyKChzdHJ1Y3QgbXRkX2luZm8g KiltdGQpOworCisJcmV0dXJuICEhbWFzdGVyLT5fYmxvY2tfaXNiYWQ7CiB9CiAKIAkvKiBLZXJu ZWwtc2lkZSBpb2N0bCBkZWZpbml0aW9ucyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9t dGQvcGFydGl0aW9ucy5oIGIvaW5jbHVkZS9saW51eC9tdGQvcGFydGl0aW9ucy5oCmluZGV4IDEx Y2IwYzUwY2Q4NC4uZTU0NWMwNTBkM2U4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9w YXJ0aXRpb25zLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvcGFydGl0aW9ucy5oCkBAIC0xMDUs NyArMTA1LDYgQEAgZXh0ZXJuIHZvaWQgZGVyZWdpc3Rlcl9tdGRfcGFyc2VyKHN0cnVjdCBtdGRf cGFydF9wYXJzZXIgKnBhcnNlcik7CiAJbW9kdWxlX2RyaXZlcihfX210ZF9wYXJ0X3BhcnNlciwg cmVnaXN0ZXJfbXRkX3BhcnNlciwgXAogCQkgICAgICBkZXJlZ2lzdGVyX210ZF9wYXJzZXIpCiAK LWludCBtdGRfaXNfcGFydGl0aW9uKGNvbnN0IHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKIGludCBt dGRfYWRkX3BhcnRpdGlvbihzdHJ1Y3QgbXRkX2luZm8gKm1hc3RlciwgY29uc3QgY2hhciAqbmFt ZSwKIAkJICAgICAgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxlbmd0aCk7CiBpbnQgbXRk X2RlbF9wYXJ0aXRpb24oc3RydWN0IG10ZF9pbmZvICptYXN0ZXIsIGludCBwYXJ0bm8pOwotLSAK Mi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCkxpbnV4IE1URCBkaXNjdXNzaW9uIG1haWxpbmcgbGlzdApodHRwOi8vbGlzdHMuaW5m cmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LW10ZC8K