From mboxrd@z Thu Jan 1 00:00:00 1970 From: Subject: [PATCH 09/49] drm/amd/display: Synchronous DisplayPort Link Training Date: Fri, 9 Aug 2019 17:37:02 -0400 Message-ID: <20190809213742.30301-10-sunpeng.li@amd.com> References: <20190809213742.30301-1-sunpeng.li@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190809213742.30301-1-sunpeng.li-5C7GfCeVMHo@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: Leo Li , Jun Lei , David Galiffi RnJvbTogRGF2aWQgR2FsaWZmaSA8ZGF2aWQuZ2FsaWZmaUBhbWQuY29tPgoKW1dIWV0KV2UgcmVx dWlyZSBhIG1ldGhvZCB0byBwZXJmb3JtIHN5bmNocm9ub3VzIGxpbmsgdHJhaW5pbmcuCgpbSE9X XQpTeW5jIExUIGlzIGJyb2tlbiBpbnRvIDMgYmFzaWMgc3RlcHMuCiJCZWdpbiIgc3RhcnRzIHRo ZSBzdGF0ZSBtYWNoaW5lLCBhbmQgcmVzZXRzICJwcmVmZXJyZWQiIGxpbmsgc2V0dGluZ3MuCiJB dHRlbXB0IiB3aWxsIGF0dGVtcHQgdG8gdHJhaW4gdGhlIGxpbmsgd2l0aCBhIGdpdmVuIHNldCBv ZiB0cmFpbmluZwpwYXJhbWV0ZXJzLgoiRW5kIiBzdG9wcyB0aGUgc3RhdGUgbWFjaGluZSwgYW5k IHdpbGwgb3B0aW9uYWxseSBkaXNhYmxlIHRoZSBsaW5rIHBoeS4KQmV0d2VlbiAiQmVnaW4iIGFu ZCAiRW5kIiBEUENEOjYwMGggbXVzdCBub3QgYmUgc2V0IHRvICIyIgooRDM6UG93ZXJlZCBEb3du KS4KQmV0d2VlbiAiQmVnaW4iIGFuZCAiRW5kIiwgdGhlcmUgbWF5IGJlIG11bHRpcGxlICJBdHRl bXB0cyIgd2l0aCBkaWZmZXJlbnQKdHJhaW5pbmcgcGFyYW1ldGVycy4KClNpZ25lZC1vZmYtYnk6 IERhdmlkIEdhbGlmZmkgPERhdmlkLkdhbGlmZmlAYW1kLmNvbT4KUmV2aWV3ZWQtYnk6IEp1biBM ZWkgPEp1bi5MZWlAYW1kLmNvbT4KQWNrZWQtYnk6IExlbyBMaSA8c3VucGVuZy5saUBhbWQuY29t PgotLS0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9jb3JlL2RjX2xpbmsuYyB8ICA1 MyArLS0tCiAuLi4vZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9jb3JlL2RjX2xpbmtfZHAuYyAgfCAy OTMgKysrKysrKysrKysrKysrKy0tCiAuLi4vZHJtL2FtZC9kaXNwbGF5L2RjL2NvcmUvZGNfbGlu a19od3NzLmMgICAgfCAgNDMgKy0tCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZGNf ZHBfdHlwZXMuaCAgfCAgIDMgKwogZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjX2xp bmsuaCAgICAgIHwgIDEwICsKIC4uLi9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2luYy9kY19saW5r X2RwLmggICB8ICAgMyArCiAuLi4vZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9pbmMvbGlua19od3Nz LmggICAgfCAgIDIgLQogNyBmaWxlcyBjaGFuZ2VkLCAyODIgaW5zZXJ0aW9ucygrKSwgMTI1IGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9j b3JlL2RjX2xpbmsuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9jb3JlL2RjX2xp bmsuYwppbmRleCA5MTY2ZTQxMjQ4ZDguLjlkNjdhNmQ3NjIxYyAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2NvcmUvZGNfbGluay5jCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9hbWQvZGlzcGxheS9kYy9jb3JlL2RjX2xpbmsuYwpAQCAtMTM4NSw1NyArMTM4NSw2IEBA IHZvaWQgbGlua19kZXN0cm95KHN0cnVjdCBkY19saW5rICoqbGluaykKIAkqbGluayA9IE5VTEw7 CiB9CiAKLXN0YXRpYyB2b2lkIGRwY2RfY29uZmlndXJlX3BhbmVsX21vZGUoCi0Jc3RydWN0IGRj X2xpbmsgKmxpbmssCi0JZW51bSBkcF9wYW5lbF9tb2RlIHBhbmVsX21vZGUpCi17Ci0JdW5pb24g ZHBjZF9lZHBfY29uZmlnIGVkcF9jb25maWdfc2V0OwotCWJvb2wgcGFuZWxfbW9kZV9lZHAgPSBm YWxzZTsKLQlEQ19MT0dHRVJfSU5JVChsaW5rLT5jdHgtPmxvZ2dlcik7Ci0KLQltZW1zZXQoJmVk cF9jb25maWdfc2V0LCAnXDAnLCBzaXplb2YodW5pb24gZHBjZF9lZHBfY29uZmlnKSk7Ci0KLQlp ZiAoRFBfUEFORUxfTU9ERV9ERUZBVUxUICE9IHBhbmVsX21vZGUpIHsKLQotCQlzd2l0Y2ggKHBh bmVsX21vZGUpIHsKLQkJY2FzZSBEUF9QQU5FTF9NT0RFX0VEUDoKLQkJY2FzZSBEUF9QQU5FTF9N T0RFX1NQRUNJQUw6Ci0JCQlwYW5lbF9tb2RlX2VkcCA9IHRydWU7Ci0JCQlicmVhazsKLQotCQlk ZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKnNldCBlZHAgcGFuZWwgbW9kZSBpbiByZWNl aXZlciovCi0JCWNvcmVfbGlua19yZWFkX2RwY2QoCi0JCQlsaW5rLAotCQkJRFBfRURQX0NPTkZJ R1VSQVRJT05fU0VULAotCQkJJmVkcF9jb25maWdfc2V0LnJhdywKLQkJCXNpemVvZihlZHBfY29u ZmlnX3NldC5yYXcpKTsKLQotCQlpZiAoZWRwX2NvbmZpZ19zZXQuYml0cy5QQU5FTF9NT0RFX0VE UAotCQkJIT0gcGFuZWxfbW9kZV9lZHApIHsKLQkJCWVudW0gZGRjX3Jlc3VsdCByZXN1bHQgPSBE RENfUkVTVUxUX1VOS05PV047Ci0KLQkJCWVkcF9jb25maWdfc2V0LmJpdHMuUEFORUxfTU9ERV9F RFAgPQotCQkJcGFuZWxfbW9kZV9lZHA7Ci0JCQlyZXN1bHQgPSBjb3JlX2xpbmtfd3JpdGVfZHBj ZCgKLQkJCQlsaW5rLAotCQkJCURQX0VEUF9DT05GSUdVUkFUSU9OX1NFVCwKLQkJCQkmZWRwX2Nv bmZpZ19zZXQucmF3LAotCQkJCXNpemVvZihlZHBfY29uZmlnX3NldC5yYXcpKTsKLQotCQkJQVNT RVJUKHJlc3VsdCA9PSBERENfUkVTVUxUX1NVQ0VTU0ZVTEwpOwotCQl9Ci0JfQotCURDX0xPR19E RVRFQ1RJT05fRFBfQ0FQUygiTGluazogJWQgZURQIHBhbmVsIG1vZGUgc3VwcG9ydGVkOiAlZCAi Ci0JCQkiZURQIHBhbmVsIG1vZGUgZW5hYmxlZDogJWQgXG4iLAotCQkJbGluay0+bGlua19pbmRl eCwKLQkJCWxpbmstPmRwY2RfY2Fwcy5wYW5lbF9tb2RlX2VkcCwKLQkJCXBhbmVsX21vZGVfZWRw KTsKLX0KLQogc3RhdGljIHZvaWQgZW5hYmxlX3N0cmVhbV9mZWF0dXJlcyhzdHJ1Y3QgcGlwZV9j dHggKnBpcGVfY3R4KQogewogCXN0cnVjdCBkY19zdHJlYW1fc3RhdGUgKnN0cmVhbSA9IHBpcGVf Y3R4LT5zdHJlYW07CkBAIC0xNTA2LDcgKzE0NTUsNyBAQCBzdGF0aWMgZW51bSBkY19zdGF0dXMg ZW5hYmxlX2xpbmtfZHAoCiAJfQogCiAJcGFuZWxfbW9kZSA9IGRwX2dldF9wYW5lbF9tb2RlKGxp bmspOwotCWRwY2RfY29uZmlndXJlX3BhbmVsX21vZGUobGluaywgcGFuZWxfbW9kZSk7CisJZHBf c2V0X3BhbmVsX21vZGUobGluaywgcGFuZWxfbW9kZSk7CiAKIAlza2lwX3ZpZGVvX3BhdHRlcm4g PSB0cnVlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvY29y ZS9kY19saW5rX2RwLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvY29yZS9kY19s aW5rX2RwLmMKaW5kZXggMDhiZDljOTZiOWIwLi44ZTY2YjJlOWQ2YWYgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9jb3JlL2RjX2xpbmtfZHAuYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvY29yZS9kY19saW5rX2RwLmMKQEAgLTk2NSw2ICs5 NjUsNyBAQCBzdGF0aWMgaW5saW5lIGVudW0gbGlua190cmFpbmluZ19yZXN1bHQgcGVyZm9ybV9s aW5rX3RyYWluaW5nX2ludCgKIHN0YXRpYyB2b2lkIGluaXRpYWxpemVfdHJhaW5pbmdfc2V0dGlu Z3MoCiAJIHN0cnVjdCBkY19saW5rICpsaW5rLAogCWNvbnN0IHN0cnVjdCBkY19saW5rX3NldHRp bmdzICpsaW5rX3NldHRpbmcsCisJY29uc3Qgc3RydWN0IGRjX2xpbmtfdHJhaW5pbmdfb3ZlcnJp ZGVzICpvdmVycmlkZXMsCiAJc3RydWN0IGxpbmtfdHJhaW5pbmdfc2V0dGluZ3MgKmx0X3NldHRp bmdzKQogewogCXVpbnQzMl90IGxhbmU7CkBAIC05OTcsMjMgKzk5OCwyMyBAQCBzdGF0aWMgdm9p ZCBpbml0aWFsaXplX3RyYWluaW5nX3NldHRpbmdzKAogCS8qIEluaXRpYWxpemUgbGluayBzcHJl YWQgKi8KIAlpZiAobGluay0+ZHBfc3Nfb2ZmKQogCQlsdF9zZXR0aW5ncy0+bGlua19zZXR0aW5n cy5saW5rX3NwcmVhZCA9IExJTktfU1BSRUFEX0RJU0FCTEVEOwotCWVsc2UgaWYgKGxpbmstPnBy ZWZlcnJlZF90cmFpbmluZ19zZXR0aW5ncy5kb3duc3ByZWFkICE9IE5VTEwpCisJZWxzZSBpZiAo b3ZlcnJpZGVzLT5kb3duc3ByZWFkICE9IE5VTEwpCiAJCWx0X3NldHRpbmdzLT5saW5rX3NldHRp bmdzLmxpbmtfc3ByZWFkCi0JCQk9ICpsaW5rLT5wcmVmZXJyZWRfdHJhaW5pbmdfc2V0dGluZ3Mu ZG93bnNwcmVhZAorCQkJPSAqb3ZlcnJpZGVzLT5kb3duc3ByZWFkCiAJCQk/IExJTktfU1BSRUFE XzA1X0RPV05TUFJFQURfMzBLSFoKIAkJCTogTElOS19TUFJFQURfRElTQUJMRUQ7CiAJZWxzZQog CQlsdF9zZXR0aW5ncy0+bGlua19zZXR0aW5ncy5saW5rX3NwcmVhZCA9IExJTktfU1BSRUFEXzA1 X0RPV05TUFJFQURfMzBLSFo7CiAKIAkvKiBJbml0aWFsaXplIGxhbmUgc2V0dGluZ3Mgb3ZlcnJp ZGVzICovCi0JaWYgKGxpbmstPnByZWZlcnJlZF90cmFpbmluZ19zZXR0aW5ncy52b2x0YWdlX3N3 aW5nICE9IE5VTEwpCi0JCWx0X3NldHRpbmdzLT52b2x0YWdlX3N3aW5nID0gbGluay0+cHJlZmVy cmVkX3RyYWluaW5nX3NldHRpbmdzLnZvbHRhZ2Vfc3dpbmc7CisJaWYgKG92ZXJyaWRlcy0+dm9s dGFnZV9zd2luZyAhPSBOVUxMKQorCQlsdF9zZXR0aW5ncy0+dm9sdGFnZV9zd2luZyA9IG92ZXJy aWRlcy0+dm9sdGFnZV9zd2luZzsKIAotCWlmIChsaW5rLT5wcmVmZXJyZWRfdHJhaW5pbmdfc2V0 dGluZ3MucHJlX2VtcGhhc2lzICE9IE5VTEwpCi0JCWx0X3NldHRpbmdzLT5wcmVfZW1waGFzaXMg PSBsaW5rLT5wcmVmZXJyZWRfdHJhaW5pbmdfc2V0dGluZ3MucHJlX2VtcGhhc2lzOworCWlmIChv dmVycmlkZXMtPnByZV9lbXBoYXNpcyAhPSBOVUxMKQorCQlsdF9zZXR0aW5ncy0+cHJlX2VtcGhh c2lzID0gb3ZlcnJpZGVzLT5wcmVfZW1waGFzaXM7CiAKLQlpZiAobGluay0+cHJlZmVycmVkX3Ry YWluaW5nX3NldHRpbmdzLnBvc3RfY3Vyc29yMiAhPSBOVUxMKQotCQlsdF9zZXR0aW5ncy0+cG9z dF9jdXJzb3IyID0gbGluay0+cHJlZmVycmVkX3RyYWluaW5nX3NldHRpbmdzLnBvc3RfY3Vyc29y MjsKKwlpZiAob3ZlcnJpZGVzLT5wb3N0X2N1cnNvcjIgIT0gTlVMTCkKKwkJbHRfc2V0dGluZ3Mt PnBvc3RfY3Vyc29yMiA9IG92ZXJyaWRlcy0+cG9zdF9jdXJzb3IyOwogCiAJLyogSW5pdGlhbGl6 ZSBsYW5lIHNldHRpbmdzIChWUy9QRS9QQzIpICovCiAJZm9yIChsYW5lID0gMDsgbGFuZSA8IExB TkVfQ09VTlRfRFBfTUFYOyBsYW5lKyspIHsKQEAgLTEwMzIsMjMgKzEwMzMsMjMgQEAgc3RhdGlj IHZvaWQgaW5pdGlhbGl6ZV90cmFpbmluZ19zZXR0aW5ncygKIAl9CiAKIAkvKiBJbml0aWFsaXpl IHRyYWluaW5nIHRpbWluZ3MgKi8KLQlpZiAobGluay0+cHJlZmVycmVkX3RyYWluaW5nX3NldHRp bmdzLmNyX3BhdHRlcm5fdGltZSAhPSBOVUxMKQotCQlsdF9zZXR0aW5ncy0+Y3JfcGF0dGVybl90 aW1lID0gKmxpbmstPnByZWZlcnJlZF90cmFpbmluZ19zZXR0aW5ncy5jcl9wYXR0ZXJuX3RpbWU7 CisJaWYgKG92ZXJyaWRlcy0+Y3JfcGF0dGVybl90aW1lICE9IE5VTEwpCisJCWx0X3NldHRpbmdz LT5jcl9wYXR0ZXJuX3RpbWUgPSAqb3ZlcnJpZGVzLT5jcl9wYXR0ZXJuX3RpbWU7CiAJZWxzZQot CQlsdF9zZXR0aW5ncy0+Y3JfcGF0dGVybl90aW1lID0gMTAwOworCQlsdF9zZXR0aW5ncy0+Y3Jf cGF0dGVybl90aW1lID0gZ2V0X3RyYWluaW5nX2F1eF9yZF9pbnRlcnZhbChsaW5rLCAxMDApOwog Ci0JaWYgKGxpbmstPnByZWZlcnJlZF90cmFpbmluZ19zZXR0aW5ncy5lcV9wYXR0ZXJuX3RpbWUg IT0gTlVMTCkKLQkJbHRfc2V0dGluZ3MtPmVxX3BhdHRlcm5fdGltZSA9ICpsaW5rLT5wcmVmZXJy ZWRfdHJhaW5pbmdfc2V0dGluZ3MuZXFfcGF0dGVybl90aW1lOworCWlmIChvdmVycmlkZXMtPmVx X3BhdHRlcm5fdGltZSAhPSBOVUxMKQorCQlsdF9zZXR0aW5ncy0+ZXFfcGF0dGVybl90aW1lID0g Km92ZXJyaWRlcy0+ZXFfcGF0dGVybl90aW1lOwogCWVsc2UKIAkJbHRfc2V0dGluZ3MtPmVxX3Bh dHRlcm5fdGltZSA9IGdldF90cmFpbmluZ19hdXhfcmRfaW50ZXJ2YWwobGluaywgNDAwKTsKIAot CWlmIChsaW5rLT5wcmVmZXJyZWRfdHJhaW5pbmdfc2V0dGluZ3MucGF0dGVybl9mb3JfZXEgIT0g TlVMTCkKLQkJbHRfc2V0dGluZ3MtPnBhdHRlcm5fZm9yX2VxID0gKmxpbmstPnByZWZlcnJlZF90 cmFpbmluZ19zZXR0aW5ncy5wYXR0ZXJuX2Zvcl9lcTsKKwlpZiAob3ZlcnJpZGVzLT5wYXR0ZXJu X2Zvcl9lcSAhPSBOVUxMKQorCQlsdF9zZXR0aW5ncy0+cGF0dGVybl9mb3JfZXEgPSAqb3ZlcnJp ZGVzLT5wYXR0ZXJuX2Zvcl9lcTsKIAllbHNlCiAJCWx0X3NldHRpbmdzLT5wYXR0ZXJuX2Zvcl9l cSA9IGdldF9zdXBwb3J0ZWRfdHAobGluayk7CiAKLQlpZiAobGluay0+cHJlZmVycmVkX3RyYWlu aW5nX3NldHRpbmdzLmVuaGFuY2VkX2ZyYW1pbmcgIT0gTlVMTCkKLQkJbHRfc2V0dGluZ3MtPmVu aGFuY2VkX2ZyYW1pbmcgPSAqbGluay0+cHJlZmVycmVkX3RyYWluaW5nX3NldHRpbmdzLmVuaGFu Y2VkX2ZyYW1pbmc7CisJaWYgKG92ZXJyaWRlcy0+ZW5oYW5jZWRfZnJhbWluZyAhPSBOVUxMKQor CQlsdF9zZXR0aW5ncy0+ZW5oYW5jZWRfZnJhbWluZyA9ICpvdmVycmlkZXMtPmVuaGFuY2VkX2Zy YW1pbmc7CiAJZWxzZQogCQlsdF9zZXR0aW5ncy0+ZW5oYW5jZWRfZnJhbWluZyA9IDE7CiB9CkBA IC0xMTM5LDcgKzExNDAsMTEgQEAgYm9vbCBkY19saW5rX2RwX3BlcmZvcm1fbGlua190cmFpbmlu Z19za2lwX2F1eCgKIAlzdHJ1Y3QgbGlua190cmFpbmluZ19zZXR0aW5ncyBsdF9zZXR0aW5nczsK IAllbnVtIGRjX2RwX3RyYWluaW5nX3BhdHRlcm4gcGF0dGVybl9mb3JfY3IgPSBEUF9UUkFJTklO R19QQVRURVJOX1NFUVVFTkNFXzE7CiAKLQlpbml0aWFsaXplX3RyYWluaW5nX3NldHRpbmdzKGxp bmssIGxpbmtfc2V0dGluZywgJmx0X3NldHRpbmdzKTsKKwlpbml0aWFsaXplX3RyYWluaW5nX3Nl dHRpbmdzKAorCQkJbGluaywKKwkJCWxpbmtfc2V0dGluZywKKwkJCSZsaW5rLT5wcmVmZXJyZWRf dHJhaW5pbmdfc2V0dGluZ3MsCisJCQkmbHRfc2V0dGluZ3MpOwogCiAJLyogMS4gUGVyZm9ybV9j bG9ja19yZWNvdmVyeV9zZXF1ZW5jZS4gKi8KIApAQCAtMTE4NCw3ICsxMTg5LDExIEBAIGVudW0g bGlua190cmFpbmluZ19yZXN1bHQgZGNfbGlua19kcF9wZXJmb3JtX2xpbmtfdHJhaW5pbmcoCiAJ Ym9vbCBmZWNfZW5hYmxlOwogI2VuZGlmCiAKLQlpbml0aWFsaXplX3RyYWluaW5nX3NldHRpbmdz KGxpbmssIGxpbmtfc2V0dGluZywgJmx0X3NldHRpbmdzKTsKKwlpbml0aWFsaXplX3RyYWluaW5n X3NldHRpbmdzKAorCQkJbGluaywKKwkJCWxpbmtfc2V0dGluZywKKwkJCSZsaW5rLT5wcmVmZXJy ZWRfdHJhaW5pbmdfc2V0dGluZ3MsCisJCQkmbHRfc2V0dGluZ3MpOwogCiAJLyogMS4gc2V0IGxp bmsgcmF0ZSwgbGFuZSBjb3VudCBhbmQgc3ByZWFkLiAqLwogCWRwY2Rfc2V0X2xpbmtfc2V0dGlu Z3MobGluaywgJmx0X3NldHRpbmdzKTsKQEAgLTEyNDcsNiArMTI1NiwxNDYgQEAgYm9vbCBwZXJm b3JtX2xpbmtfdHJhaW5pbmdfd2l0aF9yZXRyaWVzKAogCXJldHVybiBmYWxzZTsKIH0KIAorc3Rh dGljIGVudW0gY2xvY2tfc291cmNlX2lkIGdldF9jbG9ja19zb3VyY2VfaWQoc3RydWN0IGRjX2xp bmsgKmxpbmspCit7CisJZW51bSBjbG9ja19zb3VyY2VfaWQgZHBfY3NfaWQgPSBDTE9DS19TT1VS Q0VfSURfVU5ERUZJTkVEOworCXN0cnVjdCBjbG9ja19zb3VyY2UgKmRwX2NzID0gbGluay0+ZGMt PnJlc19wb29sLT5kcF9jbG9ja19zb3VyY2U7CisKKwlpZiAoZHBfY3MgIT0gTlVMTCkgeworCQlk cF9jc19pZCA9IGRwX2NzLT5pZDsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBkcCBjbG9jayBzb3Vy Y2UgaXMgbm90IGluaXRpYWxpemVkIGZvciBzb21lIHJlYXNvbi4KKwkJICogU2hvdWxkIG5vdCBo YXBwZW4sIENMT0NLX1NPVVJDRV9JRF9FWFRFUk5BTCB3aWxsIGJlIHVzZWQKKwkJICovCisJCUFT U0VSVChkcF9jcyk7CisJfQorCisJcmV0dXJuIGRwX2NzX2lkOworfQorCitzdGF0aWMgdm9pZCBz ZXRfZHBfbXN0X21vZGUoc3RydWN0IGRjX2xpbmsgKmxpbmssIGJvb2wgbXN0X2VuYWJsZSkKK3sK KwlpZiAobXN0X2VuYWJsZSA9PSBmYWxzZSAmJgorCQlsaW5rLT50eXBlID09IGRjX2Nvbm5lY3Rp b25fbXN0X2JyYW5jaCkgeworCQkvKiBEaXNhYmxlIE1TVCBvbiBsaW5rLiBVc2Ugb25seSBsb2Nh bCBzaW5rLiAqLworCQlkcF9kaXNhYmxlX2xpbmtfcGh5X21zdChsaW5rLCBsaW5rLT5jb25uZWN0 b3Jfc2lnbmFsKTsKKworCQlsaW5rLT50eXBlID0gZGNfY29ubmVjdGlvbl9zaW5nbGU7CisJCWxp bmstPmxvY2FsX3NpbmsgPSBsaW5rLT5yZW1vdGVfc2lua3NbMF07CisJCWxpbmstPmxvY2FsX3Np bmstPnNpbmtfc2lnbmFsID0gU0lHTkFMX1RZUEVfRElTUExBWV9QT1JUOworCX0gZWxzZSBpZiAo bXN0X2VuYWJsZSA9PSB0cnVlICYmCisJCQlsaW5rLT50eXBlID09IGRjX2Nvbm5lY3Rpb25fc2lu Z2xlICYmCisJCQlsaW5rLT5yZW1vdGVfc2lua3NbMF0gIT0gTlVMTCkgeworCQkvKiBSZS1lbmFi bGUgTVNUIG9uIGxpbmsuICovCisJCWRwX2Rpc2FibGVfbGlua19waHkobGluaywgbGluay0+Y29u bmVjdG9yX3NpZ25hbCk7CisJCWRwX2VuYWJsZV9tc3Rfb25fc2luayhsaW5rLCB0cnVlKTsKKwor CQlsaW5rLT50eXBlID0gZGNfY29ubmVjdGlvbl9tc3RfYnJhbmNoOworCQlsaW5rLT5sb2NhbF9z aW5rLT5zaW5rX3NpZ25hbCA9IFNJR05BTF9UWVBFX0RJU1BMQVlfUE9SVF9NU1Q7CisJfQorfQor Citib29sIGRjX2xpbmtfZHBfc3luY19sdF9iZWdpbihzdHJ1Y3QgZGNfbGluayAqbGluaykKK3sK KwkvKiBCZWdpbiBTeW5jIExULiBEdXJpbmcgdGhpcyB0aW1lLAorCSAqIERQQ0Q6NjAwaCBtdXN0 IG5vdCBiZSBwb3dlcmVkIGRvd24uCisJICovCisJbGluay0+c3luY19sdF9pbl9wcm9ncmVzcyA9 IHRydWU7CisKKwkvKkNsZWFyIGFueSBleGlzdGluZyBwcmVmZXJyZWQgc2V0dGluZ3MuKi8KKwlt ZW1zZXQoJmxpbmstPnByZWZlcnJlZF90cmFpbmluZ19zZXR0aW5ncywgMCwKKwkJc2l6ZW9mKHN0 cnVjdCBkY19saW5rX3RyYWluaW5nX292ZXJyaWRlcykpOworCW1lbXNldCgmbGluay0+cHJlZmVy cmVkX2xpbmtfc2V0dGluZywgMCwKKwkJc2l6ZW9mKHN0cnVjdCBkY19saW5rX3NldHRpbmdzKSk7 CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworZW51bSBsaW5rX3RyYWluaW5nX3Jlc3VsdCBkY19saW5r X2RwX3N5bmNfbHRfYXR0ZW1wdCgKKyAgICBzdHJ1Y3QgZGNfbGluayAqbGluaywKKyAgICBzdHJ1 Y3QgZGNfbGlua19zZXR0aW5ncyAqbGlua19zZXR0aW5ncywKKyAgICBzdHJ1Y3QgZGNfbGlua190 cmFpbmluZ19vdmVycmlkZXMgKmx0X292ZXJyaWRlcykKK3sKKwlzdHJ1Y3QgbGlua190cmFpbmlu Z19zZXR0aW5ncyBsdF9zZXR0aW5nczsKKwllbnVtIGxpbmtfdHJhaW5pbmdfcmVzdWx0IGx0X3N0 YXR1cyA9IExJTktfVFJBSU5JTkdfU1VDQ0VTUzsKKwllbnVtIGRwX3BhbmVsX21vZGUgcGFuZWxf bW9kZSA9IERQX1BBTkVMX01PREVfREVGQVVMVDsKKwllbnVtIGNsb2NrX3NvdXJjZV9pZCBkcF9j c19pZCA9IENMT0NLX1NPVVJDRV9JRF9FWFRFUk5BTDsKKyNpZmRlZiBDT05GSUdfRFJNX0FNRF9E Q19EU0NfU1VQUE9SVAorCWJvb2wgZmVjX2VuYWJsZSA9IGZhbHNlOworI2VuZGlmCisKKwlpbml0 aWFsaXplX3RyYWluaW5nX3NldHRpbmdzKAorCQlsaW5rLAorCQlsaW5rX3NldHRpbmdzLAorCQls dF9vdmVycmlkZXMsCisJCSZsdF9zZXR0aW5ncyk7CisKKwkvKiBTZXR1cCBNU1QgTW9kZSAqLwor CWlmIChsdF9vdmVycmlkZXMtPm1zdF9lbmFibGUpCisJCXNldF9kcF9tc3RfbW9kZShsaW5rLCAq bHRfb3ZlcnJpZGVzLT5tc3RfZW5hYmxlKTsKKworCS8qIERpc2FibGUgbGluayAqLworCWRwX2Rp c2FibGVfbGlua19waHkobGluaywgbGluay0+Y29ubmVjdG9yX3NpZ25hbCk7CisKKwkvKiBFbmFi bGUgbGluayAqLworCWRwX2NzX2lkID0gZ2V0X2Nsb2NrX3NvdXJjZV9pZChsaW5rKTsKKwlkcF9l bmFibGVfbGlua19waHkobGluaywgbGluay0+Y29ubmVjdG9yX3NpZ25hbCwKKwkJZHBfY3NfaWQs IGxpbmtfc2V0dGluZ3MpOworCisjaWZkZWYgQ09ORklHX0RSTV9BTURfRENfRFNDX1NVUFBPUlQK KwkvKiBTZXQgRkVDIGVuYWJsZSAqLworCWZlY19lbmFibGUgPSBsdF9vdmVycmlkZXMtPmZlY19l bmFibGUgJiYgKmx0X292ZXJyaWRlcy0+ZmVjX2VuYWJsZTsKKwlkcF9zZXRfZmVjX3JlYWR5KGxp bmssIGZlY19lbmFibGUpOworI2VuZGlmCisKKwlpZiAobHRfb3ZlcnJpZGVzLT5hbHRlcm5hdGVf c2NyYW1ibGVyX3Jlc2V0KSB7CisJCWlmICgqbHRfb3ZlcnJpZGVzLT5hbHRlcm5hdGVfc2NyYW1i bGVyX3Jlc2V0KQorCQkJcGFuZWxfbW9kZSA9IERQX1BBTkVMX01PREVfRURQOworCQllbHNlCisJ CQlwYW5lbF9tb2RlID0gRFBfUEFORUxfTU9ERV9ERUZBVUxUOworCX0gZWxzZQorCQlwYW5lbF9t b2RlID0gZHBfZ2V0X3BhbmVsX21vZGUobGluayk7CisKKwlkcF9zZXRfcGFuZWxfbW9kZShsaW5r LCBwYW5lbF9tb2RlKTsKKworCS8qIEF0dGVtcHQgdG8gdHJhaW4gd2l0aCBnaXZlbiBsaW5rIHRy YWluaW5nIHNldHRpbmdzICovCisKKwkvKiBTZXQgbGluayByYXRlLCBsYW5lIGNvdW50IGFuZCBz cHJlYWQuICovCisJZHBjZF9zZXRfbGlua19zZXR0aW5ncyhsaW5rLCAmbHRfc2V0dGluZ3MpOwor CisJLyogMi4gcGVyZm9ybSBsaW5rIHRyYWluaW5nIChzZXQgbGluayB0cmFpbmluZyBkb25lCisJ ICogIHRvIGZhbHNlIGlzIGRvbmUgYXMgd2VsbCkKKwkgKi8KKwlsdF9zdGF0dXMgPSBwZXJmb3Jt X2Nsb2NrX3JlY292ZXJ5X3NlcXVlbmNlKGxpbmssICZsdF9zZXR0aW5ncyk7CisJaWYgKGx0X3N0 YXR1cyA9PSBMSU5LX1RSQUlOSU5HX1NVQ0NFU1MpIHsKKwkJbHRfc3RhdHVzID0gcGVyZm9ybV9j aGFubmVsX2VxdWFsaXphdGlvbl9zZXF1ZW5jZShsaW5rLAorCQkJCQkJJmx0X3NldHRpbmdzKTsK Kwl9CisKKwkvKiAzLiBTeW5jIExUIG11c3Qgc2tpcCBUUkFJTklOR19QQVRURVJOX1NFVDowICh2 aWRlbyBwYXR0ZXJuKSovCisJLyogNC4gcHJpbnQgc3RhdHVzIG1lc3NhZ2UqLworCXByaW50X3N0 YXR1c19tZXNzYWdlKGxpbmssICZsdF9zZXR0aW5ncywgbHRfc3RhdHVzKTsKKworCXJldHVybiBs dF9zdGF0dXM7Cit9CisKK2Jvb2wgZGNfbGlua19kcF9zeW5jX2x0X2VuZChzdHJ1Y3QgZGNfbGlu ayAqbGluaywgYm9vbCBsaW5rX2Rvd24pCit7CisJLyogSWYgaW5wdXQgcGFyYW1ldGVyIGlzIHNl dCwgc2h1dCBkb3duIHBoeS4KKwkgKiBTdGlsbCBzaG91bGRuJ3QgdHVybiBvZmYgZHBfcmVjZWl2 ZXIgKERQQ0Q6NjAwaCkKKwkgKi8KKwlpZiAobGlua19kb3duID09IHRydWUpIHsKKwkJZHBfZGlz YWJsZV9saW5rX3BoeShsaW5rLCBsaW5rLT5jb25uZWN0b3Jfc2lnbmFsKTsKKyNpZmRlZiBDT05G SUdfRFJNX0FNRF9EQ19EU0NfU1VQUE9SVAorCQlkcF9zZXRfZmVjX3JlYWR5KGxpbmssIGZhbHNl KTsKKyNlbmRpZgorCX0KKworCWxpbmstPnN5bmNfbHRfaW5fcHJvZ3Jlc3MgPSBmYWxzZTsKKwly ZXR1cm4gdHJ1ZTsKK30KKwogc3RhdGljIHN0cnVjdCBkY19saW5rX3NldHRpbmdzIGdldF9tYXhf bGlua19jYXAoc3RydWN0IGRjX2xpbmsgKmxpbmspCiB7CiAJLyogU2V0IERlZmF1bHQgbGluayBz ZXR0aW5ncyAqLwpAQCAtMTQwMSw3ICsxNTUwLDYgQEAgYm9vbCBkcF92ZXJpZnlfbGlua19jYXAo CiAJYm9vbCBzdWNjZXNzOwogCWJvb2wgc2tpcF9saW5rX3RyYWluaW5nOwogCWJvb2wgc2tpcF92 aWRlb19wYXR0ZXJuOwotCXN0cnVjdCBjbG9ja19zb3VyY2UgKmRwX2NzOwogCWVudW0gY2xvY2tf c291cmNlX2lkIGRwX2NzX2lkID0gQ0xPQ0tfU09VUkNFX0lEX0VYVEVSTkFMOwogCWVudW0gbGlu a190cmFpbmluZ19yZXN1bHQgc3RhdHVzOwogCXVuaW9uIGhwZF9pcnFfZGF0YSBpcnFfZGF0YTsK QEAgLTE0MjUsMTcgKzE1NzMsNyBAQCBib29sIGRwX3ZlcmlmeV9saW5rX2NhcCgKIAkvKiBkaXNh YmxlIFBIWSBkb25lIHBvc3NpYmxlIGJ5IEJJT1MsIHdpbGwgYmUgZG9uZSBieSBkcml2ZXIgaXRz ZWxmICovCiAJZHBfZGlzYWJsZV9saW5rX3BoeShsaW5rLCBsaW5rLT5jb25uZWN0b3Jfc2lnbmFs KTsKIAotCWRwX2NzID0gbGluay0+ZGMtPnJlc19wb29sLT5kcF9jbG9ja19zb3VyY2U7Ci0KLQlp ZiAoZHBfY3MpCi0JCWRwX2NzX2lkID0gZHBfY3MtPmlkOwotCWVsc2UgewotCQkvKgotCQkgKiBk cCBjbG9jayBzb3VyY2UgaXMgbm90IGluaXRpYWxpemVkIGZvciBzb21lIHJlYXNvbi4KLQkJICog U2hvdWxkIG5vdCBoYXBwZW4sIENMT0NLX1NPVVJDRV9JRF9FWFRFUk5BTCB3aWxsIGJlIHVzZWQK LQkJICovCi0JCUFTU0VSVChkcF9jcyk7Ci0JfQorCWRwX2NzX2lkID0gZ2V0X2Nsb2NrX3NvdXJj ZV9pZChsaW5rKTsKIAogCS8qIGxpbmsgdHJhaW5pbmcgc3RhcnRzIHdpdGggdGhlIG1heGltdW0g Y29tbW9uIHNldHRpbmdzCiAJICogc3VwcG9ydGVkIGJ5IGJvdGggc2luayBhbmQgQVNJQy4KQEAg LTIzMDcsNiArMjQ0NSwxMSBAQCBib29sIGlzX21zdF9zdXBwb3J0ZWQoc3RydWN0IGRjX2xpbmsg KmxpbmspCiAJdW5pb24gZHBjZF9yZXYgcmV2OwogCXVuaW9uIG1zdG1fY2FwIGNhcDsKIAorCWlm IChsaW5rLT5wcmVmZXJyZWRfdHJhaW5pbmdfc2V0dGluZ3MubXN0X2VuYWJsZSAmJgorCQkqbGlu ay0+cHJlZmVycmVkX3RyYWluaW5nX3NldHRpbmdzLm1zdF9lbmFibGUgPT0gZmFsc2UpIHsKKwkJ cmV0dXJuIGZhbHNlOworCX0KKwogCXJldi5yYXcgID0gMDsKIAljYXAucmF3ICA9IDA7CiAKQEAg LTMxNTgsNiArMzMwMSw5NCBAQCB2b2lkIGRwX2VuYWJsZV9tc3Rfb25fc2luayhzdHJ1Y3QgZGNf bGluayAqbGluaywgYm9vbCBlbmFibGUpCiAJY29yZV9saW5rX3dyaXRlX2RwY2QobGluaywgRFBf TVNUTV9DVFJMLCAmbXN0bUNudGwsIDEpOwogfQogCit2b2lkIGRwX3NldF9wYW5lbF9tb2RlKHN0 cnVjdCBkY19saW5rICpsaW5rLCBlbnVtIGRwX3BhbmVsX21vZGUgcGFuZWxfbW9kZSkKK3sKKwl1 bmlvbiBkcGNkX2VkcF9jb25maWcgZWRwX2NvbmZpZ19zZXQ7CisJYm9vbCBwYW5lbF9tb2RlX2Vk cCA9IGZhbHNlOworCisJbWVtc2V0KCZlZHBfY29uZmlnX3NldCwgJ1wwJywgc2l6ZW9mKHVuaW9u IGRwY2RfZWRwX2NvbmZpZykpOworCisJaWYgKHBhbmVsX21vZGUgIT0gRFBfUEFORUxfTU9ERV9E RUZBVUxUKSB7CisKKwkJc3dpdGNoIChwYW5lbF9tb2RlKSB7CisJCWNhc2UgRFBfUEFORUxfTU9E RV9FRFA6CisJCWNhc2UgRFBfUEFORUxfTU9ERV9TUEVDSUFMOgorCQkJcGFuZWxfbW9kZV9lZHAg PSB0cnVlOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJfQorCisJCS8q c2V0IGVkcCBwYW5lbCBtb2RlIGluIHJlY2VpdmVyKi8KKwkJY29yZV9saW5rX3JlYWRfZHBjZCgK KwkJCWxpbmssCisJCQlEUF9FRFBfQ09ORklHVVJBVElPTl9TRVQsCisJCQkmZWRwX2NvbmZpZ19z ZXQucmF3LAorCQkJc2l6ZW9mKGVkcF9jb25maWdfc2V0LnJhdykpOworCisJCWlmIChlZHBfY29u ZmlnX3NldC5iaXRzLlBBTkVMX01PREVfRURQCisJCQkhPSBwYW5lbF9tb2RlX2VkcCkgeworCQkJ ZW51bSBkZGNfcmVzdWx0IHJlc3VsdCA9IEREQ19SRVNVTFRfVU5LTk9XTjsKKworCQkJZWRwX2Nv bmZpZ19zZXQuYml0cy5QQU5FTF9NT0RFX0VEUCA9CisJCQlwYW5lbF9tb2RlX2VkcDsKKwkJCXJl c3VsdCA9IGNvcmVfbGlua193cml0ZV9kcGNkKAorCQkJCWxpbmssCisJCQkJRFBfRURQX0NPTkZJ R1VSQVRJT05fU0VULAorCQkJCSZlZHBfY29uZmlnX3NldC5yYXcsCisJCQkJc2l6ZW9mKGVkcF9j b25maWdfc2V0LnJhdykpOworCisJCQlBU1NFUlQocmVzdWx0ID09IEREQ19SRVNVTFRfU1VDRVNT RlVMTCk7CisJCX0KKwl9CisJRENfTE9HX0RFVEVDVElPTl9EUF9DQVBTKCJMaW5rOiAlZCBlRFAg cGFuZWwgbW9kZSBzdXBwb3J0ZWQ6ICVkICIKKwkJICJlRFAgcGFuZWwgbW9kZSBlbmFibGVkOiAl ZCBcbiIsCisJCSBsaW5rLT5saW5rX2luZGV4LAorCQkgbGluay0+ZHBjZF9jYXBzLnBhbmVsX21v ZGVfZWRwLAorCQkgcGFuZWxfbW9kZV9lZHApOworfQorCitlbnVtIGRwX3BhbmVsX21vZGUgZHBf Z2V0X3BhbmVsX21vZGUoc3RydWN0IGRjX2xpbmsgKmxpbmspCit7CisJLyogV2UgbmVlZCB0byBl eHBsaWNpdGx5IGNoZWNrIHRoYXQgY29ubmVjdG9yCisJICogaXMgbm90IERQLiBTb21lIFRyYXZp c19WR0EgZ2V0IHJlcG9ydGVkCisJICogYnkgdmlkZW8gYmlvcyBhcyBEUC4KKwkgKi8KKwlpZiAo bGluay0+Y29ubmVjdG9yX3NpZ25hbCAhPSBTSUdOQUxfVFlQRV9ESVNQTEFZX1BPUlQpIHsKKwor CQlzd2l0Y2ggKGxpbmstPmRwY2RfY2Fwcy5icmFuY2hfZGV2X2lkKSB7CisJCWNhc2UgRFBfQlJB TkNIX0RFVklDRV9JRF8yOgorCQkJaWYgKHN0cm5jbXAoCisJCQkJbGluay0+ZHBjZF9jYXBzLmJy YW5jaF9kZXZfbmFtZSwKKwkJCQlEUF9WR0FfTFZEU19DT05WRVJURVJfSURfMiwKKwkJCQlzaXpl b2YoCisJCQkJbGluay0+ZHBjZF9jYXBzLgorCQkJCWJyYW5jaF9kZXZfbmFtZSkpID09IDApIHsK KwkJCQkJcmV0dXJuIERQX1BBTkVMX01PREVfU1BFQ0lBTDsKKwkJCX0KKwkJCWJyZWFrOworCQlj YXNlIERQX0JSQU5DSF9ERVZJQ0VfSURfMzoKKwkJCWlmIChzdHJuY21wKGxpbmstPmRwY2RfY2Fw cy5icmFuY2hfZGV2X25hbWUsCisJCQkJRFBfVkdBX0xWRFNfQ09OVkVSVEVSX0lEXzMsCisJCQkJ c2l6ZW9mKAorCQkJCWxpbmstPmRwY2RfY2Fwcy4KKwkJCQlicmFuY2hfZGV2X25hbWUpKSA9PSAw KSB7CisJCQkJCXJldHVybiBEUF9QQU5FTF9NT0RFX1NQRUNJQUw7CisJCQl9CisJCQlicmVhazsK KwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGxpbmstPmRwY2RfY2Fwcy5w YW5lbF9tb2RlX2VkcCkgeworCQlyZXR1cm4gRFBfUEFORUxfTU9ERV9FRFA7CisJfQorCisJcmV0 dXJuIERQX1BBTkVMX01PREVfREVGQVVMVDsKK30KKwogI2lmZGVmIENPTkZJR19EUk1fQU1EX0RD X0RTQ19TVVBQT1JUCiB2b2lkIGRwX3NldF9mZWNfcmVhZHkoc3RydWN0IGRjX2xpbmsgKmxpbmss IGJvb2wgcmVhZHkpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkv ZGMvY29yZS9kY19saW5rX2h3c3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9j b3JlL2RjX2xpbmtfaHdzcy5jCmluZGV4IDg3OGY0N2I1OWQ1YS4uZGFhZmY3MzE5NDEzIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvY29yZS9kY19saW5rX2h3c3Mu YworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvY29yZS9kY19saW5rX2h3c3Mu YwpAQCAtNTUsNiArNTUsOSBAQCB2b2lkIGRwX3JlY2VpdmVyX3Bvd2VyX2N0cmwoc3RydWN0IGRj X2xpbmsgKmxpbmssIGJvb2wgb24pCiAKIAlzdGF0ZSA9IG9uID8gRFBfUE9XRVJfU1RBVEVfRDAg OiBEUF9QT1dFUl9TVEFURV9EMzsKIAorCWlmIChsaW5rLT5zeW5jX2x0X2luX3Byb2dyZXNzKQor CQlyZXR1cm47CisKIAljb3JlX2xpbmtfd3JpdGVfZHBjZChsaW5rLCBEUF9TRVRfUE9XRVIsICZz dGF0ZSwKIAkJCXNpemVvZihzdGF0ZSkpOwogfQpAQCAtMjQ1LDQ2ICsyNDgsNiBAQCB2b2lkIGRw X3NldF9od19sYW5lX3NldHRpbmdzKAogCWVuY29kZXItPmZ1bmNzLT5kcF9zZXRfbGFuZV9zZXR0 aW5ncyhlbmNvZGVyLCBsaW5rX3NldHRpbmdzKTsKIH0KIAotZW51bSBkcF9wYW5lbF9tb2RlIGRw X2dldF9wYW5lbF9tb2RlKHN0cnVjdCBkY19saW5rICpsaW5rKQotewotCS8qIFdlIG5lZWQgdG8g ZXhwbGljaXRseSBjaGVjayB0aGF0IGNvbm5lY3RvcgotCSAqIGlzIG5vdCBEUC4gU29tZSBUcmF2 aXNfVkdBIGdldCByZXBvcnRlZAotCSAqIGJ5IHZpZGVvIGJpb3MgYXMgRFAuCi0JICovCi0JaWYg KGxpbmstPmNvbm5lY3Rvcl9zaWduYWwgIT0gU0lHTkFMX1RZUEVfRElTUExBWV9QT1JUKSB7Ci0K LQkJc3dpdGNoIChsaW5rLT5kcGNkX2NhcHMuYnJhbmNoX2Rldl9pZCkgewotCQljYXNlIERQX0JS QU5DSF9ERVZJQ0VfSURfMjoKLQkJCWlmIChzdHJuY21wKAotCQkJCWxpbmstPmRwY2RfY2Fwcy5i cmFuY2hfZGV2X25hbWUsCi0JCQkJRFBfVkdBX0xWRFNfQ09OVkVSVEVSX0lEXzIsCi0JCQkJc2l6 ZW9mKAotCQkJCWxpbmstPmRwY2RfY2Fwcy4KLQkJCQlicmFuY2hfZGV2X25hbWUpKSA9PSAwKSB7 Ci0JCQkJcmV0dXJuIERQX1BBTkVMX01PREVfU1BFQ0lBTDsKLQkJCX0KLQkJCWJyZWFrOwotCQlj YXNlIERQX0JSQU5DSF9ERVZJQ0VfSURfMzoKLQkJCWlmIChzdHJuY21wKGxpbmstPmRwY2RfY2Fw cy5icmFuY2hfZGV2X25hbWUsCi0JCQkJRFBfVkdBX0xWRFNfQ09OVkVSVEVSX0lEXzMsCi0JCQkJ c2l6ZW9mKAotCQkJCWxpbmstPmRwY2RfY2Fwcy4KLQkJCQlicmFuY2hfZGV2X25hbWUpKSA9PSAw KSB7Ci0JCQkJcmV0dXJuIERQX1BBTkVMX01PREVfU1BFQ0lBTDsKLQkJCX0KLQkJCWJyZWFrOwot CQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAobGluay0+ZHBjZF9jYXBzLnBh bmVsX21vZGVfZWRwKSB7Ci0JCXJldHVybiBEUF9QQU5FTF9NT0RFX0VEUDsKLQl9Ci0KLQlyZXR1 cm4gRFBfUEFORUxfTU9ERV9ERUZBVUxUOwotfQotCiB2b2lkIGRwX3NldF9od190ZXN0X3BhdHRl cm4oCiAJc3RydWN0IGRjX2xpbmsgKmxpbmssCiAJZW51bSBkcF90ZXN0X3BhdHRlcm4gdGVzdF9w YXR0ZXJuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjX2Rw X3R5cGVzLmggYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZGNfZHBfdHlwZXMuaApp bmRleCBlZmE3YTQ3ZjZiN2UuLmVmNzlhNjg2ZTRjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2FtZC9kaXNwbGF5L2RjL2RjX2RwX3R5cGVzLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2Ft ZC9kaXNwbGF5L2RjL2RjX2RwX3R5cGVzLmgKQEAgLTEyOCw3ICsxMjgsMTAgQEAgc3RydWN0IGRj X2xpbmtfdHJhaW5pbmdfb3ZlcnJpZGVzIHsKIAllbnVtIGRjX2xpbmtfc3ByZWFkICpkb3duc3By ZWFkOwogCWJvb2wgKmFsdGVybmF0ZV9zY3JhbWJsZXJfcmVzZXQ7CiAJYm9vbCAqZW5oYW5jZWRf ZnJhbWluZzsKKwlib29sICptc3RfZW5hYmxlOworI2lmZGVmIENPTkZJR19EUk1fQU1EX0RDX0RT Q19TVVBQT1JUCiAJYm9vbCAqZmVjX2VuYWJsZTsKKyNlbmRpZgogfTsKIAogdW5pb24gZHBjZF9y ZXYgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjX2xpbmsu aCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY19saW5rLmgKaW5kZXggZDZmZjVh ZjcwYzcxLi45ZWE3NWRiMzQ4NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlz cGxheS9kYy9kY19saW5rLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2Rj X2xpbmsuaApAQCAtODQsNiArODQsNyBAQCBzdHJ1Y3QgZGNfbGluayB7CiAJYm9vbCBkcF9zc19v ZmY7CiAJYm9vbCBsaW5rX3N0YXRlX3ZhbGlkOwogCWJvb2wgYXV4X2FjY2Vzc19kaXNhYmxlZDsK Kwlib29sIHN5bmNfbHRfaW5fcHJvZ3Jlc3M7CiAKIAkvKiBjYXBzIGlzIHRoZSBzYW1lIGFzIHJl cG9ydGVkX2xpbmtfY2FwLiBsaW5rX3RyYWluZyB1c2UKIAkgKiByZXBvcnRlZF9saW5rX2NhcC4g V2lsbCBjbGVhbiB1cC4gIFRPRE8KQEAgLTIyOCw2ICsyMjksMTUgQEAgZW51bSBsaW5rX3RyYWlu aW5nX3Jlc3VsdCBkY19saW5rX2RwX3BlcmZvcm1fbGlua190cmFpbmluZygKIAljb25zdCBzdHJ1 Y3QgZGNfbGlua19zZXR0aW5ncyAqbGlua19zZXR0aW5nLAogCWJvb2wgc2tpcF92aWRlb19wYXR0 ZXJuKTsKIAorYm9vbCBkY19saW5rX2RwX3N5bmNfbHRfYmVnaW4oc3RydWN0IGRjX2xpbmsgKmxp bmspOworCitlbnVtIGxpbmtfdHJhaW5pbmdfcmVzdWx0IGRjX2xpbmtfZHBfc3luY19sdF9hdHRl bXB0KAorCXN0cnVjdCBkY19saW5rICpsaW5rLAorCXN0cnVjdCBkY19saW5rX3NldHRpbmdzICps aW5rX3NldHRpbmcsCisJc3RydWN0IGRjX2xpbmtfdHJhaW5pbmdfb3ZlcnJpZGVzICpsdF9zZXR0 aW5ncyk7CisKK2Jvb2wgZGNfbGlua19kcF9zeW5jX2x0X2VuZChzdHJ1Y3QgZGNfbGluayAqbGlu aywgYm9vbCBsaW5rX2Rvd24pOworCiB2b2lkIGRjX2xpbmtfZHBfZW5hYmxlX2hwZChjb25zdCBz dHJ1Y3QgZGNfbGluayAqbGluayk7CiAKIHZvaWQgZGNfbGlua19kcF9kaXNhYmxlX2hwZChjb25z dCBzdHJ1Y3QgZGNfbGluayAqbGluayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1k L2Rpc3BsYXkvZGMvaW5jL2RjX2xpbmtfZHAuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxh eS9kYy9pbmMvZGNfbGlua19kcC5oCmluZGV4IGM1MjkzZjk1MDhmYS4uMmVmMjM5NjNlMWY3IDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvaW5jL2RjX2xpbmtfZHAu aAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvaW5jL2RjX2xpbmtfZHAuaApA QCAtNjIsNiArNjIsOSBAQCBib29sIGlzX2RwX2FjdGl2ZV9kb25nbGUoY29uc3Qgc3RydWN0IGRj X2xpbmsgKmxpbmspOwogCiB2b2lkIGRwX2VuYWJsZV9tc3Rfb25fc2luayhzdHJ1Y3QgZGNfbGlu ayAqbGluaywgYm9vbCBlbmFibGUpOwogCitlbnVtIGRwX3BhbmVsX21vZGUgZHBfZ2V0X3BhbmVs X21vZGUoc3RydWN0IGRjX2xpbmsgKmxpbmspOwordm9pZCBkcF9zZXRfcGFuZWxfbW9kZShzdHJ1 Y3QgZGNfbGluayAqbGluaywgZW51bSBkcF9wYW5lbF9tb2RlIHBhbmVsX21vZGUpOworCiAjaWZk ZWYgQ09ORklHX0RSTV9BTURfRENfRFNDX1NVUFBPUlQKIHZvaWQgZHBfc2V0X2ZlY19yZWFkeShz dHJ1Y3QgZGNfbGluayAqbGluaywgYm9vbCByZWFkeSk7CiB2b2lkIGRwX3NldF9mZWNfZW5hYmxl KHN0cnVjdCBkY19saW5rICpsaW5rLCBib29sIGVuYWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvaW5jL2xpbmtfaHdzcy5oIGIvZHJpdmVycy9ncHUvZHJt L2FtZC9kaXNwbGF5L2RjL2luYy9saW5rX2h3c3MuaAppbmRleCAzNjgwODQ2Njc0ZTguLjRlZmY1 ZDM4YTJmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2luYy9s aW5rX2h3c3MuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvaW5jL2xpbmtf aHdzcy5oCkBAIC03Miw4ICs3Miw2IEBAIHZvaWQgZHBfc2V0X2h3X3Rlc3RfcGF0dGVybigKIAl1 aW50OF90ICpjdXN0b21fcGF0dGVybiwKIAl1aW50MzJfdCBjdXN0b21fcGF0dGVybl9zaXplKTsK IAotZW51bSBkcF9wYW5lbF9tb2RlIGRwX2dldF9wYW5lbF9tb2RlKHN0cnVjdCBkY19saW5rICps aW5rKTsKLQogdm9pZCBkcF9yZXRyYWluX2xpbmtfZHBfdGVzdChzdHJ1Y3QgZGNfbGluayAqbGlu aywKIAkJc3RydWN0IGRjX2xpbmtfc2V0dGluZ3MgKmxpbmtfc2V0dGluZywKIAkJYm9vbCBza2lw X3ZpZGVvX3BhdHRlcm4pOwotLSAKMi4yMi4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwphbWQtZ2Z4IG1haWxpbmcgbGlzdAphbWQtZ2Z4QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2FtZC1nZng=