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 936D4C2D0C2 for ; Mon, 30 Dec 2019 11:20:40 +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 5A46B206DB for ; Mon, 30 Dec 2019 11:20:40 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="bpLGHFCx" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5A46B206DB 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=Cal9reI1hSpUf0v1HOv/DVGbAxjxd98g+7sL6kM35wE=; b=bpLGHFCx/7YNdR 4KDtU9Mh41HviI4VJ1fnwuhfD6HhBuyu6fTTru0XxHdGkGVY21ZKxsW13fJStuX5t02OKgbINkOWA BrAWBQZbVWYDHUgvhLtG1ceunfTmvDMSYRaey/0X6jy1hBR4vVzKN8LHWgd4J670Wg6Ogrd2DM45M T827LuXuBcdzMvkB9BoBFJHhwNxk+bMCzehmHt6lAnpRm3l7gREmJg2p4H5LF8hF8EkPOzb2UY3VY wXtLKihAy8hrRePN82qSv0/wmD104MklDOX5ad8CSccdG+zBY1PBKZeW0a2lluhxqy0BPabICNKxy I0IG/GbKqM8Oq/8rYPhw==; 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 1ilt5t-0000kD-Ih; Mon, 30 Dec 2019 11:20:17 +0000 Received: from relay1-d.mail.gandi.net ([217.70.183.193]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1ilt5m-0007xG-Tv for linux-mtd@lists.infradead.org; Mon, 30 Dec 2019 11:20:16 +0000 X-Originating-IP: 91.224.148.103 Received: from localhost.localdomain (unknown [91.224.148.103]) (Authenticated sender: miquel.raynal@bootlin.com) by relay1-d.mail.gandi.net (Postfix) with ESMTPSA id 238AF240009; Mon, 30 Dec 2019 11:19:50 +0000 (UTC) From: Miquel Raynal To: Richard Weinberger , Vignesh Raghavendra , Tudor Ambarus , Subject: [PATCH v2] mtd: implement proper partition handling Date: Mon, 30 Dec 2019 12:19:48 +0100 Message-Id: <20191230111948.27005-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-20191230_032011_394006_9BE7BA7F X-CRM114-Status: GOOD ( 20.02 ) 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 , Thomas Petazzoni , 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 bT4KLS0tCgpDaGFuZ2VzIHNpbmNlIHYxOgoqIFJlYmFzZWQgb24gYSBtYWlubGluZSBrZXJuZWwu CiogRml4ZWQgdGhlIG10ZF9nZXRfZGV2aWNlX3NpemUoKSBoZWxwZXIgYnkgYWRyZXNzaW5nIHRo ZSBjYXNlIHdoZXJlCiAgdGhlcmUgYXJlIG11bHRpcGxlIGxldmVscyBvZiBwYXJ0aXRpb25zLgoq IENoYW5nZWQgdGhlIGdsb2JhbCBsb2NrIGludG8gYSBwZXItbXRkLW9iamVjdCBsb2NrLgoqIFR5 cG9zL3NwYWNlcy4KCiBkcml2ZXJzL210ZC9tdGRjaGFyLmMgICAgICAgICAgfCAgMTIgKy0KIGRy aXZlcnMvbXRkL210ZGNvcmUuYyAgICAgICAgICB8IDI1MCArKysrKysrKy0tLS0KIGRyaXZlcnMv bXRkL210ZHBhcnQuYyAgICAgICAgICB8IDY5NyArKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KIGluY2x1ZGUvbGludXgvbXRkL210ZC5oICAgICAgICB8IDEyMiArKysrKy0KIGluY2x1 ZGUvbGludXgvbXRkL3BhcnRpdGlvbnMuaCB8ICAgMSAtCiA1IGZpbGVzIGNoYW5nZWQsIDQ3NiBp bnNlcnRpb25zKCspLCA2MDYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQv bXRkY2hhci5jIGIvZHJpdmVycy9tdGQvbXRkY2hhci5jCmluZGV4IGI4NDEwMDhhOWViNy4uYzU5 MzViMmY5Y2QxIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRjaGFyLmMKKysrIGIvZHJpdmVy cy9tdGQvbXRkY2hhci5jCkBAIC0zNDksNiArMzQ5LDcgQEAgc3RhdGljIGludCBtdGRjaGFyX3dy aXRlb29iKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKIAl1aW50NjRf dCBzdGFydCwgdWludDMyX3QgbGVuZ3RoLCB2b2lkIF9fdXNlciAqcHRyLAogCXVpbnQzMl90IF9f dXNlciAqcmV0cCkKIHsKKwlzdHJ1Y3QgbXRkX2luZm8gKm1hc3RlciAgPSBtdGRfZ2V0X21hc3Rl cihtdGQpOwogCXN0cnVjdCBtdGRfZmlsZV9pbmZvICptZmkgPSBmaWxlLT5wcml2YXRlX2RhdGE7 CiAJc3RydWN0IG10ZF9vb2Jfb3BzIG9wcyA9IHt9OwogCXVpbnQzMl90IHJldGxlbjsKQEAgLTM2 MCw3ICszNjEsNyBAQCBzdGF0aWMgaW50IG10ZGNoYXJfd3JpdGVvb2Ioc3RydWN0IGZpbGUgKmZp bGUsIHN0cnVjdCBtdGRfaW5mbyAqbXRkLAogCWlmIChsZW5ndGggPiA0MDk2KQogCQlyZXR1cm4g LUVJTlZBTDsKIAotCWlmICghbXRkLT5fd3JpdGVfb29iKQorCWlmICghbWFzdGVyLT5fd3JpdGVf b29iKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlvcHMub29ibGVuID0gbGVuZ3RoOwpAQCAt NTg2LDYgKzU4Nyw3IEBAIHN0YXRpYyBpbnQgbXRkY2hhcl9ibGtwZ19pb2N0bChzdHJ1Y3QgbXRk X2luZm8gKm10ZCwKIHN0YXRpYyBpbnQgbXRkY2hhcl93cml0ZV9pb2N0bChzdHJ1Y3QgbXRkX2lu Zm8gKm10ZCwKIAkJc3RydWN0IG10ZF93cml0ZV9yZXEgX191c2VyICphcmdwKQogeworCXN0cnVj dCBtdGRfaW5mbyAqbWFzdGVyID0gbXRkX2dldF9tYXN0ZXIobXRkKTsKIAlzdHJ1Y3QgbXRkX3dy aXRlX3JlcSByZXE7CiAJc3RydWN0IG10ZF9vb2Jfb3BzIG9wcyA9IHt9OwogCWNvbnN0IHZvaWQg X191c2VyICp1c3JfZGF0YSwgKnVzcl9vb2I7CkBAIC01OTcsOSArNTk5LDggQEAgc3RhdGljIGlu dCBtdGRjaGFyX3dyaXRlX2lvY3RsKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAogCXVzcl9kYXRhID0g KGNvbnN0IHZvaWQgX191c2VyICopKHVpbnRwdHJfdClyZXEudXNyX2RhdGE7CiAJdXNyX29vYiA9 IChjb25zdCB2b2lkIF9fdXNlciAqKSh1aW50cHRyX3QpcmVxLnVzcl9vb2I7CiAKLQlpZiAoIW10 ZC0+X3dyaXRlX29vYikKKwlpZiAoIW1hc3Rlci0+X3dyaXRlX29vYikKIAkJcmV0dXJuIC1FT1BO T1RTVVBQOwotCiAJb3BzLm1vZGUgPSByZXEubW9kZTsKIAlvcHMubGVuID0gKHNpemVfdClyZXEu bGVuOwogCW9wcy5vb2JsZW4gPSAoc2l6ZV90KXJlcS5vb2JsZW47CkBAIC02MzUsNiArNjM2LDcg QEAgc3RhdGljIGludCBtdGRjaGFyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1X2ludCBjbWQs IHVfbG9uZyBhcmcpCiB7CiAJc3RydWN0IG10ZF9maWxlX2luZm8gKm1maSA9IGZpbGUtPnByaXZh dGVfZGF0YTsKIAlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG1maS0+bXRkOworCXN0cnVjdCBtdGRf aW5mbyAqbWFzdGVyID0gbXRkX2dldF9tYXN0ZXIobXRkKTsKIAl2b2lkIF9fdXNlciAqYXJncCA9 ICh2b2lkIF9fdXNlciAqKWFyZzsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgbXRkX2luZm9fdXNl ciBpbmZvOwpAQCAtODI0LDcgKzgyNiw3IEBAIHN0YXRpYyBpbnQgbXRkY2hhcl9pb2N0bChzdHJ1 Y3QgZmlsZSAqZmlsZSwgdV9pbnQgY21kLCB1X2xvbmcgYXJnKQogCXsKIAkJc3RydWN0IG5hbmRf b29iaW5mbyBvaTsKIAotCQlpZiAoIW10ZC0+b29ibGF5b3V0KQorCQlpZiAoIW1hc3Rlci0+b29i bGF5b3V0KQogCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJCXJldCA9IGdldF9vb2JpbmZvKG10 ZCwgJm9pKTsKQEAgLTkxOCw3ICs5MjAsNyBAQCBzdGF0aWMgaW50IG10ZGNoYXJfaW9jdGwoc3Ry dWN0IGZpbGUgKmZpbGUsIHVfaW50IGNtZCwgdV9sb25nIGFyZykKIAl7CiAJCXN0cnVjdCBuYW5k X2VjY2xheW91dF91c2VyICp1c3JsYXk7CiAKLQkJaWYgKCFtdGQtPm9vYmxheW91dCkKKwkJaWYg KCFtYXN0ZXItPm9vYmxheW91dCkKIAkJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCQl1c3JsYXkg PSBrbWFsbG9jKHNpemVvZigqdXNybGF5KSwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9kcml2 ZXJzL210ZC9tdGRjb3JlLmMgYi9kcml2ZXJzL210ZC9tdGRjb3JlLmMKaW5kZXggNWZhYzQzNTVi OWMyLi4yOTE2Njc0MjA4YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL210ZGNvcmUuYworKysg Yi9kcml2ZXJzL210ZC9tdGRjb3JlLmMKQEAgLTQ1NiwxMyArNDU2LDE0IEBAIHN0YXRpYyBpbnQg bXRkX3JlYm9vdF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm4sIHVuc2lnbmVkIGxv bmcgc3RhdGUsCiBpbnQgbXRkX3d1bml0X3RvX3BhaXJpbmdfaW5mbyhzdHJ1Y3QgbXRkX2luZm8g Km10ZCwgaW50IHd1bml0LAogCQkJICAgICAgc3RydWN0IG10ZF9wYWlyaW5nX2luZm8gKmluZm8p CiB7Ci0JaW50IG5wYWlycyA9IG10ZF93dW5pdF9wZXJfZWIobXRkKSAvIG10ZF9wYWlyaW5nX2dy b3VwcyhtdGQpOworCXN0cnVjdCBtdGRfaW5mbyAqbWFzdGVyID0gbXRkX2dldF9tYXN0ZXIobXRk KTsKKwlpbnQgbnBhaXJzID0gbXRkX3d1bml0X3Blcl9lYihtYXN0ZXIpIC8gbXRkX3BhaXJpbmdf Z3JvdXBzKG1hc3Rlcik7CiAKIAlpZiAod3VuaXQgPCAwIHx8IHd1bml0ID49IG5wYWlycykKIAkJ cmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAobXRkLT5wYWlyaW5nICYmIG10ZC0+cGFpcmluZy0+Z2V0 X2luZm8pCi0JCXJldHVybiBtdGQtPnBhaXJpbmctPmdldF9pbmZvKG10ZCwgd3VuaXQsIGluZm8p OworCWlmIChtYXN0ZXItPnBhaXJpbmcgJiYgbWFzdGVyLT5wYWlyaW5nLT5nZXRfaW5mbykKKwkJ cmV0dXJuIG1hc3Rlci0+cGFpcmluZy0+Z2V0X2luZm8obWFzdGVyLCB3dW5pdCwgaW5mbyk7CiAK IAlpbmZvLT5ncm91cCA9IDA7CiAJaW5mby0+cGFpciA9IHd1bml0OwpAQCAtNDk4LDE1ICs0OTks MTYgQEAgRVhQT1JUX1NZTUJPTF9HUEwobXRkX3d1bml0X3RvX3BhaXJpbmdfaW5mbyk7CiBpbnQg bXRkX3BhaXJpbmdfaW5mb190b193dW5pdChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKIAkJCSAgICAg IGNvbnN0IHN0cnVjdCBtdGRfcGFpcmluZ19pbmZvICppbmZvKQogewotCWludCBuZ3JvdXBzID0g bXRkX3BhaXJpbmdfZ3JvdXBzKG10ZCk7Ci0JaW50IG5wYWlycyA9IG10ZF93dW5pdF9wZXJfZWIo bXRkKSAvIG5ncm91cHM7CisJc3RydWN0IG10ZF9pbmZvICptYXN0ZXIgPSBtdGRfZ2V0X21hc3Rl cihtdGQpOworCWludCBuZ3JvdXBzID0gbXRkX3BhaXJpbmdfZ3JvdXBzKG1hc3Rlcik7CisJaW50 IG5wYWlycyA9IG10ZF93dW5pdF9wZXJfZWIobWFzdGVyKSAvIG5ncm91cHM7CiAKIAlpZiAoIWlu Zm8gfHwgaW5mby0+cGFpciA8IDAgfHwgaW5mby0+cGFpciA+PSBucGFpcnMgfHwKIAkgICAgaW5m by0+Z3JvdXAgPCAwIHx8IGluZm8tPmdyb3VwID49IG5ncm91cHMpCiAJCXJldHVybiAtRUlOVkFM OwogCi0JaWYgKG10ZC0+cGFpcmluZyAmJiBtdGQtPnBhaXJpbmctPmdldF93dW5pdCkKLQkJcmV0 dXJuIG10ZC0+cGFpcmluZy0+Z2V0X3d1bml0KG10ZCwgaW5mbyk7CisJaWYgKG1hc3Rlci0+cGFp cmluZyAmJiBtYXN0ZXItPnBhaXJpbmctPmdldF93dW5pdCkKKwkJcmV0dXJuIG10ZC0+cGFpcmlu Zy0+Z2V0X3d1bml0KG1hc3RlciwgaW5mbyk7CiAKIAlyZXR1cm4gaW5mby0+cGFpcjsKIH0KQEAg LTUyNCwxMCArNTI2LDEyIEBAIEVYUE9SVF9TWU1CT0xfR1BMKG10ZF9wYWlyaW5nX2luZm9fdG9f d3VuaXQpOwogICovCiBpbnQgbXRkX3BhaXJpbmdfZ3JvdXBzKHN0cnVjdCBtdGRfaW5mbyAqbXRk KQogewotCWlmICghbXRkLT5wYWlyaW5nIHx8ICFtdGQtPnBhaXJpbmctPm5ncm91cHMpCisJc3Ry dWN0IG10ZF9pbmZvICptYXN0ZXIgPSBtdGRfZ2V0X21hc3RlcihtdGQpOworCisJaWYgKCFtYXN0 ZXItPnBhaXJpbmcgfHwgIW1hc3Rlci0+cGFpcmluZy0+bmdyb3VwcykKIAkJcmV0dXJuIDE7CiAK LQlyZXR1cm4gbXRkLT5wYWlyaW5nLT5uZ3JvdXBzOworCXJldHVybiBtYXN0ZXItPnBhaXJpbmct Pm5ncm91cHM7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtdGRfcGFpcmluZ19ncm91cHMpOwogCkBA IC01ODcsNiArNTkxLDcgQEAgc3RhdGljIGludCBtdGRfbnZtZW1fYWRkKHN0cnVjdCBtdGRfaW5m byAqbXRkKQogCiBpbnQgYWRkX210ZF9kZXZpY2Uoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7CisJ c3RydWN0IG10ZF9pbmZvICptYXN0ZXIgPSBtdGRfZ2V0X21hc3RlcihtdGQpOwogCXN0cnVjdCBt dGRfbm90aWZpZXIgKm5vdDsKIAlpbnQgaSwgZXJyb3I7CiAKQEAgLTYwOCw3ICs2MTMsNyBAQCBp bnQgYWRkX210ZF9kZXZpY2Uoc3RydWN0IG10ZF9pbmZvICptdGQpCiAJCSAgICAobXRkLT5fcmVh ZCAmJiBtdGQtPl9yZWFkX29vYikpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChXQVJOX09O KCghbXRkLT5lcmFzZXNpemUgfHwgIW10ZC0+X2VyYXNlKSAmJgorCWlmIChXQVJOX09OKCghbXRk LT5lcmFzZXNpemUgfHwgIW1hc3Rlci0+X2VyYXNlKSAmJgogCQkgICAgIShtdGQtPmZsYWdzICYg TVREX05PX0VSQVNFKSkpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC03NjUsNyArNzcwLDggQEAg c3RhdGljIHZvaWQgbXRkX3NldF9kZXZfZGVmYXVsdHMoc3RydWN0IG10ZF9pbmZvICptdGQpCiAJ CXByX2RlYnVnKCJtdGQgZGV2aWNlIHdvbid0IHNob3cgYSBkZXZpY2Ugc3ltbGluayBpbiBzeXNm c1xuIik7CiAJfQogCi0JbXRkLT5vcmlnX2ZsYWdzID0gbXRkLT5mbGFnczsKKwlJTklUX0xJU1Rf SEVBRCgmbXRkLT5wYXJ0aXRpb25zKTsKKwltdXRleF9pbml0KCZtdGQtPm1hc3Rlci5wYXJ0aXRp b25zX2xvY2spOwogfQogCiAvKioKQEAgLTk3MSwyMCArOTc3LDI2IEBAIEVYUE9SVF9TWU1CT0xf R1BMKGdldF9tdGRfZGV2aWNlKTsKIAogaW50IF9fZ2V0X210ZF9kZXZpY2Uoc3RydWN0IG10ZF9p bmZvICptdGQpCiB7CisJc3RydWN0IG10ZF9pbmZvICptYXN0ZXIgPSBtdGRfZ2V0X21hc3Rlciht dGQpOwogCWludCBlcnI7CiAKLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KG10ZC0+b3duZXIpKQorCWlm ICghdHJ5X21vZHVsZV9nZXQobWFzdGVyLT5vd25lcikpCiAJCXJldHVybiAtRU5PREVWOwogCi0J aWYgKG10ZC0+X2dldF9kZXZpY2UpIHsKLQkJZXJyID0gbXRkLT5fZ2V0X2RldmljZShtdGQpOwor CWlmIChtYXN0ZXItPl9nZXRfZGV2aWNlKSB7CisJCWVyciA9IG1hc3Rlci0+X2dldF9kZXZpY2Uo bXRkKTsKIAogCQlpZiAoZXJyKSB7Ci0JCQltb2R1bGVfcHV0KG10ZC0+b3duZXIpOworCQkJbW9k dWxlX3B1dChtYXN0ZXItPm93bmVyKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIAl9Ci0JbXRkLT51 c2Vjb3VudCsrOworCisJd2hpbGUgKG10ZC0+cGFyZW50KSB7CisJCW10ZC0+dXNlY291bnQrKzsK KwkJbXRkID0gbXRkLT5wYXJlbnQ7CisJfQorCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9M X0dQTChfX2dldF9tdGRfZGV2aWNlKTsKQEAgLTEwMzgsMTMgKzEwNTAsMTggQEAgRVhQT1JUX1NZ TUJPTF9HUEwocHV0X210ZF9kZXZpY2UpOwogCiB2b2lkIF9fcHV0X210ZF9kZXZpY2Uoc3RydWN0 IG10ZF9pbmZvICptdGQpCiB7Ci0JLS1tdGQtPnVzZWNvdW50OwotCUJVR19PTihtdGQtPnVzZWNv dW50IDwgMCk7CisJc3RydWN0IG10ZF9pbmZvICptYXN0ZXIgPSBtdGRfZ2V0X21hc3RlcihtdGQp OwogCi0JaWYgKG10ZC0+X3B1dF9kZXZpY2UpCi0JCW10ZC0+X3B1dF9kZXZpY2UobXRkKTsKKwl3 aGlsZSAobXRkLT5wYXJlbnQpIHsKKwkJLS1tdGQtPnVzZWNvdW50OworCQlCVUdfT04obXRkLT51 c2Vjb3VudCA8IDApOworCQltdGQgPSBtdGQtPnBhcmVudDsKKwl9CiAKLQltb2R1bGVfcHV0KG10 ZC0+b3duZXIpOworCWlmIChtYXN0ZXItPl9wdXRfZGV2aWNlKQorCQltYXN0ZXItPl9wdXRfZGV2 aWNlKG1hc3Rlcik7CisKKwltb2R1bGVfcHV0KG1hc3Rlci0+b3duZXIpOwogfQogRVhQT1JUX1NZ TUJPTF9HUEwoX19wdXRfbXRkX2RldmljZSk7CiAKQEAgLTEwNTUsOSArMTA3MiwxMyBAQCBFWFBP UlRfU1lNQk9MX0dQTChfX3B1dF9tdGRfZGV2aWNlKTsKICAqLwogaW50IG10ZF9lcmFzZShzdHJ1 Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IGVyYXNlX2luZm8gKmluc3RyKQogeworCXN0cnVjdCBt dGRfaW5mbyAqbWFzdGVyID0gbXRkX2dldF9tYXN0ZXIobXRkKTsKKwl1NjQgbXN0X29mcyA9IG10 ZF9nZXRfbWFzdGVyX29mcyhtdGQsIDApOworCWludCByZXQ7CisKIAlpbnN0ci0+ZmFpbF9hZGRy ID0gTVREX0ZBSUxfQUREUl9VTktOT1dOOwogCi0JaWYgKCFtdGQtPmVyYXNlc2l6ZSB8fCAhbXRk LT5fZXJhc2UpCisJaWYgKCFtdGQtPmVyYXNlc2l6ZSB8fCAhbWFzdGVyLT5fZXJhc2UpCiAJCXJl dHVybiAtRU5PVFNVUFA7CiAKIAlpZiAoaW5zdHItPmFkZHIgPj0gbXRkLT5zaXplIHx8IGluc3Ry LT5sZW4gPiBtdGQtPnNpemUgLSBpbnN0ci0+YWRkcikKQEAgLTEwNjksNyArMTA5MCwxNCBAQCBp bnQgbXRkX2VyYXNlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5z dHIpCiAJCXJldHVybiAwOwogCiAJbGVkdHJpZ19tdGRfYWN0aXZpdHkoKTsKLQlyZXR1cm4gbXRk LT5fZXJhc2UobXRkLCBpbnN0cik7CisKKwlpbnN0ci0+YWRkciArPSBtc3Rfb2ZzOworCXJldCA9 IG1hc3Rlci0+X2VyYXNlKG1hc3RlciwgaW5zdHIpOworCWlmIChpbnN0ci0+ZmFpbF9hZGRyICE9 IE1URF9GQUlMX0FERFJfVU5LTk9XTikKKwkJaW5zdHItPmZhaWxfYWRkciAtPSBtc3Rfb2ZzOwor CisJaW5zdHItPmFkZHIgLT0gbXN0X29mczsKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJP TF9HUEwobXRkX2VyYXNlKTsKIApAQCAtMTA3OSwzMCArMTEwNywzNiBAQCBFWFBPUlRfU1lNQk9M X0dQTChtdGRfZXJhc2UpOwogaW50IG10ZF9wb2ludChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9m Zl90IGZyb20sIHNpemVfdCBsZW4sIHNpemVfdCAqcmV0bGVuLAogCSAgICAgIHZvaWQgKip2aXJ0 LCByZXNvdXJjZV9zaXplX3QgKnBoeXMpCiB7CisJc3RydWN0IG10ZF9pbmZvICptYXN0ZXIgPSBt dGRfZ2V0X21hc3RlcihtdGQpOworCiAJKnJldGxlbiA9IDA7CiAJKnZpcnQgPSBOVUxMOwogCWlm IChwaHlzKQogCQkqcGh5cyA9IDA7Ci0JaWYgKCFtdGQtPl9wb2ludCkKKwlpZiAoIW1hc3Rlci0+ X3BvaW50KQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJaWYgKGZyb20gPCAwIHx8IGZyb20gPj0g bXRkLT5zaXplIHx8IGxlbiA+IG10ZC0+c2l6ZSAtIGZyb20pCiAJCXJldHVybiAtRUlOVkFMOwog CWlmICghbGVuKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gbXRkLT5fcG9pbnQobXRkLCBmcm9tLCBs ZW4sIHJldGxlbiwgdmlydCwgcGh5cyk7CisKKwlmcm9tID0gbXRkX2dldF9tYXN0ZXJfb2ZzKG10 ZCwgZnJvbSk7CisJcmV0dXJuIG1hc3Rlci0+X3BvaW50KG1hc3RlciwgZnJvbSwgbGVuLCByZXRs ZW4sIHZpcnQsIHBoeXMpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobXRkX3BvaW50KTsKIAogLyog V2UgcHJvYmFibHkgc2hvdWxkbid0IGFsbG93IFhJUCBpZiB0aGUgdW5wb2ludCBpc24ndCBhIE5V TEwgKi8KIGludCBtdGRfdW5wb2ludChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20s IHNpemVfdCBsZW4pCiB7Ci0JaWYgKCFtdGQtPl91bnBvaW50KQorCXN0cnVjdCBtdGRfaW5mbyAq bWFzdGVyID0gbXRkX2dldF9tYXN0ZXIobXRkKTsKKworCWlmICghbWFzdGVyLT5fdW5wb2ludCkK IAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCWlmIChmcm9tIDwgMCB8fCBmcm9tID49IG10ZC0+c2l6 ZSB8fCBsZW4gPiBtdGQtPnNpemUgLSBmcm9tKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoIWxl bikKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIG10ZC0+X3VucG9pbnQobXRkLCBmcm9tLCBsZW4pOwor CXJldHVybiBtYXN0ZXItPl91bnBvaW50KG1hc3RlciwgbXRkX2dldF9tYXN0ZXJfb2ZzKG10ZCwg ZnJvbSksIGxlbik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtdGRfdW5wb2ludCk7CiAKQEAgLTEx MjksNiArMTE2MywyNSBAQCB1bnNpZ25lZCBsb25nIG10ZF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1 Y3QgbXRkX2luZm8gKm10ZCwgdW5zaWduZWQgbG9uZyBsZW4sCiB9CiBFWFBPUlRfU1lNQk9MX0dQ TChtdGRfZ2V0X3VubWFwcGVkX2FyZWEpOwogCitzdGF0aWMgdm9pZCBtdGRfdXBkYXRlX2VjY19z dGF0cyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG10ZF9pbmZvICptYXN0ZXIsCisJCQkJ IGNvbnN0IHN0cnVjdCBtdGRfZWNjX3N0YXRzICpvbGRfc3RhdHMpCit7CisJc3RydWN0IG10ZF9l Y2Nfc3RhdHMgZGlmZjsKKworCWlmIChtYXN0ZXIgPT0gbXRkKQorCQlyZXR1cm47CisKKwlkaWZm ID0gbWFzdGVyLT5lY2Nfc3RhdHM7CisJZGlmZi5mYWlsZWQgLT0gb2xkX3N0YXRzLT5mYWlsZWQ7 CisJZGlmZi5jb3JyZWN0ZWQgLT0gb2xkX3N0YXRzLT5jb3JyZWN0ZWQ7CisKKwl3aGlsZSAobXRk LT5wYXJlbnQpIHsKKwkJbXRkLT5lY2Nfc3RhdHMuZmFpbGVkICs9IGRpZmYuZmFpbGVkOworCQlt dGQtPmVjY19zdGF0cy5jb3JyZWN0ZWQgKz0gZGlmZi5jb3JyZWN0ZWQ7CisJCW10ZCA9IG10ZC0+ cGFyZW50OworCX0KK30KKwogaW50IG10ZF9yZWFkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2Zm X3QgZnJvbSwgc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sCiAJICAgICB1X2NoYXIgKmJ1ZikK IHsKQEAgLTExNzEsOCArMTIyNCwxMCBAQCBFWFBPUlRfU1lNQk9MX0dQTChtdGRfd3JpdGUpOwog aW50IG10ZF9wYW5pY193cml0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXpl X3QgbGVuLCBzaXplX3QgKnJldGxlbiwKIAkJICAgIGNvbnN0IHVfY2hhciAqYnVmKQogeworCXN0 cnVjdCBtdGRfaW5mbyAqbWFzdGVyID0gbXRkX2dldF9tYXN0ZXIobXRkKTsKKwogCSpyZXRsZW4g PSAwOwotCWlmICghbXRkLT5fcGFuaWNfd3JpdGUpCisJaWYgKCFtYXN0ZXItPl9wYW5pY193cml0 ZSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCWlmICh0byA8IDAgfHwgdG8gPj0gbXRkLT5zaXpl IHx8IGxlbiA+IG10ZC0+c2l6ZSAtIHRvKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTExODMsNyAr MTIzOCw4IEBAIGludCBtdGRfcGFuaWNfd3JpdGUoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZf dCB0bywgc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sCiAJaWYgKCFtdGQtPm9vcHNfcGFuaWNf d3JpdGUpCiAJCW10ZC0+b29wc19wYW5pY193cml0ZSA9IHRydWU7CiAKLQlyZXR1cm4gbXRkLT5f cGFuaWNfd3JpdGUobXRkLCB0bywgbGVuLCByZXRsZW4sIGJ1Zik7CisJcmV0dXJuIG1hc3Rlci0+ X3BhbmljX3dyaXRlKG1hc3RlciwgbXRkX2dldF9tYXN0ZXJfb2ZzKG10ZCwgdG8pLCBsZW4sCisJ CQkJICAgIHJldGxlbiwgYnVmKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG10ZF9wYW5pY193cml0 ZSk7CiAKQEAgLTEyMjIsNyArMTI3OCwxMCBAQCBzdGF0aWMgaW50IG10ZF9jaGVja19vb2Jfb3Bz KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZmcywKIAogaW50IG10ZF9yZWFkX29vYihz dHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHN0cnVjdCBtdGRfb29iX29wcyAqb3Bz KQogeworCXN0cnVjdCBtdGRfaW5mbyAqbWFzdGVyID0gbXRkX2dldF9tYXN0ZXIobXRkKTsKKwlz dHJ1Y3QgbXRkX2VjY19zdGF0cyBvbGRfc3RhdHMgPSBtYXN0ZXItPmVjY19zdGF0czsKIAlpbnQg cmV0X2NvZGU7CisKIAlvcHMtPnJldGxlbiA9IG9wcy0+b29icmV0bGVuID0gMDsKIAogCXJldF9j b2RlID0gbXRkX2NoZWNrX29vYl9vcHMobXRkLCBmcm9tLCBvcHMpOwpAQCAtMTIzMiwxNCArMTI5 MSwxNyBAQCBpbnQgbXRkX3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJv bSwgc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpCiAJbGVkdHJpZ19tdGRfYWN0aXZpdHkoKTsKIAog CS8qIENoZWNrIHRoZSB2YWxpZGl0eSBvZiBhIHBvdGVudGlhbCBmYWxsYmFjayBvbiBtdGQtPl9y ZWFkICovCi0JaWYgKCFtdGQtPl9yZWFkX29vYiAmJiAoIW10ZC0+X3JlYWQgfHwgb3BzLT5vb2Ji dWYpKQorCWlmICghbWFzdGVyLT5fcmVhZF9vb2IgJiYgKCFtYXN0ZXItPl9yZWFkIHx8IG9wcy0+ b29iYnVmKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JaWYgKG10ZC0+X3JlYWRfb29iKQot CQlyZXRfY29kZSA9IG10ZC0+X3JlYWRfb29iKG10ZCwgZnJvbSwgb3BzKTsKKwlmcm9tID0gbXRk X2dldF9tYXN0ZXJfb2ZzKG10ZCwgZnJvbSk7CisJaWYgKG1hc3Rlci0+X3JlYWRfb29iKQorCQly ZXRfY29kZSA9IG1hc3Rlci0+X3JlYWRfb29iKG1hc3RlciwgZnJvbSwgb3BzKTsKIAllbHNlCi0J CXJldF9jb2RlID0gbXRkLT5fcmVhZChtdGQsIGZyb20sIG9wcy0+bGVuLCAmb3BzLT5yZXRsZW4s Ci0JCQkJICAgICAgb3BzLT5kYXRidWYpOworCQlyZXRfY29kZSA9IG1hc3Rlci0+X3JlYWQobWFz dGVyLCBmcm9tLCBvcHMtPmxlbiwgJm9wcy0+cmV0bGVuLAorCQkJCQkgb3BzLT5kYXRidWYpOwor CisJbXRkX3VwZGF0ZV9lY2Nfc3RhdHMobXRkLCBtYXN0ZXIsICZvbGRfc3RhdHMpOwogCiAJLyoK IAkgKiBJbiBjYXNlcyB3aGVyZSBvcHMtPmRhdGJ1ZiAhPSBOVUxMLCBtdGQtPl9yZWFkX29vYigp IGhhcyBzZW1hbnRpY3MKQEAgLTEyNTgsNiArMTMyMCw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKG10 ZF9yZWFkX29vYik7CiBpbnQgbXRkX3dyaXRlX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9m Zl90IHRvLAogCQkJCXN0cnVjdCBtdGRfb29iX29wcyAqb3BzKQogeworCXN0cnVjdCBtdGRfaW5m byAqbWFzdGVyID0gbXRkX2dldF9tYXN0ZXIobXRkKTsKIAlpbnQgcmV0OwogCiAJb3BzLT5yZXRs ZW4gPSBvcHMtPm9vYnJldGxlbiA9IDA7CkBAIC0xMjcyLDE0ICsxMzM1LDE2IEBAIGludCBtdGRf d3JpdGVfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sCiAJbGVkdHJpZ19tdGRf YWN0aXZpdHkoKTsKIAogCS8qIENoZWNrIHRoZSB2YWxpZGl0eSBvZiBhIHBvdGVudGlhbCBmYWxs YmFjayBvbiBtdGQtPl93cml0ZSAqLwotCWlmICghbXRkLT5fd3JpdGVfb29iICYmICghbXRkLT5f d3JpdGUgfHwgb3BzLT5vb2JidWYpKQorCWlmICghbWFzdGVyLT5fd3JpdGVfb29iICYmICghbWFz dGVyLT5fd3JpdGUgfHwgb3BzLT5vb2JidWYpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlp ZiAobXRkLT5fd3JpdGVfb29iKQotCQlyZXR1cm4gbXRkLT5fd3JpdGVfb29iKG10ZCwgdG8sIG9w cyk7CisJdG8gPSBtdGRfZ2V0X21hc3Rlcl9vZnMobXRkLCB0byk7CisKKwlpZiAobWFzdGVyLT5f d3JpdGVfb29iKQorCQlyZXR1cm4gbWFzdGVyLT5fd3JpdGVfb29iKG1hc3RlciwgdG8sIG9wcyk7 CiAJZWxzZQotCQlyZXR1cm4gbXRkLT5fd3JpdGUobXRkLCB0bywgb3BzLT5sZW4sICZvcHMtPnJl dGxlbiwKLQkJCQkgICBvcHMtPmRhdGJ1Zik7CisJCXJldHVybiBtYXN0ZXItPl93cml0ZShtYXN0 ZXIsIHRvLCBvcHMtPmxlbiwgJm9wcy0+cmV0bGVuLAorCQkJCSAgICAgIG9wcy0+ZGF0YnVmKTsK IH0KIEVYUE9SVF9TWU1CT0xfR1BMKG10ZF93cml0ZV9vb2IpOwogCkBAIC0xMzAyLDE1ICsxMzY3 LDE3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKG10ZF93cml0ZV9vb2IpOwogaW50IG10ZF9vb2JsYXlv dXRfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgc2VjdGlvbiwKIAkJICAgICAgc3RydWN0 IG10ZF9vb2JfcmVnaW9uICpvb2JlY2MpCiB7CisJc3RydWN0IG10ZF9pbmZvICptYXN0ZXIgPSBt dGRfZ2V0X21hc3RlcihtdGQpOworCiAJbWVtc2V0KG9vYmVjYywgMCwgc2l6ZW9mKCpvb2JlY2Mp KTsKIAotCWlmICghbXRkIHx8IHNlY3Rpb24gPCAwKQorCWlmICghbWFzdGVyIHx8IHNlY3Rpb24g PCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICghbXRkLT5vb2JsYXlvdXQgfHwgIW10ZC0+ b29ibGF5b3V0LT5lY2MpCisJaWYgKCFtYXN0ZXItPm9vYmxheW91dCB8fCAhbWFzdGVyLT5vb2Js YXlvdXQtPmVjYykKIAkJcmV0dXJuIC1FTk9UU1VQUDsKIAotCXJldHVybiBtdGQtPm9vYmxheW91 dC0+ZWNjKG10ZCwgc2VjdGlvbiwgb29iZWNjKTsKKwlyZXR1cm4gbWFzdGVyLT5vb2JsYXlvdXQt PmVjYyhtYXN0ZXIsIHNlY3Rpb24sIG9vYmVjYyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtdGRf b29ibGF5b3V0X2VjYyk7CiAKQEAgLTEzMzQsMTUgKzE0MDEsMTcgQEAgRVhQT1JUX1NZTUJPTF9H UEwobXRkX29vYmxheW91dF9lY2MpOwogaW50IG10ZF9vb2JsYXlvdXRfZnJlZShzdHJ1Y3QgbXRk X2luZm8gKm10ZCwgaW50IHNlY3Rpb24sCiAJCSAgICAgICBzdHJ1Y3QgbXRkX29vYl9yZWdpb24g Km9vYmZyZWUpCiB7CisJc3RydWN0IG10ZF9pbmZvICptYXN0ZXIgPSBtdGRfZ2V0X21hc3Rlciht dGQpOworCiAJbWVtc2V0KG9vYmZyZWUsIDAsIHNpemVvZigqb29iZnJlZSkpOwogCi0JaWYgKCFt dGQgfHwgc2VjdGlvbiA8IDApCisJaWYgKCFtYXN0ZXIgfHwgc2VjdGlvbiA8IDApCiAJCXJldHVy biAtRUlOVkFMOwogCi0JaWYgKCFtdGQtPm9vYmxheW91dCB8fCAhbXRkLT5vb2JsYXlvdXQtPmZy ZWUpCisJaWYgKCFtYXN0ZXItPm9vYmxheW91dCB8fCAhbWFzdGVyLT5vb2JsYXlvdXQtPmZyZWUp CiAJCXJldHVybiAtRU5PVFNVUFA7CiAKLQlyZXR1cm4gbXRkLT5vb2JsYXlvdXQtPmZyZWUobXRk LCBzZWN0aW9uLCBvb2JmcmVlKTsKKwlyZXR1cm4gbWFzdGVyLT5vb2JsYXlvdXQtPmZyZWUobWFz dGVyLCBzZWN0aW9uLCBvb2JmcmVlKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG10ZF9vb2JsYXlv dXRfZnJlZSk7CiAKQEAgLTE2NTEsNjAgKzE3MjAsNjkgQEAgRVhQT1JUX1NZTUJPTF9HUEwobXRk X29vYmxheW91dF9jb3VudF9lY2NieXRlcyk7CiBpbnQgbXRkX2dldF9mYWN0X3Byb3RfaW5mbyhz dHJ1Y3QgbXRkX2luZm8gKm10ZCwgc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sCiAJCQkgICBz dHJ1Y3Qgb3RwX2luZm8gKmJ1ZikKIHsKLQlpZiAoIW10ZC0+X2dldF9mYWN0X3Byb3RfaW5mbykK KwlzdHJ1Y3QgbXRkX2luZm8gKm1hc3RlciA9IG10ZF9nZXRfbWFzdGVyKG10ZCk7CisKKwlpZiAo IW1hc3Rlci0+X2dldF9mYWN0X3Byb3RfaW5mbykKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCWlm ICghbGVuKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gbXRkLT5fZ2V0X2ZhY3RfcHJvdF9pbmZvKG10 ZCwgbGVuLCByZXRsZW4sIGJ1Zik7CisJcmV0dXJuIG1hc3Rlci0+X2dldF9mYWN0X3Byb3RfaW5m byhtYXN0ZXIsIGxlbiwgcmV0bGVuLCBidWYpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobXRkX2dl dF9mYWN0X3Byb3RfaW5mbyk7CiAKIGludCBtdGRfcmVhZF9mYWN0X3Byb3RfcmVnKHN0cnVjdCBt dGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwKIAkJCSAgIHNpemVfdCAqcmV0 bGVuLCB1X2NoYXIgKmJ1ZikKIHsKKwlzdHJ1Y3QgbXRkX2luZm8gKm1hc3RlciA9IG10ZF9nZXRf bWFzdGVyKG10ZCk7CisKIAkqcmV0bGVuID0gMDsKLQlpZiAoIW10ZC0+X3JlYWRfZmFjdF9wcm90 X3JlZykKKwlpZiAoIW1hc3Rlci0+X3JlYWRfZmFjdF9wcm90X3JlZykKIAkJcmV0dXJuIC1FT1BO T1RTVVBQOwogCWlmICghbGVuKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gbXRkLT5fcmVhZF9mYWN0 X3Byb3RfcmVnKG10ZCwgZnJvbSwgbGVuLCByZXRsZW4sIGJ1Zik7CisJcmV0dXJuIG1hc3Rlci0+ X3JlYWRfZmFjdF9wcm90X3JlZyhtYXN0ZXIsIGZyb20sIGxlbiwgcmV0bGVuLCBidWYpOwogfQog RVhQT1JUX1NZTUJPTF9HUEwobXRkX3JlYWRfZmFjdF9wcm90X3JlZyk7CiAKIGludCBtdGRfZ2V0 X3VzZXJfcHJvdF9pbmZvKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzaXplX3QgbGVuLCBzaXplX3Qg KnJldGxlbiwKIAkJCSAgIHN0cnVjdCBvdHBfaW5mbyAqYnVmKQogewotCWlmICghbXRkLT5fZ2V0 X3VzZXJfcHJvdF9pbmZvKQorCXN0cnVjdCBtdGRfaW5mbyAqbWFzdGVyID0gbXRkX2dldF9tYXN0 ZXIobXRkKTsKKworCWlmICghbWFzdGVyLT5fZ2V0X3VzZXJfcHJvdF9pbmZvKQogCQlyZXR1cm4g LUVPUE5PVFNVUFA7CiAJaWYgKCFsZW4pCiAJCXJldHVybiAwOwotCXJldHVybiBtdGQtPl9nZXRf dXNlcl9wcm90X2luZm8obXRkLCBsZW4sIHJldGxlbiwgYnVmKTsKKwlyZXR1cm4gbWFzdGVyLT5f Z2V0X3VzZXJfcHJvdF9pbmZvKG1hc3RlciwgbGVuLCByZXRsZW4sIGJ1Zik7CiB9CiBFWFBPUlRf U1lNQk9MX0dQTChtdGRfZ2V0X3VzZXJfcHJvdF9pbmZvKTsKIAogaW50IG10ZF9yZWFkX3VzZXJf cHJvdF9yZWcoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAog CQkJICAgc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKQogeworCXN0cnVjdCBtdGRfaW5mbyAq bWFzdGVyID0gbXRkX2dldF9tYXN0ZXIobXRkKTsKKwogCSpyZXRsZW4gPSAwOwotCWlmICghbXRk LT5fcmVhZF91c2VyX3Byb3RfcmVnKQorCWlmICghbWFzdGVyLT5fcmVhZF91c2VyX3Byb3RfcmVn KQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJaWYgKCFsZW4pCiAJCXJldHVybiAwOwotCXJldHVy biBtdGQtPl9yZWFkX3VzZXJfcHJvdF9yZWcobXRkLCBmcm9tLCBsZW4sIHJldGxlbiwgYnVmKTsK KwlyZXR1cm4gbWFzdGVyLT5fcmVhZF91c2VyX3Byb3RfcmVnKG1hc3RlciwgZnJvbSwgbGVuLCBy ZXRsZW4sIGJ1Zik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtdGRfcmVhZF91c2VyX3Byb3RfcmVn KTsKIAogaW50IG10ZF93cml0ZV91c2VyX3Byb3RfcmVnKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBs b2ZmX3QgdG8sIHNpemVfdCBsZW4sCiAJCQkgICAgc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVm KQogeworCXN0cnVjdCBtdGRfaW5mbyAqbWFzdGVyID0gbXRkX2dldF9tYXN0ZXIobXRkKTsKIAlp bnQgcmV0OwogCiAJKnJldGxlbiA9IDA7Ci0JaWYgKCFtdGQtPl93cml0ZV91c2VyX3Byb3RfcmVn KQorCWlmICghbWFzdGVyLT5fd3JpdGVfdXNlcl9wcm90X3JlZykKIAkJcmV0dXJuIC1FT1BOT1RT VVBQOwogCWlmICghbGVuKQogCQlyZXR1cm4gMDsKLQlyZXQgPSBtdGQtPl93cml0ZV91c2VyX3By b3RfcmVnKG10ZCwgdG8sIGxlbiwgcmV0bGVuLCBidWYpOworCXJldCA9IG1hc3Rlci0+X3dyaXRl X3VzZXJfcHJvdF9yZWcobWFzdGVyLCB0bywgbGVuLCByZXRsZW4sIGJ1Zik7CiAJaWYgKHJldCkK IAkJcmV0dXJuIHJldDsKIApAQCAtMTcxOCw4MCArMTc5NiwxMDUgQEAgRVhQT1JUX1NZTUJPTF9H UEwobXRkX3dyaXRlX3VzZXJfcHJvdF9yZWcpOwogCiBpbnQgbXRkX2xvY2tfdXNlcl9wcm90X3Jl ZyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4pCiB7Ci0JaWYg KCFtdGQtPl9sb2NrX3VzZXJfcHJvdF9yZWcpCisJc3RydWN0IG10ZF9pbmZvICptYXN0ZXIgPSBt dGRfZ2V0X21hc3RlcihtdGQpOworCisJaWYgKCFtYXN0ZXItPl9sb2NrX3VzZXJfcHJvdF9yZWcp CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAlpZiAoIWxlbikKIAkJcmV0dXJuIDA7Ci0JcmV0dXJu IG10ZC0+X2xvY2tfdXNlcl9wcm90X3JlZyhtdGQsIGZyb20sIGxlbik7CisJcmV0dXJuIG1hc3Rl ci0+X2xvY2tfdXNlcl9wcm90X3JlZyhtYXN0ZXIsIGZyb20sIGxlbik7CiB9CiBFWFBPUlRfU1lN Qk9MX0dQTChtdGRfbG9ja191c2VyX3Byb3RfcmVnKTsKIAogLyogQ2hpcC1zdXBwb3J0ZWQgZGV2 aWNlIGxvY2tpbmcgKi8KIGludCBtdGRfbG9jayhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90 IG9mcywgdWludDY0X3QgbGVuKQogewotCWlmICghbXRkLT5fbG9jaykKKwlzdHJ1Y3QgbXRkX2lu Zm8gKm1hc3RlciA9IG10ZF9nZXRfbWFzdGVyKG10ZCk7CisKKwlpZiAoIW1hc3Rlci0+X2xvY2sp CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAlpZiAob2ZzIDwgMCB8fCBvZnMgPj0gbXRkLT5zaXpl IHx8IGxlbiA+IG10ZC0+c2l6ZSAtIG9mcykKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKCFsZW4p CiAJCXJldHVybiAwOwotCXJldHVybiBtdGQtPl9sb2NrKG10ZCwgb2ZzLCBsZW4pOworCXJldHVy biBtYXN0ZXItPl9sb2NrKG1hc3RlciwgbXRkX2dldF9tYXN0ZXJfb2ZzKG10ZCwgb2ZzKSwgbGVu KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG10ZF9sb2NrKTsKIAogaW50IG10ZF91bmxvY2soc3Ry dWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIHVpbnQ2NF90IGxlbikKIHsKLQlpZiAoIW10 ZC0+X3VubG9jaykKKwlzdHJ1Y3QgbXRkX2luZm8gKm1hc3RlciA9IG10ZF9nZXRfbWFzdGVyKG10 ZCk7CisKKwlpZiAoIW1hc3Rlci0+X3VubG9jaykKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCWlm IChvZnMgPCAwIHx8IG9mcyA+PSBtdGQtPnNpemUgfHwgbGVuID4gbXRkLT5zaXplIC0gb2ZzKQog CQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoIWxlbikKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIG10ZC0+ X3VubG9jayhtdGQsIG9mcywgbGVuKTsKKwlyZXR1cm4gbWFzdGVyLT5fdW5sb2NrKG1hc3Rlciwg bXRkX2dldF9tYXN0ZXJfb2ZzKG10ZCwgb2ZzKSwgbGVuKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BM KG10ZF91bmxvY2spOwogCiBpbnQgbXRkX2lzX2xvY2tlZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwg bG9mZl90IG9mcywgdWludDY0X3QgbGVuKQogewotCWlmICghbXRkLT5faXNfbG9ja2VkKQorCXN0 cnVjdCBtdGRfaW5mbyAqbWFzdGVyID0gbXRkX2dldF9tYXN0ZXIobXRkKTsKKworCWlmICghbWFz dGVyLT5faXNfbG9ja2VkKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJaWYgKG9mcyA8IDAgfHwg b2ZzID49IG10ZC0+c2l6ZSB8fCBsZW4gPiBtdGQtPnNpemUgLSBvZnMpCiAJCXJldHVybiAtRUlO VkFMOwogCWlmICghbGVuKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gbXRkLT5faXNfbG9ja2VkKG10 ZCwgb2ZzLCBsZW4pOworCXJldHVybiBtYXN0ZXItPl9pc19sb2NrZWQobWFzdGVyLCBtdGRfZ2V0 X21hc3Rlcl9vZnMobXRkLCBvZnMpLCBsZW4pOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobXRkX2lz X2xvY2tlZCk7CiAKIGludCBtdGRfYmxvY2tfaXNyZXNlcnZlZChzdHJ1Y3QgbXRkX2luZm8gKm10 ZCwgbG9mZl90IG9mcykKIHsKKwlzdHJ1Y3QgbXRkX2luZm8gKm1hc3RlciA9IG10ZF9nZXRfbWFz dGVyKG10ZCk7CisKIAlpZiAob2ZzIDwgMCB8fCBvZnMgPj0gbXRkLT5zaXplKQogCQlyZXR1cm4g LUVJTlZBTDsKLQlpZiAoIW10ZC0+X2Jsb2NrX2lzcmVzZXJ2ZWQpCisJaWYgKCFtYXN0ZXItPl9i bG9ja19pc3Jlc2VydmVkKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gbXRkLT5fYmxvY2tfaXNyZXNl cnZlZChtdGQsIG9mcyk7CisJcmV0dXJuIG1hc3Rlci0+X2Jsb2NrX2lzcmVzZXJ2ZWQobWFzdGVy LCBtdGRfZ2V0X21hc3Rlcl9vZnMobXRkLCBvZnMpKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG10 ZF9ibG9ja19pc3Jlc2VydmVkKTsKIAogaW50IG10ZF9ibG9ja19pc2JhZChzdHJ1Y3QgbXRkX2lu Zm8gKm10ZCwgbG9mZl90IG9mcykKIHsKKwlzdHJ1Y3QgbXRkX2luZm8gKm1hc3RlciA9IG10ZF9n ZXRfbWFzdGVyKG10ZCk7CisKIAlpZiAob2ZzIDwgMCB8fCBvZnMgPj0gbXRkLT5zaXplKQogCQly ZXR1cm4gLUVJTlZBTDsKLQlpZiAoIW10ZC0+X2Jsb2NrX2lzYmFkKQorCWlmICghbWFzdGVyLT5f YmxvY2tfaXNiYWQpCiAJCXJldHVybiAwOwotCXJldHVybiBtdGQtPl9ibG9ja19pc2JhZChtdGQs IG9mcyk7CisJcmV0dXJuIG1hc3Rlci0+X2Jsb2NrX2lzYmFkKG1hc3RlciwgbXRkX2dldF9tYXN0 ZXJfb2ZzKG10ZCwgb2ZzKSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtdGRfYmxvY2tfaXNiYWQp OwogCiBpbnQgbXRkX2Jsb2NrX21hcmtiYWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBv ZnMpCiB7Ci0JaWYgKCFtdGQtPl9ibG9ja19tYXJrYmFkKQorCXN0cnVjdCBtdGRfaW5mbyAqbWFz dGVyID0gbXRkX2dldF9tYXN0ZXIobXRkKTsKKwlpbnQgcmV0OworCisJaWYgKCFtYXN0ZXItPl9i bG9ja19tYXJrYmFkKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJaWYgKG9mcyA8IDAgfHwgb2Zz ID49IG10ZC0+c2l6ZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKCEobXRkLT5mbGFncyAmIE1U RF9XUklURUFCTEUpKQogCQlyZXR1cm4gLUVST0ZTOwotCXJldHVybiBtdGQtPl9ibG9ja19tYXJr YmFkKG10ZCwgb2ZzKTsKKworCXJldCA9IG1hc3Rlci0+X2Jsb2NrX21hcmtiYWQobWFzdGVyLCBt dGRfZ2V0X21hc3Rlcl9vZnMobXRkLCBvZnMpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0Owor CisJd2hpbGUgKG10ZC0+cGFyZW50KSB7CisJCW10ZC0+ZWNjX3N0YXRzLmJhZGJsb2NrcysrOwor CQltdGQgPSBtdGQtPnBhcmVudDsKKwl9CisKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xf R1BMKG10ZF9ibG9ja19tYXJrYmFkKTsKIApAQCAtMTg0MSwxMiArMTk0NCwxNyBAQCBzdGF0aWMg aW50IGRlZmF1bHRfbXRkX3dyaXRldihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3Qgc3RydWN0 IGt2ZWMgKnZlY3MsCiBpbnQgbXRkX3dyaXRldihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3Qg c3RydWN0IGt2ZWMgKnZlY3MsCiAJICAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIGxvZmZfdCB0 bywgc2l6ZV90ICpyZXRsZW4pCiB7CisJc3RydWN0IG10ZF9pbmZvICptYXN0ZXIgPSBtdGRfZ2V0 X21hc3RlcihtdGQpOworCiAJKnJldGxlbiA9IDA7CiAJaWYgKCEobXRkLT5mbGFncyAmIE1URF9X UklURUFCTEUpKQogCQlyZXR1cm4gLUVST0ZTOwotCWlmICghbXRkLT5fd3JpdGV2KQorCisJaWYg KCFtYXN0ZXItPl93cml0ZXYpCiAJCXJldHVybiBkZWZhdWx0X210ZF93cml0ZXYobXRkLCB2ZWNz LCBjb3VudCwgdG8sIHJldGxlbik7Ci0JcmV0dXJuIG10ZC0+X3dyaXRldihtdGQsIHZlY3MsIGNv dW50LCB0bywgcmV0bGVuKTsKKworCXJldHVybiBtYXN0ZXItPl93cml0ZXYobWFzdGVyLCB2ZWNz LCBjb3VudCwKKwkJCSAgICAgICBtdGRfZ2V0X21hc3Rlcl9vZnMobXRkLCB0byksIHJldGxlbik7 CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtdGRfd3JpdGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVy cy9tdGQvbXRkcGFydC5jIGIvZHJpdmVycy9tdGQvbXRkcGFydC5jCmluZGV4IDczMjhjMDY2YzVi YS4uOTNlZjhmZGYxNjM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRwYXJ0LmMKKysrIGIv ZHJpdmVycy9tdGQvbXRkcGFydC5jCkBAIC0yMCwzMzkgKzIwLDUyIEBACiAKICNpbmNsdWRlICJt dGRjb3JlLmgiCiAKLS8qIE91ciBwYXJ0aXRpb24gbGlua2VkIGxpc3QgKi8KLXN0YXRpYyBMSVNU X0hFQUQobXRkX3BhcnRpdGlvbnMpOwotc3RhdGljIERFRklORV9NVVRFWChtdGRfcGFydGl0aW9u c19tdXRleCk7Ci0KLS8qKgotICogc3RydWN0IG10ZF9wYXJ0IC0gb3VyIHBhcnRpdGlvbiBub2Rl IHN0cnVjdHVyZQotICoKLSAqIEBtdGQ6IHN0cnVjdCBob2xkaW5nIHBhcnRpdGlvbiBkZXRhaWxz Ci0gKiBAcGFyZW50OiBwYXJlbnQgbXRkIC0gZmxhc2ggZGV2aWNlIG9yIGFub3RoZXIgcGFydGl0 aW9uCi0gKiBAb2Zmc2V0OiBwYXJ0aXRpb24gb2Zmc2V0IHJlbGF0aXZlIHRvIHRoZSAqZmxhc2gg ZGV2aWNlKgotICovCi1zdHJ1Y3QgbXRkX3BhcnQgewotCXN0cnVjdCBtdGRfaW5mbyBtdGQ7Ci0J c3RydWN0IG10ZF9pbmZvICpwYXJlbnQ7Ci0JdWludDY0X3Qgb2Zmc2V0OwotCXN0cnVjdCBsaXN0 X2hlYWQgbGlzdDsKLX07Ci0KLS8qCi0gKiBHaXZlbiBhIHBvaW50ZXIgdG8gdGhlIE1URCBvYmpl Y3QgaW4gdGhlIG10ZF9wYXJ0IHN0cnVjdHVyZSwgd2UgY2FuIHJldHJpZXZlCi0gKiB0aGUgcG9p bnRlciB0byB0aGF0IHN0cnVjdHVyZS4KLSAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRkX3Bh cnQgKm10ZF90b19wYXJ0KGNvbnN0IHN0cnVjdCBtdGRfaW5mbyAqbXRkKQotewotCXJldHVybiBj b250YWluZXJfb2YobXRkLCBzdHJ1Y3QgbXRkX3BhcnQsIG10ZCk7Ci19Ci0KLXN0YXRpYyB1NjQg cGFydF9hYnNvbHV0ZV9vZmZzZXQoc3RydWN0IG10ZF9pbmZvICptdGQpCi17Ci0Jc3RydWN0IG10 ZF9wYXJ0ICpwYXJ0ID0gbXRkX3RvX3BhcnQobXRkKTsKLQotCWlmICghbXRkX2lzX3BhcnRpdGlv bihtdGQpKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiBwYXJ0X2Fic29sdXRlX29mZnNldChwYXJ0 LT5wYXJlbnQpICsgcGFydC0+b2Zmc2V0OwotfQotCiAvKgogICogTVREIG1ldGhvZHMgd2hpY2gg c2ltcGx5IHRyYW5zbGF0ZSB0aGUgZWZmZWN0aXZlIGFkZHJlc3MgYW5kIHBhc3MgdGhyb3VnaAog ICogdG8gdGhlIF9yZWFsXyBkZXZpY2UuCiAgKi8KIAotc3RhdGljIGludCBwYXJ0X3JlYWQoc3Ry dWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAotCQlzaXplX3QgKnJl dGxlbiwgdV9jaGFyICpidWYpCitzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9wYXJ0aXRpb24oc3Ry dWN0IG10ZF9pbmZvICptdGQpCiB7Ci0Jc3RydWN0IG10ZF9wYXJ0ICpwYXJ0ID0gbXRkX3RvX3Bh cnQobXRkKTsKLQlzdHJ1Y3QgbXRkX2VjY19zdGF0cyBzdGF0czsKLQlpbnQgcmVzOwotCi0Jc3Rh dHMgPSBwYXJ0LT5wYXJlbnQtPmVjY19zdGF0czsKLQlyZXMgPSBwYXJ0LT5wYXJlbnQtPl9yZWFk KHBhcnQtPnBhcmVudCwgZnJvbSArIHBhcnQtPm9mZnNldCwgbGVuLAotCQkJCSAgcmV0bGVuLCBi dWYpOwotCWlmICh1bmxpa2VseShtdGRfaXNfZWNjZXJyKHJlcykpKQotCQltdGQtPmVjY19zdGF0 cy5mYWlsZWQgKz0KLQkJCXBhcnQtPnBhcmVudC0+ZWNjX3N0YXRzLmZhaWxlZCAtIHN0YXRzLmZh aWxlZDsKLQllbHNlCi0JCW10ZC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCArPQotCQkJcGFydC0+cGFy ZW50LT5lY2Nfc3RhdHMuY29ycmVjdGVkIC0gc3RhdHMuY29ycmVjdGVkOwotCXJldHVybiByZXM7 Ci19Ci0KLXN0YXRpYyBpbnQgcGFydF9wb2ludChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90 IGZyb20sIHNpemVfdCBsZW4sCi0JCXNpemVfdCAqcmV0bGVuLCB2b2lkICoqdmlydCwgcmVzb3Vy Y2Vfc2l6ZV90ICpwaHlzKQotewotCXN0cnVjdCBtdGRfcGFydCAqcGFydCA9IG10ZF90b19wYXJ0 KG10ZCk7Ci0KLQlyZXR1cm4gcGFydC0+cGFyZW50LT5fcG9pbnQocGFydC0+cGFyZW50LCBmcm9t ICsgcGFydC0+b2Zmc2V0LCBsZW4sCi0JCQkJICAgIHJldGxlbiwgdmlydCwgcGh5cyk7Ci19Ci0K LXN0YXRpYyBpbnQgcGFydF91bnBvaW50KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJv bSwgc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3QgbXRkX3BhcnQgKnBhcnQgPSBtdGRfdG9fcGFydCht dGQpOwotCi0JcmV0dXJuIHBhcnQtPnBhcmVudC0+X3VucG9pbnQocGFydC0+cGFyZW50LCBmcm9t ICsgcGFydC0+b2Zmc2V0LCBsZW4pOwotfQotCi1zdGF0aWMgaW50IHBhcnRfcmVhZF9vb2Ioc3Ry dWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLAotCQlzdHJ1Y3QgbXRkX29vYl9vcHMgKm9w cykKLXsKLQlzdHJ1Y3QgbXRkX3BhcnQgKnBhcnQgPSBtdGRfdG9fcGFydChtdGQpOwotCXN0cnVj dCBtdGRfZWNjX3N0YXRzIHN0YXRzOwotCWludCByZXM7Ci0KLQlzdGF0cyA9IHBhcnQtPnBhcmVu dC0+ZWNjX3N0YXRzOwotCXJlcyA9IHBhcnQtPnBhcmVudC0+X3JlYWRfb29iKHBhcnQtPnBhcmVu dCwgZnJvbSArIHBhcnQtPm9mZnNldCwgb3BzKTsKLQlpZiAodW5saWtlbHkobXRkX2lzX2VjY2Vy cihyZXMpKSkKLQkJbXRkLT5lY2Nfc3RhdHMuZmFpbGVkICs9Ci0JCQlwYXJ0LT5wYXJlbnQtPmVj Y19zdGF0cy5mYWlsZWQgLSBzdGF0cy5mYWlsZWQ7Ci0JZWxzZQotCQltdGQtPmVjY19zdGF0cy5j b3JyZWN0ZWQgKz0KLQkJCXBhcnQtPnBhcmVudC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCAtIHN0YXRz LmNvcnJlY3RlZDsKLQlyZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgaW50IHBhcnRfcmVhZF91c2Vy X3Byb3RfcmVnKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwKLQkJc2l6ZV90IGxl biwgc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKQotewotCXN0cnVjdCBtdGRfcGFydCAqcGFy dCA9IG10ZF90b19wYXJ0KG10ZCk7Ci0JcmV0dXJuIHBhcnQtPnBhcmVudC0+X3JlYWRfdXNlcl9w cm90X3JlZyhwYXJ0LT5wYXJlbnQsIGZyb20sIGxlbiwKLQkJCQkJCSByZXRsZW4sIGJ1Zik7Ci19 Ci0KLXN0YXRpYyBpbnQgcGFydF9nZXRfdXNlcl9wcm90X2luZm8oc3RydWN0IG10ZF9pbmZvICpt dGQsIHNpemVfdCBsZW4sCi0JCQkJICAgc2l6ZV90ICpyZXRsZW4sIHN0cnVjdCBvdHBfaW5mbyAq YnVmKQotewotCXN0cnVjdCBtdGRfcGFydCAqcGFydCA9IG10ZF90b19wYXJ0KG10ZCk7Ci0JcmV0 dXJuIHBhcnQtPnBhcmVudC0+X2dldF91c2VyX3Byb3RfaW5mbyhwYXJ0LT5wYXJlbnQsIGxlbiwg cmV0bGVuLAotCQkJCQkJIGJ1Zik7Ci19Ci0KLXN0YXRpYyBpbnQgcGFydF9yZWFkX2ZhY3RfcHJv dF9yZWcoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLAotCQlzaXplX3QgbGVuLCBz aXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpCi17Ci0Jc3RydWN0IG10ZF9wYXJ0ICpwYXJ0ID0g bXRkX3RvX3BhcnQobXRkKTsKLQlyZXR1cm4gcGFydC0+cGFyZW50LT5fcmVhZF9mYWN0X3Byb3Rf cmVnKHBhcnQtPnBhcmVudCwgZnJvbSwgbGVuLAotCQkJCQkJIHJldGxlbiwgYnVmKTsKLX0KLQot c3RhdGljIGludCBwYXJ0X2dldF9mYWN0X3Byb3RfaW5mbyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwg c2l6ZV90IGxlbiwKLQkJCQkgICBzaXplX3QgKnJldGxlbiwgc3RydWN0IG90cF9pbmZvICpidWYp Ci17Ci0Jc3RydWN0IG10ZF9wYXJ0ICpwYXJ0ID0gbXRkX3RvX3BhcnQobXRkKTsKLQlyZXR1cm4g cGFydC0+cGFyZW50LT5fZ2V0X2ZhY3RfcHJvdF9pbmZvKHBhcnQtPnBhcmVudCwgbGVuLCByZXRs ZW4sCi0JCQkJCQkgYnVmKTsKLX0KLQotc3RhdGljIGludCBwYXJ0X3dyaXRlKHN0cnVjdCBtdGRf aW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sCi0JCXNpemVfdCAqcmV0bGVuLCBjb25z dCB1X2NoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgbXRkX3BhcnQgKnBhcnQgPSBtdGRfdG9fcGFydCht dGQpOwotCXJldHVybiBwYXJ0LT5wYXJlbnQtPl93cml0ZShwYXJ0LT5wYXJlbnQsIHRvICsgcGFy dC0+b2Zmc2V0LCBsZW4sCi0JCQkJICAgIHJldGxlbiwgYnVmKTsKLX0KLQotc3RhdGljIGludCBw YXJ0X3BhbmljX3dyaXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHNpemVfdCBs ZW4sCi0JCXNpemVfdCAqcmV0bGVuLCBjb25zdCB1X2NoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgbXRk X3BhcnQgKnBhcnQgPSBtdGRfdG9fcGFydChtdGQpOwotCXJldHVybiBwYXJ0LT5wYXJlbnQtPl9w YW5pY193cml0ZShwYXJ0LT5wYXJlbnQsIHRvICsgcGFydC0+b2Zmc2V0LCBsZW4sCi0JCQkJCSAg cmV0bGVuLCBidWYpOwotfQotCi1zdGF0aWMgaW50IHBhcnRfd3JpdGVfb29iKHN0cnVjdCBtdGRf aW5mbyAqbXRkLCBsb2ZmX3QgdG8sCi0JCXN0cnVjdCBtdGRfb29iX29wcyAqb3BzKQotewotCXN0 cnVjdCBtdGRfcGFydCAqcGFydCA9IG10ZF90b19wYXJ0KG10ZCk7Ci0KLQlyZXR1cm4gcGFydC0+ cGFyZW50LT5fd3JpdGVfb29iKHBhcnQtPnBhcmVudCwgdG8gKyBwYXJ0LT5vZmZzZXQsIG9wcyk7 Ci19Ci0KLXN0YXRpYyBpbnQgcGFydF93cml0ZV91c2VyX3Byb3RfcmVnKHN0cnVjdCBtdGRfaW5m byAqbXRkLCBsb2ZmX3QgZnJvbSwKLQkJc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIHVfY2hh ciAqYnVmKQotewotCXN0cnVjdCBtdGRfcGFydCAqcGFydCA9IG10ZF90b19wYXJ0KG10ZCk7Ci0J cmV0dXJuIHBhcnQtPnBhcmVudC0+X3dyaXRlX3VzZXJfcHJvdF9yZWcocGFydC0+cGFyZW50LCBm cm9tLCBsZW4sCi0JCQkJCQkgIHJldGxlbiwgYnVmKTsKLX0KLQotc3RhdGljIGludCBwYXJ0X2xv Y2tfdXNlcl9wcm90X3JlZyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sCi0JCXNp emVfdCBsZW4pCi17Ci0Jc3RydWN0IG10ZF9wYXJ0ICpwYXJ0ID0gbXRkX3RvX3BhcnQobXRkKTsK LQlyZXR1cm4gcGFydC0+cGFyZW50LT5fbG9ja191c2VyX3Byb3RfcmVnKHBhcnQtPnBhcmVudCwg ZnJvbSwgbGVuKTsKLX0KLQotc3RhdGljIGludCBwYXJ0X3dyaXRldihzdHJ1Y3QgbXRkX2luZm8g Km10ZCwgY29uc3Qgc3RydWN0IGt2ZWMgKnZlY3MsCi0JCXVuc2lnbmVkIGxvbmcgY291bnQsIGxv ZmZfdCB0bywgc2l6ZV90ICpyZXRsZW4pCi17Ci0Jc3RydWN0IG10ZF9wYXJ0ICpwYXJ0ID0gbXRk X3RvX3BhcnQobXRkKTsKLQlyZXR1cm4gcGFydC0+cGFyZW50LT5fd3JpdGV2KHBhcnQtPnBhcmVu dCwgdmVjcywgY291bnQsCi0JCQkJICAgICB0byArIHBhcnQtPm9mZnNldCwgcmV0bGVuKTsKLX0K LQotc3RhdGljIGludCBwYXJ0X2VyYXNlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgZXJh c2VfaW5mbyAqaW5zdHIpCi17Ci0Jc3RydWN0IG10ZF9wYXJ0ICpwYXJ0ID0gbXRkX3RvX3BhcnQo bXRkKTsKLQlpbnQgcmV0OwotCi0JaW5zdHItPmFkZHIgKz0gcGFydC0+b2Zmc2V0OwotCXJldCA9 IHBhcnQtPnBhcmVudC0+X2VyYXNlKHBhcnQtPnBhcmVudCwgaW5zdHIpOwotCWlmIChpbnN0ci0+ ZmFpbF9hZGRyICE9IE1URF9GQUlMX0FERFJfVU5LTk9XTikKLQkJaW5zdHItPmZhaWxfYWRkciAt PSBwYXJ0LT5vZmZzZXQ7Ci0JaW5zdHItPmFkZHIgLT0gcGFydC0+b2Zmc2V0OwotCi0JcmV0dXJu IHJldDsKLX0KLQotc3RhdGljIGludCBwYXJ0X2xvY2soc3RydWN0IG10ZF9pbmZvICptdGQsIGxv ZmZfdCBvZnMsIHVpbnQ2NF90IGxlbikKLXsKLQlzdHJ1Y3QgbXRkX3BhcnQgKnBhcnQgPSBtdGRf dG9fcGFydChtdGQpOwotCXJldHVybiBwYXJ0LT5wYXJlbnQtPl9sb2NrKHBhcnQtPnBhcmVudCwg b2ZzICsgcGFydC0+b2Zmc2V0LCBsZW4pOwotfQotCi1zdGF0aWMgaW50IHBhcnRfdW5sb2NrKHN0 cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCB1aW50NjRfdCBsZW4pCi17Ci0Jc3RydWN0 IG10ZF9wYXJ0ICpwYXJ0ID0gbXRkX3RvX3BhcnQobXRkKTsKLQlyZXR1cm4gcGFydC0+cGFyZW50 LT5fdW5sb2NrKHBhcnQtPnBhcmVudCwgb2ZzICsgcGFydC0+b2Zmc2V0LCBsZW4pOwotfQotCi1z dGF0aWMgaW50IHBhcnRfaXNfbG9ja2VkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2Zz LCB1aW50NjRfdCBsZW4pCi17Ci0Jc3RydWN0IG10ZF9wYXJ0ICpwYXJ0ID0gbXRkX3RvX3BhcnQo bXRkKTsKLQlyZXR1cm4gcGFydC0+cGFyZW50LT5faXNfbG9ja2VkKHBhcnQtPnBhcmVudCwgb2Zz ICsgcGFydC0+b2Zmc2V0LCBsZW4pOwotfQotCi1zdGF0aWMgdm9pZCBwYXJ0X3N5bmMoc3RydWN0 IG10ZF9pbmZvICptdGQpCi17Ci0Jc3RydWN0IG10ZF9wYXJ0ICpwYXJ0ID0gbXRkX3RvX3BhcnQo bXRkKTsKLQlwYXJ0LT5wYXJlbnQtPl9zeW5jKHBhcnQtPnBhcmVudCk7Ci19Ci0KLXN0YXRpYyBp bnQgcGFydF9zdXNwZW5kKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQotewotCXN0cnVjdCBtdGRfcGFy dCAqcGFydCA9IG10ZF90b19wYXJ0KG10ZCk7Ci0JcmV0dXJuIHBhcnQtPnBhcmVudC0+X3N1c3Bl bmQocGFydC0+cGFyZW50KTsKLX0KLQotc3RhdGljIHZvaWQgcGFydF9yZXN1bWUoc3RydWN0IG10 ZF9pbmZvICptdGQpCi17Ci0Jc3RydWN0IG10ZF9wYXJ0ICpwYXJ0ID0gbXRkX3RvX3BhcnQobXRk KTsKLQlwYXJ0LT5wYXJlbnQtPl9yZXN1bWUocGFydC0+cGFyZW50KTsKLX0KLQotc3RhdGljIGlu dCBwYXJ0X2Jsb2NrX2lzcmVzZXJ2ZWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMp Ci17Ci0Jc3RydWN0IG10ZF9wYXJ0ICpwYXJ0ID0gbXRkX3RvX3BhcnQobXRkKTsKLQlvZnMgKz0g cGFydC0+b2Zmc2V0OwotCXJldHVybiBwYXJ0LT5wYXJlbnQtPl9ibG9ja19pc3Jlc2VydmVkKHBh cnQtPnBhcmVudCwgb2ZzKTsKLX0KLQotc3RhdGljIGludCBwYXJ0X2Jsb2NrX2lzYmFkKHN0cnVj dCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzKQotewotCXN0cnVjdCBtdGRfcGFydCAqcGFydCA9 IG10ZF90b19wYXJ0KG10ZCk7Ci0Jb2ZzICs9IHBhcnQtPm9mZnNldDsKLQlyZXR1cm4gcGFydC0+ cGFyZW50LT5fYmxvY2tfaXNiYWQocGFydC0+cGFyZW50LCBvZnMpOwotfQotCi1zdGF0aWMgaW50 IHBhcnRfYmxvY2tfbWFya2JhZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcykKLXsK LQlzdHJ1Y3QgbXRkX3BhcnQgKnBhcnQgPSBtdGRfdG9fcGFydChtdGQpOwotCWludCByZXM7Ci0K LQlvZnMgKz0gcGFydC0+b2Zmc2V0OwotCXJlcyA9IHBhcnQtPnBhcmVudC0+X2Jsb2NrX21hcmti YWQocGFydC0+cGFyZW50LCBvZnMpOwotCWlmICghcmVzKQotCQltdGQtPmVjY19zdGF0cy5iYWRi bG9ja3MrKzsKLQlyZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgaW50IHBhcnRfZ2V0X2RldmljZShz dHJ1Y3QgbXRkX2luZm8gKm10ZCkKLXsKLQlzdHJ1Y3QgbXRkX3BhcnQgKnBhcnQgPSBtdGRfdG9f cGFydChtdGQpOwotCXJldHVybiBwYXJ0LT5wYXJlbnQtPl9nZXRfZGV2aWNlKHBhcnQtPnBhcmVu dCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhcnRfcHV0X2RldmljZShzdHJ1Y3QgbXRkX2luZm8gKm10 ZCkKLXsKLQlzdHJ1Y3QgbXRkX3BhcnQgKnBhcnQgPSBtdGRfdG9fcGFydChtdGQpOwotCXBhcnQt PnBhcmVudC0+X3B1dF9kZXZpY2UocGFydC0+cGFyZW50KTsKLX0KLQotc3RhdGljIGludCBwYXJ0 X29vYmxheW91dF9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBzZWN0aW9uLAotCQkJICAg ICAgc3RydWN0IG10ZF9vb2JfcmVnaW9uICpvb2JyZWdpb24pCi17Ci0Jc3RydWN0IG10ZF9wYXJ0 ICpwYXJ0ID0gbXRkX3RvX3BhcnQobXRkKTsKLQotCXJldHVybiBtdGRfb29ibGF5b3V0X2VjYyhw YXJ0LT5wYXJlbnQsIHNlY3Rpb24sIG9vYnJlZ2lvbik7Ci19Ci0KLXN0YXRpYyBpbnQgcGFydF9v b2JsYXlvdXRfZnJlZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHNlY3Rpb24sCi0JCQkgICAg ICAgc3RydWN0IG10ZF9vb2JfcmVnaW9uICpvb2JyZWdpb24pCi17Ci0Jc3RydWN0IG10ZF9wYXJ0 ICpwYXJ0ID0gbXRkX3RvX3BhcnQobXRkKTsKLQotCXJldHVybiBtdGRfb29ibGF5b3V0X2ZyZWUo cGFydC0+cGFyZW50LCBzZWN0aW9uLCBvb2JyZWdpb24pOwotfQotCi1zdGF0aWMgY29uc3Qgc3Ry dWN0IG10ZF9vb2JsYXlvdXRfb3BzIHBhcnRfb29ibGF5b3V0X29wcyA9IHsKLQkuZWNjID0gcGFy dF9vb2JsYXlvdXRfZWNjLAotCS5mcmVlID0gcGFydF9vb2JsYXlvdXRfZnJlZSwKLX07Ci0KLXN0 YXRpYyBpbnQgcGFydF9tYXhfYmFkX2Jsb2NrcyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90 IG9mcywgc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3QgbXRkX3BhcnQgKnBhcnQgPSBtdGRfdG9fcGFy dChtdGQpOwotCi0JcmV0dXJuIHBhcnQtPnBhcmVudC0+X21heF9iYWRfYmxvY2tzKHBhcnQtPnBh cmVudCwKLQkJCQkJICAgICBvZnMgKyBwYXJ0LT5vZmZzZXQsIGxlbik7Ci19Ci0KLXN0YXRpYyBp bmxpbmUgdm9pZCBmcmVlX3BhcnRpdGlvbihzdHJ1Y3QgbXRkX3BhcnQgKnApCi17Ci0Ja2ZyZWUo cC0+bXRkLm5hbWUpOwotCWtmcmVlKHApOworCWtmcmVlKG10ZC0+bmFtZSk7CisJa2ZyZWUobXRk KTsKIH0KIAotc3RhdGljIHN0cnVjdCBtdGRfcGFydCAqYWxsb2NhdGVfcGFydGl0aW9uKHN0cnVj dCBtdGRfaW5mbyAqcGFyZW50LAotCQkJY29uc3Qgc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnQs IGludCBwYXJ0bm8sCi0JCQl1aW50NjRfdCBjdXJfb2Zmc2V0KQorc3RhdGljIHN0cnVjdCBtdGRf aW5mbyAqYWxsb2NhdGVfcGFydGl0aW9uKHN0cnVjdCBtdGRfaW5mbyAqcGFyZW50LAorCQkJCQkg ICBjb25zdCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydCwKKwkJCQkJICAgaW50IHBhcnRubywg dWludDY0X3QgY3VyX29mZnNldCkKIHsKIAlpbnQgd3JfYWxpZ25tZW50ID0gKHBhcmVudC0+Zmxh Z3MgJiBNVERfTk9fRVJBU0UpID8gcGFyZW50LT53cml0ZXNpemUgOgogCQkJCQkJCSAgICBwYXJl bnQtPmVyYXNlc2l6ZTsKLQlzdHJ1Y3QgbXRkX3BhcnQgKnNsYXZlOworCXN0cnVjdCBtdGRfaW5m byAqY2hpbGQsICptYXN0ZXIgPSBtdGRfZ2V0X21hc3RlcihwYXJlbnQpOwogCXUzMiByZW1haW5k ZXI7CiAJY2hhciAqbmFtZTsKIAl1NjQgdG1wOwogCiAJLyogYWxsb2NhdGUgdGhlIHBhcnRpdGlv biBzdHJ1Y3R1cmUgKi8KLQlzbGF2ZSA9IGt6YWxsb2Moc2l6ZW9mKCpzbGF2ZSksIEdGUF9LRVJO RUwpOworCWNoaWxkID0ga3phbGxvYyhzaXplb2YoKmNoaWxkKSwgR0ZQX0tFUk5FTCk7CiAJbmFt ZSA9IGtzdHJkdXAocGFydC0+bmFtZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFuYW1lIHx8ICFzbGF2 ZSkgeworCWlmICghbmFtZSB8fCAhY2hpbGQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIm1lbW9yeSBh bGxvY2F0aW9uIGVycm9yIHdoaWxlIGNyZWF0aW5nIHBhcnRpdGlvbnMgZm9yIFwiJXNcIlxuIiwK IAkJICAgICAgIHBhcmVudC0+bmFtZSk7CiAJCWtmcmVlKG5hbWUpOwotCQlrZnJlZShzbGF2ZSk7 CisJCWtmcmVlKGNoaWxkKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJfQogCiAJLyog c2V0IHVwIHRoZSBNVEQgb2JqZWN0IGZvciB0aGlzIHBhcnRpdGlvbiAqLwotCXNsYXZlLT5tdGQu dHlwZSA9IHBhcmVudC0+dHlwZTsKLQlzbGF2ZS0+bXRkLmZsYWdzID0gcGFyZW50LT5vcmlnX2Zs YWdzICYgfnBhcnQtPm1hc2tfZmxhZ3M7Ci0Jc2xhdmUtPm10ZC5vcmlnX2ZsYWdzID0gc2xhdmUt Pm10ZC5mbGFnczsKLQlzbGF2ZS0+bXRkLnNpemUgPSBwYXJ0LT5zaXplOwotCXNsYXZlLT5tdGQu d3JpdGVzaXplID0gcGFyZW50LT53cml0ZXNpemU7Ci0Jc2xhdmUtPm10ZC53cml0ZWJ1ZnNpemUg PSBwYXJlbnQtPndyaXRlYnVmc2l6ZTsKLQlzbGF2ZS0+bXRkLm9vYnNpemUgPSBwYXJlbnQtPm9v YnNpemU7Ci0Jc2xhdmUtPm10ZC5vb2JhdmFpbCA9IHBhcmVudC0+b29iYXZhaWw7Ci0Jc2xhdmUt Pm10ZC5zdWJwYWdlX3NmdCA9IHBhcmVudC0+c3VicGFnZV9zZnQ7Ci0Jc2xhdmUtPm10ZC5wYWly aW5nID0gcGFyZW50LT5wYWlyaW5nOworCWNoaWxkLT50eXBlID0gcGFyZW50LT50eXBlOworCWNo aWxkLT5wYXJ0LmZsYWdzID0gcGFyZW50LT5mbGFncyAmIH5wYXJ0LT5tYXNrX2ZsYWdzOworCWNo aWxkLT5mbGFncyA9IGNoaWxkLT5wYXJ0LmZsYWdzOworCWNoaWxkLT5zaXplID0gcGFydC0+c2l6 ZTsKKwljaGlsZC0+d3JpdGVzaXplID0gcGFyZW50LT53cml0ZXNpemU7CisJY2hpbGQtPndyaXRl YnVmc2l6ZSA9IHBhcmVudC0+d3JpdGVidWZzaXplOworCWNoaWxkLT5vb2JzaXplID0gcGFyZW50 LT5vb2JzaXplOworCWNoaWxkLT5vb2JhdmFpbCA9IHBhcmVudC0+b29iYXZhaWw7CisJY2hpbGQt PnN1YnBhZ2Vfc2Z0ID0gcGFyZW50LT5zdWJwYWdlX3NmdDsKIAotCXNsYXZlLT5tdGQubmFtZSA9 IG5hbWU7Ci0Jc2xhdmUtPm10ZC5vd25lciA9IHBhcmVudC0+b3duZXI7CisJY2hpbGQtPm5hbWUg PSBuYW1lOworCWNoaWxkLT5vd25lciA9IHBhcmVudC0+b3duZXI7CiAKIAkvKiBOT1RFOiBIaXN0 b3JpY2FsbHksIHdlIGRpZG4ndCBhcnJhbmdlIE1URHMgYXMgYSB0cmVlIG91dCBvZgogCSAqIGNv bmNlcm4gZm9yIHNob3dpbmcgdGhlIHNhbWUgZGF0YSBpbiBtdWx0aXBsZSBwYXJ0aXRpb25zLgpA QCAtMzYwLDEzNCArNzMsNzYgQEAgc3RhdGljIHN0cnVjdCBtdGRfcGFydCAqYWxsb2NhdGVfcGFy dGl0aW9uKHN0cnVjdCBtdGRfaW5mbyAqcGFyZW50LAogCSAqIHNvIHRoZSBNVERfUEFSVElUSU9O RURfTUFTVEVSIG9wdGlvbiBhbGxvd3MgdGhhdC4gVGhlIG1hc3RlcgogCSAqIHdpbGwgaGF2ZSBk ZXZpY2Ugbm9kZXMgZXRjIG9ubHkgaWYgdGhpcyBpcyBzZXQsIHNvIG1ha2UgdGhlCiAJICogcGFy ZW50IGNvbmRpdGlvbmFsIG9uIHRoYXQgb3B0aW9uLiBOb3RlLCB0aGlzIGlzIGEgd2F5IHRvCi0J ICogZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUgbWFzdGVyIGFuZCB0aGUgcGFydGl0aW9uIGluIHN5 c2ZzLgorCSAqIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIHBhcmVudCBhbmQgaXRzIHBhcnRpdGlv bnMgaW4gc3lzZnMuCiAJICovCi0Jc2xhdmUtPm10ZC5kZXYucGFyZW50ID0gSVNfRU5BQkxFRChD T05GSUdfTVREX1BBUlRJVElPTkVEX01BU1RFUikgfHwgbXRkX2lzX3BhcnRpdGlvbihwYXJlbnQp ID8KLQkJCQkmcGFyZW50LT5kZXYgOgotCQkJCXBhcmVudC0+ZGV2LnBhcmVudDsKLQlzbGF2ZS0+ bXRkLmRldi5vZl9ub2RlID0gcGFydC0+b2Zfbm9kZTsKLQotCWlmIChwYXJlbnQtPl9yZWFkKQot CQlzbGF2ZS0+bXRkLl9yZWFkID0gcGFydF9yZWFkOwotCWlmIChwYXJlbnQtPl93cml0ZSkKLQkJ c2xhdmUtPm10ZC5fd3JpdGUgPSBwYXJ0X3dyaXRlOwotCi0JaWYgKHBhcmVudC0+X3BhbmljX3dy aXRlKQotCQlzbGF2ZS0+bXRkLl9wYW5pY193cml0ZSA9IHBhcnRfcGFuaWNfd3JpdGU7Ci0KLQlp ZiAocGFyZW50LT5fcG9pbnQgJiYgcGFyZW50LT5fdW5wb2ludCkgewotCQlzbGF2ZS0+bXRkLl9w b2ludCA9IHBhcnRfcG9pbnQ7Ci0JCXNsYXZlLT5tdGQuX3VucG9pbnQgPSBwYXJ0X3VucG9pbnQ7 Ci0JfQotCi0JaWYgKHBhcmVudC0+X3JlYWRfb29iKQotCQlzbGF2ZS0+bXRkLl9yZWFkX29vYiA9 IHBhcnRfcmVhZF9vb2I7Ci0JaWYgKHBhcmVudC0+X3dyaXRlX29vYikKLQkJc2xhdmUtPm10ZC5f d3JpdGVfb29iID0gcGFydF93cml0ZV9vb2I7Ci0JaWYgKHBhcmVudC0+X3JlYWRfdXNlcl9wcm90 X3JlZykKLQkJc2xhdmUtPm10ZC5fcmVhZF91c2VyX3Byb3RfcmVnID0gcGFydF9yZWFkX3VzZXJf cHJvdF9yZWc7Ci0JaWYgKHBhcmVudC0+X3JlYWRfZmFjdF9wcm90X3JlZykKLQkJc2xhdmUtPm10 ZC5fcmVhZF9mYWN0X3Byb3RfcmVnID0gcGFydF9yZWFkX2ZhY3RfcHJvdF9yZWc7Ci0JaWYgKHBh cmVudC0+X3dyaXRlX3VzZXJfcHJvdF9yZWcpCi0JCXNsYXZlLT5tdGQuX3dyaXRlX3VzZXJfcHJv dF9yZWcgPSBwYXJ0X3dyaXRlX3VzZXJfcHJvdF9yZWc7Ci0JaWYgKHBhcmVudC0+X2xvY2tfdXNl cl9wcm90X3JlZykKLQkJc2xhdmUtPm10ZC5fbG9ja191c2VyX3Byb3RfcmVnID0gcGFydF9sb2Nr X3VzZXJfcHJvdF9yZWc7Ci0JaWYgKHBhcmVudC0+X2dldF91c2VyX3Byb3RfaW5mbykKLQkJc2xh dmUtPm10ZC5fZ2V0X3VzZXJfcHJvdF9pbmZvID0gcGFydF9nZXRfdXNlcl9wcm90X2luZm87Ci0J aWYgKHBhcmVudC0+X2dldF9mYWN0X3Byb3RfaW5mbykKLQkJc2xhdmUtPm10ZC5fZ2V0X2ZhY3Rf cHJvdF9pbmZvID0gcGFydF9nZXRfZmFjdF9wcm90X2luZm87Ci0JaWYgKHBhcmVudC0+X3N5bmMp Ci0JCXNsYXZlLT5tdGQuX3N5bmMgPSBwYXJ0X3N5bmM7Ci0JaWYgKCFwYXJ0bm8gJiYgIXBhcmVu dC0+ZGV2LmNsYXNzICYmIHBhcmVudC0+X3N1c3BlbmQgJiYKLQkgICAgcGFyZW50LT5fcmVzdW1l KSB7Ci0JCXNsYXZlLT5tdGQuX3N1c3BlbmQgPSBwYXJ0X3N1c3BlbmQ7Ci0JCXNsYXZlLT5tdGQu X3Jlc3VtZSA9IHBhcnRfcmVzdW1lOwotCX0KLQlpZiAocGFyZW50LT5fd3JpdGV2KQotCQlzbGF2 ZS0+bXRkLl93cml0ZXYgPSBwYXJ0X3dyaXRldjsKLQlpZiAocGFyZW50LT5fbG9jaykKLQkJc2xh dmUtPm10ZC5fbG9jayA9IHBhcnRfbG9jazsKLQlpZiAocGFyZW50LT5fdW5sb2NrKQotCQlzbGF2 ZS0+bXRkLl91bmxvY2sgPSBwYXJ0X3VubG9jazsKLQlpZiAocGFyZW50LT5faXNfbG9ja2VkKQot CQlzbGF2ZS0+bXRkLl9pc19sb2NrZWQgPSBwYXJ0X2lzX2xvY2tlZDsKLQlpZiAocGFyZW50LT5f YmxvY2tfaXNyZXNlcnZlZCkKLQkJc2xhdmUtPm10ZC5fYmxvY2tfaXNyZXNlcnZlZCA9IHBhcnRf YmxvY2tfaXNyZXNlcnZlZDsKLQlpZiAocGFyZW50LT5fYmxvY2tfaXNiYWQpCi0JCXNsYXZlLT5t dGQuX2Jsb2NrX2lzYmFkID0gcGFydF9ibG9ja19pc2JhZDsKLQlpZiAocGFyZW50LT5fYmxvY2tf bWFya2JhZCkKLQkJc2xhdmUtPm10ZC5fYmxvY2tfbWFya2JhZCA9IHBhcnRfYmxvY2tfbWFya2Jh ZDsKLQlpZiAocGFyZW50LT5fbWF4X2JhZF9ibG9ja3MpCi0JCXNsYXZlLT5tdGQuX21heF9iYWRf YmxvY2tzID0gcGFydF9tYXhfYmFkX2Jsb2NrczsKLQotCWlmIChwYXJlbnQtPl9nZXRfZGV2aWNl KQotCQlzbGF2ZS0+bXRkLl9nZXRfZGV2aWNlID0gcGFydF9nZXRfZGV2aWNlOwotCWlmIChwYXJl bnQtPl9wdXRfZGV2aWNlKQotCQlzbGF2ZS0+bXRkLl9wdXRfZGV2aWNlID0gcGFydF9wdXRfZGV2 aWNlOwotCi0Jc2xhdmUtPm10ZC5fZXJhc2UgPSBwYXJ0X2VyYXNlOwotCXNsYXZlLT5wYXJlbnQg PSBwYXJlbnQ7Ci0Jc2xhdmUtPm9mZnNldCA9IHBhcnQtPm9mZnNldDsKLQotCWlmIChzbGF2ZS0+ b2Zmc2V0ID09IE1URFBBUlRfT0ZTX0FQUEVORCkKLQkJc2xhdmUtPm9mZnNldCA9IGN1cl9vZmZz ZXQ7Ci0JaWYgKHNsYXZlLT5vZmZzZXQgPT0gTVREUEFSVF9PRlNfTlhUQkxLKSB7CisJY2hpbGQt PmRldi5wYXJlbnQgPSBJU19FTkFCTEVEKENPTkZJR19NVERfUEFSVElUSU9ORURfTUFTVEVSKSB8 fCBtdGRfaXNfcGFydGl0aW9uKHBhcmVudCkgPworCQkJICAgICZwYXJlbnQtPmRldiA6IHBhcmVu dC0+ZGV2LnBhcmVudDsKKwljaGlsZC0+ZGV2Lm9mX25vZGUgPSBwYXJ0LT5vZl9ub2RlOworCWNo aWxkLT5wYXJlbnQgPSBwYXJlbnQ7CisJY2hpbGQtPnBhcnQub2Zmc2V0ID0gcGFydC0+b2Zmc2V0 OworCUlOSVRfTElTVF9IRUFEKCZjaGlsZC0+cGFydGl0aW9ucyk7CisKKwlpZiAoY2hpbGQtPnBh cnQub2Zmc2V0ID09IE1URFBBUlRfT0ZTX0FQUEVORCkKKwkJY2hpbGQtPnBhcnQub2Zmc2V0ID0g Y3VyX29mZnNldDsKKwlpZiAoY2hpbGQtPnBhcnQub2Zmc2V0ID09IE1URFBBUlRfT0ZTX05YVEJM SykgewogCQl0bXAgPSBjdXJfb2Zmc2V0OwotCQlzbGF2ZS0+b2Zmc2V0ID0gY3VyX29mZnNldDsK KwkJY2hpbGQtPnBhcnQub2Zmc2V0ID0gY3VyX29mZnNldDsKIAkJcmVtYWluZGVyID0gZG9fZGl2 KHRtcCwgd3JfYWxpZ25tZW50KTsKIAkJaWYgKHJlbWFpbmRlcikgewotCQkJc2xhdmUtPm9mZnNl dCArPSB3cl9hbGlnbm1lbnQgLSByZW1haW5kZXI7CisJCQljaGlsZC0+cGFydC5vZmZzZXQgKz0g d3JfYWxpZ25tZW50IC0gcmVtYWluZGVyOwogCQkJcHJpbnRrKEtFUk5fTk9USUNFICJNb3Zpbmcg cGFydGl0aW9uICVkOiAiCiAJCQkgICAgICAgIjB4JTAxMmxseCAtPiAweCUwMTJsbHhcbiIsIHBh cnRubywKLQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWN1cl9vZmZzZXQsICh1bnNpZ25l ZCBsb25nIGxvbmcpc2xhdmUtPm9mZnNldCk7CisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9u ZyljdXJfb2Zmc2V0LAorCQkJICAgICAgIGNoaWxkLT5wYXJ0Lm9mZnNldCk7CiAJCX0KIAl9Ci0J aWYgKHNsYXZlLT5vZmZzZXQgPT0gTVREUEFSVF9PRlNfUkVUQUlOKSB7Ci0JCXNsYXZlLT5vZmZz ZXQgPSBjdXJfb2Zmc2V0OwotCQlpZiAocGFyZW50LT5zaXplIC0gc2xhdmUtPm9mZnNldCA+PSBz bGF2ZS0+bXRkLnNpemUpIHsKLQkJCXNsYXZlLT5tdGQuc2l6ZSA9IHBhcmVudC0+c2l6ZSAtIHNs YXZlLT5vZmZzZXQKLQkJCQkJCQktIHNsYXZlLT5tdGQuc2l6ZTsKKwlpZiAoY2hpbGQtPnBhcnQu b2Zmc2V0ID09IE1URFBBUlRfT0ZTX1JFVEFJTikgeworCQljaGlsZC0+cGFydC5vZmZzZXQgPSBj dXJfb2Zmc2V0OworCQlpZiAocGFyZW50LT5zaXplIC0gY2hpbGQtPnBhcnQub2Zmc2V0ID49IGNo aWxkLT5zaXplKSB7CisJCQljaGlsZC0+c2l6ZSA9IHBhcmVudC0+c2l6ZSAtIGNoaWxkLT5wYXJ0 Lm9mZnNldCAtCisJCQkJICAgICAgY2hpbGQtPnNpemU7CiAJCX0gZWxzZSB7CiAJCQlwcmludGso S0VSTl9FUlIgIm10ZCBwYXJ0aXRpb24gXCIlc1wiIGRvZXNuJ3QgaGF2ZSBlbm91Z2ggc3BhY2U6 ICUjbGx4IDwgJSNsbHgsIGRpc2FibGVkXG4iLAotCQkJCXBhcnQtPm5hbWUsIHBhcmVudC0+c2l6 ZSAtIHNsYXZlLT5vZmZzZXQsCi0JCQkJc2xhdmUtPm10ZC5zaXplKTsKKwkJCQlwYXJ0LT5uYW1l LCBwYXJlbnQtPnNpemUgLSBjaGlsZC0+cGFydC5vZmZzZXQsCisJCQkJY2hpbGQtPnNpemUpOwog CQkJLyogcmVnaXN0ZXIgdG8gcHJlc2VydmUgb3JkZXJpbmcgKi8KIAkJCWdvdG8gb3V0X3JlZ2lz dGVyOwogCQl9CiAJfQotCWlmIChzbGF2ZS0+bXRkLnNpemUgPT0gTVREUEFSVF9TSVpfRlVMTCkK LQkJc2xhdmUtPm10ZC5zaXplID0gcGFyZW50LT5zaXplIC0gc2xhdmUtPm9mZnNldDsKKwlpZiAo Y2hpbGQtPnNpemUgPT0gTVREUEFSVF9TSVpfRlVMTCkKKwkJY2hpbGQtPnNpemUgPSBwYXJlbnQt PnNpemUgLSBjaGlsZC0+cGFydC5vZmZzZXQ7CiAKLQlwcmludGsoS0VSTl9OT1RJQ0UgIjB4JTAx MmxseC0weCUwMTJsbHggOiBcIiVzXCJcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpc2xhdmUtPm9m ZnNldCwKLQkJKHVuc2lnbmVkIGxvbmcgbG9uZykoc2xhdmUtPm9mZnNldCArIHNsYXZlLT5tdGQu c2l6ZSksIHNsYXZlLT5tdGQubmFtZSk7CisJcHJpbnRrKEtFUk5fTk9USUNFICIweCUwMTJsbHgt MHglMDEybGx4IDogXCIlc1wiXG4iLAorCSAgICAgICBjaGlsZC0+cGFydC5vZmZzZXQsIGNoaWxk LT5wYXJ0Lm9mZnNldCArIGNoaWxkLT5zaXplLAorCSAgICAgICBjaGlsZC0+bmFtZSk7CiAKIAkv KiBsZXQncyBkbyBzb21lIHNhbml0eSBjaGVja3MgKi8KLQlpZiAoc2xhdmUtPm9mZnNldCA+PSBw YXJlbnQtPnNpemUpIHsKKwlpZiAoY2hpbGQtPnBhcnQub2Zmc2V0ID49IHBhcmVudC0+c2l6ZSkg ewogCQkvKiBsZXQncyByZWdpc3RlciBpdCBhbnl3YXkgdG8gcHJlc2VydmUgb3JkZXJpbmcgKi8K LQkJc2xhdmUtPm9mZnNldCA9IDA7Ci0JCXNsYXZlLT5tdGQuc2l6ZSA9IDA7CisJCWNoaWxkLT5w YXJ0Lm9mZnNldCA9IDA7CisJCWNoaWxkLT5zaXplID0gMDsKIAogCQkvKiBJbml0aWFsaXplIC0+ ZXJhc2VzaXplIHRvIG1ha2UgYWRkX210ZF9kZXZpY2UoKSBoYXBweS4gKi8KLQkJc2xhdmUtPm10 ZC5lcmFzZXNpemUgPSBwYXJlbnQtPmVyYXNlc2l6ZTsKLQorCQljaGlsZC0+ZXJhc2VzaXplID0g cGFyZW50LT5lcmFzZXNpemU7CiAJCXByaW50ayhLRVJOX0VSUiJtdGQ6IHBhcnRpdGlvbiBcIiVz XCIgaXMgb3V0IG9mIHJlYWNoIC0tIGRpc2FibGVkXG4iLAogCQkJcGFydC0+bmFtZSk7CiAJCWdv dG8gb3V0X3JlZ2lzdGVyOwogCX0KLQlpZiAoc2xhdmUtPm9mZnNldCArIHNsYXZlLT5tdGQuc2l6 ZSA+IHBhcmVudC0+c2l6ZSkgewotCQlzbGF2ZS0+bXRkLnNpemUgPSBwYXJlbnQtPnNpemUgLSBz bGF2ZS0+b2Zmc2V0OworCWlmIChjaGlsZC0+cGFydC5vZmZzZXQgKyBjaGlsZC0+c2l6ZSA+IHBh cmVudC0+c2l6ZSkgeworCQljaGlsZC0+c2l6ZSA9IHBhcmVudC0+c2l6ZSAtIGNoaWxkLT5wYXJ0 Lm9mZnNldDsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyJtdGQ6IHBhcnRpdGlvbiBcIiVzXCIgZXh0 ZW5kcyBiZXlvbmQgdGhlIGVuZCBvZiBkZXZpY2UgXCIlc1wiIC0tIHNpemUgdHJ1bmNhdGVkIHRv ICUjbGx4XG4iLAotCQkJcGFydC0+bmFtZSwgcGFyZW50LT5uYW1lLCAodW5zaWduZWQgbG9uZyBs b25nKXNsYXZlLT5tdGQuc2l6ZSk7CisJCQlwYXJ0LT5uYW1lLCBwYXJlbnQtPm5hbWUsIGNoaWxk LT5zaXplKTsKIAl9CiAJaWYgKHBhcmVudC0+bnVtZXJhc2VyZWdpb25zID4gMSkgewogCQkvKiBE ZWFsIHdpdGggdmFyaWFibGUgZXJhc2Ugc2l6ZSBzdHVmZiAqLwogCQlpbnQgaSwgbWF4ID0gcGFy ZW50LT5udW1lcmFzZXJlZ2lvbnM7Ci0JCXU2NCBlbmQgPSBzbGF2ZS0+b2Zmc2V0ICsgc2xhdmUt Pm10ZC5zaXplOworCQl1NjQgZW5kID0gY2hpbGQtPnBhcnQub2Zmc2V0ICsgY2hpbGQtPnNpemU7 CiAJCXN0cnVjdCBtdGRfZXJhc2VfcmVnaW9uX2luZm8gKnJlZ2lvbnMgPSBwYXJlbnQtPmVyYXNl cmVnaW9uczsKIAogCQkvKiBGaW5kIHRoZSBmaXJzdCBlcmFzZSByZWdpb25zIHdoaWNoIGlzIHBh cnQgb2YgdGhpcwogCQkgKiBwYXJ0aXRpb24uICovCi0JCWZvciAoaSA9IDA7IGkgPCBtYXggJiYg cmVnaW9uc1tpXS5vZmZzZXQgPD0gc2xhdmUtPm9mZnNldDsgaSsrKQorCQlmb3IgKGkgPSAwOyBp IDwgbWF4ICYmIHJlZ2lvbnNbaV0ub2Zmc2V0IDw9IGNoaWxkLT5wYXJ0Lm9mZnNldDsKKwkJICAg ICBpKyspCiAJCQk7CiAJCS8qIFRoZSBsb29wIHNlYXJjaGVkIGZvciB0aGUgcmVnaW9uIF9iZWhp bmRfIHRoZSBmaXJzdCBvbmUgKi8KIAkJaWYgKGkgPiAwKQpAQCAtNDk1LDcwICsxNTAsNjggQEAg c3RhdGljIHN0cnVjdCBtdGRfcGFydCAqYWxsb2NhdGVfcGFydGl0aW9uKHN0cnVjdCBtdGRfaW5m byAqcGFyZW50LAogCiAJCS8qIFBpY2sgYmlnZ2VzdCBlcmFzZXNpemUgKi8KIAkJZm9yICg7IGkg PCBtYXggJiYgcmVnaW9uc1tpXS5vZmZzZXQgPCBlbmQ7IGkrKykgewotCQkJaWYgKHNsYXZlLT5t dGQuZXJhc2VzaXplIDwgcmVnaW9uc1tpXS5lcmFzZXNpemUpIHsKLQkJCQlzbGF2ZS0+bXRkLmVy YXNlc2l6ZSA9IHJlZ2lvbnNbaV0uZXJhc2VzaXplOwotCQkJfQorCQkJaWYgKGNoaWxkLT5lcmFz ZXNpemUgPCByZWdpb25zW2ldLmVyYXNlc2l6ZSkKKwkJCQljaGlsZC0+ZXJhc2VzaXplID0gcmVn aW9uc1tpXS5lcmFzZXNpemU7CiAJCX0KLQkJQlVHX09OKHNsYXZlLT5tdGQuZXJhc2VzaXplID09 IDApOworCQlCVUdfT04oY2hpbGQtPmVyYXNlc2l6ZSA9PSAwKTsKIAl9IGVsc2UgewogCQkvKiBT aW5nbGUgZXJhc2Ugc2l6ZSAqLwotCQlzbGF2ZS0+bXRkLmVyYXNlc2l6ZSA9IHBhcmVudC0+ZXJh c2VzaXplOworCQljaGlsZC0+ZXJhc2VzaXplID0gcGFyZW50LT5lcmFzZXNpemU7CiAJfQogCiAJ LyoKLQkgKiBTbGF2ZSBlcmFzZXNpemUgbWlnaHQgZGlmZmVyIGZyb20gdGhlIG1hc3RlciBvbmUg aWYgdGhlIG1hc3RlcgorCSAqIENoaWxkIGVyYXNlc2l6ZSBtaWdodCBkaWZmZXIgZnJvbSB0aGUg cGFyZW50IG9uZSBpZiB0aGUgcGFyZW50CiAJICogZXhwb3NlcyBzZXZlcmFsIHJlZ2lvbnMgd2l0 aCBkaWZmZXJlbnQgZXJhc2VzaXplLiBBZGp1c3QKIAkgKiB3cl9hbGlnbm1lbnQgYWNjb3JkaW5n bHkuCiAJICovCi0JaWYgKCEoc2xhdmUtPm10ZC5mbGFncyAmIE1URF9OT19FUkFTRSkpCi0JCXdy X2FsaWdubWVudCA9IHNsYXZlLT5tdGQuZXJhc2VzaXplOworCWlmICghKGNoaWxkLT5mbGFncyAm IE1URF9OT19FUkFTRSkpCisJCXdyX2FsaWdubWVudCA9IGNoaWxkLT5lcmFzZXNpemU7CiAKLQl0 bXAgPSBwYXJ0X2Fic29sdXRlX29mZnNldChwYXJlbnQpICsgc2xhdmUtPm9mZnNldDsKKwl0bXAg PSBtdGRfZ2V0X21hc3Rlcl9vZnMoY2hpbGQsIDApOwogCXJlbWFpbmRlciA9IGRvX2Rpdih0bXAs IHdyX2FsaWdubWVudCk7Ci0JaWYgKChzbGF2ZS0+bXRkLmZsYWdzICYgTVREX1dSSVRFQUJMRSkg JiYgcmVtYWluZGVyKSB7CisJaWYgKChjaGlsZC0+ZmxhZ3MgJiBNVERfV1JJVEVBQkxFKSAmJiBy ZW1haW5kZXIpIHsKIAkJLyogRG9lc24ndCBzdGFydCBvbiBhIGJvdW5kYXJ5IG9mIG1ham9yIGVy YXNlIHNpemUgKi8KIAkJLyogRklYTUU6IExldCBpdCBiZSB3cml0YWJsZSBpZiBpdCBpcyBvbiBh IGJvdW5kYXJ5IG9mCiAJCSAqIF9taW5vcl8gZXJhc2Ugc2l6ZSB0aG91Z2ggKi8KLQkJc2xhdmUt Pm10ZC5mbGFncyAmPSB+TVREX1dSSVRFQUJMRTsKKwkJY2hpbGQtPmZsYWdzICY9IH5NVERfV1JJ VEVBQkxFOwogCQlwcmludGsoS0VSTl9XQVJOSU5HIm10ZDogcGFydGl0aW9uIFwiJXNcIiBkb2Vz bid0IHN0YXJ0IG9uIGFuIGVyYXNlL3dyaXRlIGJsb2NrIGJvdW5kYXJ5IC0tIGZvcmNlIHJlYWQt b25seVxuIiwKIAkJCXBhcnQtPm5hbWUpOwogCX0KIAotCXRtcCA9IHBhcnRfYWJzb2x1dGVfb2Zm c2V0KHBhcmVudCkgKyBzbGF2ZS0+bXRkLnNpemU7CisJdG1wID0gbXRkX2dldF9tYXN0ZXJfb2Zz KGNoaWxkLCAwKSArIGNoaWxkLT5zaXplOwogCXJlbWFpbmRlciA9IGRvX2Rpdih0bXAsIHdyX2Fs aWdubWVudCk7Ci0JaWYgKChzbGF2ZS0+bXRkLmZsYWdzICYgTVREX1dSSVRFQUJMRSkgJiYgcmVt YWluZGVyKSB7Ci0JCXNsYXZlLT5tdGQuZmxhZ3MgJj0gfk1URF9XUklURUFCTEU7CisJaWYgKChj aGlsZC0+ZmxhZ3MgJiBNVERfV1JJVEVBQkxFKSAmJiByZW1haW5kZXIpIHsKKwkJY2hpbGQtPmZs YWdzICY9IH5NVERfV1JJVEVBQkxFOwogCQlwcmludGsoS0VSTl9XQVJOSU5HIm10ZDogcGFydGl0 aW9uIFwiJXNcIiBkb2Vzbid0IGVuZCBvbiBhbiBlcmFzZS93cml0ZSBibG9jayAtLSBmb3JjZSBy ZWFkLW9ubHlcbiIsCiAJCQlwYXJ0LT5uYW1lKTsKIAl9CiAKLQltdGRfc2V0X29vYmxheW91dCgm c2xhdmUtPm10ZCwgJnBhcnRfb29ibGF5b3V0X29wcyk7Ci0Jc2xhdmUtPm10ZC5lY2Nfc3RlcF9z aXplID0gcGFyZW50LT5lY2Nfc3RlcF9zaXplOwotCXNsYXZlLT5tdGQuZWNjX3N0cmVuZ3RoID0g cGFyZW50LT5lY2Nfc3RyZW5ndGg7Ci0Jc2xhdmUtPm10ZC5iaXRmbGlwX3RocmVzaG9sZCA9IHBh cmVudC0+Yml0ZmxpcF90aHJlc2hvbGQ7CisJY2hpbGQtPmVjY19zdGVwX3NpemUgPSBwYXJlbnQt PmVjY19zdGVwX3NpemU7CisJY2hpbGQtPmVjY19zdHJlbmd0aCA9IHBhcmVudC0+ZWNjX3N0cmVu Z3RoOworCWNoaWxkLT5iaXRmbGlwX3RocmVzaG9sZCA9IHBhcmVudC0+Yml0ZmxpcF90aHJlc2hv bGQ7CiAKLQlpZiAocGFyZW50LT5fYmxvY2tfaXNiYWQpIHsKKwlpZiAobWFzdGVyLT5fYmxvY2tf aXNiYWQpIHsKIAkJdWludDY0X3Qgb2ZmcyA9IDA7CiAKLQkJd2hpbGUgKG9mZnMgPCBzbGF2ZS0+ bXRkLnNpemUpIHsKLQkJCWlmIChtdGRfYmxvY2tfaXNyZXNlcnZlZChwYXJlbnQsIG9mZnMgKyBz bGF2ZS0+b2Zmc2V0KSkKLQkJCQlzbGF2ZS0+bXRkLmVjY19zdGF0cy5iYnRibG9ja3MrKzsKLQkJ CWVsc2UgaWYgKG10ZF9ibG9ja19pc2JhZChwYXJlbnQsIG9mZnMgKyBzbGF2ZS0+b2Zmc2V0KSkK LQkJCQlzbGF2ZS0+bXRkLmVjY19zdGF0cy5iYWRibG9ja3MrKzsKLQkJCW9mZnMgKz0gc2xhdmUt Pm10ZC5lcmFzZXNpemU7CisJCXdoaWxlIChvZmZzIDwgY2hpbGQtPnNpemUpIHsKKwkJCWlmICht dGRfYmxvY2tfaXNyZXNlcnZlZChjaGlsZCwgb2ZmcykpCisJCQkJY2hpbGQtPmVjY19zdGF0cy5i YnRibG9ja3MrKzsKKwkJCWVsc2UgaWYgKG10ZF9ibG9ja19pc2JhZChjaGlsZCwgb2ZmcykpCisJ CQkJY2hpbGQtPmVjY19zdGF0cy5iYWRibG9ja3MrKzsKKwkJCW9mZnMgKz0gY2hpbGQtPmVyYXNl c2l6ZTsKIAkJfQogCX0KIAogb3V0X3JlZ2lzdGVyOgotCXJldHVybiBzbGF2ZTsKKwlyZXR1cm4g Y2hpbGQ7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IG10ZF9wYXJ0aXRpb25fb2Zmc2V0X3Nob3coc3Ry dWN0IGRldmljZSAqZGV2LAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAq YnVmKQogewogCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0J c3RydWN0IG10ZF9wYXJ0ICpwYXJ0ID0gbXRkX3RvX3BhcnQobXRkKTsKLQlyZXR1cm4gc25wcmlu dGYoYnVmLCBQQUdFX1NJWkUsICIlbGx1XG4iLCBwYXJ0LT5vZmZzZXQpOworCisJcmV0dXJuIHNu cHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWxsZFxuIiwgbXRkLT5wYXJ0Lm9mZnNldCk7CiB9CiAK IHN0YXRpYyBERVZJQ0VfQVRUUihvZmZzZXQsIFNfSVJVR08sIG10ZF9wYXJ0aXRpb25fb2Zmc2V0 X3Nob3csIE5VTEwpOwpAQCAtNTY4LDkgKzIyMSw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0 cmlidXRlICptdGRfcGFydGl0aW9uX2F0dHJzW10gPSB7CiAJTlVMTAogfTsKIAotc3RhdGljIGlu dCBtdGRfYWRkX3BhcnRpdGlvbl9hdHRycyhzdHJ1Y3QgbXRkX3BhcnQgKm5ldykKK3N0YXRpYyBp bnQgbXRkX2FkZF9wYXJ0aXRpb25fYXR0cnMoc3RydWN0IG10ZF9pbmZvICpuZXcpCiB7Ci0JaW50 IHJldCA9IHN5c2ZzX2NyZWF0ZV9maWxlcygmbmV3LT5tdGQuZGV2LmtvYmosIG10ZF9wYXJ0aXRp b25fYXR0cnMpOworCWludCByZXQgPSBzeXNmc19jcmVhdGVfZmlsZXMoJm5ldy0+ZGV2LmtvYmos IG10ZF9wYXJ0aXRpb25fYXR0cnMpOwogCWlmIChyZXQpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcK IAkJICAgICAgICJtdGQ6IGZhaWxlZCB0byBjcmVhdGUgcGFydGl0aW9uIGF0dHJzLCBlcnI9JWRc biIsIHJldCk7CkBAIC01ODAsOCArMjMzLDkgQEAgc3RhdGljIGludCBtdGRfYWRkX3BhcnRpdGlv bl9hdHRycyhzdHJ1Y3QgbXRkX3BhcnQgKm5ldykKIGludCBtdGRfYWRkX3BhcnRpdGlvbihzdHJ1 Y3QgbXRkX2luZm8gKnBhcmVudCwgY29uc3QgY2hhciAqbmFtZSwKIAkJICAgICAgbG9uZyBsb25n IG9mZnNldCwgbG9uZyBsb25nIGxlbmd0aCkKIHsKKwlzdHJ1Y3QgbXRkX2luZm8gKm1hc3RlciA9 IG10ZF9nZXRfbWFzdGVyKHBhcmVudCk7CiAJc3RydWN0IG10ZF9wYXJ0aXRpb24gcGFydDsKLQlz dHJ1Y3QgbXRkX3BhcnQgKm5ldzsKKwlzdHJ1Y3QgbXRkX2luZm8gKmNoaWxkOwogCWludCByZXQg PSAwOwogCiAJLyogdGhlIGRpcmVjdCBvZmZzZXQgaXMgZXhwZWN0ZWQgKi8KQEAgLTYwMCwyOCAr MjU0LDI4IEBAIGludCBtdGRfYWRkX3BhcnRpdGlvbihzdHJ1Y3QgbXRkX2luZm8gKnBhcmVudCwg Y29uc3QgY2hhciAqbmFtZSwKIAlwYXJ0LnNpemUgPSBsZW5ndGg7CiAJcGFydC5vZmZzZXQgPSBv ZmZzZXQ7CiAKLQluZXcgPSBhbGxvY2F0ZV9wYXJ0aXRpb24ocGFyZW50LCAmcGFydCwgLTEsIG9m ZnNldCk7Ci0JaWYgKElTX0VSUihuZXcpKQotCQlyZXR1cm4gUFRSX0VSUihuZXcpOworCWNoaWxk ID0gYWxsb2NhdGVfcGFydGl0aW9uKHBhcmVudCwgJnBhcnQsIC0xLCBvZmZzZXQpOworCWlmIChJ U19FUlIoY2hpbGQpKQorCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7CiAKLQltdXRleF9sb2NrKCZt dGRfcGFydGl0aW9uc19tdXRleCk7Ci0JbGlzdF9hZGQoJm5ldy0+bGlzdCwgJm10ZF9wYXJ0aXRp b25zKTsKLQltdXRleF91bmxvY2soJm10ZF9wYXJ0aXRpb25zX211dGV4KTsKKwltdXRleF9sb2Nr KCZtYXN0ZXItPm1hc3Rlci5wYXJ0aXRpb25zX2xvY2spOworCWxpc3RfYWRkX3RhaWwoJmNoaWxk LT5wYXJ0Lm5vZGUsICZwYXJlbnQtPnBhcnRpdGlvbnMpOworCW11dGV4X3VubG9jaygmbWFzdGVy LT5tYXN0ZXIucGFydGl0aW9uc19sb2NrKTsKIAotCXJldCA9IGFkZF9tdGRfZGV2aWNlKCZuZXct Pm10ZCk7CisJcmV0ID0gYWRkX210ZF9kZXZpY2UoY2hpbGQpOwogCWlmIChyZXQpCiAJCWdvdG8g ZXJyX3JlbW92ZV9wYXJ0OwogCi0JbXRkX2FkZF9wYXJ0aXRpb25fYXR0cnMobmV3KTsKKwltdGRf YWRkX3BhcnRpdGlvbl9hdHRycyhjaGlsZCk7CiAKIAlyZXR1cm4gMDsKIAogZXJyX3JlbW92ZV9w YXJ0OgotCW11dGV4X2xvY2soJm10ZF9wYXJ0aXRpb25zX211dGV4KTsKLQlsaXN0X2RlbCgmbmV3 LT5saXN0KTsKLQltdXRleF91bmxvY2soJm10ZF9wYXJ0aXRpb25zX211dGV4KTsKKwltdXRleF9s b2NrKCZtYXN0ZXItPm1hc3Rlci5wYXJ0aXRpb25zX2xvY2spOworCWxpc3RfZGVsKCZjaGlsZC0+ cGFydC5ub2RlKTsKKwltdXRleF91bmxvY2soJm1hc3Rlci0+bWFzdGVyLnBhcnRpdGlvbnNfbG9j ayk7CiAKLQlmcmVlX3BhcnRpdGlvbihuZXcpOworCWZyZWVfcGFydGl0aW9uKGNoaWxkKTsKIAog CXJldHVybiByZXQ7CiB9CkBAIC02MzAsMTE5ICsyODQsMTQyIEBAIEVYUE9SVF9TWU1CT0xfR1BM KG10ZF9hZGRfcGFydGl0aW9uKTsKIC8qKgogICogX19tdGRfZGVsX3BhcnRpdGlvbiAtIGRlbGV0 ZSBNVEQgcGFydGl0aW9uCiAgKgotICogQHByaXY6IGludGVybmFsIE1URCBzdHJ1Y3QgZm9yIHBh cnRpdGlvbiB0byBiZSBkZWxldGVkCisgKiBAcHJpdjogTVREIHN0cnVjdHVyZSB0byBiZSBkZWxl dGVkCiAgKgogICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBwYXJ0aXRp b25zIG11dGV4IGxvY2tlZC4KICAqLwotc3RhdGljIGludCBfX210ZF9kZWxfcGFydGl0aW9uKHN0 cnVjdCBtdGRfcGFydCAqcHJpdikKK3N0YXRpYyBpbnQgX19tdGRfZGVsX3BhcnRpdGlvbihzdHJ1 Y3QgbXRkX2luZm8gKm10ZCkKIHsKLQlzdHJ1Y3QgbXRkX3BhcnQgKmNoaWxkLCAqbmV4dDsKKwlz dHJ1Y3QgbXRkX2luZm8gKmNoaWxkLCAqbmV4dDsKIAlpbnQgZXJyOwogCi0JbGlzdF9mb3JfZWFj aF9lbnRyeV9zYWZlKGNoaWxkLCBuZXh0LCAmbXRkX3BhcnRpdGlvbnMsIGxpc3QpIHsKLQkJaWYg KGNoaWxkLT5wYXJlbnQgPT0gJnByaXYtPm10ZCkgewotCQkJZXJyID0gX19tdGRfZGVsX3BhcnRp dGlvbihjaGlsZCk7Ci0JCQlpZiAoZXJyKQotCQkJCXJldHVybiBlcnI7Ci0JCX0KKwlsaXN0X2Zv cl9lYWNoX2VudHJ5X3NhZmUoY2hpbGQsIG5leHQsICZtdGQtPnBhcnRpdGlvbnMsIHBhcnQubm9k ZSkgeworCQllcnIgPSBfX210ZF9kZWxfcGFydGl0aW9uKGNoaWxkKTsKKwkJaWYgKGVycikKKwkJ CXJldHVybiBlcnI7CiAJfQogCi0Jc3lzZnNfcmVtb3ZlX2ZpbGVzKCZwcml2LT5tdGQuZGV2Lmtv YmosIG10ZF9wYXJ0aXRpb25fYXR0cnMpOworCXN5c2ZzX3JlbW92ZV9maWxlcygmbXRkLT5kZXYu a29iaiwgbXRkX3BhcnRpdGlvbl9hdHRycyk7CiAKLQllcnIgPSBkZWxfbXRkX2RldmljZSgmcHJp di0+bXRkKTsKKwllcnIgPSBkZWxfbXRkX2RldmljZShtdGQpOwogCWlmIChlcnIpCiAJCXJldHVy biBlcnI7CiAKLQlsaXN0X2RlbCgmcHJpdi0+bGlzdCk7Ci0JZnJlZV9wYXJ0aXRpb24ocHJpdik7 CisJbGlzdF9kZWwoJmNoaWxkLT5wYXJ0Lm5vZGUpOworCWZyZWVfcGFydGl0aW9uKG10ZCk7CiAK IAlyZXR1cm4gMDsKIH0KIAogLyoKICAqIFRoaXMgZnVuY3Rpb24gdW5yZWdpc3RlcnMgYW5kIGRl c3Ryb3kgYWxsIHNsYXZlIE1URCBvYmplY3RzIHdoaWNoIGFyZQotICogYXR0YWNoZWQgdG8gdGhl IGdpdmVuIE1URCBvYmplY3QuCisgKiBhdHRhY2hlZCB0byB0aGUgZ2l2ZW4gTVREIG9iamVjdCwg cmVjdXJzaXZlbHkuCiAgKi8KK2ludCBfX2RlbF9tdGRfcGFydGl0aW9ucyhzdHJ1Y3QgbXRkX2lu Zm8gKm10ZCkKK3sKKwlzdHJ1Y3QgbXRkX2luZm8gKmNoaWxkLCAqbmV4dDsKKwlMSVNUX0hFQUQo dG1wX2xpc3QpOworCWludCByZXQsIGVyciA9IDA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3Nh ZmUoY2hpbGQsIG5leHQsICZtdGQtPnBhcnRpdGlvbnMsIHBhcnQubm9kZSkgeworCQlpZiAobXRk X2hhc19wYXJ0aXRpb25zKGNoaWxkKSkKKwkJCWRlbF9tdGRfcGFydGl0aW9ucyhjaGlsZCk7CisK KwkJcHJfaW5mbygiRGVsZXRpbmcgJXMgTVREIHBhcnRpdGlvblxuIiwgY2hpbGQtPm5hbWUpOwor CQlyZXQgPSBkZWxfbXRkX2RldmljZShjaGlsZCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcl9l cnIoIkVycm9yIHdoZW4gZGVsZXRpbmcgcGFydGl0aW9uIFwiJXNcIiAoJWQpXG4iLAorCQkJICAg ICAgIGNoaWxkLT5uYW1lLCByZXQpOworCQkJZXJyID0gcmV0OworCQkJY29udGludWU7CisJCX0K KworCQlsaXN0X2RlbCgmY2hpbGQtPnBhcnQubm9kZSk7CisJCWZyZWVfcGFydGl0aW9uKGNoaWxk KTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCiBpbnQgZGVsX210ZF9wYXJ0aXRpb25zKHN0cnVj dCBtdGRfaW5mbyAqbXRkKQogewotCXN0cnVjdCBtdGRfcGFydCAqc2xhdmUsICpuZXh0OwotCWlu dCByZXQsIGVyciA9IDA7CisJc3RydWN0IG10ZF9pbmZvICptYXN0ZXIgPSBtdGRfZ2V0X21hc3Rl cihtdGQpOworCWludCByZXQ7CiAKLQltdXRleF9sb2NrKCZtdGRfcGFydGl0aW9uc19tdXRleCk7 Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNsYXZlLCBuZXh0LCAmbXRkX3BhcnRpdGlvbnMs IGxpc3QpCi0JCWlmIChzbGF2ZS0+cGFyZW50ID09IG10ZCkgewotCQkJcmV0ID0gX19tdGRfZGVs X3BhcnRpdGlvbihzbGF2ZSk7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQllcnIgPSByZXQ7Ci0JCX0K LQltdXRleF91bmxvY2soJm10ZF9wYXJ0aXRpb25zX211dGV4KTsKKwlwcl9pbmZvKCJEZWxldGlu ZyBNVEQgcGFydGl0aW9ucyBvbiBcIiVzXCI6XG4iLCBtdGQtPm5hbWUpOwogCi0JcmV0dXJuIGVy cjsKKwltdXRleF9sb2NrKCZtYXN0ZXItPm1hc3Rlci5wYXJ0aXRpb25zX2xvY2spOworCXJldCA9 IF9fZGVsX210ZF9wYXJ0aXRpb25zKG10ZCk7CisJbXV0ZXhfdW5sb2NrKCZtYXN0ZXItPm1hc3Rl ci5wYXJ0aXRpb25zX2xvY2spOworCisJcmV0dXJuIHJldDsKIH0KIAogaW50IG10ZF9kZWxfcGFy dGl0aW9uKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgcGFydG5vKQogewotCXN0cnVjdCBtdGRf cGFydCAqc2xhdmUsICpuZXh0OworCXN0cnVjdCBtdGRfaW5mbyAqY2hpbGQsICptYXN0ZXIgPSBt dGRfZ2V0X21hc3RlcihtdGQpOwogCWludCByZXQgPSAtRUlOVkFMOwogCi0JbXV0ZXhfbG9jaygm bXRkX3BhcnRpdGlvbnNfbXV0ZXgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzbGF2ZSwg bmV4dCwgJm10ZF9wYXJ0aXRpb25zLCBsaXN0KQotCQlpZiAoKHNsYXZlLT5wYXJlbnQgPT0gbXRk KSAmJgotCQkgICAgKHNsYXZlLT5tdGQuaW5kZXggPT0gcGFydG5vKSkgewotCQkJcmV0ID0gX19t dGRfZGVsX3BhcnRpdGlvbihzbGF2ZSk7CisJbXV0ZXhfbG9jaygmbWFzdGVyLT5tYXN0ZXIucGFy dGl0aW9uc19sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoaWxkLCAmbXRkLT5wYXJ0aXRp b25zLCBwYXJ0Lm5vZGUpIHsKKwkJaWYgKGNoaWxkLT5pbmRleCA9PSBwYXJ0bm8pIHsKKwkJCXJl dCA9IF9fbXRkX2RlbF9wYXJ0aXRpb24oY2hpbGQpOwogCQkJYnJlYWs7CiAJCX0KLQltdXRleF91 bmxvY2soJm10ZF9wYXJ0aXRpb25zX211dGV4KTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZtYXN0ZXIt Pm1hc3Rlci5wYXJ0aXRpb25zX2xvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1C T0xfR1BMKG10ZF9kZWxfcGFydGl0aW9uKTsKIAogLyoKLSAqIFRoaXMgZnVuY3Rpb24sIGdpdmVu IGEgbWFzdGVyIE1URCBvYmplY3QgYW5kIGEgcGFydGl0aW9uIHRhYmxlLCBjcmVhdGVzCi0gKiBh bmQgcmVnaXN0ZXJzIHNsYXZlIE1URCBvYmplY3RzIHdoaWNoIGFyZSBib3VuZCB0byB0aGUgbWFz dGVyIGFjY29yZGluZyB0bwotICogdGhlIHBhcnRpdGlvbiBkZWZpbml0aW9ucy4KKyAqIFRoaXMg ZnVuY3Rpb24sIGdpdmVuIGEgcGFyZW50IE1URCBvYmplY3QgYW5kIGEgcGFydGl0aW9uIHRhYmxl LCBjcmVhdGVzCisgKiBhbmQgcmVnaXN0ZXJzIHRoZSBjaGlsZCBNVEQgb2JqZWN0cyB3aGljaCBh cmUgYm91bmQgdG8gdGhlIHBhcmVudCBhY2NvcmRpbmcKKyAqIHRvIHRoZSBwYXJ0aXRpb24gZGVm aW5pdGlvbnMuCiAgKgotICogRm9yIGhpc3RvcmljYWwgcmVhc29ucywgdGhpcyBmdW5jdGlvbidz IGNhbGxlciBvbmx5IHJlZ2lzdGVycyB0aGUgbWFzdGVyCisgKiBGb3IgaGlzdG9yaWNhbCByZWFz b25zLCB0aGlzIGZ1bmN0aW9uJ3MgY2FsbGVyIG9ubHkgcmVnaXN0ZXJzIHRoZSBwYXJlbnQKICAq IGlmIHRoZSBNVERfUEFSVElUSU9ORURfTUFTVEVSIGNvbmZpZyBvcHRpb24gaXMgc2V0LgogICov CiAKLWludCBhZGRfbXRkX3BhcnRpdGlvbnMoc3RydWN0IG10ZF9pbmZvICptYXN0ZXIsCitpbnQg YWRkX210ZF9wYXJ0aXRpb25zKHN0cnVjdCBtdGRfaW5mbyAqcGFyZW50LAogCQkgICAgICAgY29u c3Qgc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzLAogCQkgICAgICAgaW50IG5icGFydHMpCiB7 Ci0Jc3RydWN0IG10ZF9wYXJ0ICpzbGF2ZTsKKwlzdHJ1Y3QgbXRkX2luZm8gKmNoaWxkLCAqbWFz dGVyID0gbXRkX2dldF9tYXN0ZXIocGFyZW50KTsKIAl1aW50NjRfdCBjdXJfb2Zmc2V0ID0gMDsK IAlpbnQgaSwgcmV0OwogCi0JcHJpbnRrKEtFUk5fTk9USUNFICJDcmVhdGluZyAlZCBNVEQgcGFy dGl0aW9ucyBvbiBcIiVzXCI6XG4iLCBuYnBhcnRzLCBtYXN0ZXItPm5hbWUpOworCXByaW50ayhL RVJOX05PVElDRSAiQ3JlYXRpbmcgJWQgTVREIHBhcnRpdGlvbnMgb24gXCIlc1wiOlxuIiwKKwkg ICAgICAgbmJwYXJ0cywgcGFyZW50LT5uYW1lKTsKIAogCWZvciAoaSA9IDA7IGkgPCBuYnBhcnRz OyBpKyspIHsKLQkJc2xhdmUgPSBhbGxvY2F0ZV9wYXJ0aXRpb24obWFzdGVyLCBwYXJ0cyArIGks IGksIGN1cl9vZmZzZXQpOwotCQlpZiAoSVNfRVJSKHNsYXZlKSkgewotCQkJcmV0ID0gUFRSX0VS UihzbGF2ZSk7CisJCWNoaWxkID0gYWxsb2NhdGVfcGFydGl0aW9uKHBhcmVudCwgcGFydHMgKyBp LCBpLCBjdXJfb2Zmc2V0KTsKKwkJaWYgKElTX0VSUihjaGlsZCkpIHsKKwkJCXJldCA9IFBUUl9F UlIoY2hpbGQpOwogCQkJZ290byBlcnJfZGVsX3BhcnRpdGlvbnM7CiAJCX0KIAotCQltdXRleF9s b2NrKCZtdGRfcGFydGl0aW9uc19tdXRleCk7Ci0JCWxpc3RfYWRkKCZzbGF2ZS0+bGlzdCwgJm10 ZF9wYXJ0aXRpb25zKTsKLQkJbXV0ZXhfdW5sb2NrKCZtdGRfcGFydGl0aW9uc19tdXRleCk7CisJ CW11dGV4X2xvY2soJm1hc3Rlci0+bWFzdGVyLnBhcnRpdGlvbnNfbG9jayk7CisJCWxpc3RfYWRk X3RhaWwoJmNoaWxkLT5wYXJ0Lm5vZGUsICZwYXJlbnQtPnBhcnRpdGlvbnMpOworCQltdXRleF91 bmxvY2soJm1hc3Rlci0+bWFzdGVyLnBhcnRpdGlvbnNfbG9jayk7CiAKLQkJcmV0ID0gYWRkX210 ZF9kZXZpY2UoJnNsYXZlLT5tdGQpOworCQlyZXQgPSBhZGRfbXRkX2RldmljZShjaGlsZCk7CiAJ CWlmIChyZXQpIHsKLQkJCW11dGV4X2xvY2soJm10ZF9wYXJ0aXRpb25zX211dGV4KTsKLQkJCWxp c3RfZGVsKCZzbGF2ZS0+bGlzdCk7Ci0JCQltdXRleF91bmxvY2soJm10ZF9wYXJ0aXRpb25zX211 dGV4KTsKKwkJCW11dGV4X2xvY2soJm1hc3Rlci0+bWFzdGVyLnBhcnRpdGlvbnNfbG9jayk7CisJ CQlsaXN0X2RlbCgmY2hpbGQtPnBhcnQubm9kZSk7CisJCQltdXRleF91bmxvY2soJm1hc3Rlci0+ bWFzdGVyLnBhcnRpdGlvbnNfbG9jayk7CiAKLQkJCWZyZWVfcGFydGl0aW9uKHNsYXZlKTsKKwkJ CWZyZWVfcGFydGl0aW9uKGNoaWxkKTsKIAkJCWdvdG8gZXJyX2RlbF9wYXJ0aXRpb25zOwogCQl9 CiAKLQkJbXRkX2FkZF9wYXJ0aXRpb25fYXR0cnMoc2xhdmUpOworCQltdGRfYWRkX3BhcnRpdGlv bl9hdHRycyhjaGlsZCk7CisKIAkJLyogTG9vayBmb3Igc3VicGFydGl0aW9ucyAqLwotCQlwYXJz ZV9tdGRfcGFydGl0aW9ucygmc2xhdmUtPm10ZCwgcGFydHNbaV0udHlwZXMsIE5VTEwpOworCQlw YXJzZV9tdGRfcGFydGl0aW9ucyhjaGlsZCwgcGFydHNbaV0udHlwZXMsIE5VTEwpOwogCi0JCWN1 cl9vZmZzZXQgPSBzbGF2ZS0+b2Zmc2V0ICsgc2xhdmUtPm10ZC5zaXplOworCQljdXJfb2Zmc2V0 ID0gY2hpbGQtPnBhcnQub2Zmc2V0ICsgY2hpbGQtPnNpemU7CiAJfQogCiAJcmV0dXJuIDA7CkBA IC0xMDIzLDI5ICs3MDAsMTEgQEAgdm9pZCBtdGRfcGFydF9wYXJzZXJfY2xlYW51cChzdHJ1Y3Qg bXRkX3BhcnRpdGlvbnMgKnBhcnRzKQogCX0KIH0KIAotaW50IG10ZF9pc19wYXJ0aXRpb24oY29u c3Qgc3RydWN0IG10ZF9pbmZvICptdGQpCi17Ci0Jc3RydWN0IG10ZF9wYXJ0ICpwYXJ0OwotCWlu dCBpc3BhcnQgPSAwOwotCi0JbXV0ZXhfbG9jaygmbXRkX3BhcnRpdGlvbnNfbXV0ZXgpOwotCWxp c3RfZm9yX2VhY2hfZW50cnkocGFydCwgJm10ZF9wYXJ0aXRpb25zLCBsaXN0KQotCQlpZiAoJnBh cnQtPm10ZCA9PSBtdGQpIHsKLQkJCWlzcGFydCA9IDE7Ci0JCQlicmVhazsKLQkJfQotCW11dGV4 X3VubG9jaygmbXRkX3BhcnRpdGlvbnNfbXV0ZXgpOwotCi0JcmV0dXJuIGlzcGFydDsKLX0KLUVY UE9SVF9TWU1CT0xfR1BMKG10ZF9pc19wYXJ0aXRpb24pOwotCiAvKiBSZXR1cm5zIHRoZSBzaXpl IG9mIHRoZSBlbnRpcmUgZmxhc2ggY2hpcCAqLwogdWludDY0X3QgbXRkX2dldF9kZXZpY2Vfc2l6 ZShjb25zdCBzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKLQlpZiAoIW10ZF9pc19wYXJ0aXRpb24o bXRkKSkKLQkJcmV0dXJuIG10ZC0+c2l6ZTsKKwlzdHJ1Y3QgbXRkX2luZm8gKm1hc3RlciA9IG10 ZF9nZXRfbWFzdGVyKChzdHJ1Y3QgbXRkX2luZm8gKiltdGQpOwogCi0JcmV0dXJuIG10ZF9nZXRf ZGV2aWNlX3NpemUobXRkX3RvX3BhcnQobXRkKS0+cGFyZW50KTsKKwlyZXR1cm4gbWFzdGVyLT5z aXplOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobXRkX2dldF9kZXZpY2Vfc2l6ZSk7CmRpZmYgLS1n aXQgYS9pbmNsdWRlL2xpbnV4L210ZC9tdGQuaCBiL2luY2x1ZGUvbGludXgvbXRkL210ZC5oCmlu ZGV4IDI0OWU4ZDliZmJjZC4uNTA4ZDE0ZDQ1NDM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4 L210ZC9tdGQuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9tdGQuaApAQCAtOCw2ICs4LDcgQEAK IAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvdWlvLmg+CisjaW5j bHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVk ZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KQEAgLTE5NCwxMCArMTk1 LDQyIEBAIHN0cnVjdCBtdGRfZGVidWdfaW5mbyB7CiAJY29uc3QgY2hhciAqcGFydGlkOwogfTsK IAorLyoqCisgKiBzdHJ1Y3QgbXRkX3BhcnQgLSBNVEQgcGFydGl0aW9uIHNwZWNpZmljIGZpZWxk cworICoKKyAqIEBub2RlOiBsaXN0IG5vZGUgdXNlZCB0byBhZGQgYW4gTVREIHBhcnRpdGlvbiB0 byB0aGUgcGFyZW50IHBhcnRpdGlvbiBsaXN0CisgKiBAb2Zmc2V0OiBvZmZzZXQgb2YgdGhlIHBh cnRpdGlvbiByZWxhdGl2ZWx5IHRvIHRoZSBwYXJlbnQgb2Zmc2V0CisgKiBAZmxhZ3M6IG9yaWdp bmFsIGZsYWdzIChiZWZvcmUgdGhlIG10ZHBhcnQgbG9naWMgZGVjaWRlZCB0byB0d2VhayB0aGVt IGJhc2VkCisgKgkgICBvbiBmbGFzaCBjb25zdHJhaW50cywgbGlrZSBlcmFzZWJsb2NrL3BhZ2Vz aXplIGFsaWdubWVudCkKKyAqCisgKiBUaGlzIHN0cnVjdCBpcyBlbWJlZGRlZCBpbiBtdGRfaW5m byBhbmQgY29udGFpbnMgcGFydGl0aW9uLXNwZWNpZmljCisgKiBwcm9wZXJ0aWVzL2ZpZWxkcy4K KyAqLworc3RydWN0IG10ZF9wYXJ0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisJdTY0IG9m ZnNldDsKKwl1MzIgZmxhZ3M7Cit9OworCisvKioKKyAqIHN0cnVjdCBtdGRfbWFzdGVyIC0gTVRE IG1hc3RlciBzcGVjaWZpYyBmaWVsZHMKKyAqCisgKiBAcGFydGl0aW9uc19sb2NrOiBsb2NrIHBy b3RlY3RpbmcgYWNjZXNzZXMgdG8gdGhlIHBhcnRpdGlvbiBsaXN0LiBQcm90ZWN0cworICoJCSAg ICAgbm90IG9ubHkgdGhlIG1hc3RlciBwYXJ0aXRpb24gbGlzdCwgYnV0IGFsc28gYWxsCisgKgkJ ICAgICBzdWItcGFydGl0aW9ucy4KKyAqIEBzdXNwZW5kZWQ6IGV0IHRvIDEgd2hlbiB0aGUgZGV2 aWNlIGlzIHN1c3BlbmRlZCwgMCBvdGhlcndpc2UKKyAqCisgKiBUaGlzIHN0cnVjdCBpcyBlbWJl ZGRlZCBpbiBtdGRfaW5mbyBhbmQgY29udGFpbnMgbWFzdGVyLXNwZWNpZmljCisgKiBwcm9wZXJ0 aWVzL2ZpZWxkcy4KKyAqLworc3RydWN0IG10ZF9tYXN0ZXIgeworCXN0cnVjdCBtdXRleCBwYXJ0 aXRpb25zX2xvY2s7CisJdW5zaWduZWQgaW50IHN1c3BlbmRlZCA6IDE7Cit9OworCiBzdHJ1Y3Qg bXRkX2luZm8gewogCXVfY2hhciB0eXBlOwogCXVpbnQzMl90IGZsYWdzOwotCXVpbnQzMl90IG9y aWdfZmxhZ3M7IC8qIEZsYWdzIGFzIGJlZm9yZSBydW5uaW5nIG10ZCBjaGVja3MgKi8KIAl1aW50 NjRfdCBzaXplOwkgLy8gVG90YWwgc2l6ZSBvZiB0aGUgTVRECiAKIAkvKiAiTWFqb3IiIGVyYXNl IHNpemUgZm9yIHRoZSBkZXZpY2UuIE5hw692ZSB1c2VycyBtYXkgdGFrZSB0aGlzCkBAIC0zMzks OCArMzcyLDUwIEBAIHN0cnVjdCBtdGRfaW5mbyB7CiAJaW50IHVzZWNvdW50OwogCXN0cnVjdCBt dGRfZGVidWdfaW5mbyBkYmc7CiAJc3RydWN0IG52bWVtX2RldmljZSAqbnZtZW07CisKKwkvKgor CSAqIE1URCBtYXN0ZXJzIGRvIG5vdCBoYXZlIGFueSBwYXJlbnQsIE1URCBwYXJ0aXRpb25zIGRv LiBUaGUgcGFyZW50CisJICogTVREIGRldmljZSBjYW4gaXRzZWxmIGJlIGEgcGFydGl0aW9uLgor CSAqLworCXN0cnVjdCBtdGRfaW5mbyAqcGFyZW50OworCisJLyogTGlzdCBvZiBwYXJ0aXRpb25z IGF0dGFjaGVkIHRvIHRoaXMgTVREIGRldmljZSAqLworCXN0cnVjdCBsaXN0X2hlYWQgcGFydGl0 aW9uczsKKworCXVuaW9uIHsKKwkJc3RydWN0IG10ZF9wYXJ0IHBhcnQ7CisJCXN0cnVjdCBtdGRf bWFzdGVyIG1hc3RlcjsKKwl9OwogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRkX2luZm8g Km10ZF9nZXRfbWFzdGVyKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXdoaWxlIChtdGQtPnBh cmVudCkKKwkJbXRkID0gbXRkLT5wYXJlbnQ7CisKKwlyZXR1cm4gbXRkOworfQorCitzdGF0aWMg aW5saW5lIHU2NCBtdGRfZ2V0X21hc3Rlcl9vZnMoc3RydWN0IG10ZF9pbmZvICptdGQsIHU2NCBv ZnMpCit7CisJd2hpbGUgKG10ZC0+cGFyZW50KSB7CisJCW9mcyArPSBtdGQtPnBhcnQub2Zmc2V0 OworCQltdGQgPSBtdGQtPnBhcmVudDsKKwl9CisKKwlyZXR1cm4gb2ZzOworfQorCitzdGF0aWMg aW5saW5lIGJvb2wgbXRkX2lzX3BhcnRpdGlvbihjb25zdCBzdHJ1Y3QgbXRkX2luZm8gKm10ZCkK K3sKKwlyZXR1cm4gbXRkLT5wYXJlbnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBtdGRfaGFz X3BhcnRpdGlvbnMoY29uc3Qgc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJcmV0dXJuICFsaXN0 X2VtcHR5KCZtdGQtPnBhcnRpdGlvbnMpOworfQorCiBpbnQgbXRkX29vYmxheW91dF9lY2Moc3Ry dWN0IG10ZF9pbmZvICptdGQsIGludCBzZWN0aW9uLAogCQkgICAgICBzdHJ1Y3QgbXRkX29vYl9y ZWdpb24gKm9vYmVjYyk7CiBpbnQgbXRkX29vYmxheW91dF9maW5kX2VjY3JlZ2lvbihzdHJ1Y3Qg bXRkX2luZm8gKm10ZCwgaW50IGVjY2J5dGUsCkBAIC0zOTIsMTMgKzQ2NywxNiBAQCBzdGF0aWMg aW5saW5lIHUzMiBtdGRfb29iYXZhaWwoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBtdGRf b29iX29wcyAqb3BzKQogc3RhdGljIGlubGluZSBpbnQgbXRkX21heF9iYWRfYmxvY2tzKHN0cnVj dCBtdGRfaW5mbyAqbXRkLAogCQkJCSAgICAgbG9mZl90IG9mcywgc2l6ZV90IGxlbikKIHsKLQlp ZiAoIW10ZC0+X21heF9iYWRfYmxvY2tzKQorCXN0cnVjdCBtdGRfaW5mbyAqbWFzdGVyID0gbXRk X2dldF9tYXN0ZXIobXRkKTsKKworCWlmICghbWFzdGVyLT5fbWF4X2JhZF9ibG9ja3MpCiAJCXJl dHVybiAtRU5PVFNVUFA7CiAKIAlpZiAobXRkLT5zaXplIDwgKGxlbiArIG9mcykgfHwgb2ZzIDwg MCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXR1cm4gbXRkLT5fbWF4X2JhZF9ibG9ja3MobXRk LCBvZnMsIGxlbik7CisJcmV0dXJuIG1hc3Rlci0+X21heF9iYWRfYmxvY2tzKG1hc3RlciwgbXRk X2dldF9tYXN0ZXJfb2ZzKG10ZCwgb2ZzKSwKKwkJCQkgICAgICAgbGVuKTsKIH0KIAogaW50IG10 ZF93dW5pdF90b19wYWlyaW5nX2luZm8oc3RydWN0IG10ZF9pbmZvICptdGQsIGludCB3dW5pdCwK QEAgLTQzOSw4ICs1MTcsMTAgQEAgaW50IG10ZF93cml0ZXYoc3RydWN0IG10ZF9pbmZvICptdGQs IGNvbnN0IHN0cnVjdCBrdmVjICp2ZWNzLAogCiBzdGF0aWMgaW5saW5lIHZvaWQgbXRkX3N5bmMo c3RydWN0IG10ZF9pbmZvICptdGQpCiB7Ci0JaWYgKG10ZC0+X3N5bmMpCi0JCW10ZC0+X3N5bmMo bXRkKTsKKwlzdHJ1Y3QgbXRkX2luZm8gKm1hc3RlciA9IG10ZF9nZXRfbWFzdGVyKG10ZCk7CisK KwlpZiAobWFzdGVyLT5fc3luYykKKwkJbWFzdGVyLT5fc3luYyhtYXN0ZXIpOwogfQogCiBpbnQg bXRkX2xvY2soc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIHVpbnQ2NF90IGxlbik7 CkBAIC00NTIsMTMgKzUzMiwzMSBAQCBpbnQgbXRkX2Jsb2NrX21hcmtiYWQoc3RydWN0IG10ZF9p bmZvICptdGQsIGxvZmZfdCBvZnMpOwogCiBzdGF0aWMgaW5saW5lIGludCBtdGRfc3VzcGVuZChz dHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKLQlyZXR1cm4gbXRkLT5fc3VzcGVuZCA/IG10ZC0+X3N1 c3BlbmQobXRkKSA6IDA7CisJc3RydWN0IG10ZF9pbmZvICptYXN0ZXIgPSBtdGRfZ2V0X21hc3Rl cihtdGQpOworCWludCByZXQ7CisKKwlpZiAobWFzdGVyLT5tYXN0ZXIuc3VzcGVuZGVkKQorCQly ZXR1cm4gMDsKKworCXJldCA9IG1hc3Rlci0+X3N1c3BlbmQgPyBtYXN0ZXItPl9zdXNwZW5kKG1h c3RlcikgOiAwOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwltYXN0ZXItPm1hc3Rlci5z dXNwZW5kZWQgPSAxOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbXRkX3Jl c3VtZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKLQlpZiAobXRkLT5fcmVzdW1lKQotCQltdGQt Pl9yZXN1bWUobXRkKTsKKwlzdHJ1Y3QgbXRkX2luZm8gKm1hc3RlciA9IG10ZF9nZXRfbWFzdGVy KG10ZCk7CisKKwlpZiAoIW1hc3Rlci0+bWFzdGVyLnN1c3BlbmRlZCkKKwkJcmV0dXJuOworCisJ aWYgKG1hc3Rlci0+X3Jlc3VtZSkKKwkJbWFzdGVyLT5fcmVzdW1lKG1hc3Rlcik7CisKKwltYXN0 ZXItPm1hc3Rlci5zdXNwZW5kZWQgPSAwOwogfQogCiBzdGF0aWMgaW5saW5lIHVpbnQzMl90IG10 ZF9kaXZfYnlfZWIodWludDY0X3Qgc3osIHN0cnVjdCBtdGRfaW5mbyAqbXRkKQpAQCAtNTM4LDcg KzYzNiw5IEBAIHN0YXRpYyBpbmxpbmUgbG9mZl90IG10ZF93dW5pdF90b19vZmZzZXQoc3RydWN0 IG10ZF9pbmZvICptdGQsIGxvZmZfdCBiYXNlLAogCiBzdGF0aWMgaW5saW5lIGludCBtdGRfaGFz X29vYihjb25zdCBzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKLQlyZXR1cm4gbXRkLT5fcmVhZF9v b2IgJiYgbXRkLT5fd3JpdGVfb29iOworCXN0cnVjdCBtdGRfaW5mbyAqbWFzdGVyID0gbXRkX2dl dF9tYXN0ZXIoKHN0cnVjdCBtdGRfaW5mbyAqKW10ZCk7CisKKwlyZXR1cm4gbWFzdGVyLT5fcmVh ZF9vb2IgJiYgbWFzdGVyLT5fd3JpdGVfb29iOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBtdGRf dHlwZV9pc19uYW5kKGNvbnN0IHN0cnVjdCBtdGRfaW5mbyAqbXRkKQpAQCAtNTQ4LDcgKzY0OCw5 IEBAIHN0YXRpYyBpbmxpbmUgaW50IG10ZF90eXBlX2lzX25hbmQoY29uc3Qgc3RydWN0IG10ZF9p bmZvICptdGQpCiAKIHN0YXRpYyBpbmxpbmUgaW50IG10ZF9jYW5faGF2ZV9iYihjb25zdCBzdHJ1 Y3QgbXRkX2luZm8gKm10ZCkKIHsKLQlyZXR1cm4gISFtdGQtPl9ibG9ja19pc2JhZDsKKwlzdHJ1 Y3QgbXRkX2luZm8gKm1hc3RlciA9IG10ZF9nZXRfbWFzdGVyKChzdHJ1Y3QgbXRkX2luZm8gKilt dGQpOworCisJcmV0dXJuICEhbWFzdGVyLT5fYmxvY2tfaXNiYWQ7CiB9CiAKIAkvKiBLZXJuZWwt c2lkZSBpb2N0bCBkZWZpbml0aW9ucyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQv cGFydGl0aW9ucy5oIGIvaW5jbHVkZS9saW51eC9tdGQvcGFydGl0aW9ucy5oCmluZGV4IDExY2Iw YzUwY2Q4NC4uZTU0NWMwNTBkM2U4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9wYXJ0 aXRpb25zLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvcGFydGl0aW9ucy5oCkBAIC0xMDUsNyAr MTA1LDYgQEAgZXh0ZXJuIHZvaWQgZGVyZWdpc3Rlcl9tdGRfcGFyc2VyKHN0cnVjdCBtdGRfcGFy dF9wYXJzZXIgKnBhcnNlcik7CiAJbW9kdWxlX2RyaXZlcihfX210ZF9wYXJ0X3BhcnNlciwgcmVn aXN0ZXJfbXRkX3BhcnNlciwgXAogCQkgICAgICBkZXJlZ2lzdGVyX210ZF9wYXJzZXIpCiAKLWlu dCBtdGRfaXNfcGFydGl0aW9uKGNvbnN0IHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKIGludCBtdGRf YWRkX3BhcnRpdGlvbihzdHJ1Y3QgbXRkX2luZm8gKm1hc3RlciwgY29uc3QgY2hhciAqbmFtZSwK IAkJICAgICAgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxlbmd0aCk7CiBpbnQgbXRkX2Rl bF9wYXJ0aXRpb24oc3RydWN0IG10ZF9pbmZvICptYXN0ZXIsIGludCBwYXJ0bm8pOwotLSAKMi4y MC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCkxpbnV4IE1URCBkaXNjdXNzaW9uIG1haWxpbmcgbGlzdApodHRwOi8vbGlzdHMuaW5mcmFk ZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LW10ZC8K