From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 03/13] drm/i915: Amalgamate execbuffer parameter structures Date: Wed, 29 Mar 2017 16:56:25 +0100 Message-ID: <20170329155635.19060-4-chris@chris-wilson.co.uk> References: <20170329155635.19060-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wr0-x241.google.com (mail-wr0-x241.google.com [IPv6:2a00:1450:400c:c0c::241]) by gabe.freedesktop.org (Postfix) with ESMTPS id 92FEE6E3F6 for ; Wed, 29 Mar 2017 15:56:43 +0000 (UTC) Received: by mail-wr0-x241.google.com with SMTP id u18so4201558wrc.0 for ; Wed, 29 Mar 2017 08:56:43 -0700 (PDT) In-Reply-To: <20170329155635.19060-1-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Q29tYmluZSB0aGUgdHdvIHNsaWdodGx5IG92ZXJsYXBwaW5nIHBhcmFtZXRlciBzdHJ1Y3R1cmVz IHdlIHBhc3MgYXJvdW5kCnRoZSBleGVjYnVmZmVyIHJvdXRpbmVzIGludG8gb25lLgoKU2lnbmVk LW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+ClJldmlld2Vk LWJ5OiBKb29uYXMgTGFodGluZW4gPGpvb25hcy5sYWh0aW5lbkBsaW51eC5pbnRlbC5jb20+Ci0t LQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jIHwgNTUwICsrKysr KysrKysrKy0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMjMzIGluc2VydGlvbnMo KyksIDMxNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dlbV9leGVjYnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVj YnVmZmVyLmMKaW5kZXggYWYxOTY1Nzc0ZTdiLi42MjZiZTM5NmMzMjcgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYworKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKQEAgLTUwLDcwICs1MCw3OCBAQAogCiAj ZGVmaW5lIEJBVENIX09GRlNFVF9CSUFTICgyNTYqMTAyNCkKIAotc3RydWN0IGk5MTVfZXhlY2J1 ZmZlcl9wYXJhbXMgewotCXN0cnVjdCBkcm1fZGV2aWNlICAgICAgICAgICAgICAgKmRldjsKLQlz dHJ1Y3QgZHJtX2ZpbGUgICAgICAgICAgICAgICAgICpmaWxlOwotCXN0cnVjdCBpOTE1X3ZtYQkJ CSpiYXRjaDsKLQl1MzIJCQkJZGlzcGF0Y2hfZmxhZ3M7Ci0JdTMyCQkJCWFyZ3NfYmF0Y2hfc3Rh cnRfb2Zmc2V0OwotCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgICAgICAgICAgKmVuZ2luZTsKLQlz dHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAgICAgICAgICpjdHg7Ci0Jc3RydWN0IGRybV9pOTE1X2dl bV9yZXF1ZXN0ICAgICAqcmVxdWVzdDsKLX07CisjZGVmaW5lIF9fSTkxNV9FWEVDX0lMTEVHQUxf RkxBR1MgXAorCShfX0k5MTVfRVhFQ19VTktOT1dOX0ZMQUdTIHwgSTkxNV9FWEVDX0NPTlNUQU5U U19NQVNLKQogCi1zdHJ1Y3QgZWJfdm1hcyB7CitzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyIHsKIAlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNTsKKwlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGU7CisJ c3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiAqYXJnczsKKwlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX2V4ZWNfb2JqZWN0MiAqZXhlYzsKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7 CisJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eDsKKwlzdHJ1Y3QgaTkxNV9hZGRyZXNzX3Nw YWNlICp2bTsKKwlzdHJ1Y3QgaTkxNV92bWEgKmJhdGNoOworCXN0cnVjdCBkcm1faTkxNV9nZW1f cmVxdWVzdCAqcmVxdWVzdDsKKwl1MzIgYmF0Y2hfc3RhcnRfb2Zmc2V0OworCXUzMiBiYXRjaF9s ZW47CisJdW5zaWduZWQgaW50IGRpc3BhdGNoX2ZsYWdzOworCXN0cnVjdCBkcm1faTkxNV9nZW1f ZXhlY19vYmplY3QyIHNoYWRvd19leGVjX2VudHJ5OworCWJvb2wgbmVlZF9yZWxvY3M7CiAJc3Ry dWN0IGxpc3RfaGVhZCB2bWFzOworCXN0cnVjdCByZWxvY19jYWNoZSB7CisJCXN0cnVjdCBkcm1f bW1fbm9kZSBub2RlOworCQl1bnNpZ25lZCBsb25nIHZhZGRyOworCQl1bnNpZ25lZCBpbnQgcGFn ZTsKKwkJYm9vbCB1c2VfNjRiaXRfcmVsb2MgOiAxOworCX0gcmVsb2NfY2FjaGU7CiAJaW50IGFu ZDsKIAl1bmlvbiB7Ci0JCXN0cnVjdCBpOTE1X3ZtYSAqbHV0WzBdOwotCQlzdHJ1Y3QgaGxpc3Rf aGVhZCBidWNrZXRzWzBdOworCQlzdHJ1Y3QgaTkxNV92bWEgKipsdXQ7CisJCXN0cnVjdCBobGlz dF9oZWFkICpidWNrZXRzOwogCX07CiB9OwogCi1zdGF0aWMgc3RydWN0IGViX3ZtYXMgKgotZWJf Y3JlYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAotCSAgc3RydWN0IGRybV9pOTE1 X2dlbV9leGVjYnVmZmVyMiAqYXJncykKK3N0YXRpYyBpbnQKK2ViX2NyZWF0ZShzdHJ1Y3QgaTkx NV9leGVjYnVmZmVyICplYikKIHsKLQlzdHJ1Y3QgZWJfdm1hcyAqZWIgPSBOVUxMOwotCi0JaWYg KGFyZ3MtPmZsYWdzICYgSTkxNV9FWEVDX0hBTkRMRV9MVVQpIHsKLQkJdW5zaWduZWQgc2l6ZSA9 IGFyZ3MtPmJ1ZmZlcl9jb3VudDsKKwllYi0+bHV0ID0gTlVMTDsKKwlpZiAoZWItPmFyZ3MtPmZs YWdzICYgSTkxNV9FWEVDX0hBTkRMRV9MVVQpIHsKKwkJdW5zaWduZWQgaW50IHNpemUgPSBlYi0+ YXJncy0+YnVmZmVyX2NvdW50OwogCQlzaXplICo9IHNpemVvZihzdHJ1Y3QgaTkxNV92bWEgKik7 Ci0JCXNpemUgKz0gc2l6ZW9mKHN0cnVjdCBlYl92bWFzKTsKLQkJZWIgPSBrbWFsbG9jKHNpemUs IEdGUF9URU1QT1JBUlkgfCBfX0dGUF9OT1dBUk4gfCBfX0dGUF9OT1JFVFJZKTsKKwkJZWItPmx1 dCA9IGttYWxsb2Moc2l6ZSwKKwkJCQkgIEdGUF9URU1QT1JBUlkgfCBfX0dGUF9OT1dBUk4gfCBf X0dGUF9OT1JFVFJZKTsKIAl9CiAKLQlpZiAoZWIgPT0gTlVMTCkgewotCQl1bnNpZ25lZCBzaXpl ID0gYXJncy0+YnVmZmVyX2NvdW50OwotCQl1bnNpZ25lZCBjb3VudCA9IFBBR0VfU0laRSAvIHNp emVvZihzdHJ1Y3QgaGxpc3RfaGVhZCkgLyAyOworCWlmICghZWItPmx1dCkgeworCQl1bnNpZ25l ZCBpbnQgc2l6ZSA9IGViLT5hcmdzLT5idWZmZXJfY291bnQ7CisJCXVuc2lnbmVkIGludCBjb3Vu dCA9IFBBR0VfU0laRSAvIHNpemVvZihzdHJ1Y3QgaGxpc3RfaGVhZCkgLyAyOwogCQlCVUlMRF9C VUdfT05fTk9UX1BPV0VSX09GXzIoUEFHRV9TSVpFIC8gc2l6ZW9mKHN0cnVjdCBobGlzdF9oZWFk KSk7CiAJCXdoaWxlIChjb3VudCA+IDIqc2l6ZSkKIAkJCWNvdW50ID4+PSAxOwotCQllYiA9IGt6 YWxsb2MoY291bnQqc2l6ZW9mKHN0cnVjdCBobGlzdF9oZWFkKSArCi0JCQkgICAgIHNpemVvZihz dHJ1Y3QgZWJfdm1hcyksCi0JCQkgICAgIEdGUF9URU1QT1JBUlkpOwotCQlpZiAoZWIgPT0gTlVM TCkKLQkJCXJldHVybiBlYjsKKwkJZWItPmx1dCA9IGt6YWxsb2MoY291bnQqc2l6ZW9mKHN0cnVj dCBobGlzdF9oZWFkKSwKKwkJCQkgIEdGUF9URU1QT1JBUlkpOworCQlpZiAoIWViLT5sdXQpCisJ CQlyZXR1cm4gLUVOT01FTTsKIAogCQllYi0+YW5kID0gY291bnQgLSAxOwotCX0gZWxzZQotCQll Yi0+YW5kID0gLWFyZ3MtPmJ1ZmZlcl9jb3VudDsKKwl9IGVsc2UgeworCQllYi0+YW5kID0gLWVi LT5hcmdzLT5idWZmZXJfY291bnQ7CisJfQogCi0JZWItPmk5MTUgPSBpOTE1OwogCUlOSVRfTElT VF9IRUFEKCZlYi0+dm1hcyk7Ci0JcmV0dXJuIGViOworCXJldHVybiAwOwogfQogCiBzdGF0aWMg dm9pZAotZWJfcmVzZXQoc3RydWN0IGViX3ZtYXMgKmViKQorZWJfcmVzZXQoc3RydWN0IGk5MTVf ZXhlY2J1ZmZlciAqZWIpCiB7CiAJaWYgKGViLT5hbmQgPj0gMCkKIAkJbWVtc2V0KGViLT5idWNr ZXRzLCAwLCAoZWItPmFuZCsxKSpzaXplb2Yoc3RydWN0IGhsaXN0X2hlYWQpKTsKIH0KIAogc3Rh dGljIHN0cnVjdCBpOTE1X3ZtYSAqCi1lYl9nZXRfYmF0Y2goc3RydWN0IGViX3ZtYXMgKmViKQor ZWJfZ2V0X2JhdGNoKHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViKQogewogCXN0cnVjdCBpOTE1 X3ZtYSAqdm1hID0gbGlzdF9lbnRyeShlYi0+dm1hcy5wcmV2LCB0eXBlb2YoKnZtYSksIGV4ZWNf bGlzdCk7CiAKQEAgLTEzMywzNCArMTQxLDMwIEBAIGViX2dldF9iYXRjaChzdHJ1Y3QgZWJfdm1h cyAqZWIpCiB9CiAKIHN0YXRpYyBpbnQKLWViX2xvb2t1cF92bWFzKHN0cnVjdCBlYl92bWFzICpl YiwKLQkgICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKmV4ZWMsCi0JICAg ICAgIGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgKmFyZ3MsCi0JICAgICAg IHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAotCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUg KmZpbGUpCitlYl9sb29rdXBfdm1hcyhzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYikKIHsKIAlz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwogCXN0cnVjdCBsaXN0X2hlYWQgb2JqZWN0 czsKIAlpbnQgaSwgcmV0OwogCiAJSU5JVF9MSVNUX0hFQUQoJm9iamVjdHMpOwotCXNwaW5fbG9j aygmZmlsZS0+dGFibGVfbG9jayk7CisJc3Bpbl9sb2NrKCZlYi0+ZmlsZS0+dGFibGVfbG9jayk7 CiAJLyogR3JhYiBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IGFuZCByZWxlYXNlIHRoZSBsb2Nr IHNvIHdlIGNhbiBsb29rdXAKIAkgKiBvciBjcmVhdGUgdGhlIFZNQSB3aXRob3V0IHVzaW5nIEdG UF9BVE9NSUMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgYXJncy0+YnVmZmVyX2NvdW50OyBpKyspIHsK LQkJb2JqID0gdG9faW50ZWxfYm8oaWRyX2ZpbmQoJmZpbGUtPm9iamVjdF9pZHIsIGV4ZWNbaV0u aGFuZGxlKSk7CisJZm9yIChpID0gMDsgaSA8IGViLT5hcmdzLT5idWZmZXJfY291bnQ7IGkrKykg eworCQlvYmogPSB0b19pbnRlbF9ibyhpZHJfZmluZCgmZWItPmZpbGUtPm9iamVjdF9pZHIsIGVi LT5leGVjW2ldLmhhbmRsZSkpOwogCQlpZiAob2JqID09IE5VTEwpIHsKLQkJCXNwaW5fdW5sb2Nr KCZmaWxlLT50YWJsZV9sb2NrKTsKKwkJCXNwaW5fdW5sb2NrKCZlYi0+ZmlsZS0+dGFibGVfbG9j ayk7CiAJCQlEUk1fREVCVUcoIkludmFsaWQgb2JqZWN0IGhhbmRsZSAlZCBhdCBpbmRleCAlZFxu IiwKLQkJCQkgICBleGVjW2ldLmhhbmRsZSwgaSk7CisJCQkJICAgZWItPmV4ZWNbaV0uaGFuZGxl LCBpKTsKIAkJCXJldCA9IC1FTk9FTlQ7CiAJCQlnb3RvIGVycjsKIAkJfQogCiAJCWlmICghbGlz dF9lbXB0eSgmb2JqLT5vYmpfZXhlY19saW5rKSkgewotCQkJc3Bpbl91bmxvY2soJmZpbGUtPnRh YmxlX2xvY2spOworCQkJc3Bpbl91bmxvY2soJmViLT5maWxlLT50YWJsZV9sb2NrKTsKIAkJCURS TV9ERUJVRygiT2JqZWN0ICVwIFtoYW5kbGUgJWQsIGluZGV4ICVkXSBhcHBlYXJzIG1vcmUgdGhh biBvbmNlIGluIG9iamVjdCBsaXN0XG4iLAotCQkJCSAgIG9iaiwgZXhlY1tpXS5oYW5kbGUsIGkp OworCQkJCSAgIG9iaiwgZWItPmV4ZWNbaV0uaGFuZGxlLCBpKTsKIAkJCXJldCA9IC1FSU5WQUw7 CiAJCQlnb3RvIGVycjsKIAkJfQpAQCAtMTY4LDcgKzE3Miw3IEBAIGViX2xvb2t1cF92bWFzKHN0 cnVjdCBlYl92bWFzICplYiwKIAkJaTkxNV9nZW1fb2JqZWN0X2dldChvYmopOwogCQlsaXN0X2Fk ZF90YWlsKCZvYmotPm9ial9leGVjX2xpbmssICZvYmplY3RzKTsKIAl9Ci0Jc3Bpbl91bmxvY2so JmZpbGUtPnRhYmxlX2xvY2spOworCXNwaW5fdW5sb2NrKCZlYi0+ZmlsZS0+dGFibGVfbG9jayk7 CiAKIAlpID0gMDsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJm9iamVjdHMpKSB7CkBAIC0xODYsNyAr MTkwLDcgQEAgZWJfbG9va3VwX3ZtYXMoc3RydWN0IGViX3ZtYXMgKmViLAogCQkgKiBmcm9tIHRo ZSAob2JqLCB2bSkgd2UgZG9uJ3QgcnVuIHRoZSByaXNrIG9mIGNyZWF0aW5nCiAJCSAqIGR1cGxp Y2F0ZWQgdm1hcyBmb3IgdGhlIHNhbWUgdm0uCiAJCSAqLwotCQl2bWEgPSBpOTE1X3ZtYV9pbnN0 YW5jZShvYmosIHZtLCBOVUxMKTsKKwkJdm1hID0gaTkxNV92bWFfaW5zdGFuY2Uob2JqLCBlYi0+ dm0sIE5VTEwpOwogCQlpZiAodW5saWtlbHkoSVNfRVJSKHZtYSkpKSB7CiAJCQlEUk1fREVCVUco IkZhaWxlZCB0byBsb29rdXAgVk1BXG4iKTsKIAkJCXJldCA9IFBUUl9FUlIodm1hKTsKQEAgLTE5 NywxMSArMjAxLDEzIEBAIGViX2xvb2t1cF92bWFzKHN0cnVjdCBlYl92bWFzICplYiwKIAkJbGlz dF9hZGRfdGFpbCgmdm1hLT5leGVjX2xpc3QsICZlYi0+dm1hcyk7CiAJCWxpc3RfZGVsX2luaXQo Jm9iai0+b2JqX2V4ZWNfbGluayk7CiAKLQkJdm1hLT5leGVjX2VudHJ5ID0gJmV4ZWNbaV07CisJ CXZtYS0+ZXhlY19lbnRyeSA9ICZlYi0+ZXhlY1tpXTsKIAkJaWYgKGViLT5hbmQgPCAwKSB7CiAJ CQllYi0+bHV0W2ldID0gdm1hOwogCQl9IGVsc2UgewotCQkJdWludDMyX3QgaGFuZGxlID0gYXJn cy0+ZmxhZ3MgJiBJOTE1X0VYRUNfSEFORExFX0xVVCA/IGkgOiBleGVjW2ldLmhhbmRsZTsKKwkJ CXUzMiBoYW5kbGUgPQorCQkJCWViLT5hcmdzLT5mbGFncyAmIEk5MTVfRVhFQ19IQU5ETEVfTFVU ID8KKwkJCQlpIDogZWItPmV4ZWNbaV0uaGFuZGxlOwogCQkJdm1hLT5leGVjX2hhbmRsZSA9IGhh bmRsZTsKIAkJCWhsaXN0X2FkZF9oZWFkKCZ2bWEtPmV4ZWNfbm9kZSwKIAkJCQkgICAgICAgJmVi LT5idWNrZXRzW2hhbmRsZSAmIGViLT5hbmRdKTsKQEAgLTIyOCw3ICsyMzQsNyBAQCBlYl9sb29r dXBfdm1hcyhzdHJ1Y3QgZWJfdm1hcyAqZWIsCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0 cnVjdCBpOTE1X3ZtYSAqZWJfZ2V0X3ZtYShzdHJ1Y3QgZWJfdm1hcyAqZWIsIHVuc2lnbmVkIGxv bmcgaGFuZGxlKQorc3RhdGljIHN0cnVjdCBpOTE1X3ZtYSAqZWJfZ2V0X3ZtYShzdHJ1Y3QgaTkx NV9leGVjYnVmZmVyICplYiwgdW5zaWduZWQgbG9uZyBoYW5kbGUpCiB7CiAJaWYgKGViLT5hbmQg PCAwKSB7CiAJCWlmIChoYW5kbGUgPj0gLWViLT5hbmQpCkBAIC0yNDgsNyArMjU0LDcgQEAgc3Rh dGljIHN0cnVjdCBpOTE1X3ZtYSAqZWJfZ2V0X3ZtYShzdHJ1Y3QgZWJfdm1hcyAqZWIsIHVuc2ln bmVkIGxvbmcgaGFuZGxlKQogfQogCiBzdGF0aWMgdm9pZAotaTkxNV9nZW1fZXhlY2J1ZmZlcl91 bnJlc2VydmVfdm1hKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQorZWJfdW5yZXNlcnZlX3ZtYShzdHJ1 Y3QgaTkxNV92bWEgKnZtYSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAq ZW50cnk7CiAKQEAgLTI2Niw4ICsyNzIsMTAgQEAgaTkxNV9nZW1fZXhlY2J1ZmZlcl91bnJlc2Vy dmVfdm1hKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQogCWVudHJ5LT5mbGFncyAmPSB+KF9fRVhFQ19P QkpFQ1RfSEFTX0ZFTkNFIHwgX19FWEVDX09CSkVDVF9IQVNfUElOKTsKIH0KIAotc3RhdGljIHZv aWQgZWJfZGVzdHJveShzdHJ1Y3QgZWJfdm1hcyAqZWIpCitzdGF0aWMgdm9pZCBlYl9kZXN0cm95 KHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViKQogeworCWk5MTVfZ2VtX2NvbnRleHRfcHV0KGVi LT5jdHgpOworCiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZlYi0+dm1hcykpIHsKIAkJc3RydWN0IGk5 MTVfdm1hICp2bWE7CiAKQEAgLTI3NSwxMSArMjgzLDEwIEBAIHN0YXRpYyB2b2lkIGViX2Rlc3Ry b3koc3RydWN0IGViX3ZtYXMgKmViKQogCQkJCSAgICAgICBzdHJ1Y3QgaTkxNV92bWEsCiAJCQkJ ICAgICAgIGV4ZWNfbGlzdCk7CiAJCWxpc3RfZGVsX2luaXQoJnZtYS0+ZXhlY19saXN0KTsKLQkJ aTkxNV9nZW1fZXhlY2J1ZmZlcl91bnJlc2VydmVfdm1hKHZtYSk7CisJCWViX3VucmVzZXJ2ZV92 bWEodm1hKTsKIAkJdm1hLT5leGVjX2VudHJ5ID0gTlVMTDsKIAkJaTkxNV92bWFfcHV0KHZtYSk7 CiAJfQotCWtmcmVlKGViKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgdXNlX2NwdV9yZWxvYyhz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQpAQCAtMzIwLDIwICszMjcsMTEgQEAgcmVs b2NhdGlvbl90YXJnZXQoY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5 ICpyZWxvYywKIAlyZXR1cm4gZ2VuOF9jYW5vbmljYWxfYWRkcigoaW50KXJlbG9jLT5kZWx0YSAr IHRhcmdldF9vZmZzZXQpOwogfQogCi1zdHJ1Y3QgcmVsb2NfY2FjaGUgewotCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1OwotCXN0cnVjdCBkcm1fbW1fbm9kZSBub2RlOwotCXVuc2lnbmVk IGxvbmcgdmFkZHI7Ci0JdW5zaWduZWQgaW50IHBhZ2U7Ci0JYm9vbCB1c2VfNjRiaXRfcmVsb2M7 Ci19OwotCiBzdGF0aWMgdm9pZCByZWxvY19jYWNoZV9pbml0KHN0cnVjdCByZWxvY19jYWNoZSAq Y2FjaGUsCiAJCQkgICAgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQogewogCWNhY2hl LT5wYWdlID0gLTE7CiAJY2FjaGUtPnZhZGRyID0gMDsKLQljYWNoZS0+aTkxNSA9IGk5MTU7CiAJ LyogTXVzdCBiZSBhIHZhcmlhYmxlIGluIHRoZSBzdHJ1Y3QgdG8gYWxsb3cgR0NDIHRvIHVucm9s bC4gKi8KIAljYWNoZS0+dXNlXzY0Yml0X3JlbG9jID0gSEFTXzY0QklUX1JFTE9DKGk5MTUpOwog CWNhY2hlLT5ub2RlLmFsbG9jYXRlZCA9IGZhbHNlOwpAQCAtMzUxLDcgKzM0OSwxNCBAQCBzdGF0 aWMgaW5saW5lIHVuc2lnbmVkIGludCB1bm1hc2tfZmxhZ3ModW5zaWduZWQgbG9uZyBwKQogCiAj ZGVmaW5lIEtNQVAgMHg0IC8qIGFmdGVyIENMRkxVU0hfRkxBR1MgKi8KIAotc3RhdGljIHZvaWQg cmVsb2NfY2FjaGVfZmluaShzdHJ1Y3QgcmVsb2NfY2FjaGUgKmNhY2hlKQorc3RhdGljIGlubGlu ZSBzdHJ1Y3QgaTkxNV9nZ3R0ICpjYWNoZV90b19nZ3R0KHN0cnVjdCByZWxvY19jYWNoZSAqY2Fj aGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPQorCQljb250YWluZXJfb2Yo Y2FjaGUsIHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIsIHJlbG9jX2NhY2hlKS0+aTkxNTsKKwlyZXR1 cm4gJmk5MTUtPmdndHQ7Cit9CisKK3N0YXRpYyB2b2lkIHJlbG9jX2NhY2hlX3Jlc2V0KHN0cnVj dCByZWxvY19jYWNoZSAqY2FjaGUpCiB7CiAJdm9pZCAqdmFkZHI7CiAKQEAgLTM2OSw3ICszNzQs NyBAQCBzdGF0aWMgdm9pZCByZWxvY19jYWNoZV9maW5pKHN0cnVjdCByZWxvY19jYWNoZSAqY2Fj aGUpCiAJCXdtYigpOwogCQlpb19tYXBwaW5nX3VubWFwX2F0b21pYygodm9pZCBfX2lvbWVtICop dmFkZHIpOwogCQlpZiAoY2FjaGUtPm5vZGUuYWxsb2NhdGVkKSB7Ci0JCQlzdHJ1Y3QgaTkxNV9n Z3R0ICpnZ3R0ID0gJmNhY2hlLT5pOTE1LT5nZ3R0OworCQkJc3RydWN0IGk5MTVfZ2d0dCAqZ2d0 dCA9IGNhY2hlX3RvX2dndHQoY2FjaGUpOwogCiAJCQlnZ3R0LT5iYXNlLmNsZWFyX3JhbmdlKCZn Z3R0LT5iYXNlLAogCQkJCQkgICAgICAgY2FjaGUtPm5vZGUuc3RhcnQsCkBAIC0zNzksNiArMzg0 LDkgQEAgc3RhdGljIHZvaWQgcmVsb2NfY2FjaGVfZmluaShzdHJ1Y3QgcmVsb2NfY2FjaGUgKmNh Y2hlKQogCQkJaTkxNV92bWFfdW5waW4oKHN0cnVjdCBpOTE1X3ZtYSAqKWNhY2hlLT5ub2RlLm1t KTsKIAkJfQogCX0KKworCWNhY2hlLT52YWRkciA9IDA7CisJY2FjaGUtPnBhZ2UgPSAtMTsKIH0K IAogc3RhdGljIHZvaWQgKnJlbG9jX2ttYXAoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aiwKQEAgLTQxNyw3ICs0MjUsNyBAQCBzdGF0aWMgdm9pZCAqcmVsb2NfaW9tYXAoc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJCSBzdHJ1Y3QgcmVsb2NfY2FjaGUgKmNhY2hlLAog CQkJIGludCBwYWdlKQogewotCXN0cnVjdCBpOTE1X2dndHQgKmdndHQgPSAmY2FjaGUtPmk5MTUt PmdndHQ7CisJc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCA9IGNhY2hlX3RvX2dndHQoY2FjaGUpOwog CXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwogCXZvaWQgKnZhZGRyOwogCkBAIC00NjcsNyArNDc1LDgg QEAgc3RhdGljIHZvaWQgKnJlbG9jX2lvbWFwKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmosCiAJCW9mZnNldCArPSBwYWdlIDw8IFBBR0VfU0hJRlQ7CiAJfQogCi0JdmFkZHIgPSAodm9p ZCBfX2ZvcmNlICopIGlvX21hcHBpbmdfbWFwX2F0b21pY193YygmY2FjaGUtPmk5MTUtPmdndHQu bWFwcGFibGUsIG9mZnNldCk7CisJdmFkZHIgPSAodm9pZCBfX2ZvcmNlICopaW9fbWFwcGluZ19t YXBfYXRvbWljX3djKCZnZ3R0LT5tYXBwYWJsZSwKKwkJCQkJCQkgb2Zmc2V0KTsKIAljYWNoZS0+ cGFnZSA9IHBhZ2U7CiAJY2FjaGUtPnZhZGRyID0gKHVuc2lnbmVkIGxvbmcpdmFkZHI7CiAKQEAg LTU0NiwxMiArNTU1LDEwIEBAIHJlbG9jYXRlX2VudHJ5KHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmosCiB9CiAKIHN0YXRpYyBpbnQKLWk5MTVfZ2VtX2V4ZWNidWZmZXJfcmVsb2NhdGVf ZW50cnkoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKLQkJCQkgICBzdHJ1Y3QgZWJf dm1hcyAqZWIsCi0JCQkJICAgc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5ICpy ZWxvYywKLQkJCQkgICBzdHJ1Y3QgcmVsb2NfY2FjaGUgKmNhY2hlKQorZWJfcmVsb2NhdGVfZW50 cnkoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJICBzdHJ1Y3QgaTkxNV9leGVj YnVmZmVyICplYiwKKwkJICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgKnJl bG9jKQogewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUob2Jq LT5iYXNlLmRldik7CiAJc3RydWN0IGRybV9nZW1fb2JqZWN0ICp0YXJnZXRfb2JqOwogCXN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICp0YXJnZXRfaTkxNV9vYmo7CiAJc3RydWN0IGk5MTVfdm1h ICp0YXJnZXRfdm1hOwpAQCAtNTcwLDggKzU3Nyw4IEBAIGk5MTVfZ2VtX2V4ZWNidWZmZXJfcmVs b2NhdGVfZW50cnkoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkvKiBTYW5keWJy aWRnZSBQUEdUVCBlcnJhdGE6IFdlIG5lZWQgYSBnbG9iYWwgZ3R0IG1hcHBpbmcgZm9yIE1JIGFu ZAogCSAqIHBpcGVfY29udHJvbCB3cml0ZXMgYmVjYXVzZSB0aGUgZ3B1IGRvZXNuJ3QgcHJvcGVy bHkgcmVkaXJlY3QgdGhlbQogCSAqIHRocm91Z2ggdGhlIHBwZ3R0IGZvciBub25fc2VjdXJlIGJh dGNoYnVmZmVycy4gKi8KLQlpZiAodW5saWtlbHkoSVNfR0VONihkZXZfcHJpdikgJiYKLQkgICAg cmVsb2MtPndyaXRlX2RvbWFpbiA9PSBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04pKSB7CisJ aWYgKHVubGlrZWx5KElTX0dFTjYoZWItPmk5MTUpICYmCisJCSAgICAgcmVsb2MtPndyaXRlX2Rv bWFpbiA9PSBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04pKSB7CiAJCXJldCA9IGk5MTVfdm1h X2JpbmQodGFyZ2V0X3ZtYSwgdGFyZ2V0X2k5MTVfb2JqLT5jYWNoZV9sZXZlbCwKIAkJCQkgICAg UElOX0dMT0JBTCk7CiAJCWlmIChXQVJOX09OQ0UocmV0LCAiVW5leHBlY3RlZCBmYWlsdXJlIHRv IGJpbmQgdGFyZ2V0IFZNQSEiKSkKQEAgLTYxMiw3ICs2MTksNyBAQCBpOTE1X2dlbV9leGVjYnVm ZmVyX3JlbG9jYXRlX2VudHJ5KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiAKIAkv KiBDaGVjayB0aGF0IHRoZSByZWxvY2F0aW9uIGFkZHJlc3MgaXMgdmFsaWQuLi4gKi8KIAlpZiAo dW5saWtlbHkocmVsb2MtPm9mZnNldCA+Ci0JCSAgICAgb2JqLT5iYXNlLnNpemUgLSAoY2FjaGUt PnVzZV82NGJpdF9yZWxvYyA/IDggOiA0KSkpIHsKKwkJICAgICBvYmotPmJhc2Uuc2l6ZSAtIChl Yi0+cmVsb2NfY2FjaGUudXNlXzY0Yml0X3JlbG9jID8gOCA6IDQpKSkgewogCQlEUk1fREVCVUco IlJlbG9jYXRpb24gYmV5b25kIG9iamVjdCBib3VuZHM6ICIKIAkJCSAgIm9iaiAlcCB0YXJnZXQg JWQgb2Zmc2V0ICVkIHNpemUgJWQuXG4iLAogCQkJICBvYmosIHJlbG9jLT50YXJnZXRfaGFuZGxl LApAQCAtNjI4LDcgKzYzNSw3IEBAIGk5MTVfZ2VtX2V4ZWNidWZmZXJfcmVsb2NhdGVfZW50cnko c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQog Ci0JcmV0ID0gcmVsb2NhdGVfZW50cnkob2JqLCByZWxvYywgY2FjaGUsIHRhcmdldF9vZmZzZXQp OworCXJldCA9IHJlbG9jYXRlX2VudHJ5KG9iaiwgcmVsb2MsICZlYi0+cmVsb2NfY2FjaGUsIHRh cmdldF9vZmZzZXQpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTYzNywxOSArNjQ0 LDE1IEBAIGk5MTVfZ2VtX2V4ZWNidWZmZXJfcmVsb2NhdGVfZW50cnkoc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaiwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotaTkxNV9nZW1f ZXhlY2J1ZmZlcl9yZWxvY2F0ZV92bWEoc3RydWN0IGk5MTVfdm1hICp2bWEsCi0JCQkJIHN0cnVj dCBlYl92bWFzICplYikKK3N0YXRpYyBpbnQgZWJfcmVsb2NhdGVfdm1hKHN0cnVjdCBpOTE1X3Zt YSAqdm1hLCBzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYikKIHsKICNkZWZpbmUgTl9SRUxPQyh4 KSAoKHgpIC8gc2l6ZW9mKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSkpCiAJ c3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IHN0YWNrX3JlbG9jW05fUkVMT0Mo NTEyKV07CiAJc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IF9fdXNlciAqdXNl cl9yZWxvY3M7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKmVudHJ5ID0gdm1h LT5leGVjX2VudHJ5OwotCXN0cnVjdCByZWxvY19jYWNoZSBjYWNoZTsKIAlpbnQgcmVtYWluLCBy ZXQgPSAwOwogCiAJdXNlcl9yZWxvY3MgPSB1NjRfdG9fdXNlcl9wdHIoZW50cnktPnJlbG9jc19w dHIpOwotCXJlbG9jX2NhY2hlX2luaXQoJmNhY2hlLCBlYi0+aTkxNSk7CiAKIAlyZW1haW4gPSBl bnRyeS0+cmVsb2NhdGlvbl9jb3VudDsKIAl3aGlsZSAocmVtYWluKSB7CkBAIC02NzgsNyArNjgx LDcgQEAgaTkxNV9nZW1fZXhlY2J1ZmZlcl9yZWxvY2F0ZV92bWEoc3RydWN0IGk5MTVfdm1hICp2 bWEsCiAJCWRvIHsKIAkJCXU2NCBvZmZzZXQgPSByLT5wcmVzdW1lZF9vZmZzZXQ7CiAKLQkJCXJl dCA9IGk5MTVfZ2VtX2V4ZWNidWZmZXJfcmVsb2NhdGVfZW50cnkodm1hLT5vYmosIGViLCByLCAm Y2FjaGUpOworCQkJcmV0ID0gZWJfcmVsb2NhdGVfZW50cnkodm1hLT5vYmosIGViLCByKTsKIAkJ CWlmIChyZXQpCiAJCQkJZ290byBvdXQ7CiAKQEAgLTcxMCwzOSArNzEzLDM1IEBAIGk5MTVfZ2Vt X2V4ZWNidWZmZXJfcmVsb2NhdGVfdm1hKHN0cnVjdCBpOTE1X3ZtYSAqdm1hLAogCX0KIAogb3V0 OgotCXJlbG9jX2NhY2hlX2ZpbmkoJmNhY2hlKTsKKwlyZWxvY19jYWNoZV9yZXNldCgmZWItPnJl bG9jX2NhY2hlKTsKIAlyZXR1cm4gcmV0OwogI3VuZGVmIE5fUkVMT0MKIH0KIAogc3RhdGljIGlu dAotaTkxNV9nZW1fZXhlY2J1ZmZlcl9yZWxvY2F0ZV92bWFfc2xvdyhzdHJ1Y3QgaTkxNV92bWEg KnZtYSwKLQkJCQkgICAgICBzdHJ1Y3QgZWJfdm1hcyAqZWIsCi0JCQkJICAgICAgc3RydWN0IGRy bV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5ICpyZWxvY3MpCitlYl9yZWxvY2F0ZV92bWFfc2xv dyhzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKKwkJICAgICBzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICpl YiwKKwkJICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgKnJlbG9jcykK IHsKIAljb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZW50cnkgPSB2bWEt PmV4ZWNfZW50cnk7Ci0Jc3RydWN0IHJlbG9jX2NhY2hlIGNhY2hlOwogCWludCBpLCByZXQgPSAw OwogCi0JcmVsb2NfY2FjaGVfaW5pdCgmY2FjaGUsIGViLT5pOTE1KTsKIAlmb3IgKGkgPSAwOyBp IDwgZW50cnktPnJlbG9jYXRpb25fY291bnQ7IGkrKykgewotCQlyZXQgPSBpOTE1X2dlbV9leGVj YnVmZmVyX3JlbG9jYXRlX2VudHJ5KHZtYS0+b2JqLCBlYiwgJnJlbG9jc1tpXSwgJmNhY2hlKTsK KwkJcmV0ID0gZWJfcmVsb2NhdGVfZW50cnkodm1hLT5vYmosIGViLCAmcmVsb2NzW2ldKTsKIAkJ aWYgKHJldCkKIAkJCWJyZWFrOwogCX0KLQlyZWxvY19jYWNoZV9maW5pKCZjYWNoZSk7Ci0KKwly ZWxvY19jYWNoZV9yZXNldCgmZWItPnJlbG9jX2NhY2hlKTsKIAlyZXR1cm4gcmV0OwogfQogCi1z dGF0aWMgaW50Ci1pOTE1X2dlbV9leGVjYnVmZmVyX3JlbG9jYXRlKHN0cnVjdCBlYl92bWFzICpl YikKK3N0YXRpYyBpbnQgZWJfcmVsb2NhdGUoc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIpCiB7 CiAJc3RydWN0IGk5MTVfdm1hICp2bWE7CiAJaW50IHJldCA9IDA7CiAKIAlsaXN0X2Zvcl9lYWNo X2VudHJ5KHZtYSwgJmViLT52bWFzLCBleGVjX2xpc3QpIHsKLQkJcmV0ID0gaTkxNV9nZW1fZXhl Y2J1ZmZlcl9yZWxvY2F0ZV92bWEodm1hLCBlYik7CisJCXJldCA9IGViX3JlbG9jYXRlX3ZtYSh2 bWEsIGViKTsKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwogCX0KQEAgLTc1Nyw5ICs3NTYsOSBAQCBz dGF0aWMgYm9vbCBvbmx5X21hcHBhYmxlX2Zvcl9yZWxvYyh1bnNpZ25lZCBpbnQgZmxhZ3MpCiB9 CiAKIHN0YXRpYyBpbnQKLWk5MTVfZ2VtX2V4ZWNidWZmZXJfcmVzZXJ2ZV92bWEoc3RydWN0IGk5 MTVfdm1hICp2bWEsCi0JCQkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAotCQkJCWJv b2wgKm5lZWRfcmVsb2MpCitlYl9yZXNlcnZlX3ZtYShzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKKwkg ICAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAorCSAgICAgICBib29sICpuZWVk X3JlbG9jKQogewogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSB2bWEtPm9iajsK IAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZW50cnkgPSB2bWEtPmV4ZWNfZW50 cnk7CkBAIC04NzgsMzQgKzg3NywyNyBAQCBlYl92bWFfbWlzcGxhY2VkKHN0cnVjdCBpOTE1X3Zt YSAqdm1hKQogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGludAotaTkxNV9nZW1fZXhlY2J1 ZmZlcl9yZXNlcnZlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKLQkJCSAgICBzdHJ1 Y3QgbGlzdF9oZWFkICp2bWFzLAotCQkJICAgIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgs Ci0JCQkgICAgYm9vbCAqbmVlZF9yZWxvY3MpCitzdGF0aWMgaW50IGViX3Jlc2VydmUoc3RydWN0 IGk5MTVfZXhlY2J1ZmZlciAqZWIpCiB7CisJY29uc3QgYm9vbCBoYXNfZmVuY2VkX2dwdV9hY2Nl c3MgPSBJTlRFTF9HRU4oZWItPmk5MTUpIDwgNDsKKwljb25zdCBib29sIG5lZWRzX3VuZmVuY2Vk X21hcCA9IElOVEVMX0lORk8oZWItPmk5MTUpLT51bmZlbmNlZF9uZWVkc19hbGlnbm1lbnQ7CiAJ c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKIAlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsK LQlzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG9yZGVy ZWRfdm1hczsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHBpbm5lZF92bWFzOwotCWJvb2wgaGFzX2ZlbmNl ZF9ncHVfYWNjZXNzID0gSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPCA0OwotCWJvb2wgbmVlZHNf dW5mZW5jZWRfbWFwID0gSU5URUxfSU5GTyhlbmdpbmUtPmk5MTUpLT51bmZlbmNlZF9uZWVkc19h bGlnbm1lbnQ7CiAJaW50IHJldHJ5OwogCi0Jdm0gPSBsaXN0X2ZpcnN0X2VudHJ5KHZtYXMsIHN0 cnVjdCBpOTE1X3ZtYSwgZXhlY19saXN0KS0+dm07Ci0KIAlJTklUX0xJU1RfSEVBRCgmb3JkZXJl ZF92bWFzKTsKIAlJTklUX0xJU1RfSEVBRCgmcGlubmVkX3ZtYXMpOwotCXdoaWxlICghbGlzdF9l bXB0eSh2bWFzKSkgeworCXdoaWxlICghbGlzdF9lbXB0eSgmZWItPnZtYXMpKSB7CiAJCXN0cnVj dCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICplbnRyeTsKIAkJYm9vbCBuZWVkX2ZlbmNlLCBu ZWVkX21hcHBhYmxlOwogCi0JCXZtYSA9IGxpc3RfZmlyc3RfZW50cnkodm1hcywgc3RydWN0IGk5 MTVfdm1hLCBleGVjX2xpc3QpOworCQl2bWEgPSBsaXN0X2ZpcnN0X2VudHJ5KCZlYi0+dm1hcywg c3RydWN0IGk5MTVfdm1hLCBleGVjX2xpc3QpOwogCQlvYmogPSB2bWEtPm9iajsKIAkJZW50cnkg PSB2bWEtPmV4ZWNfZW50cnk7CiAKLQkJaWYgKGN0eC0+ZmxhZ3MgJiBDT05URVhUX05PX1pFUk9N QVApCisJCWlmIChlYi0+Y3R4LT5mbGFncyAmIENPTlRFWFRfTk9fWkVST01BUCkKIAkJCWVudHJ5 LT5mbGFncyB8PSBfX0VYRUNfT0JKRUNUX05FRURTX0JJQVM7CiAKIAkJaWYgKCFoYXNfZmVuY2Vk X2dwdV9hY2Nlc3MpCkBAIC05MjcsOCArOTE5LDggQEAgaTkxNV9nZW1fZXhlY2J1ZmZlcl9yZXNl cnZlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKIAkJb2JqLT5iYXNlLnBlbmRpbmdf cmVhZF9kb21haW5zID0gSTkxNV9HRU1fR1BVX0RPTUFJTlMgJiB+STkxNV9HRU1fRE9NQUlOX0NP TU1BTkQ7CiAJCW9iai0+YmFzZS5wZW5kaW5nX3dyaXRlX2RvbWFpbiA9IDA7CiAJfQotCWxpc3Rf c3BsaWNlKCZvcmRlcmVkX3ZtYXMsIHZtYXMpOwotCWxpc3Rfc3BsaWNlKCZwaW5uZWRfdm1hcywg dm1hcyk7CisJbGlzdF9zcGxpY2UoJm9yZGVyZWRfdm1hcywgJmViLT52bWFzKTsKKwlsaXN0X3Nw bGljZSgmcGlubmVkX3ZtYXMsICZlYi0+dm1hcyk7CiAKIAkvKiBBdHRlbXB0IHRvIHBpbiBhbGwg b2YgdGhlIGJ1ZmZlcnMgaW50byB0aGUgR1RULgogCSAqIFRoaXMgaXMgZG9uZSBpbiAzIHBoYXNl czoKQEAgLTk0NywyNyArOTM5LDI0IEBAIGk5MTVfZ2VtX2V4ZWNidWZmZXJfcmVzZXJ2ZShzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCiAJCWludCByZXQgPSAwOwogCiAJCS8qIFVuYmlu ZCBhbnkgaWxsLWZpdHRpbmcgb2JqZWN0cyBvciBwaW4uICovCi0JCWxpc3RfZm9yX2VhY2hfZW50 cnkodm1hLCB2bWFzLCBleGVjX2xpc3QpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsICZl Yi0+dm1hcywgZXhlY19saXN0KSB7CiAJCQlpZiAoIWRybV9tbV9ub2RlX2FsbG9jYXRlZCgmdm1h LT5ub2RlKSkKIAkJCQljb250aW51ZTsKIAogCQkJaWYgKGViX3ZtYV9taXNwbGFjZWQodm1hKSkK IAkJCQlyZXQgPSBpOTE1X3ZtYV91bmJpbmQodm1hKTsKIAkJCWVsc2UKLQkJCQlyZXQgPSBpOTE1 X2dlbV9leGVjYnVmZmVyX3Jlc2VydmVfdm1hKHZtYSwKLQkJCQkJCQkJICAgICAgZW5naW5lLAot CQkJCQkJCQkgICAgICBuZWVkX3JlbG9jcyk7CisJCQkJcmV0ID0gZWJfcmVzZXJ2ZV92bWEodm1h LCBlYi0+ZW5naW5lLCAmZWItPm5lZWRfcmVsb2NzKTsKIAkJCWlmIChyZXQpCiAJCQkJZ290byBl cnI7CiAJCX0KIAogCQkvKiBCaW5kIGZyZXNoIG9iamVjdHMgKi8KLQkJbGlzdF9mb3JfZWFjaF9l bnRyeSh2bWEsIHZtYXMsIGV4ZWNfbGlzdCkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwg JmViLT52bWFzLCBleGVjX2xpc3QpIHsKIAkJCWlmIChkcm1fbW1fbm9kZV9hbGxvY2F0ZWQoJnZt YS0+bm9kZSkpCiAJCQkJY29udGludWU7CiAKLQkJCXJldCA9IGk5MTVfZ2VtX2V4ZWNidWZmZXJf cmVzZXJ2ZV92bWEodm1hLCBlbmdpbmUsCi0JCQkJCQkJICAgICAgbmVlZF9yZWxvY3MpOworCQkJ cmV0ID0gZWJfcmVzZXJ2ZV92bWEodm1hLCBlYi0+ZW5naW5lLCAmZWItPm5lZWRfcmVsb2NzKTsK IAkJCWlmIChyZXQpCiAJCQkJZ290byBlcnI7CiAJCX0KQEAgLTk3NywzOSArOTY2LDMwIEBAIGk5 MTVfZ2VtX2V4ZWNidWZmZXJfcmVzZXJ2ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUs CiAJCQlyZXR1cm4gcmV0OwogCiAJCS8qIERlY3JlbWVudCBwaW4gY291bnQgZm9yIGJvdW5kIG9i amVjdHMgKi8KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsIHZtYXMsIGV4ZWNfbGlzdCkKLQkJ CWk5MTVfZ2VtX2V4ZWNidWZmZXJfdW5yZXNlcnZlX3ZtYSh2bWEpOworCQlsaXN0X2Zvcl9lYWNo X2VudHJ5KHZtYSwgJmViLT52bWFzLCBleGVjX2xpc3QpCisJCQllYl91bnJlc2VydmVfdm1hKHZt YSk7CiAKLQkJcmV0ID0gaTkxNV9nZW1fZXZpY3Rfdm0odm0sIHRydWUpOworCQlyZXQgPSBpOTE1 X2dlbV9ldmljdF92bShlYi0+dm0sIHRydWUpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsK IAl9IHdoaWxlICgxKTsKIH0KIAogc3RhdGljIGludAotaTkxNV9nZW1fZXhlY2J1ZmZlcl9yZWxv Y2F0ZV9zbG93KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkJICBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX2V4ZWNidWZmZXIyICphcmdzLAotCQkJCSAgc3RydWN0IGRybV9maWxlICpmaWxlLAotCQkJ CSAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAotCQkJCSAgc3RydWN0IGViX3ZtYXMg KmViLAotCQkJCSAgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKmV4ZWMsCi0JCQkJ ICBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4KQorZWJfcmVsb2NhdGVfc2xvdyhzdHJ1Y3Qg aTkxNV9leGVjYnVmZmVyICplYikKIHsKKwljb25zdCB1bnNpZ25lZCBpbnQgY291bnQgPSBlYi0+ YXJncy0+YnVmZmVyX2NvdW50OworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAmZWItPmk5MTUt PmRybTsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgKnJlbG9jOwotCXN0 cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtOwogCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwotCWJv b2wgbmVlZF9yZWxvY3M7CiAJaW50ICpyZWxvY19vZmZzZXQ7CiAJaW50IGksIHRvdGFsLCByZXQ7 Ci0JdW5zaWduZWQgY291bnQgPSBhcmdzLT5idWZmZXJfY291bnQ7Ci0KLQl2bSA9IGxpc3RfZmly c3RfZW50cnkoJmViLT52bWFzLCBzdHJ1Y3QgaTkxNV92bWEsIGV4ZWNfbGlzdCktPnZtOwogCiAJ LyogV2UgbWF5IHByb2Nlc3MgYW5vdGhlciBleGVjYnVmZmVyIGR1cmluZyB0aGUgdW5sb2NrLi4u ICovCiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZlYi0+dm1hcykpIHsKIAkJdm1hID0gbGlzdF9maXJz dF9lbnRyeSgmZWItPnZtYXMsIHN0cnVjdCBpOTE1X3ZtYSwgZXhlY19saXN0KTsKIAkJbGlzdF9k ZWxfaW5pdCgmdm1hLT5leGVjX2xpc3QpOwotCQlpOTE1X2dlbV9leGVjYnVmZmVyX3VucmVzZXJ2 ZV92bWEodm1hKTsKKwkJZWJfdW5yZXNlcnZlX3ZtYSh2bWEpOwogCQlpOTE1X3ZtYV9wdXQodm1h KTsKIAl9CiAKQEAgLTEwMTcsNyArOTk3LDcgQEAgaTkxNV9nZW1fZXhlY2J1ZmZlcl9yZWxvY2F0 ZV9zbG93KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAKIAl0b3RhbCA9IDA7CiAJZm9yIChpID0g MDsgaSA8IGNvdW50OyBpKyspCi0JCXRvdGFsICs9IGV4ZWNbaV0ucmVsb2NhdGlvbl9jb3VudDsK KwkJdG90YWwgKz0gZWItPmV4ZWNbaV0ucmVsb2NhdGlvbl9jb3VudDsKIAogCXJlbG9jX29mZnNl dCA9IGRybV9tYWxsb2NfYWIoY291bnQsIHNpemVvZigqcmVsb2Nfb2Zmc2V0KSk7CiAJcmVsb2Mg PSBkcm1fbWFsbG9jX2FiKHRvdGFsLCBzaXplb2YoKnJlbG9jKSk7CkBAIC0xMDM0LDEwICsxMDE0 LDEwIEBAIGk5MTVfZ2VtX2V4ZWNidWZmZXJfcmVsb2NhdGVfc2xvdyhzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LAogCQl1NjQgaW52YWxpZF9vZmZzZXQgPSAodTY0KS0xOwogCQlpbnQgajsKIAotCQl1 c2VyX3JlbG9jcyA9IHU2NF90b191c2VyX3B0cihleGVjW2ldLnJlbG9jc19wdHIpOworCQl1c2Vy X3JlbG9jcyA9IHU2NF90b191c2VyX3B0cihlYi0+ZXhlY1tpXS5yZWxvY3NfcHRyKTsKIAogCQlp ZiAoY29weV9mcm9tX3VzZXIocmVsb2MrdG90YWwsIHVzZXJfcmVsb2NzLAotCQkJCSAgIGV4ZWNb aV0ucmVsb2NhdGlvbl9jb3VudCAqIHNpemVvZigqcmVsb2MpKSkgeworCQkJCSAgIGViLT5leGVj W2ldLnJlbG9jYXRpb25fY291bnQgKiBzaXplb2YoKnJlbG9jKSkpIHsKIAkJCXJldCA9IC1FRkFV TFQ7CiAJCQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJCQlnb3RvIGVycjsKQEAg LTEwNTIsNyArMTAzMiw3IEBAIGk5MTVfZ2VtX2V4ZWNidWZmZXJfcmVsb2NhdGVfc2xvdyhzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LAogCQkgKiBoYXBwZW5lZCB3ZSB3b3VsZCBtYWtlIHRoZSBtaXN0 YWtlIG9mIGFzc3VtaW5nIHRoYXQgdGhlCiAJCSAqIHJlbG9jYXRpb25zIHdlcmUgdmFsaWQuCiAJ CSAqLwotCQlmb3IgKGogPSAwOyBqIDwgZXhlY1tpXS5yZWxvY2F0aW9uX2NvdW50OyBqKyspIHsK KwkJZm9yIChqID0gMDsgaiA8IGViLT5leGVjW2ldLnJlbG9jYXRpb25fY291bnQ7IGorKykgewog CQkJaWYgKF9fY29weV90b191c2VyKCZ1c2VyX3JlbG9jc1tqXS5wcmVzdW1lZF9vZmZzZXQsCiAJ CQkJCSAgICZpbnZhbGlkX29mZnNldCwKIAkJCQkJICAgc2l6ZW9mKGludmFsaWRfb2Zmc2V0KSkp IHsKQEAgLTEwNjMsNyArMTA0Myw3IEBAIGk5MTVfZ2VtX2V4ZWNidWZmZXJfcmVsb2NhdGVfc2xv dyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQl9CiAKIAkJcmVsb2Nfb2Zmc2V0W2ldID0gdG90 YWw7Ci0JCXRvdGFsICs9IGV4ZWNbaV0ucmVsb2NhdGlvbl9jb3VudDsKKwkJdG90YWwgKz0gZWIt PmV4ZWNbaV0ucmVsb2NhdGlvbl9jb3VudDsKIAl9CiAKIAlyZXQgPSBpOTE1X211dGV4X2xvY2tf aW50ZXJydXB0aWJsZShkZXYpOwpAQCAtMTA3NCwyMCArMTA1NCwxOCBAQCBpOTE1X2dlbV9leGVj YnVmZmVyX3JlbG9jYXRlX3Nsb3coc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAogCS8qIHJlYWNx dWlyZSB0aGUgb2JqZWN0cyAqLwogCWViX3Jlc2V0KGViKTsKLQlyZXQgPSBlYl9sb29rdXBfdm1h cyhlYiwgZXhlYywgYXJncywgdm0sIGZpbGUpOworCXJldCA9IGViX2xvb2t1cF92bWFzKGViKTsK IAlpZiAocmV0KQogCQlnb3RvIGVycjsKIAotCW5lZWRfcmVsb2NzID0gKGFyZ3MtPmZsYWdzICYg STkxNV9FWEVDX05PX1JFTE9DKSA9PSAwOwotCXJldCA9IGk5MTVfZ2VtX2V4ZWNidWZmZXJfcmVz ZXJ2ZShlbmdpbmUsICZlYi0+dm1hcywgY3R4LAotCQkJCQkgICZuZWVkX3JlbG9jcyk7CisJcmV0 ID0gZWJfcmVzZXJ2ZShlYik7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKIAlsaXN0X2Zvcl9l YWNoX2VudHJ5KHZtYSwgJmViLT52bWFzLCBleGVjX2xpc3QpIHsKLQkJaW50IG9mZnNldCA9IHZt YS0+ZXhlY19lbnRyeSAtIGV4ZWM7Ci0JCXJldCA9IGk5MTVfZ2VtX2V4ZWNidWZmZXJfcmVsb2Nh dGVfdm1hX3Nsb3codm1hLCBlYiwKLQkJCQkJCQkgICAgcmVsb2MgKyByZWxvY19vZmZzZXRbb2Zm c2V0XSk7CisJCWludCBpZHggPSB2bWEtPmV4ZWNfZW50cnkgLSBlYi0+ZXhlYzsKKworCQlyZXQg PSBlYl9yZWxvY2F0ZV92bWFfc2xvdyh2bWEsIGViLCByZWxvYyArIHJlbG9jX29mZnNldFtpZHhd KTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyOwogCX0KQEAgLTExMDUsMTMgKzEwODMsMTIgQEAg aTkxNV9nZW1fZXhlY2J1ZmZlcl9yZWxvY2F0ZV9zbG93KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs CiB9CiAKIHN0YXRpYyBpbnQKLWk5MTVfZ2VtX2V4ZWNidWZmZXJfbW92ZV90b19ncHUoc3RydWN0 IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsCi0JCQkJc3RydWN0IGxpc3RfaGVhZCAqdm1hcykK K2ViX21vdmVfdG9fZ3B1KHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViKQogewogCXN0cnVjdCBp OTE1X3ZtYSAqdm1hOwogCWludCByZXQ7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgdm1h cywgZXhlY19saXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsICZlYi0+dm1hcywgZXhl Y19saXN0KSB7CiAJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSB2bWEtPm9iajsK IAogCQlpZiAodm1hLT5leGVjX2VudHJ5LT5mbGFncyAmIEVYRUNfT0JKRUNUX0NBUFRVUkUpIHsK QEAgLTExMjEsOSArMTA5OCw5IEBAIGk5MTVfZ2VtX2V4ZWNidWZmZXJfbW92ZV90b19ncHUoc3Ry dWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsCiAJCQlpZiAodW5saWtlbHkoIWNhcHR1cmUp KQogCQkJCXJldHVybiAtRU5PTUVNOwogCi0JCQljYXB0dXJlLT5uZXh0ID0gcmVxLT5jYXB0dXJl X2xpc3Q7CisJCQljYXB0dXJlLT5uZXh0ID0gZWItPnJlcXVlc3QtPmNhcHR1cmVfbGlzdDsKIAkJ CWNhcHR1cmUtPnZtYSA9IHZtYTsKLQkJCXJlcS0+Y2FwdHVyZV9saXN0ID0gY2FwdHVyZTsKKwkJ CWViLT5yZXF1ZXN0LT5jYXB0dXJlX2xpc3QgPSBjYXB0dXJlOwogCQl9CiAKIAkJaWYgKHZtYS0+ ZXhlY19lbnRyeS0+ZmxhZ3MgJiBFWEVDX09CSkVDVF9BU1lOQykKQEAgLTExMzUsMjIgKzExMTIs MjIgQEAgaTkxNV9nZW1fZXhlY2J1ZmZlcl9tb3ZlX3RvX2dwdShzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X3JlcXVlc3QgKnJlcSwKIAkJfQogCiAJCXJldCA9IGk5MTVfZ2VtX3JlcXVlc3RfYXdhaXRfb2Jq ZWN0Ci0JCQkocmVxLCBvYmosIG9iai0+YmFzZS5wZW5kaW5nX3dyaXRlX2RvbWFpbik7CisJCQko ZWItPnJlcXVlc3QsIG9iaiwgb2JqLT5iYXNlLnBlbmRpbmdfd3JpdGVfZG9tYWluKTsKIAkJaWYg KHJldCkKIAkJCXJldHVybiByZXQ7CiAJfQogCiAJLyogVW5jb25kaXRpb25hbGx5IGZsdXNoIGFu eSBjaGlwc2V0IGNhY2hlcyAoZm9yIHN0cmVhbWluZyB3cml0ZXMpLiAqLwotCWk5MTVfZ2VtX2No aXBzZXRfZmx1c2gocmVxLT5lbmdpbmUtPmk5MTUpOworCWk5MTVfZ2VtX2NoaXBzZXRfZmx1c2go ZWItPmk5MTUpOwogCiAJLyogVW5jb25kaXRpb25hbGx5IGludmFsaWRhdGUgR1BVIGNhY2hlcyBh bmQgVExCcy4gKi8KLQlyZXR1cm4gcmVxLT5lbmdpbmUtPmVtaXRfZmx1c2gocmVxLCBFTUlUX0lO VkFMSURBVEUpOworCXJldHVybiBlYi0+ZW5naW5lLT5lbWl0X2ZsdXNoKGViLT5yZXF1ZXN0LCBF TUlUX0lOVkFMSURBVEUpOwogfQogCiBzdGF0aWMgYm9vbAogaTkxNV9nZW1fY2hlY2tfZXhlY2J1 ZmZlcihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyICpleGVjKQogewotCWlmIChleGVj LT5mbGFncyAmIF9fSTkxNV9FWEVDX1VOS05PV05fRkxBR1MpCisJaWYgKGV4ZWMtPmZsYWdzICYg X19JOTE1X0VYRUNfSUxMRUdBTF9GTEFHUykKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyogS2VybmVs IGNsaXBwaW5nIHdhcyBhIERSSTEgbWlzZmVhdHVyZSAqLwpAQCAtMTI0NywyMiArMTIyNCwyNCBA QCB2YWxpZGF0ZV9leGVjX2xpc3Qoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAlyZXR1cm4gMDsK IH0KIAotc3RhdGljIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICoKLWk5MTVfZ2VtX3ZhbGlkYXRl X2NvbnRleHQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlLAot CQkJICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIGNvbnN0IHUzMiBjdHhfaWQpCitz dGF0aWMgaW50IGViX3NlbGVjdF9jb250ZXh0KHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViKQog eworCXVuc2lnbmVkIGludCBjdHhfaWQgPSBpOTE1X2V4ZWNidWZmZXIyX2dldF9jb250ZXh0X2lk KCplYi0+YXJncyk7CiAJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eDsKIAotCWN0eCA9IGk5 MTVfZ2VtX2NvbnRleHRfbG9va3VwKGZpbGUtPmRyaXZlcl9wcml2LCBjdHhfaWQpOwotCWlmIChJ U19FUlIoY3R4KSkKLQkJcmV0dXJuIGN0eDsKKwljdHggPSBpOTE1X2dlbV9jb250ZXh0X2xvb2t1 cChlYi0+ZmlsZS0+ZHJpdmVyX3ByaXYsIGN0eF9pZCk7CisJaWYgKHVubGlrZWx5KElTX0VSUihj dHgpKSkKKwkJcmV0dXJuIFBUUl9FUlIoY3R4KTsKIAotCWlmIChpOTE1X2dlbV9jb250ZXh0X2lz X2Jhbm5lZChjdHgpKSB7CisJaWYgKHVubGlrZWx5KGk5MTVfZ2VtX2NvbnRleHRfaXNfYmFubmVk KGN0eCkpKSB7CiAJCURSTV9ERUJVRygiQ29udGV4dCAldSB0cmllZCB0byBzdWJtaXQgd2hpbGUg YmFubmVkXG4iLCBjdHhfaWQpOwotCQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKKwkJcmV0dXJuIC1F SU87CiAJfQogCi0JcmV0dXJuIGN0eDsKKwllYi0+Y3R4ID0gaTkxNV9nZW1fY29udGV4dF9nZXQo Y3R4KTsKKwllYi0+dm0gPSBjdHgtPnBwZ3R0ID8gJmN0eC0+cHBndHQtPmJhc2UgOiAmZWItPmk5 MTUtPmdndHQuYmFzZTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgYm9vbCBncHVfd3JpdGVf bmVlZHNfY2xmbHVzaChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQpAQCAtMTMyNywx MiArMTMwNiwxMSBAQCBzdGF0aWMgdm9pZCBlYl9leHBvcnRfZmVuY2Uoc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaiwKIH0KIAogc3RhdGljIHZvaWQKLWk5MTVfZ2VtX2V4ZWNidWZmZXJf bW92ZV90b19hY3RpdmUoc3RydWN0IGxpc3RfaGVhZCAqdm1hcywKLQkJCQkgICBzdHJ1Y3QgZHJt X2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkKK2ViX21vdmVfdG9fYWN0aXZlKHN0cnVjdCBpOTE1X2V4 ZWNidWZmZXIgKmViKQogewogCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwogCi0JbGlzdF9mb3JfZWFj aF9lbnRyeSh2bWEsIHZtYXMsIGV4ZWNfbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkodm1h LCAmZWItPnZtYXMsIGV4ZWNfbGlzdCkgewogCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqID0gdm1hLT5vYmo7CiAKIAkJb2JqLT5iYXNlLndyaXRlX2RvbWFpbiA9IG9iai0+YmFzZS5w ZW5kaW5nX3dyaXRlX2RvbWFpbjsKQEAgLTEzNDIsOCArMTMyMCw4IEBAIGk5MTVfZ2VtX2V4ZWNi dWZmZXJfbW92ZV90b19hY3RpdmUoc3RydWN0IGxpc3RfaGVhZCAqdm1hcywKIAkJCW9iai0+YmFz ZS5wZW5kaW5nX3JlYWRfZG9tYWlucyB8PSBvYmotPmJhc2UucmVhZF9kb21haW5zOwogCQlvYmot PmJhc2UucmVhZF9kb21haW5zID0gb2JqLT5iYXNlLnBlbmRpbmdfcmVhZF9kb21haW5zOwogCi0J CWk5MTVfdm1hX21vdmVfdG9fYWN0aXZlKHZtYSwgcmVxLCB2bWEtPmV4ZWNfZW50cnktPmZsYWdz KTsKLQkJZWJfZXhwb3J0X2ZlbmNlKG9iaiwgcmVxLCB2bWEtPmV4ZWNfZW50cnktPmZsYWdzKTsK KwkJaTkxNV92bWFfbW92ZV90b19hY3RpdmUodm1hLCBlYi0+cmVxdWVzdCwgdm1hLT5leGVjX2Vu dHJ5LT5mbGFncyk7CisJCWViX2V4cG9ydF9mZW5jZShvYmosIGViLT5yZXF1ZXN0LCB2bWEtPmV4 ZWNfZW50cnktPmZsYWdzKTsKIAl9CiB9CiAKQEAgLTEzNzMsMjkgKzEzNTEsMjIgQEAgaTkxNV9y ZXNldF9nZW43X3NvbF9vZmZzZXRzKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQog CXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGk5MTVfdm1hICoKLWk5MTVfZ2VtX2V4ZWNi dWZmZXJfcGFyc2Uoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAotCQkJICBzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqc2hhZG93X2V4ZWNfZW50cnksCi0JCQkgIHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpiYXRjaF9vYmosCi0JCQkgIHN0cnVjdCBlYl92bWFzICpl YiwKLQkJCSAgdTMyIGJhdGNoX3N0YXJ0X29mZnNldCwKLQkJCSAgdTMyIGJhdGNoX2xlbiwKLQkJ CSAgYm9vbCBpc19tYXN0ZXIpCitzdGF0aWMgc3RydWN0IGk5MTVfdm1hICplYl9wYXJzZShzdHJ1 Y3QgaTkxNV9leGVjYnVmZmVyICplYiwgYm9vbCBpc19tYXN0ZXIpCiB7CiAJc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKnNoYWRvd19iYXRjaF9vYmo7CiAJc3RydWN0IGk5MTVfdm1hICp2bWE7 CiAJaW50IHJldDsKIAotCXNoYWRvd19iYXRjaF9vYmogPSBpOTE1X2dlbV9iYXRjaF9wb29sX2dl dCgmZW5naW5lLT5iYXRjaF9wb29sLAotCQkJCQkJICAgUEFHRV9BTElHTihiYXRjaF9sZW4pKTsK KwlzaGFkb3dfYmF0Y2hfb2JqID0gaTkxNV9nZW1fYmF0Y2hfcG9vbF9nZXQoJmViLT5lbmdpbmUt PmJhdGNoX3Bvb2wsCisJCQkJCQkgICBQQUdFX0FMSUdOKGViLT5iYXRjaF9sZW4pKTsKIAlpZiAo SVNfRVJSKHNoYWRvd19iYXRjaF9vYmopKQogCQlyZXR1cm4gRVJSX0NBU1Qoc2hhZG93X2JhdGNo X29iaik7CiAKLQlyZXQgPSBpbnRlbF9lbmdpbmVfY21kX3BhcnNlcihlbmdpbmUsCi0JCQkJICAg ICAgYmF0Y2hfb2JqLAorCXJldCA9IGludGVsX2VuZ2luZV9jbWRfcGFyc2VyKGViLT5lbmdpbmUs CisJCQkJICAgICAgZWItPmJhdGNoLT5vYmosCiAJCQkJICAgICAgc2hhZG93X2JhdGNoX29iaiwK LQkJCQkgICAgICBiYXRjaF9zdGFydF9vZmZzZXQsCi0JCQkJICAgICAgYmF0Y2hfbGVuLAorCQkJ CSAgICAgIGViLT5iYXRjaF9zdGFydF9vZmZzZXQsCisJCQkJICAgICAgZWItPmJhdGNoX2xlbiwK IAkJCQkgICAgICBpc19tYXN0ZXIpOwogCWlmIChyZXQpIHsKIAkJaWYgKHJldCA9PSAtRUFDQ0VT KSAvKiB1bmhhbmRsZWQgY2hhaW5lZCBiYXRjaCAqLwpAQCAtMTQwOSw5ICsxMzgwLDggQEAgaTkx NV9nZW1fZXhlY2J1ZmZlcl9wYXJzZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCiAJ aWYgKElTX0VSUih2bWEpKQogCQlnb3RvIG91dDsKIAotCW1lbXNldChzaGFkb3dfZXhlY19lbnRy eSwgMCwgc2l6ZW9mKCpzaGFkb3dfZXhlY19lbnRyeSkpOwotCi0Jdm1hLT5leGVjX2VudHJ5ID0g c2hhZG93X2V4ZWNfZW50cnk7CisJdm1hLT5leGVjX2VudHJ5ID0KKwkJbWVtc2V0KCZlYi0+c2hh ZG93X2V4ZWNfZW50cnksIDAsIHNpemVvZigqdm1hLT5leGVjX2VudHJ5KSk7CiAJdm1hLT5leGVj X2VudHJ5LT5mbGFncyA9IF9fRVhFQ19PQkpFQ1RfSEFTX1BJTjsKIAlpOTE1X2dlbV9vYmplY3Rf Z2V0KHNoYWRvd19iYXRjaF9vYmopOwogCWxpc3RfYWRkX3RhaWwoJnZtYS0+ZXhlY19saXN0LCAm ZWItPnZtYXMpOwpAQCAtMTQzMCw0NiArMTQwMCwzMyBAQCBhZGRfdG9fY2xpZW50KHN0cnVjdCBk cm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLAogfQogCiBzdGF0aWMgaW50Ci1leGVjYnVmX3N1Ym1p dChzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyX3BhcmFtcyAqcGFyYW1zLAotCSAgICAgICBzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyICphcmdzLAotCSAgICAgICBzdHJ1Y3QgbGlzdF9oZWFk ICp2bWFzKQorZXhlY2J1Zl9zdWJtaXQoc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIpCiB7Ci0J dTY0IGV4ZWNfc3RhcnQsIGV4ZWNfbGVuOwogCWludCByZXQ7CiAKLQlyZXQgPSBpOTE1X2dlbV9l eGVjYnVmZmVyX21vdmVfdG9fZ3B1KHBhcmFtcy0+cmVxdWVzdCwgdm1hcyk7CisJcmV0ID0gZWJf bW92ZV90b19ncHUoZWIpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBpOTE1 X3N3aXRjaF9jb250ZXh0KHBhcmFtcy0+cmVxdWVzdCk7CisJcmV0ID0gaTkxNV9zd2l0Y2hfY29u dGV4dChlYi0+cmVxdWVzdCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWlmIChhcmdz LT5mbGFncyAmIEk5MTVfRVhFQ19DT05TVEFOVFNfTUFTSykgewotCQlEUk1fREVCVUcoIkk5MTVf RVhFQ19DT05TVEFOVFNfKiB1bnN1cHBvcnRlZFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0K LQotCWlmIChhcmdzLT5mbGFncyAmIEk5MTVfRVhFQ19HRU43X1NPTF9SRVNFVCkgewotCQlyZXQg PSBpOTE1X3Jlc2V0X2dlbjdfc29sX29mZnNldHMocGFyYW1zLT5yZXF1ZXN0KTsKKwlpZiAoZWIt PmFyZ3MtPmZsYWdzICYgSTkxNV9FWEVDX0dFTjdfU09MX1JFU0VUKSB7CisJCXJldCA9IGk5MTVf cmVzZXRfZ2VuN19zb2xfb2Zmc2V0cyhlYi0+cmVxdWVzdCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1 cm4gcmV0OwogCX0KIAotCWV4ZWNfbGVuICAgPSBhcmdzLT5iYXRjaF9sZW47Ci0JZXhlY19zdGFy dCA9IHBhcmFtcy0+YmF0Y2gtPm5vZGUuc3RhcnQgKwotCQkgICAgIHBhcmFtcy0+YXJnc19iYXRj aF9zdGFydF9vZmZzZXQ7Ci0KLQlpZiAoZXhlY19sZW4gPT0gMCkKLQkJZXhlY19sZW4gPSBwYXJh bXMtPmJhdGNoLT5zaXplIC0gcGFyYW1zLT5hcmdzX2JhdGNoX3N0YXJ0X29mZnNldDsKLQotCXJl dCA9IHBhcmFtcy0+ZW5naW5lLT5lbWl0X2JiX3N0YXJ0KHBhcmFtcy0+cmVxdWVzdCwKLQkJCQkJ ICAgIGV4ZWNfc3RhcnQsIGV4ZWNfbGVuLAotCQkJCQkgICAgcGFyYW1zLT5kaXNwYXRjaF9mbGFn cyk7CisJcmV0ID0gZWItPmVuZ2luZS0+ZW1pdF9iYl9zdGFydChlYi0+cmVxdWVzdCwKKwkJCQkJ ZWItPmJhdGNoLT5ub2RlLnN0YXJ0ICsKKwkJCQkJZWItPmJhdGNoX3N0YXJ0X29mZnNldCwKKwkJ CQkJZWItPmJhdGNoX2xlbiwKKwkJCQkJZWItPmRpc3BhdGNoX2ZsYWdzKTsKIAlpZiAocmV0KQog CQlyZXR1cm4gcmV0OwogCi0JaTkxNV9nZW1fZXhlY2J1ZmZlcl9tb3ZlX3RvX2FjdGl2ZSh2bWFz LCBwYXJhbXMtPnJlcXVlc3QpOworCWViX21vdmVfdG9fYWN0aXZlKGViKTsKIAogCXJldHVybiAw OwogfQpAQCAtMTU1MSwyNyArMTUwOCwxNiBAQCBlYl9zZWxlY3RfZW5naW5lKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIH0KIAogc3RhdGljIGludAotaTkxNV9nZW1fZG9fZXhl Y2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAoraTkxNV9nZW1fZG9f ZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkgICAgICAgc3RydWN0IGRybV9m aWxlICpmaWxlLAogCQkgICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiAqYXJn cywKIAkJICAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICpleGVjKQogewot CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKLQlzdHJ1 Y3QgaTkxNV9nZ3R0ICpnZ3R0ID0gJmRldl9wcml2LT5nZ3R0OwotCXN0cnVjdCBlYl92bWFzICpl YjsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBzaGFkb3dfZXhlY19lbnRyeTsK LQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Ci0Jc3RydWN0IGk5MTVfZ2VtX2NvbnRl eHQgKmN0eDsKLQlzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bTsKLQlzdHJ1Y3QgaTkxNV9l eGVjYnVmZmVyX3BhcmFtcyBwYXJhbXNfbWFzdGVyOyAvKiBYWFg6IHdpbGwgYmUgcmVtb3ZlZCBs YXRlciAqLwotCXN0cnVjdCBpOTE1X2V4ZWNidWZmZXJfcGFyYW1zICpwYXJhbXMgPSAmcGFyYW1z X21hc3RlcjsKLQljb25zdCB1MzIgY3R4X2lkID0gaTkxNV9leGVjYnVmZmVyMl9nZXRfY29udGV4 dF9pZCgqYXJncyk7Ci0JdTMyIGRpc3BhdGNoX2ZsYWdzOworCXN0cnVjdCBpOTE1X2V4ZWNidWZm ZXIgZWI7CiAJc3RydWN0IGRtYV9mZW5jZSAqaW5fZmVuY2UgPSBOVUxMOwogCXN0cnVjdCBzeW5j X2ZpbGUgKm91dF9mZW5jZSA9IE5VTEw7CiAJaW50IG91dF9mZW5jZV9mZCA9IC0xOwogCWludCBy ZXQ7Ci0JYm9vbCBuZWVkX3JlbG9jczsKIAogCWlmICghaTkxNV9nZW1fY2hlY2tfZXhlY2J1ZmZl cihhcmdzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNTgwLDM3ICsxNTI2LDQyIEBAIGk5MTVf Z2VtX2RvX2V4ZWNidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAlp ZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JZGlzcGF0Y2hfZmxhZ3MgPSAwOworCWViLmk5MTUg PSB0b19pOTE1KGRldik7CisJZWIuZmlsZSA9IGZpbGU7CisJZWIuYXJncyA9IGFyZ3M7CisJZWIu ZXhlYyA9IGV4ZWM7CisJZWIubmVlZF9yZWxvY3MgPSAoYXJncy0+ZmxhZ3MgJiBJOTE1X0VYRUNf Tk9fUkVMT0MpID09IDA7CisJcmVsb2NfY2FjaGVfaW5pdCgmZWIucmVsb2NfY2FjaGUsIGViLmk5 MTUpOworCisJZWIuYmF0Y2hfc3RhcnRfb2Zmc2V0ID0gYXJncy0+YmF0Y2hfc3RhcnRfb2Zmc2V0 OworCWViLmJhdGNoX2xlbiA9IGFyZ3MtPmJhdGNoX2xlbjsKKworCWViLmRpc3BhdGNoX2ZsYWdz ID0gMDsKIAlpZiAoYXJncy0+ZmxhZ3MgJiBJOTE1X0VYRUNfU0VDVVJFKSB7CiAJCWlmICghZHJt X2lzX2N1cnJlbnRfbWFzdGVyKGZpbGUpIHx8ICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQkg ICAgcmV0dXJuIC1FUEVSTTsKIAotCQlkaXNwYXRjaF9mbGFncyB8PSBJOTE1X0RJU1BBVENIX1NF Q1VSRTsKKwkJZWIuZGlzcGF0Y2hfZmxhZ3MgfD0gSTkxNV9ESVNQQVRDSF9TRUNVUkU7CiAJfQog CWlmIChhcmdzLT5mbGFncyAmIEk5MTVfRVhFQ19JU19QSU5ORUQpCi0JCWRpc3BhdGNoX2ZsYWdz IHw9IEk5MTVfRElTUEFUQ0hfUElOTkVEOwotCi0JZW5naW5lID0gZWJfc2VsZWN0X2VuZ2luZShk ZXZfcHJpdiwgZmlsZSwgYXJncyk7Ci0JaWYgKCFlbmdpbmUpCi0JCXJldHVybiAtRUlOVkFMOwor CQllYi5kaXNwYXRjaF9mbGFncyB8PSBJOTE1X0RJU1BBVENIX1BJTk5FRDsKIAotCWlmIChhcmdz LT5idWZmZXJfY291bnQgPCAxKSB7Ci0JCURSTV9ERUJVRygiZXhlY2J1ZiB3aXRoICVkIGJ1ZmZl cnNcbiIsIGFyZ3MtPmJ1ZmZlcl9jb3VudCk7CisJZWIuZW5naW5lID0gZWJfc2VsZWN0X2VuZ2lu ZShlYi5pOTE1LCBmaWxlLCBhcmdzKTsKKwlpZiAoIWViLmVuZ2luZSkKIAkJcmV0dXJuIC1FSU5W QUw7Ci0JfQogCiAJaWYgKGFyZ3MtPmZsYWdzICYgSTkxNV9FWEVDX1JFU09VUkNFX1NUUkVBTUVS KSB7Ci0JCWlmICghSEFTX1JFU09VUkNFX1NUUkVBTUVSKGRldl9wcml2KSkgeworCQlpZiAoIUhB U19SRVNPVVJDRV9TVFJFQU1FUihlYi5pOTE1KSkgewogCQkJRFJNX0RFQlVHKCJSUyBpcyBvbmx5 IGFsbG93ZWQgZm9yIEhhc3dlbGwsIEdlbjggYW5kIGFib3ZlXG4iKTsKIAkJCXJldHVybiAtRUlO VkFMOwogCQl9Ci0JCWlmIChlbmdpbmUtPmlkICE9IFJDUykgeworCQlpZiAoZWIuZW5naW5lLT5p ZCAhPSBSQ1MpIHsKIAkJCURSTV9ERUJVRygiUlMgaXMgbm90IGF2YWlsYWJsZSBvbiAlc1xuIiwK LQkJCQkgZW5naW5lLT5uYW1lKTsKKwkJCQkgZWIuZW5naW5lLT5uYW1lKTsKIAkJCXJldHVybiAt RUlOVkFMOwogCQl9CiAKLQkJZGlzcGF0Y2hfZmxhZ3MgfD0gSTkxNV9ESVNQQVRDSF9SUzsKKwkJ ZWIuZGlzcGF0Y2hfZmxhZ3MgfD0gSTkxNV9ESVNQQVRDSF9SUzsKIAl9CiAKIAlpZiAoYXJncy0+ ZmxhZ3MgJiBJOTE1X0VYRUNfRkVOQ0VfSU4pIHsKQEAgLTE2MzMsNTkgKzE1ODQsNDQgQEAgaTkx NV9nZW1fZG9fZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAog CSAqIHdha2VyZWYgdGhhdCB3ZSBob2xkIHVudGlsIHRoZSBHUFUgaGFzIGJlZW4gaWRsZSBmb3Ig YXQgbGVhc3QKIAkgKiAxMDBtcy4KIAkgKi8KLQlpbnRlbF9ydW50aW1lX3BtX2dldChkZXZfcHJp dik7CisJaW50ZWxfcnVudGltZV9wbV9nZXQoZWIuaTkxNSk7CiAKIAlyZXQgPSBpOTE1X211dGV4 X2xvY2tfaW50ZXJydXB0aWJsZShkZXYpOwogCWlmIChyZXQpCiAJCWdvdG8gcHJlX211dGV4X2Vy cjsKIAotCWN0eCA9IGk5MTVfZ2VtX3ZhbGlkYXRlX2NvbnRleHQoZGV2LCBmaWxlLCBlbmdpbmUs IGN0eF9pZCk7Ci0JaWYgKElTX0VSUihjdHgpKSB7CisJcmV0ID0gZWJfc2VsZWN0X2NvbnRleHQo JmViKTsKKwlpZiAocmV0KSB7CiAJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwot CQlyZXQgPSBQVFJfRVJSKGN0eCk7CiAJCWdvdG8gcHJlX211dGV4X2VycjsKIAl9CiAKLQlpOTE1 X2dlbV9jb250ZXh0X2dldChjdHgpOwotCi0JaWYgKGN0eC0+cHBndHQpCi0JCXZtID0gJmN0eC0+ cHBndHQtPmJhc2U7Ci0JZWxzZQotCQl2bSA9ICZnZ3R0LT5iYXNlOwotCi0JbWVtc2V0KCZwYXJh bXNfbWFzdGVyLCAweDAwLCBzaXplb2YocGFyYW1zX21hc3RlcikpOwotCi0JZWIgPSBlYl9jcmVh dGUoZGV2X3ByaXYsIGFyZ3MpOwotCWlmIChlYiA9PSBOVUxMKSB7Ci0JCWk5MTVfZ2VtX2NvbnRl eHRfcHV0KGN0eCk7CisJaWYgKGViX2NyZWF0ZSgmZWIpKSB7CisJCWk5MTVfZ2VtX2NvbnRleHRf cHV0KGViLmN0eCk7CiAJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCQlyZXQg PSAtRU5PTUVNOwogCQlnb3RvIHByZV9tdXRleF9lcnI7CiAJfQogCiAJLyogTG9vayB1cCBvYmpl Y3QgaGFuZGxlcyAqLwotCXJldCA9IGViX2xvb2t1cF92bWFzKGViLCBleGVjLCBhcmdzLCB2bSwg ZmlsZSk7CisJcmV0ID0gZWJfbG9va3VwX3ZtYXMoJmViKTsKIAlpZiAocmV0KQogCQlnb3RvIGVy cjsKIAogCS8qIHRha2Ugbm90ZSBvZiB0aGUgYmF0Y2ggYnVmZmVyIGJlZm9yZSB3ZSBtaWdodCBy ZW9yZGVyIHRoZSBsaXN0cyAqLwotCXBhcmFtcy0+YmF0Y2ggPSBlYl9nZXRfYmF0Y2goZWIpOwor CWViLmJhdGNoID0gZWJfZ2V0X2JhdGNoKCZlYik7CiAKIAkvKiBNb3ZlIHRoZSBvYmplY3RzIGVu LW1hc3NlIGludG8gdGhlIEdUVCwgZXZpY3RpbmcgaWYgbmVjZXNzYXJ5LiAqLwotCW5lZWRfcmVs b2NzID0gKGFyZ3MtPmZsYWdzICYgSTkxNV9FWEVDX05PX1JFTE9DKSA9PSAwOwotCXJldCA9IGk5 MTVfZ2VtX2V4ZWNidWZmZXJfcmVzZXJ2ZShlbmdpbmUsICZlYi0+dm1hcywgY3R4LAotCQkJCQkg ICZuZWVkX3JlbG9jcyk7CisJcmV0ID0gZWJfcmVzZXJ2ZSgmZWIpOwogCWlmIChyZXQpCiAJCWdv dG8gZXJyOwogCiAJLyogVGhlIG9iamVjdHMgYXJlIGluIHRoZWlyIGZpbmFsIGxvY2F0aW9ucywg YXBwbHkgdGhlIHJlbG9jYXRpb25zLiAqLwotCWlmIChuZWVkX3JlbG9jcykKLQkJcmV0ID0gaTkx NV9nZW1fZXhlY2J1ZmZlcl9yZWxvY2F0ZShlYik7CisJaWYgKGViLm5lZWRfcmVsb2NzKQorCQly ZXQgPSBlYl9yZWxvY2F0ZSgmZWIpOwogCWlmIChyZXQpIHsKIAkJaWYgKHJldCA9PSAtRUZBVUxU KSB7Ci0JCQlyZXQgPSBpOTE1X2dlbV9leGVjYnVmZmVyX3JlbG9jYXRlX3Nsb3coZGV2LCBhcmdz LCBmaWxlLAotCQkJCQkJCQllbmdpbmUsCi0JCQkJCQkJCWViLCBleGVjLCBjdHgpOworCQkJcmV0 ID0gZWJfcmVsb2NhdGVfc2xvdygmZWIpOwogCQkJQlVHX09OKCFtdXRleF9pc19sb2NrZWQoJmRl di0+c3RydWN0X211dGV4KSk7CiAJCX0KIAkJaWYgKHJldCkKQEAgLTE2OTMsMjggKzE2MjksMjIg QEAgaTkxNV9nZW1fZG9fZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpk YXRhLAogCX0KIAogCS8qIFNldCB0aGUgcGVuZGluZyByZWFkIGRvbWFpbnMgZm9yIHRoZSBiYXRj aCBidWZmZXIgdG8gQ09NTUFORCAqLwotCWlmIChwYXJhbXMtPmJhdGNoLT5vYmotPmJhc2UucGVu ZGluZ193cml0ZV9kb21haW4pIHsKKwlpZiAoZWIuYmF0Y2gtPm9iai0+YmFzZS5wZW5kaW5nX3dy aXRlX2RvbWFpbikgewogCQlEUk1fREVCVUcoIkF0dGVtcHRpbmcgdG8gdXNlIHNlbGYtbW9kaWZ5 aW5nIGJhdGNoIGJ1ZmZlclxuIik7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyOwogCX0K LQlpZiAoYXJncy0+YmF0Y2hfc3RhcnRfb2Zmc2V0ID4gcGFyYW1zLT5iYXRjaC0+c2l6ZSB8fAot CSAgICBhcmdzLT5iYXRjaF9sZW4gPiBwYXJhbXMtPmJhdGNoLT5zaXplIC0gYXJncy0+YmF0Y2hf c3RhcnRfb2Zmc2V0KSB7CisJaWYgKGViLmJhdGNoX3N0YXJ0X29mZnNldCA+IGViLmJhdGNoLT5z aXplIHx8CisJICAgIGViLmJhdGNoX2xlbiA+IGViLmJhdGNoLT5zaXplIC0gZWIuYmF0Y2hfc3Rh cnRfb2Zmc2V0KSB7CiAJCURSTV9ERUJVRygiQXR0ZW1wdGluZyB0byB1c2Ugb3V0LW9mLWJvdW5k cyBiYXRjaFxuIik7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyOwogCX0KIAotCXBhcmFt cy0+YXJnc19iYXRjaF9zdGFydF9vZmZzZXQgPSBhcmdzLT5iYXRjaF9zdGFydF9vZmZzZXQ7Ci0J aWYgKGVuZ2luZS0+bmVlZHNfY21kX3BhcnNlciAmJiBhcmdzLT5iYXRjaF9sZW4pIHsKKwlpZiAo ZWIuZW5naW5lLT5uZWVkc19jbWRfcGFyc2VyICYmIGViLmJhdGNoX2xlbikgewogCQlzdHJ1Y3Qg aTkxNV92bWEgKnZtYTsKIAotCQl2bWEgPSBpOTE1X2dlbV9leGVjYnVmZmVyX3BhcnNlKGVuZ2lu ZSwgJnNoYWRvd19leGVjX2VudHJ5LAotCQkJCQkJcGFyYW1zLT5iYXRjaC0+b2JqLAotCQkJCQkJ ZWIsCi0JCQkJCQlhcmdzLT5iYXRjaF9zdGFydF9vZmZzZXQsCi0JCQkJCQlhcmdzLT5iYXRjaF9s ZW4sCi0JCQkJCQlkcm1faXNfY3VycmVudF9tYXN0ZXIoZmlsZSkpOworCQl2bWEgPSBlYl9wYXJz ZSgmZWIsIGRybV9pc19jdXJyZW50X21hc3RlcihmaWxlKSk7CiAJCWlmIChJU19FUlIodm1hKSkg ewogCQkJcmV0ID0gUFRSX0VSUih2bWEpOwogCQkJZ290byBlcnI7CkBAIC0xNzMwLDE5ICsxNjYw LDIxIEBAIGk5MTVfZ2VtX2RvX2V4ZWNidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9p ZCAqZGF0YSwKIAkJCSAqIHNwZWNpZmljYWxseSBkb24ndCB3YW50IHRoYXQgc2V0IG9uIGJhdGNo ZXMgdGhlCiAJCQkgKiBjb21tYW5kIHBhcnNlciBoYXMgYWNjZXB0ZWQuCiAJCQkgKi8KLQkJCWRp c3BhdGNoX2ZsYWdzIHw9IEk5MTVfRElTUEFUQ0hfU0VDVVJFOwotCQkJcGFyYW1zLT5hcmdzX2Jh dGNoX3N0YXJ0X29mZnNldCA9IDA7Ci0JCQlwYXJhbXMtPmJhdGNoID0gdm1hOworCQkJZWIuZGlz cGF0Y2hfZmxhZ3MgfD0gSTkxNV9ESVNQQVRDSF9TRUNVUkU7CisJCQllYi5iYXRjaF9zdGFydF9v ZmZzZXQgPSAwOworCQkJZWIuYmF0Y2ggPSB2bWE7CiAJCX0KIAl9CiAKLQlwYXJhbXMtPmJhdGNo LT5vYmotPmJhc2UucGVuZGluZ19yZWFkX2RvbWFpbnMgfD0gSTkxNV9HRU1fRE9NQUlOX0NPTU1B TkQ7CisJZWIuYmF0Y2gtPm9iai0+YmFzZS5wZW5kaW5nX3JlYWRfZG9tYWlucyB8PSBJOTE1X0dF TV9ET01BSU5fQ09NTUFORDsKKwlpZiAoZWIuYmF0Y2hfbGVuID09IDApCisJCWViLmJhdGNoX2xl biA9IGViLmJhdGNoLT5zaXplIC0gZWIuYmF0Y2hfc3RhcnRfb2Zmc2V0OwogCiAJLyogc25iL2l2 Yi92bHYgY29uZmxhdGUgdGhlICJiYXRjaCBpbiBwcGd0dCIgYml0IHdpdGggdGhlICJub24tc2Vj dXJlCiAJICogYmF0Y2giIGJpdC4gSGVuY2Ugd2UgbmVlZCB0byBwaW4gc2VjdXJlIGJhdGNoZXMg aW50byB0aGUgZ2xvYmFsIGd0dC4KIAkgKiBoc3cgc2hvdWxkIGhhdmUgdGhpcyBmaXhlZCwgYnV0 IGJkdyBtdWNrcyBpdCB1cCBhZ2Fpbi4gKi8KLQlpZiAoZGlzcGF0Y2hfZmxhZ3MgJiBJOTE1X0RJ U1BBVENIX1NFQ1VSRSkgewotCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gcGFy YW1zLT5iYXRjaC0+b2JqOworCWlmIChlYi5kaXNwYXRjaF9mbGFncyAmIEk5MTVfRElTUEFUQ0hf U0VDVVJFKSB7CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBlYi5iYXRjaC0+ b2JqOwogCQlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKIAogCQkvKgpAQCAtMTc2MSwyNSArMTY5Mywy NCBAQCBpOTE1X2dlbV9kb19leGVjYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQg KmRhdGEsCiAJCQlnb3RvIGVycjsKIAkJfQogCi0JCXBhcmFtcy0+YmF0Y2ggPSB2bWE7CisJCWVi LmJhdGNoID0gdm1hOwogCX0KIAogCS8qIEFsbG9jYXRlIGEgcmVxdWVzdCBmb3IgdGhpcyBiYXRj aCBidWZmZXIgbmljZSBhbmQgZWFybHkuICovCi0JcGFyYW1zLT5yZXF1ZXN0ID0gaTkxNV9nZW1f cmVxdWVzdF9hbGxvYyhlbmdpbmUsIGN0eCk7Ci0JaWYgKElTX0VSUihwYXJhbXMtPnJlcXVlc3Qp KSB7Ci0JCXJldCA9IFBUUl9FUlIocGFyYW1zLT5yZXF1ZXN0KTsKKwllYi5yZXF1ZXN0ID0gaTkx NV9nZW1fcmVxdWVzdF9hbGxvYyhlYi5lbmdpbmUsIGViLmN0eCk7CisJaWYgKElTX0VSUihlYi5y ZXF1ZXN0KSkgeworCQlyZXQgPSBQVFJfRVJSKGViLnJlcXVlc3QpOwogCQlnb3RvIGVycl9iYXRj aF91bnBpbjsKIAl9CiAKIAlpZiAoaW5fZmVuY2UpIHsKLQkJcmV0ID0gaTkxNV9nZW1fcmVxdWVz dF9hd2FpdF9kbWFfZmVuY2UocGFyYW1zLT5yZXF1ZXN0LAotCQkJCQkJICAgICAgIGluX2ZlbmNl KTsKKwkJcmV0ID0gaTkxNV9nZW1fcmVxdWVzdF9hd2FpdF9kbWFfZmVuY2UoZWIucmVxdWVzdCwg aW5fZmVuY2UpOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gZXJyX3JlcXVlc3Q7CiAJfQogCiAJ aWYgKG91dF9mZW5jZV9mZCAhPSAtMSkgewotCQlvdXRfZmVuY2UgPSBzeW5jX2ZpbGVfY3JlYXRl KCZwYXJhbXMtPnJlcXVlc3QtPmZlbmNlKTsKKwkJb3V0X2ZlbmNlID0gc3luY19maWxlX2NyZWF0 ZSgmZWIucmVxdWVzdC0+ZmVuY2UpOwogCQlpZiAoIW91dF9mZW5jZSkgewogCQkJcmV0ID0gLUVO T01FTTsKIAkJCWdvdG8gZXJyX3JlcXVlc3Q7CkBAIC0xNzkyLDI2ICsxNzIzLDEzIEBAIGk5MTVf Z2VtX2RvX2V4ZWNidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkg KiBpbmFjdGl2ZV9saXN0IGFuZCBsb3NlIGl0cyBhY3RpdmUgcmVmZXJlbmNlLiBIZW5jZSB3ZSBk byBub3QgbmVlZAogCSAqIHRvIGV4cGxpY2l0bHkgaG9sZCBhbm90aGVyIHJlZmVyZW5jZSBoZXJl LgogCSAqLwotCXBhcmFtcy0+cmVxdWVzdC0+YmF0Y2ggPSBwYXJhbXMtPmJhdGNoOwotCi0JLyoK LQkgKiBTYXZlIGFzc29ydGVkIHN0dWZmIGF3YXkgdG8gcGFzcyB0aHJvdWdoIHRvICpfc3VibWlz c2lvbigpLgotCSAqIE5COiBUaGlzIGRhdGEgc2hvdWxkIGJlICdwZXJzaXN0ZW50JyBhbmQgbm90 IGxvY2FsIGFzIGl0IHdpbGwKLQkgKiBrZXB0IGFyb3VuZCBiZXlvbmQgdGhlIGR1cmF0aW9uIG9m IHRoZSBJT0NUTCBvbmNlIHRoZSBHUFUKLQkgKiBzY2hlZHVsZXIgYXJyaXZlcy4KLQkgKi8KLQlw YXJhbXMtPmRldiAgICAgICAgICAgICAgICAgICAgID0gZGV2OwotCXBhcmFtcy0+ZmlsZSAgICAg ICAgICAgICAgICAgICAgPSBmaWxlOwotCXBhcmFtcy0+ZW5naW5lICAgICAgICAgICAgICAgICAg ICA9IGVuZ2luZTsKLQlwYXJhbXMtPmRpc3BhdGNoX2ZsYWdzICAgICAgICAgID0gZGlzcGF0Y2hf ZmxhZ3M7Ci0JcGFyYW1zLT5jdHggICAgICAgICAgICAgICAgICAgICA9IGN0eDsKKwllYi5yZXF1 ZXN0LT5iYXRjaCA9IGViLmJhdGNoOwogCi0JdHJhY2VfaTkxNV9nZW1fcmVxdWVzdF9xdWV1ZShw YXJhbXMtPnJlcXVlc3QsIGRpc3BhdGNoX2ZsYWdzKTsKLQotCXJldCA9IGV4ZWNidWZfc3VibWl0 KHBhcmFtcywgYXJncywgJmViLT52bWFzKTsKKwl0cmFjZV9pOTE1X2dlbV9yZXF1ZXN0X3F1ZXVl KGViLnJlcXVlc3QsIGViLmRpc3BhdGNoX2ZsYWdzKTsKKwlyZXQgPSBleGVjYnVmX3N1Ym1pdCgm ZWIpOwogZXJyX3JlcXVlc3Q6Ci0JX19pOTE1X2FkZF9yZXF1ZXN0KHBhcmFtcy0+cmVxdWVzdCwg cmV0ID09IDApOwotCWFkZF90b19jbGllbnQocGFyYW1zLT5yZXF1ZXN0LCBmaWxlKTsKKwlfX2k5 MTVfYWRkX3JlcXVlc3QoZWIucmVxdWVzdCwgcmV0ID09IDApOworCWFkZF90b19jbGllbnQoZWIu cmVxdWVzdCwgZmlsZSk7CiAKIAlpZiAob3V0X2ZlbmNlKSB7CiAJCWlmIChyZXQgPT0gMCkgewpA QCAtMTgzMSwxOSArMTc0OSwxNyBAQCBpOTE1X2dlbV9kb19leGVjYnVmZmVyKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJICogbmVlZHMgdG8gYmUgYWRqdXN0ZWQgdG8gYWxz byB0cmFjayB0aGUgZ2d0dCBiYXRjaCB2bWEgcHJvcGVybHkgYXMKIAkgKiBhY3RpdmUuCiAJICov Ci0JaWYgKGRpc3BhdGNoX2ZsYWdzICYgSTkxNV9ESVNQQVRDSF9TRUNVUkUpCi0JCWk5MTVfdm1h X3VucGluKHBhcmFtcy0+YmF0Y2gpOworCWlmIChlYi5kaXNwYXRjaF9mbGFncyAmIEk5MTVfRElT UEFUQ0hfU0VDVVJFKQorCQlpOTE1X3ZtYV91bnBpbihlYi5iYXRjaCk7CiBlcnI6CiAJLyogdGhl IHJlcXVlc3Qgb3ducyB0aGUgcmVmIG5vdyAqLwotCWk5MTVfZ2VtX2NvbnRleHRfcHV0KGN0eCk7 Ci0JZWJfZGVzdHJveShlYik7Ci0KKwllYl9kZXN0cm95KCZlYik7CiAJbXV0ZXhfdW5sb2NrKCZk ZXYtPnN0cnVjdF9tdXRleCk7CiAKIHByZV9tdXRleF9lcnI6CiAJLyogaW50ZWxfZ3B1X2J1c3kg c2hvdWxkIGFsc28gZ2V0IGEgcmVmLCBzbyBpdCB3aWxsIGZyZWUgd2hlbiB0aGUgZGV2aWNlCiAJ ICogaXMgcmVhbGx5IGlkbGUuICovCi0JaW50ZWxfcnVudGltZV9wbV9wdXQoZGV2X3ByaXYpOwor CWludGVsX3J1bnRpbWVfcG1fcHV0KGViLmk5MTUpOwogCWlmIChvdXRfZmVuY2VfZmQgIT0gLTEp CiAJCXB1dF91bnVzZWRfZmQob3V0X2ZlbmNlX2ZkKTsKIGVycl9pbl9mZW5jZToKQEAgLTE5MTQs NyArMTgzMCw3IEBAIGk5MTVfZ2VtX2V4ZWNidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwg dm9pZCAqZGF0YSwKIAlleGVjMi5mbGFncyA9IEk5MTVfRVhFQ19SRU5ERVI7CiAJaTkxNV9leGVj YnVmZmVyMl9zZXRfY29udGV4dF9pZChleGVjMiwgMCk7CiAKLQlyZXQgPSBpOTE1X2dlbV9kb19l eGVjYnVmZmVyKGRldiwgZGF0YSwgZmlsZSwgJmV4ZWMyLCBleGVjMl9saXN0KTsKKwlyZXQgPSBp OTE1X2dlbV9kb19leGVjYnVmZmVyKGRldiwgZmlsZSwgJmV4ZWMyLCBleGVjMl9saXN0KTsKIAlp ZiAoIXJldCkgewogCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0IF9fdXNlciAqdXNl cl9leGVjX2xpc3QgPQogCQkJdTY0X3RvX3VzZXJfcHRyKGFyZ3MtPmJ1ZmZlcnNfcHRyKTsKQEAg LTE5NzMsNyArMTg4OSw3IEBAIGk5MTVfZ2VtX2V4ZWNidWZmZXIyKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIHZvaWQgKmRhdGEsCiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCXJldCA9IGk5MTVf Z2VtX2RvX2V4ZWNidWZmZXIoZGV2LCBkYXRhLCBmaWxlLCBhcmdzLCBleGVjMl9saXN0KTsKKwly ZXQgPSBpOTE1X2dlbV9kb19leGVjYnVmZmVyKGRldiwgZmlsZSwgYXJncywgZXhlYzJfbGlzdCk7 CiAJaWYgKCFyZXQpIHsKIAkJLyogQ29weSB0aGUgbmV3IGJ1ZmZlciBvZmZzZXRzIGJhY2sgdG8g dGhlIHVzZXIncyBleGVjIGxpc3QuICovCiAJCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmpl Y3QyIF9fdXNlciAqdXNlcl9leGVjX2xpc3QgPQotLSAKMi4xMS4wCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0Cklu dGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK