From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alexandre Courbot Subject: [PATCH v3 14/15] secboot: abstract LS firmware loading functions Date: Wed, 2 Nov 2016 15:02:55 +0900 Message-ID: <20161102060256.14341-15-acourbot@nvidia.com> References: <20161102060256.14341-1-acourbot@nvidia.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20161102060256.14341-1-acourbot-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: nouveau-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Nouveau" To: Ben Skeggs Cc: nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: nouveau.vger.kernel.org VGhlIFdQUiBhbmQgTFNCIGhlYWRlcnMsIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIExTIGJsb2IsIG1h eSBoYXZlIGEKZGlmZmVyZW50IGxheW91dCBhbmQgc2l6ZXMgZGVwZW5kaW5nIG9uIHRoZSBkcml2 ZXIgdmVyc2lvbiB0aGV5IGNvbWUKZnJvbS4gQWJzdHJhY3QgdGhlbSBhbmQgY29uZmluZSB0aGVp ciB1c2UgdG8gZHJpdmVyLXNwZWNpZmljIGNvZGUuCgpTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kcmUg Q291cmJvdCA8YWNvdXJib3RAbnZpZGlhLmNvbT4KLS0tCiBkcm0vbm91dmVhdS9udmttL3N1YmRl di9zZWNib290L2Fjcl9yMzUyLmMgICAgfCAxMDIgKysrKysrKysrKysrKy0tLS0tLS0tLQogZHJt L25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9hY3JfcjM1Mi5oICAgIHwgMTE5ICsrKysrKysr KysrKysrKysrKysrKysrKysrCiBkcm0vbm91dmVhdS9udmttL3N1YmRldi9zZWNib290L2Fjcl9y MzYxLmMgICAgfCAgIDkgKy0KIGRybS9ub3V2ZWF1L252a20vc3ViZGV2L3NlY2Jvb3QvbHNfdWNv ZGUuaCAgICB8IDEwMCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBkcm0vbm91dmVhdS9udmttL3N1 YmRldi9zZWNib290L2xzX3Vjb2RlX2dyLmMgfCAgMzkgKysrKy0tLS0tCiA1IGZpbGVzIGNoYW5n ZWQsIDIwOCBpbnNlcnRpb25zKCspLCAxNjEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJt L25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9hY3JfcjM1Mi5jIGIvZHJtL25vdXZlYXUvbnZr bS9zdWJkZXYvc2VjYm9vdC9hY3JfcjM1Mi5jCmluZGV4IDRiNzIzNzFiZGJhZS4uNmQ3OWZhMjdl ZjE0IDEwMDY0NAotLS0gYS9kcm0vbm91dmVhdS9udmttL3N1YmRldi9zZWNib290L2Fjcl9yMzUy LmMKKysrIGIvZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9hY3JfcjM1Mi5jCkBAIC0y MSw3ICsyMSw2IEBACiAgKi8KIAogI2luY2x1ZGUgImFjcl9yMzUyLmgiCi0jaW5jbHVkZSAibHNf dWNvZGUuaCIKIAogI2luY2x1ZGUgPGNvcmUvZ3B1b2JqLmg+CiAjaW5jbHVkZSA8Y29yZS9maXJt d2FyZS5oPgpAQCAtOTMsMTEgKzkyLDEyIEBAIHN0cnVjdCBhY3JfcjM1Ml9mbGNuX2JsX2Rlc2Mg ewogICovCiBzdGF0aWMgdm9pZAogYWNyX3IzNTJfZ2VuZXJhdGVfZmxjbl9ibF9kZXNjKGNvbnN0 IHN0cnVjdCBudmttX2FjciAqYWNyLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBsc191Y29kZV9p bWcgKmltZywgdTY0IHdwcl9hZGRyLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBsc191Y29kZV9p bWcgKl9pbWcsIHU2NCB3cHJfYWRkciwKIAkJCSAgICAgICB2b2lkICpfZGVzYykKIHsKKwlzdHJ1 Y3QgbHNfdWNvZGVfaW1nX3IzNTIgKmltZyA9IGxzX3Vjb2RlX2ltZ19yMzUyKF9pbWcpOwogCXN0 cnVjdCBhY3JfcjM1Ml9mbGNuX2JsX2Rlc2MgKmRlc2MgPSBfZGVzYzsKLQljb25zdCBzdHJ1Y3Qg bHNfdWNvZGVfaW1nX2Rlc2MgKnBkZXNjID0gJmltZy0+dWNvZGVfZGVzYzsKKwljb25zdCBzdHJ1 Y3QgbHNfdWNvZGVfaW1nX2Rlc2MgKnBkZXNjID0gJl9pbWctPnVjb2RlX2Rlc2M7CiAJdTY0IGJh c2UsIGFkZHJfY29kZSwgYWRkcl9kYXRhOwogCiAJYmFzZSA9IHdwcl9hZGRyICsgaW1nLT5sc2Jf aGVhZGVyLnVjb2RlX29mZiArIHBkZXNjLT5hcHBfc3RhcnRfb2Zmc2V0OwpAQCAtMTYyLDI5ICsx NjIsNDYgQEAgc3RydWN0IGhzZmxjbl9hY3JfZGVzYyB7CiAgKiBMb3ctc2VjdXJlIGJsb2IgY3Jl YXRpb24KICAqLwogCi10eXBlZGVmIGludCAoKmxzZl9sb2FkX2Z1bmMpKGNvbnN0IHN0cnVjdCBu dmttX3N1YmRldiAqLCBzdHJ1Y3QgbHNfdWNvZGVfaW1nICopOwotCiAvKioKICAqIGxzX3Vjb2Rl X2ltZ19sb2FkKCkgLSBjcmVhdGUgYSBsc2ZfdWNvZGVfaW1nIGFuZCBsb2FkIGl0CiAgKi8KLXN0 YXRpYyBzdHJ1Y3QgbHNfdWNvZGVfaW1nICoKLWxzX3Vjb2RlX2ltZ19sb2FkKGNvbnN0IHN0cnVj dCBudmttX3N1YmRldiAqc3ViZGV2LCBsc2ZfbG9hZF9mdW5jIGxvYWRfZnVuYykKK3N0cnVjdCBs c191Y29kZV9pbWcgKgorYWNyX3IzNTJfbHNfdWNvZGVfaW1nX2xvYWQoY29uc3Qgc3RydWN0IGFj cl9yMzUyICphY3IsCisJCQkgICBlbnVtIG52a21fZmFsY29uaWR4IGZhbGNvbl9pZCkKIHsKLQlz dHJ1Y3QgbHNfdWNvZGVfaW1nICppbWc7CisJY29uc3Qgc3RydWN0IG52a21fc3ViZGV2ICpzdWJk ZXYgPSBhY3ItPmJhc2Uuc3ViZGV2OworCXN0cnVjdCBsc191Y29kZV9pbWdfcjM1MiAqaW1nOwog CWludCByZXQ7CiAKIAlpbWcgPSBremFsbG9jKHNpemVvZigqaW1nKSwgR0ZQX0tFUk5FTCk7CiAJ aWYgKCFpbWcpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0JcmV0ID0gbG9hZF9mdW5j KHN1YmRldiwgaW1nKTsKKwlpbWctPmJhc2UuZmFsY29uX2lkID0gZmFsY29uX2lkOworCisJcmV0 ID0gYWNyLT5mdW5jLT5sc19mdW5jW2ZhbGNvbl9pZF0tPmxvYWQoc3ViZGV2LCAmaW1nLT5iYXNl KTsKIAogCWlmIChyZXQpIHsKKwkJa2ZyZWUoaW1nLT5iYXNlLnVjb2RlX2RhdGEpOworCQlrZnJl ZShpbWctPmJhc2Uuc2lnKTsKIAkJa2ZyZWUoaW1nKTsKIAkJcmV0dXJuIEVSUl9QVFIocmV0KTsK IAl9CiAKLQlyZXR1cm4gaW1nOworCS8qIENoZWNrIHRoYXQgdGhlIHNpZ25hdHVyZSBzaXplIG1h dGNoZXMgb3VyIGV4cGVjdGF0aW9ucy4uLiAqLworCWlmIChpbWctPmJhc2Uuc2lnX3NpemUgIT0g c2l6ZW9mKGltZy0+bHNiX2hlYWRlci5zaWduYXR1cmUpKSB7CisJCW52a21fZXJyb3Ioc3ViZGV2 LCAiaW52YWxpZCBzaWduYXR1cmUgc2l6ZSBmb3IgJXMgZmFsY29uIVxuIiwKKwkJCSAgIG52a21f ZmFsY29uX25hbWVbZmFsY29uX2lkXSk7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0K KworCS8qIENvcHkgc2lnbmF0dXJlIHRvIHRoZSByaWdodCBwbGFjZSAqLworCW1lbWNweSgmaW1n LT5sc2JfaGVhZGVyLnNpZ25hdHVyZSwgaW1nLT5iYXNlLnNpZywgaW1nLT5iYXNlLnNpZ19zaXpl KTsKKworCS8qIG5vdCBuZWVkZWQ/IHRoZSBzaWduYXR1cmUgc2hvdWxkIGFscmVhZHkgaGF2ZSB0 aGUgcmlnaHQgdmFsdWUgKi8KKwlpbWctPmxzYl9oZWFkZXIuc2lnbmF0dXJlLmZhbGNvbl9pZCA9 IGZhbGNvbl9pZDsKKworCXJldHVybiAmaW1nLT5iYXNlOwogfQogCiAjZGVmaW5lIExTRl9MU0Jf SEVBREVSX0FMSUdOIDI1NgpAQCAtMTk0LDcgKzIxMSw3IEBAIGxzX3Vjb2RlX2ltZ19sb2FkKGNv bnN0IHN0cnVjdCBudmttX3N1YmRldiAqc3ViZGV2LCBsc2ZfbG9hZF9mdW5jIGxvYWRfZnVuYykK ICNkZWZpbmUgTFNGX1VDT0RFX0RBVEFfQUxJR04gNDA5NgogCiAvKioKLSAqIGxzX3Vjb2RlX2lt Z19maWxsX2hlYWRlcnMgLSBmaWxsIHRoZSBXUFIgYW5kIExTQiBoZWFkZXJzIG9mIGFuIGltYWdl CisgKiBhY3JfcjM1Ml9sc19pbWdfZmlsbF9oZWFkZXJzIC0gZmlsbCB0aGUgV1BSIGFuZCBMU0Ig aGVhZGVycyBvZiBhbiBpbWFnZQogICogQGFjcjoJQUNSIHRvIHVzZQogICogQGltZzoJaW1hZ2Ug dG8gZ2VuZXJhdGUgZm9yCiAgKiBAb2Zmc2V0OglvZmZzZXQgaW4gdGhlIFdQUiByZWdpb24gd2hl cmUgdGhpcyBpbWFnZSBzdGFydHMKQEAgLTIwNSwyNCArMjIyLDI1IEBAIGxzX3Vjb2RlX2ltZ19s b2FkKGNvbnN0IHN0cnVjdCBudmttX3N1YmRldiAqc3ViZGV2LCBsc2ZfbG9hZF9mdW5jIGxvYWRf ZnVuYykKICAqIFJldHVybjogb2Zmc2V0IGF0IHRoZSBlbmQgb2YgdGhpcyBpbWFnZS4KICAqLwog c3RhdGljIHUzMgotbHNfdWNvZGVfaW1nX2ZpbGxfaGVhZGVycyhzdHJ1Y3QgYWNyX3IzNTIgKmFj ciwgc3RydWN0IGxzX3Vjb2RlX2ltZyAqaW1nLAotCQkJICB1MzIgb2Zmc2V0KQorYWNyX3IzNTJf bHNfaW1nX2ZpbGxfaGVhZGVycyhzdHJ1Y3QgYWNyX3IzNTIgKmFjciwKKwkJCSAgICAgc3RydWN0 IGxzX3Vjb2RlX2ltZ19yMzUyICppbWcsIHUzMiBvZmZzZXQpCiB7Ci0Jc3RydWN0IGxzZl93cHJf aGVhZGVyICp3aGRyID0gJmltZy0+d3ByX2hlYWRlcjsKLQlzdHJ1Y3QgbHNmX2xzYl9oZWFkZXIg KmxoZHIgPSAmaW1nLT5sc2JfaGVhZGVyOwotCXN0cnVjdCBsc191Y29kZV9pbWdfZGVzYyAqZGVz YyA9ICZpbWctPnVjb2RlX2Rlc2M7CisJc3RydWN0IGxzX3Vjb2RlX2ltZyAqX2ltZyA9ICZpbWct PmJhc2U7CisJc3RydWN0IGFjcl9yMzUyX2xzZl93cHJfaGVhZGVyICp3aGRyID0gJmltZy0+d3By X2hlYWRlcjsKKwlzdHJ1Y3QgYWNyX3IzNTJfbHNmX2xzYl9oZWFkZXIgKmxoZHIgPSAmaW1nLT5s c2JfaGVhZGVyOworCXN0cnVjdCBsc191Y29kZV9pbWdfZGVzYyAqZGVzYyA9ICZfaW1nLT51Y29k ZV9kZXNjOwogCWNvbnN0IHN0cnVjdCBhY3JfcjM1Ml9sc19mdW5jICpmdW5jID0KLQkJCQkJICAg IGFjci0+ZnVuYy0+bHNfZnVuY1tpbWctPmZhbGNvbl9pZF07CisJCQkJCSAgICBhY3ItPmZ1bmMt PmxzX2Z1bmNbX2ltZy0+ZmFsY29uX2lkXTsKIAogCS8qIEZpbGwgV1BSIGhlYWRlciAqLwotCXdo ZHItPmZhbGNvbl9pZCA9IGltZy0+ZmFsY29uX2lkOworCXdoZHItPmZhbGNvbl9pZCA9IF9pbWct PmZhbGNvbl9pZDsKIAl3aGRyLT5ib290c3RyYXBfb3duZXIgPSBhY3ItPmJhc2UuZnVuYy0+Ym9v dF9mYWxjb247CiAJd2hkci0+c3RhdHVzID0gTFNGX0lNQUdFX1NUQVRVU19DT1BZOwogCiAJLyog QWxpZ24sIHNhdmUgb2ZmLCBhbmQgaW5jbHVkZSBhbiBMU0IgaGVhZGVyIHNpemUgKi8KIAlvZmZz ZXQgPSBBTElHTihvZmZzZXQsIExTRl9MU0JfSEVBREVSX0FMSUdOKTsKIAl3aGRyLT5sc2Jfb2Zm c2V0ID0gb2Zmc2V0OwotCW9mZnNldCArPSBzaXplb2Yoc3RydWN0IGxzZl9sc2JfaGVhZGVyKTsK KwlvZmZzZXQgKz0gc2l6ZW9mKCpsaGRyKTsKIAogCS8qCiAJICogQWxpZ24sIHNhdmUgb2ZmLCBh bmQgaW5jbHVkZSB0aGUgb3JpZ2luYWwgKHN0YXRpYykgdWNvZGUKQEAgLTIzMCw3ICsyNDgsNyBA QCBsc191Y29kZV9pbWdfZmlsbF9oZWFkZXJzKHN0cnVjdCBhY3JfcjM1MiAqYWNyLCBzdHJ1Y3Qg bHNfdWNvZGVfaW1nICppbWcsCiAJICovCiAJb2Zmc2V0ID0gQUxJR04ob2Zmc2V0LCBMU0ZfVUNP REVfREFUQV9BTElHTik7CiAJbGhkci0+dWNvZGVfb2ZmID0gb2Zmc2V0OwotCW9mZnNldCArPSBp bWctPnVjb2RlX3NpemU7CisJb2Zmc2V0ICs9IF9pbWctPnVjb2RlX3NpemU7CiAKIAkvKgogCSAq IEZvciBmYWxjb25zIHRoYXQgdXNlIGEgYm9vdCBsb2FkZXIgKEJMKSwgd2UgYXBwZW5kIGEgbG9h ZGVyCkBAIC0yNjAsNyArMjc4LDcgQEAgbHNfdWNvZGVfaW1nX2ZpbGxfaGVhZGVycyhzdHJ1Y3Qg YWNyX3IzNTIgKmFjciwgc3RydWN0IGxzX3Vjb2RlX2ltZyAqaW1nLAogCWxoZHItPmFwcF9kYXRh X3NpemUgPSBkZXNjLT5hcHBfcmVzaWRlbnRfZGF0YV9zaXplOwogCiAJbGhkci0+ZmxhZ3MgPSBm dW5jLT5saGRyX2ZsYWdzOwotCWlmIChpbWctPmZhbGNvbl9pZCA9PSBhY3ItPmJhc2UuZnVuYy0+ Ym9vdF9mYWxjb24pCisJaWYgKF9pbWctPmZhbGNvbl9pZCA9PSBhY3ItPmJhc2UuZnVuYy0+Ym9v dF9mYWxjb24pCiAJCWxoZHItPmZsYWdzIHw9IExTRl9GTEFHX0RNQUNUTF9SRVFfQ1RYOwogCiAK QEAgLTI4MCwxMCArMjk4LDEwIEBAIGxzX3Vjb2RlX2ltZ19maWxsX2hlYWRlcnMoc3RydWN0IGFj cl9yMzUyICphY3IsIHN0cnVjdCBsc191Y29kZV9pbWcgKmltZywKIC8qKgogICogYWNyX3IzNTJf bHNfZmlsbF9oZWFkZXJzIC0gZmlsbCBXUFIgYW5kIExTQiBoZWFkZXJzIG9mIGFsbCBtYW5hZ2Vk IGltYWdlcwogICovCi1zdGF0aWMgaW50CitpbnQKIGFjcl9yMzUyX2xzX2ZpbGxfaGVhZGVycyhz dHJ1Y3QgYWNyX3IzNTIgKmFjciwgc3RydWN0IGxpc3RfaGVhZCAqaW1ncykKIHsKLQlzdHJ1Y3Qg bHNfdWNvZGVfaW1nICppbWc7CisJc3RydWN0IGxzX3Vjb2RlX2ltZ19yMzUyICppbWc7CiAJc3Ry dWN0IGxpc3RfaGVhZCAqbDsKIAl1MzIgY291bnQgPSAwOwogCXUzMiBvZmZzZXQ7CkBAIC0yOTgs MzQgKzMxNiwzNSBAQCBhY3JfcjM1Ml9sc19maWxsX2hlYWRlcnMoc3RydWN0IGFjcl9yMzUyICph Y3IsIHN0cnVjdCBsaXN0X2hlYWQgKmltZ3MpCiAJICogcmVhZCBvZiB0aGlzIGFycmF5IGFuZCBj YWNoZSBpdCBpbnRlcm5hbGx5IHNvIGl0J3Mgb2sgdG8gcGFjayB0aGVzZS4KIAkgKiBBbHNvLCB3 ZSBhZGQgMSB0byB0aGUgZmFsY29uIGNvdW50IHRvIGluZGljYXRlIHRoZSBlbmQgb2YgdGhlIGFy cmF5LgogCSAqLwotCW9mZnNldCA9IHNpemVvZihzdHJ1Y3QgbHNmX3dwcl9oZWFkZXIpICogKGNv dW50ICsgMSk7CisJb2Zmc2V0ID0gc2l6ZW9mKGltZy0+d3ByX2hlYWRlcikgKiAoY291bnQgKyAx KTsKIAogCS8qCiAJICogV2FsayB0aGUgbWFuYWdlZCBmYWxjb25zLCBhY2NvdW50aW5nIGZvciB0 aGUgTFNCIHN0cnVjdHMKIAkgKiBhcyB3ZWxsIGFzIHRoZSB1Y29kZSBpbWFnZXMuCiAJICovCi0J bGlzdF9mb3JfZWFjaF9lbnRyeShpbWcsIGltZ3MsIG5vZGUpIHsKLQkJb2Zmc2V0ID0gbHNfdWNv ZGVfaW1nX2ZpbGxfaGVhZGVycyhhY3IsIGltZywgb2Zmc2V0KTsKKwlsaXN0X2Zvcl9lYWNoX2Vu dHJ5KGltZywgaW1ncywgYmFzZS5ub2RlKSB7CisJCW9mZnNldCA9IGFjcl9yMzUyX2xzX2ltZ19m aWxsX2hlYWRlcnMoYWNyLCBpbWcsIG9mZnNldCk7CiAJfQogCiAJcmV0dXJuIG9mZnNldDsKIH0K IAogLyoqCi0gKiBsc191Y29kZV9tZ3Jfd3JpdGVfd3ByIC0gd3JpdGUgdGhlIFdQUiBibG9iIGNv bnRlbnRzCisgKiBhY3JfcjM1Ml9sc193cml0ZV93cHIgLSB3cml0ZSB0aGUgV1BSIGJsb2IgY29u dGVudHMKICAqLwotc3RhdGljIGludAotbHNfdWNvZGVfbWdyX3dyaXRlX3dwcihzdHJ1Y3QgYWNy X3IzNTIgKmFjciwgc3RydWN0IGxpc3RfaGVhZCAqaW1ncywKLQkJICAgICAgIHN0cnVjdCBudmtt X2dwdW9iaiAqd3ByX2Jsb2IsIHUzMiB3cHJfYWRkcikKK2ludAorYWNyX3IzNTJfbHNfd3JpdGVf d3ByKHN0cnVjdCBhY3JfcjM1MiAqYWNyLCBzdHJ1Y3QgbGlzdF9oZWFkICppbWdzLAorCQkgICAg ICBzdHJ1Y3QgbnZrbV9ncHVvYmogKndwcl9ibG9iLCB1MzIgd3ByX2FkZHIpCiB7Ci0Jc3RydWN0 IGxzX3Vjb2RlX2ltZyAqaW1nOworCXN0cnVjdCBsc191Y29kZV9pbWcgKl9pbWc7CiAJdTMyIHBv cyA9IDA7CiAKIAludmttX2ttYXAod3ByX2Jsb2IpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShp bWcsIGltZ3MsIG5vZGUpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KF9pbWcsIGltZ3MsIG5vZGUp IHsKKwkJc3RydWN0IGxzX3Vjb2RlX2ltZ19yMzUyICppbWcgPSBsc191Y29kZV9pbWdfcjM1Mihf aW1nKTsKIAkJY29uc3Qgc3RydWN0IGFjcl9yMzUyX2xzX2Z1bmMgKmxzX2Z1bmMgPQotCQkJCQkg ICAgIGFjci0+ZnVuYy0+bHNfZnVuY1tpbWctPmZhbGNvbl9pZF07CisJCQkJCSAgICBhY3ItPmZ1 bmMtPmxzX2Z1bmNbX2ltZy0+ZmFsY29uX2lkXTsKIAkJdTggZ2Rlc2NbbHNfZnVuYy0+YmxfZGVz Y19zaXplXTsKIAogCQludmttX2dwdW9ial9tZW1jcHlfdG8od3ByX2Jsb2IsIHBvcywgJmltZy0+ d3ByX2hlYWRlciwKQEAgLTMzNSwxNCArMzU0LDE0IEBAIGxzX3Vjb2RlX21ncl93cml0ZV93cHIo c3RydWN0IGFjcl9yMzUyICphY3IsIHN0cnVjdCBsaXN0X2hlYWQgKmltZ3MsCiAJCQkJICAgICAm aW1nLT5sc2JfaGVhZGVyLCBzaXplb2YoaW1nLT5sc2JfaGVhZGVyKSk7CiAKIAkJLyogR2VuZXJh dGUgYW5kIHdyaXRlIEJMIGRlc2NyaXB0b3IgKi8KLQkJbHNfZnVuYy0+Z2VuZXJhdGVfYmxfZGVz YygmYWNyLT5iYXNlLCBpbWcsIHdwcl9hZGRyLCBnZGVzYyk7CisJCWxzX2Z1bmMtPmdlbmVyYXRl X2JsX2Rlc2MoJmFjci0+YmFzZSwgX2ltZywgd3ByX2FkZHIsIGdkZXNjKTsKIAogCQludmttX2dw dW9ial9tZW1jcHlfdG8od3ByX2Jsb2IsIGltZy0+bHNiX2hlYWRlci5ibF9kYXRhX29mZiwKIAkJ CQkgICAgICBnZGVzYywgbHNfZnVuYy0+YmxfZGVzY19zaXplKTsKIAogCQkvKiBDb3B5IHVjb2Rl ICovCiAJCW52a21fZ3B1b2JqX21lbWNweV90byh3cHJfYmxvYiwgaW1nLT5sc2JfaGVhZGVyLnVj b2RlX29mZiwKLQkJCQkgICAgICBpbWctPnVjb2RlX2RhdGEsIGltZy0+dWNvZGVfc2l6ZSk7CisJ CQkJICAgICAgX2ltZy0+dWNvZGVfZGF0YSwgX2ltZy0+dWNvZGVfc2l6ZSk7CiAKIAkJcG9zICs9 IHNpemVvZihpbWctPndwcl9oZWFkZXIpOwogCX0KQEAgLTM4MiwxMyArNDAxLDEyIEBAIGFjcl9y MzUyX3ByZXBhcmVfbHNfYmxvYihzdHJ1Y3QgYWNyX3IzNTIgKmFjciwgdTY0IHdwcl9hZGRyLCB1 MzIgd3ByX3NpemUsCiAJZm9yX2VhY2hfc2V0X2JpdChmYWxjb25faWQsICZtYW5hZ2VkX2ZhbGNv bnMsIE5WS01fRkFMQ09OX0VORCkgewogCQlzdHJ1Y3QgbHNfdWNvZGVfaW1nICppbWc7CiAKLQkJ aW1nID0gbHNfdWNvZGVfaW1nX2xvYWQoc3ViZGV2LAotCQkJCQlhY3ItPmZ1bmMtPmxzX2Z1bmNb ZmFsY29uX2lkXS0+bG9hZCk7Ci0KKwkJaW1nID0gYWNyLT5mdW5jLT5sc191Y29kZV9pbWdfbG9h ZChhY3IsIGZhbGNvbl9pZCk7CiAJCWlmIChJU19FUlIoaW1nKSkgewogCQkJcmV0ID0gUFRSX0VS UihpbWcpOwogCQkJZ290byBjbGVhbnVwOwogCQl9CisKIAkJbGlzdF9hZGRfdGFpbCgmaW1nLT5u b2RlLCAmaW1ncyk7CiAJCW1hbmFnZWRfY291bnQrKzsKIAl9CkBAIC0zOTcsNyArNDE1LDcgQEAg YWNyX3IzNTJfcHJlcGFyZV9sc19ibG9iKHN0cnVjdCBhY3JfcjM1MiAqYWNyLCB1NjQgd3ByX2Fk ZHIsIHUzMiB3cHJfc2l6ZSwKIAkgKiBGaWxsIHRoZSBXUFIgYW5kIExTRiBoZWFkZXJzIHdpdGgg dGhlIHJpZ2h0IG9mZnNldHMgYW5kIGNvbXB1dGUKIAkgKiByZXF1aXJlZCBXUFIgc2l6ZQogCSAq LwotCWltYWdlX3dwcl9zaXplID0gYWNyX3IzNTJfbHNfZmlsbF9oZWFkZXJzKGFjciwgJmltZ3Mp OworCWltYWdlX3dwcl9zaXplID0gYWNyLT5mdW5jLT5sc19maWxsX2hlYWRlcnMoYWNyLCAmaW1n cyk7CiAJaW1hZ2Vfd3ByX3NpemUgPSBBTElHTihpbWFnZV93cHJfc2l6ZSwgV1BSX0FMSUdOTUVO VCk7CiAKIAkvKiBBbGxvY2F0ZSBHUFUgb2JqZWN0IHRoYXQgd2lsbCBjb250YWluIHRoZSBXUFIg cmVnaW9uICovCkBAIC00MjYsMTMgKzQ0NCwxNCBAQCBhY3JfcjM1Ml9wcmVwYXJlX2xzX2Jsb2Io c3RydWN0IGFjcl9yMzUyICphY3IsIHU2NCB3cHJfYWRkciwgdTMyIHdwcl9zaXplLAogCX0KIAog CS8qIFdyaXRlIExTIGJsb2IgKi8KLQlyZXQgPSBsc191Y29kZV9tZ3Jfd3JpdGVfd3ByKGFjciwg JmltZ3MsIGFjci0+bHNfYmxvYiwgd3ByX2FkZHIpOworCXJldCA9IGFjci0+ZnVuYy0+bHNfd3Jp dGVfd3ByKGFjciwgJmltZ3MsIGFjci0+bHNfYmxvYiwgd3ByX2FkZHIpOwogCWlmIChyZXQpCiAJ CW52a21fZ3B1b2JqX2RlbCgmYWNyLT5sc19ibG9iKTsKIAogY2xlYW51cDoKIAlsaXN0X2Zvcl9l YWNoX2VudHJ5X3NhZmUoaW1nLCB0LCAmaW1ncywgbm9kZSkgewogCQlrZnJlZShpbWctPnVjb2Rl X2RhdGEpOworCQlrZnJlZShpbWctPnNpZyk7CiAJCWtmcmVlKGltZyk7CiAJfQogCkBAIC04NjUs NiArODg0LDkgQEAgY29uc3Qgc3RydWN0IGFjcl9yMzUyX2Z1bmMKIGFjcl9yMzUyX2Z1bmMgPSB7 CiAJLmdlbmVyYXRlX2hzX2JsX2Rlc2MgPSBhY3JfcjM1Ml9nZW5lcmF0ZV9oc19ibF9kZXNjLAog CS5oc19ibF9kZXNjX3NpemUgPSBzaXplb2Yoc3RydWN0IGFjcl9yMzUyX2ZsY25fYmxfZGVzYyks CisJLmxzX3Vjb2RlX2ltZ19sb2FkID0gYWNyX3IzNTJfbHNfdWNvZGVfaW1nX2xvYWQsCisJLmxz X2ZpbGxfaGVhZGVycyA9IGFjcl9yMzUyX2xzX2ZpbGxfaGVhZGVycywKKwkubHNfd3JpdGVfd3By ID0gYWNyX3IzNTJfbHNfd3JpdGVfd3ByLAogCS5sc19mdW5jID0gewogCQlbTlZLTV9GQUxDT05f RkVDU10gPSAmYWNyX3IzNTJfbHNfZmVjc19mdW5jLAogCQlbTlZLTV9GQUxDT05fR1BDQ1NdID0g JmFjcl9yMzUyX2xzX2dwY2NzX2Z1bmMsCmRpZmYgLS1naXQgYS9kcm0vbm91dmVhdS9udmttL3N1 YmRldi9zZWNib290L2Fjcl9yMzUyLmggYi9kcm0vbm91dmVhdS9udmttL3N1YmRldi9zZWNib290 L2Fjcl9yMzUyLmgKaW5kZXggZjYwNjg0MDRiYTk4Li5iMmE0YjJlYzlhZjUgMTAwNjQ0Ci0tLSBh L2RybS9ub3V2ZWF1L252a20vc3ViZGV2L3NlY2Jvb3QvYWNyX3IzNTIuaAorKysgYi9kcm0vbm91 dmVhdS9udmttL3N1YmRldi9zZWNib290L2Fjcl9yMzUyLmgKQEAgLTIzLDExICsyMywxMTYgQEAK ICNkZWZpbmUgX19OVktNX1NFQ0JPT1RfQUNSX1IzNTJfSF9fCiAKICNpbmNsdWRlICJhY3IuaCIK KyNpbmNsdWRlICJsc191Y29kZS5oIgogCiBzdHJ1Y3QgbHNfdWNvZGVfaW1nOwogCiAjZGVmaW5l IEFDUl9SMzUyX01BWF9BUFBTIDgKIAorLyoKKyAqCisgKiBMUyBibG9iIHN0cnVjdHVyZXMKKyAq CisgKi8KKworLyoqCisgKiBzdHJ1Y3QgYWNyX3IzNTJfbHNmX2xzYl9oZWFkZXIgLSBMUyBmaXJt d2FyZSBoZWFkZXIKKyAqIEBzaWduYXR1cmU6CQlzaWduYXR1cmUgdG8gdmVyaWZ5IHRoZSBmaXJt d2FyZSBhZ2FpbnN0CisgKiBAdWNvZGVfb2ZmOgkJb2Zmc2V0IG9mIHRoZSB1Y29kZSBibG9iIGlu IHRoZSBXUFIgcmVnaW9uLiBUaGUgdWNvZGUKKyAqICAgICAgICAgICAgICAgICAgICAgIGJsb2Ig Y29udGFpbnMgdGhlIGJvb3Rsb2FkZXIsIGNvZGUgYW5kIGRhdGEgb2YgdGhlCisgKiAgICAgICAg ICAgICAgICAgICAgICBMUyBmYWxjb24KKyAqIEB1Y29kZV9zaXplOgkJc2l6ZSBvZiB0aGUgdWNv ZGUgYmxvYiwgaW5jbHVkaW5nIGJvb3Rsb2FkZXIKKyAqIEBkYXRhX3NpemU6CQlzaXplIG9mIHRo ZSB1Y29kZSBibG9iIGRhdGEKKyAqIEBibF9jb2RlX3NpemU6CXNpemUgb2YgdGhlIGJvb3Rsb2Fk ZXIgY29kZQorICogQGJsX2ltZW1fb2ZmOglvZmZzZXQgaW4gaW1lbSBvZiB0aGUgYm9vdGxvYWRl cgorICogQGJsX2RhdGFfb2ZmOglvZmZzZXQgb2YgdGhlIGJvb3Rsb2FkZXIgZGF0YSBpbiBXUFIg cmVnaW9uCisgKiBAYmxfZGF0YV9zaXplOglzaXplIG9mIHRoZSBib290bG9hZGVyIGRhdGEKKyAq IEBhcHBfY29kZV9vZmY6CW9mZnNldCBvZiB0aGUgYXBwIGNvZGUgcmVsYXRpdmUgdG8gdWNvZGVf b2ZmCisgKiBAYXBwX2NvZGVfc2l6ZToJc2l6ZSBvZiB0aGUgYXBwIGNvZGUKKyAqIEBhcHBfZGF0 YV9vZmY6CW9mZnNldCBvZiB0aGUgYXBwIGRhdGEgcmVsYXRpdmUgdG8gdWNvZGVfb2ZmCisgKiBA YXBwX2RhdGFfc2l6ZToJc2l6ZSBvZiB0aGUgYXBwIGRhdGEKKyAqIEBmbGFnczoJCWZsYWdzIGZv ciB0aGUgc2VjdXJlIGJvb3Rsb2FkZXIKKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBpcyB3cml0dGVu IGludG8gdGhlIFdQUiByZWdpb24gZm9yIGVhY2ggbWFuYWdlZCBmYWxjb24uIEVhY2gKKyAqIGlu c3RhbmNlIGlzIHJlZmVyZW5jZWQgYnkgdGhlIGxzYl9vZmZzZXQgbWVtYmVyIG9mIHRoZSBjb3Jy ZXNwb25kaW5nCisgKiBsc2Zfd3ByX2hlYWRlci4KKyAqLworc3RydWN0IGFjcl9yMzUyX2xzZl9s c2JfaGVhZGVyIHsKKwkvKioKKwkgKiBMUyBmYWxjb24gc2lnbmF0dXJlcworCSAqIEBwcmRfa2V5 czoJCXNpZ25hdHVyZSB0byB1c2UgaW4gcHJvZHVjdGlvbiBtb2RlCisJICogQGRnYl9rZXlzOgkJ c2lnbmF0dXJlIHRvIHVzZSBpbiBkZWJ1ZyBtb2RlCisJICogQGJfcHJkX3ByZXNlbnQ6CXdoZXRo ZXIgdGhlIHByb2R1Y3Rpb24ga2V5IGlzIHByZXNlbnQKKwkgKiBAYl9kZ2JfcHJlc2VudDoJd2hl dGhlciB0aGUgZGVidWcga2V5IGlzIHByZXNlbnQKKwkgKiBAZmFsY29uX2lkOgkJSUQgb2YgdGhl IGZhbGNvbiB0aGUgdWNvZGUgYXBwbGllcyB0bworCSAqLworCXN0cnVjdCB7CisJCXU4IHByZF9r ZXlzWzJdWzE2XTsKKwkJdTggZGJnX2tleXNbMl1bMTZdOworCQl1MzIgYl9wcmRfcHJlc2VudDsK KwkJdTMyIGJfZGJnX3ByZXNlbnQ7CisJCXUzMiBmYWxjb25faWQ7CisJfSBzaWduYXR1cmU7CisJ dTMyIHVjb2RlX29mZjsKKwl1MzIgdWNvZGVfc2l6ZTsKKwl1MzIgZGF0YV9zaXplOworCXUzMiBi bF9jb2RlX3NpemU7CisJdTMyIGJsX2ltZW1fb2ZmOworCXUzMiBibF9kYXRhX29mZjsKKwl1MzIg YmxfZGF0YV9zaXplOworCXUzMiBhcHBfY29kZV9vZmY7CisJdTMyIGFwcF9jb2RlX3NpemU7CisJ dTMyIGFwcF9kYXRhX29mZjsKKwl1MzIgYXBwX2RhdGFfc2l6ZTsKKwl1MzIgZmxhZ3M7CisjZGVm aW5lIExTRl9GTEFHX0xPQURfQ09ERV9BVF8wCQkxCisjZGVmaW5lIExTRl9GTEFHX0RNQUNUTF9S RVFfQ1RYCQk0CisjZGVmaW5lIExTRl9GTEFHX0ZPUkNFX1BSSVZfTE9BRAk4Cit9OworCisvKioK KyAqIHN0cnVjdCBhY3JfcjM1Ml9sc2Zfd3ByX2hlYWRlciAtIExTIGJsb2IgV1BSIEhlYWRlcgor ICogQGZhbGNvbl9pZDoJCUxTIGZhbGNvbiBJRAorICogQGxzYl9vZmZzZXQ6CQlvZmZzZXQgb2Yg dGhlIGxzYl9sc2ZfaGVhZGVyIGluIHRoZSBXUFIgcmVnaW9uCisgKiBAYm9vdHN0cmFwX293bmVy OglzZWN1cmUgZmFsY29uIHJlcG9uc2libGUgZm9yIGJvb3RzdHJhcHBpbmcgdGhlIExTIGZhbGNv bgorICogQGxhenlfYm9vdHN0cmFwOglza2lwIGJvb3RzdHJhcHBpbmcgYnkgQUNSCisgKiBAc3Rh dHVzOgkJYm9vdHN0cmFwcGluZyBzdGF0dXMKKyAqCisgKiBBbiBhcnJheSBvZiB0aGVzZSBpcyB3 cml0dGVuIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIFdQUiByZWdpb24sIG9uZSBmb3IKKyAqIGVh Y2ggbWFuYWdlZCBmYWxjb24uIFRoZSBhcnJheSBpcyB0ZXJtaW5hdGVkIGJ5IGFuIGluc3RhbmNl IHdoaWNoIGZhbGNvbl9pZAorICogaXMgTFNGX0ZBTENPTl9JRF9JTlZBTElELgorICovCitzdHJ1 Y3QgYWNyX3IzNTJfbHNmX3dwcl9oZWFkZXIgeworCXUzMiBmYWxjb25faWQ7CisJdTMyIGxzYl9v ZmZzZXQ7CisJdTMyIGJvb3RzdHJhcF9vd25lcjsKKwl1MzIgbGF6eV9ib290c3RyYXA7CisJdTMy IHN0YXR1czsKKyNkZWZpbmUgTFNGX0lNQUdFX1NUQVRVU19OT05FCQkJCTAKKyNkZWZpbmUgTFNG X0lNQUdFX1NUQVRVU19DT1BZCQkJCTEKKyNkZWZpbmUgTFNGX0lNQUdFX1NUQVRVU19WQUxJREFU SU9OX0NPREVfRkFJTEVECQkyCisjZGVmaW5lIExTRl9JTUFHRV9TVEFUVVNfVkFMSURBVElPTl9E QVRBX0ZBSUxFRAkJMworI2RlZmluZSBMU0ZfSU1BR0VfU1RBVFVTX1ZBTElEQVRJT05fRE9ORQkJ NAorI2RlZmluZSBMU0ZfSU1BR0VfU1RBVFVTX1ZBTElEQVRJT05fU0tJUFBFRAkJNQorI2RlZmlu ZSBMU0ZfSU1BR0VfU1RBVFVTX0JPT1RTVFJBUF9SRUFEWQkJNgorfTsKKworLyoqCisgKiBzdHJ1 Y3QgbHNfdWNvZGVfaW1nX3IzNTIgLSB1Y29kZSBpbWFnZSBhdWdtZW50ZWQgd2l0aCByMzUyIGhl YWRlcnMKKyAqLworc3RydWN0IGxzX3Vjb2RlX2ltZ19yMzUyIHsKKwlzdHJ1Y3QgbHNfdWNvZGVf aW1nIGJhc2U7CisKKwlzdHJ1Y3QgYWNyX3IzNTJfbHNmX3dwcl9oZWFkZXIgd3ByX2hlYWRlcjsK KwlzdHJ1Y3QgYWNyX3IzNTJfbHNmX2xzYl9oZWFkZXIgbHNiX2hlYWRlcjsKK307CisjZGVmaW5l IGxzX3Vjb2RlX2ltZ19yMzUyKGkpIGNvbnRhaW5lcl9vZihpLCBzdHJ1Y3QgbHNfdWNvZGVfaW1n X3IzNTIsIGJhc2UpCisKKworLyoKKyAqIEhTIGJsb2Igc3RydWN0dXJlcworICovCisKIHN0cnVj dCBoc2ZfbG9hZF9oZWFkZXJfYXBwIHsKIAl1MzIgc2VjX2NvZGVfb2ZmOwogCXUzMiBzZWNfY29k ZV9zaXplOwpAQCAtNjIsNiArMTY3LDggQEAgc3RydWN0IGFjcl9yMzUyX2xzX2Z1bmMgewogCXUz MiBsaGRyX2ZsYWdzOwogfTsKIAorc3RydWN0IGFjcl9yMzUyOworCiAvKioKICAqIHN0cnVjdCBh Y3JfcjM1Ml9mdW5jIC0gbWFuYWdlcyBudWFuY2VzIGJldHdlZW4gQUNSIHZlcnNpb25zCiAgKgpA QCAtNzQsNiArMTgxLDEyIEBAIHN0cnVjdCBhY3JfcjM1Ml9mdW5jIHsKIAkJCQkgICAgdTY0KTsK IAl1MzIgaHNfYmxfZGVzY19zaXplOwogCisJc3RydWN0IGxzX3Vjb2RlX2ltZyAqKCpsc191Y29k ZV9pbWdfbG9hZCkoY29uc3Qgc3RydWN0IGFjcl9yMzUyICosCisJCQkJCQkgIGVudW0gbnZrbV9m YWxjb25pZHgpOworCWludCAoKmxzX2ZpbGxfaGVhZGVycykoc3RydWN0IGFjcl9yMzUyICosIHN0 cnVjdCBsaXN0X2hlYWQgKik7CisJaW50ICgqbHNfd3JpdGVfd3ByKShzdHJ1Y3QgYWNyX3IzNTIg Kiwgc3RydWN0IGxpc3RfaGVhZCAqLAorCQkJICAgIHN0cnVjdCBudmttX2dwdW9iaiAqLCB1MzIp OworCiAJY29uc3Qgc3RydWN0IGFjcl9yMzUyX2xzX2Z1bmMgKmxzX2Z1bmNbTlZLTV9GQUxDT05f RU5EXTsKIH07CiAKQEAgLTEyNCw0ICsyMzcsMTAgQEAgc3RydWN0IGFjcl9yMzUyIHsKIAogc3Ry dWN0IG52a21fYWNyICphY3JfcjM1Ml9uZXdfKGNvbnN0IHN0cnVjdCBhY3JfcjM1Ml9mdW5jICop OwogCitzdHJ1Y3QgbHNfdWNvZGVfaW1nICphY3JfcjM1Ml9sc191Y29kZV9pbWdfbG9hZChjb25z dCBzdHJ1Y3QgYWNyX3IzNTIgKiwKKwkJCQkJCWVudW0gbnZrbV9mYWxjb25pZHgpOworaW50IGFj cl9yMzUyX2xzX2ZpbGxfaGVhZGVycyhzdHJ1Y3QgYWNyX3IzNTIgKiwgc3RydWN0IGxpc3RfaGVh ZCAqKTsKK2ludCBhY3JfcjM1Ml9sc193cml0ZV93cHIoc3RydWN0IGFjcl9yMzUyICosIHN0cnVj dCBsaXN0X2hlYWQgKiwKKwkJCSAgc3RydWN0IG52a21fZ3B1b2JqICosIHUzMik7CisKICNlbmRp ZgpkaWZmIC0tZ2l0IGEvZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9hY3JfcjM2MS5j IGIvZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9hY3JfcjM2MS5jCmluZGV4IDFlM2M2 MmQxZTdhYy4uZGYwYThmMmE3MGVlIDEwMDY0NAotLS0gYS9kcm0vbm91dmVhdS9udmttL3N1YmRl di9zZWNib290L2Fjcl9yMzYxLmMKKysrIGIvZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9v dC9hY3JfcjM2MS5jCkBAIC0yMSw3ICsyMSw2IEBACiAgKi8KIAogI2luY2x1ZGUgImFjcl9yMzUy LmgiCi0jaW5jbHVkZSAibHNfdWNvZGUuaCIKIAogLyoqCiAgKiBzdHJ1Y3QgYWNyX3IzNjFfZmxj bl9ibF9kZXNjIC0gRE1FTSBib290bG9hZGVyIGRlc2NyaXB0b3IKQEAgLTYyLDExICs2MSwxMiBA QCBzdHJ1Y3QgYWNyX3IzNjFfZmxjbl9ibF9kZXNjIHsKIAogc3RhdGljIHZvaWQKIGFjcl9yMzYx X2dlbmVyYXRlX2ZsY25fYmxfZGVzYyhjb25zdCBzdHJ1Y3QgbnZrbV9hY3IgKmFjciwKLQkJCSAg ICAgICBjb25zdCBzdHJ1Y3QgbHNfdWNvZGVfaW1nICppbWcsIHU2NCB3cHJfYWRkciwKKwkJCSAg ICAgICBjb25zdCBzdHJ1Y3QgbHNfdWNvZGVfaW1nICpfaW1nLCB1NjQgd3ByX2FkZHIsCiAJCQkg ICAgICAgdm9pZCAqX2Rlc2MpCiB7CisJc3RydWN0IGxzX3Vjb2RlX2ltZ19yMzUyICppbWcgPSBs c191Y29kZV9pbWdfcjM1MihfaW1nKTsKIAlzdHJ1Y3QgYWNyX3IzNjFfZmxjbl9ibF9kZXNjICpk ZXNjID0gX2Rlc2M7Ci0JY29uc3Qgc3RydWN0IGxzX3Vjb2RlX2ltZ19kZXNjICpwZGVzYyA9ICZp bWctPnVjb2RlX2Rlc2M7CisJY29uc3Qgc3RydWN0IGxzX3Vjb2RlX2ltZ19kZXNjICpwZGVzYyA9 ICZpbWctPmJhc2UudWNvZGVfZGVzYzsKIAl1NjQgYmFzZSwgYWRkcl9jb2RlLCBhZGRyX2RhdGE7 CiAKIAliYXNlID0gd3ByX2FkZHIgKyBpbWctPmxzYl9oZWFkZXIudWNvZGVfb2ZmICsgcGRlc2Mt PmFwcF9zdGFydF9vZmZzZXQ7CkBAIC0xMjEsNiArMTIxLDkgQEAgY29uc3Qgc3RydWN0IGFjcl9y MzUyX2Z1bmMKIGFjcl9yMzYxX2Z1bmMgPSB7CiAJLmdlbmVyYXRlX2hzX2JsX2Rlc2MgPSBhY3Jf cjM2MV9nZW5lcmF0ZV9oc19ibF9kZXNjLAogCS5oc19ibF9kZXNjX3NpemUgPSBzaXplb2Yoc3Ry dWN0IGFjcl9yMzYxX2ZsY25fYmxfZGVzYyksCisJLmxzX3Vjb2RlX2ltZ19sb2FkID0gYWNyX3Iz NTJfbHNfdWNvZGVfaW1nX2xvYWQsCisJLmxzX2ZpbGxfaGVhZGVycyA9IGFjcl9yMzUyX2xzX2Zp bGxfaGVhZGVycywKKwkubHNfd3JpdGVfd3ByID0gYWNyX3IzNTJfbHNfd3JpdGVfd3ByLAogCS5s c19mdW5jID0gewogCQlbTlZLTV9GQUxDT05fRkVDU10gPSAmYWNyX3IzNjFfbHNfZmVjc19mdW5j LAogCQlbTlZLTV9GQUxDT05fR1BDQ1NdID0gJmFjcl9yMzYxX2xzX2dwY2NzX2Z1bmMsCmRpZmYg LS1naXQgYS9kcm0vbm91dmVhdS9udmttL3N1YmRldi9zZWNib290L2xzX3Vjb2RlLmggYi9kcm0v bm91dmVhdS9udmttL3N1YmRldi9zZWNib290L2xzX3Vjb2RlLmgKaW5kZXggM2Q4YzQyZTExODQ3 Li43ZjQyOTJmNzQwYjUgMTAwNjQ0Ci0tLSBhL2RybS9ub3V2ZWF1L252a20vc3ViZGV2L3NlY2Jv b3QvbHNfdWNvZGUuaAorKysgYi9kcm0vbm91dmVhdS9udmttL3N1YmRldi9zZWNib290L2xzX3Vj b2RlLmgKQEAgLTI3LDk4ICsyNyw2IEBACiAjaW5jbHVkZSA8Y29yZS9mYWxjb24uaD4KICNpbmNs dWRlIDxjb3JlL3N1YmRldi5oPgogCi0vKgotICoKLSAqIExTIGJsb2Igc3RydWN0dXJlcwotICoK LSAqLwotCi0vKioKLSAqIHN0cnVjdCBsc2ZfdWNvZGVfZGVzYyAtIExTIGZhbGNvbiBzaWduYXR1 cmVzCi0gKiBAcHJkX2tleXM6CQlzaWduYXR1cmUgdG8gdXNlIHdoZW4gdGhlIEdQVSBpcyBpbiBw cm9kdWN0aW9uIG1vZGUKLSAqIEBkZ2Jfa2V5czoJCXNpZ25hdHVyZSB0byB1c2Ugd2hlbiB0aGUg R1BVIGlzIGluIGRlYnVnIG1vZGUKLSAqIEBiX3ByZF9wcmVzZW50Ogl3aGV0aGVyIHRoZSBwcm9k dWN0aW9uIGtleSBpcyBwcmVzZW50Ci0gKiBAYl9kZ2JfcHJlc2VudDoJd2hldGhlciB0aGUgZGVi dWcga2V5IGlzIHByZXNlbnQKLSAqIEBmYWxjb25faWQ6CQlJRCBvZiB0aGUgZmFsY29uIHRoZSB1 Y29kZSBhcHBsaWVzIHRvCi0gKgotICogRGlyZWN0bHkgbG9hZGVkIGZyb20gYSBzaWduYXR1cmUg ZmlsZS4KLSAqLwotc3RydWN0IGxzZl91Y29kZV9kZXNjIHsKLQl1OCBwcmRfa2V5c1syXVsxNl07 Ci0JdTggZGJnX2tleXNbMl1bMTZdOwotCXUzMiBiX3ByZF9wcmVzZW50OwotCXUzMiBiX2RiZ19w cmVzZW50OwotCXUzMiBmYWxjb25faWQ7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBsc2ZfbHNiX2hl YWRlciAtIExTIGZpcm13YXJlIGhlYWRlcgotICogQHNpZ25hdHVyZToJCXNpZ25hdHVyZSB0byB2 ZXJpZnkgdGhlIGZpcm13YXJlIGFnYWluc3QKLSAqIEB1Y29kZV9vZmY6CQlvZmZzZXQgb2YgdGhl IHVjb2RlIGJsb2IgaW4gdGhlIFdQUiByZWdpb24uIFRoZSB1Y29kZQotICogICAgICAgICAgICAg ICAgICAgICAgYmxvYiBjb250YWlucyB0aGUgYm9vdGxvYWRlciwgY29kZSBhbmQgZGF0YSBvZiB0 aGUKLSAqICAgICAgICAgICAgICAgICAgICAgIExTIGZhbGNvbgotICogQHVjb2RlX3NpemU6CQlz aXplIG9mIHRoZSB1Y29kZSBibG9iLCBpbmNsdWRpbmcgYm9vdGxvYWRlcgotICogQGRhdGFfc2l6 ZToJCXNpemUgb2YgdGhlIHVjb2RlIGJsb2IgZGF0YQotICogQGJsX2NvZGVfc2l6ZToJc2l6ZSBv ZiB0aGUgYm9vdGxvYWRlciBjb2RlCi0gKiBAYmxfaW1lbV9vZmY6CW9mZnNldCBpbiBpbWVtIG9m IHRoZSBib290bG9hZGVyCi0gKiBAYmxfZGF0YV9vZmY6CW9mZnNldCBvZiB0aGUgYm9vdGxvYWRl ciBkYXRhIGluIFdQUiByZWdpb24KLSAqIEBibF9kYXRhX3NpemU6CXNpemUgb2YgdGhlIGJvb3Rs b2FkZXIgZGF0YQotICogQGFwcF9jb2RlX29mZjoJb2Zmc2V0IG9mIHRoZSBhcHAgY29kZSByZWxh dGl2ZSB0byB1Y29kZV9vZmYKLSAqIEBhcHBfY29kZV9zaXplOglzaXplIG9mIHRoZSBhcHAgY29k ZQotICogQGFwcF9kYXRhX29mZjoJb2Zmc2V0IG9mIHRoZSBhcHAgZGF0YSByZWxhdGl2ZSB0byB1 Y29kZV9vZmYKLSAqIEBhcHBfZGF0YV9zaXplOglzaXplIG9mIHRoZSBhcHAgZGF0YQotICogQGZs YWdzOgkJZmxhZ3MgZm9yIHRoZSBzZWN1cmUgYm9vdGxvYWRlcgotICoKLSAqIFRoaXMgc3RydWN0 dXJlIGlzIHdyaXR0ZW4gaW50byB0aGUgV1BSIHJlZ2lvbiBmb3IgZWFjaCBtYW5hZ2VkIGZhbGNv bi4gRWFjaAotICogaW5zdGFuY2UgaXMgcmVmZXJlbmNlZCBieSB0aGUgbHNiX29mZnNldCBtZW1i ZXIgb2YgdGhlIGNvcnJlc3BvbmRpbmcKLSAqIGxzZl93cHJfaGVhZGVyLgotICovCi1zdHJ1Y3Qg bHNmX2xzYl9oZWFkZXIgewotCXN0cnVjdCBsc2ZfdWNvZGVfZGVzYyBzaWduYXR1cmU7Ci0JdTMy IHVjb2RlX29mZjsKLQl1MzIgdWNvZGVfc2l6ZTsKLQl1MzIgZGF0YV9zaXplOwotCXUzMiBibF9j b2RlX3NpemU7Ci0JdTMyIGJsX2ltZW1fb2ZmOwotCXUzMiBibF9kYXRhX29mZjsKLQl1MzIgYmxf ZGF0YV9zaXplOwotCXUzMiBhcHBfY29kZV9vZmY7Ci0JdTMyIGFwcF9jb2RlX3NpemU7Ci0JdTMy IGFwcF9kYXRhX29mZjsKLQl1MzIgYXBwX2RhdGFfc2l6ZTsKLQl1MzIgZmxhZ3M7Ci0jZGVmaW5l IExTRl9GTEFHX0xPQURfQ09ERV9BVF8wCQkxCi0jZGVmaW5lIExTRl9GTEFHX0RNQUNUTF9SRVFf Q1RYCQk0Ci0jZGVmaW5lIExTRl9GTEFHX0ZPUkNFX1BSSVZfTE9BRAk4Ci19OwotCi0vKioKLSAq IHN0cnVjdCBsc2Zfd3ByX2hlYWRlciAtIExTIGJsb2IgV1BSIEhlYWRlcgotICogQGZhbGNvbl9p ZDoJCUxTIGZhbGNvbiBJRAotICogQGxzYl9vZmZzZXQ6CQlvZmZzZXQgb2YgdGhlIGxzYl9sc2Zf aGVhZGVyIGluIHRoZSBXUFIgcmVnaW9uCi0gKiBAYm9vdHN0cmFwX293bmVyOglzZWN1cmUgZmFs Y29uIHJlcG9uc2libGUgZm9yIGJvb3RzdHJhcHBpbmcgdGhlIExTIGZhbGNvbgotICogQGxhenlf Ym9vdHN0cmFwOglza2lwIGJvb3RzdHJhcHBpbmcgYnkgQUNSCi0gKiBAc3RhdHVzOgkJYm9vdHN0 cmFwcGluZyBzdGF0dXMKLSAqCi0gKiBBbiBhcnJheSBvZiB0aGVzZSBpcyB3cml0dGVuIGF0IHRo ZSBiZWdpbm5pbmcgb2YgdGhlIFdQUiByZWdpb24sIG9uZSBmb3IKLSAqIGVhY2ggbWFuYWdlZCBm YWxjb24uIFRoZSBhcnJheSBpcyB0ZXJtaW5hdGVkIGJ5IGFuIGluc3RhbmNlIHdoaWNoIGZhbGNv bl9pZAotICogaXMgTFNGX0ZBTENPTl9JRF9JTlZBTElELgotICovCi1zdHJ1Y3QgbHNmX3dwcl9o ZWFkZXIgewotCXUzMiBmYWxjb25faWQ7Ci0JdTMyIGxzYl9vZmZzZXQ7Ci0JdTMyIGJvb3RzdHJh cF9vd25lcjsKLQl1MzIgbGF6eV9ib290c3RyYXA7Ci0JdTMyIHN0YXR1czsKLSNkZWZpbmUgTFNG X0lNQUdFX1NUQVRVU19OT05FCQkJCTAKLSNkZWZpbmUgTFNGX0lNQUdFX1NUQVRVU19DT1BZCQkJ CTEKLSNkZWZpbmUgTFNGX0lNQUdFX1NUQVRVU19WQUxJREFUSU9OX0NPREVfRkFJTEVECQkyCi0j ZGVmaW5lIExTRl9JTUFHRV9TVEFUVVNfVkFMSURBVElPTl9EQVRBX0ZBSUxFRAkJMwotI2RlZmlu ZSBMU0ZfSU1BR0VfU1RBVFVTX1ZBTElEQVRJT05fRE9ORQkJNAotI2RlZmluZSBMU0ZfSU1BR0Vf U1RBVFVTX1ZBTElEQVRJT05fU0tJUFBFRAkJNQotI2RlZmluZSBMU0ZfSU1BR0VfU1RBVFVTX0JP T1RTVFJBUF9SRUFEWQkJNgotfTsKLQogCiAvKioKICAqIHN0cnVjdCBsc191Y29kZV9pbWdfZGVz YyAtIGRlc2NyaXB0b3Igb2YgZmlybXdhcmUgaW1hZ2UKQEAgLTE3NSw4ICs4Myw4IEBAIHN0cnVj dCBsc191Y29kZV9pbWdfZGVzYyB7CiAgKiBAdWNvZGVfZGVzYzoJCWxvYWRlZCBvciBnZW5lcmF0 ZWQgbWFwIG9mIHVjb2RlX2RhdGEKICAqIEB1Y29kZV9kYXRhOgkJZmlybXdhcmUgcGF5bG9hZCAo Y29kZSBhbmQgZGF0YSkKICAqIEB1Y29kZV9zaXplOgkJc2l6ZSBpbiBieXRlcyBvZiBkYXRhIGlu IHVjb2RlX2RhdGEKLSAqIEB3cHJfaGVhZGVyOgkJV1BSIGhlYWRlciB0byBiZSB3cml0dGVuIHRv IHRoZSBMUyBibG9iCi0gKiBAbHNiX2hlYWRlcjoJCUxTQiBoZWFkZXIgdG8gYmUgd3JpdHRlbiB0 byB0aGUgTFMgYmxvYgorICogQHNpZzoJCXNpZ25hdHVyZSBmb3IgdGhpcyBmaXJtd2FyZQorICog QHNpZzpzaXplOgkJc2l6ZSBvZiB0aGUgc2lnbmF0dXJlIGluIGJ5dGVzCiAgKgogICogUHJlcGFy aW5nIHRoZSBXUFIgTFMgYmxvYiByZXF1aXJlcyBpbmZvcm1hdGlvbiBhYm91dCBhbGwgdGhlIExT IGZpcm13YXJlcwogICogKHNpemUsIGV0YykgdG8gYmUga25vd24uIFRoaXMgc3RydWN0dXJlIGNv bnRhaW5zIGFsbCB0aGUgZGF0YSBvZiBvbmUgTFMKQEAgLTE5MCw4ICs5OCw4IEBAIHN0cnVjdCBs c191Y29kZV9pbWcgewogCXU4ICp1Y29kZV9kYXRhOwogCXUzMiB1Y29kZV9zaXplOwogCi0Jc3Ry dWN0IGxzZl93cHJfaGVhZGVyIHdwcl9oZWFkZXI7Ci0Jc3RydWN0IGxzZl9sc2JfaGVhZGVyIGxz Yl9oZWFkZXI7CisJdTggKnNpZzsKKwl1MzIgc2lnX3NpemU7CiB9OwogCiAvKioKZGlmZiAtLWdp dCBhL2RybS9ub3V2ZWF1L252a20vc3ViZGV2L3NlY2Jvb3QvbHNfdWNvZGVfZ3IuYyBiL2RybS9u b3V2ZWF1L252a20vc3ViZGV2L3NlY2Jvb3QvbHNfdWNvZGVfZ3IuYwppbmRleCAxYzMyY2IwZjE2 ZjkuLjQwYTZkZjc3YmI4YSAxMDA2NDQKLS0tIGEvZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2Vj Ym9vdC9sc191Y29kZV9nci5jCisrKyBiL2RybS9ub3V2ZWF1L252a20vc3ViZGV2L3NlY2Jvb3Qv bHNfdWNvZGVfZ3IuYwpAQCAtOTEsMTAgKzkxLDkgQEAgbHNfdWNvZGVfaW1nX2J1aWxkKGNvbnN0 IHN0cnVjdCBmaXJtd2FyZSAqYmwsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqY29kZSwKICAqLwog c3RhdGljIGludAogbHNfdWNvZGVfaW1nX2xvYWRfZ3IoY29uc3Qgc3RydWN0IG52a21fc3ViZGV2 ICpzdWJkZXYsIHN0cnVjdCBsc191Y29kZV9pbWcgKmltZywKLQkJICAgICBjb25zdCBjaGFyICpm YWxjb25fbmFtZSwgY29uc3QgdTMyIGZhbGNvbl9pZCkKKwkJICAgICBjb25zdCBjaGFyICpmYWxj b25fbmFtZSkKIHsKLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmJsLCAqY29kZSwgKmRhdGE7Ci0J c3RydWN0IGxzZl91Y29kZV9kZXNjICpsc2ZfZGVzYzsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUg KmJsLCAqY29kZSwgKmRhdGEsICpzaWc7CiAJY2hhciBmWzY0XTsKIAlpbnQgcmV0OwogCkBAIC0x MTMsNiArMTEyLDE3IEBAIGxzX3Vjb2RlX2ltZ19sb2FkX2dyKGNvbnN0IHN0cnVjdCBudmttX3N1 YmRldiAqc3ViZGV2LCBzdHJ1Y3QgbHNfdWNvZGVfaW1nICppbWcsCiAJaWYgKHJldCkKIAkJZ290 byBmcmVlX2luc3Q7CiAKKwlzbnByaW50ZihmLCBzaXplb2YoZiksICJnci8lc19zaWciLCBmYWxj b25fbmFtZSk7CisJcmV0ID0gbnZrbV9maXJtd2FyZV9nZXQoc3ViZGV2LT5kZXZpY2UsIGYsICZz aWcpOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9kYXRhOworCWltZy0+c2lnID0ga21lbWR1cChz aWctPmRhdGEsIHNpZy0+c2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbWctPnNpZykgeworCQly ZXQgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfc2lnOworCX0KKwlpbWctPnNpZ19zaXplID0gc2ln LT5zaXplOworCiAJaW1nLT51Y29kZV9kYXRhID0gbHNfdWNvZGVfaW1nX2J1aWxkKGJsLCBjb2Rl LCBkYXRhLAogCQkJCQkgICAgICZpbWctPnVjb2RlX2Rlc2MpOwogCWlmIChJU19FUlIoaW1nLT51 Y29kZV9kYXRhKSkgewpAQCAtMTIxLDIzICsxMzEsOCBAQCBsc191Y29kZV9pbWdfbG9hZF9ncihj b25zdCBzdHJ1Y3QgbnZrbV9zdWJkZXYgKnN1YmRldiwgc3RydWN0IGxzX3Vjb2RlX2ltZyAqaW1n LAogCX0KIAlpbWctPnVjb2RlX3NpemUgPSBpbWctPnVjb2RlX2Rlc2MuaW1hZ2Vfc2l6ZTsKIAot CXNucHJpbnRmKGYsIHNpemVvZihmKSwgImdyLyVzX3NpZyIsIGZhbGNvbl9uYW1lKTsKLQlsc2Zf ZGVzYyA9IG52a21fYWNyX2xvYWRfZmlybXdhcmUoc3ViZGV2LCBmLCBzaXplb2YoKmxzZl9kZXNj KSk7Ci0JaWYgKElTX0VSUihsc2ZfZGVzYykpIHsKLQkJcmV0ID0gUFRSX0VSUihsc2ZfZGVzYyk7 Ci0JCWdvdG8gZnJlZV9pbWFnZTsKLQl9Ci0JLyogbm90IG5lZWRlZD8gdGhlIHNpZ25hdHVyZSBz aG91bGQgYWxyZWFkeSBoYXZlIHRoZSByaWdodCB2YWx1ZSAqLwotCWxzZl9kZXNjLT5mYWxjb25f aWQgPSBmYWxjb25faWQ7Ci0JbWVtY3B5KCZpbWctPmxzYl9oZWFkZXIuc2lnbmF0dXJlLCBsc2Zf ZGVzYywgc2l6ZW9mKCpsc2ZfZGVzYykpOwotCWltZy0+ZmFsY29uX2lkID0gbHNmX2Rlc2MtPmZh bGNvbl9pZDsKLQlrZnJlZShsc2ZfZGVzYyk7Ci0KLQkvKiBzdWNjZXNzIHBhdGggLSBvbmx5IGZy ZWUgcmVxdWVzdGVkIGZpcm13YXJlIGZpbGVzICovCi0JZ290byBmcmVlX2RhdGE7Ci0KLWZyZWVf aW1hZ2U6Ci0Ja2ZyZWUoaW1nLT51Y29kZV9kYXRhKTsKK2ZyZWVfc2lnOgorCW52a21fZmlybXdh cmVfcHV0KHNpZyk7CiBmcmVlX2RhdGE6CiAJbnZrbV9maXJtd2FyZV9wdXQoZGF0YSk7CiBmcmVl X2luc3Q6CkBAIC0xNTIsMTIgKzE0NywxMiBAQCBpbnQKIGFjcl9sc191Y29kZV9sb2FkX2ZlY3Mo Y29uc3Qgc3RydWN0IG52a21fc3ViZGV2ICpzdWJkZXYsCiAJCSAgICAgICBzdHJ1Y3QgbHNfdWNv ZGVfaW1nICppbWcpCiB7Ci0JcmV0dXJuIGxzX3Vjb2RlX2ltZ19sb2FkX2dyKHN1YmRldiwgaW1n LCAiZmVjcyIsIE5WS01fRkFMQ09OX0ZFQ1MpOworCXJldHVybiBsc191Y29kZV9pbWdfbG9hZF9n cihzdWJkZXYsIGltZywgImZlY3MiKTsKIH0KIAogaW50CiBhY3JfbHNfdWNvZGVfbG9hZF9ncGNj cyhjb25zdCBzdHJ1Y3QgbnZrbV9zdWJkZXYgKnN1YmRldiwKIAkJCXN0cnVjdCBsc191Y29kZV9p bWcgKmltZykKIHsKLQlyZXR1cm4gbHNfdWNvZGVfaW1nX2xvYWRfZ3Ioc3ViZGV2LCBpbWcsICJn cGNjcyIsIE5WS01fRkFMQ09OX0dQQ0NTKTsKKwlyZXR1cm4gbHNfdWNvZGVfaW1nX2xvYWRfZ3Io c3ViZGV2LCBpbWcsICJncGNjcyIpOwogfQotLSAKMi4xMC4wCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOb3V2ZWF1IG1haWxpbmcgbGlzdApOb3V2ZWF1 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL25vdXZlYXUK