From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stephane Viau Subject: [PATCH 3/3] drm/msm: add multiple CRTC and overlay support Date: Tue, 18 Nov 2014 12:49:49 -0500 Message-ID: <1416332989-685-4-git-send-email-sviau@codeaurora.org> References: <1416332989-685-1-git-send-email-sviau@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1416332989-685-1-git-send-email-sviau@codeaurora.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org List-Id: linux-arm-msm@vger.kernel.org TURQNSBjdXJyZW50bHkgc3VwcG9ydCBvbmUgc2luZ2xlIENSVEMgd2l0aCBpdHMgcHJpdmF0ZSBw aXBlLgpUaGlzIGNoYW5nZSBhbGxvd3MgdGhlIGNvbmZpZ3VyYXRpb24gb2YgbXVsdGlwbGUgQ1JU Q3Mgd2l0aAp0aGUgcG9zc2liaWxpdHkgdG8gYXR0YWNoIHNldmVyYWwgcHVibGljIHBsYW5lcyB0 byB0aGVzZSBDUlRDcy4KClNpZ25lZC1vZmYtYnk6IFN0ZXBoYW5lIFZpYXUgPHN2aWF1QGNvZGVh dXJvcmEub3JnPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUgICAgICAgICAgICAg ICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL21zbS9tZHAvbWRwNS9tZHA1X2NmZy5oICAgICB8 ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHA1L21kcDVfY3J0Yy5jICAgIHwgMjY1 ICsrKysrKysrKysrKysrKysrLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHA1L21k cDVfY3RsLmMgICAgIHwgMzI1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMv Z3B1L2RybS9tc20vbWRwL21kcDUvbWRwNV9jdGwuaCAgICAgfCAxMjEgKysrKysrKysrKysKIGRy aXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcDUvbWRwNV9lbmNvZGVyLmMgfCAgMTMgKysKIGRyaXZl cnMvZ3B1L2RybS9tc20vbWRwL21kcDUvbWRwNV9rbXMuYyAgICAgfCAgNDggKysrLQogZHJpdmVy cy9ncHUvZHJtL21zbS9tZHAvbWRwNS9tZHA1X2ttcy5oICAgICB8ICA0OCArKy0tCiBkcml2ZXJz L2dwdS9kcm0vbXNtL21kcC9tZHA1L21kcDVfcGxhbmUuYyAgIHwgMTA3ICsrKysrKystLQogOSBm aWxlcyBjaGFuZ2VkLCA4MDQgaW5zZXJ0aW9ucygrKSwgMTI1IGRlbGV0aW9ucygtKQogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcDUvbWRwNV9jdGwuYwogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcDUvbWRwNV9jdGwuaAoK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9k cm0vbXNtL01ha2VmaWxlCmluZGV4IDUxMDQ1YjAuLjEzNWMwZTUgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9tc20vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmls ZQpAQCAtMjUsNiArMjUsNyBAQCBtc20teSA6PSBcCiAJbWRwL21kcDQvbWRwNF9rbXMubyBcCiAJ bWRwL21kcDQvbWRwNF9wbGFuZS5vIFwKIAltZHAvbWRwNS9tZHA1X2NmZy5vIFwKKwltZHAvbWRw NS9tZHA1X2N0bC5vIFwKIAltZHAvbWRwNS9tZHA1X2NydGMubyBcCiAJbWRwL21kcDUvbWRwNV9l bmNvZGVyLm8gXAogCW1kcC9tZHA1L21kcDVfaXJxLm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21zbS9tZHAvbWRwNS9tZHA1X2NmZy5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tZHAv bWRwNS9tZHA1X2NmZy5oCmluZGV4IDAwYzgyNzEuLmQwYzk4ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9tc20vbWRwL21kcDUvbWRwNV9jZmcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0v bXNtL21kcC9tZHA1L21kcDVfY2ZnLmgKQEAgLTI0LDYgKzI0LDcgQEAKICAqLwogZXh0ZXJuIGNv bnN0IHN0cnVjdCBtZHA1X2NmZ19odyAqbWRwNV9jZmc7CiAKKyNkZWZpbmUgTUFYX0NUTAkJCTgK ICNkZWZpbmUgTUFYX0JBU0VTCQk4CiAjZGVmaW5lIE1BWF9TTVBfQkxPQ0tTCQk0NAogI2RlZmlu ZSBNQVhfQ0xJRU5UUwkJMzIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21k cDUvbWRwNV9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHA1L21kcDVfY3J0Yy5j CmluZGV4IGViZTJlNjAuLmZmZjAxMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20v bWRwL21kcDUvbWRwNV9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tZHAvbWRwNS9t ZHA1X2NydGMuYwpAQCAtMSw0ICsxLDUgQEAKIC8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgVGhl IExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp IDIwMTMgUmVkIEhhdAogICogQXV0aG9yOiBSb2IgQ2xhcmsgPHJvYmRjbGFya0BnbWFpbC5jb20+ CiAgKgpAQCAtMjIsMTYgKzIzLDI0IEBACiAjaW5jbHVkZSAiZHJtX2NydGNfaGVscGVyLmgiCiAj aW5jbHVkZSAiZHJtX2ZsaXBfd29yay5oIgogCisjZGVmaW5lIFNTUFBfTUFYCShTU1BQX1JHQjMg KyAxKSAvKiBUT0RPOiBBZGQgU1NQUF9NQVggaW4gbWRwNS54bWwuaCAqLworCiBzdHJ1Y3QgbWRw NV9jcnRjIHsKIAlzdHJ1Y3QgZHJtX2NydGMgYmFzZTsKIAljaGFyIG5hbWVbOF07CiAJc3RydWN0 IGRybV9wbGFuZSAqcGxhbmU7Ci0Jc3RydWN0IGRybV9wbGFuZSAqcGxhbmVzWzhdOworCXN0cnVj dCBkcm1fcGxhbmUgKnBsYW5lc1tTU1BQX01BWF07CisJaW50IHBsYW5lX2NvdW50OwogCWludCBp ZDsKIAlib29sIGVuYWJsZWQ7CiAKLQkvKiB3aGljaCBtaXhlci9lbmNvZGVyIHdlIHJvdXRlIG91 dHB1dCB0bzogKi8KLQlpbnQgbWl4ZXI7CisJLyogbGF5ZXIgbWl4ZXIgdXNlZCBmb3IgdGhpcyBD UlRDICgrIGl0cyBsb2NrKTogKi8KKyNkZWZpbmUgR0VUX0xNX0lEKGNydGNfaWQpCSgoY3J0Y19p ZCA9PSAzKSA/IDUgOiBjcnRjX2lkKQorCWludCBsbTsKKwlzcGlubG9ja190IGxtX2xvY2s7CS8q IHByb3RlY3QgUkVHX01EUDVfTE1fKiByZWdpc3RlcnMgKi8KKworCS8qIENUTCB1c2VkIGZvciB0 aGlzIENSVEM6ICovCisJdm9pZCAqY3RsOwogCiAJLyogaWYgdGhlcmUgaXMgYSBwZW5kaW5nIGZs aXAsIHRoZXNlIHdpbGwgYmUgbm9uLW51bGw6ICovCiAJc3RydWN0IGRybV9wZW5kaW5nX3ZibGFu a19ldmVudCAqZXZlbnQ7CkBAIC01OCw2ICs2Nyw3IEBAIHN0cnVjdCBtZHA1X2NydGMgewogCXN0 cnVjdCBtZHBfaXJxIGVycjsKIH07CiAjZGVmaW5lIHRvX21kcDVfY3J0Yyh4KSBjb250YWluZXJf b2YoeCwgc3RydWN0IG1kcDVfY3J0YywgYmFzZSkKKyNkZWZpbmUgaXNfcHJpdmF0ZV9wbGFuZSht ZHA1X2NydGMsIGRybV9wbGFuZSkgKGRybV9wbGFuZSA9PSAobWRwNV9jcnRjKS0+cGxhbmUpCiAK IHN0YXRpYyBzdHJ1Y3QgbWRwNV9rbXMgKmdldF9rbXMoc3RydWN0IGRybV9jcnRjICpjcnRjKQog ewpAQCAtNzMsMjYgKzgzLDM1IEBAIHN0YXRpYyB2b2lkIHJlcXVlc3RfcGVuZGluZyhzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMsIHVpbnQzMl90IHBlbmRpbmcpCiAJbWRwX2lycV9yZWdpc3RlcigmZ2V0 X2ttcyhjcnRjKS0+YmFzZSwgJm1kcDVfY3J0Yy0+dmJsYW5rKTsKIH0KIAotc3RhdGljIHZvaWQg Y3J0Y19mbHVzaChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCisjZGVmaW5lIG1kcDVfbG1fZ2V0X2Zs dXNoKGxtKQltZHBfY3RsX2ZsdXNoX21hc2tfbG0obG0pCisKK3N0YXRpYyB2b2lkIGNydGNfZmx1 c2goc3RydWN0IGRybV9jcnRjICpjcnRjLCB1MzIgZmx1c2hfbWFzaykKIHsKIAlzdHJ1Y3QgbWRw NV9jcnRjICptZHA1X2NydGMgPSB0b19tZHA1X2NydGMoY3J0Yyk7Ci0Jc3RydWN0IG1kcDVfa21z ICptZHA1X2ttcyA9IGdldF9rbXMoY3J0Yyk7Ci0JaW50IGlkID0gbWRwNV9jcnRjLT5pZDsKLQl1 aW50MzJfdCBpLCBmbHVzaCA9IDA7CisKKwlEQkcoIiVzOiBmbHVzaD0lMDh4IiwgbWRwNV9jcnRj LT5uYW1lLCBmbHVzaF9tYXNrKTsKKwltZHA1X2N0bF9jb21taXQobWRwNV9jcnRjLT5jdGwsIGZs dXNoX21hc2spOworfQorCisvKgorICogZmx1c2ggdXBkYXRlcywgdG8gbWFrZSBzdXJlIGh3IGlz IHVwZGF0ZWQgdG8gbmV3IHNjYW5vdXQgZmIsCisgKiBzbyB0aGF0IHdlIGNhbiBzYWZlbHkgcXVl dWUgdW5yZWYgdG8gY3VycmVudCBmYiAoaWUuIG5leHQKKyAqIHZibGFuayB3ZSBrbm93IGh3IGlz IGRvbmUgdy8gcHJldmlvdXMgc2Nhbm91dF9mYikuCisgKi8KK3N0YXRpYyB2b2lkIGNydGNfZmx1 c2hfYWxsKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgbWRwNV9jcnRjICptZHA1 X2NydGMgPSB0b19tZHA1X2NydGMoY3J0Yyk7CisJdWludDMyX3QgaSwgZmx1c2hfbWFzayA9IDA7 CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtZHA1X2NydGMtPnBsYW5lcyk7IGkrKykg ewogCQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9IG1kcDVfY3J0Yy0+cGxhbmVzW2ldOwotCQlp ZiAocGxhbmUpIHsKLQkJCWVudW0gbWRwNV9waXBlIHBpcGUgPSBtZHA1X3BsYW5lX3BpcGUocGxh bmUpOwotCQkJZmx1c2ggfD0gcGlwZTJmbHVzaChwaXBlKTsKLQkJfQorCQlpZiAocGxhbmUpCisJ CQlmbHVzaF9tYXNrIHw9IG1kcDVfcGxhbmVfZ2V0X2ZsdXNoKHBsYW5lKTsKIAl9Ci0JZmx1c2gg fD0gbWl4ZXIyZmx1c2gobWRwNV9jcnRjLT5pZCk7Ci0JZmx1c2ggfD0gTURQNV9DVExfRkxVU0hf Q1RMOworCWZsdXNoX21hc2sgfD0gbWRwNV9jdGxfZ2V0X2ZsdXNoKG1kcDVfY3J0Yy0+Y3RsKTsK KwlmbHVzaF9tYXNrIHw9IG1kcDVfbG1fZ2V0X2ZsdXNoKG1kcDVfY3J0Yy0+bG0pOwogCi0JREJH KCIlczogZmx1c2g9JTA4eCIsIG1kcDVfY3J0Yy0+bmFtZSwgZmx1c2gpOwotCi0JbWRwNV93cml0 ZShtZHA1X2ttcywgUkVHX01EUDVfQ1RMX0ZMVVNIKGlkKSwgZmx1c2gpOworCWNydGNfZmx1c2go Y3J0YywgZmx1c2hfbWFzayk7CiB9CiAKIHN0YXRpYyB2b2lkIHVwZGF0ZV9mYihzdHJ1Y3QgZHJt X2NydGMgKmNydGMsIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm5ld19mYikKQEAgLTEyMCwxMiAr MTM5LDYgQEAgc3RhdGljIHZvaWQgdXBkYXRlX3NjYW5vdXQoc3RydWN0IGRybV9jcnRjICpjcnRj LCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKIHsKIAlzdHJ1Y3QgbWRwNV9jcnRjICptZHA1 X2NydGMgPSB0b19tZHA1X2NydGMoY3J0Yyk7CiAKLQkvKiBmbHVzaCB1cGRhdGVzLCB0byBtYWtl IHN1cmUgaHcgaXMgdXBkYXRlZCB0byBuZXcgc2Nhbm91dCBmYiwKLQkgKiBzbyB0aGF0IHdlIGNh biBzYWZlbHkgcXVldWUgdW5yZWYgdG8gY3VycmVudCBmYiAoaWUuIG5leHQKLQkgKiB2Ymxhbmsg d2Uga25vdyBodyBpcyBkb25lIHcvIHByZXZpb3VzIHNjYW5vdXRfZmIpLgotCSAqLwotCWNydGNf Zmx1c2goY3J0Yyk7Ci0KIAlpZiAobWRwNV9jcnRjLT5zY2Fub3V0X2ZiKQogCQlkcm1fZmxpcF93 b3JrX3F1ZXVlKCZtZHA1X2NydGMtPnVucmVmX2ZiX3dvcmssCiAJCQkJbWRwNV9jcnRjLT5zY2Fu b3V0X2ZiKTsKQEAgLTE3OCw2ICsxOTEsNyBAQCBzdGF0aWMgdm9pZCBwYWdlZmxpcF9jYihzdHJ1 Y3QgbXNtX2ZlbmNlX2NiICpjYikKIAlkcm1fZnJhbWVidWZmZXJfcmVmZXJlbmNlKGZiKTsKIAlt ZHA1X3BsYW5lX3NldF9zY2Fub3V0KG1kcDVfY3J0Yy0+cGxhbmUsIGZiKTsKIAl1cGRhdGVfc2Nh bm91dChjcnRjLCBmYik7CisJY3J0Y19mbHVzaF9hbGwoY3J0Yyk7CiB9CiAKIHN0YXRpYyB2b2lk IHVucmVmX2ZiX3dvcmtlcihzdHJ1Y3QgZHJtX2ZsaXBfd29yayAqd29yaywgdm9pZCAqdmFsKQpA QCAtMjI4LDQxICsyNDIsNjYgQEAgc3RhdGljIGJvb2wgbWRwNV9jcnRjX21vZGVfZml4dXAoc3Ry dWN0IGRybV9jcnRjICpjcnRjLAogCXJldHVybiB0cnVlOwogfQogCisvKgorICogYmxlbmRfc2V0 dXAoKSAtIGJsZW5kIGFsbCB0aGUgcGxhbmVzIG9mIGEgQ1JUQworICoKKyAqIFdoZW4gYm9yZGVy IGlzIGVuYWJsZWQsIHRoZSBib3JkZXIgY29sb3Igd2lsbCBBTFdBWVMgYmUgdGhlIGJhc2UgbGF5 ZXIuCisgKiBUaGVyZWZvcmUsIHRoZSBmaXJzdCBwbGFuZSAocHJpdmF0ZSBSR0IgcGlwZSkgd2ls bCBzdGFydCBhdCBTVEFHRTAuCisgKiBJZiBkaXNhYmxlZCwgdGhlIGZpcnN0IHBsYW5lIHN0YXJ0 cyBhdCBTVEFHRV9CQVNFLgorICoKKyAqIE5vdGU6CisgKiBCb3JkZXIgaXMgbm90IGVuYWJsZWQg aGVyZSBiZWNhdXNlIHRoZSBwcml2YXRlIHBsYW5lIGlzIGV4YWN0bHkKKyAqIHRoZSBDUlRDIHJl c29sdXRpb24uCisgKi8KIHN0YXRpYyB2b2lkIGJsZW5kX3NldHVwKHN0cnVjdCBkcm1fY3J0YyAq Y3J0YykKIHsKIAlzdHJ1Y3QgbWRwNV9jcnRjICptZHA1X2NydGMgPSB0b19tZHA1X2NydGMoY3J0 Yyk7CiAJc3RydWN0IG1kcDVfa21zICptZHA1X2ttcyA9IGdldF9rbXMoY3J0Yyk7Ci0JaW50IGlk ID0gbWRwNV9jcnRjLT5pZDsKKwljb25zdCBzdHJ1Y3QgbWRwNV9jZmdfaHcgKmh3X2NmZzsKKwl1 aW50MzJfdCBpLCBsbSA9IG1kcDVfY3J0Yy0+bG0sIGJsZW5kX2NmZyA9IDA7CisJZW51bSBtZHBf bWl4ZXJfc3RhZ2VfaWQgc3RhZ2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKyNkZWZpbmUgYmxl bmRlcihzdGFnZSkJKChzdGFnZSkgLSBTVEFHRV9CQVNFKQogCi0JLyoKLQkgKiBIYXJkLWNvZGVk IHNldHVwIGZvciBub3cgdW50aWwgSSBmaWd1cmUgb3V0IGhvdyB0aGUKLQkgKiBsYXllci1taXhl ciB3b3JrcwotCSAqLworCWh3X2NmZyA9IG1kcDVfY2ZnX2dldF9od19jb25maWcobWRwNV9rbXMt PmNmZ19wcml2KTsKIAotCS8qIExNW2lkXTogKi8KLQltZHA1X3dyaXRlKG1kcDVfa21zLCBSRUdf TURQNV9MTV9CTEVORF9DT0xPUl9PVVQoaWQpLAotCQkJTURQNV9MTV9CTEVORF9DT0xPUl9PVVRf U1RBR0UwX0ZHX0FMUEhBKTsKLQltZHA1X3dyaXRlKG1kcDVfa21zLCBSRUdfTURQNV9MTV9CTEVO RF9PUF9NT0RFKGlkLCAwKSwKLQkJCU1EUDVfTE1fQkxFTkRfT1BfTU9ERV9GR19BTFBIQShGR19D T05TVCkgfAotCQkJTURQNV9MTV9CTEVORF9PUF9NT0RFX0JHX0FMUEhBKEZHX1BJWEVMKSB8Ci0J CQlNRFA1X0xNX0JMRU5EX09QX01PREVfQkdfSU5WX0FMUEhBKTsKLQltZHA1X3dyaXRlKG1kcDVf a21zLCBSRUdfTURQNV9MTV9CTEVORF9GR19BTFBIQShpZCwgMCksIDB4ZmYpOwotCW1kcDVfd3Jp dGUobWRwNV9rbXMsIFJFR19NRFA1X0xNX0JMRU5EX0JHX0FMUEhBKGlkLCAwKSwgMHgwMCk7Ci0K LQkvKiBOT1RFOiBzZWVtcyB0aGF0IExNW25dIGFuZCBDVExbbV0sIHdlIGRvIG5vdCBuZWVkIG49 PW0uLiBidXQKLQkgKiB3ZSB3YW50IHRvIGJlIHNldHRpbmcgQ1RMW21dLkxBWUVSW25dLiAgTm90 IHN1cmUgd2hhdCB0aGUKLQkgKiBwb2ludCBvZiBoYXZpbmcgQ1RMW21dLkxBWUVSW29dIChmb3Ig byE9bikuLiBtYXliZSB0aGF0IGlzCi0JICogdXNlZCB3aGVuIGNoYWluaW5nIHVwIG1peGVycyBm b3IgaGlnaCByZXNvbHV0aW9uIGRpc3BsYXlzPwotCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZt ZHA1X2NydGMtPmxtX2xvY2ssIGZsYWdzKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpF KG1kcDVfY3J0Yy0+cGxhbmVzKTsgaSsrKSB7CisJCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0g bWRwNV9jcnRjLT5wbGFuZXNbaV07CisJCXN0cnVjdCBtZHA1X292ZXJsYXlfaW5mbyAqb3Zlcmxh eTsKKworCQlpZiAoIXBsYW5lKQorCQkJY29udGludWU7CisKKwkJb3ZlcmxheSA9IG1kcDVfcGxh bmVfZ2V0X292ZXJsYXlfaW5mbyhwbGFuZSk7CisJCXN0YWdlID0gb3ZlcmxheS0+em9yZGVyOwog Ci0JLyogQ1RMW2lkXTogKi8KLQltZHA1X3dyaXRlKG1kcDVfa21zLCBSRUdfTURQNV9DVExfTEFZ RVJfUkVHKGlkLCAwKSwKLQkJCU1EUDVfQ1RMX0xBWUVSX1JFR19SR0IwKFNUQUdFMCkgfAotCQkJ TURQNV9DVExfTEFZRVJfUkVHX0JPUkRFUl9DT0xPUik7Ci0JbWRwNV93cml0ZShtZHA1X2ttcywg UkVHX01EUDVfQ1RMX0xBWUVSX1JFRyhpZCwgMSksIDApOwotCW1kcDVfd3JpdGUobWRwNV9rbXMs IFJFR19NRFA1X0NUTF9MQVlFUl9SRUcoaWQsIDIpLCAwKTsKLQltZHA1X3dyaXRlKG1kcDVfa21z LCBSRUdfTURQNV9DVExfTEFZRVJfUkVHKGlkLCAzKSwgMCk7Ci0JbWRwNV93cml0ZShtZHA1X2tt cywgUkVHX01EUDVfQ1RMX0xBWUVSX1JFRyhpZCwgNCksIDApOworCQkvKgorCQkgKiBOb3RlOiBU aGlzIGNhbm5vdCBoYXBwZW4gd2l0aCBjdXJyZW50IGltcGxlbWVudGF0aW9uIGJ1dAorCQkgKiB3 ZSBuZWVkIHRvIGNoZWNrIHRoaXMgY29uZGl0aW9uIG9uY2UgeiBwcm9wZXJ0eSBpcyBhZGRlZAor CQkgKi8KKwkJQlVHX09OKHN0YWdlID4gaHdfY2ZnLT5sbS5uYl9zdGFnZXMpOworCisJCS8qIExN ICovCisJCW1kcDVfd3JpdGUobWRwNV9rbXMsCisJCQkJUkVHX01EUDVfTE1fQkxFTkRfT1BfTU9E RShsbSwgYmxlbmRlcihzdGFnZSkpLAorCQkJCU1EUDVfTE1fQkxFTkRfT1BfTU9ERV9GR19BTFBI QShGR19DT05TVCkgfAorCQkJCU1EUDVfTE1fQkxFTkRfT1BfTU9ERV9CR19BTFBIQShCR19DT05T VCkpOworCQltZHA1X3dyaXRlKG1kcDVfa21zLCBSRUdfTURQNV9MTV9CTEVORF9GR19BTFBIQShs bSwKKwkJCQlibGVuZGVyKHN0YWdlKSksIDB4ZmYpOworCQltZHA1X3dyaXRlKG1kcDVfa21zLCBS RUdfTURQNV9MTV9CTEVORF9CR19BTFBIQShsbSwKKwkJCQlibGVuZGVyKHN0YWdlKSksIDB4MDAp OworCQkvKiBDVEwgKi8KKwkJYmxlbmRfY2ZnIHw9IG1kcF9jdGxfYmxlbmRfbWFzayhtZHA1X3Bs YW5lX3BpcGUocGxhbmUpLCBzdGFnZSk7CisJCURCRygiJXM6IGJsZW5kaW5nIHBpcGUgJXMgb24g c3RhZ2U9JWQiLCBtZHA1X2NydGMtPm5hbWUsCisJCQkJcGlwZTJuYW1lKG1kcDVfcGxhbmVfcGlw ZShwbGFuZSkpLCBzdGFnZSk7CisJfQorCisJREJHKCIlczogbG0lZDogYmxlbmQgY29uZmlnID0g MHglMDh4IiwgbWRwNV9jcnRjLT5uYW1lLCBsbSwgYmxlbmRfY2ZnKTsKKwltZHA1X2N0bF9ibGVu ZChtZHA1X2NydGMtPmN0bCwgbG0sIGJsZW5kX2NmZyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZtZHA1X2NydGMtPmxtX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIGludCBtZHA1X2Ny dGNfbW9kZV9zZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLApAQCAtMjczLDYgKzMxMiw3IEBAIHN0 YXRpYyBpbnQgbWRwNV9jcnRjX21vZGVfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIHsKIAlz dHJ1Y3QgbWRwNV9jcnRjICptZHA1X2NydGMgPSB0b19tZHA1X2NydGMoY3J0Yyk7CiAJc3RydWN0 IG1kcDVfa21zICptZHA1X2ttcyA9IGdldF9rbXMoY3J0Yyk7CisJdW5zaWduZWQgbG9uZyBmbGFn czsKIAlpbnQgcmV0OwogCiAJbW9kZSA9IGFkanVzdGVkX21vZGU7CkBAIC0yODYsNiArMzI2LDEz IEBAIHN0YXRpYyBpbnQgbWRwNV9jcnRjX21vZGVfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywK IAkJCW1vZGUtPnZzeW5jX2VuZCwgbW9kZS0+dnRvdGFsLAogCQkJbW9kZS0+dHlwZSwgbW9kZS0+ ZmxhZ3MpOwogCisJLyogcmVxdWVzdCBhIGZyZWUgQ1RMLCBpZiBub25lIGlzIGFscmVhZHkgYWxs b2NhdGVkIGZvciB0aGlzIENSVEMgKi8KKwlpZiAoIW1kcDVfY3J0Yy0+Y3RsKSB7CisJCW1kcDVf Y3J0Yy0+Y3RsID0gbWRwNV9jdGxfcmVxdWVzdChtZHA1X2ttcy0+Y3RsX3ByaXYsIGNydGMpOwor CQlpZiAoIW1kcDVfY3J0Yy0+Y3RsKQorCQkJcmV0dXJuIC1FQlVTWTsKKwl9CisKIAkvKiBncmFi IGV4dHJhIHJlZiBmb3IgdXBkYXRlX3NjYW5vdXQoKSAqLwogCWRybV9mcmFtZWJ1ZmZlcl9yZWZl cmVuY2UoY3J0Yy0+cHJpbWFyeS0+ZmIpOwogCkBAIC0zMDAsMTIgKzM0NywxNSBAQCBzdGF0aWMg aW50IG1kcDVfY3J0Y19tb2RlX3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCXJldHVybiBy ZXQ7CiAJfQogCi0JbWRwNV93cml0ZShtZHA1X2ttcywgUkVHX01EUDVfTE1fT1VUX1NJWkUobWRw NV9jcnRjLT5pZCksCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1kcDVfY3J0Yy0+bG1fbG9jaywgZmxh Z3MpOworCW1kcDVfd3JpdGUobWRwNV9rbXMsIFJFR19NRFA1X0xNX09VVF9TSVpFKG1kcDVfY3J0 Yy0+bG0pLAogCQkJTURQNV9MTV9PVVRfU0laRV9XSURUSChtb2RlLT5oZGlzcGxheSkgfAogCQkJ TURQNV9MTV9PVVRfU0laRV9IRUlHSFQobW9kZS0+dmRpc3BsYXkpKTsKKwlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZtZHA1X2NydGMtPmxtX2xvY2ssIGZsYWdzKTsKIAogCXVwZGF0ZV9mYihjcnRj LCBjcnRjLT5wcmltYXJ5LT5mYik7CiAJdXBkYXRlX3NjYW5vdXQoY3J0YywgY3J0Yy0+cHJpbWFy eS0+ZmIpOworCS8qIGNydGNfZmx1c2hfYWxsKGNydGMpIHdpbGwgYmUgY2FsbGVkIGluIF9jb21t aXQgY2FsbGJhY2sgKi8KIAogCXJldHVybiAwOwogfQpAQCAtMzIyLDcgKzM3Miw3IEBAIHN0YXRp YyB2b2lkIG1kcDVfY3J0Y19wcmVwYXJlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIHN0YXRpYyB2 b2lkIG1kcDVfY3J0Y19jb21taXQoc3RydWN0IGRybV9jcnRjICpjcnRjKQogewogCW1kcDVfY3J0 Y19kcG1zKGNydGMsIERSTV9NT0RFX0RQTVNfT04pOwotCWNydGNfZmx1c2goY3J0Yyk7CisJY3J0 Y19mbHVzaF9hbGwoY3J0Yyk7CiAJLyogZHJvcCB0aGUgcmVmIHRvIG1kcCBjbGsncyB0aGF0IHdl IGdvdCBpbiBwcmVwYXJlOiAqLwogCW1kcDVfZGlzYWJsZShnZXRfa21zKGNydGMpKTsKIH0KQEAg LTM0OSw2ICszOTksNyBAQCBzdGF0aWMgaW50IG1kcDVfY3J0Y19tb2RlX3NldF9iYXNlKHN0cnVj dCBkcm1fY3J0YyAqY3J0YywgaW50IHgsIGludCB5LAogCiAJdXBkYXRlX2ZiKGNydGMsIGNydGMt PnByaW1hcnktPmZiKTsKIAl1cGRhdGVfc2Nhbm91dChjcnRjLCBjcnRjLT5wcmltYXJ5LT5mYik7 CisJY3J0Y19mbHVzaF9hbGwoY3J0Yyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM1Nyw2ICs0MDgs MTkgQEAgc3RhdGljIHZvaWQgbWRwNV9jcnRjX2xvYWRfbHV0KHN0cnVjdCBkcm1fY3J0YyAqY3J0 YykKIHsKIH0KIAorc3RhdGljIHZvaWQgbWRwNV9jcnRjX2Rpc2FibGUoc3RydWN0IGRybV9jcnRj ICpjcnRjKQoreworCXN0cnVjdCBtZHA1X2NydGMgKm1kcDVfY3J0YyA9IHRvX21kcDVfY3J0Yyhj cnRjKTsKKworCURCRygiJXMiLCBtZHA1X2NydGMtPm5hbWUpOworCisJaWYgKG1kcDVfY3J0Yy0+ Y3RsKSB7CisJCW1kcDVfY3RsX3JlbGVhc2UobWRwNV9jcnRjLT5jdGwpOworCQltZHA1X2NydGMt PmN0bCA9IE5VTEw7CisJfQorfQorCisKIHN0YXRpYyBpbnQgbWRwNV9jcnRjX3BhZ2VfZmxpcChz dHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm5ld19mYiwK IAkJc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCAqZXZlbnQsCkBAIC00MDUsNiArNDY5 LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgbWRwNV9jcnRj X2hlbHBlcl9mdW5jcyA9IHsKIAkuY29tbWl0ID0gbWRwNV9jcnRjX2NvbW1pdCwKIAkubW9kZV9z ZXRfYmFzZSA9IG1kcDVfY3J0Y19tb2RlX3NldF9iYXNlLAogCS5sb2FkX2x1dCA9IG1kcDVfY3J0 Y19sb2FkX2x1dCwKKwkuZGlzYWJsZSA9IG1kcDVfY3J0Y19kaXNhYmxlLAogfTsKIAogc3RhdGlj IHZvaWQgbWRwNV9jcnRjX3ZibGFua19pcnEoc3RydWN0IG1kcF9pcnEgKmlycSwgdWludDMyX3Qg aXJxc3RhdHVzKQpAQCAtNDI3LDkgKzQ5Miw4IEBAIHN0YXRpYyB2b2lkIG1kcDVfY3J0Y192Ymxh bmtfaXJxKHN0cnVjdCBtZHBfaXJxICppcnEsIHVpbnQzMl90IGlycXN0YXR1cykKIHN0YXRpYyB2 b2lkIG1kcDVfY3J0Y19lcnJfaXJxKHN0cnVjdCBtZHBfaXJxICppcnEsIHVpbnQzMl90IGlycXN0 YXR1cykKIHsKIAlzdHJ1Y3QgbWRwNV9jcnRjICptZHA1X2NydGMgPSBjb250YWluZXJfb2YoaXJx LCBzdHJ1Y3QgbWRwNV9jcnRjLCBlcnIpOwotCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9ICZtZHA1 X2NydGMtPmJhc2U7CisKIAlEQkcoIiVzOiBlcnJvcjogJTA4eCIsIG1kcDVfY3J0Yy0+bmFtZSwg aXJxc3RhdHVzKTsKLQljcnRjX2ZsdXNoKGNydGMpOwogfQogCiB1aW50MzJfdCBtZHA1X2NydGNf dmJsYW5rKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKQEAgLTQ1MCwxMCArNTE0LDkgQEAgdm9pZCBt ZHA1X2NydGNfc2V0X2ludGYoc3RydWN0IGRybV9jcnRjICpjcnRjLCBpbnQgaW50ZiwKIHsKIAlz dHJ1Y3QgbWRwNV9jcnRjICptZHA1X2NydGMgPSB0b19tZHA1X2NydGMoY3J0Yyk7CiAJc3RydWN0 IG1kcDVfa21zICptZHA1X2ttcyA9IGdldF9rbXMoY3J0Yyk7Ci0Jc3RhdGljIGNvbnN0IGVudW0g bWRwNV9pbnRmbnVtIGludGZudW1bXSA9IHsKLQkJCUlOVEYwLCBJTlRGMSwgSU5URjIsIElOVEYz LAotCX07CisJdWludDMyX3QgZmx1c2hfbWFzayA9IDA7CiAJdWludDMyX3QgaW50Zl9zZWw7CisJ dW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIG5vdyB0aGF0IHdlIGtub3cgd2hhdCBpcnEncyB3 ZSB3YW50OiAqLwogCW1kcDVfY3J0Yy0+ZXJyLmlycW1hc2sgPSBpbnRmMmVycihpbnRmKTsKQEAg LTQ2Myw2ICs1MjYsNyBAQCB2b2lkIG1kcDVfY3J0Y19zZXRfaW50ZihzdHJ1Y3QgZHJtX2NydGMg KmNydGMsIGludCBpbnRmLAogCWlmICghbWRwNV9rbXMpCiAJCXJldHVybjsKIAorCXNwaW5fbG9j a19pcnFzYXZlKCZtZHA1X2ttcy0+cmVzb3VyY2VfbG9jaywgZmxhZ3MpOwogCWludGZfc2VsID0g bWRwNV9yZWFkKG1kcDVfa21zLCBSRUdfTURQNV9ESVNQX0lOVEZfU0VMKTsKIAogCXN3aXRjaCAo aW50ZikgewpAQCAtNDg3LDE2ICs1NTEsMTUgQEAgdm9pZCBtZHA1X2NydGNfc2V0X2ludGYoc3Ry dWN0IGRybV9jcnRjICpjcnRjLCBpbnQgaW50ZiwKIAkJYnJlYWs7CiAJfQogCi0JYmxlbmRfc2V0 dXAoY3J0Yyk7CisJbWRwNV93cml0ZShtZHA1X2ttcywgUkVHX01EUDVfRElTUF9JTlRGX1NFTCwg aW50Zl9zZWwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1kcDVfa21zLT5yZXNvdXJjZV9s b2NrLCBmbGFncyk7CiAKIAlEQkcoIiVzOiBpbnRmX3NlbD0lMDh4IiwgbWRwNV9jcnRjLT5uYW1l LCBpbnRmX3NlbCk7CisJbWRwNV9jdGxfc2V0X2ludGYobWRwNV9jcnRjLT5jdGwsIGludGYpOwor CWZsdXNoX21hc2sgfD0gbWRwNV9jdGxfZ2V0X2ZsdXNoKG1kcDVfY3J0Yy0+Y3RsKTsKKwlmbHVz aF9tYXNrIHw9IG1kcDVfbG1fZ2V0X2ZsdXNoKG1kcDVfY3J0Yy0+bG0pOwogCi0JbWRwNV93cml0 ZShtZHA1X2ttcywgUkVHX01EUDVfRElTUF9JTlRGX1NFTCwgaW50Zl9zZWwpOwotCW1kcDVfd3Jp dGUobWRwNV9rbXMsIFJFR19NRFA1X0NUTF9PUChtZHA1X2NydGMtPmlkKSwKLQkJCU1EUDVfQ1RM X09QX01PREUoTU9ERV9OT05FKSB8Ci0JCQlNRFA1X0NUTF9PUF9JTlRGX05VTShpbnRmbnVtW2lu dGZdKSk7Ci0KLQljcnRjX2ZsdXNoKGNydGMpOworCWNydGNfZmx1c2goY3J0YywgZmx1c2hfbWFz ayk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldF9hdHRhY2goc3RydWN0IGRybV9jcnRjICpjcnRjLCBl bnVtIG1kcDVfcGlwZSBwaXBlX2lkLApAQCAtNTA5LDE1ICs1NzIsNzIgQEAgc3RhdGljIHZvaWQg c2V0X2F0dGFjaChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGVudW0gbWRwNV9waXBlIHBpcGVfaWQs CiAJaWYgKG1kcDVfY3J0Yy0+cGxhbmVzW3BpcGVfaWRdID09IHBsYW5lKQogCQlyZXR1cm47CiAK KwkvKgorCSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGJvdGggbWRwNV9jcnRjX2F0dGFj aCgpL2RldGFjaCgpCisJICogaWYgcGxhbmUgaXMgTlVMTCwgZGV0YWNoIGhhcHBlbmVkIC0+IGRl Y3JlbWVudCBwbGFuZV9jb3VudCwKKwkgKiBvdGhlcndpc2UgaW5jcmVtZW50IGl0IChhdHRhY2gp CisJICovCisJbWRwNV9jcnRjLT5wbGFuZV9jb3VudCArPSAocGxhbmUgPyAxIDogLTEpOworCURC RygiJXM6ICVkIHBsYW5lcyBhdHRhY2hlZCIsIG1kcDVfY3J0Yy0+bmFtZSwgbWRwNV9jcnRjLT5w bGFuZV9jb3VudCk7CisKIAltZHA1X2NydGMtPnBsYW5lc1twaXBlX2lkXSA9IHBsYW5lOwogCWJs ZW5kX3NldHVwKGNydGMpOwogCWlmIChtZHA1X2NydGMtPmVuYWJsZWQgJiYgKHBsYW5lICE9IG1k cDVfY3J0Yy0+cGxhbmUpKQotCQljcnRjX2ZsdXNoKGNydGMpOworCQljcnRjX2ZsdXNoX2FsbChj cnRjKTsKIH0KIAotdm9pZCBtZHA1X2NydGNfYXR0YWNoKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywg c3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCitpbnQgbWRwNV9jcnRjX2F0dGFjaChzdHJ1Y3QgZHJt X2NydGMgKmNydGMsIHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQogeworCXN0cnVjdCBtZHA1X2Ny dGMgKm1kcDVfY3J0YyA9IHRvX21kcDVfY3J0YyhjcnRjKTsKKwlzdHJ1Y3QgbWRwNV9rbXMgKm1k cDVfa21zID0gZ2V0X2ttcyhjcnRjKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjcnRjLT5kZXYt PmRldjsKKwljb25zdCBzdHJ1Y3QgbWRwNV9jZmdfaHcgKmh3X2NmZzsKKwlib29sIHByaXZhdGVf cGxhbmUgPSBpc19wcml2YXRlX3BsYW5lKG1kcDVfY3J0YywgcGxhbmUpOworCXN0cnVjdCBtZHA1 X292ZXJsYXlfaW5mbyBvdmVybGF5X2luZm87CisJZW51bSBtZHBfbWl4ZXJfc3RhZ2VfaWQgc3Rh Z2UgPSBTVEFHRV9CQVNFOworCWludCBpLCBtYXhfbmJfcGxhbmVzOworCisJaHdfY2ZnID0gbWRw NV9jZmdfZ2V0X2h3X2NvbmZpZyhtZHA1X2ttcy0+Y2ZnX3ByaXYpOworCW1heF9uYl9wbGFuZXMg PSBod19jZmctPmxtLm5iX3N0YWdlczsKKworCWlmIChtZHA1X2NydGMtPnBsYW5lX2NvdW50ID49 IG1heF9uYl9wbGFuZXMpIHsKKwkJZGV2X2VycihkZXYsICIlczogbWF4ICMgb2YgcGxhbmVzICgl ZCkgcmVhY2hlZFxuIiwKKwkJCQltZHA1X2NydGMtPm5hbWUsIG1heF9uYl9wbGFuZXMpOworCQly ZXR1cm4gLUVCVVNZOworCX0KKworCS8qCisJICogU2V0IGRlZmF1bHQgei1vcmRlcmluZyBkZXBl bmRpbmcgb24gdGhlIHR5cGUgb2YgcGxhbmUKKwkgKiBwcml2YXRlIC0+IGxvd2VyIHN0YWdlCisJ ICogcHVibGljICAtPiB0b3Btb3N0IHN0YWdlCisJICoKKwkgKiBUT0RPOiBhZGQgYSBwcm9wZXJ0 eSB0byBnaXZlIHVzZXJzcGFjZSBhbiBBUEkgdG8gY2hhbmdlIHRoaXMuLi4KKwkgKiAod2lsbCBj b21lIGluIGEgc3Vic2VxdWVudCBwYXRjaCkKKwkgKi8KKwlpZiAocHJpdmF0ZV9wbGFuZSkgewor CQlzdGFnZSA9IFNUQUdFX0JBU0U7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZ X1NJWkUobWRwNV9jcnRjLT5wbGFuZXMpOyBpKyspIHsKKwkJCXN0cnVjdCBkcm1fcGxhbmUgKmF0 dGFjaGVkX3BsYW5lID0gbWRwNV9jcnRjLT5wbGFuZXNbaV07CisJCQlzdHJ1Y3QgbWRwNV9vdmVy bGF5X2luZm8gKm92ZXJsYXk7CisKKwkJCWlmICghYXR0YWNoZWRfcGxhbmUpCisJCQkJY29udGlu dWU7CisJCQlvdmVybGF5ID0gbWRwNV9wbGFuZV9nZXRfb3ZlcmxheV9pbmZvKGF0dGFjaGVkX3Bs YW5lKTsKKwkJCXN0YWdlID0gbWF4KHN0YWdlLCBvdmVybGF5LT56b3JkZXIpOworCQl9CisJCXN0 YWdlKys7CisJfQorCW92ZXJsYXlfaW5mby56b3JkZXIgPSBzdGFnZTsKKwltZHA1X3BsYW5lX3Nl dF9vdmVybGF5X2luZm8ocGxhbmUsICZvdmVybGF5X2luZm8pOworCisJREJHKCIlczogJXMgcGxh bmUgJXMgc2V0IHRvIHN0YWdlICVkIGJ5IGRlZmF1bHQiLCBtZHA1X2NydGMtPm5hbWUsCisJCQlw cml2YXRlX3BsYW5lID8gInByaXZhdGUiIDogInB1YmxpYyIsCisJCQlwaXBlMm5hbWUobWRwNV9w bGFuZV9waXBlKHBsYW5lKSksIG92ZXJsYXlfaW5mby56b3JkZXIpOworCiAJc2V0X2F0dGFjaChj cnRjLCBtZHA1X3BsYW5lX3BpcGUocGxhbmUpLCBwbGFuZSk7CisKKwlyZXR1cm4gMDsKIH0KIAog dm9pZCBtZHA1X2NydGNfZGV0YWNoKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IGRybV9w bGFuZSAqcGxhbmUpCkBAIC01MjgsNiArNjQ4LDE2IEBAIHZvaWQgbWRwNV9jcnRjX2RldGFjaChz dHJ1Y3QgZHJtX2NydGMgKmNydGMsIHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQogCXNldF9hdHRh Y2goY3J0YywgbWRwNV9wbGFuZV9waXBlKHBsYW5lKSwgTlVMTCk7CiB9CiAKK2ludCBtZHA1X2Ny dGNfZ2V0X2xtKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgbWRwNV9jcnRjICpt ZHA1X2NydGMgPSB0b19tZHA1X2NydGMoY3J0Yyk7CisKKwlpZiAoV0FSTl9PTighY3J0YykpCisJ CXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIG1kcDVfY3J0Yy0+bG07Cit9CisKIC8qIGluaXRp YWxpemUgY3J0YyAqLwogc3RydWN0IGRybV9jcnRjICptZHA1X2NydGNfaW5pdChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LAogCQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwgaW50IGlkKQpAQCAtNTQ2 LDYgKzY3Niw5IEBAIHN0cnVjdCBkcm1fY3J0YyAqbWRwNV9jcnRjX2luaXQoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKIAogCW1kcDVfY3J0Yy0+cGxhbmUgPSBwbGFuZTsKIAltZHA1X2NydGMtPmlk ID0gaWQ7CisJbWRwNV9jcnRjLT5sbSA9IEdFVF9MTV9JRChpZCk7CisKKwlzcGluX2xvY2tfaW5p dCgmbWRwNV9jcnRjLT5sbV9sb2NrKTsKIAogCW1kcDVfY3J0Yy0+dmJsYW5rLmlycSA9IG1kcDVf Y3J0Y192YmxhbmtfaXJxOwogCW1kcDVfY3J0Yy0+ZXJyLmlycSA9IG1kcDVfY3J0Y19lcnJfaXJx OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9tZHAvbWRwNS9tZHA1X2N0bC5jIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9tZHAvbWRwNS9tZHA1X2N0bC5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmE2MTU1YjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw dS9kcm0vbXNtL21kcC9tZHA1L21kcDVfY3RsLmMKQEAgLTAsMCArMSwzMjUgQEAKKy8qCisgKiBD b3B5cmlnaHQgKGMpIDIwMTQgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAorICogb25seSB2ZXJzaW9uIDIg YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhp cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSAibWRwNV9rbXMuaCIKKyNpbmNsdWRlICJt ZHA1X2N0bC5oIgorCisvKgorICogQ1RMIC0gTURQIENvbnRyb2wgUG9vbCBNYW5hZ2VyCisgKgor ICogQ29udHJvbHMgYXJlIHNoYXJlZCBiZXR3ZWVuIGFsbCBDUlRDcy4KKyAqCisgKiBUaGV5IGFy ZSBpbnRlbmRlZCB0byBiZSB1c2VkIGZvciBkYXRhIHBhdGggY29uZmlndXJhdGlvbi4KKyAqIFRo ZSB0b3AgbGV2ZWwgcmVnaXN0ZXIgcHJvZ3JhbW1pbmcgZGVzY3JpYmVzIHRoZSBjb21wbGV0ZSBk YXRhIHBhdGggZm9yCisgKiBhIHNwZWNpZmljIGRhdGEgcGF0aCBJRCAtIFJFR19NRFA1X0NUTF8q KDxpZD4sIC4uLikKKyAqCisgKiBIYXJkd2FyZSBjYXBhYmlsaXRpZXMgZGV0ZXJtaW5lIHRoZSBu dW1iZXIgb2YgY29uY3VycmVudCBkYXRhIHBhdGhzCisgKgorICogSW4gY2VydGFpbiB1c2UgY2Fz ZXMgKGhpZ2gtcmVzb2x1dGlvbiBkdWFsIHBpcGUpLCBvbmUgc2luZ2xlIENUTCBjYW4gYmUKKyAq IHNoYXJlZCBhY3Jvc3MgbXVsdGlwbGUgQ1JUQ3MuCisgKgorICogQmVjYXVzZSB0aGUgbnVtYmVy IG9mIENUTHMgY2FuIGJlIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIENSVENzLAorICogQ1RMcyBh cmUgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGZyb20gYSBwb29sIG9mIENUTHMsIG9ubHkgb25jZSBh IENSVEMgaXMKKyAqIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IChpbiBtZHA1X2NydGNfbW9kZV9z ZXQoKSkuCisgKi8KKworc3RydWN0IG1kcDVfY3RsIHsKKwl1MzIgaWQ7CisKKwkvKiB3aGV0aGVy IHRoaXMgQ1RMIGhhcyBiZWVuIGFsbG9jYXRlZCBvciBub3Q6ICovCisJYm9vbCBidXN5OworCisJ LyogbWVtb3J5IG91dHB1dCBjb25uZWN0aW9uIChAc2VlIG1kcDVfY3RsX21vZGUpOiAqLworCXUz MiBtb2RlOworCisJLyogUkVHX01EUDVfQ1RMXyooPGlkPikgcmVnaXN0ZXJzIGFjY2VzcyBpbmZv ICsgbG9jazogKi8KKwlzcGlubG9ja190IGh3X2xvY2s7CisJdTMyIHJlZ19vZmZzZXQ7CisKKwkv KiBmbHVzaCBtYXNrIHVzZWQgdG8gY29tbWl0IENUTCByZWdpc3RlcnMgKi8KKwl1MzIgZmx1c2hf bWFzazsKKworCWJvb2wgY3Vyc29yX29uOworCXZvaWQgKmNydGM7Cit9OworCitzdHJ1Y3QgbWRw NV9jdGxfbWFuYWdlciB7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKKworCS8qIG51bWJlciBv ZiBDVEwgLyBMYXllciBNaXhlcnMgaW4gdGhpcyBodyBjb25maWc6ICovCisJdTMyIG5sbTsKKwl1 MzIgbmN0bDsKKworCS8qIHBvb2wgb2YgQ1RMcyArIGxvY2sgdG8gcHJvdGVjdCByZXNvdXJjZSBh bGxvY2F0aW9uIChjdGxzW2ldLmJ1c3kpICovCisJc3BpbmxvY2tfdCBwb29sX2xvY2s7CisJc3Ry dWN0IG1kcDVfY3RsIGN0bHNbTUFYX0NUTF07Cit9OworCitzdGF0aWMgc3RydWN0IG1kcDVfY3Rs X21hbmFnZXIgbWRwNV9jdGxfbWdyOworCitzdGF0aWMgaW5saW5lCitzdHJ1Y3QgbWRwNV9rbXMg KmdldF9rbXMoc3RydWN0IG1kcDVfY3RsX21hbmFnZXIgKmN0bF9tZ3IpCit7CisJc3RydWN0IG1z bV9kcm1fcHJpdmF0ZSAqcHJpdiA9IGN0bF9tZ3ItPmRldi0+ZGV2X3ByaXZhdGU7CisKKwlyZXR1 cm4gdG9fbWRwNV9rbXModG9fbWRwX2ttcyhwcml2LT5rbXMpKTsKK30KKworc3RhdGljIGlubGlu ZQordm9pZCBjdGxfd3JpdGUoc3RydWN0IG1kcDVfY3RsICpjdGwsIHUzMiByZWcsIHUzMiBkYXRh KQoreworCXN0cnVjdCBtZHA1X2N0bF9tYW5hZ2VyICpjdGxfbWdyID0gJm1kcDVfY3RsX21ncjsK KwlzdHJ1Y3QgbWRwNV9rbXMgKm1kcDVfa21zID0gZ2V0X2ttcyhjdGxfbWdyKTsKKworCSh2b2lk KWN0bC0+cmVnX29mZnNldDsgLyogVE9ETyB1c2UgdGhpcyBpbnN0ZWFkIG9mIG1kcDVfd3JpdGUg Ki8KKwltZHA1X3dyaXRlKG1kcDVfa21zLCByZWcsIGRhdGEpOworfQorCitzdGF0aWMgaW5saW5l Cit1MzIgY3RsX3JlYWQoc3RydWN0IG1kcDVfY3RsICpjdGwsIHUzMiByZWcpCit7CisJc3RydWN0 IG1kcDVfY3RsX21hbmFnZXIgKmN0bF9tZ3IgPSAmbWRwNV9jdGxfbWdyOworCXN0cnVjdCBtZHA1 X2ttcyAqbWRwNV9rbXMgPSBnZXRfa21zKGN0bF9tZ3IpOworCisJKHZvaWQpY3RsLT5yZWdfb2Zm c2V0OyAvKiBUT0RPIHVzZSB0aGlzIGluc3RlYWQgb2YgbWRwNV93cml0ZSAqLworCXJldHVybiBt ZHA1X3JlYWQobWRwNV9rbXMsIHJlZyk7Cit9CisKKworaW50IG1kcDVfY3RsX3NldF9pbnRmKHZv aWQgKmMsIGVudW0gbWRwNV9pbnRmIGludGYpCit7CisJc3RydWN0IG1kcDVfY3RsICpjdGwgPSBj OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RhdGljIGNvbnN0IGVudW0gbWRwNV9pbnRmbnVt IGludGZudW1bXSA9IHsKKwkJCUlOVEYwLCBJTlRGMSwgSU5URjIsIElOVEYzLAorCX07CisKKwlz cGluX2xvY2tfaXJxc2F2ZSgmY3RsLT5od19sb2NrLCBmbGFncyk7CisJY3RsX3dyaXRlKGN0bCwg UkVHX01EUDVfQ1RMX09QKGN0bC0+aWQpLAorCQkJTURQNV9DVExfT1BfTU9ERShjdGwtPm1vZGUp IHwKKwkJCU1EUDVfQ1RMX09QX0lOVEZfTlVNKGludGZudW1baW50Zl0pKTsKKwlzcGluX3VubG9j a19pcnFyZXN0b3JlKCZjdGwtPmh3X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitp bnQgbWRwNV9jdGxfc2V0X2N1cnNvcih2b2lkICpjLCBib29sIGVuYWJsZSkKK3sKKwlzdHJ1Y3Qg bWRwNV9jdGxfbWFuYWdlciAqY3RsX21nciA9ICZtZHA1X2N0bF9tZ3I7CisJc3RydWN0IG1kcDVf Y3RsICpjdGwgPSBjOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIGJsZW5kX2NmZzsKKwlp bnQgbG07CisKKwlsbSA9IG1kcDVfY3J0Y19nZXRfbG0oY3RsLT5jcnRjKTsKKwlpZiAodW5saWtl bHkoV0FSTl9PTihsbSA8IDApKSkgeworCQlkZXZfZXJyKGN0bF9tZ3ItPmRldi0+ZGV2LCAiQ1RM ICVkIGNhbm5vdCBmaW5kIExNOiAlZCIsCisJCQkJY3RsLT5pZCwgbG0pOworCQlyZXR1cm4gLUVJ TlZBTDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3RsLT5od19sb2NrLCBmbGFncyk7CisK KwlibGVuZF9jZmcgPSBjdGxfcmVhZChjdGwsIFJFR19NRFA1X0NUTF9MQVlFUl9SRUcoY3RsLT5p ZCwgbG0pKTsKKworCWlmIChlbmFibGUpCisJCWJsZW5kX2NmZyB8PSAgTURQNV9DVExfTEFZRVJf UkVHX0NVUlNPUl9PVVQ7CisJZWxzZQorCQlibGVuZF9jZmcgJj0gfk1EUDVfQ1RMX0xBWUVSX1JF R19DVVJTT1JfT1VUOworCisJY3RsX3dyaXRlKGN0bCwgUkVHX01EUDVfQ1RMX0xBWUVSX1JFRyhj dGwtPmlkLCBsbSksIGJsZW5kX2NmZyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdGwt Pmh3X2xvY2ssIGZsYWdzKTsKKworCWN0bC0+Y3Vyc29yX29uID0gZW5hYmxlOworCisJcmV0dXJu IDA7Cit9CisKKworaW50IG1kcDVfY3RsX2JsZW5kKHZvaWQgKmMsIHUzMiBsbSwgdTMyIGJsZW5k X2NmZykKK3sKKwlzdHJ1Y3QgbWRwNV9jdGwgKmN0bCA9IGM7CisJdW5zaWduZWQgbG9uZyBmbGFn czsKKworCWlmIChjdGwtPmN1cnNvcl9vbikKKwkJYmxlbmRfY2ZnIHw9ICBNRFA1X0NUTF9MQVlF Ul9SRUdfQ1VSU09SX09VVDsKKwllbHNlCisJCWJsZW5kX2NmZyAmPSB+TURQNV9DVExfTEFZRVJf UkVHX0NVUlNPUl9PVVQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3RsLT5od19sb2NrLCBmbGFn cyk7CisJY3RsX3dyaXRlKGN0bCwgUkVHX01EUDVfQ1RMX0xBWUVSX1JFRyhjdGwtPmlkLCBsbSks IGJsZW5kX2NmZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3RsLT5od19sb2NrLCBmbGFn cyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG1kcDVfY3RsX2NvbW1pdCh2b2lkICpjLCB1MzIg Zmx1c2hfbWFzaykKK3sKKwlzdHJ1Y3QgbWRwNV9jdGxfbWFuYWdlciAqY3RsX21nciA9ICZtZHA1 X2N0bF9tZ3I7CisJc3RydWN0IG1kcDVfY3RsICpjdGwgPSBjOworCXVuc2lnbmVkIGxvbmcgZmxh Z3M7CisKKwlpZiAoZmx1c2hfbWFzayAmIE1EUDVfQ1RMX0ZMVVNIX0NVUlNPUl9EVU1NWSkgewor CQlpbnQgbG0gPSBtZHA1X2NydGNfZ2V0X2xtKGN0bC0+Y3J0Yyk7CisKKwkJaWYgKHVubGlrZWx5 KFdBUk5fT04obG0gPCAwKSkpIHsKKwkJCWRldl9lcnIoY3RsX21nci0+ZGV2LT5kZXYsICJDVEwg JWQgY2Fubm90IGZpbmQgTE06ICVkIiwKKwkJCQkJY3RsLT5pZCwgbG0pOworCQkJcmV0dXJuIC1F SU5WQUw7CisJCX0KKworCQkvKiBmb3IgY3VycmVudCB0YXJnZXRzLCBjdXJzb3IgYml0IGlzIHRo ZSBzYW1lIGFzIExNIGJpdCAqLworCQlmbHVzaF9tYXNrIHw9IG1kcF9jdGxfZmx1c2hfbWFza19s bShsbSk7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmN0bC0+aHdfbG9jaywgZmxhZ3MpOwor CWN0bF93cml0ZShjdGwsIFJFR19NRFA1X0NUTF9GTFVTSChjdGwtPmlkKSwgZmx1c2hfbWFzayk7 CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3RsLT5od19sb2NrLCBmbGFncyk7CisKKwlyZXR1 cm4gMDsKK30KKwordTMyIG1kcDVfY3RsX2dldF9mbHVzaCh2b2lkICpjKQoreworCXN0cnVjdCBt ZHA1X2N0bCAqY3RsID0gYzsKKworCXJldHVybiBjdGwtPmZsdXNoX21hc2s7Cit9CisKK3ZvaWQg bWRwNV9jdGxfcmVsZWFzZSh2b2lkICpjKQoreworCXN0cnVjdCBtZHA1X2N0bF9tYW5hZ2VyICpj dGxfbWdyID0gJm1kcDVfY3RsX21ncjsKKwlzdHJ1Y3QgbWRwNV9jdGwgKmN0bCA9IGM7CisJdW5z aWduZWQgbG9uZyBmbGFnczsKKworCWlmICh1bmxpa2VseShXQVJOX09OKGN0bC0+aWQgPj0gTUFY X0NUTCkgfHwgIWN0bC0+YnVzeSkpIHsKKwkJZGV2X2VycihjdGxfbWdyLT5kZXYtPmRldiwgIkNU TCAlZCBpbiBiYWQgc3RhdGUgKCVkKSIsCisJCQkJY3RsLT5pZCwgY3RsLT5idXN5KTsKKwkJcmV0 dXJuOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZjdGxfbWdyLT5wb29sX2xvY2ssIGZsYWdz KTsKKwljdGwtPmJ1c3kgPSBmYWxzZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdGxfbWdy LT5wb29sX2xvY2ssIGZsYWdzKTsKKworCURCRygiQ1RMICVkIHJlbGVhc2VkIiwgY3RsLT5pZCk7 Cit9CisKKy8qCisgKiBtZHA1X2N0bF9yZXF1ZXN0KCkgLSBDVEwgZHluYW1pYyBhbGxvY2F0aW9u CisgKgorICogTm90ZTogQ3VycmVudCBpbXBsZW1lbnRhdGlvbiBjb25zaWRlcnMgdGhhdCB3ZSBj YW4gb25seSBoYXZlIG9uZSBDUlRDIHBlciBDVEwKKyAqCisgKiBAcmV0dXJuIGZpcnN0IGZyZWUg Q1RMCisgKi8KK3ZvaWQgKm1kcDVfY3RsX3JlcXVlc3Qodm9pZCAqY3RsbSwgdm9pZCAqY3J0YykK K3sKKwlzdHJ1Y3QgbWRwNV9jdGxfbWFuYWdlciAqY3RsX21nciA9IGN0bG07CisJc3RydWN0IG1k cDVfY3RsICpjdGwgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGM7CisKKwlz cGluX2xvY2tfaXJxc2F2ZSgmY3RsX21nci0+cG9vbF9sb2NrLCBmbGFncyk7CisKKwlmb3IgKGMg PSAwOyBjIDwgY3RsX21nci0+bmN0bDsgYysrKQorCQlpZiAoIWN0bF9tZ3ItPmN0bHNbY10uYnVz eSkKKwkJCWJyZWFrOworCisJaWYgKHVubGlrZWx5KGMgPj0gY3RsX21nci0+bmN0bCkpIHsKKwkJ ZGV2X2VycihjdGxfbWdyLT5kZXYtPmRldiwgIk5vIG1vcmUgQ1RMIGF2YWlsYWJsZSEiKTsKKwkJ Z290byB1bmxvY2s7CisJfQorCisJY3RsID0gJmN0bF9tZ3ItPmN0bHNbY107CisKKwljdGwtPmNy dGMgPSBjcnRjOworCWN0bC0+YnVzeSA9IHRydWU7CisJREJHKCJDVEwgJWQgYWxsb2NhdGVkIiwg Y3RsLT5pZCk7CisKK3VubG9jazoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdGxfbWdyLT5w b29sX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gY3RsOworfQorCit2b2lkIG1kcDVfY3RsbV9od19y ZXNldCh2b2lkICpjdGxtKQoreworCXN0cnVjdCBtZHA1X2N0bF9tYW5hZ2VyICpjdGxfbWdyID0g Y3RsbTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBjOworCisJZm9yIChjID0gMDsgYyA8 IGN0bF9tZ3ItPm5jdGw7IGMrKykgeworCQlzdHJ1Y3QgbWRwNV9jdGwgKmN0bCA9ICZjdGxfbWdy LT5jdGxzW2NdOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZjdGwtPmh3X2xvY2ssIGZsYWdzKTsK KwkJY3RsX3dyaXRlKGN0bCwgUkVHX01EUDVfQ1RMX09QKGN0bC0+aWQpLCAwKTsKKwkJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmY3RsLT5od19sb2NrLCBmbGFncyk7CisJfQorfQorCit2b2lkIG1k cDVfY3RsbV9kZXN0cm95KHZvaWQgKmN0bG0pCit7CisJc3RydWN0IG1kcDVfY3RsX21hbmFnZXIg KmN0bF9tZ3IgPSBjdGxtOworCisJa2ZyZWUoY3RsX21ncik7Cit9CisKK3ZvaWQgKm1kcDVfY3Rs bV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgX19pb21lbSAqbW1pb19iYXNlLAor CQljb25zdCBzdHJ1Y3QgbWRwNV9jZmdfaHcgKmh3X2NmZykKK3sKKwlzdHJ1Y3QgbWRwNV9jdGxf bWFuYWdlciAqY3RsX21nciA9ICZtZHA1X2N0bF9tZ3I7CisJY29uc3Qgc3RydWN0IG1kcDVfc3Vi X2Jsb2NrICpjdGxfY2ZnID0gJmh3X2NmZy0+Y3RsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJ aW50IGMsIHJldDsKKworCWlmICh1bmxpa2VseShXQVJOX09OKGN0bF9jZmctPmNvdW50ID4gTUFY X0NUTCkpKSB7CisJCWRldl9lcnIoZGV2LT5kZXYsICJJbmNyZWFzZSBzdGF0aWMgcG9vbCBzaXpl IHRvIGF0IGxlYXN0ICVkXG4iLAorCQkJCWN0bF9jZmctPmNvdW50KTsKKwkJcmV0ID0gLUVOT1NQ QzsKKwkJZ290byBmYWlsOworCX0KKworCS8qIGluaXRpYWxpemUgdGhlIENUTCBtYW5hZ2VyOiAq LworCWN0bF9tZ3ItPmRldiA9IGRldjsKKwljdGxfbWdyLT5ubG0gPSBod19jZmctPmxtLmNvdW50 OworCWN0bF9tZ3ItPm5jdGwgPSBjdGxfY2ZnLT5jb3VudDsKKwlzcGluX2xvY2tfaW5pdCgmY3Rs X21nci0+cG9vbF9sb2NrKTsKKworCS8qIGluaXRpYWxpemUgZWFjaCBDVEwgb2YgdGhlIHBvb2w6 ICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmN0bF9tZ3ItPnBvb2xfbG9jaywgZmxhZ3MpOworCWZv ciAoYyA9IDA7IGMgPCBjdGxfbWdyLT5uY3RsOyBjKyspIHsKKwkJc3RydWN0IG1kcDVfY3RsICpj dGwgPSAmY3RsX21nci0+Y3Rsc1tjXTsKKworCQlpZiAoV0FSTl9PTighY3RsX2NmZy0+YmFzZVtj XSkpIHsKKwkJCWRldl9lcnIoZGV2LT5kZXYsICJDVExfJWQ6IGJhc2UgaXMgbnVsbCFcbiIsIGMp OworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCQljdGwtPmlkID0gYzsK KwkJY3RsLT5tb2RlID0gTU9ERV9OT05FOworCQljdGwtPnJlZ19vZmZzZXQgPSBjdGxfY2ZnLT5i YXNlW2NdOworCQljdGwtPmZsdXNoX21hc2sgPSBNRFA1X0NUTF9GTFVTSF9DVEw7CisJCWN0bC0+ YnVzeSA9IGZhbHNlOworCQlzcGluX2xvY2tfaW5pdCgmY3RsLT5od19sb2NrKTsKKwl9CisJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmY3RsX21nci0+cG9vbF9sb2NrLCBmbGFncyk7CisJREJHKCJQ b29sIG9mICVkIENUTHMgY3JlYXRlZC4iLCBjdGxfbWdyLT5uY3RsKTsKKworCXJldHVybiBjdGxf bWdyOworCitmYWlsOgorCWlmIChjdGxfbWdyKQorCQltZHA1X2N0bG1fZGVzdHJveShjdGxfbWdy KTsKKworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vbXNtL21kcC9tZHA1L21kcDVfY3RsLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHA1 L21kcDVfY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJlMWNhZQot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcDUvbWRwNV9jdGwu aApAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBUaGUgTGludXgg Rm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICog aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJz aW9uIDIgYW5kCisgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5k ZWYgX19NRFA1X0NUTF9IX18KKyNkZWZpbmUgX19NRFA1X0NUTF9IX18KKworI2luY2x1ZGUgIm1z bV9kcnYuaCIKKworLyoKKyAqIENUTCBNYW5hZ2VyIHByb3RvdHlwZXM6CisgKiBtZHA1X2N0bG1f aW5pdCgpIHJldHVybnMgYSBjdGxtIChDVEwgTWFuYWdlcikgaGFuZGxlciwKKyAqIHdoaWNoIGlz IHRoZW4gdXNlZCB0byBjYWxsIHRoZSBvdGhlciBtZHA1X2N0bG1fKihjdGxtLCAuLi4pIGZ1bmN0 aW9ucy4KKyAqLwordm9pZCAqbWRwNV9jdGxtX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwg dm9pZCBfX2lvbWVtICptbWlvX2Jhc2UsCisJCWNvbnN0IHN0cnVjdCBtZHA1X2NmZ19odyAqaHdf Y2ZnKTsKK3ZvaWQgIG1kcDVfY3RsbV9od19yZXNldCh2b2lkICpjdGxtKTsKK3ZvaWQgIG1kcDVf Y3RsbV9kZXN0cm95KHZvaWQgKmN0bG0pOworCisvKgorICogQ1RMIHByb3RvdHlwZXM6CisgKiBt ZHA1X2N0bF9yZXF1ZXN0KGN0bG0sIC4uLikgcmV0dXJucyBhIGN0bCAoQ1RMIHJlc291cmNlKSBo YW5kbGVyLAorICogd2hpY2ggaXMgdGhlbiB1c2VkIHRvIGNhbGwgdGhlIG90aGVyIG1kcDVfY3Rs XyooY3RsLCAuLi4pIGZ1bmN0aW9ucy4KKyAqLwordm9pZCAqbWRwNV9jdGxfcmVxdWVzdCh2b2lk ICpjdGxtLCB2b2lkICpjcnRjKTsKKworaW50IG1kcDVfY3RsX3NldF9pbnRmKHZvaWQgKmN0bCwg ZW51bSBtZHA1X2ludGYgaW50Zik7CisKK2ludCBtZHA1X2N0bF9zZXRfY3Vyc29yKHZvaWQgKmN0 bCwgYm9vbCBlbmFibGUpOworCisvKiBAYmxlbmRfY2ZnOiBzZWUgTE0gYmxlbmRlciBjb25maWcg ZGVmaW5pdGlvbiBiZWxvdyAqLworaW50IG1kcDVfY3RsX2JsZW5kKHZvaWQgKmN0bCwgdTMyIGxt LCB1MzIgYmxlbmRfY2ZnKTsKKworLyogQGZsdXNoX21hc2s6IHNlZSBDVEwgZmx1c2ggbWFza3Mg ZGVmaW5pdGlvbnMgYmVsb3cgKi8KK2ludCBtZHA1X2N0bF9jb21taXQodm9pZCAqY3RsLCB1MzIg Zmx1c2hfbWFzayk7Cit1MzIgbWRwNV9jdGxfZ2V0X2ZsdXNoKHZvaWQgKmN0bCk7CisKK3ZvaWQg bWRwNV9jdGxfcmVsZWFzZSh2b2lkICpjdGwpOworCisvKgorICogYmxlbmRfY2ZnIChMTSBibGVu ZGVyIGNvbmZpZyk6CisgKgorICogVGhlIGZ1bmN0aW9uIGJlbG93IGFsbG93cyB0aGUgY2FsbGVy IG9mIG1kcDVfY3RsX2JsZW5kKCkgdG8gc3BlY2lmeSBob3cgcGlwZXMKKyAqIGFyZSBiZWluZyBi bGVuZGVkIGFjY29yZGluZyB0byB0aGVpciBzdGFnZSAoei1vcmRlciksIHRocm91Z2ggQGJsZW5k X2NmZyBhcmcuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIG1kcF9jdGxfYmxlbmRfbWFzayhlbnVt IG1kcDVfcGlwZSBwaXBlLAorCQllbnVtIG1kcF9taXhlcl9zdGFnZV9pZCBzdGFnZSkKK3sKKwlz d2l0Y2ggKHBpcGUpIHsKKwljYXNlIFNTUFBfVklHMDogcmV0dXJuIE1EUDVfQ1RMX0xBWUVSX1JF R19WSUcwKHN0YWdlKTsKKwljYXNlIFNTUFBfVklHMTogcmV0dXJuIE1EUDVfQ1RMX0xBWUVSX1JF R19WSUcxKHN0YWdlKTsKKwljYXNlIFNTUFBfVklHMjogcmV0dXJuIE1EUDVfQ1RMX0xBWUVSX1JF R19WSUcyKHN0YWdlKTsKKwljYXNlIFNTUFBfUkdCMDogcmV0dXJuIE1EUDVfQ1RMX0xBWUVSX1JF R19SR0IwKHN0YWdlKTsKKwljYXNlIFNTUFBfUkdCMTogcmV0dXJuIE1EUDVfQ1RMX0xBWUVSX1JF R19SR0IxKHN0YWdlKTsKKwljYXNlIFNTUFBfUkdCMjogcmV0dXJuIE1EUDVfQ1RMX0xBWUVSX1JF R19SR0IyKHN0YWdlKTsKKwljYXNlIFNTUFBfRE1BMDogcmV0dXJuIE1EUDVfQ1RMX0xBWUVSX1JF R19ETUEwKHN0YWdlKTsKKwljYXNlIFNTUFBfRE1BMTogcmV0dXJuIE1EUDVfQ1RMX0xBWUVSX1JF R19ETUExKHN0YWdlKTsKKwljYXNlIFNTUFBfVklHMzogcmV0dXJuIE1EUDVfQ1RMX0xBWUVSX1JF R19WSUczKHN0YWdlKTsKKwljYXNlIFNTUFBfUkdCMzogcmV0dXJuIE1EUDVfQ1RMX0xBWUVSX1JF R19SR0IzKHN0YWdlKTsKKwlkZWZhdWx0OglyZXR1cm4gMDsKKwl9Cit9CisKKy8qCisgKiBmbHVz aF9tYXNrIChDVEwgZmx1c2ggbWFza3MpOgorICoKKyAqIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25z IGFsbG93IGVhY2ggRFJNIGVudGl0eSB0byBnZXQgYW5kIHN0b3JlCisgKiB0aGVpciBvd24gZmx1 c2ggbWFzay4KKyAqIE9uY2Ugc3RvcmVkLCB0aGVzZSBtYXNrcyB3aWxsIHRoZW4gYmUgYWNjZXNz ZWQgdGhyb3VnaCBlYWNoIERSTSdzCisgKiBpbnRlcmZhY2UgYW5kIHVzZWQgYnkgdGhlIGNhbGxl ciBvZiBtZHA1X2N0bF9jb21taXQoKSB0byBzcGVjaWZ5CisgKiB3aGljaCBibG9jayhzKSBuZWVk IHRvIGJlIGZsdXNoZWQgdGhyb3VnaCBAZmx1c2hfbWFzayBwYXJhbWV0ZXIuCisgKi8KKworI2Rl ZmluZSBNRFA1X0NUTF9GTFVTSF9DVVJTT1JfRFVNTVkJMHg4MDAwMDAwMAorCitzdGF0aWMgaW5s aW5lIHUzMiBtZHBfY3RsX2ZsdXNoX21hc2tfY3Vyc29yKGludCBjdXJzb3JfaWQpCit7CisJLyog VE9ETzogdXNlIGlkIG9uY2UgbXVsdGlwbGUgY3Vyc29yIHN1cHBvcnQgaXMgcHJlc2VudCAqLwor CSh2b2lkKWN1cnNvcl9pZDsKKworCXJldHVybiBNRFA1X0NUTF9GTFVTSF9DVVJTT1JfRFVNTVk7 Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIG1kcF9jdGxfZmx1c2hfbWFza19sbShpbnQgbG0pCit7 CisJc3dpdGNoIChsbSkgeworCWNhc2UgMDogIHJldHVybiBNRFA1X0NUTF9GTFVTSF9MTTA7CisJ Y2FzZSAxOiAgcmV0dXJuIE1EUDVfQ1RMX0ZMVVNIX0xNMTsKKwljYXNlIDI6ICByZXR1cm4gTURQ NV9DVExfRkxVU0hfTE0yOworCWNhc2UgNTogIHJldHVybiBNRFA1X0NUTF9GTFVTSF9MTTU7CisJ ZGVmYXVsdDogcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHUzMiBtZHBfY3RsX2Zs dXNoX21hc2tfcGlwZShlbnVtIG1kcDVfcGlwZSBwaXBlKQoreworCXN3aXRjaCAocGlwZSkgewor CWNhc2UgU1NQUF9WSUcwOiByZXR1cm4gTURQNV9DVExfRkxVU0hfVklHMDsKKwljYXNlIFNTUFBf VklHMTogcmV0dXJuIE1EUDVfQ1RMX0ZMVVNIX1ZJRzE7CisJY2FzZSBTU1BQX1ZJRzI6IHJldHVy biBNRFA1X0NUTF9GTFVTSF9WSUcyOworCWNhc2UgU1NQUF9SR0IwOiByZXR1cm4gTURQNV9DVExf RkxVU0hfUkdCMDsKKwljYXNlIFNTUFBfUkdCMTogcmV0dXJuIE1EUDVfQ1RMX0ZMVVNIX1JHQjE7 CisJY2FzZSBTU1BQX1JHQjI6IHJldHVybiBNRFA1X0NUTF9GTFVTSF9SR0IyOworCWNhc2UgU1NQ UF9ETUEwOiByZXR1cm4gTURQNV9DVExfRkxVU0hfRE1BMDsKKwljYXNlIFNTUFBfRE1BMTogcmV0 dXJuIE1EUDVfQ1RMX0ZMVVNIX0RNQTE7CisJY2FzZSBTU1BQX1ZJRzM6IHJldHVybiBNRFA1X0NU TF9GTFVTSF9WSUczOworCWNhc2UgU1NQUF9SR0IzOiByZXR1cm4gTURQNV9DVExfRkxVU0hfUkdC MzsKKwlkZWZhdWx0OiAgICAgICAgcmV0dXJuIDA7CisJfQorfQorCisjZW5kaWYgLyogX19NRFA1 X0NUTF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcDUvbWRw NV9lbmNvZGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHA1L21kcDVfZW5jb2Rlci5j CmluZGV4IGVkZWM3YmYuLjI1YzJmY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20v bWRwL21kcDUvbWRwNV9lbmNvZGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tZHAvbWRw NS9tZHA1X2VuY29kZXIuYwpAQCAtMjQsNiArMjQsNyBAQCBzdHJ1Y3QgbWRwNV9lbmNvZGVyIHsK IAlzdHJ1Y3QgZHJtX2VuY29kZXIgYmFzZTsKIAlpbnQgaW50ZjsKIAllbnVtIG1kcDVfaW50ZiBp bnRmX2lkOworCXNwaW5sb2NrX3QgaW50Zl9sb2NrOwkvKiBwcm90ZWN0IFJFR19NRFA1X0lOVEZf KiByZWdpc3RlcnMgKi8KIAlib29sIGVuYWJsZWQ7CiAJdWludDMyX3QgYnNjOwogfTsKQEAgLTEx NSw2ICsxMTYsNyBAQCBzdGF0aWMgdm9pZCBtZHA1X2VuY29kZXJfZHBtcyhzdHJ1Y3QgZHJtX2Vu Y29kZXIgKmVuY29kZXIsIGludCBtb2RlKQogCXN0cnVjdCBtZHA1X2ttcyAqbWRwNV9rbXMgPSBn ZXRfa21zKGVuY29kZXIpOwogCWludCBpbnRmID0gbWRwNV9lbmNvZGVyLT5pbnRmOwogCWJvb2wg ZW5hYmxlZCA9IChtb2RlID09IERSTV9NT0RFX0RQTVNfT04pOworCXVuc2lnbmVkIGxvbmcgZmxh Z3M7CiAKIAlEQkcoIm1vZGU9JWQiLCBtb2RlKTsKIApAQCAtMTIzLDkgKzEyNSwxMyBAQCBzdGF0 aWMgdm9pZCBtZHA1X2VuY29kZXJfZHBtcyhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsIGlu dCBtb2RlKQogCiAJaWYgKGVuYWJsZWQpIHsKIAkJYnNfc2V0KG1kcDVfZW5jb2RlciwgMSk7CisJ CXNwaW5fbG9ja19pcnFzYXZlKCZtZHA1X2VuY29kZXItPmludGZfbG9jaywgZmxhZ3MpOwogCQlt ZHA1X3dyaXRlKG1kcDVfa21zLCBSRUdfTURQNV9JTlRGX1RJTUlOR19FTkdJTkVfRU4oaW50Ziks IDEpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZHA1X2VuY29kZXItPmludGZfbG9jaywg ZmxhZ3MpOwogCX0gZWxzZSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZtZHA1X2VuY29kZXItPmlu dGZfbG9jaywgZmxhZ3MpOwogCQltZHA1X3dyaXRlKG1kcDVfa21zLCBSRUdfTURQNV9JTlRGX1RJ TUlOR19FTkdJTkVfRU4oaW50ZiksIDApOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZHA1 X2VuY29kZXItPmludGZfbG9jaywgZmxhZ3MpOwogCQlic19zZXQobWRwNV9lbmNvZGVyLCAwKTsK IAl9CiAKQEAgLTE1MCw2ICsxNTYsNyBAQCBzdGF0aWMgdm9pZCBtZHA1X2VuY29kZXJfbW9kZV9z ZXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAogCXVpbnQzMl90IGRpc3BsYXlfdl9zdGFy dCwgZGlzcGxheV92X2VuZDsKIAl1aW50MzJfdCBoc3luY19zdGFydF94LCBoc3luY19lbmRfeDsK IAl1aW50MzJfdCBmb3JtYXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCW1vZGUgPSBhZGp1 c3RlZF9tb2RlOwogCkBAIC0xODAsNiArMTg3LDggQEAgc3RhdGljIHZvaWQgbWRwNV9lbmNvZGVy X21vZGVfc2V0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKIAlkaXNwbGF5X3Zfc3RhcnQg PSAobW9kZS0+dnRvdGFsIC0gbW9kZS0+dnN5bmNfc3RhcnQpICogbW9kZS0+aHRvdGFsICsgZHR2 X2hzeW5jX3NrZXc7CiAJZGlzcGxheV92X2VuZCA9IHZzeW5jX3BlcmlvZCAtICgobW9kZS0+dnN5 bmNfc3RhcnQgLSBtb2RlLT52ZGlzcGxheSkgKiBtb2RlLT5odG90YWwpICsgZHR2X2hzeW5jX3Nr ZXcgLSAxOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1kcDVfZW5jb2Rlci0+aW50Zl9sb2NrLCBm bGFncyk7CisKIAltZHA1X3dyaXRlKG1kcDVfa21zLCBSRUdfTURQNV9JTlRGX0hTWU5DX0NUTChp bnRmKSwKIAkJCU1EUDVfSU5URl9IU1lOQ19DVExfUFVMU0VXKG1vZGUtPmhzeW5jX2VuZCAtIG1v ZGUtPmhzeW5jX3N0YXJ0KSB8CiAJCQlNRFA1X0lOVEZfSFNZTkNfQ1RMX1BFUklPRChtb2RlLT5o dG90YWwpKTsKQEAgLTIwMSw2ICsyMTAsOCBAQCBzdGF0aWMgdm9pZCBtZHA1X2VuY29kZXJfbW9k ZV9zZXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAogCW1kcDVfd3JpdGUobWRwNV9rbXMs IFJFR19NRFA1X0lOVEZfQUNUSVZFX1ZFTkRfRjAoaW50ZiksIDApOwogCW1kcDVfd3JpdGUobWRw NV9rbXMsIFJFR19NRFA1X0lOVEZfUEFORUxfRk9STUFUKGludGYpLCBmb3JtYXQpOwogCW1kcDVf d3JpdGUobWRwNV9rbXMsIFJFR19NRFA1X0lOVEZfRlJBTUVfTElORV9DT1VOVF9FTihpbnRmKSwg MHgzKTsgIC8qIGZyYW1lK2xpbmU/ICovCisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZHA1 X2VuY29kZXItPmludGZfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBtZHA1X2VuY29k ZXJfcHJlcGFyZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCkBAIC0yNDIsNiArMjUzLDgg QEAgc3RydWN0IGRybV9lbmNvZGVyICptZHA1X2VuY29kZXJfaW5pdChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LCBpbnQgaW50ZiwKIAltZHA1X2VuY29kZXItPmludGZfaWQgPSBpbnRmX2lkOwogCWVu Y29kZXIgPSAmbWRwNV9lbmNvZGVyLT5iYXNlOwogCisJc3Bpbl9sb2NrX2luaXQoJm1kcDVfZW5j b2Rlci0+aW50Zl9sb2NrKTsKKwogCWRybV9lbmNvZGVyX2luaXQoZGV2LCBlbmNvZGVyLCAmbWRw NV9lbmNvZGVyX2Z1bmNzLAogCQkJIERSTV9NT0RFX0VOQ09ERVJfVE1EUyk7CiAJZHJtX2VuY29k ZXJfaGVscGVyX2FkZChlbmNvZGVyLCAmbWRwNV9lbmNvZGVyX2hlbHBlcl9mdW5jcyk7CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHA1L21kcDVfa21zLmMgYi9kcml2ZXJz L2dwdS9kcm0vbXNtL21kcC9tZHA1L21kcDVfa21zLmMKaW5kZXggNzZiZDg2MC4uODNmZWI5ZSAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tZHAvbWRwNS9tZHA1X2ttcy5jCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcDUvbWRwNV9rbXMuYwpAQCAtMjgsOSArMjgsOCBA QCBzdGF0aWMgY29uc3QgY2hhciAqaW9tbXVfcG9ydHNbXSA9IHsKIHN0YXRpYyBpbnQgbWRwNV9o d19pbml0KHN0cnVjdCBtc21fa21zICprbXMpCiB7CiAJc3RydWN0IG1kcDVfa21zICptZHA1X2tt cyA9IHRvX21kcDVfa21zKHRvX21kcF9rbXMoa21zKSk7Ci0JY29uc3Qgc3RydWN0IG1kcDVfY2Zn X2h3ICpod19jZmc7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1kcDVfa21zLT5kZXY7Ci0J aW50IGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXBtX3J1bnRpbWVfZ2V0X3N5bmMoZGV2 LT5kZXYpOwogCkBAIC01OCwxMiArNTcsMTEgQEAgc3RhdGljIGludCBtZHA1X2h3X2luaXQoc3Ry dWN0IG1zbV9rbXMgKmttcykKIAkgKiBjYXJlLgogCSAqLwogCisJc3Bpbl9sb2NrX2lycXNhdmUo Jm1kcDVfa21zLT5yZXNvdXJjZV9sb2NrLCBmbGFncyk7CiAJbWRwNV93cml0ZShtZHA1X2ttcywg UkVHX01EUDVfRElTUF9JTlRGX1NFTCwgMCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWRw NV9rbXMtPnJlc291cmNlX2xvY2ssIGZsYWdzKTsKIAotCWh3X2NmZyA9IG1kcDVfY2ZnX2dldF9o d19jb25maWcobWRwNV9rbXMtPmNmZ19wcml2KTsKLQotCWZvciAoaSA9IDA7IGkgPCBod19jZmct PmN0bC5jb3VudDsgaSsrKQotCQltZHA1X3dyaXRlKG1kcDVfa21zLCBSRUdfTURQNV9DVExfT1Ao aSksIDApOworCW1kcDVfY3RsbV9od19yZXNldChtZHA1X2ttcy0+Y3RsX3ByaXYpOwogCiAJcG1f cnVudGltZV9wdXRfc3luYyhkZXYtPmRldik7CiAKQEAgLTkyLDExICs5MCwxNCBAQCBzdGF0aWMg dm9pZCBtZHA1X2Rlc3Ryb3koc3RydWN0IG1zbV9rbXMgKmttcykKIAlzdHJ1Y3QgbXNtX21tdSAq bW11ID0gbWRwNV9rbXMtPm1tdTsKIAl2b2lkICpzbXAgPSBtZHA1X2ttcy0+c21wX3ByaXY7CiAJ dm9pZCAqY2ZnID0gbWRwNV9rbXMtPmNmZ19wcml2OworCXZvaWQgKmN0bCA9IG1kcDVfa21zLT5j dGxfcHJpdjsKIAogCWlmIChtbXUpIHsKIAkJbW11LT5mdW5jcy0+ZGV0YWNoKG1tdSwgaW9tbXVf cG9ydHMsIEFSUkFZX1NJWkUoaW9tbXVfcG9ydHMpKTsKIAkJbW11LT5mdW5jcy0+ZGVzdHJveSht bXUpOwogCX0KKwlpZiAoY3RsKQorCQltZHA1X2N0bG1fZGVzdHJveShjdGwpOwogCWlmIChzbXAp CiAJCW1kcDVfc21wX2Rlc3Ryb3koc21wKTsKIAlpZiAoY2ZnKQpAQCAtMTUxLDYgKzE1Miw5IEBA IHN0YXRpYyBpbnQgbW9kZXNldF9pbml0KHN0cnVjdCBtZHA1X2ttcyAqbWRwNV9rbXMpCiAJc3Rh dGljIGNvbnN0IGVudW0gbWRwNV9waXBlIGNydGNzW10gPSB7CiAJCQlTU1BQX1JHQjAsIFNTUFBf UkdCMSwgU1NQUF9SR0IyLCBTU1BQX1JHQjMsCiAJfTsKKwlzdGF0aWMgY29uc3QgZW51bSBtZHA1 X3BpcGUgcHViX3BsYW5lc1tdID0geworCQkJU1NQUF9WSUcwLCBTU1BQX1ZJRzEsIFNTUFBfVklH MiwgU1NQUF9WSUczLAorCX07CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1kcDVfa21zLT5k ZXY7CiAJc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJ c3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwpAQCAtMTU5LDEyICsxNjMsMTMgQEAgc3RhdGlj IGludCBtb2Rlc2V0X2luaXQoc3RydWN0IG1kcDVfa21zICptZHA1X2ttcykKIAogCWh3X2NmZyA9 IG1kcDVfY2ZnX2dldF9od19jb25maWcobWRwNV9rbXMtPmNmZ19wcml2KTsKIAotCS8qIGNvbnN0 cnVjdCBDUlRDczogKi8KKwkvKiBjb25zdHJ1Y3QgQ1JUQ3MgYW5kIHRoZWlyIHByaXZhdGUgcGxh bmVzOiAqLwogCWZvciAoaSA9IDA7IGkgPCBod19jZmctPnBpcGVfcmdiLmNvdW50OyBpKyspIHsK IAkJc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7CiAJCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKIAot CQlwbGFuZSA9IG1kcDVfcGxhbmVfaW5pdChkZXYsIGNydGNzW2ldLCB0cnVlKTsKKwkJcGxhbmUg PSBtZHA1X3BsYW5lX2luaXQoZGV2LCBjcnRjc1tpXSwgdHJ1ZSwKKwkJCQlod19jZmctPnBpcGVf cmdiLmJhc2VbaV0pOwogCQlpZiAoSVNfRVJSKHBsYW5lKSkgewogCQkJcmV0ID0gUFRSX0VSUihw bGFuZSk7CiAJCQlkZXZfZXJyKGRldi0+ZGV2LCAiZmFpbGVkIHRvIGNvbnN0cnVjdCBwbGFuZSBm b3IgJXMgKCVkKVxuIiwKQEAgLTE4Miw2ICsxODcsMjAgQEAgc3RhdGljIGludCBtb2Rlc2V0X2lu aXQoc3RydWN0IG1kcDVfa21zICptZHA1X2ttcykKIAkJcHJpdi0+Y3J0Y3NbcHJpdi0+bnVtX2Ny dGNzKytdID0gY3J0YzsKIAl9CiAKKwkvKiBDb25zdHJ1Y3QgcHVibGljIHBsYW5lczogKi8KKwlm b3IgKGkgPSAwOyBpIDwgaHdfY2ZnLT5waXBlX3ZpZy5jb3VudDsgaSsrKSB7CisJCXN0cnVjdCBk cm1fcGxhbmUgKnBsYW5lOworCisJCXBsYW5lID0gbWRwNV9wbGFuZV9pbml0KGRldiwgcHViX3Bs YW5lc1tpXSwgZmFsc2UsCisJCQkJaHdfY2ZnLT5waXBlX3ZpZy5iYXNlW2ldKTsKKwkJaWYgKElT X0VSUihwbGFuZSkpIHsKKwkJCXJldCA9IFBUUl9FUlIocGxhbmUpOworCQkJZGV2X2VycihkZXYt PmRldiwgImZhaWxlZCB0byBjb25zdHJ1Y3QgJXMgcGxhbmU6ICVkXG4iLAorCQkJCQlwaXBlMm5h bWUocHViX3BsYW5lc1tpXSksIHJldCk7CisJCQlnb3RvIGZhaWw7CisJCX0KKwl9CisKIAkvKiBO T1RFOiB0aGUgdnN5bmMgYW5kIGVycm9yIGlycSdzIGFyZSBhY3R1YWxseSBhc3NvY2lhdGVkIHdp dGgKIAkgKiB0aGUgSU5URi9lbmNvZGVyLi4gdGhlIGVhc2llc3Qgd2F5IHRvIGRlYWwgd2l0aCB0 aGlzIChpZS4gd2hhdAogCSAqIHdlIGRvIG5vdykgaXMgYXNzdW1lIGEgZml4ZWQgcmVsYXRpb25z aGlwIGJldHdlZW4gY3J0YydzIGFuZApAQCAtMTk5LDkgKzIxOCw3IEBAIHN0YXRpYyBpbnQgbW9k ZXNldF9pbml0KHN0cnVjdCBtZHA1X2ttcyAqbWRwNV9rbXMpCiAJCQlnb3RvIGZhaWw7CiAJCX0K IAotCQllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9IEJJVCgwKTsKLQkJbWRwNV9jcnRjX3NldF9p bnRmKHByaXYtPmNydGNzWzBdLCAzLCBJTlRGX0hETUkpOwotCisJCWVuY29kZXItPnBvc3NpYmxl X2NydGNzID0gKDEgPDwgcHJpdi0+bnVtX2NydGNzKSAtIDE7CiAJCXByaXYtPmVuY29kZXJzW3By aXYtPm51bV9lbmNvZGVycysrXSA9IGVuY29kZXI7CiAKIAkJcmV0ID0gaGRtaV9zZXRfZW5jb2Rl cihwcml2LT5oZG1pX3BkZXYsIGVuY29kZXIpOwpAQCAtMjY3LDYgKzI4NCw4IEBAIHN0cnVjdCBt c21fa21zICptZHA1X2ttc19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiAJCWdvdG8gZmFp bDsKIAl9CiAKKwlzcGluX2xvY2tfaW5pdCgmbWRwNV9rbXMtPnJlc291cmNlX2xvY2spOworCiAJ bWRwX2ttc19pbml0KCZtZHA1X2ttcy0+YmFzZSwgJmttc19mdW5jcyk7CiAKIAlrbXMgPSAmbWRw NV9rbXMtPmJhc2UuYmFzZTsKQEAgLTMzNSw2ICszNTQsMTMgQEAgc3RydWN0IG1zbV9rbXMgKm1k cDVfa21zX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIAl9CiAJbWRwNV9rbXMtPnNtcF9w cml2ID0gcHJpdjsKIAorCXByaXYgPSBtZHA1X2N0bG1faW5pdChkZXYsIG1kcDVfa21zLT5tbWlv LCBjb25maWctPmh3KTsKKwlpZiAoSVNfRVJSKHByaXYpKSB7CisJCXJldCA9IFBUUl9FUlIocHJp dik7CisJCWdvdG8gZmFpbDsKKwl9CisJbWRwNV9rbXMtPmN0bF9wcml2ID0gcHJpdjsKKwogCS8q IG1ha2Ugc3VyZSB0aGluZ3MgYXJlIG9mZiBiZWZvcmUgYXR0YWNoaW5nIGlvbW11IChib290bG9h ZGVyIGNvdWxkCiAJICogaGF2ZSBsZWZ0IHRoaW5ncyBvbiwgaW4gd2hpY2ggY2FzZSB3ZSdsbCBz dGFydCBnZXR0aW5nIGZhdWx0cyBpZgogCSAqIHdlIGRvbid0IGRpc2FibGUpOgpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL21zbS9tZHAvbWRwNS9tZHA1X2ttcy5oIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9tZHAvbWRwNS9tZHA1X2ttcy5oCmluZGV4IDc2MTZhM2IuLjVlN2NjOTEgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcDUvbWRwNV9rbXMuaAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHA1L21kcDVfa21zLmgKQEAgLTIzLDYgKzIzLDcgQEAKICNp bmNsdWRlICJtZHAvbWRwX2ttcy5oIgogI2luY2x1ZGUgIm1kcDVfY2ZnLmgiCS8qIG11c3QgYmUg aW5jbHVkZWQgYmVmb3JlIG1kcDUueG1sLmggKi8KICNpbmNsdWRlICJtZHA1LnhtbC5oIgorI2lu Y2x1ZGUgIm1kcDVfY3RsLmgiCiAjaW5jbHVkZSAibWRwNV9zbXAuaCIKIAogc3RydWN0IG1kcDVf a21zIHsKQEAgLTM3LDYgKzM4LDcgQEAgc3RydWN0IG1kcDVfa21zIHsKIAlzdHJ1Y3QgbXNtX21t dSAqbW11OwogCiAJdm9pZCAqc21wX3ByaXY7CisJdm9pZCAqY3RsX3ByaXY7CiAKIAkvKiBpby9y ZWdpc3RlciBzcGFjZXM6ICovCiAJdm9pZCBfX2lvbWVtICptbWlvLCAqdmJpZjsKQEAgLTUwLDEw ICs1MiwyMCBAQCBzdHJ1Y3QgbWRwNV9rbXMgewogCXN0cnVjdCBjbGsgKmx1dF9jbGs7CiAJc3Ry dWN0IGNsayAqdnN5bmNfY2xrOwogCisJLyoKKwkgKiBsb2NrIHRvIHByb3RlY3QgYWNjZXNzIHRv IGdsb2JhbCByZXNvdXJjZXM6IGllLiwgZm9sbG93aW5nIHJlZ2lzdGVyOgorCSAqCS0gUkVHX01E UDVfRElTUF9JTlRGX1NFTAorCSAqLworCXNwaW5sb2NrX3QgcmVzb3VyY2VfbG9jazsKKwogCXN0 cnVjdCBtZHBfaXJxIGVycm9yX2hhbmRsZXI7CiB9OwogI2RlZmluZSB0b19tZHA1X2ttcyh4KSBj b250YWluZXJfb2YoeCwgc3RydWN0IG1kcDVfa21zLCBiYXNlKQogCitzdHJ1Y3QgbWRwNV9vdmVy bGF5X2luZm8geworCWVudW0gbWRwX21peGVyX3N0YWdlX2lkIHpvcmRlcjsKK307CisKIHN0YXRp YyBpbmxpbmUgdm9pZCBtZHA1X3dyaXRlKHN0cnVjdCBtZHA1X2ttcyAqbWRwNV9rbXMsIHUzMiBy ZWcsIHUzMiBkYXRhKQogewogCW1zbV93cml0ZWwoZGF0YSwgbWRwNV9rbXMtPm1taW8gKyByZWcp OwpAQCAtNzcsMjMgKzg5LDYgQEAgc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpwaXBlMm5hbWUo ZW51bSBtZHA1X3BpcGUgcGlwZSkKIAlyZXR1cm4gbmFtZXNbcGlwZV07CiB9CiAKLXN0YXRpYyBp bmxpbmUgdWludDMyX3QgcGlwZTJmbHVzaChlbnVtIG1kcDVfcGlwZSBwaXBlKQotewotCXN3aXRj aCAocGlwZSkgewotCWNhc2UgU1NQUF9WSUcwOiByZXR1cm4gTURQNV9DVExfRkxVU0hfVklHMDsK LQljYXNlIFNTUFBfVklHMTogcmV0dXJuIE1EUDVfQ1RMX0ZMVVNIX1ZJRzE7Ci0JY2FzZSBTU1BQ X1ZJRzI6IHJldHVybiBNRFA1X0NUTF9GTFVTSF9WSUcyOwotCWNhc2UgU1NQUF9SR0IwOiByZXR1 cm4gTURQNV9DVExfRkxVU0hfUkdCMDsKLQljYXNlIFNTUFBfUkdCMTogcmV0dXJuIE1EUDVfQ1RM X0ZMVVNIX1JHQjE7Ci0JY2FzZSBTU1BQX1JHQjI6IHJldHVybiBNRFA1X0NUTF9GTFVTSF9SR0Iy OwotCWNhc2UgU1NQUF9ETUEwOiByZXR1cm4gTURQNV9DVExfRkxVU0hfRE1BMDsKLQljYXNlIFNT UFBfRE1BMTogcmV0dXJuIE1EUDVfQ1RMX0ZMVVNIX0RNQTE7Ci0JY2FzZSBTU1BQX1ZJRzM6IHJl dHVybiBNRFA1X0NUTF9GTFVTSF9WSUczOwotCWNhc2UgU1NQUF9SR0IzOiByZXR1cm4gTURQNV9D VExfRkxVU0hfUkdCMzsKLQlkZWZhdWx0OiAgICAgICAgcmV0dXJuIDA7Ci0JfQotfQotCiBzdGF0 aWMgaW5saW5lIGludCBwaXBlMm5jbGllbnRzKGVudW0gbWRwNV9waXBlIHBpcGUpCiB7CiAJc3dp dGNoIChwaXBlKSB7CkBAIC0xMDcsMTYgKzEwMiw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBpcGUy bmNsaWVudHMoZW51bSBtZHA1X3BpcGUgcGlwZSkKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdWlu dDMyX3QgbWl4ZXIyZmx1c2goaW50IGxtKQotewotCXN3aXRjaCAobG0pIHsKLQljYXNlIDA6ICBy ZXR1cm4gTURQNV9DVExfRkxVU0hfTE0wOwotCWNhc2UgMTogIHJldHVybiBNRFA1X0NUTF9GTFVT SF9MTTE7Ci0JY2FzZSAyOiAgcmV0dXJuIE1EUDVfQ1RMX0ZMVVNIX0xNMjsKLQlkZWZhdWx0OiBy ZXR1cm4gMDsKLQl9Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgaW50ZjJlcnIoaW50IGlu dGYpCiB7CiAJc3dpdGNoIChpbnRmKSB7CkBAIC0xNjIsNiArMTQ3LDEwIEBAIHVpbnQzMl90IG1k cDVfZ2V0X2Zvcm1hdHMoZW51bSBtZHA1X3BpcGUgcGlwZSwgdWludDMyX3QgKnBpeGVsX2Zvcm1h dHMsCiAKIHZvaWQgbWRwNV9wbGFuZV9pbnN0YWxsX3Byb3BlcnRpZXMoc3RydWN0IGRybV9wbGFu ZSAqcGxhbmUsCiAJCXN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKm9iaik7Cit2b2lkIG1kcDVfcGxh bmVfc2V0X292ZXJsYXlfaW5mbyhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJY29uc3Qgc3Ry dWN0IG1kcDVfb3ZlcmxheV9pbmZvICpvdmVybGF5X2luZm8pOworc3RydWN0IG1kcDVfb3Zlcmxh eV9pbmZvICptZHA1X3BsYW5lX2dldF9vdmVybGF5X2luZm8oc3RydWN0IGRybV9wbGFuZSAqcGxh bmUpOwordWludDMyX3QgbWRwNV9wbGFuZV9nZXRfZmx1c2goc3RydWN0IGRybV9wbGFuZSAqcGxh bmUpOwogdm9pZCBtZHA1X3BsYW5lX3NldF9zY2Fub3V0KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l LAogCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYik7CiBpbnQgbWRwNV9wbGFuZV9tb2RlX3Nl dChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKQEAgLTE3MywxNCArMTYyLDE1IEBAIGludCBtZHA1 X3BsYW5lX21vZGVfc2V0KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogdm9pZCBtZHA1X3BsYW5l X2NvbXBsZXRlX2ZsaXAoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpOwogZW51bSBtZHA1X3BpcGUg bWRwNV9wbGFuZV9waXBlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKTsKIHN0cnVjdCBkcm1fcGxh bmUgKm1kcDVfcGxhbmVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQllbnVtIG1kcDVf cGlwZSBwaXBlLCBib29sIHByaXZhdGVfcGxhbmUpOworCQllbnVtIG1kcDVfcGlwZSBwaXBlLCBi b29sIHByaXZhdGVfcGxhbmUsIHVpbnQzMl90IHJlZ19vZmZzZXQpOwogCiB1aW50MzJfdCBtZHA1 X2NydGNfdmJsYW5rKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CiAKK2ludCBtZHA1X2NydGNfZ2V0 X2xtKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CiB2b2lkIG1kcDVfY3J0Y19jYW5jZWxfcGVuZGlu Z19mbGlwKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IGRybV9maWxlICpmaWxlKTsKIHZv aWQgbWRwNV9jcnRjX3NldF9pbnRmKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgaW50IGludGYsCiAJ CWVudW0gbWRwNV9pbnRmIGludGZfaWQpOwotdm9pZCBtZHA1X2NydGNfYXR0YWNoKHN0cnVjdCBk cm1fY3J0YyAqY3J0Yywgc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpOworaW50ICBtZHA1X2NydGNf YXR0YWNoKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpOwog dm9pZCBtZHA1X2NydGNfZGV0YWNoKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IGRybV9w bGFuZSAqcGxhbmUpOwogc3RydWN0IGRybV9jcnRjICptZHA1X2NydGNfaW5pdChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LAogCQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwgaW50IGlkKTsKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcDUvbWRwNV9wbGFuZS5jIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9tZHAvbWRwNS9tZHA1X3BsYW5lLmMKaW5kZXggNjMzY2EwOC4uNTk3MDNm YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tZHAvbWRwNS9tZHA1X3BsYW5lLmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tZHAvbWRwNS9tZHA1X3BsYW5lLmMKQEAgLTEsNCAr MSw1IEBACiAvKgorICogQ29weXJpZ2h0IChjKSAyMDE0IFRoZSBMaW51eCBGb3VuZGF0aW9uLiBB bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEzIFJlZCBIYXQKICAqIEF1 dGhvcjogUm9iIENsYXJrIDxyb2JkY2xhcmtAZ21haWwuY29tPgogICoKQEAgLTE3LDYgKzE4LDcg QEAKIAogI2luY2x1ZGUgIm1kcDVfa21zLmgiCiAKKyNkZWZpbmUgTUFYX1BMQU5FCTQKIAogc3Ry dWN0IG1kcDVfcGxhbmUgewogCXN0cnVjdCBkcm1fcGxhbmUgYmFzZTsKQEAgLTI0LDYgKzI2LDEz IEBAIHN0cnVjdCBtZHA1X3BsYW5lIHsKIAogCWVudW0gbWRwNV9waXBlIHBpcGU7CiAKKwlzcGlu bG9ja190IHBpcGVfbG9jazsJLyogcHJvdGVjdCBSRUdfTURQNV9QSVBFXyogcmVnaXN0ZXJzICov CisJdWludDMyX3QgcmVnX29mZnNldDsKKworCXVpbnQzMl90IGZsdXNoX21hc2s7CS8qIHVzZWQg dG8gY29tbWl0IHBpcGUgcmVnaXN0ZXJzICovCisKKwlzdHJ1Y3QgbWRwNV9vdmVybGF5X2luZm8g b3ZlcmxheV9pbmZvOworCiAJdWludDMyX3QgbmZvcm1hdHM7CiAJdWludDMyX3QgZm9ybWF0c1sz Ml07CiAKQEAgLTk1LDYgKzEwNCwyMiBAQCBzdGF0aWMgdm9pZCBtZHA1X3BsYW5lX2Rlc3Ryb3ko c3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCiAJa2ZyZWUobWRwNV9wbGFuZSk7CiB9CiAKK3ZvaWQg bWRwNV9wbGFuZV9zZXRfb3ZlcmxheV9pbmZvKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQlj b25zdCBzdHJ1Y3QgbWRwNV9vdmVybGF5X2luZm8gKm92ZXJsYXlfaW5mbykKK3sKKwlzdHJ1Y3Qg bWRwNV9wbGFuZSAqbWRwNV9wbGFuZSA9IHRvX21kcDVfcGxhbmUocGxhbmUpOworCisJbWVtY3B5 KCZtZHA1X3BsYW5lLT5vdmVybGF5X2luZm8sIG92ZXJsYXlfaW5mbywgc2l6ZW9mKCpvdmVybGF5 X2luZm8pKTsKK30KKworc3RydWN0IG1kcDVfb3ZlcmxheV9pbmZvICptZHA1X3BsYW5lX2dldF9v dmVybGF5X2luZm8oCisJCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQoreworCXN0cnVjdCBtZHA1 X3BsYW5lICptZHA1X3BsYW5lID0gdG9fbWRwNV9wbGFuZShwbGFuZSk7CisKKwlyZXR1cm4gJm1k cDVfcGxhbmUtPm92ZXJsYXlfaW5mbzsKK30KKwogLyogaGVscGVyIHRvIGluc3RhbGwgcHJvcGVy dGllcyB3aGljaCBhcmUgY29tbW9uIHRvIHBsYW5lcyBhbmQgY3J0Y3MgKi8KIHZvaWQgbWRwNV9w bGFuZV9pbnN0YWxsX3Byb3BlcnRpZXMoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJCXN0cnVj dCBkcm1fbW9kZV9vYmplY3QgKm9iaikKQEAgLTExNiwzNSArMTQxLDU4IEBAIHN0YXRpYyBjb25z dCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIG1kcDVfcGxhbmVfZnVuY3MgPSB7CiAJCS5zZXRfcHJv cGVydHkgPSBtZHA1X3BsYW5lX3NldF9wcm9wZXJ0eSwKIH07CiAKLXZvaWQgbWRwNV9wbGFuZV9z ZXRfc2Nhbm91dChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKLQkJc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIpCitzdGF0aWMgaW50IGdldF9mYl9hZGRyKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l LCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJdWludDMyX3QgaW92YVtNQVhfUExBTkVd KQogewotCXN0cnVjdCBtZHA1X3BsYW5lICptZHA1X3BsYW5lID0gdG9fbWRwNV9wbGFuZShwbGFu ZSk7CiAJc3RydWN0IG1kcDVfa21zICptZHA1X2ttcyA9IGdldF9rbXMocGxhbmUpOwotCWVudW0g bWRwNV9waXBlIHBpcGUgPSBtZHA1X3BsYW5lLT5waXBlOwogCXVpbnQzMl90IG5wbGFuZXMgPSBk cm1fZm9ybWF0X251bV9wbGFuZXMoZmItPnBpeGVsX2Zvcm1hdCk7Ci0JdWludDMyX3QgaW92YVs0 XTsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBucGxhbmVzOyBpKyspIHsKIAkJc3RydWN0 IGRybV9nZW1fb2JqZWN0ICpibyA9IG1zbV9mcmFtZWJ1ZmZlcl9ibyhmYiwgaSk7CiAJCW1zbV9n ZW1fZ2V0X2lvdmEoYm8sIG1kcDVfa21zLT5pZCwgJmlvdmFbaV0pOwogCX0KLQlmb3IgKDsgaSA8 IDQ7IGkrKykKKwlmb3IgKDsgaSA8IE1BWF9QTEFORTsgaSsrKQogCQlpb3ZhW2ldID0gMDsKIAor CXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXRfc2Nhbm91dF9sb2NrZWQoc3RydWN0IGRy bV9wbGFuZSAqcGxhbmUsCisJCXVpbnQzMl90IHBpdGNoZXNbTUFYX1BMQU5FXSwgdWludDMyX3Qg c3JjX2FkZHJbTUFYX1BMQU5FXSkKK3sKKwlzdHJ1Y3QgbWRwNV9wbGFuZSAqbWRwNV9wbGFuZSA9 IHRvX21kcDVfcGxhbmUocGxhbmUpOworCXN0cnVjdCBtZHA1X2ttcyAqbWRwNV9rbXMgPSBnZXRf a21zKHBsYW5lKTsKKwllbnVtIG1kcDVfcGlwZSBwaXBlID0gbWRwNV9wbGFuZS0+cGlwZTsKKwor CVdBUk5fT04oIXNwaW5faXNfbG9ja2VkKCZtZHA1X3BsYW5lLT5waXBlX2xvY2spKTsKKwogCW1k cDVfd3JpdGUobWRwNV9rbXMsIFJFR19NRFA1X1BJUEVfU1JDX1NUUklERV9BKHBpcGUpLAotCQkJ TURQNV9QSVBFX1NSQ19TVFJJREVfQV9QMChmYi0+cGl0Y2hlc1swXSkgfAotCQkJTURQNV9QSVBF X1NSQ19TVFJJREVfQV9QMShmYi0+cGl0Y2hlc1sxXSkpOworCQkJTURQNV9QSVBFX1NSQ19TVFJJ REVfQV9QMChwaXRjaGVzWzBdKSB8CisJCQlNRFA1X1BJUEVfU1JDX1NUUklERV9BX1AxKHBpdGNo ZXNbMV0pKTsKIAogCW1kcDVfd3JpdGUobWRwNV9rbXMsIFJFR19NRFA1X1BJUEVfU1JDX1NUUklE RV9CKHBpcGUpLAotCQkJTURQNV9QSVBFX1NSQ19TVFJJREVfQl9QMihmYi0+cGl0Y2hlc1syXSkg fAotCQkJTURQNV9QSVBFX1NSQ19TVFJJREVfQl9QMyhmYi0+cGl0Y2hlc1szXSkpOworCQkJTURQ NV9QSVBFX1NSQ19TVFJJREVfQl9QMihwaXRjaGVzWzJdKSB8CisJCQlNRFA1X1BJUEVfU1JDX1NU UklERV9CX1AzKHBpdGNoZXNbM10pKTsKKworCW1kcDVfd3JpdGUobWRwNV9rbXMsIFJFR19NRFA1 X1BJUEVfU1JDMF9BRERSKHBpcGUpLCBzcmNfYWRkclswXSk7CisJbWRwNV93cml0ZShtZHA1X2tt cywgUkVHX01EUDVfUElQRV9TUkMxX0FERFIocGlwZSksIHNyY19hZGRyWzFdKTsKKwltZHA1X3dy aXRlKG1kcDVfa21zLCBSRUdfTURQNV9QSVBFX1NSQzJfQUREUihwaXBlKSwgc3JjX2FkZHJbMl0p OworCW1kcDVfd3JpdGUobWRwNV9rbXMsIFJFR19NRFA1X1BJUEVfU1JDM19BRERSKHBpcGUpLCBz cmNfYWRkclszXSk7Cit9CisKK3ZvaWQgbWRwNV9wbGFuZV9zZXRfc2Nhbm91dChzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZSwKKwkJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCit7CisJc3RydWN0 IG1kcDVfcGxhbmUgKm1kcDVfcGxhbmUgPSB0b19tZHA1X3BsYW5lKHBsYW5lKTsKKwl1aW50MzJf dCBzcmNfYWRkcltNQVhfUExBTkVdOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQltZHA1X3dy aXRlKG1kcDVfa21zLCBSRUdfTURQNV9QSVBFX1NSQzBfQUREUihwaXBlKSwgaW92YVswXSk7Ci0J bWRwNV93cml0ZShtZHA1X2ttcywgUkVHX01EUDVfUElQRV9TUkMxX0FERFIocGlwZSksIGlvdmFb MV0pOwotCW1kcDVfd3JpdGUobWRwNV9rbXMsIFJFR19NRFA1X1BJUEVfU1JDMl9BRERSKHBpcGUp LCBpb3ZhWzJdKTsKLQltZHA1X3dyaXRlKG1kcDVfa21zLCBSRUdfTURQNV9QSVBFX1NSQzNfQURE UihwaXBlKSwgaW92YVszXSk7CisJZ2V0X2ZiX2FkZHIocGxhbmUsIGZiLCBzcmNfYWRkcik7CisK KwlzcGluX2xvY2tfaXJxc2F2ZSgmbWRwNV9wbGFuZS0+cGlwZV9sb2NrLCBmbGFncyk7CisJc2V0 X3NjYW5vdXRfbG9ja2VkKHBsYW5lLCBmYi0+cGl0Y2hlcywgc3JjX2FkZHIpOworCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJm1kcDVfcGxhbmUtPnBpcGVfbG9jaywgZmxhZ3MpOwogCiAJcGxhbmUt PmZiID0gZmI7CiB9CkBAIC0xNjMsNiArMjExLDggQEAgaW50IG1kcDVfcGxhbmVfbW9kZV9zZXQo c3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJdWludDMyX3QgbnBsYW5lcywgY29uZmlnID0gMDsK IAl1aW50MzJfdCBwaGFzZXhfc3RlcCA9IDAsIHBoYXNleV9zdGVwID0gMDsKIAl1aW50MzJfdCBo ZGVjbSA9IDAsIHZkZWNtID0gMDsKKwl1aW50MzJfdCBzcmNfYWRkcltNQVhfUExBTkVdOworCXVu c2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldDsKIAogCW5wbGFuZXMgPSBkcm1fZm9ybWF0X251 bV9wbGFuZXMoZmItPnBpeGVsX2Zvcm1hdCk7CkBAIC0yMDUsNiArMjU1LDEyIEBAIGludCBtZHA1 X3BsYW5lX21vZGVfc2V0KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCQkvKiBUT0RPIGNhbGMg cGhhc2V5X3N0ZXAsIHZkZWNtICovCiAJfQogCisJcmV0ID0gZ2V0X2ZiX2FkZHIocGxhbmUsIGZi LCBzcmNfYWRkcik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXNwaW5fbG9ja19pcnFz YXZlKCZtZHA1X3BsYW5lLT5waXBlX2xvY2ssIGZsYWdzKTsKKwogCW1kcDVfd3JpdGUobWRwNV9r bXMsIFJFR19NRFA1X1BJUEVfU1JDX0lNR19TSVpFKHBpcGUpLAogCQkJTURQNV9QSVBFX1NSQ19J TUdfU0laRV9XSURUSChzcmNfdykgfAogCQkJTURQNV9QSVBFX1NSQ19JTUdfU0laRV9IRUlHSFQo c3JjX2gpKTsKQEAgLTIyNSw4ICsyODEsNiBAQCBpbnQgbWRwNV9wbGFuZV9tb2RlX3NldChzdHJ1 Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAkJCU1EUDVfUElQRV9PVVRfWFlfWChjcnRjX3gpIHwKIAkJ CU1EUDVfUElQRV9PVVRfWFlfWShjcnRjX3kpKTsKIAotCW1kcDVfcGxhbmVfc2V0X3NjYW5vdXQo cGxhbmUsIGZiKTsKLQogCWZvcm1hdCA9IHRvX21kcF9mb3JtYXQobXNtX2ZyYW1lYnVmZmVyX2Zv cm1hdChmYikpOwogCiAJbWRwNV93cml0ZShtZHA1X2ttcywgUkVHX01EUDVfUElQRV9TUkNfRk9S TUFUKHBpcGUpLApAQCAtMjY2LDEwICszMjAsMTQgQEAgaW50IG1kcDVfcGxhbmVfbW9kZV9zZXQo c3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJCQlNRFA1X1BJUEVfU0NBTEVfQ09ORklHX1NDQUxF WF9NQVhfRklMVEVSKFNDQUxFX0ZJTFRFUl9ORUFSRVNUKSB8CiAJCQlNRFA1X1BJUEVfU0NBTEVf Q09ORklHX1NDQUxFWV9NQVhfRklMVEVSKFNDQUxFX0ZJTFRFUl9ORUFSRVNUKSk7CiAKKwlzZXRf c2Nhbm91dF9sb2NrZWQocGxhbmUsIGZiLT5waXRjaGVzLCBzcmNfYWRkcik7CisKKwlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZtZHA1X3BsYW5lLT5waXBlX2xvY2ssIGZsYWdzKTsKKwogCS8qIFRP RE8gZGV0YWNoIGZyb20gb2xkIGNydGMgKGlmIHdlIGhhZCBtb3JlIHRoYW4gb25lKSAqLwotCW1k cDVfY3J0Y19hdHRhY2goY3J0YywgcGxhbmUpOworCXJldCA9IG1kcDVfY3J0Y19hdHRhY2goY3J0 YywgcGxhbmUpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogdm9pZCBtZHA1X3Bs YW5lX2NvbXBsZXRlX2ZsaXAoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCkBAIC0yODYsOSArMzQ0 LDE2IEBAIGVudW0gbWRwNV9waXBlIG1kcDVfcGxhbmVfcGlwZShzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZSkKIAlyZXR1cm4gbWRwNV9wbGFuZS0+cGlwZTsKIH0KIAordWludDMyX3QgbWRwNV9wbGFu ZV9nZXRfZmx1c2goc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCit7CisJc3RydWN0IG1kcDVfcGxh bmUgKm1kcDVfcGxhbmUgPSB0b19tZHA1X3BsYW5lKHBsYW5lKTsKKworCXJldHVybiBtZHA1X3Bs YW5lLT5mbHVzaF9tYXNrOworfQorCiAvKiBpbml0aWFsaXplIHBsYW5lICovCiBzdHJ1Y3QgZHJt X3BsYW5lICptZHA1X3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJZW51bSBt ZHA1X3BpcGUgcGlwZSwgYm9vbCBwcml2YXRlX3BsYW5lKQorCQllbnVtIG1kcDVfcGlwZSBwaXBl LCBib29sIHByaXZhdGVfcGxhbmUsIHVpbnQzMl90IHJlZ19vZmZzZXQpCiB7CiAJc3RydWN0IGRy bV9wbGFuZSAqcGxhbmUgPSBOVUxMOwogCXN0cnVjdCBtZHA1X3BsYW5lICptZHA1X3BsYW5lOwpA QCAtMzA5LDYgKzM3NCwxMCBAQCBzdHJ1Y3QgZHJtX3BsYW5lICptZHA1X3BsYW5lX2luaXQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKIAltZHA1X3BsYW5lLT5uZm9ybWF0cyA9IG1kcDVfZ2V0X2Zv cm1hdHMocGlwZSwgbWRwNV9wbGFuZS0+Zm9ybWF0cywKIAkJCUFSUkFZX1NJWkUobWRwNV9wbGFu ZS0+Zm9ybWF0cykpOwogCisJbWRwNV9wbGFuZS0+Zmx1c2hfbWFzayA9IG1kcF9jdGxfZmx1c2hf bWFza19waXBlKHBpcGUpOworCW1kcDVfcGxhbmUtPnJlZ19vZmZzZXQgPSByZWdfb2Zmc2V0Owor CXNwaW5fbG9ja19pbml0KCZtZHA1X3BsYW5lLT5waXBlX2xvY2spOworCiAJdHlwZSA9IHByaXZh dGVfcGxhbmUgPyBEUk1fUExBTkVfVFlQRV9QUklNQVJZIDogRFJNX1BMQU5FX1RZUEVfT1ZFUkxB WTsKIAlkcm1fdW5pdmVyc2FsX3BsYW5lX2luaXQoZGV2LCBwbGFuZSwgMHhmZiwgJm1kcDVfcGxh bmVfZnVuY3MsCiAJCQkJIG1kcDVfcGxhbmUtPmZvcm1hdHMsIG1kcDVfcGxhbmUtPm5mb3JtYXRz LAotLSAKUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4KClRoZSBRdWFsY29tbSBJbm5v dmF0aW9uIENlbnRlciwgSW5jLiBpcyBhIG1lbWJlciBvZiB0aGUgQ29kZSBBdXJvcmEgRm9ydW0s IGEgTGludXggRm91bmRhdGlvbiBDb2xsYWJvcmF0aXZlIFByb2plY3QKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QK ZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==