From mboxrd@z Thu Jan 1 00:00:00 1970 From: Benoit Parrot Subject: [RFC 3/3] drm/omap: Add wide display support using multiple overlays Date: Fri, 29 Jun 2018 12:02:49 -0500 Message-ID: <20180629170249.21921-4-bparrot@ti.com> References: <20180629170249.21921-1-bparrot@ti.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from lelv0142.ext.ti.com (lelv0142.ext.ti.com [198.47.23.249]) by gabe.freedesktop.org (Postfix) with ESMTPS id EA0746F10C for ; Fri, 29 Jun 2018 17:23:43 +0000 (UTC) In-Reply-To: <20180629170249.21921-1-bparrot@ti.com> 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, Laurent Pinchart , Rob Clark , Daniel Vetter Cc: Peter Ujfalusi , Tomi Valkeinen , Jyri Sarha List-Id: dri-devel@lists.freedesktop.org SW4gdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCB0byBzdXBwb3J0IHdpZGUtZGlzcGxheSB1c2luZyBt b3JlIHRoYW4gb25lCm92ZXJsYXkgdG8gYWNoaWV2ZSB0aGUgbmVlZGVkIGRpc3BsYXkgcmVzb2x1 dGlvbiwgd2UgbmVlZCB0byBiZSBhYmxlIHRvCmR5bmFtaWNhbGx5IGFzc2lnbiBvdmVybGF5cyB0 byBwbGFuZXMgaW5zdGVhZCBvZiBoYXZpbmcgdGhlIG92ZXJsYXlzCmJlaW5nIHN0YXRpY2FsbHkg bWFwcGVkIHRvIHBsYW5lcy4KClRoaXMgYWxzbyBtZWFucyB0aGF0IG9uIG9jY2FzaW9uIHdoZXJl IHRoZSBudW1iZXIgb2YgcmVxdWVzdGVkIHBsYW5lcwpleGNlZWRzIHRoZSBudW1iZXJzIG9mIG92 ZXJsYXlzIHJlcXVpcmVkIHRvIGRpc3BsYXkgdGhlbSB0aGVuIGEgZmFpbHVyZQp3b3VsZCBiZSBy ZXR1cm5lZCBmb3IgdGhlIHBsYW5lIHRoYXQgY2Fubm90IGJlIGhhbmRsZWQgYXQgdGhhdCB0aW1l LiBJdAppcyB1cCB0byB1c2VyIHNwYWNlIHRvIG1ha2Ugc3VyZSB0aGUgSC9XIHJlc291cmNlIGFy ZSBub3QKb3Zlci1zdWJzY3JpYmVkLgoKU2lnbmVkLW9mZi1ieTogQmVub2l0IFBhcnJvdCA8YnBh cnJvdEB0aS5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vTWFrZWZpbGUgICAgICAg fCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9kcnYuYyAgICAgfCAxMTkgKysr KysrKysrKy0KIGRyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfZHJ2LmggICAgIHwgIDE1ICst CiBkcml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX2ZiLmMgICAgICB8ICAzMyArKy0KIGRyaXZl cnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfZmIuaCAgICAgIHwgICA0ICstCiBkcml2ZXJzL2dwdS9k cm0vb21hcGRybS9vbWFwX292ZXJsYXkuYyB8IDM2NiArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfb3ZlcmxheS5oIHwgIDgwICsr KysrKysKIGRyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfcGxhbmUuYyAgIHwgMzIyICsrKysr KysrKysrKysrKysrKysrKysrKy0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX3Bs YW5lLmggICB8ICAyMCArKwogOSBmaWxlcyBjaGFuZ2VkLCA4OTIgaW5zZXJ0aW9ucygrKSwgNjgg ZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL29tYXBkcm0v b21hcF9vdmVybGF5LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vb21hcGRy bS9vbWFwX292ZXJsYXkuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL01h a2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vTWFrZWZpbGUKaW5kZXggZjExNTI1MzEx NWM1Li44MDBkZmQwMzUzNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL01h a2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL01ha2VmaWxlCkBAIC0xMiw2ICsx Miw3IEBAIG9tYXBkcm0teSA6PSBvbWFwX2Rydi5vIFwKIAlvbWFwX2RlYnVnZnMubyBcCiAJb21h cF9jcnRjLm8gXAogCW9tYXBfcGxhbmUubyBcCisJb21hcF9vdmVybGF5Lm8gXAogCW9tYXBfZW5j b2Rlci5vIFwKIAlvbWFwX2Nvbm5lY3Rvci5vIFwKIAlvbWFwX2ZiLm8gXApkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9vbWFw ZHJtL29tYXBfZHJ2LmMKaW5kZXggZWYzYjBlMzU3MWVjLi5mMGE1YzNkYWI0NzEgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL29tYXBkcm0vb21hcF9kcnYuYwpAQCAtMTYsMTEgKzE2LDcgQEAKICAqLwogCiAjaW5jbHVk ZSA8bGludXgvc3lzX3NvYy5oPgotCi0jaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KLSNpbmNs dWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KLSNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVs cGVyLmg+Ci0jaW5jbHVkZSA8ZHJtL2RybV9mYl9oZWxwZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9z b3J0Lmg+CiAKICNpbmNsdWRlICJvbWFwX2RtbV90aWxlci5oIgogI2luY2x1ZGUgIm9tYXBfZHJ2 LmgiCkBAIC0xMTMsOSArMTA5LDEwMCBAQCBzdGF0aWMgdm9pZCBvbWFwX2F0b21pY19jb21taXRf dGFpbChzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqb2xkX3N0YXRlKQogCiAJZHJtX2F0b21pY19o ZWxwZXJfY2xlYW51cF9wbGFuZXMoZGV2LCBvbGRfc3RhdGUpOwogCisJb21hcF9vdmVybGF5X2Rp c2FibGVfdW5hc3NpZ25lZChvbGRfc3RhdGUpOworCiAJcHJpdi0+ZGlzcGNfb3BzLT5ydW50aW1l X3B1dChwcml2LT5kaXNwYyk7CiB9CiAKK3N0YXRpYyBpbnQgZHJtX2F0b21pY19zdGF0ZV9ub3Jt YWxpemVkX3pwb3NfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJY29uc3Qg c3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc2EgPSAqKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKiop YTsKKwljb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzYiA9ICooc3RydWN0IGRybV9wbGFu ZV9zdGF0ZSAqKiliOworCisJaWYgKHNhLT5ub3JtYWxpemVkX3pwb3MgIT0gc2ItPm5vcm1hbGl6 ZWRfenBvcykKKwkJcmV0dXJuIHNhLT5ub3JtYWxpemVkX3pwb3MgLSBzYi0+bm9ybWFsaXplZF96 cG9zOworCWVsc2UKKwkJcmV0dXJuIHNhLT5wbGFuZS0+YmFzZS5pZCAtIHNiLT5wbGFuZS0+YmFz ZS5pZDsKK30KKworc3RhdGljIGludCBvbWFwX2F0b21pY191cGRhdGVfbm9ybWFsaXplX3pwb3Mo c3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0 ZSAqc3RhdGUpCit7CisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCXN0cnVjdCBkcm1fY3J0Y19z dGF0ZSAqb2xkX3N0YXRlLCAqbmV3X3N0YXRlOworCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOwor CWludCBpLCBuLCBpbmM7CisJaW50IHRvdGFsX3BsYW5lcyA9IGRldi0+bW9kZV9jb25maWcubnVt X3RvdGFsX3BsYW5lOworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKipzdGF0ZXM7CisJaW50IHJl dCA9IDA7CisKKwlzdGF0ZXMgPSBrbWFsbG9jX2FycmF5KHRvdGFsX3BsYW5lcywgc2l6ZW9mKCpz dGF0ZXMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0YXRlcykKKwkJcmV0dXJuIC1FTk9NRU07CisK Kwlmb3JfZWFjaF9vbGRuZXdfY3J0Y19pbl9zdGF0ZShzdGF0ZSwgY3J0Yywgb2xkX3N0YXRlLCBu ZXdfc3RhdGUsIGkpIHsKKwkJaWYgKG9sZF9zdGF0ZS0+cGxhbmVfbWFzayA9PSBuZXdfc3RhdGUt PnBsYW5lX21hc2sgJiYKKwkJICAgICFuZXdfc3RhdGUtPnpwb3NfY2hhbmdlZCkKKwkJCWNvbnRp bnVlOworCisJCS8qIFJlc2V0IHBsYW5lIGluY3JlbWVudCBhbmQgaW5kZXggdmFsdWUgZm9yIGV2 ZXJ5IGNydGMgKi8KKwkJbiA9IDA7CisKKwkJLyoKKwkJICogTm9ybWFsaXphdGlvbiBwcm9jZXNz IG1pZ2h0IGNyZWF0ZSBuZXcgc3RhdGVzIGZvciBwbGFuZXMKKwkJICogd2hpY2ggbm9ybWFsaXpl ZF96cG9zIGhhcyB0byBiZSByZWNhbGN1bGF0ZWQuCisJCSAqLworCQlkcm1fZm9yX2VhY2hfcGxh bmVfbWFzayhwbGFuZSwgZGV2LCBuZXdfc3RhdGUtPnBsYW5lX21hc2spIHsKKwkJCXN0cnVjdCBk cm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlID0KKwkJCQlkcm1fYXRvbWljX2dldF9wbGFuZV9z dGF0ZShuZXdfc3RhdGUtPnN0YXRlLAorCQkJCQkJCSAgIHBsYW5lKTsKKwkJCWlmIChJU19FUlIo cGxhbmVfc3RhdGUpKSB7CisJCQkJcmV0ID0gUFRSX0VSUihwbGFuZV9zdGF0ZSk7CisJCQkJZ290 byBkb25lOworCQkJfQorCQkJc3RhdGVzW24rK10gPSBwbGFuZV9zdGF0ZTsKKwkJfQorCisJCXNv cnQoc3RhdGVzLCBuLCBzaXplb2YoKnN0YXRlcyksCisJCSAgICAgZHJtX2F0b21pY19zdGF0ZV9u b3JtYWxpemVkX3pwb3NfY21wLCBOVUxMKTsKKworCQlmb3IgKGkgPSAwLCBpbmMgPSAwOyBpIDwg bjsgaSsrKSB7CisJCQlwbGFuZSA9IHN0YXRlc1tpXS0+cGxhbmU7CisKKwkJCXN0YXRlc1tpXS0+ bm9ybWFsaXplZF96cG9zID0gaSArIGluYzsKKwkJCURSTV9ERUJVR19BVE9NSUMoIltQTEFORTol ZDolc10gdXBkYXRlZCBub3JtYWxpemVkIHpwb3MgdmFsdWUgJWRcbiIsCisJCQkJCSBwbGFuZS0+ YmFzZS5pZCwgcGxhbmUtPm5hbWUsCisJCQkJCSBzdGF0ZXNbaV0tPm5vcm1hbGl6ZWRfenBvcyk7 CisKKwkJCWlmIChpc19vbWFwX3BsYW5lX2R1YWxfb3ZlcmxheShzdGF0ZXNbaV0pKQorCQkJCWlu YysrOworCQl9CisJCW5ld19zdGF0ZS0+enBvc19jaGFuZ2VkID0gdHJ1ZTsKKwl9CisKK2RvbmU6 CisJa2ZyZWUoc3RhdGVzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9tYXBfYXRv bWljX2NoZWNrKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBkcm1fYXRv bWljX3N0YXRlICpzdGF0ZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2F0b21pY19oZWxw ZXJfY2hlY2soZGV2LCBzdGF0ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChk ZXYtPm1vZGVfY29uZmlnLm5vcm1hbGl6ZV96cG9zKSB7CisJCXJldCA9IG9tYXBfYXRvbWljX3Vw ZGF0ZV9ub3JtYWxpemVfenBvcyhkZXYsIHN0YXRlKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiBy ZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX21vZGVf Y29uZmlnX2hlbHBlcl9mdW5jcyBvbWFwX21vZGVfY29uZmlnX2hlbHBlcl9mdW5jcyA9IHsKIAku YXRvbWljX2NvbW1pdF90YWlsID0gb21hcF9hdG9taWNfY29tbWl0X3RhaWwsCiB9OwpAQCAtMTIz LDcgKzIxMCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX21vZGVfY29uZmlnX2hlbHBlcl9m dW5jcyBvbWFwX21vZGVfY29uZmlnX2hlbHBlcl9mdW5jcyA9CiBzdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9tb2RlX2NvbmZpZ19mdW5jcyBvbWFwX21vZGVfY29uZmlnX2Z1bmNzID0gewogCS5mYl9j cmVhdGUgPSBvbWFwX2ZyYW1lYnVmZmVyX2NyZWF0ZSwKIAkub3V0cHV0X3BvbGxfY2hhbmdlZCA9 IGRybV9mYl9oZWxwZXJfb3V0cHV0X3BvbGxfY2hhbmdlZCwKLQkuYXRvbWljX2NoZWNrID0gZHJt X2F0b21pY19oZWxwZXJfY2hlY2ssCisJLmF0b21pY19jaGVjayA9IG9tYXBfYXRvbWljX2NoZWNr LAogCS5hdG9taWNfY29tbWl0ID0gZHJtX2F0b21pY19oZWxwZXJfY29tbWl0LAogfTsKIApAQCAt Mjk2LDcgKzM4Myw3IEBAIHN0YXRpYyBpbnQgb21hcF9tb2Rlc2V0X2luaXQoc3RydWN0IGRybV9k ZXZpY2UgKmRldikKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCXBsYW5lID0gb21hcF9wbGFuZV9p bml0KGRldiwgcGxhbmVfaWR4LCBEUk1fUExBTkVfVFlQRV9PVkVSTEFZLAotCQkJcGxhbmVfY3J0 Y19tYXNrKTsKKwkJCQkJcGxhbmVfY3J0Y19tYXNrKTsKIAkJaWYgKElTX0VSUihwbGFuZSkpCiAJ CQlyZXR1cm4gUFRSX0VSUihwbGFuZSk7CiAKQEAgLTU2MCwxMCArNjQ3LDE4IEBAIHN0YXRpYyBp bnQgb21hcGRybV9pbml0KHN0cnVjdCBvbWFwX2RybV9wcml2YXRlICpwcml2LCBzdHJ1Y3QgZGV2 aWNlICpkZXYpCiAKIAlvbWFwX2dlbV9pbml0KGRkZXYpOwogCisJcmV0ID0gb21hcF9nbG9iYWxf b2JqX2luaXQocHJpdik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZnJlZV9kcm1fZGV2OworCisJ cmV0ID0gb21hcF9od292ZXJsYXlzX2luaXQocHJpdik7CisJaWYgKHJldCkKKwkJZ290byBlcnJf ZnJlZV9wcml2X29iajsKKwogCXJldCA9IG9tYXBfbW9kZXNldF9pbml0KGRkZXYpOwogCWlmIChy ZXQpIHsKIAkJZGV2X2Vycihwcml2LT5kZXYsICJvbWFwX21vZGVzZXRfaW5pdCBmYWlsZWQ6IHJl dD0lZFxuIiwgcmV0KTsKLQkJZ290byBlcnJfZnJlZV9kcm1fZGV2OworCQlnb3RvIGVycl9mcmVl X292ZXJsYXlzOwogCX0KIAogCS8qIEluaXRpYWxpemUgdmJsYW5rIGhhbmRsaW5nLCBzdGFydCB3 aXRoIGFsbCBDUlRDcyBkaXNhYmxlZC4gKi8KQEAgLTU3Nyw3ICs2NzIsNiBAQCBzdGF0aWMgaW50 IG9tYXBkcm1faW5pdChzdHJ1Y3Qgb21hcF9kcm1fcHJpdmF0ZSAqcHJpdiwgc3RydWN0IGRldmlj ZSAqZGV2KQogCQlkcm1fY3J0Y192Ymxhbmtfb2ZmKHByaXYtPmNydGNzW2ldKTsKIAogCW9tYXBf ZmJkZXZfaW5pdChkZGV2KTsKLQogCWRybV9rbXNfaGVscGVyX3BvbGxfaW5pdChkZGV2KTsKIAlv bWFwX21vZGVzZXRfZW5hYmxlX2V4dGVybmFsX2hwZCgpOwogCkBAIC01OTksNiArNjkzLDEwIEBA IHN0YXRpYyBpbnQgb21hcGRybV9pbml0KHN0cnVjdCBvbWFwX2RybV9wcml2YXRlICpwcml2LCBz dHJ1Y3QgZGV2aWNlICpkZXYpCiBlcnJfY2xlYW51cF9tb2Rlc2V0OgogCWRybV9tb2RlX2NvbmZp Z19jbGVhbnVwKGRkZXYpOwogCW9tYXBfZHJtX2lycV91bmluc3RhbGwoZGRldik7CitlcnJfZnJl ZV9vdmVybGF5czoKKwlvbWFwX2h3b3ZlcmxheXNfZGVzdHJveShwcml2KTsKK2Vycl9mcmVlX3By aXZfb2JqOgorCW9tYXBfZ2xvYmFsX29ial9maW5pKHByaXYpOwogZXJyX2ZyZWVfZHJtX2RldjoK IAlvbWFwX2dlbV9kZWluaXQoZGRldik7CiAJZHJtX2Rldl91bnJlZihkZGV2KTsKQEAgLTYzMiw2 ICs3MzAsOSBAQCBzdGF0aWMgdm9pZCBvbWFwZHJtX2NsZWFudXAoc3RydWN0IG9tYXBfZHJtX3By aXZhdGUgKnByaXYpCiAKIAlkcm1fZGV2X3VucmVmKGRkZXYpOwogCisJb21hcF9od292ZXJsYXlz X2Rlc3Ryb3kocHJpdik7CisJb21hcF9nbG9iYWxfb2JqX2ZpbmkocHJpdik7CisKIAlkZXN0cm95 X3dvcmtxdWV1ZShwcml2LT53cSk7CiAKIAlvbWFwX2Rpc2Nvbm5lY3RfZHNzZGV2cygpOwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9kcnYuaCBiL2RyaXZlcnMvZ3B1 L2RybS9vbWFwZHJtL29tYXBfZHJ2LmgKaW5kZXggNmVhZWU0ZGY0NTU5Li5lYjcxZWE4ZGVjZWUg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfZHJ2LmgKKysrIGIvZHJp dmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9kcnYuaApAQCAtMjMsNyArMjMsMTAgQEAKICNpbmNs dWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVk ZSA8ZHJtL2RybV9hdG9taWMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4K ICNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9mYl9o ZWxwZXIuaD4KICNpbmNsdWRlIDxkcm0vZHJtX2dlbS5oPgogI2luY2x1ZGUgPGRybS9vbWFwX2Ry bS5oPgogCkBAIC0zNyw2ICs0MCw3IEBACiAjaW5jbHVkZSAib21hcF9nZW0uaCIKICNpbmNsdWRl ICJvbWFwX2lycS5oIgogI2luY2x1ZGUgIm9tYXBfcGxhbmUuaCIKKyNpbmNsdWRlICJvbWFwX292 ZXJsYXkuaCIKIAogI2RlZmluZSBEQkcoZm10LCAuLi4pIERSTV9ERUJVRyhmbXQiXG4iLCAjI19f VkFfQVJHU19fKQogI2RlZmluZSBWRVJCKGZtdCwgLi4uKSBpZiAoMCkgRFJNX0RFQlVHKGZtdCwg IyNfX1ZBX0FSR1NfXykgLyogdmVyYm9zZSBkZWJ1ZyAqLwpAQCAtNjYsNiArNzAsMTYgQEAgc3Ry dWN0IG9tYXBfZHJtX3ByaXZhdGUgewogCXVuc2lnbmVkIGludCBudW1fY29ubmVjdG9yczsKIAlz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yc1s4XTsKIAorCXVuc2lnbmVkIGludCBudW1f b3ZsczsKKwlzdHJ1Y3Qgb21hcF9od19vdmVybGF5ICpvdmVybGF5c1s4XTsKKworICAgICAgICAv KgorICAgICAgICAgKiBHbG9iYWwgcHJpdmF0ZSBvYmplY3Qgc3RhdGUsIERvIG5vdCBhY2Nlc3Mg ZGlyZWN0bHksIHVzZQorICAgICAgICAgKiBvbWFwX2dsb2JhbF9nZXRfc3RhdGUoKQorICAgICAg ICAgKi8KKyAgICAgICAgc3RydWN0IGRybV9tb2Rlc2V0X2xvY2sgZ2xvYl9zdGF0ZV9sb2NrOwor ICAgICAgICBzdHJ1Y3QgZHJtX3ByaXZhdGVfb2JqIGdsb2Jfc3RhdGU7CisKIAlzdHJ1Y3QgZHJt X2ZiX2hlbHBlciAqZmJkZXY7CiAKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3E7CkBAIC05 MSw3ICsxMDUsNiBAQCBzdHJ1Y3Qgb21hcF9kcm1fcHJpdmF0ZSB7CiAJdW5zaWduZWQgaW50IG1h eF9iYW5kd2lkdGg7CiB9OwogCi0KIGludCBvbWFwX2RlYnVnZnNfaW5pdChzdHJ1Y3QgZHJtX21p bm9yICptaW5vcik7CiAKICNlbmRpZiAvKiBfX09NQVBEUk1fRFJWX0hfXyAqLwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL29t YXBkcm0vb21hcF9mYi5jCmluZGV4IDVmZDIyY2E3MzkxMy4uYjk1NzNjMTYzMTE3IDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX2ZiLmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL29tYXBkcm0vb21hcF9mYi5jCkBAIC0xNTMsNyArMTUzLDkgQEAgc3RhdGljIHUzMiBkcm1f cm90YXRpb25fdG9fdGlsZXIodW5zaWduZWQgaW50IGRybV9yb3QpCiAvKiB1cGRhdGUgb3ZsIGlu Zm8gZm9yIHNjYW5vdXQsIGhhbmRsZXMgY2FzZXMgb2YgbXVsdGktcGxhbmFyIGZiJ3MsIGV0Yy4K ICAqLwogdm9pZCBvbWFwX2ZyYW1lYnVmZmVyX3VwZGF0ZV9zY2Fub3V0KHN0cnVjdCBkcm1fZnJh bWVidWZmZXIgKmZiLAotCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSwgc3RydWN0IG9t YXBfb3ZlcmxheV9pbmZvICppbmZvKQorCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSwK KwkJc3RydWN0IG9tYXBfb3ZlcmxheV9pbmZvICppbmZvLAorCQlzdHJ1Y3Qgb21hcF9vdmVybGF5 X2luZm8gKnJfaW5mbykKIHsKIAlzdHJ1Y3Qgb21hcF9mcmFtZWJ1ZmZlciAqb21hcF9mYiA9IHRv X29tYXBfZnJhbWVidWZmZXIoZmIpOwogCWNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0X2luZm8gKmZv cm1hdCA9IG9tYXBfZmItPmZvcm1hdDsKQEAgLTIwNiw3ICsyMDgsOCBAQCB2b2lkIG9tYXBfZnJh bWVidWZmZXJfdXBkYXRlX3NjYW5vdXQoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCiAJCWlu Zm8tPnJvdGF0aW9uX3R5cGUgPSBPTUFQX0RTU19ST1RfVElMRVI7CiAJCWluZm8tPnJvdGF0aW9u ID0gc3RhdGUtPnJvdGF0aW9uID86IERSTV9NT0RFX1JPVEFURV8wOwogCQkvKiBOb3RlOiBzdHJp ZGUgaW4gVElMRVIgdW5pdHMsIG5vdCBwaXhlbHMgKi8KLQkJaW5mby0+c2NyZWVuX3dpZHRoICA9 IG9tYXBfZ2VtX3RpbGVkX3N0cmlkZShwbGFuZS0+Ym8sIG9yaWVudCk7CisJCWluZm8tPnNjcmVl bl93aWR0aCAgPQorCQkJCW9tYXBfZ2VtX3RpbGVkX3N0cmlkZShwbGFuZS0+Ym8sIG9yaWVudCk7 CiAJfSBlbHNlIHsKIAkJc3dpdGNoIChzdGF0ZS0+cm90YXRpb24gJiBEUk1fTU9ERV9ST1RBVEVf TUFTSykgewogCQljYXNlIDA6CkBAIC0yMjEsMTAgKzIyNCwxMCBAQCB2b2lkIG9tYXBfZnJhbWVi dWZmZXJfdXBkYXRlX3NjYW5vdXQoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCiAJCQlicmVh azsKIAkJfQogCi0JCWluZm8tPnBhZGRyICAgICAgICAgPSBnZXRfbGluZWFyX2FkZHIocGxhbmUs IGZvcm1hdCwgMCwgeCwgeSk7CisJCWluZm8tPnBhZGRyID0gZ2V0X2xpbmVhcl9hZGRyKHBsYW5l LCBmb3JtYXQsIDAsIHgsIHkpOwogCQlpbmZvLT5yb3RhdGlvbl90eXBlID0gT01BUF9EU1NfUk9U X05PTkU7Ci0JCWluZm8tPnJvdGF0aW9uICAgICAgPSBEUk1fTU9ERV9ST1RBVEVfMDsKLQkJaW5m by0+c2NyZWVuX3dpZHRoICA9IHBsYW5lLT5waXRjaDsKKwkJaW5mby0+cm90YXRpb24gPSBEUk1f TU9ERV9ST1RBVEVfMDsKKwkJaW5mby0+c2NyZWVuX3dpZHRoID0gcGxhbmUtPnBpdGNoOwogCX0K IAogCS8qIGNvbnZlcnQgdG8gcGl4ZWxzOiAqLwpAQCAtMjM4LDExICsyNDEsMjkgQEAgdm9pZCBv bWFwX2ZyYW1lYnVmZmVyX3VwZGF0ZV9zY2Fub3V0KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi LAogCQkJb21hcF9nZW1fcm90YXRlZF9kbWFfYWRkcihwbGFuZS0+Ym8sIG9yaWVudCwgeC8yLCB5 LzIsCiAJCQkJCQkgICZpbmZvLT5wX3V2X2FkZHIpOwogCQl9IGVsc2UgewotCQkJaW5mby0+cF91 dl9hZGRyID0gZ2V0X2xpbmVhcl9hZGRyKHBsYW5lLCBmb3JtYXQsIDEsIHgsIHkpOworCQkJaW5m by0+cF91dl9hZGRyID0KKwkJCQlnZXRfbGluZWFyX2FkZHIocGxhbmUsIGZvcm1hdCwgMSwgeCwg eSk7CiAJCX0KIAl9IGVsc2UgewogCQlpbmZvLT5wX3V2X2FkZHIgPSAwOwogCX0KKworCWlmIChy X2luZm8pIHsKKwkJaW5mby0+d2lkdGggLz0gMjsKKwkJaW5mby0+b3V0X3dpZHRoIC89IDI7CisK KwkJKnJfaW5mbyA9ICppbmZvOworCisJCXJfaW5mby0+cG9zX3ggPSBpbmZvLT5wb3NfeCArIGlu Zm8tPm91dF93aWR0aDsKKworCQlyX2luZm8tPnBhZGRyID0JZ2V0X2xpbmVhcl9hZGRyKCZvbWFw X2ZiLT5wbGFuZXNbMF0sIGZvcm1hdCwgMCwKKwkJCQkJCXggKyBpbmZvLT53aWR0aCwgeSk7CisJ CWlmIChmYi0+Zm9ybWF0LT5mb3JtYXQgPT0gRFJNX0ZPUk1BVF9OVjEyKSB7CisJCQlyX2luZm8t PnBfdXZfYWRkciA9CisJCQkJZ2V0X2xpbmVhcl9hZGRyKCZvbWFwX2ZiLT5wbGFuZXNbMV0sIGZv cm1hdCwgMSwKKwkJCQkJCXggKyBpbmZvLT53aWR0aCwgeSk7CisJCX0KKwl9CiB9CiAKIC8qIHBp biwgcHJlcGFyZSBmb3Igc2Nhbm91dDogKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9v bWFwZHJtL29tYXBfZmIuaCBiL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfZmIuaAppbmRl eCA5NGFkNWY5ZTQ0MDQuLjhjMTE2YzFhYWMwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L29tYXBkcm0vb21hcF9mYi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfZmIu aApAQCAtMzcsNyArMzcsOSBAQCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpvbWFwX2ZyYW1lYnVm ZmVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIGludCBvbWFwX2ZyYW1lYnVmZmVyX3Bp bihzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYik7CiB2b2lkIG9tYXBfZnJhbWVidWZmZXJfdW5w aW4oc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpOwogdm9pZCBvbWFwX2ZyYW1lYnVmZmVyX3Vw ZGF0ZV9zY2Fub3V0KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAotCQlzdHJ1Y3QgZHJtX3Bs YW5lX3N0YXRlICpzdGF0ZSwgc3RydWN0IG9tYXBfb3ZlcmxheV9pbmZvICppbmZvKTsKKwkJc3Ry dWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUsCisJCXN0cnVjdCBvbWFwX292ZXJsYXlfaW5mbyAq aW5mbywKKwkJc3RydWN0IG9tYXBfb3ZlcmxheV9pbmZvICpyX2luZm8pOwogc3RydWN0IGRybV9j b25uZWN0b3IgKm9tYXBfZnJhbWVidWZmZXJfZ2V0X25leHRfY29ubmVjdG9yKAogCQlzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYiwgc3RydWN0IGRybV9jb25uZWN0b3IgKmZyb20pOwogYm9vbCBv bWFwX2ZyYW1lYnVmZmVyX3N1cHBvcnRzX3JvdGF0aW9uKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIg KmZiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfb3ZlcmxheS5j IGIvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9vdmVybGF5LmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4wYTEzMjdjMzFiNjkKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX292ZXJsYXkuYwpAQCAtMCwwICsxLDM2NiBA QAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5cmlnaHQg KEMpIDIwMTggVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gIGh0dHA6Ly93d3cudGku Y29tLworICogQXV0aG9yOiBCZW5vaXQgUGFycm90LCA8YnBhcnJvdEB0aS5jb20+CisgKi8KKwor I2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVs cGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wbGFuZV9oZWxwZXIuaD4KKworI2luY2x1ZGUgIm9t YXBfZG1tX3RpbGVyLmgiCisjaW5jbHVkZSAib21hcF9kcnYuaCIKKworLyoKKyAqIG92ZXJsYXkg ZnVuY3MKKyAqLworc3RhdGljIHZvaWQgX19tYXliZV91bnVzZWQKK29tYXBfb3ZlcmxheV9hdG9t aWNfcHJpbnRfc3RhdGUoc3RydWN0IGRybV9wcmludGVyICpwLAorCQkJCWNvbnN0IHN0cnVjdCBv bWFwX2dsb2JhbF9zdGF0ZSAqc3RhdGUsCisJCQkJc3RydWN0IG9tYXBfZHJtX3ByaXZhdGUgKnBy aXYpCit7CisJaW50IGk7CisKKwlkcm1fcHJpbnRmKHAsICJcdG9tYXBfZ2xvYmFsX3N0YXRlPSVw XG4iLCBzdGF0ZSk7CisJaWYgKHN0YXRlKSB7CisJCWZvciAoaSA9IDA7IGkgPCBwcml2LT5udW1f b3ZsczsgaSsrKSB7CisJCQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9CisJCQkJc3RhdGUtPm92 ZXJsYXkuaHdvdmVybGF5X3RvX3BsYW5lW2ldOworCisJCQlkcm1fcHJpbnRmKHAsICJcdFx0WyVk XSBwbGFuZT0lcFxuIiwgaSwgcGxhbmUpOworCQkJaWYgKHBsYW5lKQorCQkJCWRybV9wcmludGYo cCwgIlx0XHRcdCBwbGFuZT0lc1xuIiwgcGxhbmUtPm5hbWUpOworCQl9CisJfQorfQorCisvKiBH bG9iYWwvc2hhcmVkIG9iamVjdCBzdGF0ZSBmdW5jcyAqLworCisvKgorICogVGhpcyBpcyBhIGhl bHBlciB0aGF0IHJldHVybnMgdGhlIHByaXZhdGUgc3RhdGUgY3VycmVudGx5IGluIG9wZXJhdGlv bi4KKyAqIE5vdGUgdGhhdCB0aGlzIHdvdWxkIHJldHVybiB0aGUgIm9sZF9zdGF0ZSIgaWYgY2Fs bGVkIGluIHRoZSBhdG9taWMgY2hlY2sKKyAqIHBhdGgsIGFuZCB0aGUgIm5ld19zdGF0ZSIgYWZ0 ZXIgdGhlIGF0b21pYyBzd2FwIGhhcyBiZWVuIGRvbmUuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21h cF9nbG9iYWxfc3RhdGUgKgorb21hcF9nZXRfZXhpc3RpbmdfZ2xvYmFsX3N0YXRlKHN0cnVjdCBv bWFwX2RybV9wcml2YXRlICpwcml2KQoreworCXJldHVybiB0b19vbWFwX2dsb2JhbF9zdGF0ZShw cml2LT5nbG9iX3N0YXRlLnN0YXRlKTsKK30KKworLyoKKyAqIFRoaXMgYWNxdWlyZXMgdGhlIG1v ZGVzZXQgbG9jayBzZXQgYXNpZGUgZm9yIGdsb2JhbCBzdGF0ZSwgY3JlYXRlcworICogYSBuZXcg ZHVwbGljYXRlZCBwcml2YXRlIG9iamVjdCBzdGF0ZS4KKyAqLworc3RhdGljIHN0cnVjdCBvbWFw X2dsb2JhbF9zdGF0ZSAqX19tdXN0X2NoZWNrCitvbWFwX2dldF9nbG9iYWxfc3RhdGUoc3RydWN0 IGRybV9hdG9taWNfc3RhdGUgKnMpCit7CisJc3RydWN0IG9tYXBfZHJtX3ByaXZhdGUgKnByaXYg PSBzLT5kZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZSAqcHJpdl9z dGF0ZTsKKwlpbnQgcmV0OworCisJd2hpbGUgKDEpIHsKKwkJcmV0ID0gZHJtX21vZGVzZXRfbG9j aygmcHJpdi0+Z2xvYl9zdGF0ZV9sb2NrLCBzLT5hY3F1aXJlX2N0eCk7CisJCWlmIChyZXQgIT0g LUVERUFETEspCisJCQlicmVhazsKKworCQlkcm1fbW9kZXNldF9iYWNrb2ZmKHMtPmFjcXVpcmVf Y3R4KTsKKwl9CisKKwlpZiAocmV0KQorCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCisJcHJpdl9z dGF0ZSA9IGRybV9hdG9taWNfZ2V0X3ByaXZhdGVfb2JqX3N0YXRlKHMsICZwcml2LT5nbG9iX3N0 YXRlKTsKKwlpZiAoSVNfRVJSKHByaXZfc3RhdGUpKQorCQlyZXR1cm4gRVJSX0NBU1QocHJpdl9z dGF0ZSk7CisKKwlyZXR1cm4gdG9fb21hcF9nbG9iYWxfc3RhdGUocHJpdl9zdGF0ZSk7Cit9CisK K3N0YXRpYyBzdHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGUgKgorb21hcF9nbG9iYWxfZHVwbGljYXRl X3N0YXRlKHN0cnVjdCBkcm1fcHJpdmF0ZV9vYmogKm9iaikKK3sKKwlzdHJ1Y3Qgb21hcF9nbG9i YWxfc3RhdGUgKnN0YXRlOworCisJc3RhdGUgPSBrbWVtZHVwKG9iai0+c3RhdGUsIHNpemVvZigq c3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0YXRlKQorCQlyZXR1cm4gTlVMTDsKKworCV9f ZHJtX2F0b21pY19oZWxwZXJfcHJpdmF0ZV9vYmpfZHVwbGljYXRlX3N0YXRlKG9iaiwgJnN0YXRl LT5iYXNlKTsKKworCXJldHVybiAmc3RhdGUtPmJhc2U7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBf Z2xvYmFsX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9wcml2YXRlX29iaiAqb2JqLAorCQkJCSAg ICAgIHN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IG9tYXBfZ2xv YmFsX3N0YXRlICpvbWFwX3N0YXRlID0gdG9fb21hcF9nbG9iYWxfc3RhdGUoc3RhdGUpOworCisJ a2ZyZWUob21hcF9zdGF0ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3ByaXZhdGVf c3RhdGVfZnVuY3Mgb21hcF9nbG9iYWxfc3RhdGVfZnVuY3MgPSB7CisJLmF0b21pY19kdXBsaWNh dGVfc3RhdGUgPSBvbWFwX2dsb2JhbF9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95 X3N0YXRlID0gb21hcF9nbG9iYWxfZGVzdHJveV9zdGF0ZSwKK307CisKK2ludCBvbWFwX2dsb2Jh bF9vYmpfaW5pdChzdHJ1Y3Qgb21hcF9kcm1fcHJpdmF0ZSAqcHJpdikKK3sKKwlzdHJ1Y3Qgb21h cF9nbG9iYWxfc3RhdGUgKnN0YXRlOworCisJZHJtX21vZGVzZXRfbG9ja19pbml0KCZwcml2LT5n bG9iX3N0YXRlX2xvY2spOworCisJc3RhdGUgPSBremFsbG9jKHNpemVvZigqc3RhdGUpLCBHRlBf S0VSTkVMKTsKKwlpZiAoIXN0YXRlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRybV9hdG9taWNf cHJpdmF0ZV9vYmpfaW5pdCgmcHJpdi0+Z2xvYl9zdGF0ZSwKKwkJCQkgICAgJnN0YXRlLT5iYXNl LAorCQkJCSAgICAmb21hcF9nbG9iYWxfc3RhdGVfZnVuY3MpOworCXJldHVybiAwOworfQorCit2 b2lkIG9tYXBfZ2xvYmFsX29ial9maW5pKHN0cnVjdCBvbWFwX2RybV9wcml2YXRlICpwcml2KQor eworCWRybV9hdG9taWNfcHJpdmF0ZV9vYmpfZmluaSgmcHJpdi0+Z2xvYl9zdGF0ZSk7CisJZHJt X21vZGVzZXRfbG9ja19maW5pKCZwcml2LT5nbG9iX3N0YXRlX2xvY2spOworfQorCitzdGF0aWMg c3RydWN0IG9tYXBfaHdfb3ZlcmxheSAqCitvbWFwX3BsYW5lX2ZpbmRfZnJlZV9vdmVybGF5KHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBvbWFwX2h3X292ZXJsYXlfc3Rh dGUgKm5ld19zdGF0ZSwKKwkJCSAgICAgdTMyIGNhcHMsIHUzMiBmb3VyY2MsIHUzMiBjcnRjX21h c2spCit7CisJc3RydWN0IG9tYXBfZHJtX3ByaXZhdGUgKnByaXYgPSBkZXYtPmRldl9wcml2YXRl OworCWNvbnN0IHN0cnVjdCBkaXNwY19vcHMgKm9wcyA9IHByaXYtPmRpc3BjX29wczsKKwlpbnQg aTsKKworCURCRygiY2FwczogJXggZm91cmNjOiAleCBjcnRjOiAleFxuIiwgY2FwcywgZm91cmNj LCBjcnRjX21hc2spOworCisJZm9yIChpID0gMDsgaSA8IHByaXYtPm51bV9vdmxzOyBpKyspIHsK KwkJc3RydWN0IG9tYXBfaHdfb3ZlcmxheSAqY3VyID0gcHJpdi0+b3ZlcmxheXNbaV07CisJCisJ CURCRygiJWQ6IGlkOiAlZCBjdXItPmNhcHM6ICV4IGN1ci0+Y3J0YzogJXhcbiIsCisJCSAgICBj dXItPmlkeCwgY3VyLT5vdmVybGF5X2lkLCBjdXItPmNhcHMsIGN1ci0+cG9zc2libGVfY3J0Y3Mp OworCisJCS8qIHNraXAgaWYgYWxyZWFkeSBpbi11c2UgKi8KKwkJaWYgKG5ld19zdGF0ZS0+aHdv dmVybGF5X3RvX3BsYW5lW2N1ci0+aWR4XSkKKwkJCWNvbnRpbnVlOworCisJCS8qIGNoZWNrIGlm IGFsbG93ZWQgb24gY3J0YyAqLworCQlpZiAoIShjdXItPnBvc3NpYmxlX2NydGNzICYgY3J0Y19t YXNrKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIHNraXAgaWYgZG9lc24ndCBzdXBwb3J0IHNvbWUg cmVxdWlyZWQgY2FwczogKi8KKwkJaWYgKGNhcHMgJiB+Y3VyLT5jYXBzKQorCQkJY29udGludWU7 CisKKwkJLyogY2hlY2sgc3VwcG9ydGVkIGZvcm1hdCAqLworCQlpZiAoIW9wcy0+b3ZsX2NvbG9y X21vZGVfc3VwcG9ydGVkKHByaXYtPmRpc3BjLAorCQkJCQkJICAgY3VyLT5vdmVybGF5X2lkLAor CQkJCQkJICAgZm91cmNjKSkKKwkJCWNvbnRpbnVlOworCisJCXJldHVybiBjdXI7CisJfQorCisJ REJHKCJubyBtYXRjaFxuIik7CisJcmV0dXJuIE5VTEw7Cit9CisKK2ludCBvbWFwX292ZXJsYXlf YXNzaWduKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzLCBzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZSwKKwkJCXUzMiBjYXBzLCB1MzIgZm91cmNjLCB1MzIgY3J0Y19tYXNrLAorCQkJc3RydWN0IG9t YXBfaHdfb3ZlcmxheSAqKm92ZXJsYXksCisJCQlzdHJ1Y3Qgb21hcF9od19vdmVybGF5ICoqcl9v dmVybGF5KQoreworCXN0cnVjdCBvbWFwX2RybV9wcml2YXRlICpwcml2ID0gcy0+ZGV2LT5kZXZf cHJpdmF0ZTsKKwlzdHJ1Y3Qgb21hcF9nbG9iYWxfc3RhdGUgKm5ld19nbG9iYWxfc3RhdGUsICpv bGRfZ2xvYmFsX3N0YXRlOworCXN0cnVjdCBvbWFwX2h3X292ZXJsYXlfc3RhdGUgKm9sZF9zdGF0 ZSwgKm5ld19zdGF0ZTsKKwlzdHJ1Y3Qgb21hcF9od19vdmVybGF5ICpvdmwsICpyX292bDsKKwor CW5ld19nbG9iYWxfc3RhdGUgPSBvbWFwX2dldF9nbG9iYWxfc3RhdGUocyk7CisJaWYgKElTX0VS UihuZXdfZ2xvYmFsX3N0YXRlKSkKKwkJcmV0dXJuIFBUUl9FUlIobmV3X2dsb2JhbF9zdGF0ZSk7 CisKKwkvKgorCSAqIGdyYWIgb2xkX3N0YXRlIGFmdGVyIG9tYXBfZ2V0X2dsb2JhbF9zdGF0ZSgp LAorCSAqIHNpbmNlIG5vdyB3ZSBob2xkIGxvY2s6CisJICovCisJb2xkX2dsb2JhbF9zdGF0ZSA9 IG9tYXBfZ2V0X2V4aXN0aW5nX2dsb2JhbF9zdGF0ZShwcml2KTsKKwlEQkcoIm5ld19nbG9iYWxf c3RhdGU6ICVwIG9sZF9nbG9iYWxfc3RhdGU6ICVwIHNob3VsZCBiZSBkaWZmZXJlbnQgKCVkKSIs CisJICAgIG5ld19nbG9iYWxfc3RhdGUsIG9sZF9nbG9iYWxfc3RhdGUsIG5ld19nbG9iYWxfc3Rh dGUgIT0gb2xkX2dsb2JhbF9zdGF0ZSk7CisKKwlvbGRfc3RhdGUgPSAmb2xkX2dsb2JhbF9zdGF0 ZS0+b3ZlcmxheTsKKwluZXdfc3RhdGUgPSAmbmV3X2dsb2JhbF9zdGF0ZS0+b3ZlcmxheTsKKwor CWlmICghKm92ZXJsYXkpIHsKKwkJb3ZsID0gb21hcF9wbGFuZV9maW5kX2ZyZWVfb3ZlcmxheShz LT5kZXYsIG5ld19zdGF0ZSwKKwkJCQkJCSAgIGNhcHMsIGZvdXJjYywgY3J0Y19tYXNrKTsKKwkJ aWYgKCFvdmwpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQluZXdfc3RhdGUtPmh3b3ZlcmxheV90 b19wbGFuZVtvdmwtPmlkeF0gPSBwbGFuZTsKKwkJKm92ZXJsYXkgPSBvdmw7CisKKwkJaWYgKHJf b3ZlcmxheSkgeworCQkJcl9vdmwgPSBvbWFwX3BsYW5lX2ZpbmRfZnJlZV9vdmVybGF5KHMtPmRl diwgbmV3X3N0YXRlLAorCQkJCQkJCSAgICAgY2FwcywgZm91cmNjLAorCQkJCQkJCSAgICAgY3J0 Y19tYXNrKTsKKwkJCWlmICghcl9vdmwpIHsKKwkJCQluZXdfc3RhdGUtPmh3b3ZlcmxheV90b19w bGFuZVtvdmwtPmlkeF0gPSBOVUxMOworCQkJCSpvdmVybGF5ID0gTlVMTDsKKwkJCQlyZXR1cm4g LUVOT01FTTsKKwkJCX0KKworCQkJbmV3X3N0YXRlLT5od292ZXJsYXlfdG9fcGxhbmVbcl9vdmwt PmlkeF0gPSBwbGFuZTsKKwkJCSpyX292ZXJsYXkgPSByX292bDsKKwkJfQorCisKKwkJREJHKCIl czogYXNzaWduIHRvIHBsYW5lICVzIGZvciBjYXBzICV4IiwKKwkJICAgICgqb3ZlcmxheSktPm5h bWUsIHBsYW5lLT5uYW1lLCBjYXBzKTsKKworCQlpZiAocl9vdmVybGF5KSB7CisJCQlEQkcoIiVz OiBhc3NpZ24gdG8gcmlnaHQgb2YgcGxhbmUgJXMgZm9yIGNhcHMgJXgiLAorCQkJICAgICgqcl9v dmVybGF5KS0+bmFtZSwgcGxhbmUtPm5hbWUsIGNhcHMpOworCQl9CisJfQorCisJcmV0dXJuIDA7 Cit9CisKK3ZvaWQgb21hcF9vdmVybGF5X3JlbGVhc2Uoc3RydWN0IGRybV9hdG9taWNfc3RhdGUg KnMsCisJCQkgIHN0cnVjdCBvbWFwX2h3X292ZXJsYXkgKm92ZXJsYXkpCit7CisJc3RydWN0IG9t YXBfZ2xvYmFsX3N0YXRlICpzdGF0ZSA9IG9tYXBfZ2V0X2dsb2JhbF9zdGF0ZShzKTsKKwlzdHJ1 Y3Qgb21hcF9od19vdmVybGF5X3N0YXRlICpuZXdfc3RhdGUgPSAmc3RhdGUtPm92ZXJsYXk7CisK KwlpZiAoIW92ZXJsYXkpCisJCXJldHVybjsKKworCWlmIChXQVJOX09OKCFuZXdfc3RhdGUtPmh3 b3ZlcmxheV90b19wbGFuZVtvdmVybGF5LT5pZHhdKSkKKwkJcmV0dXJuOworCisJREJHKCIlczog cmVsZWFzZSBmcm9tIHBsYW5lICVzIiwgb3ZlcmxheS0+bmFtZSwKKwkgICAgbmV3X3N0YXRlLT5o d292ZXJsYXlfdG9fcGxhbmVbb3ZlcmxheS0+aWR4XS0+bmFtZSk7CisKKwluZXdfc3RhdGUtPmh3 b3ZlcmxheV90b19wbGFuZVtvdmVybGF5LT5pZHhdID0gTlVMTDsKK30KKworLyoKKyAqIFRoaXMg aXMgY2FsbGVkIG9ubHkgZnJvbSBvbWFwX2F0b21pY19jb21taXRfdGFpbCgpCisgKiBhcyBhIGNs ZWFudXAgc3RlcCB0byBtYWtlIHN1cmUgaHcgb3ZlcmxheSB3aGljaCBhcmUgbm8gbG9uZ2VyCisg KiBhcmUgZGlzYWJsZWQuCisgKgorICogSSB3YXMgb3JpZ2luYWxseSB0YWtpbmcgdGhlIGdsb2Jf c3RhdGVfbG9jayBoZXJlIGJ5IGNhbGxpbmcKKyAqIG9tYXBfZ2V0X2dsb2JhbF9zdGF0ZShzKSBi dXQgZG9pbmcgc28gaGVyZSB3YXMgY2F1c2luZyBhbGwga2luZAorICogbG9jayByZWxhdGVkIHdh cm5pbmdzLCBmb3IgaW5zdGFuY2U6CisgKiAgV0FSTklORzogQ1BVOiAwIFBJRDogNjggYXQgZHJp dmVycy9ncHUvZHJtL2RybV9tb2Rlc2V0X2xvY2suYzoyNDEKKyAqIGFuZAorICogIFdBUk5JTkc6 IENQVTogMCBQSUQ6IDY4IGF0IGRyaXZlcnMvZ3B1L2RybS9kcm1fbW9kZXNldF9sb2NrLmM6MjQ0 CisgKiBBcyB3ZWxsIGFzIGFsc28gZ2VuZXJhdGluZyB0aGVzZToKKyAqICA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisgKiAgV0FSTklORzogTmVzdGVkIGxvY2sgd2FzIG5vdCB0 YWtlbgorICogIDQuMTguMC1yYzItMDAwNTUtZzVkNTFlNTE1OWIwYSAjMjQgVGFpbnRlZDogRyAg ICAgICAgVworICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBrd29y a2VyL3UyOjMvNjYgaXMgdHJ5aW5nIHRvIGxvY2s6CisgKiAgNTFhYmVhMmUgKGNydGNfd3dfY2xh c3NfbXV0ZXgpeysuKy59LCBhdDogZHJtX21vZGVzZXRfbG9jaysweGQwLzB4MTQwCisgKgorICog IGJ1dCB0aGlzIHRhc2sgaXMgbm90IGhvbGRpbmc6CisgKiAg77+9MjEKKyAqCisgKiBUaGUgb25s eSB0aGluZyB0aGF0IHdvcmtlZCBzbyBmYXIgd2FzIHRvIHN0b3AgdHJ5aW5nIHRvIHRha2UgdGhh dCBsb2NrCisgKiBpbiB0aGlzIHBhcnRpY3VsYXIgY2FzZS4gSXQgbWlnaHQgdGhlIHJlYWwgc29s dXRpb24gYnV0IEkgd291bGQgbGlrZQorICogdG8gc3VyZS4KKyAqLwordm9pZCBvbWFwX292ZXJs YXlfZGlzYWJsZV91bmFzc2lnbmVkKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzKQoreworCXN0 cnVjdCBvbWFwX2RybV9wcml2YXRlICpwcml2ID0gcy0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1 Y3Qgb21hcF9od19vdmVybGF5X3N0YXRlICpuZXdfc3RhdGU7CisJc3RydWN0IG9tYXBfZ2xvYmFs X3N0YXRlICpvbGRfc3RhdGU7CisJaW50IGk7CisKKwlvbGRfc3RhdGUgPSBvbWFwX2dldF9leGlz dGluZ19nbG9iYWxfc3RhdGUocHJpdik7CisJbmV3X3N0YXRlID0gJm9sZF9zdGF0ZS0+b3Zlcmxh eTsKKworCWZvciAoaSA9IDA7IGkgPCBwcml2LT5udW1fb3ZsczsgaSsrKSB7CisJCXN0cnVjdCBv bWFwX2h3X292ZXJsYXkgKmN1ciA9IHByaXYtPm92ZXJsYXlzW2ldOworCisJCWlmICghbmV3X3N0 YXRlLT5od292ZXJsYXlfdG9fcGxhbmVbY3VyLT5pZHhdKSB7CisJCQlwcml2LT5kaXNwY19vcHMt Pm92bF9lbmFibGUocHJpdi0+ZGlzcGMsCisJCQkJCQkgICAgY3VyLT5vdmVybGF5X2lkLAorCQkJ CQkJICAgIGZhbHNlKTsKKworCQkJLyoKKwkJCSAqIFNpbmNlIHdlIGFyZSBkaXNhYmxpbmcgdGhp cyBvdmVybGF5IGluIHRoaXMKKwkJCSAqIGF0b21pYyBjeWNsZSB3ZSBjYW4gcmVzZXQgdGhlIGF2 YWxhaWJsZSBjcnRjcworCQkJICogaXQgY2FuIGJlIHVzZWQgb24KKwkJCSAqLworCQkJY3VyLT5w b3NzaWJsZV9jcnRjcyA9ICgxIDw8IHByaXYtPm51bV9jcnRjcykgLSAxOworCQl9CisJfQorfQor Cit2b2lkIG9tYXBfb3ZlcmxheV9kZXN0cm95KHN0cnVjdCBvbWFwX2h3X292ZXJsYXkgKm92ZXJs YXkpCit7CisJa2ZyZWUob3ZlcmxheSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od19vdmVy bGF5ICpvbWFwX292ZXJsYXlfaW5pdChlbnVtIG9tYXBfcGxhbmVfaWQgb3ZlcmxheV9pZCwKKwkJ CQkJCSBlbnVtIG9tYXBfb3ZlcmxheV9jYXBzIGNhcHMpCit7CisJc3RydWN0IG9tYXBfaHdfb3Zl cmxheSAqb3ZlcmxheTsKKworCW92ZXJsYXkgPSBremFsbG9jKHNpemVvZigqb3ZlcmxheSksIEdG UF9LRVJORUwpOworCWlmICghb3ZlcmxheSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisK KwlvdmVybGF5LT5uYW1lID0gb3ZlcmxheTJuYW1lKG92ZXJsYXlfaWQpOworCW92ZXJsYXktPm92 ZXJsYXlfaWQgPSBvdmVybGF5X2lkOworCW92ZXJsYXktPmNhcHMgPSBjYXBzOworCS8qIAorCSAq IFdoZW4gdGhpcyBpcyBjYWxsZWQgcHJpdi0+bnVtX2NydGNzIGlzIG5vdCBrbm93biB5ZXQuCisJ ICogVXNlIGEgc2FmZSBtYXNrIHZhbHVlIHRvIHN0YXJ0IHdpdGgsIGl0IHdpbGwgZ2V0IHVwZGF0 ZWQgdG8gdGhlCisJICogcHJvcGVyIHZhbHVlIGFmdGVyIHRoZSBmaXJzdCB1c2UuCisJICovCisJ b3ZlcmxheS0+cG9zc2libGVfY3J0Y3MgPSAweGZmOworCisJcmV0dXJuIG92ZXJsYXk7Cit9CisK K2ludCBvbWFwX2h3b3ZlcmxheXNfaW5pdChzdHJ1Y3Qgb21hcF9kcm1fcHJpdmF0ZSAqcHJpdikK K3sKKwlzdGF0aWMgY29uc3QgZW51bSBvbWFwX3BsYW5lX2lkIG92ZXJsYXlzW10gPSB7CisJCQlP TUFQX0RTU19HRlgsIE9NQVBfRFNTX1ZJREVPMSwKKwkJCU9NQVBfRFNTX1ZJREVPMiwgT01BUF9E U1NfVklERU8zLAorCX07CisJdTMyIG51bV9vdmVybGF5cyA9IHByaXYtPmRpc3BjX29wcy0+Z2V0 X251bV9vdmxzKHByaXYtPmRpc3BjKTsKKwllbnVtIG9tYXBfb3ZlcmxheV9jYXBzIGNhcHM7CisJ aW50IGksIHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fb3ZlcmxheXM7IGkrKykgeworCQlz dHJ1Y3Qgb21hcF9od19vdmVybGF5ICpvdmVybGF5OworCisJCWNhcHMgPSBwcml2LT5kaXNwY19v cHMtPm92bF9nZXRfY2Fwcyhwcml2LT5kaXNwYywgb3ZlcmxheXNbaV0pOworCQlvdmVybGF5ID0g b21hcF9vdmVybGF5X2luaXQob3ZlcmxheXNbaV0sIGNhcHMpOworCQlpZiAoSVNfRVJSKG92ZXJs YXkpKSB7CisJCQlyZXQgPSBQVFJfRVJSKG92ZXJsYXkpOworCQkJZGV2X2Vycihwcml2LT5kZXYs ICJmYWlsZWQgdG8gY29uc3RydWN0IG92ZXJsYXkgZm9yICVzICglZClcbiIsCisJCQkJb3Zlcmxh eTJuYW1lKGkpLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlvdmVybGF5LT5pZHggPSBw cml2LT5udW1fb3ZsczsKKwkJcHJpdi0+b3ZlcmxheXNbcHJpdi0+bnVtX292bHMrK10gPSBvdmVy bGF5OworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIG9tYXBfaHdvdmVybGF5c19kZXN0cm95 KHN0cnVjdCBvbWFwX2RybV9wcml2YXRlICpwcml2KQoreworCWludCBpOworCisJZm9yIChpID0g MDsgaSA8IHByaXYtPm51bV9vdmxzOyBpKyspIHsKKwkJb21hcF9vdmVybGF5X2Rlc3Ryb3kocHJp di0+b3ZlcmxheXNbaV0pOworCQlwcml2LT5vdmVybGF5c1tpXSA9IE5VTEw7CisJfQorfQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9vdmVybGF5LmggYi9kcml2ZXJz L2dwdS9kcm0vb21hcGRybS9vbWFwX292ZXJsYXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAuLmVkOTRhMjYwYmExMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9vbWFwZHJtL29tYXBfb3ZlcmxheS5oCkBAIC0wLDAgKzEsODAgQEAKKy8qIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4 IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtICBodHRwOi8vd3d3LnRpLmNvbS8KKyAq IEF1dGhvcjogQmVub2l0IFBhcnJvdCwgPGJwYXJyb3RAdGkuY29tPgorICovCisKKyNpZm5kZWYg X19PTUFQRFJNX09WRVJMQVlfSF9fCisjZGVmaW5lIF9fT01BUERSTV9PVkVSTEFZX0hfXworCisj aW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyAKK2VudW0gZHJtX3BsYW5lX3R5cGU7CisKK3N0cnVj dCBkcm1fZGV2aWNlOworc3RydWN0IGRybV9tb2RlX29iamVjdDsKK3N0cnVjdCBkcm1fcGxhbmU7 CisKKy8qIFVzZWQgdG8gYXNzb2NpYXRlIGEgSFcgb3ZlcmxheS9wbGFuZSB0byBhIHBsYW5lICov CitzdHJ1Y3Qgb21hcF9od19vdmVybGF5IHsKKwlpbnQgaWR4OworCisJY29uc3QgY2hhciAqbmFt ZTsKKwllbnVtIG9tYXBfcGxhbmVfaWQgb3ZlcmxheV9pZDsKKworCWVudW0gb21hcF9vdmVybGF5 X2NhcHMgY2FwczsKKwkvKgorCSAqIFRoZSBDUlRDKHMpIHRoaXMgb3ZlcmxheSBpcyBjdXJyZW50 bHkgYWxsb3dlZCBvbi4KKwkgKiBXaGVuIHRoZSBvdmVybGF5IGlzIHVudXNlZCBhbmQgd2FzIG5v dCBhc3NpZ25lZCB0byBhbnkgY3J0YyB0aGVuCisJICogdGhpcyB3aWxsIGJlIHRoZSBlcXVhbCB0 byB0aGUgcGxhbmUgcG9zc2libGVfY3J0Y3Mgb3RoZXJ3aXNlIGl0CisJICogd2lsbCBiZSB0aGUg Y3VycmVudCBjcnRjIHRoaXMgb3ZlcmxheSBpcyBkaXNwbGF5ZWQgb24uCisJICogV2hlbiBjbGVh cmluZyB0aGUgb3ZlcmxheSB0byBwbGFuZSBhc3NpZ25lbW50IHdoaWxlIGdvaW5nIHRocm91Z2gK KwkgKiBhbiBhdG9taWNfY2hlY2sgc2VxdWVuY2Ugd2UgbmVlZCB0byByZW1lbWJlciB3aGljaCBj cnRjIHRoZSBvdmVybGF5CisJICogd2FzIG9uIGFzIHdlIGRvIG5vdCB3YW50IHRvIGNyZWF0ZSBm bGlja2VyLiBXZSB3YW50IHRvIGJlIGFibGUgdG8KKwkgKiByZWFzc2lnbiB0aGUgb3ZlcmxheSB0 byB0aGUgc2FtZSBjcnRjIGl0IHdhcyBwcmV2aW91c2x5IG9uLgorCSAqLworCXUzMiBwb3NzaWJs ZV9jcnRjczsKKwkvKiBSZWZlcmVuY2UgdG8gdGhlIGFzc29jaWF0ZWQgZHJtX3BsYW5lICovCisJ c3RydWN0IGRybV9wbGFuZSAqcGxhbmU7Cit9OworCisvKiBnbG9iYWwgYXRvbWljIHN0YXRlIG9m IGFzc2lnbm1lbnQgYmV0d2VlbiBwaXBlcyBhbmQgcGxhbmVzOiAqLworc3RydWN0IG9tYXBfaHdf b3ZlcmxheV9zdGF0ZSB7CisJc3RydWN0IGRybV9wbGFuZSAqaHdvdmVybGF5X3RvX3BsYW5lWzhd OworfTsKKworLyogR2xvYmFsIHByaXZhdGUgb2JqZWN0IHN0YXRlIGZvciB0cmFja2luZyByZXNv dXJjZXMgdGhhdCBhcmUgc2hhcmVkIGFjcm9zcworICogbXVsdGlwbGUga21zIG9iamVjdHMgKHBs YW5lcy9jcnRjcy9ldGMpLgorICovCisjZGVmaW5lIHRvX29tYXBfZ2xvYmFsX3N0YXRlKHgpIGNv bnRhaW5lcl9vZih4LCBzdHJ1Y3Qgb21hcF9nbG9iYWxfc3RhdGUsIGJhc2UpCitzdHJ1Y3Qgb21h cF9nbG9iYWxfc3RhdGUgeworCXN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZSBiYXNlOworCisJc3Ry dWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlOworCisJc3RydWN0IG9tYXBfaHdfb3ZlcmxheV9z dGF0ZSBvdmVybGF5OworfTsKKworc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpvdmVybGF5Mm5h bWUoZW51bSBvbWFwX3BsYW5lX2lkIGlkKQoreworCXN0YXRpYyBjb25zdCBjaGFyICpuYW1lW10g PSB7CisJCVtPTUFQX0RTU19HRlhdID0gImdmeCIsCisJCVtPTUFQX0RTU19WSURFTzFdID0gInZp ZDEiLAorCQlbT01BUF9EU1NfVklERU8yXSA9ICJ2aWQyIiwKKwkJW09NQVBfRFNTX1ZJREVPM10g PSAidmlkMyIsCisJfTsKKwlyZXR1cm4gbmFtZVtpZF07Cit9CisKK2ludCBvbWFwX2h3b3Zlcmxh eXNfaW5pdChzdHJ1Y3Qgb21hcF9kcm1fcHJpdmF0ZSAqcHJpdik7Cit2b2lkIG9tYXBfZ2xvYmFs X29ial9maW5pKHN0cnVjdCBvbWFwX2RybV9wcml2YXRlICpwcml2KTsKK3ZvaWQgb21hcF9od292 ZXJsYXlzX2Rlc3Ryb3koc3RydWN0IG9tYXBfZHJtX3ByaXZhdGUgKnByaXYpOworaW50IG9tYXBf Z2xvYmFsX29ial9pbml0KHN0cnVjdCBvbWFwX2RybV9wcml2YXRlICpwcml2KTsKK2ludCBvbWFw X292ZXJsYXlfYXNzaWduKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzLCBzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSwKKwkJCXUzMiBjYXBzLCB1MzIgZm91cmNjLCB1MzIgY3J0Y19tYXNrLAorCQkJ c3RydWN0IG9tYXBfaHdfb3ZlcmxheSAqKm92ZXJsYXksCisJCQlzdHJ1Y3Qgb21hcF9od19vdmVy bGF5ICoqcl9vdmVybGF5KTsKK3ZvaWQgb21hcF9vdmVybGF5X3JlbGVhc2Uoc3RydWN0IGRybV9h dG9taWNfc3RhdGUgKnMsIHN0cnVjdCBvbWFwX2h3X292ZXJsYXkgKm92ZXJsYXkpOwordm9pZCBv bWFwX292ZXJsYXlfZGlzYWJsZV91bmFzc2lnbmVkKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpz KTsKKworI2VuZGlmIC8qIF9fT01BUERSTV9PVkVSTEFZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9wbGFuZS5jIGIvZHJpdmVycy9ncHUvZHJtL29tYXBk cm0vb21hcF9wbGFuZS5jCmluZGV4IDE2MTIzM2NiYzlhMC4uMDFmMWRhMTU1OTk0IDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX3BsYW5lLmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL29tYXBkcm0vb21hcF9wbGFuZS5jCkBAIC0zMCwxMCArMzAsMTIgQEAKIAogc3RydWN0 IG9tYXBfcGxhbmUgewogCXN0cnVjdCBkcm1fcGxhbmUgYmFzZTsKLQllbnVtIG9tYXBfcGxhbmVf aWQgaWQ7CisJZW51bSBvbWFwX3BsYW5lX2lkIGRlZmF1bHRfaWQ7CiAJY29uc3QgY2hhciAqbmFt ZTsKIH07CiAKK3N0YXRpYyBjb25zdCBjaGFyICpwbGFuZV9pZF90b19uYW1lW107CisKIHN0YXRp YyBpbnQgb21hcF9wbGFuZV9wcmVwYXJlX2ZiKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCQkJ CSBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpuZXdfc3RhdGUpCiB7CkBAIC01MCwxNSArNTIsMjYg QEAgc3RhdGljIHZvaWQgb21hcF9wbGFuZV9jbGVhbnVwX2ZiKHN0cnVjdCBkcm1fcGxhbmUgKnBs YW5lLAogCQlvbWFwX2ZyYW1lYnVmZmVyX3VucGluKG9sZF9zdGF0ZS0+ZmIpOwogfQogCitzdGF0 aWMgYm9vbCBwbGFuZV9lbmFibGVkKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQorewor CXJldHVybiBzdGF0ZS0+dmlzaWJsZTsKK30KKwogc3RhdGljIHZvaWQgb21hcF9wbGFuZV9hdG9t aWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCQkJCSAgICAgc3RydWN0IGRybV9w bGFuZV9zdGF0ZSAqb2xkX3N0YXRlKQogewogCXN0cnVjdCBvbWFwX2RybV9wcml2YXRlICpwcml2 ID0gcGxhbmUtPmRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IG9tYXBfcGxhbmUgKm9tYXBfcGxh bmUgPSB0b19vbWFwX3BsYW5lKHBsYW5lKTsKIAlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0 ZSA9IHBsYW5lLT5zdGF0ZTsKLQlzdHJ1Y3Qgb21hcF9vdmVybGF5X2luZm8gaW5mbzsKKwlzdHJ1 Y3Qgb21hcF9wbGFuZV9zdGF0ZSAqb21hcF9zdGF0ZSA9IHRvX29tYXBfcGxhbmVfc3RhdGUoc3Rh dGUpOworCXN0cnVjdCBvbWFwX292ZXJsYXlfaW5mbyBpbmZvLCByX2luZm87CisJZW51bSBvbWFw X3BsYW5lX2lkIG92bF9pZCwgcl9vdmxfaWQ7CiAJaW50IHJldDsKKwlib29sIGR1YWxfcGxhbmUg PSAhIW9tYXBfc3RhdGUtPnJfb3ZlcmxheTsKIAorCW92bF9pZCA9IG9tYXBfc3RhdGUtPm92ZXJs YXktPm92ZXJsYXlfaWQ7CisJREJHKCJbUExBTkU6JWQ6JXNdIG92ZXJsYXlfaWQ6ICVkXG4iLCBw bGFuZS0+YmFzZS5pZCwgcGxhbmUtPm5hbWUsCisJICAgIG92bF9pZCk7CiAJREJHKCIlcywgY3J0 Yz0lcCBmYj0lcCIsIG9tYXBfcGxhbmUtPm5hbWUsIHN0YXRlLT5jcnRjLCBzdGF0ZS0+ZmIpOwog CiAJbWVtc2V0KCZpbmZvLCAwLCBzaXplb2YoaW5mbykpOwpAQCAtNjcsNzUgKzgwLDIzMSBAQCBz dGF0aWMgdm9pZCBvbWFwX3BsYW5lX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxh bmUsCiAJaW5mby5nbG9iYWxfYWxwaGEgPSAweGZmOwogCWluZm8uem9yZGVyID0gc3RhdGUtPm5v cm1hbGl6ZWRfenBvczsKIAorCXJfaW5mbyA9IGluZm87CisKIAkvKiB1cGRhdGUgc2Nhbm91dDog Ki8KLQlvbWFwX2ZyYW1lYnVmZmVyX3VwZGF0ZV9zY2Fub3V0KHN0YXRlLT5mYiwgc3RhdGUsICZp bmZvKTsKKwlvbWFwX2ZyYW1lYnVmZmVyX3VwZGF0ZV9zY2Fub3V0KHN0YXRlLT5mYiwgc3RhdGUs ICZpbmZvLAorCQkJCQlkdWFsX3BsYW5lID8gJnJfaW5mbyA6IE5VTEwpOwogCi0JREJHKCIlZHgl ZCAtPiAlZHglZCAoJWQpIiwgaW5mby53aWR0aCwgaW5mby5oZWlnaHQsCi0JCQlpbmZvLm91dF93 aWR0aCwgaW5mby5vdXRfaGVpZ2h0LAotCQkJaW5mby5zY3JlZW5fd2lkdGgpOworCURCRygiJXM6 ICVkeCVkIC0+ICVkeCVkICglZCkiLAorCSAgICBvdmVybGF5Mm5hbWUob3ZsX2lkKSwgaW5mby53 aWR0aCwgaW5mby5oZWlnaHQsCisJICAgIGluZm8ub3V0X3dpZHRoLCBpbmZvLm91dF9oZWlnaHQs IGluZm8uc2NyZWVuX3dpZHRoKTsKIAlEQkcoIiVkLCVkICVwYWQgJXBhZCIsIGluZm8ucG9zX3gs IGluZm8ucG9zX3ksCi0JCQkmaW5mby5wYWRkciwgJmluZm8ucF91dl9hZGRyKTsKKwkgICAgJmlu Zm8ucGFkZHIsICZpbmZvLnBfdXZfYWRkcik7CisKKwlpZiAoZHVhbF9wbGFuZSkgeworCQlyX292 bF9pZCA9IG9tYXBfc3RhdGUtPnJfb3ZlcmxheS0+b3ZlcmxheV9pZDsKKwkJLyoKKwkJICogSWYg dGhlIGN1cnJlbnQgcGxhbmUgdXNlcyAyIGh3IHBsYW5lcyB0aGUgdmVyeSBuZXh0CisJCSAqIHpv cmRlciBpcyB1c2VkIGJ5IHRoZSByX292ZXJsYXkgc28gd2UganVzdCB1c2UgdGhlCisJCSAqIG1h aW4gb3ZlcmxheSB6b3JkZXIgKyAxCisJCSAqLworCQlyX2luZm8uem9yZGVyID0gaW5mby56b3Jk ZXIgKyAxOworCisJCURCRygiJXM6ICVkeCVkIC0+ICVkeCVkICglZCkiLAorCQkgICAgb3Zlcmxh eTJuYW1lKHJfb3ZsX2lkKSwgcl9pbmZvLndpZHRoLCByX2luZm8uaGVpZ2h0LAorCQkgICAgcl9p bmZvLm91dF93aWR0aCwgcl9pbmZvLm91dF9oZWlnaHQsIHJfaW5mby5zY3JlZW5fd2lkdGgpOwor CQlEQkcoIiVkLCVkICVwYWQgJXBhZCIsIHJfaW5mby5wb3NfeCwgcl9pbmZvLnBvc195LAorCQkg ICAgJnJfaW5mby5wYWRkciwgJnJfaW5mby5wX3V2X2FkZHIpOworCX0KIAogCS8qIGFuZCBmaW5h bGx5LCB1cGRhdGUgb21hcGRzczogKi8KLQlyZXQgPSBwcml2LT5kaXNwY19vcHMtPm92bF9zZXR1 cChwcml2LT5kaXNwYywgb21hcF9wbGFuZS0+aWQsICZpbmZvLAorCXJldCA9IHByaXYtPmRpc3Bj X29wcy0+b3ZsX3NldHVwKHByaXYtPmRpc3BjLCBvdmxfaWQsICZpbmZvLAogCQkJICAgICAgb21h cF9jcnRjX3RpbWluZ3Moc3RhdGUtPmNydGMpLCBmYWxzZSwKIAkJCSAgICAgIG9tYXBfY3J0Y19j aGFubmVsKHN0YXRlLT5jcnRjKSk7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKHBsYW5lLT5kZXYt PmRldiwgIkZhaWxlZCB0byBzZXR1cCBwbGFuZSAlc1xuIiwKKwkJZGV2X2VycihwbGFuZS0+ZGV2 LT5kZXYsICJGYWlsZWQgdG8gc2V0dXAgcGxhbmUxICVzXG4iLAogCQkJb21hcF9wbGFuZS0+bmFt ZSk7Ci0JCXByaXYtPmRpc3BjX29wcy0+b3ZsX2VuYWJsZShwcml2LT5kaXNwYywgb21hcF9wbGFu ZS0+aWQsIGZhbHNlKTsKKwkJcHJpdi0+ZGlzcGNfb3BzLT5vdmxfZW5hYmxlKHByaXYtPmRpc3Bj LCBvdmxfaWQsIGZhbHNlKTsKIAkJcmV0dXJuOwogCX0KIAotCXByaXYtPmRpc3BjX29wcy0+b3Zs X2VuYWJsZShwcml2LT5kaXNwYywgb21hcF9wbGFuZS0+aWQsIHRydWUpOworCXByaXYtPmRpc3Bj X29wcy0+b3ZsX2VuYWJsZShwcml2LT5kaXNwYywgb3ZsX2lkLCB0cnVlKTsKKworCWlmIChkdWFs X3BsYW5lKSB7CisJCXJldCA9IHByaXYtPmRpc3BjX29wcy0+b3ZsX3NldHVwKHByaXYtPmRpc3Bj LCByX292bF9pZCwgJnJfaW5mbywKKwkJCQkgICAgICBvbWFwX2NydGNfdGltaW5ncyhzdGF0ZS0+ Y3J0YyksIGZhbHNlLAorCQkJCSAgICAgIG9tYXBfY3J0Y19jaGFubmVsKHN0YXRlLT5jcnRjKSk7 CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIocGxhbmUtPmRldi0+ZGV2LCAiRmFpbGVkIHRvIHNl dHVwIHBsYW5lMiAlc1xuIiwKKwkJCQlvbWFwX3BsYW5lLT5uYW1lKTsKKwkJCXByaXYtPmRpc3Bj X29wcy0+b3ZsX2VuYWJsZShwcml2LT5kaXNwYywgcl9vdmxfaWQsIGZhbHNlKTsKKwkJCXByaXYt PmRpc3BjX29wcy0+b3ZsX2VuYWJsZShwcml2LT5kaXNwYywgb3ZsX2lkLCBmYWxzZSk7CisJCQly ZXR1cm47CisJCX0KKworCQlwcml2LT5kaXNwY19vcHMtPm92bF9lbmFibGUocHJpdi0+ZGlzcGMs IHJfb3ZsX2lkLCB0cnVlKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIG9tYXBfcGxhbmVfYXRvbWlj X2Rpc2FibGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJCQkJICAgICAgc3RydWN0IGRybV9w bGFuZV9zdGF0ZSAqb2xkX3N0YXRlKQogewogCXN0cnVjdCBvbWFwX2RybV9wcml2YXRlICpwcml2 ID0gcGxhbmUtPmRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG9tYXBfcGxhbmUgKm9tYXBfcGxh bmUgPSB0b19vbWFwX3BsYW5lKHBsYW5lKTsKKwlzdHJ1Y3Qgb21hcF9wbGFuZV9zdGF0ZSAqb21h cF9zdGF0ZSA9IHRvX29tYXBfcGxhbmVfc3RhdGUob2xkX3N0YXRlKTsKKwlib29sIGR1YWxfcGxh bmUgPSAhIW9tYXBfc3RhdGUtPnJfb3ZlcmxheTsKKworCURCRygiJXM6IGNoZWNrIChvdmVybGF5 ICVwIHJfb3ZlcmxheSAlcCkiLCBwbGFuZS0+bmFtZSwKKwkgICAgb21hcF9zdGF0ZS0+b3Zlcmxh eSwgb21hcF9zdGF0ZS0+cl9vdmVybGF5KTsKKworCWlmICghb21hcF9zdGF0ZS0+b3ZlcmxheSkK KwkJcmV0dXJuOwogCiAJcGxhbmUtPnN0YXRlLT5yb3RhdGlvbiA9IERSTV9NT0RFX1JPVEFURV8w OwogCXBsYW5lLT5zdGF0ZS0+enBvcyA9IHBsYW5lLT50eXBlID09IERSTV9QTEFORV9UWVBFX1BS SU1BUlkKLQkJCSAgID8gMCA6IG9tYXBfcGxhbmUtPmlkOwotCi0JcHJpdi0+ZGlzcGNfb3BzLT5v dmxfZW5hYmxlKHByaXYtPmRpc3BjLCBvbWFwX3BsYW5lLT5pZCwgZmFsc2UpOworCQkJICAgPyAw IDogb21hcF9zdGF0ZS0+b3ZlcmxheS0+b3ZlcmxheV9pZDsKKworCXByaXYtPmRpc3BjX29wcy0+ b3ZsX2VuYWJsZShwcml2LT5kaXNwYywgb21hcF9zdGF0ZS0+b3ZlcmxheS0+b3ZlcmxheV9pZCwg ZmFsc2UpOworCW9tYXBfb3ZlcmxheV9yZWxlYXNlKG9sZF9zdGF0ZS0+c3RhdGUsIG9tYXBfc3Rh dGUtPm92ZXJsYXkpOworCW9tYXBfc3RhdGUtPm92ZXJsYXkgPSBOVUxMOworCWlmIChkdWFsX3Bs YW5lKSB7CisJCXByaXYtPmRpc3BjX29wcy0+b3ZsX2VuYWJsZShwcml2LT5kaXNwYywgb21hcF9z dGF0ZS0+cl9vdmVybGF5LT5vdmVybGF5X2lkLCBmYWxzZSk7CisJCW9tYXBfb3ZlcmxheV9yZWxl YXNlKG9sZF9zdGF0ZS0+c3RhdGUsIG9tYXBfc3RhdGUtPnJfb3ZlcmxheSk7CisJCW9tYXBfc3Rh dGUtPnJfb3ZlcmxheSA9IE5VTEw7CisJfQogfQogCisjZGVmaW5lIEZSQUNfMTZfMTYobXVsdCwg ZGl2KSAgICAoKChtdWx0KSA8PCAxNikgLyAoZGl2KSkKIHN0YXRpYyBpbnQgb21hcF9wbGFuZV9h dG9taWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJCQkJICAgc3RydWN0IGRybV9w bGFuZV9zdGF0ZSAqc3RhdGUpCiB7CisJc3RydWN0IG9tYXBfZHJtX3ByaXZhdGUgKnByaXYgPSBw bGFuZS0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CQogCXN0cnVj dCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpv bGRfc3RhdGUgPSBwbGFuZS0+c3RhdGU7CisJc3RydWN0IG9tYXBfcGxhbmVfc3RhdGUgKm9tYXBf c3RhdGUgPSB0b19vbWFwX3BsYW5lX3N0YXRlKHN0YXRlKTsKKwljb25zdCBzdHJ1Y3QgZGlzcGNf b3BzICpvcHMgPSBwcml2LT5kaXNwY19vcHM7CisJdTE2IHdpZHRoLCBoZWlnaHQ7CisJdTMyIGNy dGNfbWFzazsKKwl1MzIgZm91cmNjOworCXUzMiBjYXBzID0gMDsKKwlib29sIG5ld19od19vdmVy bGF5ID0gZmFsc2U7CisJYm9vbCBuZXdfcl9od19vdmVybGF5ID0gZmFsc2U7CisJYm9vbCBvdXRf b2ZfYm91bmRzID0gZmFsc2U7CisJaW50IG1pbl9zY2FsZSwgbWF4X3NjYWxlOworCXUzMiBtYXhf d2lkdGgsIG1heF9oZWlnaHQ7CisJaW50IHJldDsKIAotCWlmICghc3RhdGUtPmZiKQotCQlyZXR1 cm4gMDsKKwlEQkcoIiVzOiBjaGVjayAoJWQgLT4gJWQpIiwgcGxhbmUtPm5hbWUsCisJICAgIHBs YW5lX2VuYWJsZWQob2xkX3N0YXRlKSwgcGxhbmVfZW5hYmxlZChzdGF0ZSkpOworCisJcHJpdi0+ ZGlzcGNfb3BzLT5vdmxfZ2V0X21heF9zaXplKHByaXYtPmRpc3BjLCAmd2lkdGgsICZoZWlnaHQp OworCW1heF93aWR0aCA9IHdpZHRoIDw8IDE2OworCW1heF9oZWlnaHQgPSBoZWlnaHQgPDwgMTY7 CiAKLQkvKiBjcnRjIHNob3VsZCBvbmx5IGJlIE5VTEwgd2hlbiBkaXNhYmxpbmcgKGkuZS4sICFz dGF0ZS0+ZmIpICovCi0JaWYgKFdBUk5fT04oIXN0YXRlLT5jcnRjKSkKKwljcnRjID0gc3RhdGUt PmNydGMgPyBzdGF0ZS0+Y3J0YyA6IHBsYW5lLT5zdGF0ZS0+Y3J0YzsKKwlpZiAoIWNydGMpCiAJ CXJldHVybiAwOwogCi0JY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X2V4aXN0aW5nX2NydGNf c3RhdGUoc3RhdGUtPnN0YXRlLCBzdGF0ZS0+Y3J0Yyk7CisJY3J0Y19zdGF0ZSA9IGRybV9hdG9t aWNfZ2V0X2V4aXN0aW5nX2NydGNfc3RhdGUoc3RhdGUtPnN0YXRlLCBjcnRjKTsKIAkvKiB3ZSBz aG91bGQgaGF2ZSBhIGNydGMgc3RhdGUgaWYgdGhlIHBsYW5lIGlzIGF0dGFjaGVkIHRvIGEgY3J0 YyAqLwogCWlmIChXQVJOX09OKCFjcnRjX3N0YXRlKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoIWNy dGNfc3RhdGUtPmVuYWJsZSkKLQkJcmV0dXJuIDA7CisJLyogTWFrZSBzdXJlIHNvdXJjZSBkaW1l bnNpb25zIGFyZSB3aXRoaW4gYm91bmRzLiAqLworCWlmIChzdGF0ZS0+c3JjX2ggPiBtYXhfaGVp Z2h0KQorCQlvdXRfb2ZfYm91bmRzID0gdHJ1ZTsKIAotCWlmIChzdGF0ZS0+Y3J0Y194IDwgMCB8 fCBzdGF0ZS0+Y3J0Y195IDwgMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHN0YXRlLT5zcmNf dyA+IG1heF93aWR0aCkgeworCQlpZiAoc3RhdGUtPnNyY193IDw9ICgyICogbWF4X3dpZHRoKSkK KwkJCW5ld19yX2h3X292ZXJsYXkgPSB0cnVlOworCQllbHNlCisJCQlvdXRfb2ZfYm91bmRzID0g dHJ1ZTsKKwl9CiAKLQlpZiAoc3RhdGUtPmNydGNfeCArIHN0YXRlLT5jcnRjX3cgPiBjcnRjX3N0 YXRlLT5hZGp1c3RlZF9tb2RlLmhkaXNwbGF5KQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAob3V0 X29mX2JvdW5kcykgeworCQlzdHJ1Y3QgZHJtX3JlY3Qgc3JjID0gZHJtX3BsYW5lX3N0YXRlX3Ny YyhzdGF0ZSk7CisJCURCRygiSW52YWxpZCBzb3VyY2Ugc2l6ZSAiRFJNX1JFQ1RfRlBfRk1ULAor CQkgICAgRFJNX1JFQ1RfRlBfQVJHKCZzcmMpKTsKKwkJcmV0dXJuIC1FUkFOR0U7CisJfQogCi0J aWYgKHN0YXRlLT5jcnRjX3kgKyBzdGF0ZS0+Y3J0Y19oID4gY3J0Y19zdGF0ZS0+YWRqdXN0ZWRf bW9kZS52ZGlzcGxheSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJbWluX3NjYWxlID0gRlJBQ18xNl8x NigxLCA0KTsKKwltYXhfc2NhbGUgPSBGUkFDXzE2XzE2KDgsIDEpOworCisJcmV0ID0gZHJtX2F0 b21pY19oZWxwZXJfY2hlY2tfcGxhbmVfc3RhdGUoc3RhdGUsIGNydGNfc3RhdGUsCisJCQkJCQkg IG1pbl9zY2FsZSwgbWF4X3NjYWxlLAorCQkJCQkJICB0cnVlLCB0cnVlKTsKKwlpZiAocmV0KQor CQlyZXR1cm4gcmV0OwogCiAJaWYgKHN0YXRlLT5yb3RhdGlvbiAhPSBEUk1fTU9ERV9ST1RBVEVf MCAmJgogCSAgICAhb21hcF9mcmFtZWJ1ZmZlcl9zdXBwb3J0c19yb3RhdGlvbihzdGF0ZS0+ZmIp KQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmIChwbGFuZV9lbmFibGVkKHN0YXRlKSkgeworCQlp ZiAoKHN0YXRlLT5zcmNfdyA+PiAxNikgIT0gc3RhdGUtPmNydGNfdyB8fAorCQkgICAgKHN0YXRl LT5zcmNfaCA+PiAxNikgIT0gc3RhdGUtPmNydGNfaCkKKwkJCWNhcHMgfD0gT01BUF9EU1NfT1ZM X0NBUF9TQ0FMRTsKKworCQlmb3VyY2MgPSBzdGF0ZS0+ZmItPmZvcm1hdC0+Zm9ybWF0OworCQlj cnRjX21hc2sgPSBkcm1fY3J0Y19tYXNrKHN0YXRlLT5jcnRjKTsKKworCQkvKiAocmUpYWxsb2Nh dGUgaHcgb3ZlcmxheSBpZiB3ZSBkb24ndCBoYXZlIG9uZSBvciBjYXBzLW1pc21hdGNoOiAqLwor CQlpZiAoIW9tYXBfc3RhdGUtPm92ZXJsYXkgfHwgKGNhcHMgJiB+b21hcF9zdGF0ZS0+b3Zlcmxh eS0+Y2FwcykpIHsKKwkJCW5ld19od19vdmVybGF5ID0gdHJ1ZTsKKwkJfSBlbHNlIHsKKwkJCS8q IGNoZWNrIGlmIGFsbG93ZWQgb24gY3J0YyAqLworCQkJaWYgKCEob21hcF9zdGF0ZS0+b3Zlcmxh eS0+cG9zc2libGVfY3J0Y3MgJiBjcnRjX21hc2spKQorCQkJCW5ld19od19vdmVybGF5ID0gdHJ1 ZTsKKworCQkJLyogY2hlY2sgc3VwcG9ydGVkIGZvcm1hdCAqLworCQkJaWYgKCFvcHMtPm92bF9j b2xvcl9tb2RlX3N1cHBvcnRlZChwcml2LT5kaXNwYywKKwkJCQkJCW9tYXBfc3RhdGUtPm92ZXJs YXktPm92ZXJsYXlfaWQsCisJCQkJCQlmb3VyY2MpKQorCQkJCW5ld19od19vdmVybGF5ID0gdHJ1 ZTsKKwkJfQorCQkvKiAKKwkJICogY2hlY2sgaWYgd2UgbmVlZCB0d28gb3ZlcmxheXMgYW5kIG9u bHkgaGF2ZSAxIG9yCisJCSAqIGlmIHdlIGhhZCAyIG92ZXJsYXlzIGJ1dCB3aWxsIG9ubHkgbmVl ZCAxCisJCSAqLyAKKwkJaWYgKChuZXdfcl9od19vdmVybGF5ICYmICFvbWFwX3N0YXRlLT5yX292 ZXJsYXkpIHx8CisJCSAgICAoIW5ld19yX2h3X292ZXJsYXkgJiYgb21hcF9zdGF0ZS0+cl9vdmVy bGF5KSkKKwkJCW5ld19od19vdmVybGF5ID0gdHJ1ZTsKKworCQlpZiAobmV3X2h3X292ZXJsYXkp IHsKKwkJCXN0cnVjdCBvbWFwX2h3X292ZXJsYXkgKm9sZF9vdmwgPSAKKwkJCQkJCW9tYXBfc3Rh dGUtPm92ZXJsYXk7CisJCQlzdHJ1Y3Qgb21hcF9od19vdmVybGF5ICpvbGRfcl9vdmwgPSAKKwkJ CQkJCW9tYXBfc3RhdGUtPnJfb3ZlcmxheTsKKwkJCXN0cnVjdCBvbWFwX2h3X292ZXJsYXkgKm5l d19vdmwgPSBOVUxMOworCQkJc3RydWN0IG9tYXBfaHdfb3ZlcmxheSAqbmV3X3Jfb3ZsID0gTlVM TDsKKworCQkJb21hcF9vdmVybGF5X3JlbGVhc2Uoc3RhdGUtPnN0YXRlLCBvbGRfb3ZsKTsKKwkJ CW9tYXBfb3ZlcmxheV9yZWxlYXNlKHN0YXRlLT5zdGF0ZSwgb2xkX3Jfb3ZsKTsKKworCQkJcmV0 ID0gb21hcF9vdmVybGF5X2Fzc2lnbihzdGF0ZS0+c3RhdGUsIHBsYW5lLCBjYXBzLAorCQkJCQkJ ICBmb3VyY2MsIGNydGNfbWFzaywgJm5ld19vdmwsCisJCQkJCQkgIG5ld19yX2h3X292ZXJsYXkg PworCQkJCQkJICAmbmV3X3Jfb3ZsIDogTlVMTCk7CisJCQlpZiAocmV0KSB7CisJCQkJREJHKCIl czogZmFpbGVkIHRvIGFzc2lnbiBod19vdmVybGF5KHMpISIsCisJCQkJICAgIHBsYW5lLT5uYW1l KTsKKwkJCQlvbWFwX3N0YXRlLT5vdmVybGF5ID0gTlVMTDsKKwkJCQlvbWFwX3N0YXRlLT5yX292 ZXJsYXkgPSBOVUxMOworCQkJCXJldHVybiByZXQ7CisJCQl9CisKKwkJCW9tYXBfc3RhdGUtPm92 ZXJsYXkgPSBuZXdfb3ZsOworCQkJaWYgKG5ld19yX2h3X292ZXJsYXkpCisJCQkJb21hcF9zdGF0 ZS0+cl9vdmVybGF5ID0gbmV3X3Jfb3ZsOworCQkJZWxzZQorCQkJCW9tYXBfc3RhdGUtPnJfb3Zl cmxheSA9IE5VTEw7CisJCX0KKwl9IGVsc2UgeworCQlvbWFwX292ZXJsYXlfcmVsZWFzZShzdGF0 ZS0+c3RhdGUsIG9tYXBfc3RhdGUtPm92ZXJsYXkpOworCQlvbWFwX292ZXJsYXlfcmVsZWFzZShz dGF0ZS0+c3RhdGUsIG9tYXBfc3RhdGUtPnJfb3ZlcmxheSk7CisJCW9tYXBfc3RhdGUtPm92ZXJs YXkgPSBOVUxMOworCQlvbWFwX3N0YXRlLT5yX292ZXJsYXkgPSBOVUxMOworCX0KKworCWlmIChv bWFwX3N0YXRlLT5vdmVybGF5KQorCQlEQkcoInBsYW5lOiAlcyBvdmVybGF5X2lkOiAlZCIsIHBs YW5lLT5uYW1lLAorCQkgICAgb21hcF9zdGF0ZS0+b3ZlcmxheS0+b3ZlcmxheV9pZCk7CisJaWYg KG9tYXBfc3RhdGUtPnJfb3ZlcmxheSkKKwkJREJHKCJwbGFuZTogJXMgcl9vdmVybGF5X2lkOiAl ZCIsIHBsYW5lLT5uYW1lLAorCQkgICAgb21hcF9zdGF0ZS0+cl9vdmVybGF5LT5vdmVybGF5X2lk KTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xODIsMjAgKzM1MSw3NyBAQCB2b2lkIG9tYXBfcGxh bmVfaW5zdGFsbF9wcm9wZXJ0aWVzKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCWRybV9vYmpl Y3RfYXR0YWNoX3Byb3BlcnR5KG9iaiwgcHJpdi0+em9yZGVyX3Byb3AsIDApOwogfQogCisvKiBB ZGQgZHVwbGljYXRlIGFuZCBkZXN0cm95IHN0YXRlIGhlbHBlciAqLworc3RhdGljIHN0cnVjdCBk cm1fcGxhbmVfc3RhdGUgKgorb21hcF9wbGFuZV9hdG9taWNfZHVwbGljYXRlX3N0YXRlKHN0cnVj dCBkcm1fcGxhbmUgKnBsYW5lKQoreworCXN0cnVjdCBvbWFwX3BsYW5lX3N0YXRlICpzdGF0ZTsK KwlzdHJ1Y3Qgb21hcF9wbGFuZV9zdGF0ZSAqY29weTsKKworCWlmIChXQVJOX09OKCFwbGFuZS0+ c3RhdGUpKQorCQlyZXR1cm4gTlVMTDsKKworCXN0YXRlID0gdG9fb21hcF9wbGFuZV9zdGF0ZShw bGFuZS0+c3RhdGUpOworCWNvcHkgPSBrbWVtZHVwKHN0YXRlLCBzaXplb2YoKnN0YXRlKSwgR0ZQ X0tFUk5FTCk7CisJaWYgKGNvcHkgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlfX2RybV9h dG9taWNfaGVscGVyX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZShwbGFuZSwgJmNvcHktPmJhc2UpOwor CisJcmV0dXJuICZjb3B5LT5iYXNlOworfQorCitzdGF0aWMgdm9pZCBvbWFwX3BsYW5lX2F0b21p Y19kZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJCQkgICAgc3RydWN0 IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJX19kcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9k ZXN0cm95X3N0YXRlKHN0YXRlKTsKKwlrZnJlZSh0b19vbWFwX3BsYW5lX3N0YXRlKHN0YXRlKSk7 Cit9CisKIHN0YXRpYyB2b2lkIG9tYXBfcGxhbmVfcmVzZXQoc3RydWN0IGRybV9wbGFuZSAqcGxh bmUpCiB7CiAJc3RydWN0IG9tYXBfcGxhbmUgKm9tYXBfcGxhbmUgPSB0b19vbWFwX3BsYW5lKHBs YW5lKTsKKwlzdHJ1Y3Qgb21hcF9wbGFuZV9zdGF0ZSAqb21hcF9zdGF0ZTsKKworCWlmIChwbGFu ZS0+c3RhdGUpCisJCW9tYXBfcGxhbmVfYXRvbWljX2Rlc3Ryb3lfc3RhdGUocGxhbmUsIHBsYW5l LT5zdGF0ZSk7CiAKLQlkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9yZXNldChwbGFuZSk7Ci0JaWYg KCFwbGFuZS0+c3RhdGUpCisJb21hcF9zdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKCpvbWFwX3N0YXRl KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFvbWFwX3N0YXRlKQogCQlyZXR1cm47CiAKKwlvbWFwX3N0 YXRlLT5iYXNlLnBsYW5lID0gcGxhbmU7CisJcGxhbmUtPnN0YXRlID0gJm9tYXBfc3RhdGUtPmJh c2U7CisJcGxhbmUtPnN0YXRlLT5wbGFuZSA9IHBsYW5lOworCXBsYW5lLT5zdGF0ZS0+cm90YXRp b24gPSBEUk1fTU9ERV9ST1RBVEVfMDsKIAkvKgogCSAqIFNldCB0aGUgenBvcyBkZWZhdWx0IGRl cGVuZGluZyBvbiB3aGV0aGVyIHdlIGFyZSBhIHByaW1hcnkgb3Igb3ZlcmxheQogCSAqIHBsYW5l LgogCSAqLwogCXBsYW5lLT5zdGF0ZS0+enBvcyA9IHBsYW5lLT50eXBlID09IERSTV9QTEFORV9U WVBFX1BSSU1BUlkKLQkJCSAgID8gMCA6IG9tYXBfcGxhbmUtPmlkOworCQkJICAgPyAwIDogb21h cF9wbGFuZS0+ZGVmYXVsdF9pZDsKK30KKworc3RhdGljIHZvaWQgb21hcF9wbGFuZV9hdG9taWNf cHJpbnRfc3RhdGUoc3RydWN0IGRybV9wcmludGVyICpwLAorCQljb25zdCBzdHJ1Y3QgZHJtX3Bs YW5lX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3Qgb21hcF9wbGFuZV9zdGF0ZSAqb21hcF9zdGF0 ZSA9IHRvX29tYXBfcGxhbmVfc3RhdGUoc3RhdGUpOworCisJZHJtX3ByaW50ZihwLCAiXHRvdmVy bGF5PSVwXG4iLCBvbWFwX3N0YXRlLT5vdmVybGF5KTsKKwlpZiAob21hcF9zdGF0ZS0+b3Zlcmxh eSkgeworCQlkcm1fcHJpbnRmKHAsICJcdFx0aWR4PSVkXG4iLCBvbWFwX3N0YXRlLT5vdmVybGF5 LT5pZHgpOworCQlkcm1fcHJpbnRmKHAsICJcdFx0b3ZlcmxheV9pZD0lZFxuIiwgb21hcF9zdGF0 ZS0+b3ZlcmxheS0+b3ZlcmxheV9pZCk7CisJCWRybV9wcmludGYocCwgIlx0XHRjYXBzPTB4JXhc biIsIG9tYXBfc3RhdGUtPm92ZXJsYXktPmNhcHMpOworCQlkcm1fcHJpbnRmKHAsICJcdFx0cG9z c2libGVfY3J0Y3M9MHgleFxuIiwgb21hcF9zdGF0ZS0+b3ZlcmxheS0+cG9zc2libGVfY3J0Y3Mp OworCX0KKworCWRybV9wcmludGYocCwgIlx0cl9vdmVybGF5PSVwXG4iLCBvbWFwX3N0YXRlLT5y X292ZXJsYXkpOworCWlmIChvbWFwX3N0YXRlLT5yX292ZXJsYXkpIHsKKwkJZHJtX3ByaW50Zihw LCAiXHRcdGlkeD0lZFxuIiwgb21hcF9zdGF0ZS0+cl9vdmVybGF5LT5pZHgpOworCQlkcm1fcHJp bnRmKHAsICJcdFx0b3ZlcmxheV9pZD0lZFxuIiwgb21hcF9zdGF0ZS0+cl9vdmVybGF5LT5vdmVy bGF5X2lkKTsKKwkJZHJtX3ByaW50ZihwLCAiXHRcdGNhcHM9MHgleFxuIiwgb21hcF9zdGF0ZS0+ cl9vdmVybGF5LT5jYXBzKTsKKwkJZHJtX3ByaW50ZihwLCAiXHRcdHBvc3NpYmxlX2NydGNzPTB4 JXhcbiIsIG9tYXBfc3RhdGUtPnJfb3ZlcmxheS0+cG9zc2libGVfY3J0Y3MpOworCX0KIH0KIAog c3RhdGljIGludCBvbWFwX3BsYW5lX2F0b21pY19zZXRfcHJvcGVydHkoc3RydWN0IGRybV9wbGFu ZSAqcGxhbmUsCkBAIC0yMzMsMTAgKzQ1OSwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9w bGFuZV9mdW5jcyBvbWFwX3BsYW5lX2Z1bmNzID0gewogCS5kaXNhYmxlX3BsYW5lID0gZHJtX2F0 b21pY19oZWxwZXJfZGlzYWJsZV9wbGFuZSwKIAkucmVzZXQgPSBvbWFwX3BsYW5lX3Jlc2V0LAog CS5kZXN0cm95ID0gb21hcF9wbGFuZV9kZXN0cm95LAotCS5hdG9taWNfZHVwbGljYXRlX3N0YXRl ID0gZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRlLAotCS5hdG9taWNfZGVz dHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX3BsYW5lX2Rlc3Ryb3lfc3RhdGUsCisJLmF0 b21pY19kdXBsaWNhdGVfc3RhdGUgPSBvbWFwX3BsYW5lX2F0b21pY19kdXBsaWNhdGVfc3RhdGUs CisJLmF0b21pY19kZXN0cm95X3N0YXRlID0gb21hcF9wbGFuZV9hdG9taWNfZGVzdHJveV9zdGF0 ZSwKIAkuYXRvbWljX3NldF9wcm9wZXJ0eSA9IG9tYXBfcGxhbmVfYXRvbWljX3NldF9wcm9wZXJ0 eSwKIAkuYXRvbWljX2dldF9wcm9wZXJ0eSA9IG9tYXBfcGxhbmVfYXRvbWljX2dldF9wcm9wZXJ0 eSwKKwkuYXRvbWljX3ByaW50X3N0YXRlID0gb21hcF9wbGFuZV9hdG9taWNfcHJpbnRfc3RhdGUs CiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqcGxhbmVfaWRfdG9fbmFtZVtdID0gewpAQCAtMjQ2 LDE0ICs0NzMsNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqcGxhbmVfaWRfdG9fbmFtZVtdID0gewog CVtPTUFQX0RTU19WSURFTzNdID0gInZpZDMiLAogfTsKIAotc3RhdGljIGNvbnN0IGVudW0gb21h cF9wbGFuZV9pZCBwbGFuZV9pZHhfdG9faWRbXSA9IHsKLQlPTUFQX0RTU19HRlgsCi0JT01BUF9E U1NfVklERU8xLAotCU9NQVBfRFNTX1ZJREVPMiwKLQlPTUFQX0RTU19WSURFTzMsCi19OwotCi0v KiBpbml0aWFsaXplIHBsYW5lICovCiBzdHJ1Y3QgZHJtX3BsYW5lICpvbWFwX3BsYW5lX2luaXQo c3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJaW50IGlkeCwgZW51bSBkcm1fcGxhbmVfdHlwZSB0 eXBlLAogCQl1MzIgcG9zc2libGVfY3J0Y3MpCkBAIC0yNjIsMjcgKzQ4MSwyOCBAQCBzdHJ1Y3Qg ZHJtX3BsYW5lICpvbWFwX3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAl1bnNp Z25lZCBpbnQgbnVtX3BsYW5lcyA9IHByaXYtPmRpc3BjX29wcy0+Z2V0X251bV9vdmxzKHByaXYt PmRpc3BjKTsKIAlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZTsKIAlzdHJ1Y3Qgb21hcF9wbGFuZSAq b21hcF9wbGFuZTsKLQllbnVtIG9tYXBfcGxhbmVfaWQgaWQ7CiAJaW50IHJldDsKIAl1MzIgbmZv cm1hdHM7CiAJY29uc3QgdTMyICpmb3JtYXRzOwogCi0JaWYgKFdBUk5fT04oaWR4ID49IEFSUkFZ X1NJWkUocGxhbmVfaWR4X3RvX2lkKSkpCisJaWYgKFdBUk5fT04oaWR4ID49IG51bV9wbGFuZXMp KQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAotCWlkID0gcGxhbmVfaWR4X3RvX2lkW2lk eF07Ci0KLQlEQkcoIiVzOiB0eXBlPSVkIiwgcGxhbmVfaWRfdG9fbmFtZVtpZF0sIHR5cGUpOwot CiAJb21hcF9wbGFuZSA9IGt6YWxsb2Moc2l6ZW9mKCpvbWFwX3BsYW5lKSwgR0ZQX0tFUk5FTCk7 CiAJaWYgKCFvbWFwX3BsYW5lKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAotCWZvcm1h dHMgPSBwcml2LT5kaXNwY19vcHMtPm92bF9nZXRfY29sb3JfbW9kZXMocHJpdi0+ZGlzcGMsIGlk KTsKKwlvbWFwX3BsYW5lLT5kZWZhdWx0X2lkID0gaWR4OworCW9tYXBfcGxhbmUtPm5hbWUgPSBw bGFuZV9pZF90b19uYW1lW2lkeF07CisKKwlEQkcoIiVzOiB0eXBlPSVkIiwgb21hcF9wbGFuZS0+ bmFtZSwgdHlwZSk7CisJREJHKCIJb21hcF9wbGFuZS0+ZGVmYXVsdF9pZDogJWQiLCBvbWFwX3Bs YW5lLT5kZWZhdWx0X2lkKTsKKwlEQkcoIgljcnRjX21hc2s6IDB4JTA0eCIsIHBvc3NpYmxlX2Ny dGNzKTsKKworCWZvcm1hdHMgPSBwcml2LT5kaXNwY19vcHMtPm92bF9nZXRfY29sb3JfbW9kZXMo cHJpdi0+ZGlzcGMsCisJCQkJCQkgICAgICAgb21hcF9wbGFuZS0+ZGVmYXVsdF9pZCk7CiAJZm9y IChuZm9ybWF0cyA9IDA7IGZvcm1hdHNbbmZvcm1hdHNdOyArK25mb3JtYXRzKQogCQk7Ci0Jb21h cF9wbGFuZS0+aWQgPSBpZDsKLQlvbWFwX3BsYW5lLT5uYW1lID0gcGxhbmVfaWRfdG9fbmFtZVtp ZF07CiAKIAlwbGFuZSA9ICZvbWFwX3BsYW5lLT5iYXNlOwogCkBAIC0zMDEsNyArNTIxLDcgQEAg c3RydWN0IGRybV9wbGFuZSAqb21hcF9wbGFuZV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs CiAKIGVycm9yOgogCWRldl9lcnIoZGV2LT5kZXYsICIlcygpOiBjb3VsZCBub3QgY3JlYXRlIHBs YW5lOiAlc1xuIiwKLQkJX19mdW5jX18sIHBsYW5lX2lkX3RvX25hbWVbaWRdKTsKKwkJX19mdW5j X18sIG9tYXBfcGxhbmUtPm5hbWUpOwogCiAJa2ZyZWUob21hcF9wbGFuZSk7CiAJcmV0dXJuIE5V TEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX3BsYW5lLmggYi9k cml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX3BsYW5lLmgKaW5kZXggZGM1ZTgyYWQwNjFkLi45 MDAwZjQ1YTliNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfcGxh bmUuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX3BsYW5lLmgKQEAgLTI4LDEw ICsyOCwzMCBAQCBzdHJ1Y3QgZHJtX2RldmljZTsKIHN0cnVjdCBkcm1fbW9kZV9vYmplY3Q7CiBz dHJ1Y3QgZHJtX3BsYW5lOwogCisvKgorICogQXRvbWljIHBsYW5lIHN0YXRlLiBTdWJjbGFzc2Vz IHRoZSBiYXNlIGRybV9wbGFuZV9zdGF0ZSBpbiBvcmRlciB0bworICogdHJhY2sgYXNzaWduZWQg b3ZlcmxheSBhbmQgaHcgc3BlY2lmaWMgc3RhdGUuCisgKi8KK3N0cnVjdCBvbWFwX3BsYW5lX3N0 YXRlIHsKKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIGJhc2U7CisKKwlzdHJ1Y3Qgb21hcF9od19v dmVybGF5ICpvdmVybGF5OworCXN0cnVjdCBvbWFwX2h3X292ZXJsYXkgKnJfb3ZlcmxheTsgIC8q IHJpZ2h0IG92ZXJsYXkgKi8KK307CisjZGVmaW5lIHRvX29tYXBfcGxhbmVfc3RhdGUoeCkgXAor CQljb250YWluZXJfb2YoeCwgc3RydWN0IG9tYXBfcGxhbmVfc3RhdGUsIGJhc2UpCisKIHN0cnVj dCBkcm1fcGxhbmUgKm9tYXBfcGxhbmVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQlp bnQgaWR4LCBlbnVtIGRybV9wbGFuZV90eXBlIHR5cGUsCiAJCXUzMiBwb3NzaWJsZV9jcnRjcyk7 CiB2b2lkIG9tYXBfcGxhbmVfaW5zdGFsbF9wcm9wZXJ0aWVzKHN0cnVjdCBkcm1fcGxhbmUgKnBs YW5lLAogCQlzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmopOwogCitzdGF0aWMgaW5saW5lIGJv b2wgaXNfb21hcF9wbGFuZV9kdWFsX292ZXJsYXkoc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3Rh dGUpCit7CisJc3RydWN0IG9tYXBfcGxhbmVfc3RhdGUgKm9tYXBfc3RhdGUgPSB0b19vbWFwX3Bs YW5lX3N0YXRlKHN0YXRlKTsKKworCXJldHVybiAhIW9tYXBfc3RhdGUtPnJfb3ZlcmxheTsKK30K KwogI2VuZGlmIC8qIF9fT01BUERSTV9QTEFORV9IX18gKi8KLS0gCjIuOS4wCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBs aXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK